@jucie.io/engine-worker 1.0.6 → 1.0.8

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/main.js CHANGED
@@ -1,2 +1,2 @@
1
- var J=Object.freeze(Object.create(null));function x(n,e,r="value"){if(Array.isArray(e)){for(let s of e)if(M(n,s))return!0;let t=e.map(p).join(" | ");throw new TypeError(`${r} must be one of: ${t}. Got ${p(n)}`)}if(!M(n,e))throw new TypeError(`${r} must be ${p(e)}. Got ${p(n)}`);return!0}function M(n,e){return e===String?typeof n=="string":e===Number?typeof n=="number"&&!isNaN(n):e===Boolean?typeof n=="boolean":e===Symbol?typeof n=="symbol":e===BigInt?typeof n=="bigint":e===Function?typeof n=="function":e===Array?Array.isArray(n):e===Object?n!==null&&typeof n=="object"&&!Array.isArray(n):n instanceof e}function p(n){return n===String?"String":n===Number?"Number":n===Boolean?"Boolean":n===Array?"Array":n===Object?"Object":n===Function?"Function":n===Date?"Date":n===RegExp?"RegExp":n===Promise?"Promise":n===Map?"Map":n===Set?"Set":n===WeakMap?"WeakMap":n===WeakSet?"WeakSet":n===Symbol?"Symbol":n===BigInt?"BigInt":n===Error?"Error":typeof n=="string"?"string":typeof n=="number"?"number":typeof n=="boolean"?"boolean":typeof n=="symbol"?"symbol":typeof n=="bigint"?"bigint":typeof n=="function"?"function":Array.isArray(n)?"Array":n===null?"null":n===void 0?"undefined":typeof n=="object"?n.constructor?.name||"Object":"unknown"}function E(n,e="value"){return r=>x(r,n,e)}var b=new Map,j=new WeakMap;var d=(n,e=[])=>{let r=e.length>0?E(e,"return value"):null;if(b.has(n))return console.warn(`Definition type "${n}" already exists`),b.get(n);let t=(s,i,...o)=>{E(String,"name")(s),E(Function,"factory")(i);let c=(...a)=>{try{let l=[...a,...o],h=i(...l);if(r&&h===void 0)throw new Error(`Factory ${n} must return a value for ${s}`);return r&&r(h),h}catch(l){throw console.error(`Error creating definition "${s}"`,l),l}};return Object.defineProperty(c,"_name",{value:s,enumerable:!1,configurable:!1}),j.set(c,n),c};return b.set(n,t),t};var P=new Set(["__proto__","prototype","constructor"]),V=new Set(["use","install","uninstall","relay","state","debug"]),L=64,U=/^[a-zA-Z_$][a-zA-Z_$0-9]*$/;function K(n,e="key"){if(P.has(n))throw new Error(`Illegal key "${n}" in ${e}`)}function A(n){if(K(n,"namespace"),typeof n!="string")throw new Error(`Namespace must be a string, got ${typeof n}`);if(!U.test(n))throw new Error(`Invalid namespace "${n}". Must be a valid JS identifier`);if(n.length>L)throw new Error(`Namespace "${n}" too long (max ${L} chars)`);if(V.has(n))throw new Error(`Namespace "${n}" is reserved`);return n}var m=d("MIDDLEWARE",[Function,Array]),C=d("ACTIONS",[Object]),S=d("UNINSTALL"),R=d("INITIALIZE"),k=d("GETTERS",[Object]);var y=class n{static create(e){return new n(e)}#e;#o;#t={MIDDLEWARE:null,GETTERS:null,ACTIONS:null,INITIALIZE:null,UNINSTALL:null};constructor(e){this.#e=e}#i(e,r,t){if(this.#t[e])throw new Error(`${e} already defined for ${this.#e}`);this.#t[e]=t(this.#e,r)}defineMiddleware=e=>this.#i("MIDDLEWARE",e,m);defineGetters=e=>this.#i("GETTERS",e,k);defineActions=e=>this.#i("ACTIONS",e,C);defineInitialize=e=>this.#i("INITIALIZE",e,R);defineUninstall=e=>this.#i("UNINSTALL",e,S);_toArray(){return[this.#t.MIDDLEWARE,this.#t.GETTERS,this.#t.ACTIONS,this.#t.INITIALIZE,this.#t.UNINSTALL].filter(Boolean)}};var g=class n{static#e=new Set;static manifest={name:"base",dependencies:[],version:"1.0.0",description:"Base extension template"};static config=null;static unique=!1;static configure(e={}){return{install:(r,t)=>this.install(r,t),manifest:this.manifest,config:{...this.config||this.manifest.defaults||{},...e},unique:!0,configured:!0}}static install(e,r){try{let{namespace:t}=this.manifest;A(t);let s=new this;n.#e.add(s),Object.defineProperty(s,"config",{value:Object.freeze({...r}),writable:!1,configurable:!1,enumerable:!1}),Object.defineProperty(s,"context",{get:()=>e(),configurable:!1,enumerable:!1}),Object.defineProperty(s,"useContext",{value:(...o)=>e(...o),writable:!1,configurable:!1,enumerable:!1});let i=y.create(t);if(s.setup){let o={defineActions:a=>i.defineActions(()=>a(e,r)),defineMiddleware:a=>i.defineMiddleware(()=>a(e,r)),defineGetters:a=>i.defineGetters(()=>a(e,r)),defineInitialize:a=>i.defineInitialize(()=>a(e,r)),defineUninstall:a=>i.defineUninstall(()=>a(e,r))},c=s.setup(o);return c?.then?c.then(()=>i._toArray()):i._toArray()}return s.middleware&&i.defineMiddleware(()=>s.middleware(e,r)),s.getters&&i.defineGetters(()=>s.getters(e,r)),s.actions&&i.defineActions(()=>s.actions(e,r)),s.initialize&&i.defineInitialize(()=>s.initialize(e,r)),s.uninstall&&i.defineUninstall(()=>s.uninstall(e,r)),i._toArray()}catch(t){throw t}}};var ze=Symbol("jucie.engine");var I=class extends g{#e=new Map;#o=new Map;#t=new Map;#i=new Map;#c=new Map;#l=1;#u=!1;static manifest={name:"Worker Registrar",namespace:"worker",dependencies:[],version:"1.0.0",description:"Manages service workers, web workers, and shared workers with unified API",default:{id:null,workers:[]}};initialize(e,r){if(r?.workers&&r.workers.length>0)for(let t of r.workers)this.register(t);window.addEventListener("beforeunload",async t=>{try{await this.unregisterAll()}catch(s){console.error("Design view: Error unregistering workers:",s)}})}actions(e,r){return{isSupported:t=>this.isSupported(t),setup:(t,s)=>this.setup(t,s),register:(t,s,i,o={})=>this.register({name:t,type:s,url:i,options:o}),unregister:t=>this.unregister(t),unregisterAll:()=>this.unregisterAll(),to:t=>this.to(t),from:t=>this.from(t)}}async register({name:e,type:r,url:t,setup:s,options:i={}}){if(!this.isSupported(r))throw new Error(`${r} workers are not supported in this environment`);if(this.#e.has(e))throw"Worker already registered";try{let o=await this.initializeRegistration(r,t,s,i);switch(console.log("\u{1F3AF} Registration",o),r){case"service":o.active?(this.#e.set(e,{type:r,registration:o}),navigator.serviceWorker.addEventListener("message",c=>this.#f(e,c.data,c.source)),this.#a(e,"LIFECYCLE","CONNECT")):o.installing.onstatechange=c=>{c.target.state==="activated"&&(this.#e.set(e,{type:r,registration:o}),navigator.serviceWorker.addEventListener("message",a=>this.#f(e,a.data,a.source)),this.#a(e,"LIFECYCLE","CONNECT"))};break;case"web":this.#e.set(e,{type:r,registration:o}),o.onmessage=c=>this.#f(e,c.data,o),this.#a(e,"LIFECYCLE","CONNECT");break;case"shared":this.#e.set(e,{type:r,registration:o}),o.port.onmessage=c=>this.#f(e,c.data,o.port),o.port.start(),this.#a(e,"LIFECYCLE","CONNECT");break}return()=>this.unregister(e)}catch(o){return console.error(`WorkerManager: Failed to register ${e} (${r})`,o),null}}async initializeRegistration(e,r,t,s={}){let i;if(t)i=await t();else if(r){let o=r instanceof URL?r:new URL(r,window.location.origin).href;switch(e){case"service":i=await navigator.serviceWorker.register(o,s);break;case"web":i=new Worker(o,s);break;case"shared":i=new SharedWorker(o,s);break}}return i}isSupported(e){switch(e){case"service":return"serviceWorker"in navigator;case"web":return"Worker"in window;case"shared":return"SharedWorker"in window;default:return!1}}async unregister(e){let r=this.#e.get(e);if(!r)return!1;let{type:t,registration:s,port:i}=r,o=!1;try{switch(t){case"service":o=await s.unregister();break;case"web":s.terminate(),o=!0;break;case"shared":i&&i.close(),o=!0;break}o&&(this.#e.delete(e),this.#o.delete(e))}catch(c){console.error(`WorkerManager: Error unregistering ${e}`,c)}return o}async unregisterAll(){let e=[];for(let[t,s]of this.#e)console.log(`\u{1F3AF} Unregistering worker ${t} of type ${s.type}`),e.push(this.unregister(t));try{let t=await navigator.serviceWorker.getRegistrations();for(let s of t)e.push(s.unregister())}catch(t){console.error("WorkerManager: Error getting all service worker registrations:",t)}let r=await Promise.all(e);return this.#e.clear(),this.#o.clear(),r}to(e){return{emit:(r,...t)=>this.#a(e,"MESSAGE",r,t),emitAsync:(r,...t)=>this.#d(e,"MESSAGE",r,t),transfer:(r,...t)=>this.#a(e,"TRANSFER",r,t)}}from(e){return{onReady:r=>this.#n(e,"LIFECYCLE","READY",r),onConnect:r=>this.#n(e,"LIFECYCLE","CONNECT",r),onDisconnect:r=>this.#n(e,"LIFECYCLE","DISCONNECT",r),onError:r=>this.#n(e,"LIFECYCLE","ERROR",r),onWarning:r=>this.#n(e,"LIFECYCLE","WARNING",r),onInfo:r=>this.#n(e,"LIFECYCLE","INFO",r),onDebug:r=>this.#n(e,"LIFECYCLE","DEBUG",r),onTrace:r=>this.#n(e,"LIFECYCLE","TRACE",r),onFatal:r=>this.#n(e,"LIFECYCLE","FATAL",r),onCritical:r=>this.on(e,"LIFECYCLE","CRITICAL",r),onEmergency:r=>this.#n(e,"LIFECYCLE","EMERGENCY",r),on:(r,t)=>this.#n(e,"MESSAGE",r,t)}}#n(e,r,t,s){if(r==="LIFECYCLE"){if(t==="READY"&&this.#u){s();return}let i=this.#t.get(e)||new Map;return i.set(t,s),this.#t.set(e,i),()=>i.delete(t)}if(r==="MESSAGE"||r==="TRANSFER"){let i=this.#o.get(e)||new Map,o=i.get(t)||new Set;return o.add(s),i.set(t,o),this.#o.set(e,i),()=>o.delete(s)}if(r==="LOG"){let i=this.#i.get(e)||new Map,o=i.get(t)||new Set;return o.add(s),i.set(t,o),this.#i.set(e,i),()=>o.delete(s)}throw new Error("WorkerManager: Invalid type")}#s(e){return e.filter(r=>r instanceof ArrayBuffer||r instanceof MessagePort||r instanceof ImageBitmap||r instanceof OffscreenCanvas||r instanceof ReadableStream||r instanceof WritableStream||r instanceof TransformStream)}async#f(e,{type:r,event:t,payload:s,responseId:i,async:o},c){if(r==="LIFECYCLE"){t==="READY"&&(this.#u=!0);let a=this.#t.get(e);if(!a)return;let l=a.get(t);if(l){let h={...this.to(e),...this.from(e)};l(h,...s)}return}if(r==="LOG"){this.#r(e,t,...s),(this.#i.get(e)?.get(t)||[]).forEach(h=>h(c,...s));return}if(r==="MESSAGE"||r==="TRANSFER"){let a=this.#o.get(e);if(!a)return;let l=a.get(t)||[];if(!l.length)return;if(o){let h=[];for(let $ of l){let D=await $(c,...s);h.push(D)}let u=this.#s(h),w={type:"CALLBACK",event:t,responseId:i,payload:h,async:o};this.#h(c,w,u);return}s=i?[...s,this.#g(c,i)]:s,l.forEach(h=>h(c,...s));return}if(r==="CALLBACK"){let a=this.#c.get(i);if(!a)return;a(...s),this.#c.delete(i);return}throw new Error("WorkerManager: Invalid type")}#a(e,r,t,s=[]){try{let i=this.#s(s),o=this.#g(s),c=this.#E(r,t,s,o);this.#h(e,c,i)}catch(i){console.error("WorkerManager: Error emitting",e,r,t,s,i)}}#d(e,r,t,s=[]){return new Promise((i,o)=>{let c=setTimeout(()=>{o(new Error(`WorkerManager: Async operation timed out ${e} ${t}`))},3e3),a=this.#l;this.#c.set(a,(...u)=>{clearTimeout(c),u.length===1?i(u[0]):i(...u)}),this.#l++;let l=this.#E(r,t,s,a,!0),h=this.#s(s);this.#h(e,l,h)})}#g(e){if(e.length>0&&typeof e[e.length-1]=="function"){let r=e.pop(),t=this.#l;return this.#c.set(t,r),this.#l++,t}}#E(e,r,t=[],s,i=!1){return{type:e,event:r,payload:t,responseId:s,async:i}}#r(e,r,t){let s=r.toLowerCase(),i=`[${e.toUpperCase()}] ${t.message}`;switch(s){case"error":case"fatal":case"critical":case"emergency":console.error(i,t.data||"");break;case"warning":console.warn(i,t.data||"");break;case"info":console.info(i,t.data||"");break;case"debug":console.debug(i,t.data||"");break;case"trace":console.trace(i,t.data||"");break;default:console.log(i,t.data||"")}}#h(e,r,t=[]){let s=this.#e.get(e);if(!s)throw new Error(`WorkerManager: Worker ${e} not found`);let{type:i,registration:o}=s;switch(i){case"service":o.active.postMessage(r,t);break;case"web":o.postMessage(r,t);break;case"shared":o.port.postMessage(r,t);break}}};var f={SERVICE_WORKER:"SERVICE_WORKER",WEB_WORKER:"WEB_WORKER",SHARED_WORKER:"SHARED_WORKER"};function _(){if(typeof self<"u"&&"ServiceWorkerGlobalScope"in self)return f.SERVICE_WORKER;if(typeof self<"u"&&"SharedWorkerGlobalScope"in self)return f.SHARED_WORKER;if(typeof self<"u"&&"WorkerGlobalScope"in self)return f.WEB_WORKER;throw new Error("WorkerClient: Must be used in a worker context (service worker, shared worker, or web worker)")}var T=class extends g{#e=_();#o=new Set;#t=new Map;#i=new Map;#c=new Map;#l=new Map;#u=1;static manifest={name:"Worker Events",namespace:"worker",dependencies:[],version:"1.0.0",description:"Handles events in service workers and web workers",default:{events:{}}};initialize(){switch(this.#e){case f.SERVICE_WORKER:this.#f(),self.onmessage=e=>this.#p(e.source,e.data);break;case f.WEB_WORKER:self.onmessage=e=>this.#p(self,e.data);break;case f.SHARED_WORKER:self.onconnect=e=>{let r=e.ports[0];r.onmessage=t=>this.#p(r,t.data),this.#o.add(r)};break}}actions(e,r){switch(this.#e){case f.SERVICE_WORKER:return{onConnect:t=>this.#s("LIFECYCLE","CONNECT",t),onDisconnect:t=>this.#s("LIFECYCLE","DISCONNECT",t),on:(t,s)=>this.#s("MESSAGE",t,s),onFetch:t=>this.#s("SERVICE_WORKER","FETCH",t),onInstall:t=>this.#s("SERVICE_WORKER","INSTALL",t),onActivate:t=>this.#s("SERVICE_WORKER","ACTIVATE",t),log:(t,s,...i)=>this.#a(t,s,...i),emit:(t,...s)=>this.#r("*","MESSAGE",t,s),transfer:(t,...s)=>this.#r("*","TRANSFER",t,s),to:t=>({emit:(s,...i)=>this.#r(t,"MESSAGE",s,i),transfer:(s,...i)=>this.#r(t,"TRANSFER",s,i)})};case f.WEB_WORKER:return{on:(t,s)=>this.#s("MESSAGE",t,s),log:(t,s,...i)=>this.#a(t,s,...i),emit:(t,...s)=>this.#r(self,"MESSAGE",t,s),transfer:(t,...s)=>this.#r(self,"TRANSFER",t,s)};case f.SHARED_WORKER:return{onConnect:t=>this.#s("LIFECYCLE","CONNECT",t),onDisconnect:t=>this.#s("LIFECYCLE","DISCONNECT",t),on:(t,s)=>this.#s("MESSAGE",t,s),log:(t,s,...i)=>this.#a(t,s,...i),emit:(t,...s)=>this.#r("*","MESSAGE",t,s),transfer:(t,...s)=>this.#r("*","TRANSFER",t,s),to:t=>({emit:(s,...i)=>this.#r(t,"MESSAGE",s,i),transfer:(s,...i)=>this.#r(t,"TRANSFER",s,i)})};default:return{}}}#n(e,r){return(...t)=>{let s={type:"CALLBACK",responseId:r,payload:t};this.#h(e,s,this.#d(t))}}#s(e,r,t){switch(e){case"LIFECYCLE":return this.#t.set(r,t),()=>this.#t.delete(r);case"MESSAGE":case"TRANSFER":let s=this.#i.get(r)||new Set;return s.add(t),this.#i.set(r,s),()=>s.delete(t);case"SERVICE_WORKER":let i=this.#c.get(r)||new Set;return i.add(t),this.#c.set(r,i),()=>i.delete(t);default:console.error("WorkerClient: Invalid type",e,r,t)}}#f(){self.addEventListener("install",e=>{self.skipWaiting();let r=this.#c.get("INSTALL");r&&r.forEach(t=>t(e))}),self.addEventListener("activate",e=>{e.waitUntil(self.clients.claim());let r=this.#c.get("ACTIVATE");r&&r.forEach(t=>t(e))}),self.addEventListener("fetch",e=>{let r=this.#c.get("FETCH");r&&r.forEach(t=>t(e))}),console.log("WorkerClient #setupServiceWorkerEvents")}#a(e,r,...t){let s={level:e,message:r,data:t.length>0?t:void 0,timestamp:Date.now(),workerType:this.#e};this.#e===f.SERVICE_WORKER||this.#e===f.SHARED_WORKER?this.#r("*","LOG",e,[s]):this.#r(self,"LOG",e,[s]),(console[e]||console.log)(`[${e.toUpperCase()}] ${r}`,...t)}#d(e){return e.filter(r=>r instanceof ArrayBuffer||r instanceof MessagePort||typeof ImageBitmap<"u"&&r instanceof ImageBitmap||typeof OffscreenCanvas<"u"&&r instanceof OffscreenCanvas||typeof ReadableStream<"u"&&r instanceof ReadableStream||typeof WritableStream<"u"&&r instanceof WritableStream||typeof TransformStream<"u"&&r instanceof TransformStream)}#g(e){return e.length>0&&typeof e[e.length-1]=="function"}#E(e){if(this.#g(e)){let r=e.pop(),t=this.#u;return this.#l.set(t,r),this.#u++,t}}#r(e,r,t,s=[]){try{let i,o=this.#d(s),c=this.#E(s);switch(r){case"LIFECYCLE":i={type:"LIFECYCLE",event:t,payload:s,responseId:c};break;case"MESSAGE":i={type:"MESSAGE",event:t,payload:s,responseId:c};break;case"LOG":i={type:"LOG",event:t,payload:s,responseId:c};break;case"TRANSFER":i={type:"MESSAGE",event:t,payload:s,responseId:c};break;default:throw new Error("WorkerClient: Invalid type")}this.#h(e,i,o)}catch(i){console.error("WorkerClient: Error emitting",i)}}#h(e,r,t=[]){try{if(e==="*"){this.#o.forEach(s=>{s.postMessage(r,t)});return}e.postMessage(r,t)}catch(s){console.error("WorkerClient: Error posting message",s)}}async#p(e=null,{type:r,event:t,payload:s,responseId:i,async:o}){if(r==="LIFECYCLE"){let c=this.#t.get(t);this.#y(e,t,s),c&&c(e,...s)}if(r==="MESSAGE"||r==="TRANSFER"){let c=this.#i.get(t);if(o){let a=[];for(let u of c){let w=await u(e,...s);a.push(w)}let l=this.#d(a),h={type:"CALLBACK",event:t,responseId:i,payload:a,async:o};this.#h(e,h,l);return}s=i?[...s,this.#n(e,i)]:s,c&&c.forEach(a=>a(e,...s))}}#y(e,r,t){switch(r){case"CONNECT":this.#o.add(e),this.#r(e,"LIFECYCLE","READY",[]);break}}};var q={CONNECT:"CONNECT",DISCONNECT:"DISCONNECT",MESSAGE:"MESSAGE",READY:"READY",ERROR:"ERROR",WARNING:"WARNING",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE",FATAL:"FATAL",CRITICAL:"CRITICAL",EMERGENCY:"EMERGENCY"};export{q as EVENTS,T as WorkerClient,I as WorkerManager};
1
+ var u=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var p=(f,t)=>{for(var s in t)u(f,s,{get:t[s],enumerable:!0})},M=(f,t,s,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of I(t))!b.call(f,r)&&r!==s&&u(f,r,{get:()=>t[r],enumerable:!(e=W(t,r))||e.enumerable});return f};var T=f=>M(u({},"__esModule",{value:!0}),f);var O={};p(O,{EVENTS:()=>k,WorkerClient:()=>C,WorkerManager:()=>g});module.exports=T(O);var S=require("@jucie.io/engine"),g=class extends S.ServiceProvider{#e=new Map;#o=new Map;#a=new Map;#c=new Map;#i=new Map;#h=1;#l=!1;static manifest={name:"Worker Registrar",namespace:"worker",dependencies:[],version:"1.0.0",description:"Manages service workers, web workers, and shared workers with unified API",default:{id:null,workers:[]}};initialize(t,s){if(s?.workers&&s.workers.length>0)for(let e of s.workers)this.register(e);window.addEventListener("beforeunload",async e=>{try{await this.unregisterAll()}catch(r){console.error("Design view: Error unregistering workers:",r)}})}actions(t,s){return{isSupported:e=>this.isSupported(e),setup:(e,r)=>this.setup(e,r),register:(e,r,i,n={})=>this.register({name:e,type:r,url:i,options:n}),unregister:e=>this.unregister(e),unregisterAll:()=>this.unregisterAll(),to:e=>this.to(e),from:e=>this.from(e)}}async register({name:t,type:s,url:e,setup:r,options:i={}}){if(!this.isSupported(s))throw new Error(`${s} workers are not supported in this environment`);if(this.#e.has(t))throw"Worker already registered";try{let n=await this.initializeRegistration(s,e,r,i);switch(console.log("\u{1F3AF} Registration",n),s){case"service":n.active?(this.#e.set(t,{type:s,registration:n}),navigator.serviceWorker.addEventListener("message",o=>this.#f(t,o.data,o.source)),this.#n(t,"LIFECYCLE","CONNECT")):n.installing.onstatechange=o=>{o.target.state==="activated"&&(this.#e.set(t,{type:s,registration:n}),navigator.serviceWorker.addEventListener("message",a=>this.#f(t,a.data,a.source)),this.#n(t,"LIFECYCLE","CONNECT"))};break;case"web":this.#e.set(t,{type:s,registration:n}),n.onmessage=o=>this.#f(t,o.data,n),this.#n(t,"LIFECYCLE","CONNECT");break;case"shared":this.#e.set(t,{type:s,registration:n}),n.port.onmessage=o=>this.#f(t,o.data,n.port),n.port.start(),this.#n(t,"LIFECYCLE","CONNECT");break}return()=>this.unregister(t)}catch(n){return console.error(`WorkerManager: Failed to register ${t} (${s})`,n),null}}async initializeRegistration(t,s,e,r={}){let i;if(e)i=await e();else if(s){let n=s instanceof URL?s:new URL(s,window.location.origin).href;switch(t){case"service":i=await navigator.serviceWorker.register(n,r);break;case"web":i=new Worker(n,r);break;case"shared":i=new SharedWorker(n,r);break}}return i}isSupported(t){switch(t){case"service":return"serviceWorker"in navigator;case"web":return"Worker"in window;case"shared":return"SharedWorker"in window;default:return!1}}async unregister(t){let s=this.#e.get(t);if(!s)return!1;let{type:e,registration:r,port:i}=s,n=!1;try{switch(e){case"service":n=await r.unregister();break;case"web":r.terminate(),n=!0;break;case"shared":i&&i.close(),n=!0;break}n&&(this.#e.delete(t),this.#o.delete(t))}catch(o){console.error(`WorkerManager: Error unregistering ${t}`,o)}return n}async unregisterAll(){let t=[];for(let[e,r]of this.#e)console.log(`\u{1F3AF} Unregistering worker ${e} of type ${r.type}`),t.push(this.unregister(e));try{let e=await navigator.serviceWorker.getRegistrations();for(let r of e)t.push(r.unregister())}catch(e){console.error("WorkerManager: Error getting all service worker registrations:",e)}let s=await Promise.all(t);return this.#e.clear(),this.#o.clear(),s}to(t){return{emit:(s,...e)=>this.#n(t,"MESSAGE",s,e),emitAsync:(s,...e)=>this.#g(t,"MESSAGE",s,e),transfer:(s,...e)=>this.#n(t,"TRANSFER",s,e)}}from(t){return{onReady:s=>this.#r(t,"LIFECYCLE","READY",s),onConnect:s=>this.#r(t,"LIFECYCLE","CONNECT",s),onDisconnect:s=>this.#r(t,"LIFECYCLE","DISCONNECT",s),onError:s=>this.#r(t,"LIFECYCLE","ERROR",s),onWarning:s=>this.#r(t,"LIFECYCLE","WARNING",s),onInfo:s=>this.#r(t,"LIFECYCLE","INFO",s),onDebug:s=>this.#r(t,"LIFECYCLE","DEBUG",s),onTrace:s=>this.#r(t,"LIFECYCLE","TRACE",s),onFatal:s=>this.#r(t,"LIFECYCLE","FATAL",s),onCritical:s=>this.on(t,"LIFECYCLE","CRITICAL",s),onEmergency:s=>this.#r(t,"LIFECYCLE","EMERGENCY",s),on:(s,e)=>this.#r(t,"MESSAGE",s,e)}}#r(t,s,e,r){if(s==="LIFECYCLE"){if(e==="READY"&&this.#l){r();return}let i=this.#a.get(t)||new Map;return i.set(e,r),this.#a.set(t,i),()=>i.delete(e)}if(s==="MESSAGE"||s==="TRANSFER"){let i=this.#o.get(t)||new Map,n=i.get(e)||new Set;return n.add(r),i.set(e,n),this.#o.set(t,i),()=>n.delete(r)}if(s==="LOG"){let i=this.#c.get(t)||new Map,n=i.get(e)||new Set;return n.add(r),i.set(e,n),this.#c.set(t,i),()=>n.delete(r)}throw new Error("WorkerManager: Invalid type")}#s(t){return t.filter(s=>s instanceof ArrayBuffer||s instanceof MessagePort||s instanceof ImageBitmap||s instanceof OffscreenCanvas||s instanceof ReadableStream||s instanceof WritableStream||s instanceof TransformStream)}async#f(t,{type:s,event:e,payload:r,responseId:i,async:n},o){if(s==="LIFECYCLE"){e==="READY"&&(this.#l=!0);let a=this.#a.get(t);if(!a)return;let h=a.get(e);if(h){let c={...this.to(t),...this.from(t)};h(c,...r)}return}if(s==="LOG"){this.#t(t,e,...r),(this.#c.get(t)?.get(e)||[]).forEach(c=>c(o,...r));return}if(s==="MESSAGE"||s==="TRANSFER"){let a=this.#o.get(t);if(!a)return;let h=a.get(e)||[];if(!h.length)return;if(n){let c=[];for(let w of h){let A=await w(o,...r);c.push(A)}let l=this.#s(c),R={type:"CALLBACK",event:e,responseId:i,payload:c,async:n};this.#E(o,R,l);return}r=i?[...r,this.#C(o,i)]:r,h.forEach(c=>c(o,...r));return}if(s==="CALLBACK"){let a=this.#i.get(i);if(!a)return;a(...r),this.#i.delete(i);return}throw new Error("WorkerManager: Invalid type")}#n(t,s,e,r=[]){try{let i=this.#s(r),n=this.#C(r),o=this.#R(s,e,r,n);this.#E(t,o,i)}catch(i){console.error("WorkerManager: Error emitting",t,s,e,r,i)}}#g(t,s,e,r=[]){return new Promise((i,n)=>{let o=setTimeout(()=>{n(new Error(`WorkerManager: Async operation timed out ${t} ${e}`))},3e3),a=this.#h;this.#i.set(a,(...l)=>{clearTimeout(o),l.length===1?i(l[0]):i(...l)}),this.#h++;let h=this.#R(s,e,r,a,!0),c=this.#s(r);this.#E(t,h,c)})}#C(t){if(t.length>0&&typeof t[t.length-1]=="function"){let s=t.pop(),e=this.#h;return this.#i.set(e,s),this.#h++,e}}#R(t,s,e=[],r,i=!1){return{type:t,event:s,payload:e,responseId:r,async:i}}#t(t,s,e){let r=s.toLowerCase(),i=`[${t.toUpperCase()}] ${e.message}`;switch(r){case"error":case"fatal":case"critical":case"emergency":console.error(i,e.data||"");break;case"warning":console.warn(i,e.data||"");break;case"info":console.info(i,e.data||"");break;case"debug":console.debug(i,e.data||"");break;case"trace":console.trace(i,e.data||"");break;default:console.log(i,e.data||"")}}#E(t,s,e=[]){let r=this.#e.get(t);if(!r)throw new Error(`WorkerManager: Worker ${t} not found`);let{type:i,registration:n}=r;switch(i){case"service":n.active.postMessage(s,e);break;case"web":n.postMessage(s,e);break;case"shared":n.port.postMessage(s,e);break}}};var L=require("@jucie.io/engine");var E={SERVICE_WORKER:"SERVICE_WORKER",WEB_WORKER:"WEB_WORKER",SHARED_WORKER:"SHARED_WORKER"};function d(){if(typeof self<"u"&&"ServiceWorkerGlobalScope"in self)return E.SERVICE_WORKER;if(typeof self<"u"&&"SharedWorkerGlobalScope"in self)return E.SHARED_WORKER;if(typeof self<"u"&&"WorkerGlobalScope"in self)return E.WEB_WORKER;throw new Error("WorkerClient: Must be used in a worker context (service worker, shared worker, or web worker)")}var C=class extends L.ServiceProvider{#e=d();#o=new Set;#a=new Map;#c=new Map;#i=new Map;#h=new Map;#l=1;static manifest={name:"Worker Events",namespace:"worker",dependencies:[],version:"1.0.0",description:"Handles events in service workers and web workers",default:{events:{}}};initialize(){switch(this.#e){case E.SERVICE_WORKER:this.#f(),self.onmessage=t=>this.#u(t.source,t.data);break;case E.WEB_WORKER:self.onmessage=t=>this.#u(self,t.data);break;case E.SHARED_WORKER:self.onconnect=t=>{let s=t.ports[0];s.onmessage=e=>this.#u(s,e.data),this.#o.add(s)};break}}actions(t,s){switch(this.#e){case E.SERVICE_WORKER:return{onConnect:e=>this.#s("LIFECYCLE","CONNECT",e),onDisconnect:e=>this.#s("LIFECYCLE","DISCONNECT",e),on:(e,r)=>this.#s("MESSAGE",e,r),onFetch:e=>this.#s("SERVICE_WORKER","FETCH",e),onInstall:e=>this.#s("SERVICE_WORKER","INSTALL",e),onActivate:e=>this.#s("SERVICE_WORKER","ACTIVATE",e),log:(e,r,...i)=>this.#n(e,r,...i),emit:(e,...r)=>this.#t("*","MESSAGE",e,r),transfer:(e,...r)=>this.#t("*","TRANSFER",e,r),to:e=>({emit:(r,...i)=>this.#t(e,"MESSAGE",r,i),transfer:(r,...i)=>this.#t(e,"TRANSFER",r,i)})};case E.WEB_WORKER:return{on:(e,r)=>this.#s("MESSAGE",e,r),log:(e,r,...i)=>this.#n(e,r,...i),emit:(e,...r)=>this.#t(self,"MESSAGE",e,r),transfer:(e,...r)=>this.#t(self,"TRANSFER",e,r)};case E.SHARED_WORKER:return{onConnect:e=>this.#s("LIFECYCLE","CONNECT",e),onDisconnect:e=>this.#s("LIFECYCLE","DISCONNECT",e),on:(e,r)=>this.#s("MESSAGE",e,r),log:(e,r,...i)=>this.#n(e,r,...i),emit:(e,...r)=>this.#t("*","MESSAGE",e,r),transfer:(e,...r)=>this.#t("*","TRANSFER",e,r),to:e=>({emit:(r,...i)=>this.#t(e,"MESSAGE",r,i),transfer:(r,...i)=>this.#t(e,"TRANSFER",r,i)})};default:return{}}}#r(t,s){return(...e)=>{let r={type:"CALLBACK",responseId:s,payload:e};this.#E(t,r,this.#g(e))}}#s(t,s,e){switch(t){case"LIFECYCLE":return this.#a.set(s,e),()=>this.#a.delete(s);case"MESSAGE":case"TRANSFER":let r=this.#c.get(s)||new Set;return r.add(e),this.#c.set(s,r),()=>r.delete(e);case"SERVICE_WORKER":let i=this.#i.get(s)||new Set;return i.add(e),this.#i.set(s,i),()=>i.delete(e);default:console.error("WorkerClient: Invalid type",t,s,e)}}#f(){self.addEventListener("install",t=>{self.skipWaiting();let s=this.#i.get("INSTALL");s&&s.forEach(e=>e(t))}),self.addEventListener("activate",t=>{t.waitUntil(self.clients.claim());let s=this.#i.get("ACTIVATE");s&&s.forEach(e=>e(t))}),self.addEventListener("fetch",t=>{let s=this.#i.get("FETCH");s&&s.forEach(e=>e(t))}),console.log("WorkerClient #setupServiceWorkerEvents")}#n(t,s,...e){let r={level:t,message:s,data:e.length>0?e:void 0,timestamp:Date.now(),workerType:this.#e};this.#e===E.SERVICE_WORKER||this.#e===E.SHARED_WORKER?this.#t("*","LOG",t,[r]):this.#t(self,"LOG",t,[r]),(console[t]||console.log)(`[${t.toUpperCase()}] ${s}`,...e)}#g(t){return t.filter(s=>s instanceof ArrayBuffer||s instanceof MessagePort||typeof ImageBitmap<"u"&&s instanceof ImageBitmap||typeof OffscreenCanvas<"u"&&s instanceof OffscreenCanvas||typeof ReadableStream<"u"&&s instanceof ReadableStream||typeof WritableStream<"u"&&s instanceof WritableStream||typeof TransformStream<"u"&&s instanceof TransformStream)}#C(t){return t.length>0&&typeof t[t.length-1]=="function"}#R(t){if(this.#C(t)){let s=t.pop(),e=this.#l;return this.#h.set(e,s),this.#l++,e}}#t(t,s,e,r=[]){try{let i,n=this.#g(r),o=this.#R(r);switch(s){case"LIFECYCLE":i={type:"LIFECYCLE",event:e,payload:r,responseId:o};break;case"MESSAGE":i={type:"MESSAGE",event:e,payload:r,responseId:o};break;case"LOG":i={type:"LOG",event:e,payload:r,responseId:o};break;case"TRANSFER":i={type:"MESSAGE",event:e,payload:r,responseId:o};break;default:throw new Error("WorkerClient: Invalid type")}this.#E(t,i,n)}catch(i){console.error("WorkerClient: Error emitting",i)}}#E(t,s,e=[]){try{if(t==="*"){this.#o.forEach(r=>{r.postMessage(s,e)});return}t.postMessage(s,e)}catch(r){console.error("WorkerClient: Error posting message",r)}}async#u(t=null,{type:s,event:e,payload:r,responseId:i,async:n}){if(s==="LIFECYCLE"){let o=this.#a.get(e);this.#S(t,e,r),o&&o(t,...r)}if(s==="MESSAGE"||s==="TRANSFER"){let o=this.#c.get(e);if(n){let a=[];for(let l of o){let R=await l(t,...r);a.push(R)}let h=this.#g(a),c={type:"CALLBACK",event:e,responseId:i,payload:a,async:n};this.#E(t,c,h);return}r=i?[...r,this.#r(t,i)]:r,o&&o.forEach(a=>a(t,...r))}}#S(t,s,e){switch(s){case"CONNECT":this.#o.add(t),this.#t(t,"LIFECYCLE","READY",[]);break}}};var k={CONNECT:"CONNECT",DISCONNECT:"DISCONNECT",MESSAGE:"MESSAGE",READY:"READY",ERROR:"ERROR",WARNING:"WARNING",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE",FATAL:"FATAL",CRITICAL:"CRITICAL",EMERGENCY:"EMERGENCY"};0&&(module.exports={EVENTS,WorkerClient,WorkerManager});
2
2
  //# sourceMappingURL=main.js.map
package/dist/main.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/lib/relay/src/Relay.js", "../../../src/utils/typeChecker.js", "../../../src/definitions/createDefinition.js", "../../../src/utils/asserts.js", "../../../src/definitions/defaults.js", "../../../src/definitions/DefinitionBuilder.js", "../../../src/ServiceProvider.js", "../../../src/global.js", "../src/WorkerManager.js", "../src/utils/getWorkerType.js", "../src/WorkerClient.js", "../src/EVENTS.js"],
4
- "sourcesContent": ["// Simple, readable relay with wildcard matching and no indexing\n\nconst GLOBAL_NS_OBJ = Object.freeze(Object.create(null));\n\nfunction queueMicrotask(fn) {\n if (globalThis.queueMicrotask && typeof globalThis.queueMicrotask === 'function') {\n globalThis.queueMicrotask(fn);\n return;\n }\n setTimeout(fn, 0);\n}\n\nclass Channel {\n #nsObj; #relay;\n constructor(nsObj, relay) { this.#nsObj = nsObj; this.#relay = relay; }\n\n // Any source -> me\n on(event, handler) {\n return this.#relay.subscribe(event, GLOBAL_NS_OBJ, this.#nsObj, handler);\n }\n\n once(event, handler) {\n return this.#relay.once(event, GLOBAL_NS_OBJ, this.#nsObj, handler);\n }\n\n // Me -> everyone (sender never hears itself)\n broadcast(event, ...payload) {\n this.#relay.publish(event, this.#nsObj, GLOBAL_NS_OBJ, payload);\n }\n\n // Specific source -> me\n from(fromNs) {\n return {\n subscribe: (event, handler) => this.#relay.subscribe(event, fromNs, this.#nsObj, handler),\n once: (event, handler) => this.#relay.once(event, fromNs, this.#nsObj, handler),\n };\n }\n\n // Me -> specific target\n to(toNs) {\n return {\n publish: (event, ...payload) => this.#relay.publish(event, this.#nsObj, toNs, payload),\n publishAsync: (event, ...payload) => this.#relay.publishAsync(event, this.#nsObj, toNs, payload),\n };\n }\n}\n\nexport class Relay {\n #channels = new WeakMap(); // nsObj -> Channel\n #events = new Map(); // eventName -> Set<Listener>\n #onError = null;\n\n static create(config = {}) {\n return new Relay(config);\n }\n\n constructor({ onError = null } = {}) {\n this.#onError = onError;\n this.createChannel(GLOBAL_NS_OBJ);\n }\n\n // Public convenience\n channel(nsObj) { return this.createChannel(nsObj); }\n createChannel(nsObj) {\n if (this.#channels.has(nsObj)) return this.#channels.get(nsObj);\n const ch = new Channel(nsObj, this);\n this.#channels.set(nsObj, ch);\n return ch;\n }\n\n // Internal helpers\n #listeners(event) {\n let set = this.#events.get(event);\n if (!set) { set = new Set(); this.#events.set(event, set); }\n return set;\n }\n\n // Wildcard matcher:\n // - If published `from` is GLOBAL, it matches every listener.from\n // - If listener.from is GLOBAL, it matches every published from\n // Same for `to`. This makes broadcast (to = GLOBAL) hit specific targets too.\n static #matchSide(published, constraint) {\n return published === GLOBAL_NS_OBJ || constraint === GLOBAL_NS_OBJ || published === constraint;\n }\n\n static #matches(publishedFrom, publishedTo, listenerFrom, listenerTo) {\n return Relay.#matchSide(publishedFrom, listenerFrom)\n && Relay.#matchSide(publishedTo, listenerTo);\n }\n\n subscribe(event, from, to, handler) {\n const listener = { from, to, handler };\n this.#listeners(event).add(listener);\n return () => {\n const set = this.#events.get(event);\n if (set) set.delete(listener);\n };\n }\n\n once(event, from, to, handler) {\n let off = null;\n const wrapped = (payload) => {\n try { handler(payload); } finally { off && off(); }\n };\n off = this.subscribe(event, from, to, wrapped);\n return off;\n }\n\n offAllFor(nsObj) {\n for (const set of this.#events.values()) {\n for (const l of Array.from(set)) {\n if (l.from === nsObj || l.to === nsObj) set.delete(l);\n }\n }\n }\n\n listenerCount(event) {\n const set = this.#events.get(event);\n return set ? set.size : 0;\n }\n\n #deliver(event, from, to, payload) {\n const set = this.#events.get(event);\n if (!set || set.size === 0) return;\n\n for (const l of set) {\n // Always skip self-delivery\n if (l.to === from) continue;\n\n if (Relay.#matches(from, to, l.from, l.to)) {\n try { l.handler(...payload); }\n catch (err) { if (this.#onError) this.#onError(err, { event, from, to, listener: l }); }\n }\n }\n }\n\n publish(event, from, to, payload) {\n this.#deliver(event, from, to, payload);\n }\n\n publishAsync(event, from, to, payload) {\n queueMicrotask(() => this.#deliver(event, from, to, payload));\n }\n\n broadcast(event, from, payload) {\n this.publish(event, from, GLOBAL_NS_OBJ, payload);\n }\n}\n", "/**\n * Type Checker Utility\n * \n * Supports syntax like:\n * - createDefinition('action', [Array, Function]) // Array or Function\n * - createDefinition('name', String) // Must be String\n * - createDefinition('items', Array) // Must be Array\n * - createDefinition('callback', Function) // Must be Function\n * - createDefinition('value', [String, Number]) // String or Number\n */\n\n/**\n * Type definitions mapping constructor names to actual constructors\n */\nconst TYPE_MAP = {\n String,\n Number,\n Boolean,\n Array,\n Object,\n Function,\n Date,\n RegExp,\n Promise,\n Map,\n Set,\n WeakMap,\n WeakSet,\n Symbol,\n BigInt,\n Error,\n TypeError,\n RangeError,\n ReferenceError,\n SyntaxError,\n EvalError,\n URIError\n};\n\n/**\n * Checks if a value matches the expected type(s)\n * @param {*} value - The value to check\n * @param {Function|Array<Function>} expectedType - Single type or array of possible types\n * @param {string} name - Name of the parameter for error messages\n * @returns {boolean} - True if value matches expected type(s)\n */\nexport function checkType(value, expectedType, name = 'value') {\n // Handle array of possible types\n if (Array.isArray(expectedType)) {\n for (const type of expectedType) {\n if (matchesType(value, type)) {\n return true;\n }\n }\n \n const typeNames = expectedType.map(getTypeName).join(' | ');\n throw new TypeError(`${name} must be one of: ${typeNames}. Got ${getTypeName(value)}`);\n }\n \n // Handle single type\n if (!matchesType(value, expectedType)) {\n throw new TypeError(`${name} must be ${getTypeName(expectedType)}. Got ${getTypeName(value)}`);\n }\n \n return true;\n}\n\n/**\n * Checks if a value matches a specific type\n * @param {*} value - The value to check\n * @param {Function} type - The expected constructor/type\n * @returns {boolean} - True if value matches the type\n */\nfunction matchesType(value, type) {\n // Handle primitive constructors\n if (type === String) {\n return typeof value === 'string';\n }\n if (type === Number) {\n return typeof value === 'number' && !isNaN(value);\n }\n if (type === Boolean) {\n return typeof value === 'boolean';\n }\n if (type === Symbol) {\n return typeof value === 'symbol';\n }\n if (type === BigInt) {\n return typeof value === 'bigint';\n }\n if (type === Function) {\n return typeof value === 'function';\n }\n \n // Handle object constructors (including Array, Object, Date, etc.)\n if (type === Array) {\n return Array.isArray(value);\n }\n if (type === Object) {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n }\n \n // Handle other constructors (Date, RegExp, Map, Set, etc.)\n return value instanceof type;\n}\n\n/**\n * Gets a human-readable name for a type\n * @param {*} value - The value or constructor to get name for\n * @returns {string} - Human-readable type name\n */\nfunction getTypeName(value) {\n if (value === String) return 'String';\n if (value === Number) return 'Number';\n if (value === Boolean) return 'Boolean';\n if (value === Array) return 'Array';\n if (value === Object) return 'Object';\n if (value === Function) return 'Function';\n if (value === Date) return 'Date';\n if (value === RegExp) return 'RegExp';\n if (value === Promise) return 'Promise';\n if (value === Map) return 'Map';\n if (value === Set) return 'Set';\n if (value === WeakMap) return 'WeakMap';\n if (value === WeakSet) return 'WeakSet';\n if (value === Symbol) return 'Symbol';\n if (value === BigInt) return 'BigInt';\n if (value === Error) return 'Error';\n \n if (typeof value === 'string') return 'string';\n if (typeof value === 'number') return 'number';\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'symbol') return 'symbol';\n if (typeof value === 'bigint') return 'bigint';\n if (typeof value === 'function') return 'function';\n if (Array.isArray(value)) return 'Array';\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value === 'object') {\n return value.constructor?.name || 'Object';\n }\n \n return 'unknown';\n}\n\n/**\n * Creates a type checker function for a specific parameter\n * @param {Function|Array<Function>} expectedType - Expected type(s)\n * @param {string} name - Parameter name\n * @returns {Function} - Type checker function\n */\nexport function createTypeChecker(expectedType, name = 'value') {\n return (value) => checkType(value, expectedType, name);\n}\n\n/**\n * Validates an object against a schema\n * @param {Object} obj - Object to validate\n * @param {Object} schema - Schema definition { prop: Type, prop2: [Type1, Type2] }\n * @param {string} objName - Name of the object for error messages\n */\nexport function validateObject(obj, schema, objName = 'object') {\n if (!obj || typeof obj !== 'object') {\n throw new TypeError(`${objName} must be an object`);\n }\n \n for (const [prop, expectedType] of Object.entries(schema)) {\n if (prop in obj) {\n checkType(obj[prop], expectedType, `${objName}.${prop}`);\n }\n }\n}\n\n/**\n * Creates a validator function for an object schema\n * @param {Object} schema - Schema definition\n * @param {string} objName - Name of the object\n * @returns {Function} - Validator function\n */\nexport function createObjectValidator(schema, objName = 'object') {\n return (obj) => validateObject(obj, schema, objName);\n}\n\n// Export the type map for advanced usage\nexport { TYPE_MAP };\n", "const DefinitionTypes = new Map();\nconst Definitions = new WeakMap();\nimport { createTypeChecker } from '../utils/typeChecker.js';\n\n/**\n * Creates a definition type with return type validation\n * @param {string} type - The definition type name\n * @param {Function|Array<Function>} returnTypes - Expected return type(s)\n * @returns {Function} - Definition creator function\n */\n\n\nexport const definitionType = (definition) => {\n if (Definitions.has(definition)) {\n return Definitions.get(definition);\n }\n return undefined;\n}\n\nexport const createDefinition = (type, returnTypes = []) => { \n // Create type checker for return values if returnTypes specified\n const returnTypeChecker = returnTypes.length > 0 ? createTypeChecker(returnTypes, 'return value') : null;\n \n if (DefinitionTypes.has(type)) {\n console.warn(`Definition type \"${type}\" already exists`);\n return DefinitionTypes.get(type);\n }\n\n const definitionType = (name, factory, ...defaultArgs) => {\n // Validate inputs using type checker\n createTypeChecker(String, 'name')(name);\n createTypeChecker(Function, 'factory')(factory);\n\n const definition = (...args) => {\n try {\n const combinedArgs = [...args, ...defaultArgs];\n const res = factory(...combinedArgs);\n \n if (returnTypeChecker && res === undefined) {\n throw new Error(`Factory ${type} must return a value for ${name}`);\n }\n\n // Use type checker to validate return value\n if (returnTypeChecker) {\n returnTypeChecker(res);\n }\n\n return res\n } catch (error) {\n console.error(`Error creating definition \"${name}\"`, error);\n throw error;\n }\n }\n\n Object.defineProperty(definition, '_name', {\n value: name,\n enumerable: false,\n configurable: false\n });\n\n Definitions.set(definition, type);\n\n return definition;\n }\n\n DefinitionTypes.set(type, definitionType);\n\n return definitionType;\n}; ", "// utils/asserts.js\n\nconst BAD_KEYS = new Set(['__proto__', 'prototype', 'constructor']);\nconst RESERVED_NAMESPACES = new Set(['use', 'install', 'uninstall', 'relay', 'state', 'debug']);\n\nconst MAX_NAME_LENGTH = 64;\nconst VALID_NAME = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n/**\n * Throw if key is unsafe (__proto__, constructor, etc.)\n */\nexport function assertSafeKey(key, where = 'key') {\n if (BAD_KEYS.has(key)) {\n throw new Error(`Illegal key \"${key}\" in ${where}`);\n }\n}\n\n/**\n * Validate a namespace string: format, length, reserved words, proto poisoning.\n */\nexport function assertNamespace(ns) {\n assertSafeKey(ns, 'namespace');\n if (typeof ns !== 'string') {\n throw new Error(`Namespace must be a string, got ${typeof ns}`);\n }\n if (!VALID_NAME.test(ns)) {\n throw new Error(`Invalid namespace \"${ns}\". Must be a valid JS identifier`);\n }\n if (ns.length > MAX_NAME_LENGTH) {\n throw new Error(`Namespace \"${ns}\" too long (max ${MAX_NAME_LENGTH} chars)`);\n }\n if (RESERVED_NAMESPACES.has(ns)) {\n throw new Error(`Namespace \"${ns}\" is reserved`);\n }\n return ns;\n}\n\n/**\n * Validate an action or getter name within a namespace.\n */\nexport function assertMemberName(name, namespace, kind = 'member') {\n assertSafeKey(name, `${kind}:${namespace}`);\n if (typeof name !== 'string') {\n throw new Error(`${kind} name in ${namespace} must be a string`);\n }\n if (!VALID_NAME.test(name)) {\n throw new Error(`Invalid ${kind} name \"${name}\" in ${namespace}`);\n }\n if (name.length > MAX_NAME_LENGTH) {\n throw new Error(\n `${kind} name \"${name}\" in ${namespace} too long (max ${MAX_NAME_LENGTH})`\n );\n }\n return name;\n}\n", "import { createDefinition, definitionType } from './createDefinition.js';\nexport const defineMiddleware = createDefinition('MIDDLEWARE', [Function, Array]);\nexport const defineActions = createDefinition('ACTIONS', [Object]);\nexport const defineUninstall = createDefinition('UNINSTALL');\nexport const defineInitialize = createDefinition('INITIALIZE');\nexport const defineGetters = createDefinition('GETTERS', [Object]);\nexport { createDefinition, definitionType };", "// DefinitionBuilder.js\nimport { defineActions, defineGetters, defineMiddleware, defineInitialize, defineUninstall } from './defaults.js';\n\nexport class DefinitionBuilder {\n static create(namespace) {\n return new DefinitionBuilder(namespace);\n }\n\n #ns; #args;\n #slots = { MIDDLEWARE:null, GETTERS:null, ACTIONS:null, INITIALIZE:null, UNINSTALL:null };\n constructor(namespace) { this.#ns = namespace }\n\n #set(type, factory, creator) {\n if (this.#slots[type]) throw new Error(`${type} already defined for ${this.#ns}`);\n this.#slots[type] = creator(this.#ns, factory);\n }\n\n defineMiddleware = (factory) => this.#set('MIDDLEWARE', factory, defineMiddleware);\n defineGetters = (factory) => this.#set('GETTERS', factory, defineGetters);\n defineActions = (factory) => this.#set('ACTIONS', factory, defineActions);\n defineInitialize = (factory) => this.#set('INITIALIZE', factory, defineInitialize);\n defineUninstall = (factory) => this.#set('UNINSTALL', factory, defineUninstall);\n\n _toArray() {\n return [\n this.#slots.MIDDLEWARE,\n this.#slots.GETTERS,\n this.#slots.ACTIONS,\n this.#slots.INITIALIZE,\n this.#slots.UNINSTALL\n ].filter(Boolean);\n }\n}\n\n", "import { assertNamespace } from './utils/asserts.js';\nimport { DefinitionBuilder } from './definitions/DefinitionBuilder.js';\n\n\nexport class ServiceProvider {\n static #services = new Set();\n\n static manifest = {\n name: 'base',\n dependencies: [],\n version: '1.0.0',\n description: 'Base extension template',\n };\n\n static config = null;\n\n static unique = false;\n\n static configure(options = {}) {\n return {\n install: (useContext, config) => this.install(useContext, config),\n manifest: this.manifest,\n config: { ...(this.config || this.manifest.defaults || {}), ...options },\n unique: true,\n configured: true\n };\n }\n\n static install(useContext, config) { \n try {\n const {namespace} = this.manifest;\n assertNamespace(namespace);\n\n // instantiate\n const instance = new this();\n ServiceProvider.#services.add(instance);\n\n // bind context/config\n // bind config (frozen to avoid accidental mutation)\n Object.defineProperty(instance, 'config', {\n value: Object.freeze({ ...config }),\n writable: false,\n configurable: false,\n enumerable: false,\n });\n\n // expose both a live context getter AND the keyed accessor\n Object.defineProperty(instance, 'context', {\n get: () => useContext(), // always fresh, via your proxy\n configurable: false,\n enumerable: false,\n });\n \n Object.defineProperty(instance, 'useContext', {\n value: (...keys) => useContext(...keys),\n writable: false,\n configurable: false,\n enumerable: false,\n });\n\n const builder = DefinitionBuilder.create(namespace);\n\n if (instance.setup) {\n // Create properly bound context for setup pattern\n const setupContext = {\n defineActions: (factory) => builder.defineActions(() => factory(useContext, config)),\n defineMiddleware: (factory) => builder.defineMiddleware(() => factory(useContext, config)),\n defineGetters: (factory) => builder.defineGetters(() => factory(useContext, config)),\n defineInitialize: (factory) => builder.defineInitialize(() => factory(useContext, config)),\n defineUninstall: (factory) => builder.defineUninstall(() => factory(useContext, config))\n };\n const maybe = instance.setup(setupContext);\n return maybe?.then ? maybe.then(() => builder._toArray()) : builder._toArray();\n }\n\n if (instance.middleware) builder.defineMiddleware(() => instance.middleware(useContext, config));\n if (instance.getters) builder.defineGetters (() => instance.getters(useContext, config));\n if (instance.actions) builder.defineActions (() => instance.actions(useContext, config));\n if (instance.initialize) builder.defineInitialize(() => instance.initialize(useContext, config));\n if (instance.uninstall) builder.defineUninstall (() => instance.uninstall(useContext, config));\n\n return builder._toArray();\n } catch (error) {\n throw error;\n }\n }\n}", "const ENGINE_CONTEXT = Symbol('jucie.engine');\n\n/**\n * Registers the engine globally, but only if no engine has already been set.\n * @param {object} engine \n */\n\nexport function provideEngine(engine) {\n if (!globalThis[ENGINE_CONTEXT]) {\n globalThis[ENGINE_CONTEXT] = engine;\n }\n}\n\nexport function hasEngine() {\n return globalThis[ENGINE_CONTEXT] !== undefined;\n}\n\n/**\n * Forcefully override the engine in the global context.\n * Useful for testing or resetting.\n */\nexport function forceEngine(engine) {\n globalThis[ENGINE_CONTEXT] = engine;\n}\n\n/**\n * Retrieves the globally registered engine.\n */\nexport function getEngine() {\n return globalThis[ENGINE_CONTEXT] || null;\n}\n\n/**\n * Retrieves the globally registered engine.\n */\nexport function useEngine() {\n return getEngine();\n}", "import { ServiceProvider } from '@jucie.io/engine';\n\nexport class WorkerManager extends ServiceProvider {\n #registrations = new Map();\n #workerEvents = new Map();\n #workerLifecycleEvents = new Map(); // Map of worker name to Map of event name to callbacks\n #workerLogEvents = new Map(); // Map of worker name to Map of log level to callbacks\n #responses = new Map(); // Map of worker name to Map of event name to callbacks\n #responseClock = 1;\n #ready = false;\n\n static manifest = {\n name: 'Worker Registrar',\n namespace: 'worker',\n dependencies: [],\n version: '1.0.0',\n description: 'Manages service workers, web workers, and shared workers with unified API',\n default: {\n id: null,\n workers: [],\n }\n }\n\n initialize(_, config) {\n if (config?.workers && config.workers.length > 0) {\n for (const worker of config.workers) {\n this.register(worker);\n }\n }\n\n window.addEventListener('beforeunload', async (event) => {\n try {\n await this.unregisterAll();\n } catch (error) {\n console.error('Design view: Error unregistering workers:', error);\n }\n });\n }\n\n actions(context, config) {\n return {\n isSupported: (type) => this.isSupported(type),\n setup: (name, fn) => this.setup(name, fn),\n register: (name, type, url, options = {}) => this.register({name, type, url, options}),\n unregister: (name) => this.unregister(name),\n unregisterAll: () => this.unregisterAll(),\n to: (workerName) => this.to(workerName),\n from: (workerName) => this.from(workerName),\n }\n }\n\n async register({name, type, url, setup, options = {}}) {\n if (!this.isSupported(type)) {\n throw new Error(`${type} workers are not supported in this environment`);\n }\n\n if (this.#registrations.has(name)) {\n throw 'Worker already registered'\n }\n\n\n try {\n const registration = await this.initializeRegistration(type, url, setup, options);\n console.log('\uD83C\uDFAF Registration', registration);\n \n switch (type) {\n case 'service':\n if (!registration.active) {\n registration.installing.onstatechange = (event) => {\n if (event.target.state === 'activated') {\n this.#registrations.set(name, { type, registration });\n // Listen for messages from service worker on navigator.serviceWorker\n navigator.serviceWorker.addEventListener('message', (event) => this.#onMessageHandler(name, event.data, event.source));\n this.#emit(name, 'LIFECYCLE', 'CONNECT');\n } \n }\n } else {\n this.#registrations.set(name, { type, registration });\n // Listen for messages from service worker on navigator.serviceWorker\n navigator.serviceWorker.addEventListener('message', (event) => this.#onMessageHandler(name, event.data, event.source));\n this.#emit(name, 'LIFECYCLE', 'CONNECT');\n }\n \n break;\n \n case 'web':\n this.#registrations.set(name, { type, registration });\n registration.onmessage = (event) => this.#onMessageHandler(name, event.data, registration);\n this.#emit(name, 'LIFECYCLE', 'CONNECT');\n break;\n \n case 'shared':\n this.#registrations.set(name, { type, registration });\n\n // Set up message handling for this port\n registration.port.onmessage = (event) => this.#onMessageHandler(name, event.data, registration.port);\n \n // Start the port\n registration.port.start();\n\n this.#emit(name, 'LIFECYCLE', 'CONNECT');\n break;\n }\n \n return () => this.unregister(name);\n } catch (error) {\n console.error(`WorkerManager: Failed to register ${name} (${type})`, error);\n return null;\n }\n }\n\n async initializeRegistration(type, url, setup, options = {}) {\n let registration;\n if (setup) {\n registration = await setup();\n } else if (url) {\n const absoluteUrl = url instanceof URL ? url : new URL(url, window.location.origin).href;\n switch (type) {\n case 'service':\n registration = await navigator.serviceWorker.register(absoluteUrl, options);\n break;\n case 'web':\n registration = new Worker(absoluteUrl, options);\n break;\n case 'shared':\n registration = new SharedWorker(absoluteUrl, options);\n break;\n }\n }\n return registration;\n }\n\n isSupported(type) {\n switch (type) {\n case 'service':\n return 'serviceWorker' in navigator;\n case 'web':\n return 'Worker' in window;\n case 'shared':\n return 'SharedWorker' in window;\n default:\n return false;\n }\n }\n\n async unregister(name) {\n const workerInfo = this.#registrations.get(name);\n if (!workerInfo) {\n return false;\n }\n\n const { type, registration, port } = workerInfo;\n let success = false;\n\n try {\n switch (type) {\n case 'service':\n success = await registration.unregister();\n break;\n case 'web':\n registration.terminate();\n success = true;\n break;\n case 'shared':\n if (port) {\n port.close();\n }\n success = true;\n break;\n }\n \n if (success) {\n this.#registrations.delete(name);\n this.#workerEvents.delete(name);\n }\n } catch (error) {\n console.error(`WorkerManager: Error unregistering ${name}`, error);\n }\n \n return success;\n }\n\n async unregisterAll() {\n const promises = [];\n \n // Unregister all tracked registrations\n for (const [name, workerInfo] of this.#registrations) {\n console.log(`\uD83C\uDFAF Unregistering worker ${name} of type ${workerInfo.type}`);\n promises.push(this.unregister(name));\n }\n \n // Also unregister any service workers that might exist (for service workers only)\n try {\n const allRegistrations = await navigator.serviceWorker.getRegistrations();\n for (const registration of allRegistrations) {\n promises.push(registration.unregister());\n }\n } catch (error) {\n console.error('WorkerManager: Error getting all service worker registrations:', error);\n }\n \n const results = await Promise.all(promises);\n this.#registrations.clear();\n this.#workerEvents.clear();\n \n return results;\n }\n\n to(workerName) {\n return {\n emit: (event, ...payload) => this.#emit(workerName, 'MESSAGE', event, payload),\n emitAsync: (event, ...payload) => this.#emitAsync(workerName, 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit(workerName, 'TRANSFER', event, payload),\n }\n }\n\n from(workerName) {\n return {\n onReady: (cb) => this.#on(workerName, 'LIFECYCLE', 'READY', cb),\n onConnect: (cb) => this.#on(workerName, 'LIFECYCLE', 'CONNECT', cb),\n onDisconnect: (cb) => this.#on(workerName, 'LIFECYCLE', 'DISCONNECT', cb),\n onError: (cb) => this.#on(workerName, 'LIFECYCLE', 'ERROR', cb),\n onWarning: (cb) => this.#on(workerName, 'LIFECYCLE', 'WARNING', cb),\n onInfo: (cb) => this.#on(workerName, 'LIFECYCLE', 'INFO', cb),\n onDebug: (cb) => this.#on(workerName, 'LIFECYCLE', 'DEBUG', cb),\n onTrace: (cb) => this.#on(workerName, 'LIFECYCLE', 'TRACE', cb),\n onFatal: (cb) => this.#on(workerName, 'LIFECYCLE', 'FATAL', cb),\n onCritical: (cb) => this.on(workerName, 'LIFECYCLE', 'CRITICAL', cb), \n onEmergency: (cb) => this.#on(workerName, 'LIFECYCLE', 'EMERGENCY', cb),\n on: (event, cb) => this.#on(workerName, 'MESSAGE', event, cb),\n }\n }\n\n #on(workerName, type, event, cb) {\n if (type === 'LIFECYCLE') {\n if (event === 'READY' && this.#ready) {\n cb();\n return;\n }\n\n const lifecyleEvents = this.#workerLifecycleEvents.get(workerName) || new Map();\n lifecyleEvents.set(event, cb); \n this.#workerLifecycleEvents.set(workerName, lifecyleEvents);\n\n return () => lifecyleEvents.delete(event);\n }\n\n if (type === 'MESSAGE' || type === 'TRANSFER') {\n const events = this.#workerEvents.get(workerName) || new Map();\n const callbacks = events.get(event) || new Set();\n callbacks.add(cb);\n events.set(event, callbacks);\n this.#workerEvents.set(workerName, events);\n\n return () => callbacks.delete(cb);\n }\n\n if (type === 'LOG') {\n const logEvents = this.#workerLogEvents.get(workerName) || new Map();\n const callbacks = logEvents.get(event) || new Set();\n callbacks.add(cb);\n logEvents.set(event, callbacks);\n this.#workerLogEvents.set(workerName, logEvents);\n\n return () => callbacks.delete(cb);\n }\n\n throw new Error('WorkerManager: Invalid type');\n }\n\n #filterTransferables(payload) {\n return payload.filter(item => \n item instanceof ArrayBuffer ||\n item instanceof MessagePort ||\n item instanceof ImageBitmap ||\n item instanceof OffscreenCanvas ||\n item instanceof ReadableStream ||\n item instanceof WritableStream ||\n item instanceof TransformStream\n );\n }\n\n async #onMessageHandler(name, { type, event, payload, responseId, async }, source) {\n\n if (type === 'LIFECYCLE') {\n if (event === 'READY') {\n this.#ready = true;\n }\n\n const lifecyleEvents = this.#workerLifecycleEvents.get(name);\n if (!lifecyleEvents) {\n return;\n }\n const callback = lifecyleEvents.get(event);\n if (callback) {\n const worker = {...this.to(name), ...this.from(name)};\n callback(worker, ...payload);\n }\n\n return;\n }\n\n if (type === 'LOG') {\n // Handle log messages from workers\n this.#handleLogMessage(name, event, ...payload);\n \n // Also trigger any registered log callbacks\n const logEvents = this.#workerLogEvents.get(name);\n const callbacks = logEvents?.get(event) || [];\n callbacks.forEach((cb) => cb(source, ...payload));\n\n return;\n }\n\n if (type === 'MESSAGE' || type === 'TRANSFER') {\n const events = this.#workerEvents.get(name);\n if (!events) {\n return;\n }\n\n const callbacks = events.get(event) || [];\n \n if (!callbacks.length) {\n return;\n }\n\n if (async) {\n const results = [];\n \n for (const cb of callbacks) {\n const result = await cb(source, ...payload);\n results.push(result);\n }\n\n const transferables = this.#filterTransferables(results);\n const message = {\n type: 'CALLBACK',\n event,\n responseId,\n payload: results,\n async\n }\n this.#postMessage(source, message, transferables);\n return;\n }\n\n payload = responseId ? [...payload, this.#createResponse(source, responseId)] : payload;\n\n callbacks.forEach((cb) => cb(source, ...payload));\n\n return;\n }\n\n if (type === 'CALLBACK') {\n const callback = this.#responses.get(responseId);\n if (!callback) {\n return;\n }\n callback(...payload);\n this.#responses.delete(responseId);\n return;\n }\n\n throw new Error('WorkerManager: Invalid type');\n }\n\n #emit(workerName, type, event, payload = []) {\n try {\n const transferables = this.#filterTransferables(payload);\n const responseId = this.#createResponse(payload);\n const message = this.#createMessage(type, event, payload, responseId);\n\n this.#postMessage(workerName, message, transferables);\n } catch (error) {\n console.error('WorkerManager: Error emitting', workerName, type, event, payload, error);\n }\n }\n\n #emitAsync(workerName, type, event, payload = []) {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error(`WorkerManager: Async operation timed out ${workerName} ${event}`));\n }, 3000);\n\n const responseId = this.#responseClock;\n this.#responses.set(responseId, (...args) => {\n clearTimeout(timeout);\n\n if (args.length === 1) {\n resolve(args[0]);\n } else {\n resolve(...args);\n }\n });\n this.#responseClock++;\n\n const message = this.#createMessage(type, event, payload, responseId, true);\n const transferables = this.#filterTransferables(payload);\n\n this.#postMessage(workerName, message, transferables);\n })\n }\n\n #createResponse(payload) {\n if (payload.length > 0 && typeof payload[payload.length - 1] === 'function') {\n const callback = payload.pop();\n const responseId = this.#responseClock;\n this.#responses.set(responseId, callback);\n this.#responseClock++;\n\n return responseId;\n }\n\n return undefined;\n }\n\n #createMessage(type, event, payload = [], responseId, async = false) {\n return {\n type,\n event,\n payload,\n responseId,\n async,\n }\n }\n\n #handleLogMessage(workerName, event, logData) {\n const logLevel = event.toLowerCase();\n \n // Format the log message for the main thread\n const formattedMessage = `[${workerName.toUpperCase()}] ${logData.message}`;\n \n // Log to console with appropriate level\n switch (logLevel) {\n case 'error':\n case 'fatal':\n case 'critical':\n case 'emergency':\n console.error(formattedMessage, (logData.data || ''));\n break;\n case 'warning':\n console.warn(formattedMessage, (logData.data || ''));\n break;\n case 'info':\n console.info(formattedMessage, (logData.data || ''));\n break;\n case 'debug':\n console.debug(formattedMessage, (logData.data || ''));\n break;\n case 'trace':\n console.trace(formattedMessage, (logData.data || ''));\n break;\n default:\n console.log(formattedMessage, (logData.data || ''));\n }\n }\n\n #postMessage(workerName, message, transferables = []) {\n const workerInfo = this.#registrations.get(workerName);\n\n if (!workerInfo) {\n throw new Error(`WorkerManager: Worker ${workerName} not found`);\n }\n\n const { type, registration } = workerInfo;\n\n switch (type) {\n case 'service':\n registration.active.postMessage(message, transferables);\n break;\n case 'web':\n registration.postMessage(message, transferables);\n break;\n case 'shared':\n registration.port.postMessage(message, transferables);\n break;\n }\n }\n}", "\nexport const WORKER_TYPES = {\n SERVICE_WORKER: 'SERVICE_WORKER',\n WEB_WORKER: 'WEB_WORKER',\n SHARED_WORKER: 'SHARED_WORKER',\n}\n\nexport function getWorkerType() {\n if (typeof self !== 'undefined' && 'ServiceWorkerGlobalScope' in self) {\n return WORKER_TYPES.SERVICE_WORKER;\n } else if (typeof self !== 'undefined' && 'SharedWorkerGlobalScope' in self) {\n return WORKER_TYPES.SHARED_WORKER;\n } else if (typeof self !== 'undefined' && 'WorkerGlobalScope' in self) {\n return WORKER_TYPES.WEB_WORKER;\n } else {\n throw new Error('WorkerClient: Must be used in a worker context (service worker, shared worker, or web worker)');\n }\n}\n", "import { ServiceProvider } from '@jucie.io/engine';\nimport { getWorkerType, WORKER_TYPES } from './utils/getWorkerType';\n\nexport class WorkerClient extends ServiceProvider {\n #workerType = getWorkerType();\n #sources = new Set();\n #lifecycleEvents = new Map();\n #events = new Map();\n #serviceWorkerEvents = new Map();\n #callbacks = new Map();\n #responseClock = 1;\n\n static manifest = {\n name: 'Worker Events',\n namespace: 'worker',\n dependencies: [],\n version: '1.0.0',\n description: 'Handles events in service workers and web workers',\n default: {\n events: {},\n }\n }\n\n initialize() {\n switch (this.#workerType) {\n case WORKER_TYPES.SERVICE_WORKER:\n this.#setupServiceWorkerEvents();\n self.onmessage = (event) => this.#onMessageHandler(event.source, event.data);\n break;\n case WORKER_TYPES.WEB_WORKER:\n self.onmessage = (event) => this.#onMessageHandler(self, event.data);\n break;\n case WORKER_TYPES.SHARED_WORKER:\n self.onconnect = (event) => {\n const port = event.ports[0];\n port.onmessage = (event) => this.#onMessageHandler(port, event.data);\n this.#sources.add(port);\n }\n break;\n }\n }\n\n actions(context, config) {\n switch (this.#workerType) {\n case WORKER_TYPES.SERVICE_WORKER: \n return {\n // Service Worker API - supports multiple clients\n onConnect: (callback) => this.#on('LIFECYCLE', 'CONNECT', callback),\n onDisconnect: (callback) => this.#on('LIFECYCLE', 'DISCONNECT', callback),\n on: (event, callback) => this.#on('MESSAGE', event, callback),\n onFetch: (callback) => this.#on('SERVICE_WORKER', 'FETCH', callback),\n onInstall: (callback) => this.#on('SERVICE_WORKER', 'INSTALL', callback),\n onActivate: (callback) => this.#on('SERVICE_WORKER', 'ACTIVATE', callback),\n log: (level, message, ...data) => this.#log(level, message, ...data),\n emit: (event, ...payload) => this.#emit('*', 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit('*', 'TRANSFER', event, payload),\n to: (source) => {\n return {\n emit: (event, ...payload) => this.#emit(source, 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit(source, 'TRANSFER', event, payload),\n }\n }\n }\n break;\n case WORKER_TYPES.WEB_WORKER:\n return {\n // Web Worker API - single source (main thread)\n on: (event, callback) => this.#on('MESSAGE', event, callback),\n log: (level, message, ...data) => this.#log(level, message, ...data),\n emit: (event, ...payload) => this.#emit(self, 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit(self, 'TRANSFER', event, payload),\n }\n case WORKER_TYPES.SHARED_WORKER:\n return {\n // Shared Worker API - supports multiple ports\n onConnect: (callback) => this.#on('LIFECYCLE', 'CONNECT', callback),\n onDisconnect: (callback) => this.#on('LIFECYCLE', 'DISCONNECT', callback),\n on: (event, callback) => this.#on('MESSAGE', event, callback),\n log: (level, message, ...data) => this.#log(level, message, ...data),\n emit: (event, ...payload) => this.#emit('*', 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit('*', 'TRANSFER', event, payload),\n to: (source) => {\n return {\n emit: (event, ...payload) => this.#emit(source, 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit(source, 'TRANSFER', event, payload),\n }\n }\n }\n default:\n return {}\n }\n }\n\n #createCallback(source, responseId) {\n return (...payload) => {\n const message = {\n type: 'CALLBACK',\n responseId,\n payload,\n }\n this.#postMessage(source, message, this.#filterTransferables(payload));\n }\n }\n\n #on (type, event, callback) {\n switch (type) {\n case 'LIFECYCLE':\n this.#lifecycleEvents.set(event, callback); \n return () => this.#lifecycleEvents.delete(event);\n case 'MESSAGE':\n case 'TRANSFER':\n const callbacks = this.#events.get(event) || new Set();\n callbacks.add(callback);\n this.#events.set(event, callbacks);\n return () => callbacks.delete(callback);\n case 'SERVICE_WORKER':\n const swCallbacks = this.#serviceWorkerEvents.get(event) || new Set();\n swCallbacks.add(callback);\n this.#serviceWorkerEvents.set(event, swCallbacks);\n return () => swCallbacks.delete(callback);\n default:\n console.error('WorkerClient: Invalid type', type, event, callback);\n }\n }\n\n #setupServiceWorkerEvents() {\n // Install event\n self.addEventListener('install', (event) => {\n self.skipWaiting();\n \n // Call any registered install callbacks\n const callbacks = this.#serviceWorkerEvents.get('INSTALL');\n if (callbacks) {\n callbacks.forEach(callback => callback(event));\n }\n });\n\n // Activate event\n self.addEventListener('activate', (event) => {\n event.waitUntil(\n self.clients.claim()\n );\n \n // Call any registered activate callbacks\n const callbacks = this.#serviceWorkerEvents.get('ACTIVATE');\n if (callbacks) {\n callbacks.forEach(callback => callback(event));\n }\n });\n\n // Fetch event\n self.addEventListener('fetch', (event) => {\n // Call any registered fetch callbacks\n const callbacks = this.#serviceWorkerEvents.get('FETCH');\n if (callbacks) {\n callbacks.forEach(callback => callback(event));\n }\n });\n\n console.log('WorkerClient #setupServiceWorkerEvents');\n }\n\n #log(level, message, ...data) {\n // Send log message back to main thread\n const logData = {\n level,\n message,\n data: data.length > 0 ? data : undefined,\n timestamp: Date.now(),\n workerType: this.#workerType\n };\n\n // For service workers, send to all clients\n if (this.#workerType === WORKER_TYPES.SERVICE_WORKER || this.#workerType === WORKER_TYPES.SHARED_WORKER) {\n this.#emit('*', 'LOG', level, [logData]);\n } else {\n this.#emit(self, 'LOG', level, [logData]);\n }\n\n // Also log locally in the worker\n const logMethod = console[level] || console.log;\n logMethod(`[${level.toUpperCase()}] ${message}`, ...data);\n }\n\n #filterTransferables(payload) {\n return payload.filter(item => \n item instanceof ArrayBuffer ||\n item instanceof MessagePort ||\n (typeof ImageBitmap !== 'undefined' && item instanceof ImageBitmap) ||\n (typeof OffscreenCanvas !== 'undefined' && item instanceof OffscreenCanvas) ||\n (typeof ReadableStream !== 'undefined' && item instanceof ReadableStream) ||\n (typeof WritableStream !== 'undefined' && item instanceof WritableStream) ||\n (typeof TransformStream !== 'undefined' && item instanceof TransformStream)\n );\n }\n\n #hasCallback(payload) {\n return payload.length > 0 && typeof payload[payload.length - 1] === 'function';\n }\n\n #extractCallback(payload) {\n if (this.#hasCallback(payload)) {\n const callback = payload.pop();\n const responseId = this.#responseClock;\n this.#callbacks.set(responseId, callback);\n this.#responseClock++;\n return responseId;\n }\n return undefined;\n }\n\n #emit(source, type, event, payload = []) {\n try {\n let message;\n let transferables = this.#filterTransferables(payload);\n let responseId = this.#extractCallback(payload);\n\n switch (type) {\n case 'LIFECYCLE':\n message = {\n type: 'LIFECYCLE',\n event,\n payload,\n responseId,\n }\n break;\n case 'MESSAGE':\n message = {\n type: 'MESSAGE',\n event,\n payload,\n responseId,\n }\n break;\n case 'LOG':\n message = {\n type: 'LOG',\n event,\n payload,\n responseId,\n }\n break;\n case 'TRANSFER':\n message = {\n type: 'MESSAGE',\n event,\n payload,\n responseId,\n }\n break;\n default:\n throw new Error('WorkerClient: Invalid type');\n }\n\n this.#postMessage(source, message, transferables);\n } catch (error) {\n console.error('WorkerClient: Error emitting', error);\n }\n }\n\n #postMessage(source, message, transferables = []) {\n try {\n if (source === '*') {\n this.#sources.forEach(source => {\n source.postMessage(message, transferables);\n });\n return;\n }\n \n source.postMessage(message, transferables);\n } catch (error) {\n console.error('WorkerClient: Error posting message', error);\n }\n }\n\n async #onMessageHandler(source = null, { type, event, payload, responseId, async }) {\n if (type === 'LIFECYCLE') {\n const callback = this.#lifecycleEvents.get(event);\n this.#respond(source, event, payload);\n\n if (callback) {\n callback(source, ...payload);\n }\n }\n\n if (type === 'MESSAGE' || type === 'TRANSFER') {\n const callbacks = this.#events.get(event);\n\n if (async) {\n const results = [];\n \n for (const cb of callbacks) {\n const result = await cb(source, ...payload);\n results.push(result);\n }\n\n const transferables = this.#filterTransferables(results);\n const message = {\n type: 'CALLBACK',\n event,\n responseId,\n payload: results,\n async\n }\n this.#postMessage(source, message, transferables);\n return;\n }\n\n payload = responseId ? [...payload, this.#createCallback(source, responseId)] : payload;\n \n if (callbacks) {\n callbacks.forEach((cb) => cb(source, ...payload));\n }\n }\n }\n\n #respond(source, event, payload) {\n switch (event) {\n case 'CONNECT':\n this.#sources.add(source);\n this.#emit(source, 'LIFECYCLE', 'READY', []);\n break;\n }\n }\n}", "export const EVENTS = {\n CONNECT: 'CONNECT',\n DISCONNECT: 'DISCONNECT',\n MESSAGE: 'MESSAGE',\n READY: 'READY',\n ERROR: 'ERROR',\n WARNING: 'WARNING',\n INFO: 'INFO',\n DEBUG: 'DEBUG',\n TRACE: 'TRACE',\n FATAL: 'FATAL',\n CRITICAL: 'CRITICAL',\n EMERGENCY: 'EMERGENCY',\n};"],
5
- "mappings": "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",
6
- "names": ["GLOBAL_NS_OBJ", "checkType", "value", "expectedType", "name", "type", "matchesType", "typeNames", "getTypeName", "createTypeChecker", "DefinitionTypes", "Definitions", "createDefinition", "type", "returnTypes", "returnTypeChecker", "createTypeChecker", "DefinitionTypes", "definitionType", "name", "factory", "defaultArgs", "definition", "args", "combinedArgs", "res", "error", "Definitions", "BAD_KEYS", "RESERVED_NAMESPACES", "MAX_NAME_LENGTH", "VALID_NAME", "assertSafeKey", "key", "where", "assertNamespace", "ns", "defineMiddleware", "createDefinition", "defineActions", "defineUninstall", "defineInitialize", "defineGetters", "DefinitionBuilder", "_DefinitionBuilder", "namespace", "#ns", "#args", "#slots", "#set", "type", "factory", "creator", "defineMiddleware", "defineGetters", "defineActions", "defineInitialize", "defineUninstall", "ServiceProvider", "_ServiceProvider", "#services", "options", "useContext", "config", "namespace", "assertNamespace", "instance", "keys", "builder", "DefinitionBuilder", "setupContext", "factory", "maybe", "error", "ENGINE_CONTEXT", "WorkerManager", "ServiceProvider", "#registrations", "#workerEvents", "#workerLifecycleEvents", "#workerLogEvents", "#responses", "#responseClock", "#ready", "_", "config", "worker", "event", "error", "context", "type", "name", "fn", "url", "options", "workerName", "setup", "registration", "#onMessageHandler", "#emit", "absoluteUrl", "workerInfo", "port", "success", "promises", "allRegistrations", "results", "payload", "#emitAsync", "cb", "#on", "lifecyleEvents", "events", "callbacks", "logEvents", "#filterTransferables", "item", "responseId", "async", "source", "callback", "#handleLogMessage", "result", "transferables", "message", "#postMessage", "#createResponse", "#createMessage", "resolve", "reject", "timeout", "args", "logData", "logLevel", "formattedMessage", "WORKER_TYPES", "getWorkerType", "WorkerClient", "ServiceProvider", "#workerType", "getWorkerType", "#sources", "#lifecycleEvents", "#events", "#serviceWorkerEvents", "#callbacks", "#responseClock", "WORKER_TYPES", "#setupServiceWorkerEvents", "event", "#onMessageHandler", "port", "context", "config", "callback", "#on", "level", "message", "data", "#log", "payload", "#emit", "source", "#createCallback", "responseId", "#postMessage", "#filterTransferables", "type", "callbacks", "swCallbacks", "logData", "item", "#hasCallback", "#extractCallback", "transferables", "error", "async", "#respond", "results", "cb", "result", "EVENTS"]
3
+ "sources": ["../src/main.js", "../src/WorkerManager.js", "../src/WorkerClient.js", "../src/utils/getWorkerType.js", "../src/EVENTS.js"],
4
+ "sourcesContent": ["export { WorkerManager } from './WorkerManager';\nexport { WorkerClient } from './WorkerClient';\nexport { EVENTS } from './EVENTS';", "import { ServiceProvider } from '@jucie.io/engine';\n\nexport class WorkerManager extends ServiceProvider {\n #registrations = new Map();\n #workerEvents = new Map();\n #workerLifecycleEvents = new Map(); // Map of worker name to Map of event name to callbacks\n #workerLogEvents = new Map(); // Map of worker name to Map of log level to callbacks\n #responses = new Map(); // Map of worker name to Map of event name to callbacks\n #responseClock = 1;\n #ready = false;\n\n static manifest = {\n name: 'Worker Registrar',\n namespace: 'worker',\n dependencies: [],\n version: '1.0.0',\n description: 'Manages service workers, web workers, and shared workers with unified API',\n default: {\n id: null,\n workers: [],\n }\n }\n\n initialize(_, config) {\n if (config?.workers && config.workers.length > 0) {\n for (const worker of config.workers) {\n this.register(worker);\n }\n }\n\n window.addEventListener('beforeunload', async (event) => {\n try {\n await this.unregisterAll();\n } catch (error) {\n console.error('Design view: Error unregistering workers:', error);\n }\n });\n }\n\n actions(context, config) {\n return {\n isSupported: (type) => this.isSupported(type),\n setup: (name, fn) => this.setup(name, fn),\n register: (name, type, url, options = {}) => this.register({name, type, url, options}),\n unregister: (name) => this.unregister(name),\n unregisterAll: () => this.unregisterAll(),\n to: (workerName) => this.to(workerName),\n from: (workerName) => this.from(workerName),\n }\n }\n\n async register({name, type, url, setup, options = {}}) {\n if (!this.isSupported(type)) {\n throw new Error(`${type} workers are not supported in this environment`);\n }\n\n if (this.#registrations.has(name)) {\n throw 'Worker already registered'\n }\n\n\n try {\n const registration = await this.initializeRegistration(type, url, setup, options);\n console.log('\uD83C\uDFAF Registration', registration);\n \n switch (type) {\n case 'service':\n if (!registration.active) {\n registration.installing.onstatechange = (event) => {\n if (event.target.state === 'activated') {\n this.#registrations.set(name, { type, registration });\n // Listen for messages from service worker on navigator.serviceWorker\n navigator.serviceWorker.addEventListener('message', (event) => this.#onMessageHandler(name, event.data, event.source));\n this.#emit(name, 'LIFECYCLE', 'CONNECT');\n } \n }\n } else {\n this.#registrations.set(name, { type, registration });\n // Listen for messages from service worker on navigator.serviceWorker\n navigator.serviceWorker.addEventListener('message', (event) => this.#onMessageHandler(name, event.data, event.source));\n this.#emit(name, 'LIFECYCLE', 'CONNECT');\n }\n \n break;\n \n case 'web':\n this.#registrations.set(name, { type, registration });\n registration.onmessage = (event) => this.#onMessageHandler(name, event.data, registration);\n this.#emit(name, 'LIFECYCLE', 'CONNECT');\n break;\n \n case 'shared':\n this.#registrations.set(name, { type, registration });\n\n // Set up message handling for this port\n registration.port.onmessage = (event) => this.#onMessageHandler(name, event.data, registration.port);\n \n // Start the port\n registration.port.start();\n\n this.#emit(name, 'LIFECYCLE', 'CONNECT');\n break;\n }\n \n return () => this.unregister(name);\n } catch (error) {\n console.error(`WorkerManager: Failed to register ${name} (${type})`, error);\n return null;\n }\n }\n\n async initializeRegistration(type, url, setup, options = {}) {\n let registration;\n if (setup) {\n registration = await setup();\n } else if (url) {\n const absoluteUrl = url instanceof URL ? url : new URL(url, window.location.origin).href;\n switch (type) {\n case 'service':\n registration = await navigator.serviceWorker.register(absoluteUrl, options);\n break;\n case 'web':\n registration = new Worker(absoluteUrl, options);\n break;\n case 'shared':\n registration = new SharedWorker(absoluteUrl, options);\n break;\n }\n }\n return registration;\n }\n\n isSupported(type) {\n switch (type) {\n case 'service':\n return 'serviceWorker' in navigator;\n case 'web':\n return 'Worker' in window;\n case 'shared':\n return 'SharedWorker' in window;\n default:\n return false;\n }\n }\n\n async unregister(name) {\n const workerInfo = this.#registrations.get(name);\n if (!workerInfo) {\n return false;\n }\n\n const { type, registration, port } = workerInfo;\n let success = false;\n\n try {\n switch (type) {\n case 'service':\n success = await registration.unregister();\n break;\n case 'web':\n registration.terminate();\n success = true;\n break;\n case 'shared':\n if (port) {\n port.close();\n }\n success = true;\n break;\n }\n \n if (success) {\n this.#registrations.delete(name);\n this.#workerEvents.delete(name);\n }\n } catch (error) {\n console.error(`WorkerManager: Error unregistering ${name}`, error);\n }\n \n return success;\n }\n\n async unregisterAll() {\n const promises = [];\n \n // Unregister all tracked registrations\n for (const [name, workerInfo] of this.#registrations) {\n console.log(`\uD83C\uDFAF Unregistering worker ${name} of type ${workerInfo.type}`);\n promises.push(this.unregister(name));\n }\n \n // Also unregister any service workers that might exist (for service workers only)\n try {\n const allRegistrations = await navigator.serviceWorker.getRegistrations();\n for (const registration of allRegistrations) {\n promises.push(registration.unregister());\n }\n } catch (error) {\n console.error('WorkerManager: Error getting all service worker registrations:', error);\n }\n \n const results = await Promise.all(promises);\n this.#registrations.clear();\n this.#workerEvents.clear();\n \n return results;\n }\n\n to(workerName) {\n return {\n emit: (event, ...payload) => this.#emit(workerName, 'MESSAGE', event, payload),\n emitAsync: (event, ...payload) => this.#emitAsync(workerName, 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit(workerName, 'TRANSFER', event, payload),\n }\n }\n\n from(workerName) {\n return {\n onReady: (cb) => this.#on(workerName, 'LIFECYCLE', 'READY', cb),\n onConnect: (cb) => this.#on(workerName, 'LIFECYCLE', 'CONNECT', cb),\n onDisconnect: (cb) => this.#on(workerName, 'LIFECYCLE', 'DISCONNECT', cb),\n onError: (cb) => this.#on(workerName, 'LIFECYCLE', 'ERROR', cb),\n onWarning: (cb) => this.#on(workerName, 'LIFECYCLE', 'WARNING', cb),\n onInfo: (cb) => this.#on(workerName, 'LIFECYCLE', 'INFO', cb),\n onDebug: (cb) => this.#on(workerName, 'LIFECYCLE', 'DEBUG', cb),\n onTrace: (cb) => this.#on(workerName, 'LIFECYCLE', 'TRACE', cb),\n onFatal: (cb) => this.#on(workerName, 'LIFECYCLE', 'FATAL', cb),\n onCritical: (cb) => this.on(workerName, 'LIFECYCLE', 'CRITICAL', cb), \n onEmergency: (cb) => this.#on(workerName, 'LIFECYCLE', 'EMERGENCY', cb),\n on: (event, cb) => this.#on(workerName, 'MESSAGE', event, cb),\n }\n }\n\n #on(workerName, type, event, cb) {\n if (type === 'LIFECYCLE') {\n if (event === 'READY' && this.#ready) {\n cb();\n return;\n }\n\n const lifecyleEvents = this.#workerLifecycleEvents.get(workerName) || new Map();\n lifecyleEvents.set(event, cb); \n this.#workerLifecycleEvents.set(workerName, lifecyleEvents);\n\n return () => lifecyleEvents.delete(event);\n }\n\n if (type === 'MESSAGE' || type === 'TRANSFER') {\n const events = this.#workerEvents.get(workerName) || new Map();\n const callbacks = events.get(event) || new Set();\n callbacks.add(cb);\n events.set(event, callbacks);\n this.#workerEvents.set(workerName, events);\n\n return () => callbacks.delete(cb);\n }\n\n if (type === 'LOG') {\n const logEvents = this.#workerLogEvents.get(workerName) || new Map();\n const callbacks = logEvents.get(event) || new Set();\n callbacks.add(cb);\n logEvents.set(event, callbacks);\n this.#workerLogEvents.set(workerName, logEvents);\n\n return () => callbacks.delete(cb);\n }\n\n throw new Error('WorkerManager: Invalid type');\n }\n\n #filterTransferables(payload) {\n return payload.filter(item => \n item instanceof ArrayBuffer ||\n item instanceof MessagePort ||\n item instanceof ImageBitmap ||\n item instanceof OffscreenCanvas ||\n item instanceof ReadableStream ||\n item instanceof WritableStream ||\n item instanceof TransformStream\n );\n }\n\n async #onMessageHandler(name, { type, event, payload, responseId, async }, source) {\n\n if (type === 'LIFECYCLE') {\n if (event === 'READY') {\n this.#ready = true;\n }\n\n const lifecyleEvents = this.#workerLifecycleEvents.get(name);\n if (!lifecyleEvents) {\n return;\n }\n const callback = lifecyleEvents.get(event);\n if (callback) {\n const worker = {...this.to(name), ...this.from(name)};\n callback(worker, ...payload);\n }\n\n return;\n }\n\n if (type === 'LOG') {\n // Handle log messages from workers\n this.#handleLogMessage(name, event, ...payload);\n \n // Also trigger any registered log callbacks\n const logEvents = this.#workerLogEvents.get(name);\n const callbacks = logEvents?.get(event) || [];\n callbacks.forEach((cb) => cb(source, ...payload));\n\n return;\n }\n\n if (type === 'MESSAGE' || type === 'TRANSFER') {\n const events = this.#workerEvents.get(name);\n if (!events) {\n return;\n }\n\n const callbacks = events.get(event) || [];\n \n if (!callbacks.length) {\n return;\n }\n\n if (async) {\n const results = [];\n \n for (const cb of callbacks) {\n const result = await cb(source, ...payload);\n results.push(result);\n }\n\n const transferables = this.#filterTransferables(results);\n const message = {\n type: 'CALLBACK',\n event,\n responseId,\n payload: results,\n async\n }\n this.#postMessage(source, message, transferables);\n return;\n }\n\n payload = responseId ? [...payload, this.#createResponse(source, responseId)] : payload;\n\n callbacks.forEach((cb) => cb(source, ...payload));\n\n return;\n }\n\n if (type === 'CALLBACK') {\n const callback = this.#responses.get(responseId);\n if (!callback) {\n return;\n }\n callback(...payload);\n this.#responses.delete(responseId);\n return;\n }\n\n throw new Error('WorkerManager: Invalid type');\n }\n\n #emit(workerName, type, event, payload = []) {\n try {\n const transferables = this.#filterTransferables(payload);\n const responseId = this.#createResponse(payload);\n const message = this.#createMessage(type, event, payload, responseId);\n\n this.#postMessage(workerName, message, transferables);\n } catch (error) {\n console.error('WorkerManager: Error emitting', workerName, type, event, payload, error);\n }\n }\n\n #emitAsync(workerName, type, event, payload = []) {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error(`WorkerManager: Async operation timed out ${workerName} ${event}`));\n }, 3000);\n\n const responseId = this.#responseClock;\n this.#responses.set(responseId, (...args) => {\n clearTimeout(timeout);\n\n if (args.length === 1) {\n resolve(args[0]);\n } else {\n resolve(...args);\n }\n });\n this.#responseClock++;\n\n const message = this.#createMessage(type, event, payload, responseId, true);\n const transferables = this.#filterTransferables(payload);\n\n this.#postMessage(workerName, message, transferables);\n })\n }\n\n #createResponse(payload) {\n if (payload.length > 0 && typeof payload[payload.length - 1] === 'function') {\n const callback = payload.pop();\n const responseId = this.#responseClock;\n this.#responses.set(responseId, callback);\n this.#responseClock++;\n\n return responseId;\n }\n\n return undefined;\n }\n\n #createMessage(type, event, payload = [], responseId, async = false) {\n return {\n type,\n event,\n payload,\n responseId,\n async,\n }\n }\n\n #handleLogMessage(workerName, event, logData) {\n const logLevel = event.toLowerCase();\n \n // Format the log message for the main thread\n const formattedMessage = `[${workerName.toUpperCase()}] ${logData.message}`;\n \n // Log to console with appropriate level\n switch (logLevel) {\n case 'error':\n case 'fatal':\n case 'critical':\n case 'emergency':\n console.error(formattedMessage, (logData.data || ''));\n break;\n case 'warning':\n console.warn(formattedMessage, (logData.data || ''));\n break;\n case 'info':\n console.info(formattedMessage, (logData.data || ''));\n break;\n case 'debug':\n console.debug(formattedMessage, (logData.data || ''));\n break;\n case 'trace':\n console.trace(formattedMessage, (logData.data || ''));\n break;\n default:\n console.log(formattedMessage, (logData.data || ''));\n }\n }\n\n #postMessage(workerName, message, transferables = []) {\n const workerInfo = this.#registrations.get(workerName);\n\n if (!workerInfo) {\n throw new Error(`WorkerManager: Worker ${workerName} not found`);\n }\n\n const { type, registration } = workerInfo;\n\n switch (type) {\n case 'service':\n registration.active.postMessage(message, transferables);\n break;\n case 'web':\n registration.postMessage(message, transferables);\n break;\n case 'shared':\n registration.port.postMessage(message, transferables);\n break;\n }\n }\n}", "import { ServiceProvider } from '@jucie.io/engine';\nimport { getWorkerType, WORKER_TYPES } from './utils/getWorkerType';\n\nexport class WorkerClient extends ServiceProvider {\n #workerType = getWorkerType();\n #sources = new Set();\n #lifecycleEvents = new Map();\n #events = new Map();\n #serviceWorkerEvents = new Map();\n #callbacks = new Map();\n #responseClock = 1;\n\n static manifest = {\n name: 'Worker Events',\n namespace: 'worker',\n dependencies: [],\n version: '1.0.0',\n description: 'Handles events in service workers and web workers',\n default: {\n events: {},\n }\n }\n\n initialize() {\n switch (this.#workerType) {\n case WORKER_TYPES.SERVICE_WORKER:\n this.#setupServiceWorkerEvents();\n self.onmessage = (event) => this.#onMessageHandler(event.source, event.data);\n break;\n case WORKER_TYPES.WEB_WORKER:\n self.onmessage = (event) => this.#onMessageHandler(self, event.data);\n break;\n case WORKER_TYPES.SHARED_WORKER:\n self.onconnect = (event) => {\n const port = event.ports[0];\n port.onmessage = (event) => this.#onMessageHandler(port, event.data);\n this.#sources.add(port);\n }\n break;\n }\n }\n\n actions(context, config) {\n switch (this.#workerType) {\n case WORKER_TYPES.SERVICE_WORKER: \n return {\n // Service Worker API - supports multiple clients\n onConnect: (callback) => this.#on('LIFECYCLE', 'CONNECT', callback),\n onDisconnect: (callback) => this.#on('LIFECYCLE', 'DISCONNECT', callback),\n on: (event, callback) => this.#on('MESSAGE', event, callback),\n onFetch: (callback) => this.#on('SERVICE_WORKER', 'FETCH', callback),\n onInstall: (callback) => this.#on('SERVICE_WORKER', 'INSTALL', callback),\n onActivate: (callback) => this.#on('SERVICE_WORKER', 'ACTIVATE', callback),\n log: (level, message, ...data) => this.#log(level, message, ...data),\n emit: (event, ...payload) => this.#emit('*', 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit('*', 'TRANSFER', event, payload),\n to: (source) => {\n return {\n emit: (event, ...payload) => this.#emit(source, 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit(source, 'TRANSFER', event, payload),\n }\n }\n }\n break;\n case WORKER_TYPES.WEB_WORKER:\n return {\n // Web Worker API - single source (main thread)\n on: (event, callback) => this.#on('MESSAGE', event, callback),\n log: (level, message, ...data) => this.#log(level, message, ...data),\n emit: (event, ...payload) => this.#emit(self, 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit(self, 'TRANSFER', event, payload),\n }\n case WORKER_TYPES.SHARED_WORKER:\n return {\n // Shared Worker API - supports multiple ports\n onConnect: (callback) => this.#on('LIFECYCLE', 'CONNECT', callback),\n onDisconnect: (callback) => this.#on('LIFECYCLE', 'DISCONNECT', callback),\n on: (event, callback) => this.#on('MESSAGE', event, callback),\n log: (level, message, ...data) => this.#log(level, message, ...data),\n emit: (event, ...payload) => this.#emit('*', 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit('*', 'TRANSFER', event, payload),\n to: (source) => {\n return {\n emit: (event, ...payload) => this.#emit(source, 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit(source, 'TRANSFER', event, payload),\n }\n }\n }\n default:\n return {}\n }\n }\n\n #createCallback(source, responseId) {\n return (...payload) => {\n const message = {\n type: 'CALLBACK',\n responseId,\n payload,\n }\n this.#postMessage(source, message, this.#filterTransferables(payload));\n }\n }\n\n #on (type, event, callback) {\n switch (type) {\n case 'LIFECYCLE':\n this.#lifecycleEvents.set(event, callback); \n return () => this.#lifecycleEvents.delete(event);\n case 'MESSAGE':\n case 'TRANSFER':\n const callbacks = this.#events.get(event) || new Set();\n callbacks.add(callback);\n this.#events.set(event, callbacks);\n return () => callbacks.delete(callback);\n case 'SERVICE_WORKER':\n const swCallbacks = this.#serviceWorkerEvents.get(event) || new Set();\n swCallbacks.add(callback);\n this.#serviceWorkerEvents.set(event, swCallbacks);\n return () => swCallbacks.delete(callback);\n default:\n console.error('WorkerClient: Invalid type', type, event, callback);\n }\n }\n\n #setupServiceWorkerEvents() {\n // Install event\n self.addEventListener('install', (event) => {\n self.skipWaiting();\n \n // Call any registered install callbacks\n const callbacks = this.#serviceWorkerEvents.get('INSTALL');\n if (callbacks) {\n callbacks.forEach(callback => callback(event));\n }\n });\n\n // Activate event\n self.addEventListener('activate', (event) => {\n event.waitUntil(\n self.clients.claim()\n );\n \n // Call any registered activate callbacks\n const callbacks = this.#serviceWorkerEvents.get('ACTIVATE');\n if (callbacks) {\n callbacks.forEach(callback => callback(event));\n }\n });\n\n // Fetch event\n self.addEventListener('fetch', (event) => {\n // Call any registered fetch callbacks\n const callbacks = this.#serviceWorkerEvents.get('FETCH');\n if (callbacks) {\n callbacks.forEach(callback => callback(event));\n }\n });\n\n console.log('WorkerClient #setupServiceWorkerEvents');\n }\n\n #log(level, message, ...data) {\n // Send log message back to main thread\n const logData = {\n level,\n message,\n data: data.length > 0 ? data : undefined,\n timestamp: Date.now(),\n workerType: this.#workerType\n };\n\n // For service workers, send to all clients\n if (this.#workerType === WORKER_TYPES.SERVICE_WORKER || this.#workerType === WORKER_TYPES.SHARED_WORKER) {\n this.#emit('*', 'LOG', level, [logData]);\n } else {\n this.#emit(self, 'LOG', level, [logData]);\n }\n\n // Also log locally in the worker\n const logMethod = console[level] || console.log;\n logMethod(`[${level.toUpperCase()}] ${message}`, ...data);\n }\n\n #filterTransferables(payload) {\n return payload.filter(item => \n item instanceof ArrayBuffer ||\n item instanceof MessagePort ||\n (typeof ImageBitmap !== 'undefined' && item instanceof ImageBitmap) ||\n (typeof OffscreenCanvas !== 'undefined' && item instanceof OffscreenCanvas) ||\n (typeof ReadableStream !== 'undefined' && item instanceof ReadableStream) ||\n (typeof WritableStream !== 'undefined' && item instanceof WritableStream) ||\n (typeof TransformStream !== 'undefined' && item instanceof TransformStream)\n );\n }\n\n #hasCallback(payload) {\n return payload.length > 0 && typeof payload[payload.length - 1] === 'function';\n }\n\n #extractCallback(payload) {\n if (this.#hasCallback(payload)) {\n const callback = payload.pop();\n const responseId = this.#responseClock;\n this.#callbacks.set(responseId, callback);\n this.#responseClock++;\n return responseId;\n }\n return undefined;\n }\n\n #emit(source, type, event, payload = []) {\n try {\n let message;\n let transferables = this.#filterTransferables(payload);\n let responseId = this.#extractCallback(payload);\n\n switch (type) {\n case 'LIFECYCLE':\n message = {\n type: 'LIFECYCLE',\n event,\n payload,\n responseId,\n }\n break;\n case 'MESSAGE':\n message = {\n type: 'MESSAGE',\n event,\n payload,\n responseId,\n }\n break;\n case 'LOG':\n message = {\n type: 'LOG',\n event,\n payload,\n responseId,\n }\n break;\n case 'TRANSFER':\n message = {\n type: 'MESSAGE',\n event,\n payload,\n responseId,\n }\n break;\n default:\n throw new Error('WorkerClient: Invalid type');\n }\n\n this.#postMessage(source, message, transferables);\n } catch (error) {\n console.error('WorkerClient: Error emitting', error);\n }\n }\n\n #postMessage(source, message, transferables = []) {\n try {\n if (source === '*') {\n this.#sources.forEach(source => {\n source.postMessage(message, transferables);\n });\n return;\n }\n \n source.postMessage(message, transferables);\n } catch (error) {\n console.error('WorkerClient: Error posting message', error);\n }\n }\n\n async #onMessageHandler(source = null, { type, event, payload, responseId, async }) {\n if (type === 'LIFECYCLE') {\n const callback = this.#lifecycleEvents.get(event);\n this.#respond(source, event, payload);\n\n if (callback) {\n callback(source, ...payload);\n }\n }\n\n if (type === 'MESSAGE' || type === 'TRANSFER') {\n const callbacks = this.#events.get(event);\n\n if (async) {\n const results = [];\n \n for (const cb of callbacks) {\n const result = await cb(source, ...payload);\n results.push(result);\n }\n\n const transferables = this.#filterTransferables(results);\n const message = {\n type: 'CALLBACK',\n event,\n responseId,\n payload: results,\n async\n }\n this.#postMessage(source, message, transferables);\n return;\n }\n\n payload = responseId ? [...payload, this.#createCallback(source, responseId)] : payload;\n \n if (callbacks) {\n callbacks.forEach((cb) => cb(source, ...payload));\n }\n }\n }\n\n #respond(source, event, payload) {\n switch (event) {\n case 'CONNECT':\n this.#sources.add(source);\n this.#emit(source, 'LIFECYCLE', 'READY', []);\n break;\n }\n }\n}", "\nexport const WORKER_TYPES = {\n SERVICE_WORKER: 'SERVICE_WORKER',\n WEB_WORKER: 'WEB_WORKER',\n SHARED_WORKER: 'SHARED_WORKER',\n}\n\nexport function getWorkerType() {\n if (typeof self !== 'undefined' && 'ServiceWorkerGlobalScope' in self) {\n return WORKER_TYPES.SERVICE_WORKER;\n } else if (typeof self !== 'undefined' && 'SharedWorkerGlobalScope' in self) {\n return WORKER_TYPES.SHARED_WORKER;\n } else if (typeof self !== 'undefined' && 'WorkerGlobalScope' in self) {\n return WORKER_TYPES.WEB_WORKER;\n } else {\n throw new Error('WorkerClient: Must be used in a worker context (service worker, shared worker, or web worker)');\n }\n}\n", "export const EVENTS = {\n CONNECT: 'CONNECT',\n DISCONNECT: 'DISCONNECT',\n MESSAGE: 'MESSAGE',\n READY: 'READY',\n ERROR: 'ERROR',\n WARNING: 'WARNING',\n INFO: 'INFO',\n DEBUG: 'DEBUG',\n TRACE: 'TRACE',\n FATAL: 'FATAL',\n CRITICAL: 'CRITICAL',\n EMERGENCY: 'EMERGENCY',\n};"],
5
+ "mappings": "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",
6
+ "names": ["main_exports", "__export", "EVENTS", "WorkerClient", "WorkerManager", "__toCommonJS", "import_engine", "WorkerManager", "#registrations", "#workerEvents", "#workerLifecycleEvents", "#workerLogEvents", "#responses", "#responseClock", "#ready", "_", "config", "worker", "event", "error", "context", "type", "name", "fn", "url", "options", "workerName", "setup", "registration", "#onMessageHandler", "#emit", "absoluteUrl", "workerInfo", "port", "success", "promises", "allRegistrations", "results", "payload", "#emitAsync", "cb", "#on", "lifecyleEvents", "events", "callbacks", "logEvents", "#filterTransferables", "item", "responseId", "async", "source", "callback", "#handleLogMessage", "result", "transferables", "message", "#postMessage", "#createResponse", "#createMessage", "resolve", "reject", "timeout", "args", "logData", "logLevel", "formattedMessage", "import_engine", "WORKER_TYPES", "getWorkerType", "WorkerClient", "#workerType", "getWorkerType", "#sources", "#lifecycleEvents", "#events", "#serviceWorkerEvents", "#callbacks", "#responseClock", "WORKER_TYPES", "#setupServiceWorkerEvents", "event", "#onMessageHandler", "port", "context", "config", "callback", "#on", "level", "message", "data", "#log", "payload", "#emit", "source", "#createCallback", "responseId", "#postMessage", "#filterTransferables", "type", "callbacks", "swCallbacks", "logData", "item", "#hasCallback", "#extractCallback", "transferables", "error", "async", "#respond", "results", "cb", "result", "EVENTS"]
7
7
  }
