@enfyra/kernel 1.1.59 → 1.1.61
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 +1 @@
|
|
|
1
|
-
"use strict";var x=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var $=x((ie,S)=>{"use strict";function j({handles:e,createHandleId:t,callIsolateCallback:n}){function a(f,r){if(r==null)return r;let l=typeof r;if(l==="string"||l==="number"||l==="boolean")return r;if(r instanceof Date)return{__date:r.toISOString()};if(r instanceof Set)return{__set:Array.from(r.values()).map(i=>a(f,i))};if(r instanceof Map)return{__map:Array.from(r.entries()).map(([i,d])=>[a(f,i),a(f,d)])};if(r instanceof RegExp)return{__regexp:{source:r.source,flags:r.flags}};if(r instanceof Error)return{__error:{name:r.name,message:r.message,stack:r.stack}};if(typeof URL<"u"&&r instanceof URL)return{__url:r.href};if(typeof URLSearchParams<"u"&&r instanceof URLSearchParams)return{__urlSearchParams:r.toString()};if(typeof Buffer<"u"&&Buffer.isBuffer(r)||r._isBuffer===!0)return o(f,r);if(ArrayBuffer.isView(r))return{__typedArray:r.constructor?.name||"Uint8Array",data:Array.from(r)};if(r instanceof ArrayBuffer)return{__arrayBuffer:Array.from(new Uint8Array(r))};if(Array.isArray(r))return r.map(i=>a(f,i));if(l==="object"&&U(r)){let i={};for(let[d,C]of Object.entries(r))i[d]=a(f,C);return i}return o(f,r)}function o(f,r){let l=t(f);return e.set(l,r),{__pkgHandle:l}}function c(f,r){if(!r||typeof r!="object")return r;if(r.__fnRef)return(...i)=>n(f,r.__fnRef,i);if(r.__pkgHandleArg){let i=e.get(r.__pkgHandleArg);if(!i)throw new Error(`Package argument handle not found: ${r.__pkgHandleArg}`);return i}if(r.__date)return new Date(r.__date);if(r.__set)return new Set(r.__set.map(i=>c(f,i)));if(r.__map)return new Map(r.__map.map(([i,d])=>[c(f,i),c(f,d)]));if(r.__regexp)return new RegExp(r.__regexp.source,r.__regexp.flags||"");if(r.__error){let i=new Error(r.__error.message||"");return i.name=r.__error.name||"Error",r.__error.stack&&(i.stack=r.__error.stack),i}if(r.__url)return new URL(r.__url);if(r.__urlSearchParams)return new URLSearchParams(r.__urlSearchParams);if(r.__blob)return new Blob([Uint8Array.from(r.__blob.data||[])],{type:r.__blob.type||""});if(r.__file){let i=[Uint8Array.from(r.__file.data||[])],d={type:r.__file.type||"",lastModified:r.__file.lastModified};return typeof File<"u"?new File(i,r.__file.name||"file",d):new Blob(i,d)}if(r.__formData){let i=new FormData;for(let[d,C]of r.__formData)i.append(d,c(f,C));return i}if(r.__typedArray){let i=globalThis[r.__typedArray]||Uint8Array;return new i(r.data||[])}if(r.__arrayBuffer)return Uint8Array.from(r.__arrayBuffer).buffer;if(Array.isArray(r))return r.map(i=>c(f,i));let l={};for(let[i,d]of Object.entries(r))l[i]=c(f,d);return l}function s(f,r){return JSON.parse(r||"[]").map(l=>c(f,l))}return{createPackageHandle:o,deserializePackageArg:c,deserializePackageArgs:s,serializePackageValue:a}}function U(e){if(e===null||typeof e!="object")return!1;let t=Object.getPrototypeOf(e);return t!==Object.prototype&&t!==null?!1:!Object.values(e).some(n=>typeof n=="function")}S.exports={createPackageRuntimeCodec:j}});var{AsyncLocalStorage:B}=require("node:async_hooks"),L=require("node:http"),N=require("node:https"),O=require("node:net"),H=require("node:tls"),_=require("node:http2"),{createPackageRuntimeCodec:z}=$(),R=new B,A=new Map,y=new Map,w=new Map,h=new Map,m=new Map,P=new Map,p=new Map,g=new Map,q=0,F=0,D=0;function G(e){return Math.max(1,Math.trunc(Number(e)||3e4))}function k(e){let t=m.get(e);return t||(t=new AbortController,m.set(e,t)),t}function T(e){k(e).abort();for(let[t,n]of P)if(n.taskId===e){try{typeof n.stream.destroy=="function"&&n.stream.destroy(new Error("Package stream cancelled")),typeof n.iterator?.return=="function"&&Promise.resolve(n.iterator.return()).catch(()=>{})}catch{}P.delete(t)}}function J(e){p.set(e,(p.get(e)||0)+1)}function V(e){let t=Math.max(0,(p.get(e)||1)-1);if(t>0){p.set(e,t);return}p.delete(e);let n=g.get(e);if(n){g.delete(e);for(let a of n)process.send?.({type:"taskCancelled",id:a,taskId:e,ok:!0,value:!0})}}function K(e,t){if(!p.has(t)){process.send?.({type:"taskCancelled",id:e,taskId:t,ok:!0,value:!0});return}let n=g.get(t);n||(n=new Set,g.set(t,n)),n.add(e)}function E(){return R.getStore()}function M(e){let t=E();if(!t||!e)return e;let n=k(t).signal;if(n.aborted)return e.destroy(new Error("Package call cancelled")),e;let a=()=>{try{e.destroy(new Error("Package call cancelled"))}catch{}};return n.addEventListener("abort",a,{once:!0}),e.once("close",()=>{n.removeEventListener("abort",a)}),e}function I(e){let t=E();if(!t||!e||typeof e.destroy!="function")return e;let n=k(t).signal;if(n.aborted)return e.destroy(new Error("Package call cancelled")),e;let a=()=>{try{e.destroy(new Error("Package call cancelled"))}catch{}};return n.addEventListener("abort",a,{once:!0}),e.once("close",()=>{n.removeEventListener("abort",a)}),e}function W(){for(let t of[L,N]){if(t.__enfyraCancelPatched)continue;t.__enfyraCancelPatched=!0;let n=t.request,a=t.get;t.request=function(...c){return M(n.apply(t,c))},t.get=function(...c){return M(a.apply(t,c))}}for(let[t,n]of[[O,["connect","createConnection"]],[H,["connect"]]])if(!t.__enfyraCancelPatched){t.__enfyraCancelPatched=!0;for(let a of n){let o=t[a];typeof o=="function"&&(t[a]=function(...s){return I(o.apply(t,s))})}}if(!_.__enfyraCancelPatched){_.__enfyraCancelPatched=!0;let t=_.connect;_.connect=function(...a){return I(t.apply(_,a))}}let e=globalThis.fetch;typeof e=="function"&&!globalThis.__enfyraFetchCancelPatched&&(globalThis.__enfyraFetchCancelPatched=!0,globalThis.fetch=function(n,a){let o=E();if(o){let c=a&&typeof a=="object"?a:{};c.signal||(a={...c,signal:k(o).signal})}return e.call(globalThis,n,a)})}W();function Q(e){let t=v(e.taskId,e.argsJson),n=(e.path||[]).join(".");if(e.packageName==="undici"&&(n==="request"||n==="fetch")){let a=t[1]&&typeof t[1]=="object"?t[1]:{};t[1]={...a,signal:k(e.taskId).signal}}return t}function X(e,t,n){T(t),process.send?.({id:e,ok:!1,error:{message:n,code:"ERR_PACKAGE_RUNTIME_TIMEOUT",details:{outcome:"unknown_outcome",retryable:!1}}})}var{createPackageHandle:Y,deserializePackageArg:Z,deserializePackageArgs:v,serializePackageValue:u}=z({handles:y,createHandleId:e=>`${e}:pkg_${++q}`,callIsolateCallback:te});async function ee(e){let t=e.fileUrl||e.name;if(A.has(t))return A.get(t);let n=e.name&&e.name.startsWith("node:")?e.name:e.fileUrl||e.name;if(!n)throw new Error(`Package "${e.name}" cannot be imported by package runtime`);let a=await import(n);return A.set(t,a),a}function b(e,t){if(!t||t.length===0)return{target:e&&e.default!==void 0?e.default:e,receiver:void 0};let n=e,a;for(let o=0;o<t.length;o++){let c=t[o];if(n==null&&o===0&&e.default!==void 0&&(n=e.default),n!=null&&c in n){a=n,n=n[c];continue}if(o===0&&e.default!==void 0&&e.default!==n&&c in e.default){a=e.default,n=e.default[c];continue}throw new Error(`Package export not found: ${t.join(".")}`)}return{target:n,receiver:a}}function te(e,t,n){return new Promise((a,o)=>{let c=`cb_${++F}`;w.set(c,{resolve:a,reject:o,taskId:e});try{process.send?.({type:"pkgCallbackCall",id:c,taskId:e,callbackId:t,argsJson:JSON.stringify(n.map(s=>u(e,s)))})}catch(s){w.delete(c),o(s)}})}async function re(e){let t=Q(e);if(e.op==="handleCall"){let c=y.get(e.handleId);if(!c)throw new Error(`Package handle not found: ${e.handleId}`);let{target:s,receiver:f}=b(c,e.path||[]);if(typeof s!="function")return u(e.taskId,s);let r=await s.apply(f||c,t);return u(e.taskId,r)}if(e.op==="handleGet"){let c=y.get(e.handleId);if(!c)throw new Error(`Package handle not found: ${e.handleId}`);let{target:s,receiver:f}=b(c,e.path||[]);return u(e.taskId,typeof s=="function"&&f?s.bind(f):s)}let n=await ee(e.package),{target:a,receiver:o}=b(n,e.path||[]);if(e.op==="construct"){if(typeof a!="function")throw new Error(`Package export is not constructable: ${e.packageName}.${(e.path||[]).join(".")}`);return Y(e.taskId,new a(...t))}return typeof a=="function"?u(e.taskId,await a.apply(o,t)):u(e.taskId,a)}function ne(e,t,n){return new Promise((a,o)=>{let c=`stream_${++D}`;h.set(c,{resolve:a,reject:o});try{process.send?.({type:"pkgStreamChunk",id:e,ackId:c,taskId:t,chunk:Buffer.from(n).toString("base64")},s=>{s&&(h.delete(c),o(s))})}catch(s){h.delete(c),o(s)}})}async function ae(e){let t=y.get(e.handleId);if(!t)throw new Error(`Package handle not found: ${e.handleId}`);let{target:n}=b(t,e.path||[]),a=n||t;if(!a||typeof a[Symbol.asyncIterator]!="function"&&typeof a.on!="function")throw new Error(`Package handle is not a readable stream: ${e.handleId}`);let o=typeof a[Symbol.asyncIterator]=="function"?a[Symbol.asyncIterator]():a;P.set(e.id,{taskId:e.taskId,stream:a,iterator:o});try{for(;;){let c=await o.next();if(c.done)break;await ne(e.id,e.taskId,c.value)}}finally{P.delete(e.id)}}function oe(e){T(e),m.delete(e);for(let t of y.keys())t.startsWith(`${e}:`)&&y.delete(t)}process.on("message",async e=>{if(!e)return;if(e.type==="pkgStreamAck"||e.type==="pkgStreamError"){let o=h.get(e.ackId);if(!o)return;h.delete(e.ackId),e.type==="pkgStreamAck"?o.resolve(!0):o.reject(new Error(e.error?.message||"Package stream failed"));return}if(e.type==="pkgCallbackResult"||e.type==="pkgCallbackError"){let o=w.get(e.id);if(!o)return;w.delete(e.id),e.type==="pkgCallbackResult"?o.resolve(Z(o.taskId,e.value)):o.reject(new Error(e.error?.message||"Package callback failed"));return}if(e.op==="cancelTask"){T(e.taskId),K(e.id,e.taskId);return}if(!e.op)return;let t=!1,n=G(e.timeoutMs),a=setTimeout(()=>{if(t)return;t=!0;let o=[e.op?`op=${e.op}`:null,e.packageName?`package=${e.packageName}`:null,e.handleId?`handle=${e.handleId}`:null,Array.isArray(e.path)?`path=${e.path.join(".")||"<root>"}`:null].filter(Boolean).join(" "),c=`Package runtime call timed out after ${n}ms${o?` (${o})`:""}`;X(e.id,e.taskId,c)},n);try{if(e.op==="releaseTask"){t=!0,clearTimeout(a),oe(e.taskId),e.fire||process.send?.({id:e.id,ok:!0,value:!0});return}J(e.taskId);let o=await R.run(e.taskId,()=>e.op==="streamHandle"?ae(e):re(e));if(t)return;t=!0,clearTimeout(a),process.send?.({id:e.id,ok:!0,value:o})}catch(o){if(t)return;t=!0,clearTimeout(a);let c=[e.op?`op=${e.op}`:null,e.packageName?`package=${e.packageName}`:null,e.handleId?`handle=${e.handleId}`:null,Array.isArray(e.path)?`path=${e.path.join(".")||"<root>"}`:null].filter(Boolean).join(" ");process.send?.({id:e.id,ok:!1,error:{message:c?`${o.message} (${c})`:o.message,stack:o.stack}})}finally{e.op!=="releaseTask"&&V(e.taskId)}});process.on("disconnect",()=>{process.exit(1)});
|
|
1
|
+
"use strict";var x=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var $=x((fe,S)=>{"use strict";function j({handles:e,createHandleId:t,callIsolateCallback:n}){function a(f,r){if(r==null)return r;let l=typeof r;if(l==="string"||l==="number"||l==="boolean")return r;if(r instanceof Date)return{__date:r.toISOString()};if(r instanceof Set)return{__set:Array.from(r.values()).map(i=>a(f,i))};if(r instanceof Map)return{__map:Array.from(r.entries()).map(([i,d])=>[a(f,i),a(f,d)])};if(r instanceof RegExp)return{__regexp:{source:r.source,flags:r.flags}};if(r instanceof Error)return{__error:{name:r.name,message:r.message,stack:r.stack}};if(typeof URL<"u"&&r instanceof URL)return{__url:r.href};if(typeof URLSearchParams<"u"&&r instanceof URLSearchParams)return{__urlSearchParams:r.toString()};if(typeof Buffer<"u"&&Buffer.isBuffer(r)||r._isBuffer===!0)return o(f,r);if(ArrayBuffer.isView(r))return{__typedArray:r.constructor?.name||"Uint8Array",data:Array.from(r)};if(r instanceof ArrayBuffer)return{__arrayBuffer:Array.from(new Uint8Array(r))};if(Array.isArray(r))return r.map(i=>a(f,i));if(l==="object"&&U(r)){let i={};for(let[d,A]of Object.entries(r))i[d]=a(f,A);return i}return o(f,r)}function o(f,r){let l=t(f);return e.set(l,r),{__pkgHandle:l}}function c(f,r){if(!r||typeof r!="object")return r;if(r.__fnRef)return(...i)=>n(f,r.__fnRef,i);if(r.__pkgHandleArg){let i=e.get(r.__pkgHandleArg);if(!i)throw new Error(`Package argument handle not found: ${r.__pkgHandleArg}`);return i}if(r.__date)return new Date(r.__date);if(r.__set)return new Set(r.__set.map(i=>c(f,i)));if(r.__map)return new Map(r.__map.map(([i,d])=>[c(f,i),c(f,d)]));if(r.__regexp)return new RegExp(r.__regexp.source,r.__regexp.flags||"");if(r.__error){let i=new Error(r.__error.message||"");return i.name=r.__error.name||"Error",r.__error.stack&&(i.stack=r.__error.stack),i}if(r.__url)return new URL(r.__url);if(r.__urlSearchParams)return new URLSearchParams(r.__urlSearchParams);if(r.__blob)return new Blob([Uint8Array.from(r.__blob.data||[])],{type:r.__blob.type||""});if(r.__file){let i=[Uint8Array.from(r.__file.data||[])],d={type:r.__file.type||"",lastModified:r.__file.lastModified};return typeof File<"u"?new File(i,r.__file.name||"file",d):new Blob(i,d)}if(r.__formData){let i=new FormData;for(let[d,A]of r.__formData)i.append(d,c(f,A));return i}if(r.__typedArray){let i=globalThis[r.__typedArray]||Uint8Array;return new i(r.data||[])}if(r.__arrayBuffer)return Uint8Array.from(r.__arrayBuffer).buffer;if(Array.isArray(r))return r.map(i=>c(f,i));let l={};for(let[i,d]of Object.entries(r))l[i]=c(f,d);return l}function s(f,r){return JSON.parse(r||"[]").map(l=>c(f,l))}return{createPackageHandle:o,deserializePackageArg:c,deserializePackageArgs:s,serializePackageValue:a}}function U(e){if(e===null||typeof e!="object")return!1;let t=Object.getPrototypeOf(e);return t!==Object.prototype&&t!==null?!1:!Object.values(e).some(n=>typeof n=="function")}S.exports={createPackageRuntimeCodec:j}});var{AsyncLocalStorage:B}=require("node:async_hooks"),N=require("node:http"),O=require("node:https"),H=require("node:net"),L=require("node:tls"),_=require("node:http2"),{createPackageRuntimeCodec:z}=$(),R=new B,C=new Map,y=new Map,w=new Map,h=new Map,m=new Map,P=new Map,p=new Map,g=new Map,D=0,F=0,q=0;function G(e){return Math.max(1,Math.trunc(Number(e)||3e4))}function k(e){let t=m.get(e);return t||(t=new AbortController,m.set(e,t)),t}function T(e){k(e).abort();for(let[t,n]of P)if(n.taskId===e){try{typeof n.stream.destroy=="function"&&n.stream.destroy(new Error("Package stream cancelled")),typeof n.iterator?.return=="function"&&Promise.resolve(n.iterator.return()).catch(()=>{})}catch{}P.delete(t)}}function J(e){p.set(e,(p.get(e)||0)+1)}function K(e){let t=Math.max(0,(p.get(e)||1)-1);if(t>0){p.set(e,t);return}p.delete(e);let n=g.get(e);if(n){g.delete(e);for(let a of n)process.send?.({type:"taskCancelled",id:a,taskId:e,ok:!0,value:!0})}}function V(e,t){if(!p.has(t)){process.send?.({type:"taskCancelled",id:e,taskId:t,ok:!0,value:!0});return}let n=g.get(t);n||(n=new Set,g.set(t,n)),n.add(e)}function E(){return R.getStore()}function M(e){let t=E();if(!t||!e)return e;let n=k(t).signal;if(n.aborted)return e.destroy(new Error("Package call cancelled")),e;let a=()=>{try{e.destroy(new Error("Package call cancelled"))}catch{}};return n.addEventListener("abort",a,{once:!0}),e.once("close",()=>{n.removeEventListener("abort",a)}),e}function I(e){let t=E();if(!t||!e||typeof e.destroy!="function")return e;let n=k(t).signal;if(n.aborted)return e.destroy(new Error("Package call cancelled")),e;let a=()=>{try{e.destroy(new Error("Package call cancelled"))}catch{}};return n.addEventListener("abort",a,{once:!0}),e.once("close",()=>{n.removeEventListener("abort",a)}),e}function W(){for(let t of[N,O]){if(t.__enfyraCancelPatched)continue;t.__enfyraCancelPatched=!0;let n=t.request,a=t.get;t.request=function(...c){return M(n.apply(t,c))},t.get=function(...c){return M(a.apply(t,c))}}for(let[t,n]of[[H,["connect","createConnection"]],[L,["connect"]]])if(!t.__enfyraCancelPatched){t.__enfyraCancelPatched=!0;for(let a of n){let o=t[a];typeof o=="function"&&(t[a]=function(...s){return I(o.apply(t,s))})}}if(!_.__enfyraCancelPatched){_.__enfyraCancelPatched=!0;let t=_.connect;_.connect=function(...a){return I(t.apply(_,a))}}let e=globalThis.fetch;typeof e=="function"&&!globalThis.__enfyraFetchCancelPatched&&(globalThis.__enfyraFetchCancelPatched=!0,globalThis.fetch=function(n,a){let o=E();if(o){let c=a&&typeof a=="object"?a:{};c.signal||(a={...c,signal:k(o).signal})}return e.call(globalThis,n,a)})}W();function Y(e){let t=v(e.taskId,e.argsJson),n=(e.path||[]).join(".");if(e.packageName==="undici"&&(n==="request"||n==="fetch")){let a=t[1]&&typeof t[1]=="object"?t[1]:{};t[1]={...a,signal:k(e.taskId).signal}}return t}function Q(e,t,n){T(t),process.send?.({id:e,ok:!1,error:{message:n,code:"ERR_PACKAGE_RUNTIME_TIMEOUT",details:{outcome:"unknown_outcome",retryable:!1}}})}var{createPackageHandle:X,deserializePackageArg:Z,deserializePackageArgs:v,serializePackageValue:u}=z({handles:y,createHandleId:e=>`${e}:pkg_${++D}`,callIsolateCallback:re}),ee=new Set(["__proto__","prototype","constructor","caller","callee","arguments"]);async function te(e){let t=e.fileUrl||e.name;if(C.has(t))return C.get(t);let n=e.name&&e.name.startsWith("node:")?e.name:e.fileUrl||e.name;if(!n)throw new Error(`Package "${e.name}" cannot be imported by package runtime`);let a=await import(n);return C.set(t,a),a}function b(e,t){if(!t||t.length===0)return{target:e&&e.default!==void 0?e.default:e,receiver:void 0};let n=e,a;for(let o=0;o<t.length;o++){let c=t[o];if(ee.has(c))throw new Error(`Package property is forbidden: ${c}`);if(n==null&&o===0&&e.default!==void 0&&(n=e.default),n!=null&&c in n){a=n,n=n[c];continue}if(o===0&&e.default!==void 0&&e.default!==n&&c in e.default){a=e.default,n=e.default[c];continue}throw new Error(`Package export not found: ${t.join(".")}`)}return{target:n,receiver:a}}function re(e,t,n){return new Promise((a,o)=>{let c=`cb_${++F}`;w.set(c,{resolve:a,reject:o,taskId:e});try{process.send?.({type:"pkgCallbackCall",id:c,taskId:e,callbackId:t,argsJson:JSON.stringify(n.map(s=>u(e,s)))})}catch(s){w.delete(c),o(s)}})}async function ne(e){let t=Y(e);if(e.op==="handleCall"){let c=y.get(e.handleId);if(!c)throw new Error(`Package handle not found: ${e.handleId}`);let{target:s,receiver:f}=b(c,e.path||[]);if(typeof s!="function")return u(e.taskId,s);let r=await s.apply(f||c,t);return u(e.taskId,r)}if(e.op==="handleGet"){let c=y.get(e.handleId);if(!c)throw new Error(`Package handle not found: ${e.handleId}`);let{target:s,receiver:f}=b(c,e.path||[]);return u(e.taskId,typeof s=="function"&&f?s.bind(f):s)}let n=await te(e.package),{target:a,receiver:o}=b(n,e.path||[]);if(e.op==="construct"){if(typeof a!="function")throw new Error(`Package export is not constructable: ${e.packageName}.${(e.path||[]).join(".")}`);return X(e.taskId,new a(...t))}return typeof a=="function"?u(e.taskId,await a.apply(o,t)):u(e.taskId,a)}function ae(e,t,n){return new Promise((a,o)=>{let c=`stream_${++q}`;h.set(c,{resolve:a,reject:o});try{process.send?.({type:"pkgStreamChunk",id:e,ackId:c,taskId:t,chunk:Buffer.from(n).toString("base64")},s=>{s&&(h.delete(c),o(s))})}catch(s){h.delete(c),o(s)}})}async function oe(e){let t=y.get(e.handleId);if(!t)throw new Error(`Package handle not found: ${e.handleId}`);let{target:n}=b(t,e.path||[]),a=n||t;if(!a||typeof a[Symbol.asyncIterator]!="function"&&typeof a.on!="function")throw new Error(`Package handle is not a readable stream: ${e.handleId}`);let o=typeof a[Symbol.asyncIterator]=="function"?a[Symbol.asyncIterator]():a;P.set(e.id,{taskId:e.taskId,stream:a,iterator:o});try{for(;;){let c=await o.next();if(c.done)break;await ae(e.id,e.taskId,c.value)}}finally{P.delete(e.id)}}function ce(e){T(e),m.delete(e);for(let t of y.keys())t.startsWith(`${e}:`)&&y.delete(t)}process.on("message",async e=>{if(!e)return;if(e.type==="pkgStreamAck"||e.type==="pkgStreamError"){let o=h.get(e.ackId);if(!o)return;h.delete(e.ackId),e.type==="pkgStreamAck"?o.resolve(!0):o.reject(new Error(e.error?.message||"Package stream failed"));return}if(e.type==="pkgCallbackResult"||e.type==="pkgCallbackError"){let o=w.get(e.id);if(!o)return;w.delete(e.id),e.type==="pkgCallbackResult"?o.resolve(Z(o.taskId,e.value)):o.reject(new Error(e.error?.message||"Package callback failed"));return}if(e.op==="cancelTask"){T(e.taskId),V(e.id,e.taskId);return}if(!e.op)return;let t=!1,n=G(e.timeoutMs),a=setTimeout(()=>{if(t)return;t=!0;let o=[e.op?`op=${e.op}`:null,e.packageName?`package=${e.packageName}`:null,e.handleId?`handle=${e.handleId}`:null,Array.isArray(e.path)?`path=${e.path.join(".")||"<root>"}`:null].filter(Boolean).join(" "),c=`Package runtime call timed out after ${n}ms${o?` (${o})`:""}`;Q(e.id,e.taskId,c)},n);try{if(e.op==="releaseTask"){t=!0,clearTimeout(a),ce(e.taskId),e.fire||process.send?.({id:e.id,ok:!0,value:!0});return}J(e.taskId);let o=await R.run(e.taskId,()=>e.op==="streamHandle"?oe(e):ne(e));if(t)return;t=!0,clearTimeout(a),process.send?.({id:e.id,ok:!0,value:o})}catch(o){if(t)return;t=!0,clearTimeout(a);let c=[e.op?`op=${e.op}`:null,e.packageName?`package=${e.packageName}`:null,e.handleId?`handle=${e.handleId}`:null,Array.isArray(e.path)?`path=${e.path.join(".")||"<root>"}`:null].filter(Boolean).join(" ");process.send?.({id:e.id,ok:!1,error:{message:c?`${o.message} (${c})`:o.message,stack:o.stack}})}finally{e.op!=="releaseTask"&&K(e.taskId)}});process.on("disconnect",()=>{process.exit(1)});
|
package/dist/execution/worker.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
"use strict";var ne=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var ae=ne((
|
|
1
|
+
"use strict";var ne=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var ae=ne((Ye,re)=>{"use strict";var{fork:ve}=require("child_process"),be=require("path");function xe({workerDir:e,activeTaskContexts:t}){let s=new Map,n=new Map,r=new Map,i=new Map,o=null,y=0,f=1e3;function w(l){return Math.max(1,Math.trunc(Number(l)||3e4))}function b(l,a,c){let _=new Error(l);return _.code=a,_.details=c,_}function R(l,a){for(let[c,_]of n)_.child===l&&(clearTimeout(_.timer),n.delete(c),r.delete(c),_.reject(a))}function d(l){for(let[a,c]of i)c.child===l&&(clearTimeout(c.timer),i.delete(a))}function u(l,a){if(!l.connected)return;let c=`cancel_${++y}`,_=setTimeout(()=>{i.delete(c);try{l.kill()}catch{}},f);_.unref?.(),i.set(c,{child:l,timer:_});try{l.send({op:"cancelTask",taskId:a,id:c})}catch{clearTimeout(_),i.delete(c);try{l.kill()}catch{}}}function m(l){let a=typeof l=="string"?JSON.parse(l):l;if(a?.error)throw new Error(a.error);return a?.value}async function v(l){let a=t.get(l.taskId);if(!a)throw new Error(`Package callback context not found: ${l.taskId}`);let c=JSON.stringify(l.callbackId),_=JSON.stringify(l.argsJson||"[]"),h=await a.evalClosure(`return __invokeRuntimeCallback(${c}, ${_});`,[],{arguments:{copy:!0},result:{promise:!0,copy:!0}});return m(h)}function k(){if(o&&o.connected)return o;let l=be.join(e,"package-runtime.child.js"),a=ve(l,[],{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",c=>{if(!c||!c.id)return;if(c.type==="pkgStreamChunk"){let h=r.get(c.id);if(!h)return;h.onChunk(Buffer.from(c.chunk||"","base64")).then(()=>{try{a.send({type:"pkgStreamAck",ackId:c.ackId})}catch{}}).catch(M=>{try{a.send({type:"pkgStreamError",ackId:c.ackId,error:{message:M.message,stack:M.stack}})}catch{}});return}if(c.type==="taskCancelled"){let h=i.get(c.id);if(!h||h.child!==a)return;clearTimeout(h.timer),i.delete(c.id);return}if(c.type==="pkgCallbackCall"){v(c).then(h=>{try{a.send({type:"pkgCallbackResult",id:c.id,value:h})}catch{}}).catch(h=>{try{a.send({type:"pkgCallbackError",id:c.id,error:{message:h.message,stack:h.stack}})}catch{}});return}let _=n.get(c.id);if(_)if(clearTimeout(_.timer),n.delete(c.id),r.delete(c.id),c.ok)_.resolve(c.value);else{c.error?.code==="ERR_PACKAGE_RUNTIME_TIMEOUT"&&u(a,_.taskId);let h=b(c.error?.message||"Package runtime call failed",c.error?.code,c.error?.details);h.stack=c.error?.stack||h.stack,_.reject(h)}}),a.on("exit",(c,_)=>{o===a&&(o=null),d(a),R(a,b(`Package runtime exited${_?` with signal ${_}`:` with code ${c}`}`,"ERR_PACKAGE_RUNTIME_LOST",{outcome:"unknown_outcome",retryable:!1}))}),a.on("error",c=>{o===a&&(o=null),d(a),R(a,b(c.message,"ERR_PACKAGE_RUNTIME_LOST",{outcome:"unknown_outcome",retryable:!1}))}),a}function P(l){return new Promise((a,c)=>{let _=k(),h=`pkg_${++y}`,M=w(l.timeoutMs),J=setTimeout(()=>{n.delete(h),r.delete(h),u(_,l.taskId),c(b(`Package runtime call timed out after ${M}ms`,"ERR_PACKAGE_RUNTIME_TIMEOUT",{outcome:"unknown_outcome",retryable:!1}))},M);n.set(h,{child:_,taskId:l.taskId,resolve:a,reject:c,timer:J});try{_.send({...l,id:h},I=>{I&&(clearTimeout(J),n.delete(h),c(I))})}catch(I){clearTimeout(J),n.delete(h),c(I)}})}function C(l,a,c,_=[],h=3e4){return new Promise((M,J)=>{let I=k(),N=`pkg_${++y}`,Q=w(h),ee=setTimeout(()=>{n.delete(N),r.delete(N),u(I,l),J(b(`Package runtime stream timed out after ${Q}ms`,"ERR_PACKAGE_RUNTIME_TIMEOUT",{outcome:"unknown_outcome",retryable:!1}))},Q);n.set(N,{child:I,taskId:l,resolve:M,reject:J,timer:ee}),r.set(N,{onChunk:c});try{I.send({op:"streamHandle",taskId:l,handleId:a,path:_,id:N,timeoutMs:Q},G=>{G&&(clearTimeout(ee),n.delete(N),r.delete(N),J(G))})}catch(G){clearTimeout(ee),n.delete(N),r.delete(N),J(G)}})}function D(l){try{if(!o||!o.connected)return;o.send({...l,id:`pkg_${++y}`,fire:!0})}catch{}}function p(l){try{if(!o||!o.connected)return;u(o,l)}catch{}}async function H(l,a){let c=s.get(l);if(!c)throw new Error("Package context is not available");if(a.handleId)return P({op:a.kind==="get"?"handleGet":"handleCall",taskId:l,handleId:a.handleId,path:a.path||[],argsJson:a.argsJson||"[]",timeoutMs:a.timeoutMs});let _=c.get(a.packageName);if(!_)throw new Error(`Package "${a.packageName}" is not available`);return P({op:a.kind==="construct"?"construct":"call",taskId:l,packageName:a.packageName,package:{name:_.name,fileUrl:_.fileUrl},path:a.path||[],argsJson:a.argsJson||"[]",timeoutMs:a.timeoutMs})}function g(l,a){s.set(l,a)}function x(l){s.delete(l),D({op:"releaseTask",taskId:l})}function $(){if(o){try{o.kill()}catch{}o=null}}return{cleanupTaskPackages:x,cancelTask:p,executePackageRuntimeCall:H,setTaskPackages:g,streamPackageHandle:C,shutdownPackageRuntime:$}}re.exports={createPackageRuntimeBridge:xe}});var oe=ne((Ze,se)=>{"use strict";var Pe=`
|
|
2
2
|
"use strict";
|
|
3
3
|
let $ctx = {};
|
|
4
4
|
let $pkgs = {};
|
|
5
5
|
let __taskId = null;
|
|
6
6
|
let __taskDeadlineMs = 0;
|
|
7
7
|
let __logs = [];
|
|
8
|
+
let __logBytes = 0;
|
|
8
9
|
let __runtimeCallbackCounter = 0;
|
|
9
10
|
let __runtimeCallbacks = new Map();
|
|
10
11
|
let __pendingRuntimeTasks = [];
|
|
@@ -796,6 +797,7 @@ function __resetTask(snapshot, taskId, timeoutMs, deadlineMs) {
|
|
|
796
797
|
? providedDeadlineMs
|
|
797
798
|
: Date.now() + Math.max(1, Math.trunc(Number(timeoutMs) || 30000));
|
|
798
799
|
__logs = [];
|
|
800
|
+
__logBytes = 0;
|
|
799
801
|
__runtimeCallbackCounter = 0;
|
|
800
802
|
__runtimeCallbacks = new Map();
|
|
801
803
|
__pendingRuntimeTasks = [];
|
|
@@ -916,8 +918,13 @@ function __resetTask(snapshot, taskId, timeoutMs, deadlineMs) {
|
|
|
916
918
|
});
|
|
917
919
|
$ctx.$logs = (...args) => {
|
|
918
920
|
for (const a of args) {
|
|
919
|
-
|
|
920
|
-
|
|
921
|
+
if (__logs.length >= 200 || __logBytes >= 40000) { $ctx.$share.$logsTruncated = true; break; }
|
|
922
|
+
let text;
|
|
923
|
+
try { text = JSON.stringify(a); } catch { text = String(a); }
|
|
924
|
+
text = text === undefined ? String(a) : text;
|
|
925
|
+
if (text.length > 8192) { text = JSON.stringify(text.slice(0, 8192) + '[Truncated]'); $ctx.$share.$logsTruncated = true; }
|
|
926
|
+
__logBytes += text.length;
|
|
927
|
+
try { __logs.push(JSON.parse(text)); } catch { __logs.push(text); }
|
|
921
928
|
}
|
|
922
929
|
};
|
|
923
930
|
}
|
|
@@ -949,48 +956,48 @@ function __cleanupTask() {
|
|
|
949
956
|
__pendingRuntimeTasks = [];
|
|
950
957
|
return true;
|
|
951
958
|
}
|
|
952
|
-
`;function
|
|
953
|
-
`),
|
|
954
|
-
`);for(let
|
|
955
|
-
`)}function
|
|
959
|
+
`;function Se(e){return Pe.replace("%%PKG_SETUP%%",e)}se.exports={buildSetupCode:Se}});var{parentPort:Ce}=require("worker_threads"),S=Ce||{on(e,t){e==="message"&&process.on("message",t)},postMessage(e){process.send?.(e)}},ie=require("fs"),{fileURLToPath:Re}=require("url"),{createPackageRuntimeBridge:$e}=ae(),{buildSetupCode:Te}=oe(),q;try{q=require("isolated-vm")}catch(e){S.postMessage({type:"error",message:"isolated-vm not available: "+e.message}),process.exit(1)}var K=new Map,_e=0,O=new Map,E=new Map,j=new Map,U=$e({workerDir:__dirname,activeTaskContexts:O}),Me=500,Ne=5e3,ce=new WeakMap,pe=new WeakMap,W={created:0,reused:0,released:0,evicted:0,scrubFailed:0};function B(e){let t=j.get(e);return Math.max(1,Math.ceil((t??Date.now()+3e4)-Date.now()))}var A=null,le=0,ue=0,de=0;async function Ae(){let e=Date.now();if(e-ue<Ne)return de;if(ue=e,!A)return 0;let t=0;for(let s of A){let n=s?.isolate;if(!(!n||n.isDisposed))try{let r=await n.getHeapStatistics(),i=r.heap_size_limit||1,o=r.used_heap_size/i;o>t&&(t=o)}catch{}}return de=t,t}async function F(e){e.heapRatio=await Ae(),e.runnerRssBytes=process.memoryUsage().rss,e.contextStats=Ee(),S.postMessage(e)}function Ee(){return{...W,idle:0}}function ge(e,t,s){if(!A){let n=Math.max(1,Math.trunc(Number(t)||8));A=new Array(n).fill(null)}for(let n=0;n<A.length;n++){let r=(le+n)%A.length,i=A[r];if((!i||!i.isolate||i.isolate.isDisposed)&&(i={isolate:new q.Isolate({memoryLimit:e}),taskIds:new Set},A[r]=i),i.taskIds.size<s)return le=(r+1)%A.length,i}throw new Error("No isolate lane is available")}function z(e,t,s){for(let n of[...e.taskIds])n!==t&&(e.taskIds.delete(n),E.delete(n),O.delete(n),j.delete(n),U.cancelTask(n),V(n),S.postMessage({type:"result",id:n,success:!1,error:{message:"Isolate was disposed because a sibling task could not continue",code:"ERR_EXECUTOR_ISOLATE_LOST",details:{outcome:"unknown_outcome",retryable:!1,reason:s}}}),S.postMessage({type:"taskReleased",id:n}));try{e.isolate.dispose()}catch{}}function Oe(e){let t=E.get(e);if(!t){S.postMessage({type:"taskCancelled",id:e});return}z(t,e,"sibling_cancelled"),U.cancelTask(e),E.delete(e),O.delete(e),j.delete(e),t.taskIds.delete(e),V(e),S.postMessage({type:"taskCancelled",id:e})}function ye(e,t){t.taskIds.delete(e)&&(O.delete(e),E.delete(e),j.delete(e),V(e),S.postMessage({type:"taskReleased",id:e}))}async function T(e,t,s){let n=ce.get(e);n||(n=new Map,ce.set(e,n));let r=n.get(t);if(r)return r;let i;try{i=await e.compileScript(t,{filename:s})}catch(o){throw o&&typeof o=="object"&&(o.executionStage="compile"),o}if(n.set(t,i),n.size>Me){let o=n.keys().next().value;n.delete(o)}return i}S.on("message",async e=>{if(e.type==="execute")Ge(e).catch(async t=>{await F({type:"result",id:e.id,success:!1,error:{message:t.message,stack:t.stack}})});else if(e.type==="executeBatch")We(e).catch(async t=>{await F({type:"result",id:e.id,success:!1,error:{message:t.message,stack:t.stack}})});else if(e.type==="invokeRuntimeCallback")Je(e).catch(t=>{S.postMessage({type:"runtimeCallbackResult",callId:e.callId,error:t?.message||String(t)})});else if(e.type==="callResult"){let t=K.get(e.callId);t&&(K.delete(e.callId),t.resolve(e.result))}else if(e.type==="callError"){let t=K.get(e.callId);t&&(K.delete(e.callId),t.reject(new Error(e.error)))}else e.type==="cancelTask"&&Oe(e.id)});async function Je(e){let t=O.get(e.id);if(!t){S.postMessage({type:"runtimeCallbackResult",callId:e.callId,error:`Runtime callback context not found: ${e.id}`});return}let s=await t.evalClosure(`return __invokeRuntimeCallback(${JSON.stringify(e.callbackId)}, ${JSON.stringify(e.argsJson||"[]")});`,[],{arguments:{copy:!0},result:{promise:!0,copy:!0}}),n=JSON.parse(s);S.postMessage({type:"runtimeCallbackResult",callId:e.callId,...n})}function L(e,t,s){return new Promise((n,r)=>{let i=`cb_${++_e}`;K.set(i,{resolve:n,reject:r}),S.postMessage({type:t,id:e,callId:i,...s})})}function Ie(e,t,s){S.postMessage({type:t,id:e,callId:`f_${++_e}`,...s})}async function je(e,t){if(t?.method!=="stream")return L(e,"resCall",t);let s=JSON.parse(t.argsJson||"[]"),n=s[0],r=s[1]||{},i=n?.__pkgHandleArg;if(!i)return L(e,"resCall",t);let o=r.observer&&typeof r.observer=="object"?r.observer.__fnRef:null,y=r.transform&&typeof r.transform=="object"?r.transform.__fnRef:null,f=o||y?new TextDecoder("utf-8"):null;delete r.observer,delete r.transform;let w={...r};await L(e,"resCall",{method:"streamStart",argsJson:JSON.stringify([null,w])});let b=async(u,m,v)=>{if(!u)return;let k=O.get(e);if(!k)return;let P=await k.evalClosure(`return __invokeRuntimeCallback(${JSON.stringify(u)}, ${JSON.stringify(JSON.stringify([m,v]))});`,[],{arguments:{copy:!0},result:{promise:!0,copy:!0}}),C=JSON.parse(P);if(C?.error)throw new Error(C.error);if(C?.value?.__e!=="u")return C?.value},R=async(u,m)=>{if(o)try{await b(o,u,m)}catch{}},d=async(u,m,v)=>{let k=u;if(y){let C=await b(y,v,m);if(C===null)return;C!==void 0&&(k=Buffer.from(String(C)))}let P=Buffer.from(k);P.length!==0&&await L(e,"resCall",{method:"streamChunk",chunk:P.toString("base64")})};try{await U.streamPackageHandle(e,i,async m=>{let v="";try{v=f?f.decode(Buffer.from(m),{stream:!0}):""}catch{}await R(v,"chunk"),await d(m,"chunk",v)},[],B(e));let u="";try{u=f?f.decode():""}catch{}await R(u,"end"),await d("","end",u),await L(e,"resCall",{method:"streamEnd"})}catch(u){try{await L(e,"resCall",{method:"streamError",error:{message:u.message,stack:u.stack}})}catch{}throw await R("","error"),u}return JSON.stringify({__e:"u"})}function Ue(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=Re(e.fileUrl)),!t||!ie.existsSync(t)?null:ie.readFileSync(t,"utf8")}async function He(e,t,s){try{let n=Ue(s);if(!n)return null;let r=await e.compileModule(n,{filename:`pkg:${s.safeName}`});await r.instantiate(t,o=>{throw new Error(`Unresolved import in package ${s.safeName}: ${o}`)}),await r.evaluate({timeout:1e4});let i=await r.namespace.get("default");return i!==void 0&&i.typeof!=="undefined"?i.derefInto({release:!1}):r.namespace.derefInto({release:!1})}catch{return null}}function he(e,t){let s=new Set(t.map(f=>f.name)),n=new Set,r=String(e||""),i=/\b(?:\$ctx\.)?\$pkgs\s*\[\s*(['"`])([^'"`]+)\1\s*\]/g,o=/\brequire\s*\(\s*(['"`])([^'"`]+)\1\s*\)/g,y=/\b(?:\$ctx\.)?\$pkgs\.([A-Za-z_$][\w$]*)/g;for(let f of[i,o])for(let w of r.matchAll(f)){let b=w[2];s.has(b)&&n.add(b)}for(let f of r.matchAll(y)){let w=f[1];s.has(w)&&n.add(w)}return n}async function Le(e,t,s,n){let r=await e.createContext(),i=r.global;await i.set("global",i.derefInto());let o=[],y=[],f=new Map;for(let d of s){f.set(d.name,d);let u=n.has(d.name)?await He(e,r,d):null;u!==null?(await i.set(`__pkg_${d.safeName}`,u),o.push(d)):y.push(d)}U.setTaskPackages(t,f),await i.set("__callRef",new q.Reference(async(d,u,m)=>{let v=JSON.parse(m);if(u==="pkgCall")try{return JSON.stringify(await U.executePackageRuntimeCall(d,v))}catch(k){throw new Error(JSON.stringify({__userThrow:!0,message:k.message,code:k.code,details:k.details}))}return u==="resCall"?je(d,v):L(d,u,v)})),await i.set("__fireRef",new q.Reference((d,u,m)=>{let v=JSON.parse(m);Ie(d,u,v)}));let w=o.map(d=>`$pkgs[${JSON.stringify(d.name)}] = __pkg_${d.safeName};`).concat(y.map(d=>`$pkgs[${JSON.stringify(d.name)}] = __createPkgProxy(${JSON.stringify(d.name)}, []);`)).join(`
|
|
960
|
+
`),b=Te(w);return await(await T(e,b,"setup.js")).run(r,{timeout:B(t)}),pe.set(r,f),r}async function me(e,t,s,n,r,i,o){let y=e.isolate,f=await Le(y,t,s,r);W.created++,U.setTaskPackages(t,pe.get(f)||new Map);let w=f.global;return await w.set("__snapshot",new q.ExternalCopy(n).copyInto()),await w.set("__nextTaskId",t),await w.set("__nextTaskTimeoutMs",i),await w.set("__nextTaskDeadlineMs",o),await(await T(y,"__resetTask(__snapshot, __nextTaskId, __nextTaskTimeoutMs, __nextTaskDeadlineMs);","reset-task.js")).run(f,{timeout:B(t)}),f}async function ke(e,t){if(!(!t||e.isolate.isDisposed)){try{await(await T(e.isolate,"__cleanupTask();","cleanup-task.js")).run(t,{timeout:5e3})}catch{W.scrubFailed++;try{t.release()}catch{}return}try{t.release()}catch{}W.released++}}function Fe(e){try{let t=JSON.parse(e.message);if(t&&t.__userThrow)return{...t,message:t.message??e.message}}catch{}return null}var De=3,Be=["setup.js","extract.js","extract-error-ctx.js","set-status.js","populate-error.js"];function Ke(e){if(!e)return null;let t=e.split(`
|
|
961
|
+
`);for(let s of t){let n=s.match(/at\s+(.+\.js):(\d+):(\d+)/);if(!n)continue;let r=n[1].trim();if(Be.includes(r)||r!=="handler.js"&&!r.startsWith("preHook #")&&!r.startsWith("postHook #"))continue;let o=parseInt(n[2])-De;if(!(o<=0))return{line:o,column:parseInt(n[3]),phase:r.replace(".js","")}}return null}function qe(e,t,s){if(!e||!t)return;let n=String(e).split(/\r?\n/),r=Math.max(1,t-1),i=Math.min(n.length,t+1),o=String(i).length,y=[];for(let f=r;f<=i;f++){let w=f===t?">":" ";y.push(`${w} ${String(f).padStart(o," ")}. ${n[f-1]??""}`),f===t&&s&&s>0&&y.push(` ${" ".repeat(o)} ${" ".repeat(Math.max(0,s-1))}^`)}return y.join(`
|
|
962
|
+
`)}function Ve(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 te(e,t){let s=Fe(e);if(s)return{message:s.message,statusCode:s.statusCode,errorPath:s.errorPath,code:s.code??(Number.isInteger(s.statusCode)?`HTTP_${s.statusCode}`:void 0),details:s.details};let n=Ke(e.stack),r=e.message||"Unknown error",i=n?`${r} (${n.phase}, line ${n.line})`:r,o=Ve(n,t),y=n?qe(o,n.line,n.column):void 0;return{message:i,statusCode:e.statusCode||null,details:{errorName:e.name||null,executionStage:e.executionStage||"runtime",...n?{...n,codeFrame:y}:{}}}}function X(e){return e?.message==="Script execution timed out."}function Y(e){return e?.message==="Isolate was disposed during execution due to memory limit"}function we(e){X(e)&&e?.code==null&&(e.code="ERR_SCRIPT_EXECUTION_TIMEOUT"),Y(e)&&e?.code==null&&(e.code="ERR_ISOLATE_MEMORY_LIMIT",e.details={outcome:"unknown_outcome",retryable:!1})}async function Z(e,t,s){we(t);let n=te(t,s);t.details&&(n.details={...n.details,...t.details});let r,i=O.get(e),o=E.get(e);if(i&&o&&!o.isolate.isDisposed)try{let y=await T(o.isolate,"JSON.stringify({logs: __logs, truncated: $ctx.$share.$logsTruncated === true})","extract-diagnostic-logs.js");r=JSON.parse(await y.run(i,{timeout:100}))}catch{}await F({type:"result",id:e,success:!1,diagnosticLogs:r,error:{...n,stack:t.stack,code:n.code??t.code}})}async function Ge(e){let{id:t,code:s,pkgSources:n,snapshot:r,memoryLimitMb:i,isolatePoolSize:o,tasksPerIsolate:y}=e,f={handler:e.sourceCode||s||""},w=n||[],b=Math.max(1,Math.trunc(Number(e.timeoutMs)||3e4)),R=Date.now()+b;j.set(t,R);let d=he(s,w),u=ge(i,o,Math.max(1,Math.trunc(Number(y)||1)));u.taskIds.add(t),E.set(t,u);let m=u.isolate,v;try{v=await me(u,t,w,r,d,b,R)}catch(k){j.delete(t),E.delete(t),u.taskIds.delete(t),V(t),await Z(t,k,f),S.postMessage({type:"taskReleased",id:t});return}O.set(t,v);try{let k=`
|
|
956
963
|
(async () => {
|
|
957
964
|
"use strict";
|
|
958
|
-
${
|
|
965
|
+
${s}
|
|
959
966
|
})().then((__result) => __extractResult(__result, __result === undefined));
|
|
960
|
-
`,C=await(await
|
|
961
|
-
`),
|
|
967
|
+
`,C=await(await T(m,k,"handler.js")).run(v,{timeout:B(t),promise:!0}),D=JSON.parse(C);await F({type:"result",id:t,success:!0,...D})}catch(k){u.taskIds.has(t)&&(await Z(t,k,f),(X(k)||Y(k))&&z(u,t,"sibling_execution_failure"))}finally{await ke(u,v),ye(t,u)}}async function We(e){let{id:t,codeBlocks:s,pkgSources:n,snapshot:r,memoryLimitMb:i,isolatePoolSize:o,tasksPerIsolate:y}=e,f=n||[],w=Math.max(1,Math.trunc(Number(e.timeoutMs)||3e4)),b=Date.now()+w;j.set(t,b);let R=he((s||[]).map(p=>p.code||"").join(`
|
|
968
|
+
`),f),d=ge(i,o,Math.max(1,Math.trunc(Number(y)||1)));d.taskIds.add(t),E.set(t,d);let u=d.isolate,m;try{m=await me(d,t,f,r,R,w,b)}catch(p){j.delete(t),E.delete(t),d.taskIds.delete(t),V(t),await Z(t,p),S.postMessage({type:"taskReleased",id:t});return}O.set(t,m);let v=[],k=[],P={},C=0,D=0;for(let p of s){let H=p.type||"handler",g=p.sourceCode||p.code||"";H==="postHook"?(D++,P[`postHook #${D}`]=g,P.postHook=g,k.push(p)):(H==="handler"?P.handler=g:(C++,P[`${H} #${C}`]=g,P.preHook=g),v.push(p))}try{let p=null;for(let g=0;g<v.length;g++){let x=v[g],$=x.type||"handler",l=$==="handler"?"handler":`${$} #${g+1}`,a;$==="preHook"?a=`
|
|
962
969
|
(async () => {
|
|
963
970
|
"use strict";
|
|
964
|
-
${
|
|
971
|
+
${x.code}
|
|
965
972
|
})().then((__r) => {
|
|
966
973
|
if (__r !== undefined) return JSON.stringify({ __shortCircuit: true, value: __r });
|
|
967
974
|
return JSON.stringify({ __shortCircuit: false });
|
|
968
|
-
});`:
|
|
975
|
+
});`:a=`
|
|
969
976
|
(async () => {
|
|
970
977
|
"use strict";
|
|
971
|
-
${
|
|
978
|
+
${x.code}
|
|
972
979
|
})().then((__r) => {
|
|
973
980
|
$ctx.$data = __r;
|
|
974
981
|
return "__handler_done__";
|
|
975
|
-
});`;try{let
|
|
976
|
-
$ctx.$error = ${JSON.stringify(
|
|
982
|
+
});`;try{let _=await(await T(u,a,`${l}.js`)).run(m,{timeout:B(t),promise:!0});if($==="preHook"&&typeof _=="string"){let h=JSON.parse(_);if(h.__shortCircuit){let M=await fe(u,m,h.value);await F({type:"result",id:t,success:!0,...M,shortCircuit:!0});return}}}catch(c){p=c;break}}if(!p&&k.length>0&&await(await T(u,'$ctx.$statusCode = 200; "__status_set__";',"set-status.js")).run(m,{timeout:5e3}),p&&k.length>0){let g=te(p,P),x={message:g.message||"Unknown error",name:p.constructor?.name||"Error",stack:p.stack||"",statusCode:g.statusCode||500,details:g.details||{},timestamp:new Date().toISOString()},$=`
|
|
983
|
+
$ctx.$error = ${JSON.stringify(x)};
|
|
977
984
|
$ctx.$data = null;
|
|
978
|
-
$ctx.$statusCode = ${
|
|
985
|
+
$ctx.$statusCode = ${x.statusCode};
|
|
979
986
|
if ($ctx.$api) {
|
|
980
|
-
$ctx.$api.error = ${JSON.stringify(
|
|
987
|
+
$ctx.$api.error = ${JSON.stringify(x)};
|
|
981
988
|
$ctx.$api.response = {
|
|
982
|
-
statusCode: ${
|
|
989
|
+
statusCode: ${x.statusCode},
|
|
983
990
|
responseTime: $ctx.$api.request && $ctx.$api.request.timestamp
|
|
984
991
|
? Date.now() - new Date($ctx.$api.request.timestamp).getTime()
|
|
985
992
|
: 0,
|
|
986
|
-
timestamp: ${JSON.stringify(
|
|
993
|
+
timestamp: ${JSON.stringify(x.timestamp)},
|
|
987
994
|
};
|
|
988
995
|
}
|
|
989
|
-
"__error_populated__";`;await(await u.compileScript($,{filename:"populate-error.js"})).run(
|
|
996
|
+
"__error_populated__";`;await(await u.compileScript($,{filename:"populate-error.js"})).run(m,{timeout:5e3})}for(let g=0;g<k.length;g++){let x=k[g],$=`postHook #${g+1}`,l=`
|
|
990
997
|
(async () => {
|
|
991
998
|
"use strict";
|
|
992
|
-
${
|
|
999
|
+
${x.code}
|
|
993
1000
|
})().then((__r) => {
|
|
994
1001
|
if (__r !== undefined) $ctx.$data = __r;
|
|
995
1002
|
return "__posthook_done__";
|
|
996
|
-
});`;try{await(await
|
|
1003
|
+
});`;try{await(await T(u,l,`${$}.js`)).run(m,{timeout:B(t),promise:!0})}catch(a){S.postMessage({type:"executionError",id:t,sourceKind:"postHook",scriptId:x.scriptId,error:{message:a.message,stack:a.stack,code:a.code}})}}if(p){we(p);let g=te(p,P);p.details&&(g.details={...g.details,...p.details});let x;try{let a=await(await T(u,"(async () => JSON.stringify(await __extractCtxChanges()))()","extract-error-ctx.js")).run(m,{timeout:5e3,promise:!0});x=JSON.parse(a)}catch{}await F({type:"result",id:t,success:!1,error:{message:g.message,statusCode:g.statusCode,errorPath:g.errorPath,stack:p.stack,code:g.code??p.code,details:g.details},ctxChanges:x}),(X(p)||Y(p))&&z(d,t,"sibling_execution_failure");return}let H=await fe(u,m);await F({type:"result",id:t,success:!0,...H})}catch(p){d.taskIds.has(t)&&(await Z(t,p),(X(p)||Y(p))&&z(d,t,"sibling_execution_failure"))}finally{await ke(d,m),ye(t,d)}}function V(e){U.cleanupTaskPackages(e)}function ze(){U.shutdownPackageRuntime()}process.on("exit",ze);async function fe(e,t,s){if(s!==void 0){let o=`__extractResult(${JSON.stringify(s)}, false)`,f=await(await e.compileScript(o,{filename:"extract.js"})).run(t,{timeout:5e3,promise:!0});return JSON.parse(f)}let i=await(await T(e,"__extractResult($ctx.$data, $ctx.$data === undefined)","extract.js")).run(t,{timeout:5e3,promise:!0});return JSON.parse(i)}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,40 @@
|
|
|
1
|
+
export interface ExecutorWorkerTaskDiagnostics {
|
|
2
|
+
correlationId?: string;
|
|
3
|
+
timeoutMs: number;
|
|
4
|
+
isolateMemoryLimitMb: number;
|
|
5
|
+
isolatePoolSize: number;
|
|
6
|
+
tasksPerIsolate: number;
|
|
7
|
+
scriptBlocks: Array<{
|
|
8
|
+
type: string;
|
|
9
|
+
scriptId?: string;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface ExecutorWorkerCrashInfo {
|
|
14
|
+
terminationReason?: string;
|
|
15
|
+
entryId: number;
|
|
16
|
+
pid?: number;
|
|
17
|
+
exitCode: number | null;
|
|
18
|
+
exitSignal: string | null;
|
|
19
|
+
lastError?: string;
|
|
20
|
+
lastHeapRatio?: number;
|
|
21
|
+
lastRssBytes?: number;
|
|
22
|
+
activeTasks: ExecutorWorkerTaskDiagnostics[];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface ExecutorWorkerCrashRecord extends ExecutorWorkerCrashInfo {
|
|
26
|
+
event: 'executor_worker_crashed';
|
|
27
|
+
occurredAt: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface ExecutorExecutionRecord {
|
|
31
|
+
diagnostics: ExecutorWorkerTaskDiagnostics;
|
|
32
|
+
logs: unknown[];
|
|
33
|
+
logsTruncated: boolean;
|
|
34
|
+
statusCode?: number;
|
|
35
|
+
error?: { message?: string; code?: string; stack?: string };
|
|
36
|
+
}
|
|
37
|
+
|
|
1
38
|
export interface EnfyraKernelDependencies {
|
|
2
39
|
knexService?: any;
|
|
3
40
|
mongoService?: any;
|
|
@@ -11,6 +48,8 @@ export interface EnfyraKernelDependencies {
|
|
|
11
48
|
packageCdnLoaderService?: any;
|
|
12
49
|
getPackageCacheService?: () => any;
|
|
13
50
|
getPackageCdnLoaderService?: () => any;
|
|
51
|
+
onExecutorWorkerCrash?: (record: ExecutorWorkerCrashRecord) => void;
|
|
52
|
+
onExecutionFinished?: (record: ExecutorExecutionRecord) => void;
|
|
14
53
|
}
|
|
15
54
|
|
|
16
55
|
export interface EnfyraKernel {
|