package/package.json CHANGED
@@ -1,19 +1,18 @@
1
1
  {
2
2
  "name": "@jucie.io/engine-worker",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "Web Worker manager service for @jucie.io/engine with client and manager support",
5
5
  "type": "module",
6
6
  "main": "./dist/main.js",
7
7
  "exports": {
8
- ".": "./dist/index.js",
9
- "./client": "./dist/client.js",
10
- "./manager": "./dist/manager.js"
8
+ ".": "./dist/main.js"
11
9
  },
12
10
  "files": [
13
11
  "dist/",
14
12
  "README.md"
15
13
  ],
16
14
  "scripts": {
15
+ "build": "node build.js",
17
16
  "test": "vitest"
18
17
  },
19
18
  "keywords": [
package/dist/client.js DELETED
@@ -1,2 +0,0 @@
1
- var Y=Object.freeze(Object.create(null));function T(n,e,s="value"){if(Array.isArray(e)){for(let r of e)if(O(n,r))return!0;let t=e.map(y).join(" | ");throw new TypeError(`${s} must be one of: ${t}. Got ${y(n)}`)}if(!O(n,e))throw new TypeError(`${s} must be ${y(e)}. Got ${y(n)}`);return!0}function O(n,e){return e===String?typeof n=="string":e===Number?typeof n=="number"&&!isNaN(n):e===Boolean?typeof n=="boolean":e===Symbol?typeof n=="symbol":e===BigInt?typeof n=="bigint":e===Function?typeof n=="function":e===Array?Array.isArray(n):e===Object?n!==null&&typeof n=="object"&&!Array.isArray(n):n instanceof e}function y(n){return n===String?"String":n===Number?"Number":n===Boolean?"Boolean":n===Array?"Array":n===Object?"Object":n===Function?"Function":n===Date?"Date":n===RegExp?"RegExp":n===Promise?"Promise":n===Map?"Map":n===Set?"Set":n===WeakMap?"WeakMap":n===WeakSet?"WeakSet":n===Symbol?"Symbol":n===BigInt?"BigInt":n===Error?"Error":typeof n=="string"?"string":typeof n=="number"?"number":typeof n=="boolean"?"boolean":typeof n=="symbol"?"symbol":typeof n=="bigint"?"bigint":typeof n=="function"?"function":Array.isArray(n)?"Array":n===null?"null":n===void 0?"undefined":typeof n=="object"?n.constructor?.name||"Object":"unknown"}function d(n,e="value"){return s=>T(s,n,e)}var E=new Map,W=new WeakMap;var f=(n,e=[])=>{let s=e.length>0?d(e,"return value"):null;if(E.has(n))return console.warn(`Definition type "${n}" already exists`),E.get(n);let t=(r,i,...l)=>{d(String,"name")(r),d(Function,"factory")(i);let o=(...c)=>{try{let h=[...c,...l],u=i(...h);if(s&&u===void 0)throw new Error(`Factory ${n} must return a value for ${r}`);return s&&s(u),u}catch(h){throw console.error(`Error creating definition "${r}"`,h),h}};return Object.defineProperty(o,"_name",{value:r,enumerable:!1,configurable:!1}),W.set(o,n),o};return E.set(n,t),t};var V=new Set(["__proto__","prototype","constructor"]),P=new Set(["use","install","uninstall","relay","state","debug"]),k=64,B=/^[a-zA-Z_$][a-zA-Z_$0-9]*$/;function v(n,e="key"){if(V.has(n))throw new Error(`Illegal key "${n}" in ${e}`)}function m(n){if(v(n,"namespace"),typeof n!="string")throw new Error(`Namespace must be a string, got ${typeof n}`);if(!B.test(n))throw new Error(`Invalid namespace "${n}". Must be a valid JS identifier`);if(n.length>k)throw new Error(`Namespace "${n}" too long (max ${k} chars)`);if(P.has(n))throw new Error(`Namespace "${n}" is reserved`);return n}var b=f("MIDDLEWARE",[Function,Array]),w=f("ACTIONS",[Object]),A=f("UNINSTALL"),S=f("INITIALIZE"),C=f("GETTERS",[Object]);var g=class n{static create(e){return new n(e)}#t;#o;#r={MIDDLEWARE:null,GETTERS:null,ACTIONS:null,INITIALIZE:null,UNINSTALL:null};constructor(e){this.#t=e}#s(e,s,t){if(this.#r[e])throw new Error(`${e} already defined for ${this.#t}`);this.#r[e]=t(this.#t,s)}defineMiddleware=e=>this.#s("MIDDLEWARE",e,b);defineGetters=e=>this.#s("GETTERS",e,C);defineActions=e=>this.#s("ACTIONS",e,w);defineInitialize=e=>this.#s("INITIALIZE",e,S);defineUninstall=e=>this.#s("UNINSTALL",e,A);_toArray(){return[this.#r.MIDDLEWARE,this.#r.GETTERS,this.#r.ACTIONS,this.#r.INITIALIZE,this.#r.UNINSTALL].filter(Boolean)}};var p=class n{static#t=new Set;static manifest={name:"base",dependencies:[],version:"1.0.0",description:"Base extension template"};static config=null;static unique=!1;static configure(e={}){return{install:(s,t)=>this.install(s,t),manifest:this.manifest,config:{...this.config||this.manifest.defaults||{},...e},unique:!0,configured:!0}}static install(e,s){try{let{namespace:t}=this.manifest;m(t);let r=new this;n.#t.add(r),Object.defineProperty(r,"config",{value:Object.freeze({...s}),writable:!1,configurable:!1,enumerable:!1}),Object.defineProperty(r,"context",{get:()=>e(),configurable:!1,enumerable:!1}),Object.defineProperty(r,"useContext",{value:(...l)=>e(...l),writable:!1,configurable:!1,enumerable:!1});let i=g.create(t);if(r.setup){let l={defineActions:c=>i.defineActions(()=>c(e,s)),defineMiddleware:c=>i.defineMiddleware(()=>c(e,s)),defineGetters:c=>i.defineGetters(()=>c(e,s)),defineInitialize:c=>i.defineInitialize(()=>c(e,s)),defineUninstall:c=>i.defineUninstall(()=>c(e,s))},o=r.setup(l);return o?.then?o.then(()=>i._toArray()):i._toArray()}return r.middleware&&i.defineMiddleware(()=>r.middleware(e,s)),r.getters&&i.defineGetters(()=>r.getters(e,s)),r.actions&&i.defineActions(()=>r.actions(e,s)),r.initialize&&i.defineInitialize(()=>r.initialize(e,s)),r.uninstall&&i.defineUninstall(()=>r.uninstall(e,s)),i._toArray()}catch(t){throw t}}};var ve=Symbol("jucie.engine");var a={SERVICE_WORKER:"SERVICE_WORKER",WEB_WORKER:"WEB_WORKER",SHARED_WORKER:"SHARED_WORKER"};function N(){if(typeof self<"u"&&"ServiceWorkerGlobalScope"in self)return a.SERVICE_WORKER;if(typeof self<"u"&&"SharedWorkerGlobalScope"in self)return a.SHARED_WORKER;if(typeof self<"u"&&"WorkerGlobalScope"in self)return a.WEB_WORKER;throw new Error("WorkerClient: Must be used in a worker context (service worker, shared worker, or web worker)")}var R=class extends p{#t=N();#o=new Set;#r=new Map;#s=new Map;#i=new Map;#u=new Map;#h=1;static manifest={name:"Worker Events",namespace:"worker",dependencies:[],version:"1.0.0",description:"Handles events in service workers and web workers",default:{events:{}}};initialize(){switch(this.#t){case a.SERVICE_WORKER:this.#p(),self.onmessage=e=>this.#f(e.source,e.data);break;case a.WEB_WORKER:self.onmessage=e=>this.#f(self,e.data);break;case a.SHARED_WORKER:self.onconnect=e=>{let s=e.ports[0];s.onmessage=t=>this.#f(s,t.data),this.#o.add(s)};break}}actions(e,s){switch(this.#t){case a.SERVICE_WORKER:return{onConnect:t=>this.#n("LIFECYCLE","CONNECT",t),onDisconnect:t=>this.#n("LIFECYCLE","DISCONNECT",t),on:(t,r)=>this.#n("MESSAGE",t,r),onFetch:t=>this.#n("SERVICE_WORKER","FETCH",t),onInstall:t=>this.#n("SERVICE_WORKER","INSTALL",t),onActivate:t=>this.#n("SERVICE_WORKER","ACTIVATE",t),log:(t,r,...i)=>this.#c(t,r,...i),emit:(t,...r)=>this.#e("*","MESSAGE",t,r),transfer:(t,...r)=>this.#e("*","TRANSFER",t,r),to:t=>({emit:(r,...i)=>this.#e(t,"MESSAGE",r,i),transfer:(r,...i)=>this.#e(t,"TRANSFER",r,i)})};case a.WEB_WORKER:return{on:(t,r)=>this.#n("MESSAGE",t,r),log:(t,r,...i)=>this.#c(t,r,...i),emit:(t,...r)=>this.#e(self,"MESSAGE",t,r),transfer:(t,...r)=>this.#e(self,"TRANSFER",t,r)};case a.SHARED_WORKER:return{onConnect:t=>this.#n("LIFECYCLE","CONNECT",t),onDisconnect:t=>this.#n("LIFECYCLE","DISCONNECT",t),on:(t,r)=>this.#n("MESSAGE",t,r),log:(t,r,...i)=>this.#c(t,r,...i),emit:(t,...r)=>this.#e("*","MESSAGE",t,r),transfer:(t,...r)=>this.#e("*","TRANSFER",t,r),to:t=>({emit:(r,...i)=>this.#e(t,"MESSAGE",r,i),transfer:(r,...i)=>this.#e(t,"TRANSFER",r,i)})};default:return{}}}#d(e,s){return(...t)=>{let r={type:"CALLBACK",responseId:s,payload:t};this.#l(e,r,this.#a(t))}}#n(e,s,t){switch(e){case"LIFECYCLE":return this.#r.set(s,t),()=>this.#r.delete(s);case"MESSAGE":case"TRANSFER":let r=this.#s.get(s)||new Set;return r.add(t),this.#s.set(s,r),()=>r.delete(t);case"SERVICE_WORKER":let i=this.#i.get(s)||new Set;return i.add(t),this.#i.set(s,i),()=>i.delete(t);default:console.error("WorkerClient: Invalid type",e,s,t)}}#p(){self.addEventListener("install",e=>{self.skipWaiting();let s=this.#i.get("INSTALL");s&&s.forEach(t=>t(e))}),self.addEventListener("activate",e=>{e.waitUntil(self.clients.claim());let s=this.#i.get("ACTIVATE");s&&s.forEach(t=>t(e))}),self.addEventListener("fetch",e=>{let s=this.#i.get("FETCH");s&&s.forEach(t=>t(e))}),console.log("WorkerClient #setupServiceWorkerEvents")}#c(e,s,...t){let r={level:e,message:s,data:t.length>0?t:void 0,timestamp:Date.now(),workerType:this.#t};this.#t===a.SERVICE_WORKER||this.#t===a.SHARED_WORKER?this.#e("*","LOG",e,[r]):this.#e(self,"LOG",e,[r]),(console[e]||console.log)(`[${e.toUpperCase()}] ${s}`,...t)}#a(e){return e.filter(s=>s instanceof ArrayBuffer||s instanceof MessagePort||typeof ImageBitmap<"u"&&s instanceof ImageBitmap||typeof OffscreenCanvas<"u"&&s instanceof OffscreenCanvas||typeof ReadableStream<"u"&&s instanceof ReadableStream||typeof WritableStream<"u"&&s instanceof WritableStream||typeof TransformStream<"u"&&s instanceof TransformStream)}#y(e){return e.length>0&&typeof e[e.length-1]=="function"}#g(e){if(this.#y(e)){let s=e.pop(),t=this.#h;return this.#u.set(t,s),this.#h++,t}}#e(e,s,t,r=[]){try{let i,l=this.#a(r),o=this.#g(r);switch(s){case"LIFECYCLE":i={type:"LIFECYCLE",event:t,payload:r,responseId:o};break;case"MESSAGE":i={type:"MESSAGE",event:t,payload:r,responseId:o};break;case"LOG":i={type:"LOG",event:t,payload:r,responseId:o};break;case"TRANSFER":i={type:"MESSAGE",event:t,payload:r,responseId:o};break;default:throw new Error("WorkerClient: Invalid type")}this.#l(e,i,l)}catch(i){console.error("WorkerClient: Error emitting",i)}}#l(e,s,t=[]){try{if(e==="*"){this.#o.forEach(r=>{r.postMessage(s,t)});return}e.postMessage(s,t)}catch(r){console.error("WorkerClient: Error posting message",r)}}async#f(e=null,{type:s,event:t,payload:r,responseId:i,async:l}){if(s==="LIFECYCLE"){let o=this.#r.get(t);this.#E(e,t,r),o&&o(e,...r)}if(s==="MESSAGE"||s==="TRANSFER"){let o=this.#s.get(t);if(l){let c=[];for(let $ of o){let L=await $(e,...r);c.push(L)}let h=this.#a(c),u={type:"CALLBACK",event:t,responseId:i,payload:c,async:l};this.#l(e,u,h);return}r=i?[...r,this.#d(e,i)]:r,o&&o.forEach(c=>c(e,...r))}}#E(e,s,t){switch(s){case"CONNECT":this.#o.add(e),this.#e(e,"LIFECYCLE","READY",[]);break}}};export{R as WorkerClient};
2
- //# sourceMappingURL=client.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/lib/relay/src/Relay.js", "../../../src/utils/typeChecker.js", "../../../src/definitions/createDefinition.js", "../../../src/utils/asserts.js", "../../../src/definitions/defaults.js", "../../../src/definitions/DefinitionBuilder.js", "../../../src/ServiceProvider.js", "../../../src/global.js", "../src/utils/getWorkerType.js", "../src/WorkerClient.js"],
4
- "sourcesContent": ["// Simple, readable relay with wildcard matching and no indexing\n\nconst GLOBAL_NS_OBJ = Object.freeze(Object.create(null));\n\nfunction queueMicrotask(fn) {\n if (globalThis.queueMicrotask && typeof globalThis.queueMicrotask === 'function') {\n globalThis.queueMicrotask(fn);\n return;\n }\n setTimeout(fn, 0);\n}\n\nclass Channel {\n #nsObj; #relay;\n constructor(nsObj, relay) { this.#nsObj = nsObj; this.#relay = relay; }\n\n // Any source -> me\n on(event, handler) {\n return this.#relay.subscribe(event, GLOBAL_NS_OBJ, this.#nsObj, handler);\n }\n\n once(event, handler) {\n return this.#relay.once(event, GLOBAL_NS_OBJ, this.#nsObj, handler);\n }\n\n // Me -> everyone (sender never hears itself)\n broadcast(event, ...payload) {\n this.#relay.publish(event, this.#nsObj, GLOBAL_NS_OBJ, payload);\n }\n\n // Specific source -> me\n from(fromNs) {\n return {\n subscribe: (event, handler) => this.#relay.subscribe(event, fromNs, this.#nsObj, handler),\n once: (event, handler) => this.#relay.once(event, fromNs, this.#nsObj, handler),\n };\n }\n\n // Me -> specific target\n to(toNs) {\n return {\n publish: (event, ...payload) => this.#relay.publish(event, this.#nsObj, toNs, payload),\n publishAsync: (event, ...payload) => this.#relay.publishAsync(event, this.#nsObj, toNs, payload),\n };\n }\n}\n\nexport class Relay {\n #channels = new WeakMap(); // nsObj -> Channel\n #events = new Map(); // eventName -> Set<Listener>\n #onError = null;\n\n static create(config = {}) {\n return new Relay(config);\n }\n\n constructor({ onError = null } = {}) {\n this.#onError = onError;\n this.createChannel(GLOBAL_NS_OBJ);\n }\n\n // Public convenience\n channel(nsObj) { return this.createChannel(nsObj); }\n createChannel(nsObj) {\n if (this.#channels.has(nsObj)) return this.#channels.get(nsObj);\n const ch = new Channel(nsObj, this);\n this.#channels.set(nsObj, ch);\n return ch;\n }\n\n // Internal helpers\n #listeners(event) {\n let set = this.#events.get(event);\n if (!set) { set = new Set(); this.#events.set(event, set); }\n return set;\n }\n\n // Wildcard matcher:\n // - If published `from` is GLOBAL, it matches every listener.from\n // - If listener.from is GLOBAL, it matches every published from\n // Same for `to`. This makes broadcast (to = GLOBAL) hit specific targets too.\n static #matchSide(published, constraint) {\n return published === GLOBAL_NS_OBJ || constraint === GLOBAL_NS_OBJ || published === constraint;\n }\n\n static #matches(publishedFrom, publishedTo, listenerFrom, listenerTo) {\n return Relay.#matchSide(publishedFrom, listenerFrom)\n && Relay.#matchSide(publishedTo, listenerTo);\n }\n\n subscribe(event, from, to, handler) {\n const listener = { from, to, handler };\n this.#listeners(event).add(listener);\n return () => {\n const set = this.#events.get(event);\n if (set) set.delete(listener);\n };\n }\n\n once(event, from, to, handler) {\n let off = null;\n const wrapped = (payload) => {\n try { handler(payload); } finally { off && off(); }\n };\n off = this.subscribe(event, from, to, wrapped);\n return off;\n }\n\n offAllFor(nsObj) {\n for (const set of this.#events.values()) {\n for (const l of Array.from(set)) {\n if (l.from === nsObj || l.to === nsObj) set.delete(l);\n }\n }\n }\n\n listenerCount(event) {\n const set = this.#events.get(event);\n return set ? set.size : 0;\n }\n\n #deliver(event, from, to, payload) {\n const set = this.#events.get(event);\n if (!set || set.size === 0) return;\n\n for (const l of set) {\n // Always skip self-delivery\n if (l.to === from) continue;\n\n if (Relay.#matches(from, to, l.from, l.to)) {\n try { l.handler(...payload); }\n catch (err) { if (this.#onError) this.#onError(err, { event, from, to, listener: l }); }\n }\n }\n }\n\n publish(event, from, to, payload) {\n this.#deliver(event, from, to, payload);\n }\n\n publishAsync(event, from, to, payload) {\n queueMicrotask(() => this.#deliver(event, from, to, payload));\n }\n\n broadcast(event, from, payload) {\n this.publish(event, from, GLOBAL_NS_OBJ, payload);\n }\n}\n", "/**\n * Type Checker Utility\n * \n * Supports syntax like:\n * - createDefinition('action', [Array, Function]) // Array or Function\n * - createDefinition('name', String) // Must be String\n * - createDefinition('items', Array) // Must be Array\n * - createDefinition('callback', Function) // Must be Function\n * - createDefinition('value', [String, Number]) // String or Number\n */\n\n/**\n * Type definitions mapping constructor names to actual constructors\n */\nconst TYPE_MAP = {\n String,\n Number,\n Boolean,\n Array,\n Object,\n Function,\n Date,\n RegExp,\n Promise,\n Map,\n Set,\n WeakMap,\n WeakSet,\n Symbol,\n BigInt,\n Error,\n TypeError,\n RangeError,\n ReferenceError,\n SyntaxError,\n EvalError,\n URIError\n};\n\n/**\n * Checks if a value matches the expected type(s)\n * @param {*} value - The value to check\n * @param {Function|Array<Function>} expectedType - Single type or array of possible types\n * @param {string} name - Name of the parameter for error messages\n * @returns {boolean} - True if value matches expected type(s)\n */\nexport function checkType(value, expectedType, name = 'value') {\n // Handle array of possible types\n if (Array.isArray(expectedType)) {\n for (const type of expectedType) {\n if (matchesType(value, type)) {\n return true;\n }\n }\n \n const typeNames = expectedType.map(getTypeName).join(' | ');\n throw new TypeError(`${name} must be one of: ${typeNames}. Got ${getTypeName(value)}`);\n }\n \n // Handle single type\n if (!matchesType(value, expectedType)) {\n throw new TypeError(`${name} must be ${getTypeName(expectedType)}. Got ${getTypeName(value)}`);\n }\n \n return true;\n}\n\n/**\n * Checks if a value matches a specific type\n * @param {*} value - The value to check\n * @param {Function} type - The expected constructor/type\n * @returns {boolean} - True if value matches the type\n */\nfunction matchesType(value, type) {\n // Handle primitive constructors\n if (type === String) {\n return typeof value === 'string';\n }\n if (type === Number) {\n return typeof value === 'number' && !isNaN(value);\n }\n if (type === Boolean) {\n return typeof value === 'boolean';\n }\n if (type === Symbol) {\n return typeof value === 'symbol';\n }\n if (type === BigInt) {\n return typeof value === 'bigint';\n }\n if (type === Function) {\n return typeof value === 'function';\n }\n \n // Handle object constructors (including Array, Object, Date, etc.)\n if (type === Array) {\n return Array.isArray(value);\n }\n if (type === Object) {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n }\n \n // Handle other constructors (Date, RegExp, Map, Set, etc.)\n return value instanceof type;\n}\n\n/**\n * Gets a human-readable name for a type\n * @param {*} value - The value or constructor to get name for\n * @returns {string} - Human-readable type name\n */\nfunction getTypeName(value) {\n if (value === String) return 'String';\n if (value === Number) return 'Number';\n if (value === Boolean) return 'Boolean';\n if (value === Array) return 'Array';\n if (value === Object) return 'Object';\n if (value === Function) return 'Function';\n if (value === Date) return 'Date';\n if (value === RegExp) return 'RegExp';\n if (value === Promise) return 'Promise';\n if (value === Map) return 'Map';\n if (value === Set) return 'Set';\n if (value === WeakMap) return 'WeakMap';\n if (value === WeakSet) return 'WeakSet';\n if (value === Symbol) return 'Symbol';\n if (value === BigInt) return 'BigInt';\n if (value === Error) return 'Error';\n \n if (typeof value === 'string') return 'string';\n if (typeof value === 'number') return 'number';\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'symbol') return 'symbol';\n if (typeof value === 'bigint') return 'bigint';\n if (typeof value === 'function') return 'function';\n if (Array.isArray(value)) return 'Array';\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value === 'object') {\n return value.constructor?.name || 'Object';\n }\n \n return 'unknown';\n}\n\n/**\n * Creates a type checker function for a specific parameter\n * @param {Function|Array<Function>} expectedType - Expected type(s)\n * @param {string} name - Parameter name\n * @returns {Function} - Type checker function\n */\nexport function createTypeChecker(expectedType, name = 'value') {\n return (value) => checkType(value, expectedType, name);\n}\n\n/**\n * Validates an object against a schema\n * @param {Object} obj - Object to validate\n * @param {Object} schema - Schema definition { prop: Type, prop2: [Type1, Type2] }\n * @param {string} objName - Name of the object for error messages\n */\nexport function validateObject(obj, schema, objName = 'object') {\n if (!obj || typeof obj !== 'object') {\n throw new TypeError(`${objName} must be an object`);\n }\n \n for (const [prop, expectedType] of Object.entries(schema)) {\n if (prop in obj) {\n checkType(obj[prop], expectedType, `${objName}.${prop}`);\n }\n }\n}\n\n/**\n * Creates a validator function for an object schema\n * @param {Object} schema - Schema definition\n * @param {string} objName - Name of the object\n * @returns {Function} - Validator function\n */\nexport function createObjectValidator(schema, objName = 'object') {\n return (obj) => validateObject(obj, schema, objName);\n}\n\n// Export the type map for advanced usage\nexport { TYPE_MAP };\n", "const DefinitionTypes = new Map();\nconst Definitions = new WeakMap();\nimport { createTypeChecker } from '../utils/typeChecker.js';\n\n/**\n * Creates a definition type with return type validation\n * @param {string} type - The definition type name\n * @param {Function|Array<Function>} returnTypes - Expected return type(s)\n * @returns {Function} - Definition creator function\n */\n\n\nexport const definitionType = (definition) => {\n if (Definitions.has(definition)) {\n return Definitions.get(definition);\n }\n return undefined;\n}\n\nexport const createDefinition = (type, returnTypes = []) => { \n // Create type checker for return values if returnTypes specified\n const returnTypeChecker = returnTypes.length > 0 ? createTypeChecker(returnTypes, 'return value') : null;\n \n if (DefinitionTypes.has(type)) {\n console.warn(`Definition type \"${type}\" already exists`);\n return DefinitionTypes.get(type);\n }\n\n const definitionType = (name, factory, ...defaultArgs) => {\n // Validate inputs using type checker\n createTypeChecker(String, 'name')(name);\n createTypeChecker(Function, 'factory')(factory);\n\n const definition = (...args) => {\n try {\n const combinedArgs = [...args, ...defaultArgs];\n const res = factory(...combinedArgs);\n \n if (returnTypeChecker && res === undefined) {\n throw new Error(`Factory ${type} must return a value for ${name}`);\n }\n\n // Use type checker to validate return value\n if (returnTypeChecker) {\n returnTypeChecker(res);\n }\n\n return res\n } catch (error) {\n console.error(`Error creating definition \"${name}\"`, error);\n throw error;\n }\n }\n\n Object.defineProperty(definition, '_name', {\n value: name,\n enumerable: false,\n configurable: false\n });\n\n Definitions.set(definition, type);\n\n return definition;\n }\n\n DefinitionTypes.set(type, definitionType);\n\n return definitionType;\n}; ", "// utils/asserts.js\n\nconst BAD_KEYS = new Set(['__proto__', 'prototype', 'constructor']);\nconst RESERVED_NAMESPACES = new Set(['use', 'install', 'uninstall', 'relay', 'state', 'debug']);\n\nconst MAX_NAME_LENGTH = 64;\nconst VALID_NAME = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n/**\n * Throw if key is unsafe (__proto__, constructor, etc.)\n */\nexport function assertSafeKey(key, where = 'key') {\n if (BAD_KEYS.has(key)) {\n throw new Error(`Illegal key \"${key}\" in ${where}`);\n }\n}\n\n/**\n * Validate a namespace string: format, length, reserved words, proto poisoning.\n */\nexport function assertNamespace(ns) {\n assertSafeKey(ns, 'namespace');\n if (typeof ns !== 'string') {\n throw new Error(`Namespace must be a string, got ${typeof ns}`);\n }\n if (!VALID_NAME.test(ns)) {\n throw new Error(`Invalid namespace \"${ns}\". Must be a valid JS identifier`);\n }\n if (ns.length > MAX_NAME_LENGTH) {\n throw new Error(`Namespace \"${ns}\" too long (max ${MAX_NAME_LENGTH} chars)`);\n }\n if (RESERVED_NAMESPACES.has(ns)) {\n throw new Error(`Namespace \"${ns}\" is reserved`);\n }\n return ns;\n}\n\n/**\n * Validate an action or getter name within a namespace.\n */\nexport function assertMemberName(name, namespace, kind = 'member') {\n assertSafeKey(name, `${kind}:${namespace}`);\n if (typeof name !== 'string') {\n throw new Error(`${kind} name in ${namespace} must be a string`);\n }\n if (!VALID_NAME.test(name)) {\n throw new Error(`Invalid ${kind} name \"${name}\" in ${namespace}`);\n }\n if (name.length > MAX_NAME_LENGTH) {\n throw new Error(\n `${kind} name \"${name}\" in ${namespace} too long (max ${MAX_NAME_LENGTH})`\n );\n }\n return name;\n}\n", "import { createDefinition, definitionType } from './createDefinition.js';\nexport const defineMiddleware = createDefinition('MIDDLEWARE', [Function, Array]);\nexport const defineActions = createDefinition('ACTIONS', [Object]);\nexport const defineUninstall = createDefinition('UNINSTALL');\nexport const defineInitialize = createDefinition('INITIALIZE');\nexport const defineGetters = createDefinition('GETTERS', [Object]);\nexport { createDefinition, definitionType };", "// DefinitionBuilder.js\nimport { defineActions, defineGetters, defineMiddleware, defineInitialize, defineUninstall } from './defaults.js';\n\nexport class DefinitionBuilder {\n static create(namespace) {\n return new DefinitionBuilder(namespace);\n }\n\n #ns; #args;\n #slots = { MIDDLEWARE:null, GETTERS:null, ACTIONS:null, INITIALIZE:null, UNINSTALL:null };\n constructor(namespace) { this.#ns = namespace }\n\n #set(type, factory, creator) {\n if (this.#slots[type]) throw new Error(`${type} already defined for ${this.#ns}`);\n this.#slots[type] = creator(this.#ns, factory);\n }\n\n defineMiddleware = (factory) => this.#set('MIDDLEWARE', factory, defineMiddleware);\n defineGetters = (factory) => this.#set('GETTERS', factory, defineGetters);\n defineActions = (factory) => this.#set('ACTIONS', factory, defineActions);\n defineInitialize = (factory) => this.#set('INITIALIZE', factory, defineInitialize);\n defineUninstall = (factory) => this.#set('UNINSTALL', factory, defineUninstall);\n\n _toArray() {\n return [\n this.#slots.MIDDLEWARE,\n this.#slots.GETTERS,\n this.#slots.ACTIONS,\n this.#slots.INITIALIZE,\n this.#slots.UNINSTALL\n ].filter(Boolean);\n }\n}\n\n", "import { assertNamespace } from './utils/asserts.js';\nimport { DefinitionBuilder } from './definitions/DefinitionBuilder.js';\n\n\nexport class ServiceProvider {\n static #services = new Set();\n\n static manifest = {\n name: 'base',\n dependencies: [],\n version: '1.0.0',\n description: 'Base extension template',\n };\n\n static config = null;\n\n static unique = false;\n\n static configure(options = {}) {\n return {\n install: (useContext, config) => this.install(useContext, config),\n manifest: this.manifest,\n config: { ...(this.config || this.manifest.defaults || {}), ...options },\n unique: true,\n configured: true\n };\n }\n\n static install(useContext, config) { \n try {\n const {namespace} = this.manifest;\n assertNamespace(namespace);\n\n // instantiate\n const instance = new this();\n ServiceProvider.#services.add(instance);\n\n // bind context/config\n // bind config (frozen to avoid accidental mutation)\n Object.defineProperty(instance, 'config', {\n value: Object.freeze({ ...config }),\n writable: false,\n configurable: false,\n enumerable: false,\n });\n\n // expose both a live context getter AND the keyed accessor\n Object.defineProperty(instance, 'context', {\n get: () => useContext(), // always fresh, via your proxy\n configurable: false,\n enumerable: false,\n });\n \n Object.defineProperty(instance, 'useContext', {\n value: (...keys) => useContext(...keys),\n writable: false,\n configurable: false,\n enumerable: false,\n });\n\n const builder = DefinitionBuilder.create(namespace);\n\n if (instance.setup) {\n // Create properly bound context for setup pattern\n const setupContext = {\n defineActions: (factory) => builder.defineActions(() => factory(useContext, config)),\n defineMiddleware: (factory) => builder.defineMiddleware(() => factory(useContext, config)),\n defineGetters: (factory) => builder.defineGetters(() => factory(useContext, config)),\n defineInitialize: (factory) => builder.defineInitialize(() => factory(useContext, config)),\n defineUninstall: (factory) => builder.defineUninstall(() => factory(useContext, config))\n };\n const maybe = instance.setup(setupContext);\n return maybe?.then ? maybe.then(() => builder._toArray()) : builder._toArray();\n }\n\n if (instance.middleware) builder.defineMiddleware(() => instance.middleware(useContext, config));\n if (instance.getters) builder.defineGetters (() => instance.getters(useContext, config));\n if (instance.actions) builder.defineActions (() => instance.actions(useContext, config));\n if (instance.initialize) builder.defineInitialize(() => instance.initialize(useContext, config));\n if (instance.uninstall) builder.defineUninstall (() => instance.uninstall(useContext, config));\n\n return builder._toArray();\n } catch (error) {\n throw error;\n }\n }\n}", "const ENGINE_CONTEXT = Symbol('jucie.engine');\n\n/**\n * Registers the engine globally, but only if no engine has already been set.\n * @param {object} engine \n */\n\nexport function provideEngine(engine) {\n if (!globalThis[ENGINE_CONTEXT]) {\n globalThis[ENGINE_CONTEXT] = engine;\n }\n}\n\nexport function hasEngine() {\n return globalThis[ENGINE_CONTEXT] !== undefined;\n}\n\n/**\n * Forcefully override the engine in the global context.\n * Useful for testing or resetting.\n */\nexport function forceEngine(engine) {\n globalThis[ENGINE_CONTEXT] = engine;\n}\n\n/**\n * Retrieves the globally registered engine.\n */\nexport function getEngine() {\n return globalThis[ENGINE_CONTEXT] || null;\n}\n\n/**\n * Retrieves the globally registered engine.\n */\nexport function useEngine() {\n return getEngine();\n}", "\nexport const WORKER_TYPES = {\n SERVICE_WORKER: 'SERVICE_WORKER',\n WEB_WORKER: 'WEB_WORKER',\n SHARED_WORKER: 'SHARED_WORKER',\n}\n\nexport function getWorkerType() {\n if (typeof self !== 'undefined' && 'ServiceWorkerGlobalScope' in self) {\n return WORKER_TYPES.SERVICE_WORKER;\n } else if (typeof self !== 'undefined' && 'SharedWorkerGlobalScope' in self) {\n return WORKER_TYPES.SHARED_WORKER;\n } else if (typeof self !== 'undefined' && 'WorkerGlobalScope' in self) {\n return WORKER_TYPES.WEB_WORKER;\n } else {\n throw new Error('WorkerClient: Must be used in a worker context (service worker, shared worker, or web worker)');\n }\n}\n", "import { ServiceProvider } from '@jucie.io/engine';\nimport { getWorkerType, WORKER_TYPES } from './utils/getWorkerType';\n\nexport class WorkerClient extends ServiceProvider {\n #workerType = getWorkerType();\n #sources = new Set();\n #lifecycleEvents = new Map();\n #events = new Map();\n #serviceWorkerEvents = new Map();\n #callbacks = new Map();\n #responseClock = 1;\n\n static manifest = {\n name: 'Worker Events',\n namespace: 'worker',\n dependencies: [],\n version: '1.0.0',\n description: 'Handles events in service workers and web workers',\n default: {\n events: {},\n }\n }\n\n initialize() {\n switch (this.#workerType) {\n case WORKER_TYPES.SERVICE_WORKER:\n this.#setupServiceWorkerEvents();\n self.onmessage = (event) => this.#onMessageHandler(event.source, event.data);\n break;\n case WORKER_TYPES.WEB_WORKER:\n self.onmessage = (event) => this.#onMessageHandler(self, event.data);\n break;\n case WORKER_TYPES.SHARED_WORKER:\n self.onconnect = (event) => {\n const port = event.ports[0];\n port.onmessage = (event) => this.#onMessageHandler(port, event.data);\n this.#sources.add(port);\n }\n break;\n }\n }\n\n actions(context, config) {\n switch (this.#workerType) {\n case WORKER_TYPES.SERVICE_WORKER: \n return {\n // Service Worker API - supports multiple clients\n onConnect: (callback) => this.#on('LIFECYCLE', 'CONNECT', callback),\n onDisconnect: (callback) => this.#on('LIFECYCLE', 'DISCONNECT', callback),\n on: (event, callback) => this.#on('MESSAGE', event, callback),\n onFetch: (callback) => this.#on('SERVICE_WORKER', 'FETCH', callback),\n onInstall: (callback) => this.#on('SERVICE_WORKER', 'INSTALL', callback),\n onActivate: (callback) => this.#on('SERVICE_WORKER', 'ACTIVATE', callback),\n log: (level, message, ...data) => this.#log(level, message, ...data),\n emit: (event, ...payload) => this.#emit('*', 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit('*', 'TRANSFER', event, payload),\n to: (source) => {\n return {\n emit: (event, ...payload) => this.#emit(source, 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit(source, 'TRANSFER', event, payload),\n }\n }\n }\n break;\n case WORKER_TYPES.WEB_WORKER:\n return {\n // Web Worker API - single source (main thread)\n on: (event, callback) => this.#on('MESSAGE', event, callback),\n log: (level, message, ...data) => this.#log(level, message, ...data),\n emit: (event, ...payload) => this.#emit(self, 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit(self, 'TRANSFER', event, payload),\n }\n case WORKER_TYPES.SHARED_WORKER:\n return {\n // Shared Worker API - supports multiple ports\n onConnect: (callback) => this.#on('LIFECYCLE', 'CONNECT', callback),\n onDisconnect: (callback) => this.#on('LIFECYCLE', 'DISCONNECT', callback),\n on: (event, callback) => this.#on('MESSAGE', event, callback),\n log: (level, message, ...data) => this.#log(level, message, ...data),\n emit: (event, ...payload) => this.#emit('*', 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit('*', 'TRANSFER', event, payload),\n to: (source) => {\n return {\n emit: (event, ...payload) => this.#emit(source, 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit(source, 'TRANSFER', event, payload),\n }\n }\n }\n default:\n return {}\n }\n }\n\n #createCallback(source, responseId) {\n return (...payload) => {\n const message = {\n type: 'CALLBACK',\n responseId,\n payload,\n }\n this.#postMessage(source, message, this.#filterTransferables(payload));\n }\n }\n\n #on (type, event, callback) {\n switch (type) {\n case 'LIFECYCLE':\n this.#lifecycleEvents.set(event, callback); \n return () => this.#lifecycleEvents.delete(event);\n case 'MESSAGE':\n case 'TRANSFER':\n const callbacks = this.#events.get(event) || new Set();\n callbacks.add(callback);\n this.#events.set(event, callbacks);\n return () => callbacks.delete(callback);\n case 'SERVICE_WORKER':\n const swCallbacks = this.#serviceWorkerEvents.get(event) || new Set();\n swCallbacks.add(callback);\n this.#serviceWorkerEvents.set(event, swCallbacks);\n return () => swCallbacks.delete(callback);\n default:\n console.error('WorkerClient: Invalid type', type, event, callback);\n }\n }\n\n #setupServiceWorkerEvents() {\n // Install event\n self.addEventListener('install', (event) => {\n self.skipWaiting();\n \n // Call any registered install callbacks\n const callbacks = this.#serviceWorkerEvents.get('INSTALL');\n if (callbacks) {\n callbacks.forEach(callback => callback(event));\n }\n });\n\n // Activate event\n self.addEventListener('activate', (event) => {\n event.waitUntil(\n self.clients.claim()\n );\n \n // Call any registered activate callbacks\n const callbacks = this.#serviceWorkerEvents.get('ACTIVATE');\n if (callbacks) {\n callbacks.forEach(callback => callback(event));\n }\n });\n\n // Fetch event\n self.addEventListener('fetch', (event) => {\n // Call any registered fetch callbacks\n const callbacks = this.#serviceWorkerEvents.get('FETCH');\n if (callbacks) {\n callbacks.forEach(callback => callback(event));\n }\n });\n\n console.log('WorkerClient #setupServiceWorkerEvents');\n }\n\n #log(level, message, ...data) {\n // Send log message back to main thread\n const logData = {\n level,\n message,\n data: data.length > 0 ? data : undefined,\n timestamp: Date.now(),\n workerType: this.#workerType\n };\n\n // For service workers, send to all clients\n if (this.#workerType === WORKER_TYPES.SERVICE_WORKER || this.#workerType === WORKER_TYPES.SHARED_WORKER) {\n this.#emit('*', 'LOG', level, [logData]);\n } else {\n this.#emit(self, 'LOG', level, [logData]);\n }\n\n // Also log locally in the worker\n const logMethod = console[level] || console.log;\n logMethod(`[${level.toUpperCase()}] ${message}`, ...data);\n }\n\n #filterTransferables(payload) {\n return payload.filter(item => \n item instanceof ArrayBuffer ||\n item instanceof MessagePort ||\n (typeof ImageBitmap !== 'undefined' && item instanceof ImageBitmap) ||\n (typeof OffscreenCanvas !== 'undefined' && item instanceof OffscreenCanvas) ||\n (typeof ReadableStream !== 'undefined' && item instanceof ReadableStream) ||\n (typeof WritableStream !== 'undefined' && item instanceof WritableStream) ||\n (typeof TransformStream !== 'undefined' && item instanceof TransformStream)\n );\n }\n\n #hasCallback(payload) {\n return payload.length > 0 && typeof payload[payload.length - 1] === 'function';\n }\n\n #extractCallback(payload) {\n if (this.#hasCallback(payload)) {\n const callback = payload.pop();\n const responseId = this.#responseClock;\n this.#callbacks.set(responseId, callback);\n this.#responseClock++;\n return responseId;\n }\n return undefined;\n }\n\n #emit(source, type, event, payload = []) {\n try {\n let message;\n let transferables = this.#filterTransferables(payload);\n let responseId = this.#extractCallback(payload);\n\n switch (type) {\n case 'LIFECYCLE':\n message = {\n type: 'LIFECYCLE',\n event,\n payload,\n responseId,\n }\n break;\n case 'MESSAGE':\n message = {\n type: 'MESSAGE',\n event,\n payload,\n responseId,\n }\n break;\n case 'LOG':\n message = {\n type: 'LOG',\n event,\n payload,\n responseId,\n }\n break;\n case 'TRANSFER':\n message = {\n type: 'MESSAGE',\n event,\n payload,\n responseId,\n }\n break;\n default:\n throw new Error('WorkerClient: Invalid type');\n }\n\n this.#postMessage(source, message, transferables);\n } catch (error) {\n console.error('WorkerClient: Error emitting', error);\n }\n }\n\n #postMessage(source, message, transferables = []) {\n try {\n if (source === '*') {\n this.#sources.forEach(source => {\n source.postMessage(message, transferables);\n });\n return;\n }\n \n source.postMessage(message, transferables);\n } catch (error) {\n console.error('WorkerClient: Error posting message', error);\n }\n }\n\n async #onMessageHandler(source = null, { type, event, payload, responseId, async }) {\n if (type === 'LIFECYCLE') {\n const callback = this.#lifecycleEvents.get(event);\n this.#respond(source, event, payload);\n\n if (callback) {\n callback(source, ...payload);\n }\n }\n\n if (type === 'MESSAGE' || type === 'TRANSFER') {\n const callbacks = this.#events.get(event);\n\n if (async) {\n const results = [];\n \n for (const cb of callbacks) {\n const result = await cb(source, ...payload);\n results.push(result);\n }\n\n const transferables = this.#filterTransferables(results);\n const message = {\n type: 'CALLBACK',\n event,\n responseId,\n payload: results,\n async\n }\n this.#postMessage(source, message, transferables);\n return;\n }\n\n payload = responseId ? [...payload, this.#createCallback(source, responseId)] : payload;\n \n if (callbacks) {\n callbacks.forEach((cb) => cb(source, ...payload));\n }\n }\n }\n\n #respond(source, event, payload) {\n switch (event) {\n case 'CONNECT':\n this.#sources.add(source);\n this.#emit(source, 'LIFECYCLE', 'READY', []);\n break;\n }\n }\n}"],
5
- "mappings": "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",
6
- "names": ["GLOBAL_NS_OBJ", "checkType", "value", "expectedType", "name", "type", "matchesType", "typeNames", "getTypeName", "createTypeChecker", "DefinitionTypes", "Definitions", "createDefinition", "type", "returnTypes", "returnTypeChecker", "createTypeChecker", "DefinitionTypes", "definitionType", "name", "factory", "defaultArgs", "definition", "args", "combinedArgs", "res", "error", "Definitions", "BAD_KEYS", "RESERVED_NAMESPACES", "MAX_NAME_LENGTH", "VALID_NAME", "assertSafeKey", "key", "where", "assertNamespace", "ns", "defineMiddleware", "createDefinition", "defineActions", "defineUninstall", "defineInitialize", "defineGetters", "DefinitionBuilder", "_DefinitionBuilder", "namespace", "#ns", "#args", "#slots", "#set", "type", "factory", "creator", "defineMiddleware", "defineGetters", "defineActions", "defineInitialize", "defineUninstall", "ServiceProvider", "_ServiceProvider", "#services", "options", "useContext", "config", "namespace", "assertNamespace", "instance", "keys", "builder", "DefinitionBuilder", "setupContext", "factory", "maybe", "error", "ENGINE_CONTEXT", "WORKER_TYPES", "getWorkerType", "WorkerClient", "ServiceProvider", "#workerType", "getWorkerType", "#sources", "#lifecycleEvents", "#events", "#serviceWorkerEvents", "#callbacks", "#responseClock", "WORKER_TYPES", "#setupServiceWorkerEvents", "event", "#onMessageHandler", "port", "context", "config", "callback", "#on", "level", "message", "data", "#log", "payload", "#emit", "source", "#createCallback", "responseId", "#postMessage", "#filterTransferables", "type", "callbacks", "swCallbacks", "logData", "item", "#hasCallback", "#extractCallback", "transferables", "error", "async", "#respond", "results", "cb", "result"]
7
- }
package/dist/manager.js DELETED
@@ -1,2 +0,0 @@
1
- var q=Object.freeze(Object.create(null));function S(i,e,t="value"){if(Array.isArray(e)){for(let s of e)if(M(i,s))return!0;let r=e.map(p).join(" | ");throw new TypeError(`${t} must be one of: ${r}. Got ${p(i)}`)}if(!M(i,e))throw new TypeError(`${t} must be ${p(e)}. Got ${p(i)}`);return!0}function M(i,e){return e===String?typeof i=="string":e===Number?typeof i=="number"&&!isNaN(i):e===Boolean?typeof i=="boolean":e===Symbol?typeof i=="symbol":e===BigInt?typeof i=="bigint":e===Function?typeof i=="function":e===Array?Array.isArray(i):e===Object?i!==null&&typeof i=="object"&&!Array.isArray(i):i instanceof e}function p(i){return i===String?"String":i===Number?"Number":i===Boolean?"Boolean":i===Array?"Array":i===Object?"Object":i===Function?"Function":i===Date?"Date":i===RegExp?"RegExp":i===Promise?"Promise":i===Map?"Map":i===Set?"Set":i===WeakMap?"WeakMap":i===WeakSet?"WeakSet":i===Symbol?"Symbol":i===BigInt?"BigInt":i===Error?"Error":typeof i=="string"?"string":typeof i=="number"?"number":typeof i=="boolean"?"boolean":typeof i=="symbol"?"symbol":typeof i=="bigint"?"bigint":typeof i=="function"?"function":Array.isArray(i)?"Array":i===null?"null":i===void 0?"undefined":typeof i=="object"?i.constructor?.name||"Object":"unknown"}function d(i,e="value"){return t=>S(t,i,e)}var w=new Map,N=new WeakMap;var f=(i,e=[])=>{let t=e.length>0?d(e,"return value"):null;if(w.has(i))return console.warn(`Definition type "${i}" already exists`),w.get(i);let r=(s,n,...o)=>{d(String,"name")(s),d(Function,"factory")(n);let c=(...a)=>{try{let l=[...a,...o],h=n(...l);if(t&&h===void 0)throw new Error(`Factory ${i} must return a value for ${s}`);return t&&t(h),h}catch(l){throw console.error(`Error creating definition "${s}"`,l),l}};return Object.defineProperty(c,"_name",{value:s,enumerable:!1,configurable:!1}),N.set(c,i),c};return w.set(i,r),r};var P=new Set(["__proto__","prototype","constructor"]),U=new Set(["use","install","uninstall","relay","state","debug"]),T=64,G=/^[a-zA-Z_$][a-zA-Z_$0-9]*$/;function Y(i,e="key"){if(P.has(i))throw new Error(`Illegal key "${i}" in ${e}`)}function b(i){if(Y(i,"namespace"),typeof i!="string")throw new Error(`Namespace must be a string, got ${typeof i}`);if(!G.test(i))throw new Error(`Invalid namespace "${i}". Must be a valid JS identifier`);if(i.length>T)throw new Error(`Namespace "${i}" too long (max ${T} chars)`);if(U.has(i))throw new Error(`Namespace "${i}" is reserved`);return i}var E=f("MIDDLEWARE",[Function,Array]),m=f("ACTIONS",[Object]),A=f("UNINSTALL"),C=f("INITIALIZE"),x=f("GETTERS",[Object]);var y=class i{static create(e){return new i(e)}#e;#i;#t={MIDDLEWARE:null,GETTERS:null,ACTIONS:null,INITIALIZE:null,UNINSTALL:null};constructor(e){this.#e=e}#s(e,t,r){if(this.#t[e])throw new Error(`${e} already defined for ${this.#e}`);this.#t[e]=r(this.#e,t)}defineMiddleware=e=>this.#s("MIDDLEWARE",e,E);defineGetters=e=>this.#s("GETTERS",e,x);defineActions=e=>this.#s("ACTIONS",e,m);defineInitialize=e=>this.#s("INITIALIZE",e,C);defineUninstall=e=>this.#s("UNINSTALL",e,A);_toArray(){return[this.#t.MIDDLEWARE,this.#t.GETTERS,this.#t.ACTIONS,this.#t.INITIALIZE,this.#t.UNINSTALL].filter(Boolean)}};var g=class i{static#e=new Set;static manifest={name:"base",dependencies:[],version:"1.0.0",description:"Base extension template"};static config=null;static unique=!1;static configure(e={}){return{install:(t,r)=>this.install(t,r),manifest:this.manifest,config:{...this.config||this.manifest.defaults||{},...e},unique:!0,configured:!0}}static install(e,t){try{let{namespace:r}=this.manifest;b(r);let s=new this;i.#e.add(s),Object.defineProperty(s,"config",{value:Object.freeze({...t}),writable:!1,configurable:!1,enumerable:!1}),Object.defineProperty(s,"context",{get:()=>e(),configurable:!1,enumerable:!1}),Object.defineProperty(s,"useContext",{value:(...o)=>e(...o),writable:!1,configurable:!1,enumerable:!1});let n=y.create(r);if(s.setup){let o={defineActions:a=>n.defineActions(()=>a(e,t)),defineMiddleware:a=>n.defineMiddleware(()=>a(e,t)),defineGetters:a=>n.defineGetters(()=>a(e,t)),defineInitialize:a=>n.defineInitialize(()=>a(e,t)),defineUninstall:a=>n.defineUninstall(()=>a(e,t))},c=s.setup(o);return c?.then?c.then(()=>n._toArray()):n._toArray()}return s.middleware&&n.defineMiddleware(()=>s.middleware(e,t)),s.getters&&n.defineGetters(()=>s.getters(e,t)),s.actions&&n.defineActions(()=>s.actions(e,t)),s.initialize&&n.defineInitialize(()=>s.initialize(e,t)),s.uninstall&&n.defineUninstall(()=>s.uninstall(e,t)),n._toArray()}catch(r){throw r}}};var Ye=Symbol("jucie.engine");var k=class extends g{#e=new Map;#i=new Map;#t=new Map;#s=new Map;#o=new Map;#c=1;#f=!1;static manifest={name:"Worker Registrar",namespace:"worker",dependencies:[],version:"1.0.0",description:"Manages service workers, web workers, and shared workers with unified API",default:{id:null,workers:[]}};initialize(e,t){if(t?.workers&&t.workers.length>0)for(let r of t.workers)this.register(r);window.addEventListener("beforeunload",async r=>{try{await this.unregisterAll()}catch(s){console.error("Design view: Error unregistering workers:",s)}})}actions(e,t){return{isSupported:r=>this.isSupported(r),setup:(r,s)=>this.setup(r,s),register:(r,s,n,o={})=>this.register({name:r,type:s,url:n,options:o}),unregister:r=>this.unregister(r),unregisterAll:()=>this.unregisterAll(),to:r=>this.to(r),from:r=>this.from(r)}}async register({name:e,type:t,url:r,setup:s,options:n={}}){if(!this.isSupported(t))throw new Error(`${t} workers are not supported in this environment`);if(this.#e.has(e))throw"Worker already registered";try{let o=await this.initializeRegistration(t,r,s,n);switch(console.log("\u{1F3AF} Registration",o),t){case"service":o.active?(this.#e.set(e,{type:t,registration:o}),navigator.serviceWorker.addEventListener("message",c=>this.#a(e,c.data,c.source)),this.#n(e,"LIFECYCLE","CONNECT")):o.installing.onstatechange=c=>{c.target.state==="activated"&&(this.#e.set(e,{type:t,registration:o}),navigator.serviceWorker.addEventListener("message",a=>this.#a(e,a.data,a.source)),this.#n(e,"LIFECYCLE","CONNECT"))};break;case"web":this.#e.set(e,{type:t,registration:o}),o.onmessage=c=>this.#a(e,c.data,o),this.#n(e,"LIFECYCLE","CONNECT");break;case"shared":this.#e.set(e,{type:t,registration:o}),o.port.onmessage=c=>this.#a(e,c.data,o.port),o.port.start(),this.#n(e,"LIFECYCLE","CONNECT");break}return()=>this.unregister(e)}catch(o){return console.error(`WorkerManager: Failed to register ${e} (${t})`,o),null}}async initializeRegistration(e,t,r,s={}){let n;if(r)n=await r();else if(t){let o=t instanceof URL?t:new URL(t,window.location.origin).href;switch(e){case"service":n=await navigator.serviceWorker.register(o,s);break;case"web":n=new Worker(o,s);break;case"shared":n=new SharedWorker(o,s);break}}return n}isSupported(e){switch(e){case"service":return"serviceWorker"in navigator;case"web":return"Worker"in window;case"shared":return"SharedWorker"in window;default:return!1}}async unregister(e){let t=this.#e.get(e);if(!t)return!1;let{type:r,registration:s,port:n}=t,o=!1;try{switch(r){case"service":o=await s.unregister();break;case"web":s.terminate(),o=!0;break;case"shared":n&&n.close(),o=!0;break}o&&(this.#e.delete(e),this.#i.delete(e))}catch(c){console.error(`WorkerManager: Error unregistering ${e}`,c)}return o}async unregisterAll(){let e=[];for(let[r,s]of this.#e)console.log(`\u{1F3AF} Unregistering worker ${r} of type ${s.type}`),e.push(this.unregister(r));try{let r=await navigator.serviceWorker.getRegistrations();for(let s of r)e.push(s.unregister())}catch(r){console.error("WorkerManager: Error getting all service worker registrations:",r)}let t=await Promise.all(e);return this.#e.clear(),this.#i.clear(),t}to(e){return{emit:(t,...r)=>this.#n(e,"MESSAGE",t,r),emitAsync:(t,...r)=>this.#g(e,"MESSAGE",t,r),transfer:(t,...r)=>this.#n(e,"TRANSFER",t,r)}}from(e){return{onReady:t=>this.#r(e,"LIFECYCLE","READY",t),onConnect:t=>this.#r(e,"LIFECYCLE","CONNECT",t),onDisconnect:t=>this.#r(e,"LIFECYCLE","DISCONNECT",t),onError:t=>this.#r(e,"LIFECYCLE","ERROR",t),onWarning:t=>this.#r(e,"LIFECYCLE","WARNING",t),onInfo:t=>this.#r(e,"LIFECYCLE","INFO",t),onDebug:t=>this.#r(e,"LIFECYCLE","DEBUG",t),onTrace:t=>this.#r(e,"LIFECYCLE","TRACE",t),onFatal:t=>this.#r(e,"LIFECYCLE","FATAL",t),onCritical:t=>this.on(e,"LIFECYCLE","CRITICAL",t),onEmergency:t=>this.#r(e,"LIFECYCLE","EMERGENCY",t),on:(t,r)=>this.#r(e,"MESSAGE",t,r)}}#r(e,t,r,s){if(t==="LIFECYCLE"){if(r==="READY"&&this.#f){s();return}let n=this.#t.get(e)||new Map;return n.set(r,s),this.#t.set(e,n),()=>n.delete(r)}if(t==="MESSAGE"||t==="TRANSFER"){let n=this.#i.get(e)||new Map,o=n.get(r)||new Set;return o.add(s),n.set(r,o),this.#i.set(e,n),()=>o.delete(s)}if(t==="LOG"){let n=this.#s.get(e)||new Map,o=n.get(r)||new Set;return o.add(s),n.set(r,o),this.#s.set(e,n),()=>o.delete(s)}throw new Error("WorkerManager: Invalid type")}#h(e){return e.filter(t=>t instanceof ArrayBuffer||t instanceof MessagePort||t instanceof ImageBitmap||t instanceof OffscreenCanvas||t instanceof ReadableStream||t instanceof WritableStream||t instanceof TransformStream)}async#a(e,{type:t,event:r,payload:s,responseId:n,async:o},c){if(t==="LIFECYCLE"){r==="READY"&&(this.#f=!0);let a=this.#t.get(e);if(!a)return;let l=a.get(r);if(l){let h={...this.to(e),...this.from(e)};l(h,...s)}return}if(t==="LOG"){this.#p(e,r,...s),(this.#s.get(e)?.get(r)||[]).forEach(h=>h(c,...s));return}if(t==="MESSAGE"||t==="TRANSFER"){let a=this.#i.get(e);if(!a)return;let l=a.get(r)||[];if(!l.length)return;if(o){let h=[];for(let _ of l){let F=await _(c,...s);h.push(F)}let u=this.#h(h),R={type:"CALLBACK",event:r,responseId:n,payload:h,async:o};this.#l(c,R,u);return}s=n?[...s,this.#u(c,n)]:s,l.forEach(h=>h(c,...s));return}if(t==="CALLBACK"){let a=this.#o.get(n);if(!a)return;a(...s),this.#o.delete(n);return}throw new Error("WorkerManager: Invalid type")}#n(e,t,r,s=[]){try{let n=this.#h(s),o=this.#u(s),c=this.#d(t,r,s,o);this.#l(e,c,n)}catch(n){console.error("WorkerManager: Error emitting",e,t,r,s,n)}}#g(e,t,r,s=[]){return new Promise((n,o)=>{let c=setTimeout(()=>{o(new Error(`WorkerManager: Async operation timed out ${e} ${r}`))},3e3),a=this.#c;this.#o.set(a,(...u)=>{clearTimeout(c),u.length===1?n(u[0]):n(...u)}),this.#c++;let l=this.#d(t,r,s,a,!0),h=this.#h(s);this.#l(e,l,h)})}#u(e){if(e.length>0&&typeof e[e.length-1]=="function"){let t=e.pop(),r=this.#c;return this.#o.set(r,t),this.#c++,r}}#d(e,t,r=[],s,n=!1){return{type:e,event:t,payload:r,responseId:s,async:n}}#p(e,t,r){let s=t.toLowerCase(),n=`[${e.toUpperCase()}] ${r.message}`;switch(s){case"error":case"fatal":case"critical":case"emergency":console.error(n,r.data||"");break;case"warning":console.warn(n,r.data||"");break;case"info":console.info(n,r.data||"");break;case"debug":console.debug(n,r.data||"");break;case"trace":console.trace(n,r.data||"");break;default:console.log(n,r.data||"")}}#l(e,t,r=[]){let s=this.#e.get(e);if(!s)throw new Error(`WorkerManager: Worker ${e} not found`);let{type:n,registration:o}=s;switch(n){case"service":o.active.postMessage(t,r);break;case"web":o.postMessage(t,r);break;case"shared":o.port.postMessage(t,r);break}}};export{k as WorkerManager};
2
- //# sourceMappingURL=manager.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/lib/relay/src/Relay.js", "../../../src/utils/typeChecker.js", "../../../src/definitions/createDefinition.js", "../../../src/utils/asserts.js", "../../../src/definitions/defaults.js", "../../../src/definitions/DefinitionBuilder.js", "../../../src/ServiceProvider.js", "../../../src/global.js", "../src/WorkerManager.js"],
4
- "sourcesContent": ["// Simple, readable relay with wildcard matching and no indexing\n\nconst GLOBAL_NS_OBJ = Object.freeze(Object.create(null));\n\nfunction queueMicrotask(fn) {\n if (globalThis.queueMicrotask && typeof globalThis.queueMicrotask === 'function') {\n globalThis.queueMicrotask(fn);\n return;\n }\n setTimeout(fn, 0);\n}\n\nclass Channel {\n #nsObj; #relay;\n constructor(nsObj, relay) { this.#nsObj = nsObj; this.#relay = relay; }\n\n // Any source -> me\n on(event, handler) {\n return this.#relay.subscribe(event, GLOBAL_NS_OBJ, this.#nsObj, handler);\n }\n\n once(event, handler) {\n return this.#relay.once(event, GLOBAL_NS_OBJ, this.#nsObj, handler);\n }\n\n // Me -> everyone (sender never hears itself)\n broadcast(event, ...payload) {\n this.#relay.publish(event, this.#nsObj, GLOBAL_NS_OBJ, payload);\n }\n\n // Specific source -> me\n from(fromNs) {\n return {\n subscribe: (event, handler) => this.#relay.subscribe(event, fromNs, this.#nsObj, handler),\n once: (event, handler) => this.#relay.once(event, fromNs, this.#nsObj, handler),\n };\n }\n\n // Me -> specific target\n to(toNs) {\n return {\n publish: (event, ...payload) => this.#relay.publish(event, this.#nsObj, toNs, payload),\n publishAsync: (event, ...payload) => this.#relay.publishAsync(event, this.#nsObj, toNs, payload),\n };\n }\n}\n\nexport class Relay {\n #channels = new WeakMap(); // nsObj -> Channel\n #events = new Map(); // eventName -> Set<Listener>\n #onError = null;\n\n static create(config = {}) {\n return new Relay(config);\n }\n\n constructor({ onError = null } = {}) {\n this.#onError = onError;\n this.createChannel(GLOBAL_NS_OBJ);\n }\n\n // Public convenience\n channel(nsObj) { return this.createChannel(nsObj); }\n createChannel(nsObj) {\n if (this.#channels.has(nsObj)) return this.#channels.get(nsObj);\n const ch = new Channel(nsObj, this);\n this.#channels.set(nsObj, ch);\n return ch;\n }\n\n // Internal helpers\n #listeners(event) {\n let set = this.#events.get(event);\n if (!set) { set = new Set(); this.#events.set(event, set); }\n return set;\n }\n\n // Wildcard matcher:\n // - If published `from` is GLOBAL, it matches every listener.from\n // - If listener.from is GLOBAL, it matches every published from\n // Same for `to`. This makes broadcast (to = GLOBAL) hit specific targets too.\n static #matchSide(published, constraint) {\n return published === GLOBAL_NS_OBJ || constraint === GLOBAL_NS_OBJ || published === constraint;\n }\n\n static #matches(publishedFrom, publishedTo, listenerFrom, listenerTo) {\n return Relay.#matchSide(publishedFrom, listenerFrom)\n && Relay.#matchSide(publishedTo, listenerTo);\n }\n\n subscribe(event, from, to, handler) {\n const listener = { from, to, handler };\n this.#listeners(event).add(listener);\n return () => {\n const set = this.#events.get(event);\n if (set) set.delete(listener);\n };\n }\n\n once(event, from, to, handler) {\n let off = null;\n const wrapped = (payload) => {\n try { handler(payload); } finally { off && off(); }\n };\n off = this.subscribe(event, from, to, wrapped);\n return off;\n }\n\n offAllFor(nsObj) {\n for (const set of this.#events.values()) {\n for (const l of Array.from(set)) {\n if (l.from === nsObj || l.to === nsObj) set.delete(l);\n }\n }\n }\n\n listenerCount(event) {\n const set = this.#events.get(event);\n return set ? set.size : 0;\n }\n\n #deliver(event, from, to, payload) {\n const set = this.#events.get(event);\n if (!set || set.size === 0) return;\n\n for (const l of set) {\n // Always skip self-delivery\n if (l.to === from) continue;\n\n if (Relay.#matches(from, to, l.from, l.to)) {\n try { l.handler(...payload); }\n catch (err) { if (this.#onError) this.#onError(err, { event, from, to, listener: l }); }\n }\n }\n }\n\n publish(event, from, to, payload) {\n this.#deliver(event, from, to, payload);\n }\n\n publishAsync(event, from, to, payload) {\n queueMicrotask(() => this.#deliver(event, from, to, payload));\n }\n\n broadcast(event, from, payload) {\n this.publish(event, from, GLOBAL_NS_OBJ, payload);\n }\n}\n", "/**\n * Type Checker Utility\n * \n * Supports syntax like:\n * - createDefinition('action', [Array, Function]) // Array or Function\n * - createDefinition('name', String) // Must be String\n * - createDefinition('items', Array) // Must be Array\n * - createDefinition('callback', Function) // Must be Function\n * - createDefinition('value', [String, Number]) // String or Number\n */\n\n/**\n * Type definitions mapping constructor names to actual constructors\n */\nconst TYPE_MAP = {\n String,\n Number,\n Boolean,\n Array,\n Object,\n Function,\n Date,\n RegExp,\n Promise,\n Map,\n Set,\n WeakMap,\n WeakSet,\n Symbol,\n BigInt,\n Error,\n TypeError,\n RangeError,\n ReferenceError,\n SyntaxError,\n EvalError,\n URIError\n};\n\n/**\n * Checks if a value matches the expected type(s)\n * @param {*} value - The value to check\n * @param {Function|Array<Function>} expectedType - Single type or array of possible types\n * @param {string} name - Name of the parameter for error messages\n * @returns {boolean} - True if value matches expected type(s)\n */\nexport function checkType(value, expectedType, name = 'value') {\n // Handle array of possible types\n if (Array.isArray(expectedType)) {\n for (const type of expectedType) {\n if (matchesType(value, type)) {\n return true;\n }\n }\n \n const typeNames = expectedType.map(getTypeName).join(' | ');\n throw new TypeError(`${name} must be one of: ${typeNames}. Got ${getTypeName(value)}`);\n }\n \n // Handle single type\n if (!matchesType(value, expectedType)) {\n throw new TypeError(`${name} must be ${getTypeName(expectedType)}. Got ${getTypeName(value)}`);\n }\n \n return true;\n}\n\n/**\n * Checks if a value matches a specific type\n * @param {*} value - The value to check\n * @param {Function} type - The expected constructor/type\n * @returns {boolean} - True if value matches the type\n */\nfunction matchesType(value, type) {\n // Handle primitive constructors\n if (type === String) {\n return typeof value === 'string';\n }\n if (type === Number) {\n return typeof value === 'number' && !isNaN(value);\n }\n if (type === Boolean) {\n return typeof value === 'boolean';\n }\n if (type === Symbol) {\n return typeof value === 'symbol';\n }\n if (type === BigInt) {\n return typeof value === 'bigint';\n }\n if (type === Function) {\n return typeof value === 'function';\n }\n \n // Handle object constructors (including Array, Object, Date, etc.)\n if (type === Array) {\n return Array.isArray(value);\n }\n if (type === Object) {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n }\n \n // Handle other constructors (Date, RegExp, Map, Set, etc.)\n return value instanceof type;\n}\n\n/**\n * Gets a human-readable name for a type\n * @param {*} value - The value or constructor to get name for\n * @returns {string} - Human-readable type name\n */\nfunction getTypeName(value) {\n if (value === String) return 'String';\n if (value === Number) return 'Number';\n if (value === Boolean) return 'Boolean';\n if (value === Array) return 'Array';\n if (value === Object) return 'Object';\n if (value === Function) return 'Function';\n if (value === Date) return 'Date';\n if (value === RegExp) return 'RegExp';\n if (value === Promise) return 'Promise';\n if (value === Map) return 'Map';\n if (value === Set) return 'Set';\n if (value === WeakMap) return 'WeakMap';\n if (value === WeakSet) return 'WeakSet';\n if (value === Symbol) return 'Symbol';\n if (value === BigInt) return 'BigInt';\n if (value === Error) return 'Error';\n \n if (typeof value === 'string') return 'string';\n if (typeof value === 'number') return 'number';\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'symbol') return 'symbol';\n if (typeof value === 'bigint') return 'bigint';\n if (typeof value === 'function') return 'function';\n if (Array.isArray(value)) return 'Array';\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value === 'object') {\n return value.constructor?.name || 'Object';\n }\n \n return 'unknown';\n}\n\n/**\n * Creates a type checker function for a specific parameter\n * @param {Function|Array<Function>} expectedType - Expected type(s)\n * @param {string} name - Parameter name\n * @returns {Function} - Type checker function\n */\nexport function createTypeChecker(expectedType, name = 'value') {\n return (value) => checkType(value, expectedType, name);\n}\n\n/**\n * Validates an object against a schema\n * @param {Object} obj - Object to validate\n * @param {Object} schema - Schema definition { prop: Type, prop2: [Type1, Type2] }\n * @param {string} objName - Name of the object for error messages\n */\nexport function validateObject(obj, schema, objName = 'object') {\n if (!obj || typeof obj !== 'object') {\n throw new TypeError(`${objName} must be an object`);\n }\n \n for (const [prop, expectedType] of Object.entries(schema)) {\n if (prop in obj) {\n checkType(obj[prop], expectedType, `${objName}.${prop}`);\n }\n }\n}\n\n/**\n * Creates a validator function for an object schema\n * @param {Object} schema - Schema definition\n * @param {string} objName - Name of the object\n * @returns {Function} - Validator function\n */\nexport function createObjectValidator(schema, objName = 'object') {\n return (obj) => validateObject(obj, schema, objName);\n}\n\n// Export the type map for advanced usage\nexport { TYPE_MAP };\n", "const DefinitionTypes = new Map();\nconst Definitions = new WeakMap();\nimport { createTypeChecker } from '../utils/typeChecker.js';\n\n/**\n * Creates a definition type with return type validation\n * @param {string} type - The definition type name\n * @param {Function|Array<Function>} returnTypes - Expected return type(s)\n * @returns {Function} - Definition creator function\n */\n\n\nexport const definitionType = (definition) => {\n if (Definitions.has(definition)) {\n return Definitions.get(definition);\n }\n return undefined;\n}\n\nexport const createDefinition = (type, returnTypes = []) => { \n // Create type checker for return values if returnTypes specified\n const returnTypeChecker = returnTypes.length > 0 ? createTypeChecker(returnTypes, 'return value') : null;\n \n if (DefinitionTypes.has(type)) {\n console.warn(`Definition type \"${type}\" already exists`);\n return DefinitionTypes.get(type);\n }\n\n const definitionType = (name, factory, ...defaultArgs) => {\n // Validate inputs using type checker\n createTypeChecker(String, 'name')(name);\n createTypeChecker(Function, 'factory')(factory);\n\n const definition = (...args) => {\n try {\n const combinedArgs = [...args, ...defaultArgs];\n const res = factory(...combinedArgs);\n \n if (returnTypeChecker && res === undefined) {\n throw new Error(`Factory ${type} must return a value for ${name}`);\n }\n\n // Use type checker to validate return value\n if (returnTypeChecker) {\n returnTypeChecker(res);\n }\n\n return res\n } catch (error) {\n console.error(`Error creating definition \"${name}\"`, error);\n throw error;\n }\n }\n\n Object.defineProperty(definition, '_name', {\n value: name,\n enumerable: false,\n configurable: false\n });\n\n Definitions.set(definition, type);\n\n return definition;\n }\n\n DefinitionTypes.set(type, definitionType);\n\n return definitionType;\n}; ", "// utils/asserts.js\n\nconst BAD_KEYS = new Set(['__proto__', 'prototype', 'constructor']);\nconst RESERVED_NAMESPACES = new Set(['use', 'install', 'uninstall', 'relay', 'state', 'debug']);\n\nconst MAX_NAME_LENGTH = 64;\nconst VALID_NAME = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n/**\n * Throw if key is unsafe (__proto__, constructor, etc.)\n */\nexport function assertSafeKey(key, where = 'key') {\n if (BAD_KEYS.has(key)) {\n throw new Error(`Illegal key \"${key}\" in ${where}`);\n }\n}\n\n/**\n * Validate a namespace string: format, length, reserved words, proto poisoning.\n */\nexport function assertNamespace(ns) {\n assertSafeKey(ns, 'namespace');\n if (typeof ns !== 'string') {\n throw new Error(`Namespace must be a string, got ${typeof ns}`);\n }\n if (!VALID_NAME.test(ns)) {\n throw new Error(`Invalid namespace \"${ns}\". Must be a valid JS identifier`);\n }\n if (ns.length > MAX_NAME_LENGTH) {\n throw new Error(`Namespace \"${ns}\" too long (max ${MAX_NAME_LENGTH} chars)`);\n }\n if (RESERVED_NAMESPACES.has(ns)) {\n throw new Error(`Namespace \"${ns}\" is reserved`);\n }\n return ns;\n}\n\n/**\n * Validate an action or getter name within a namespace.\n */\nexport function assertMemberName(name, namespace, kind = 'member') {\n assertSafeKey(name, `${kind}:${namespace}`);\n if (typeof name !== 'string') {\n throw new Error(`${kind} name in ${namespace} must be a string`);\n }\n if (!VALID_NAME.test(name)) {\n throw new Error(`Invalid ${kind} name \"${name}\" in ${namespace}`);\n }\n if (name.length > MAX_NAME_LENGTH) {\n throw new Error(\n `${kind} name \"${name}\" in ${namespace} too long (max ${MAX_NAME_LENGTH})`\n );\n }\n return name;\n}\n", "import { createDefinition, definitionType } from './createDefinition.js';\nexport const defineMiddleware = createDefinition('MIDDLEWARE', [Function, Array]);\nexport const defineActions = createDefinition('ACTIONS', [Object]);\nexport const defineUninstall = createDefinition('UNINSTALL');\nexport const defineInitialize = createDefinition('INITIALIZE');\nexport const defineGetters = createDefinition('GETTERS', [Object]);\nexport { createDefinition, definitionType };", "// DefinitionBuilder.js\nimport { defineActions, defineGetters, defineMiddleware, defineInitialize, defineUninstall } from './defaults.js';\n\nexport class DefinitionBuilder {\n static create(namespace) {\n return new DefinitionBuilder(namespace);\n }\n\n #ns; #args;\n #slots = { MIDDLEWARE:null, GETTERS:null, ACTIONS:null, INITIALIZE:null, UNINSTALL:null };\n constructor(namespace) { this.#ns = namespace }\n\n #set(type, factory, creator) {\n if (this.#slots[type]) throw new Error(`${type} already defined for ${this.#ns}`);\n this.#slots[type] = creator(this.#ns, factory);\n }\n\n defineMiddleware = (factory) => this.#set('MIDDLEWARE', factory, defineMiddleware);\n defineGetters = (factory) => this.#set('GETTERS', factory, defineGetters);\n defineActions = (factory) => this.#set('ACTIONS', factory, defineActions);\n defineInitialize = (factory) => this.#set('INITIALIZE', factory, defineInitialize);\n defineUninstall = (factory) => this.#set('UNINSTALL', factory, defineUninstall);\n\n _toArray() {\n return [\n this.#slots.MIDDLEWARE,\n this.#slots.GETTERS,\n this.#slots.ACTIONS,\n this.#slots.INITIALIZE,\n this.#slots.UNINSTALL\n ].filter(Boolean);\n }\n}\n\n", "import { assertNamespace } from './utils/asserts.js';\nimport { DefinitionBuilder } from './definitions/DefinitionBuilder.js';\n\n\nexport class ServiceProvider {\n static #services = new Set();\n\n static manifest = {\n name: 'base',\n dependencies: [],\n version: '1.0.0',\n description: 'Base extension template',\n };\n\n static config = null;\n\n static unique = false;\n\n static configure(options = {}) {\n return {\n install: (useContext, config) => this.install(useContext, config),\n manifest: this.manifest,\n config: { ...(this.config || this.manifest.defaults || {}), ...options },\n unique: true,\n configured: true\n };\n }\n\n static install(useContext, config) { \n try {\n const {namespace} = this.manifest;\n assertNamespace(namespace);\n\n // instantiate\n const instance = new this();\n ServiceProvider.#services.add(instance);\n\n // bind context/config\n // bind config (frozen to avoid accidental mutation)\n Object.defineProperty(instance, 'config', {\n value: Object.freeze({ ...config }),\n writable: false,\n configurable: false,\n enumerable: false,\n });\n\n // expose both a live context getter AND the keyed accessor\n Object.defineProperty(instance, 'context', {\n get: () => useContext(), // always fresh, via your proxy\n configurable: false,\n enumerable: false,\n });\n \n Object.defineProperty(instance, 'useContext', {\n value: (...keys) => useContext(...keys),\n writable: false,\n configurable: false,\n enumerable: false,\n });\n\n const builder = DefinitionBuilder.create(namespace);\n\n if (instance.setup) {\n // Create properly bound context for setup pattern\n const setupContext = {\n defineActions: (factory) => builder.defineActions(() => factory(useContext, config)),\n defineMiddleware: (factory) => builder.defineMiddleware(() => factory(useContext, config)),\n defineGetters: (factory) => builder.defineGetters(() => factory(useContext, config)),\n defineInitialize: (factory) => builder.defineInitialize(() => factory(useContext, config)),\n defineUninstall: (factory) => builder.defineUninstall(() => factory(useContext, config))\n };\n const maybe = instance.setup(setupContext);\n return maybe?.then ? maybe.then(() => builder._toArray()) : builder._toArray();\n }\n\n if (instance.middleware) builder.defineMiddleware(() => instance.middleware(useContext, config));\n if (instance.getters) builder.defineGetters (() => instance.getters(useContext, config));\n if (instance.actions) builder.defineActions (() => instance.actions(useContext, config));\n if (instance.initialize) builder.defineInitialize(() => instance.initialize(useContext, config));\n if (instance.uninstall) builder.defineUninstall (() => instance.uninstall(useContext, config));\n\n return builder._toArray();\n } catch (error) {\n throw error;\n }\n }\n}", "const ENGINE_CONTEXT = Symbol('jucie.engine');\n\n/**\n * Registers the engine globally, but only if no engine has already been set.\n * @param {object} engine \n */\n\nexport function provideEngine(engine) {\n if (!globalThis[ENGINE_CONTEXT]) {\n globalThis[ENGINE_CONTEXT] = engine;\n }\n}\n\nexport function hasEngine() {\n return globalThis[ENGINE_CONTEXT] !== undefined;\n}\n\n/**\n * Forcefully override the engine in the global context.\n * Useful for testing or resetting.\n */\nexport function forceEngine(engine) {\n globalThis[ENGINE_CONTEXT] = engine;\n}\n\n/**\n * Retrieves the globally registered engine.\n */\nexport function getEngine() {\n return globalThis[ENGINE_CONTEXT] || null;\n}\n\n/**\n * Retrieves the globally registered engine.\n */\nexport function useEngine() {\n return getEngine();\n}", "import { ServiceProvider } from '@jucie.io/engine';\n\nexport class WorkerManager extends ServiceProvider {\n #registrations = new Map();\n #workerEvents = new Map();\n #workerLifecycleEvents = new Map(); // Map of worker name to Map of event name to callbacks\n #workerLogEvents = new Map(); // Map of worker name to Map of log level to callbacks\n #responses = new Map(); // Map of worker name to Map of event name to callbacks\n #responseClock = 1;\n #ready = false;\n\n static manifest = {\n name: 'Worker Registrar',\n namespace: 'worker',\n dependencies: [],\n version: '1.0.0',\n description: 'Manages service workers, web workers, and shared workers with unified API',\n default: {\n id: null,\n workers: [],\n }\n }\n\n initialize(_, config) {\n if (config?.workers && config.workers.length > 0) {\n for (const worker of config.workers) {\n this.register(worker);\n }\n }\n\n window.addEventListener('beforeunload', async (event) => {\n try {\n await this.unregisterAll();\n } catch (error) {\n console.error('Design view: Error unregistering workers:', error);\n }\n });\n }\n\n actions(context, config) {\n return {\n isSupported: (type) => this.isSupported(type),\n setup: (name, fn) => this.setup(name, fn),\n register: (name, type, url, options = {}) => this.register({name, type, url, options}),\n unregister: (name) => this.unregister(name),\n unregisterAll: () => this.unregisterAll(),\n to: (workerName) => this.to(workerName),\n from: (workerName) => this.from(workerName),\n }\n }\n\n async register({name, type, url, setup, options = {}}) {\n if (!this.isSupported(type)) {\n throw new Error(`${type} workers are not supported in this environment`);\n }\n\n if (this.#registrations.has(name)) {\n throw 'Worker already registered'\n }\n\n\n try {\n const registration = await this.initializeRegistration(type, url, setup, options);\n console.log('\uD83C\uDFAF Registration', registration);\n \n switch (type) {\n case 'service':\n if (!registration.active) {\n registration.installing.onstatechange = (event) => {\n if (event.target.state === 'activated') {\n this.#registrations.set(name, { type, registration });\n // Listen for messages from service worker on navigator.serviceWorker\n navigator.serviceWorker.addEventListener('message', (event) => this.#onMessageHandler(name, event.data, event.source));\n this.#emit(name, 'LIFECYCLE', 'CONNECT');\n } \n }\n } else {\n this.#registrations.set(name, { type, registration });\n // Listen for messages from service worker on navigator.serviceWorker\n navigator.serviceWorker.addEventListener('message', (event) => this.#onMessageHandler(name, event.data, event.source));\n this.#emit(name, 'LIFECYCLE', 'CONNECT');\n }\n \n break;\n \n case 'web':\n this.#registrations.set(name, { type, registration });\n registration.onmessage = (event) => this.#onMessageHandler(name, event.data, registration);\n this.#emit(name, 'LIFECYCLE', 'CONNECT');\n break;\n \n case 'shared':\n this.#registrations.set(name, { type, registration });\n\n // Set up message handling for this port\n registration.port.onmessage = (event) => this.#onMessageHandler(name, event.data, registration.port);\n \n // Start the port\n registration.port.start();\n\n this.#emit(name, 'LIFECYCLE', 'CONNECT');\n break;\n }\n \n return () => this.unregister(name);\n } catch (error) {\n console.error(`WorkerManager: Failed to register ${name} (${type})`, error);\n return null;\n }\n }\n\n async initializeRegistration(type, url, setup, options = {}) {\n let registration;\n if (setup) {\n registration = await setup();\n } else if (url) {\n const absoluteUrl = url instanceof URL ? url : new URL(url, window.location.origin).href;\n switch (type) {\n case 'service':\n registration = await navigator.serviceWorker.register(absoluteUrl, options);\n break;\n case 'web':\n registration = new Worker(absoluteUrl, options);\n break;\n case 'shared':\n registration = new SharedWorker(absoluteUrl, options);\n break;\n }\n }\n return registration;\n }\n\n isSupported(type) {\n switch (type) {\n case 'service':\n return 'serviceWorker' in navigator;\n case 'web':\n return 'Worker' in window;\n case 'shared':\n return 'SharedWorker' in window;\n default:\n return false;\n }\n }\n\n async unregister(name) {\n const workerInfo = this.#registrations.get(name);\n if (!workerInfo) {\n return false;\n }\n\n const { type, registration, port } = workerInfo;\n let success = false;\n\n try {\n switch (type) {\n case 'service':\n success = await registration.unregister();\n break;\n case 'web':\n registration.terminate();\n success = true;\n break;\n case 'shared':\n if (port) {\n port.close();\n }\n success = true;\n break;\n }\n \n if (success) {\n this.#registrations.delete(name);\n this.#workerEvents.delete(name);\n }\n } catch (error) {\n console.error(`WorkerManager: Error unregistering ${name}`, error);\n }\n \n return success;\n }\n\n async unregisterAll() {\n const promises = [];\n \n // Unregister all tracked registrations\n for (const [name, workerInfo] of this.#registrations) {\n console.log(`\uD83C\uDFAF Unregistering worker ${name} of type ${workerInfo.type}`);\n promises.push(this.unregister(name));\n }\n \n // Also unregister any service workers that might exist (for service workers only)\n try {\n const allRegistrations = await navigator.serviceWorker.getRegistrations();\n for (const registration of allRegistrations) {\n promises.push(registration.unregister());\n }\n } catch (error) {\n console.error('WorkerManager: Error getting all service worker registrations:', error);\n }\n \n const results = await Promise.all(promises);\n this.#registrations.clear();\n this.#workerEvents.clear();\n \n return results;\n }\n\n to(workerName) {\n return {\n emit: (event, ...payload) => this.#emit(workerName, 'MESSAGE', event, payload),\n emitAsync: (event, ...payload) => this.#emitAsync(workerName, 'MESSAGE', event, payload),\n transfer: (event, ...payload) => this.#emit(workerName, 'TRANSFER', event, payload),\n }\n }\n\n from(workerName) {\n return {\n onReady: (cb) => this.#on(workerName, 'LIFECYCLE', 'READY', cb),\n onConnect: (cb) => this.#on(workerName, 'LIFECYCLE', 'CONNECT', cb),\n onDisconnect: (cb) => this.#on(workerName, 'LIFECYCLE', 'DISCONNECT', cb),\n onError: (cb) => this.#on(workerName, 'LIFECYCLE', 'ERROR', cb),\n onWarning: (cb) => this.#on(workerName, 'LIFECYCLE', 'WARNING', cb),\n onInfo: (cb) => this.#on(workerName, 'LIFECYCLE', 'INFO', cb),\n onDebug: (cb) => this.#on(workerName, 'LIFECYCLE', 'DEBUG', cb),\n onTrace: (cb) => this.#on(workerName, 'LIFECYCLE', 'TRACE', cb),\n onFatal: (cb) => this.#on(workerName, 'LIFECYCLE', 'FATAL', cb),\n onCritical: (cb) => this.on(workerName, 'LIFECYCLE', 'CRITICAL', cb), \n onEmergency: (cb) => this.#on(workerName, 'LIFECYCLE', 'EMERGENCY', cb),\n on: (event, cb) => this.#on(workerName, 'MESSAGE', event, cb),\n }\n }\n\n #on(workerName, type, event, cb) {\n if (type === 'LIFECYCLE') {\n if (event === 'READY' && this.#ready) {\n cb();\n return;\n }\n\n const lifecyleEvents = this.#workerLifecycleEvents.get(workerName) || new Map();\n lifecyleEvents.set(event, cb); \n this.#workerLifecycleEvents.set(workerName, lifecyleEvents);\n\n return () => lifecyleEvents.delete(event);\n }\n\n if (type === 'MESSAGE' || type === 'TRANSFER') {\n const events = this.#workerEvents.get(workerName) || new Map();\n const callbacks = events.get(event) || new Set();\n callbacks.add(cb);\n events.set(event, callbacks);\n this.#workerEvents.set(workerName, events);\n\n return () => callbacks.delete(cb);\n }\n\n if (type === 'LOG') {\n const logEvents = this.#workerLogEvents.get(workerName) || new Map();\n const callbacks = logEvents.get(event) || new Set();\n callbacks.add(cb);\n logEvents.set(event, callbacks);\n this.#workerLogEvents.set(workerName, logEvents);\n\n return () => callbacks.delete(cb);\n }\n\n throw new Error('WorkerManager: Invalid type');\n }\n\n #filterTransferables(payload) {\n return payload.filter(item => \n item instanceof ArrayBuffer ||\n item instanceof MessagePort ||\n item instanceof ImageBitmap ||\n item instanceof OffscreenCanvas ||\n item instanceof ReadableStream ||\n item instanceof WritableStream ||\n item instanceof TransformStream\n );\n }\n\n async #onMessageHandler(name, { type, event, payload, responseId, async }, source) {\n\n if (type === 'LIFECYCLE') {\n if (event === 'READY') {\n this.#ready = true;\n }\n\n const lifecyleEvents = this.#workerLifecycleEvents.get(name);\n if (!lifecyleEvents) {\n return;\n }\n const callback = lifecyleEvents.get(event);\n if (callback) {\n const worker = {...this.to(name), ...this.from(name)};\n callback(worker, ...payload);\n }\n\n return;\n }\n\n if (type === 'LOG') {\n // Handle log messages from workers\n this.#handleLogMessage(name, event, ...payload);\n \n // Also trigger any registered log callbacks\n const logEvents = this.#workerLogEvents.get(name);\n const callbacks = logEvents?.get(event) || [];\n callbacks.forEach((cb) => cb(source, ...payload));\n\n return;\n }\n\n if (type === 'MESSAGE' || type === 'TRANSFER') {\n const events = this.#workerEvents.get(name);\n if (!events) {\n return;\n }\n\n const callbacks = events.get(event) || [];\n \n if (!callbacks.length) {\n return;\n }\n\n if (async) {\n const results = [];\n \n for (const cb of callbacks) {\n const result = await cb(source, ...payload);\n results.push(result);\n }\n\n const transferables = this.#filterTransferables(results);\n const message = {\n type: 'CALLBACK',\n event,\n responseId,\n payload: results,\n async\n }\n this.#postMessage(source, message, transferables);\n return;\n }\n\n payload = responseId ? [...payload, this.#createResponse(source, responseId)] : payload;\n\n callbacks.forEach((cb) => cb(source, ...payload));\n\n return;\n }\n\n if (type === 'CALLBACK') {\n const callback = this.#responses.get(responseId);\n if (!callback) {\n return;\n }\n callback(...payload);\n this.#responses.delete(responseId);\n return;\n }\n\n throw new Error('WorkerManager: Invalid type');\n }\n\n #emit(workerName, type, event, payload = []) {\n try {\n const transferables = this.#filterTransferables(payload);\n const responseId = this.#createResponse(payload);\n const message = this.#createMessage(type, event, payload, responseId);\n\n this.#postMessage(workerName, message, transferables);\n } catch (error) {\n console.error('WorkerManager: Error emitting', workerName, type, event, payload, error);\n }\n }\n\n #emitAsync(workerName, type, event, payload = []) {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error(`WorkerManager: Async operation timed out ${workerName} ${event}`));\n }, 3000);\n\n const responseId = this.#responseClock;\n this.#responses.set(responseId, (...args) => {\n clearTimeout(timeout);\n\n if (args.length === 1) {\n resolve(args[0]);\n } else {\n resolve(...args);\n }\n });\n this.#responseClock++;\n\n const message = this.#createMessage(type, event, payload, responseId, true);\n const transferables = this.#filterTransferables(payload);\n\n this.#postMessage(workerName, message, transferables);\n })\n }\n\n #createResponse(payload) {\n if (payload.length > 0 && typeof payload[payload.length - 1] === 'function') {\n const callback = payload.pop();\n const responseId = this.#responseClock;\n this.#responses.set(responseId, callback);\n this.#responseClock++;\n\n return responseId;\n }\n\n return undefined;\n }\n\n #createMessage(type, event, payload = [], responseId, async = false) {\n return {\n type,\n event,\n payload,\n responseId,\n async,\n }\n }\n\n #handleLogMessage(workerName, event, logData) {\n const logLevel = event.toLowerCase();\n \n // Format the log message for the main thread\n const formattedMessage = `[${workerName.toUpperCase()}] ${logData.message}`;\n \n // Log to console with appropriate level\n switch (logLevel) {\n case 'error':\n case 'fatal':\n case 'critical':\n case 'emergency':\n console.error(formattedMessage, (logData.data || ''));\n break;\n case 'warning':\n console.warn(formattedMessage, (logData.data || ''));\n break;\n case 'info':\n console.info(formattedMessage, (logData.data || ''));\n break;\n case 'debug':\n console.debug(formattedMessage, (logData.data || ''));\n break;\n case 'trace':\n console.trace(formattedMessage, (logData.data || ''));\n break;\n default:\n console.log(formattedMessage, (logData.data || ''));\n }\n }\n\n #postMessage(workerName, message, transferables = []) {\n const workerInfo = this.#registrations.get(workerName);\n\n if (!workerInfo) {\n throw new Error(`WorkerManager: Worker ${workerName} not found`);\n }\n\n const { type, registration } = workerInfo;\n\n switch (type) {\n case 'service':\n registration.active.postMessage(message, transferables);\n break;\n case 'web':\n registration.postMessage(message, transferables);\n break;\n case 'shared':\n registration.port.postMessage(message, transferables);\n break;\n }\n }\n}"],
5
- "mappings": "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",
6
- "names": ["GLOBAL_NS_OBJ", "checkType", "value", "expectedType", "name", "type", "matchesType", "typeNames", "getTypeName", "createTypeChecker", "DefinitionTypes", "Definitions", "createDefinition", "type", "returnTypes", "returnTypeChecker", "createTypeChecker", "DefinitionTypes", "definitionType", "name", "factory", "defaultArgs", "definition", "args", "combinedArgs", "res", "error", "Definitions", "BAD_KEYS", "RESERVED_NAMESPACES", "MAX_NAME_LENGTH", "VALID_NAME", "assertSafeKey", "key", "where", "assertNamespace", "ns", "defineMiddleware", "createDefinition", "defineActions", "defineUninstall", "defineInitialize", "defineGetters", "DefinitionBuilder", "_DefinitionBuilder", "namespace", "#ns", "#args", "#slots", "#set", "type", "factory", "creator", "defineMiddleware", "defineGetters", "defineActions", "defineInitialize", "defineUninstall", "ServiceProvider", "_ServiceProvider", "#services", "options", "useContext", "config", "namespace", "assertNamespace", "instance", "keys", "builder", "DefinitionBuilder", "setupContext", "factory", "maybe", "error", "ENGINE_CONTEXT", "WorkerManager", "ServiceProvider", "#registrations", "#workerEvents", "#workerLifecycleEvents", "#workerLogEvents", "#responses", "#responseClock", "#ready", "_", "config", "worker", "event", "error", "context", "type", "name", "fn", "url", "options", "workerName", "setup", "registration", "#onMessageHandler", "#emit", "absoluteUrl", "workerInfo", "port", "success", "promises", "allRegistrations", "results", "payload", "#emitAsync", "cb", "#on", "lifecyleEvents", "events", "callbacks", "logEvents", "#filterTransferables", "item", "responseId", "async", "source", "callback", "#handleLogMessage", "result", "transferables", "message", "#postMessage", "#createResponse", "#createMessage", "resolve", "reject", "timeout", "args", "logData", "logLevel", "formattedMessage"]
7
- }