easy-web-worker 7.0.6 → 8.0.1

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.
Files changed (60) hide show
  1. package/EasyWebWorker.cjs +1 -0
  2. package/EasyWebWorker.d.ts +2 -2
  3. package/EasyWebWorker.js +1 -1
  4. package/EasyWebWorker.mjs +1 -0
  5. package/EasyWebWorkerMessage.cjs +1 -0
  6. package/EasyWebWorkerMessage.d.ts +2 -2
  7. package/EasyWebWorkerMessage.js +1 -1
  8. package/EasyWebWorkerMessage.mjs +1 -0
  9. package/README.md +670 -734
  10. package/StaticEasyWebWorker.cjs +1 -0
  11. package/StaticEasyWebWorker.d.ts +1 -1
  12. package/StaticEasyWebWorker.js +1 -1
  13. package/StaticEasyWebWorker.mjs +1 -0
  14. package/buildWorker.cjs +1 -0
  15. package/buildWorker.d.ts +7 -0
  16. package/buildWorker.js +1 -0
  17. package/buildWorker.mjs +1 -0
  18. package/bundle.cjs +1 -0
  19. package/bundle.js +1 -1
  20. package/bundle.mjs +1 -0
  21. package/createBlobWorker.cjs +2 -0
  22. package/createBlobWorker.d.ts +1 -0
  23. package/createBlobWorker.js +2 -1
  24. package/createBlobWorker.mjs +2 -0
  25. package/createEasyWebWorker.cjs +1 -0
  26. package/createEasyWebWorker.js +1 -1
  27. package/createEasyWebWorker.mjs +1 -0
  28. package/createStaticEasyWebWorker.cjs +1 -0
  29. package/createStaticEasyWebWorker.js +1 -1
  30. package/createStaticEasyWebWorker.mjs +1 -0
  31. package/createWorker.cjs +4 -0
  32. package/createWorker.d.ts +53 -0
  33. package/createWorker.js +4 -0
  34. package/createWorker.mjs +4 -0
  35. package/defineWorker.cjs +1 -0
  36. package/defineWorker.d.ts +31 -0
  37. package/defineWorker.js +1 -0
  38. package/defineWorker.mjs +1 -0
  39. package/getDefineWorkerTemplate.cjs +1 -0
  40. package/getDefineWorkerTemplate.d.ts +7 -0
  41. package/getDefineWorkerTemplate.js +1 -0
  42. package/getDefineWorkerTemplate.mjs +1 -0
  43. package/getWorkerTemplate.cjs +1 -0
  44. package/getWorkerTemplate.d.ts +3 -7
  45. package/getWorkerTemplate.js +1 -1
  46. package/getWorkerTemplate.mjs +1 -0
  47. package/index.d.ts +3 -0
  48. package/package.json +61 -68
  49. package/types.cjs +1 -0
  50. package/types.d.ts +132 -1
  51. package/types.js +1 -1
  52. package/types.mjs +0 -0
  53. package/uniqueId.cjs +1 -0
  54. package/uniqueId.js +1 -1
  55. package/uniqueId.mjs +1 -0
  56. package/unwrap.cjs +1 -0
  57. package/unwrap.d.ts +16 -0
  58. package/unwrap.js +1 -0
  59. package/unwrap.mjs +1 -0
  60. package/webpack.config.js +0 -86
@@ -0,0 +1 @@
1
+ "use strict";var a=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var d=(r,e)=>{for(var o in e)a(r,o,{get:e[o],enumerable:!0})},g=(r,e,o,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of c(e))!i.call(r,t)&&t!==o&&a(r,t,{get:()=>e[t],enumerable:!(s=l(e,t))||s.enumerable});return r};var p=r=>g(a({},"__esModule",{value:!0}),r);var m={};d(m,{default:()=>u,getDefineWorkerTemplate:()=>n});module.exports=p(m);var n=()=>`(()=>{"use strict";var m$=(()=>{var m=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames,v=Object.getOwnPropertySymbols;var x=Object.prototype.hasOwnProperty,B=Object.prototype.propertyIsEnumerable;var D=(s,e,a)=>e in s?m(s,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):s[e]=a,H=(s,e)=>{for(var a in e||(e={}))x.call(e,a)&&D(s,a,e[a]);if(v)for(var a of v(e))B.call(e,a)&&D(s,a,e[a]);return s};var A=(s,e)=>{for(var a in e)m(s,a,{get:e[a],enumerable:!0})},N=(s,e,a,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of O(e))!x.call(s,r)&&r!==a&&m(s,r,{get:()=>e[r],enumerable:!(i=L(e,r))||i.enumerable});return s};var q=s=>N(m({},"__esModule",{value:!0}),s);var V={};A(V,{buildWorker:()=>F,default:()=>U});var z=function(s){let{close:e,onMessage:a,importScripts:i}=(()=>{let r=new Map,c=new Map([["",()=>{throw"you didn't defined a message-callback, please assign a callback by calling easyWorker.onMessage"}]]),E=({messageId:o,payload:l,method:p})=>{let M="pending",g=new Map,d=(n,t,k=[])=>{var R;let h=M,P=n==="progress"?"pending":n;if(!r.has(o)){let y="%c#"+o+" Message Not Found: %cThis means that the message was already resolved | rejected | canceled. To avoid this error, please make sure that you are not resolving | rejecting | canceling the same message twice. Also make sure that you are not reporting progress after the message was processed. Remember each message can handle his one cancelation by adding a handler with the %cmessage.onCancel%c method. To now more about this method, please check the documentation at: %chttps://www.npmjs.com/package/easy-web-worker#ieasywebworkermessageipayload--null-iresult--void %cTrying to process message:";console.error(y,"color: darkorange; font-size: 12px; font-weight: bold;","font-weight: normal;","font-weight: bold;","font-weight: normal;","color: lightblue; font-size: 10px; font-weight: bold;","font-weight: bold; color: darkorange;",{messageId:o,status:{current:h,target:P},method:p,action:t});return}let C={resolved:"onResolve",rejected:"onReject",canceled:"onCancel",worker_cancelation:"onCancel",pending:"onProgress"}[P],_=g.get(C),j=!t.progress;try{_==null||_.forEach(y=>y(t,k)),j&&((R=g.get("onFinalize"))==null||R.forEach(y=>y(t,k)))}catch(y){throw r.delete(o),{message:"Error while processing message id: "+o,error:y,messageData:t,messageType:n,when:C}}finally{j&&r.delete(o)}self.postMessage(H({messageId:o},t),k),M=P},w=()=>M,b=()=>M==="pending",W=(n,t=[])=>d("resolved",{resolved:{payload:n===void 0?[]:[n]}},t),f=(n,t=[])=>{d("rejected",{rejected:{reason:n}},t)},T=(n,t=[])=>d("worker_cancelation",{worker_cancelation:{reason:n}},t),S=(n,t,k=[])=>{d("progress",{progress:{percentage:n,payload:t}},k)},u=n=>t=>{g.has(n)||g.set(n,new Set);let k=g.get(n);return k.add(t),()=>k.delete(t)};return{messageId:o,method:p,payload:l,getStatus:w,isPending:b,resolve:W,reject:f,cancel:T,reportProgress:S,onResolve:u("onResolve"),onReject:u("onReject"),onCancel:u("onCancel"),onProgress:u("onProgress"),onFinalize:u("onFinalize")}},I=(...o)=>{let[l,p]=o;if(typeof l=="string"){let d=l,w=p;c.set(d,w);return}let g=l;c.set("",g)},K=()=>{[...r.values()].forEach(l=>l.reject(new Error("worker closed"))),self.close()};return self.onmessage=o=>{var g,d,w,b;let l=(g=o==null?void 0:o.data)==null?void 0:g.messageId,p=(w=(d=o==null?void 0:o.data)==null?void 0:d.__is_easy_web_worker_message__)!=null?w:!1;if(l&&p)try{let{data:W}=o,{cancelation:f}=W;if(f){let{reason:k}=f,h=r.get(l);h==null||h.cancel(k);return}let{method:T,execution:S}=o.data,{payload:u}=S,n=E({method:T,messageId:l,payload:u});r.set(l,n),c.get(T||"")(n,o)}catch(W){throw r.delete((b=o.data)==null?void 0:b.messageId),{message:"Error while processing message id: "+l,event:o}}},{onMessage:I,close:K,importScripts:(...o)=>{self.importScripts(...o)}}})();this.close=e,this.onMessage=a,this.importScripts=i,s&&a(s)};var G=s=>s||{handle:e=>({handle:e})},J=s=>typeof(s==null?void 0:s.then)=="function",Q=(s,e,a)=>{let i=c=>{e.isPending()&&e.resolve(c)},r=c=>{e.isPending()&&e.reject(c)};try{let c=s(e.payload,e,a);if(J(c)){c.then(i,r);return}i(c)}catch(c){r(c)}},F=s=>{var i;let e=new z,a=(i=s({onMessage:G,easyWorker:e},self))!=null?i:{};return Object.keys(a).forEach(r=>{let c=a[r];if(typeof c=="function"){e.onMessage(r,(E,I)=>{Q(c,E,I)});return}e.onMessage(r,c.handle)}),e},U=F;return q(V);})();return m$.buildWorker})()`,u=n;0&&(module.exports={getDefineWorkerTemplate});
@@ -0,0 +1 @@
1
+ var e=()=>`(()=>{"use strict";var m$=(()=>{var m=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames,v=Object.getOwnPropertySymbols;var x=Object.prototype.hasOwnProperty,B=Object.prototype.propertyIsEnumerable;var D=(s,e,a)=>e in s?m(s,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):s[e]=a,H=(s,e)=>{for(var a in e||(e={}))x.call(e,a)&&D(s,a,e[a]);if(v)for(var a of v(e))B.call(e,a)&&D(s,a,e[a]);return s};var A=(s,e)=>{for(var a in e)m(s,a,{get:e[a],enumerable:!0})},N=(s,e,a,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of O(e))!x.call(s,r)&&r!==a&&m(s,r,{get:()=>e[r],enumerable:!(i=L(e,r))||i.enumerable});return s};var q=s=>N(m({},"__esModule",{value:!0}),s);var V={};A(V,{buildWorker:()=>F,default:()=>U});var z=function(s){let{close:e,onMessage:a,importScripts:i}=(()=>{let r=new Map,c=new Map([["",()=>{throw"you didn't defined a message-callback, please assign a callback by calling easyWorker.onMessage"}]]),E=({messageId:o,payload:l,method:p})=>{let M="pending",g=new Map,d=(n,t,k=[])=>{var R;let h=M,P=n==="progress"?"pending":n;if(!r.has(o)){let y="%c#"+o+" Message Not Found: %cThis means that the message was already resolved | rejected | canceled. To avoid this error, please make sure that you are not resolving | rejecting | canceling the same message twice. Also make sure that you are not reporting progress after the message was processed. Remember each message can handle his one cancelation by adding a handler with the %cmessage.onCancel%c method. To now more about this method, please check the documentation at: %chttps://www.npmjs.com/package/easy-web-worker#ieasywebworkermessageipayload--null-iresult--void %cTrying to process message:";console.error(y,"color: darkorange; font-size: 12px; font-weight: bold;","font-weight: normal;","font-weight: bold;","font-weight: normal;","color: lightblue; font-size: 10px; font-weight: bold;","font-weight: bold; color: darkorange;",{messageId:o,status:{current:h,target:P},method:p,action:t});return}let C={resolved:"onResolve",rejected:"onReject",canceled:"onCancel",worker_cancelation:"onCancel",pending:"onProgress"}[P],_=g.get(C),j=!t.progress;try{_==null||_.forEach(y=>y(t,k)),j&&((R=g.get("onFinalize"))==null||R.forEach(y=>y(t,k)))}catch(y){throw r.delete(o),{message:"Error while processing message id: "+o,error:y,messageData:t,messageType:n,when:C}}finally{j&&r.delete(o)}self.postMessage(H({messageId:o},t),k),M=P},w=()=>M,b=()=>M==="pending",W=(n,t=[])=>d("resolved",{resolved:{payload:n===void 0?[]:[n]}},t),f=(n,t=[])=>{d("rejected",{rejected:{reason:n}},t)},T=(n,t=[])=>d("worker_cancelation",{worker_cancelation:{reason:n}},t),S=(n,t,k=[])=>{d("progress",{progress:{percentage:n,payload:t}},k)},u=n=>t=>{g.has(n)||g.set(n,new Set);let k=g.get(n);return k.add(t),()=>k.delete(t)};return{messageId:o,method:p,payload:l,getStatus:w,isPending:b,resolve:W,reject:f,cancel:T,reportProgress:S,onResolve:u("onResolve"),onReject:u("onReject"),onCancel:u("onCancel"),onProgress:u("onProgress"),onFinalize:u("onFinalize")}},I=(...o)=>{let[l,p]=o;if(typeof l=="string"){let d=l,w=p;c.set(d,w);return}let g=l;c.set("",g)},K=()=>{[...r.values()].forEach(l=>l.reject(new Error("worker closed"))),self.close()};return self.onmessage=o=>{var g,d,w,b;let l=(g=o==null?void 0:o.data)==null?void 0:g.messageId,p=(w=(d=o==null?void 0:o.data)==null?void 0:d.__is_easy_web_worker_message__)!=null?w:!1;if(l&&p)try{let{data:W}=o,{cancelation:f}=W;if(f){let{reason:k}=f,h=r.get(l);h==null||h.cancel(k);return}let{method:T,execution:S}=o.data,{payload:u}=S,n=E({method:T,messageId:l,payload:u});r.set(l,n),c.get(T||"")(n,o)}catch(W){throw r.delete((b=o.data)==null?void 0:b.messageId),{message:"Error while processing message id: "+l,event:o}}},{onMessage:I,close:K,importScripts:(...o)=>{self.importScripts(...o)}}})();this.close=e,this.onMessage=a,this.importScripts=i,s&&a(s)};var G=s=>s||{handle:e=>({handle:e})},J=s=>typeof(s==null?void 0:s.then)=="function",Q=(s,e,a)=>{let i=c=>{e.isPending()&&e.resolve(c)},r=c=>{e.isPending()&&e.reject(c)};try{let c=s(e.payload,e,a);if(J(c)){c.then(i,r);return}i(c)}catch(c){r(c)}},F=s=>{var i;let e=new z,a=(i=s({onMessage:G,easyWorker:e},self))!=null?i:{};return Object.keys(a).forEach(r=>{let c=a[r];if(typeof c=="function"){e.onMessage(r,(E,I)=>{Q(c,E,I)});return}e.onMessage(r,c.handle)}),e},U=F;return q(V);})();return m$.buildWorker})()`,t=e;export{t as default,e as getDefineWorkerTemplate};
@@ -0,0 +1 @@
1
+ "use strict";var o=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var g=(t,e)=>{for(var a in e)o(t,a,{get:e[a],enumerable:!0})},d=(t,e,a,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of c(e))!i.call(t,r)&&r!==a&&o(t,r,{get:()=>e[r],enumerable:!(s=l(e,r))||s.enumerable});return t};var p=t=>d(o({},"__esModule",{value:!0}),t);var u={};g(u,{default:()=>m,getWorkerTemplate:()=>n});module.exports=p(u);var n=()=>`(()=>{"use strict";var m$=(()=>{var f=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames,R=Object.getOwnPropertySymbols;var v=Object.prototype.hasOwnProperty,q=Object.prototype.propertyIsEnumerable;var j=(o,s,t)=>s in o?f(o,s,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[s]=t,x=(o,s)=>{for(var t in s||(s={}))v.call(s,t)&&j(o,t,s[t]);if(R)for(var t of R(s))q.call(s,t)&&j(o,t,s[t]);return o};var B=(o,s)=>{for(var t in s)f(o,t,{get:s[t],enumerable:!0})},G=(o,s,t,M)=>{if(s&&typeof s=="object"||typeof s=="function")for(let n of N(s))!v.call(o,n)&&n!==t&&f(o,n,{get:()=>s[n],enumerable:!(M=A(s,n))||M.enumerable});return o};var H=o=>G(f({},"__esModule",{value:!0}),o);var L={};B(L,{StaticEasyWebWorker:()=>z,default:()=>J});var z=function(o){let{close:s,onMessage:t,importScripts:M}=(()=>{let n=new Map,W=new Map([["",()=>{throw"you didn't defined a message-callback, please assign a callback by calling easyWorker.onMessage"}]]),D=({messageId:e,payload:c,method:y})=>{let k="pending",l=new Map,g=(a,r,i=[])=>{var C;let u=k,I=a==="progress"?"pending":a;if(!n.has(e)){let p="%c#"+e+" Message Not Found: %cThis means that the message was already resolved | rejected | canceled. To avoid this error, please make sure that you are not resolving | rejecting | canceling the same message twice. Also make sure that you are not reporting progress after the message was processed. Remember each message can handle his one cancelation by adding a handler with the %cmessage.onCancel%c method. To now more about this method, please check the documentation at: %chttps://www.npmjs.com/package/easy-web-worker#ieasywebworkermessageipayload--null-iresult--void %cTrying to process message:";console.error(p,"color: darkorange; font-size: 12px; font-weight: bold;","font-weight: normal;","font-weight: bold;","font-weight: normal;","color: lightblue; font-size: 10px; font-weight: bold;","font-weight: bold; color: darkorange;",{messageId:e,status:{current:u,target:I},method:y,action:r});return}let _={resolved:"onResolve",rejected:"onReject",canceled:"onCancel",worker_cancelation:"onCancel",pending:"onProgress"}[I],S=l.get(_),P=!r.progress;try{S==null||S.forEach(p=>p(r,i)),P&&((C=l.get("onFinalize"))==null||C.forEach(p=>p(r,i)))}catch(p){throw n.delete(e),{message:"Error while processing message id: "+e,error:p,messageData:r,messageType:a,when:_}}finally{P&&n.delete(e)}self.postMessage(x({messageId:e},r),i),k=I},b=()=>k,T=()=>k==="pending",h=(a,r=[])=>g("resolved",{resolved:{payload:a===void 0?[]:[a]}},r),w=(a,r=[])=>{g("rejected",{rejected:{reason:a}},r)},m=(a,r=[])=>g("worker_cancelation",{worker_cancelation:{reason:a}},r),E=(a,r,i=[])=>{g("progress",{progress:{percentage:a,payload:r}},i)},d=a=>r=>{l.has(a)||l.set(a,new Set);let i=l.get(a);return i.add(r),()=>i.delete(r)};return{messageId:e,method:y,payload:c,getStatus:b,isPending:T,resolve:h,reject:w,cancel:m,reportProgress:E,onResolve:d("onResolve"),onReject:d("onReject"),onCancel:d("onCancel"),onProgress:d("onProgress"),onFinalize:d("onFinalize")}},F=(...e)=>{let[c,y]=e;if(typeof c=="string"){let g=c,b=y;W.set(g,b);return}let l=c;W.set("",l)},K=()=>{[...n.values()].forEach(c=>c.reject(new Error("worker closed"))),self.close()};return self.onmessage=e=>{var l,g,b,T;let c=(l=e==null?void 0:e.data)==null?void 0:l.messageId,y=(b=(g=e==null?void 0:e.data)==null?void 0:g.__is_easy_web_worker_message__)!=null?b:!1;if(c&&y)try{let{data:h}=e,{cancelation:w}=h;if(w){let{reason:i}=w,u=n.get(c);u==null||u.cancel(i);return}let{method:m,execution:E}=e.data,{payload:d}=E,a=D({method:m,messageId:c,payload:d});n.set(c,a),W.get(m||"")(a,e)}catch(h){throw n.delete((T=e.data)==null?void 0:T.messageId),{message:"Error while processing message id: "+c,event:e}}},{onMessage:F,close:K,importScripts:(...e)=>{self.importScripts(...e)}}})();this.close=s,this.onMessage=t,this.importScripts=M,o&&t(o)},J=z;return H(L);})();return new m$.StaticEasyWebWorker()})()`,m=n;0&&(module.exports={getWorkerTemplate});
@@ -1,11 +1,7 @@
1
1
  /**
2
- * This function contains an obfuscated version of the StaticEasyWebWorker internal auto invocable function, without comments or types
3
- * this template is used to create dynamic workers from strings templates
4
- * PLEASE KEEP THIS FUNCTION UPDATED WITH THE LATEST VERSION OF THE StaticEasyWebWorker CLASS
5
- * [IMPORTANT] Avoid ";" at the end of the template
6
- * for minifying the template, please use the following options:
7
- * - remove comments and remove types with transpile: https://johnny-quesada-developer.github.io/easy-web-workers-example/#typescript
8
- * - compress using: https://www.toptal.com/developers/javascript-minifier
2
+ * GENERATED FILE, do not edit it by hand.
3
+ * It contains the minified version of ./StaticEasyWebWorker.ts, used to create workers from functions.
4
+ * To update it run `yarn build:template`, `yarn build` also does it.
9
5
  */
10
6
  export declare const getWorkerTemplate: () => string;
11
7
  export default getWorkerTemplate;
@@ -1 +1 @@
1
- !function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o():"function"==typeof define&&define.amd?define([],o):"object"==typeof exports?exports["easy-web-worker"]=o():e["easy-web-worker"]=o()}(this,(()=>(()=>{"use strict";var e={};return((e,o)=>{Object.defineProperty(o,"__esModule",{value:!0}),o.getWorkerTemplate=void 0;o.getWorkerTemplate=function(){return'(()=>{let e=new Map,o=new Map([["",()=>{throw"you didn\'t defined a message-callback, please assign a callback by calling easyWorker.onMessage"},],]),t=({messageId:o,payload:t,method:a})=>{let s="pending",n=new Map,r=(t,r,l=[])=>{var i;let c=s,d="progress"===t?"pending":t;if(!e.has(o)){let g="%c#"+o+" Message Not Found: %cThis means that the message was already resolved | rejected | canceled. To avoid this error, please make sure that you are not resolving | rejecting | canceling the same message twice. Also make sure that you are not reporting progress after the message was processed. Remember each message can handle his one cancelation by adding a handler with the %cmessage.onCancel%c method. To now more about this method, please check the documentation at: %chttps://www.npmjs.com/package/easy-web-worker#ieasywebworkermessageipayload--null-iresult--void %cTrying to process message:";console.error(g,"color: darkorange; font-size: 12px; font-weight: bold;","font-weight: normal;","font-weight: bold;","font-weight: normal;","color: lightblue; font-size: 10px; font-weight: bold;","font-weight: bold; color: darkorange;",{messageId:o,status:{current:c,target:d},method:a,action:r});return}let h={resolved:"onResolve",rejected:"onReject",canceled:"onCancel",worker_cancelation:"onCancel",pending:"onProgress"}[d],w=n.get(h),m=!r.progress;try{null==w||w.forEach(e=>e(r,l)),m&&(null===(i=n.get("onFinalize"))||void 0===i||i.forEach(e=>e(r,l)))}catch(u){throw e.delete(o),{message:"Error while processing message id: "+o,error:u,messageData:r,messageType:t,when:h}}finally{m&&e.delete(o)}self.postMessage(Object.assign({messageId:o},r),l),s=d},l=(e,o=[])=>r("resolved",{resolved:{payload:void 0===e?[]:[e]}},o),i=(e,o=[])=>{r("rejected",{rejected:{reason:e}},o)},c=(e,o=[])=>r("worker_cancelation",{worker_cancelation:{reason:e}},o),d=(e,o,t=[])=>{r("progress",{progress:{percentage:e,payload:o}},t)},g=e=>o=>{n.has(e)||n.set(e,new Set);let t=n.get(e);return t.add(o),()=>t.delete(o)};return{messageId:o,method:a,payload:t,getStatus:()=>s,isPending:()=>"pending"===s,resolve:l,reject:i,cancel:c,reportProgress:d,onResolve:g("onResolve"),onReject:g("onReject"),onCancel:g("onCancel"),onProgress:g("onProgress"),onFinalize:g("onFinalize")}},a=(...e)=>{let[t,a]=e,s="string"==typeof t;if(s){let n=t,r=a;o.set(n,r);return}let l=t;o.set("",l)},s=()=>{let o=[...e.values()];o.forEach(e=>e.reject(Error("worker closed"))),self.close()};self.onmessage=a=>{var s,n,r,l;let i=null===(s=null==a?void 0:a.data)||void 0===s?void 0:s.messageId,c=null!==(r=null===(n=null==a?void 0:a.data)||void 0===n?void 0:n.__is_easy_web_worker_message__)&&void 0!==r&&r,d=i&&c;if(d)try{let{data:g}=a,{cancelation:h}=g;if(h){let{reason:w}=h,m=e.get(i);m.cancel(w);return}let{method:u,execution:p}=a.data,{payload:v}=p,f=t({method:u,messageId:i,payload:v});e.set(i,f);let y=o.get(u||"");y(f,a)}catch(k){throw e.delete(null===(l=a.data)||void 0===l?void 0:l.messageId),{message:"Error while processing message id: "+i,event:a}}};let n=(...e)=>{self.importScripts(...e)};return{onMessage:a,close:s,importScripts:n}})();'},o.default=o.getWorkerTemplate})(0,e),e})()));
1
+ "use strict";var o=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var g=(t,e)=>{for(var a in e)o(t,a,{get:e[a],enumerable:!0})},d=(t,e,a,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of c(e))!i.call(t,r)&&r!==a&&o(t,r,{get:()=>e[r],enumerable:!(s=l(e,r))||s.enumerable});return t};var p=t=>d(o({},"__esModule",{value:!0}),t);var u={};g(u,{default:()=>m,getWorkerTemplate:()=>n});module.exports=p(u);var n=()=>`(()=>{"use strict";var m$=(()=>{var f=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames,R=Object.getOwnPropertySymbols;var v=Object.prototype.hasOwnProperty,q=Object.prototype.propertyIsEnumerable;var j=(o,s,t)=>s in o?f(o,s,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[s]=t,x=(o,s)=>{for(var t in s||(s={}))v.call(s,t)&&j(o,t,s[t]);if(R)for(var t of R(s))q.call(s,t)&&j(o,t,s[t]);return o};var B=(o,s)=>{for(var t in s)f(o,t,{get:s[t],enumerable:!0})},G=(o,s,t,M)=>{if(s&&typeof s=="object"||typeof s=="function")for(let n of N(s))!v.call(o,n)&&n!==t&&f(o,n,{get:()=>s[n],enumerable:!(M=A(s,n))||M.enumerable});return o};var H=o=>G(f({},"__esModule",{value:!0}),o);var L={};B(L,{StaticEasyWebWorker:()=>z,default:()=>J});var z=function(o){let{close:s,onMessage:t,importScripts:M}=(()=>{let n=new Map,W=new Map([["",()=>{throw"you didn't defined a message-callback, please assign a callback by calling easyWorker.onMessage"}]]),D=({messageId:e,payload:c,method:y})=>{let k="pending",l=new Map,g=(a,r,i=[])=>{var C;let u=k,I=a==="progress"?"pending":a;if(!n.has(e)){let p="%c#"+e+" Message Not Found: %cThis means that the message was already resolved | rejected | canceled. To avoid this error, please make sure that you are not resolving | rejecting | canceling the same message twice. Also make sure that you are not reporting progress after the message was processed. Remember each message can handle his one cancelation by adding a handler with the %cmessage.onCancel%c method. To now more about this method, please check the documentation at: %chttps://www.npmjs.com/package/easy-web-worker#ieasywebworkermessageipayload--null-iresult--void %cTrying to process message:";console.error(p,"color: darkorange; font-size: 12px; font-weight: bold;","font-weight: normal;","font-weight: bold;","font-weight: normal;","color: lightblue; font-size: 10px; font-weight: bold;","font-weight: bold; color: darkorange;",{messageId:e,status:{current:u,target:I},method:y,action:r});return}let _={resolved:"onResolve",rejected:"onReject",canceled:"onCancel",worker_cancelation:"onCancel",pending:"onProgress"}[I],S=l.get(_),P=!r.progress;try{S==null||S.forEach(p=>p(r,i)),P&&((C=l.get("onFinalize"))==null||C.forEach(p=>p(r,i)))}catch(p){throw n.delete(e),{message:"Error while processing message id: "+e,error:p,messageData:r,messageType:a,when:_}}finally{P&&n.delete(e)}self.postMessage(x({messageId:e},r),i),k=I},b=()=>k,T=()=>k==="pending",h=(a,r=[])=>g("resolved",{resolved:{payload:a===void 0?[]:[a]}},r),w=(a,r=[])=>{g("rejected",{rejected:{reason:a}},r)},m=(a,r=[])=>g("worker_cancelation",{worker_cancelation:{reason:a}},r),E=(a,r,i=[])=>{g("progress",{progress:{percentage:a,payload:r}},i)},d=a=>r=>{l.has(a)||l.set(a,new Set);let i=l.get(a);return i.add(r),()=>i.delete(r)};return{messageId:e,method:y,payload:c,getStatus:b,isPending:T,resolve:h,reject:w,cancel:m,reportProgress:E,onResolve:d("onResolve"),onReject:d("onReject"),onCancel:d("onCancel"),onProgress:d("onProgress"),onFinalize:d("onFinalize")}},F=(...e)=>{let[c,y]=e;if(typeof c=="string"){let g=c,b=y;W.set(g,b);return}let l=c;W.set("",l)},K=()=>{[...n.values()].forEach(c=>c.reject(new Error("worker closed"))),self.close()};return self.onmessage=e=>{var l,g,b,T;let c=(l=e==null?void 0:e.data)==null?void 0:l.messageId,y=(b=(g=e==null?void 0:e.data)==null?void 0:g.__is_easy_web_worker_message__)!=null?b:!1;if(c&&y)try{let{data:h}=e,{cancelation:w}=h;if(w){let{reason:i}=w,u=n.get(c);u==null||u.cancel(i);return}let{method:m,execution:E}=e.data,{payload:d}=E,a=D({method:m,messageId:c,payload:d});n.set(c,a),W.get(m||"")(a,e)}catch(h){throw n.delete((T=e.data)==null?void 0:T.messageId),{message:"Error while processing message id: "+c,event:e}}},{onMessage:F,close:K,importScripts:(...e)=>{self.importScripts(...e)}}})();this.close=s,this.onMessage=t,this.importScripts=M,o&&t(o)},J=z;return H(L);})();return new m$.StaticEasyWebWorker()})()`,m=n;0&&(module.exports={getWorkerTemplate});
@@ -0,0 +1 @@
1
+ var e=()=>`(()=>{"use strict";var m$=(()=>{var f=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames,R=Object.getOwnPropertySymbols;var v=Object.prototype.hasOwnProperty,q=Object.prototype.propertyIsEnumerable;var j=(o,s,t)=>s in o?f(o,s,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[s]=t,x=(o,s)=>{for(var t in s||(s={}))v.call(s,t)&&j(o,t,s[t]);if(R)for(var t of R(s))q.call(s,t)&&j(o,t,s[t]);return o};var B=(o,s)=>{for(var t in s)f(o,t,{get:s[t],enumerable:!0})},G=(o,s,t,M)=>{if(s&&typeof s=="object"||typeof s=="function")for(let n of N(s))!v.call(o,n)&&n!==t&&f(o,n,{get:()=>s[n],enumerable:!(M=A(s,n))||M.enumerable});return o};var H=o=>G(f({},"__esModule",{value:!0}),o);var L={};B(L,{StaticEasyWebWorker:()=>z,default:()=>J});var z=function(o){let{close:s,onMessage:t,importScripts:M}=(()=>{let n=new Map,W=new Map([["",()=>{throw"you didn't defined a message-callback, please assign a callback by calling easyWorker.onMessage"}]]),D=({messageId:e,payload:c,method:y})=>{let k="pending",l=new Map,g=(a,r,i=[])=>{var C;let u=k,I=a==="progress"?"pending":a;if(!n.has(e)){let p="%c#"+e+" Message Not Found: %cThis means that the message was already resolved | rejected | canceled. To avoid this error, please make sure that you are not resolving | rejecting | canceling the same message twice. Also make sure that you are not reporting progress after the message was processed. Remember each message can handle his one cancelation by adding a handler with the %cmessage.onCancel%c method. To now more about this method, please check the documentation at: %chttps://www.npmjs.com/package/easy-web-worker#ieasywebworkermessageipayload--null-iresult--void %cTrying to process message:";console.error(p,"color: darkorange; font-size: 12px; font-weight: bold;","font-weight: normal;","font-weight: bold;","font-weight: normal;","color: lightblue; font-size: 10px; font-weight: bold;","font-weight: bold; color: darkorange;",{messageId:e,status:{current:u,target:I},method:y,action:r});return}let _={resolved:"onResolve",rejected:"onReject",canceled:"onCancel",worker_cancelation:"onCancel",pending:"onProgress"}[I],S=l.get(_),P=!r.progress;try{S==null||S.forEach(p=>p(r,i)),P&&((C=l.get("onFinalize"))==null||C.forEach(p=>p(r,i)))}catch(p){throw n.delete(e),{message:"Error while processing message id: "+e,error:p,messageData:r,messageType:a,when:_}}finally{P&&n.delete(e)}self.postMessage(x({messageId:e},r),i),k=I},b=()=>k,T=()=>k==="pending",h=(a,r=[])=>g("resolved",{resolved:{payload:a===void 0?[]:[a]}},r),w=(a,r=[])=>{g("rejected",{rejected:{reason:a}},r)},m=(a,r=[])=>g("worker_cancelation",{worker_cancelation:{reason:a}},r),E=(a,r,i=[])=>{g("progress",{progress:{percentage:a,payload:r}},i)},d=a=>r=>{l.has(a)||l.set(a,new Set);let i=l.get(a);return i.add(r),()=>i.delete(r)};return{messageId:e,method:y,payload:c,getStatus:b,isPending:T,resolve:h,reject:w,cancel:m,reportProgress:E,onResolve:d("onResolve"),onReject:d("onReject"),onCancel:d("onCancel"),onProgress:d("onProgress"),onFinalize:d("onFinalize")}},F=(...e)=>{let[c,y]=e;if(typeof c=="string"){let g=c,b=y;W.set(g,b);return}let l=c;W.set("",l)},K=()=>{[...n.values()].forEach(c=>c.reject(new Error("worker closed"))),self.close()};return self.onmessage=e=>{var l,g,b,T;let c=(l=e==null?void 0:e.data)==null?void 0:l.messageId,y=(b=(g=e==null?void 0:e.data)==null?void 0:g.__is_easy_web_worker_message__)!=null?b:!1;if(c&&y)try{let{data:h}=e,{cancelation:w}=h;if(w){let{reason:i}=w,u=n.get(c);u==null||u.cancel(i);return}let{method:m,execution:E}=e.data,{payload:d}=E,a=D({method:m,messageId:c,payload:d});n.set(c,a),W.get(m||"")(a,e)}catch(h){throw n.delete((T=e.data)==null?void 0:T.messageId),{message:"Error while processing message id: "+c,event:e}}},{onMessage:F,close:K,importScripts:(...e)=>{self.importScripts(...e)}}})();this.close=s,this.onMessage=t,this.importScripts=M,o&&t(o)},J=z;return H(L);})();return new m$.StaticEasyWebWorker()})()`,r=e;export{r as default,e as getWorkerTemplate};
package/index.d.ts CHANGED
@@ -3,4 +3,7 @@ export { EasyWebWorker } from './EasyWebWorker';
3
3
  export { StaticEasyWebWorker } from './StaticEasyWebWorker';
4
4
  export { createEasyWebWorker } from './createEasyWebWorker';
5
5
  export { createStaticEasyWebWorker } from './createStaticEasyWebWorker';
6
+ export { createWorker } from './createWorker';
7
+ export { defineWorker } from './defineWorker';
8
+ export { unwrap } from './unwrap';
6
9
  export type * from './types';
package/package.json CHANGED
@@ -1,80 +1,92 @@
1
1
  {
2
2
  "name": "easy-web-worker",
3
- "version": "7.0.6",
3
+ "version": "8.0.1",
4
4
  "description": "This is a library to easily handle and create web-workers, if you are a web developer and never tried this... do not wait any longer! Workers are an amazing option to improve user experience and make your webpages even greater",
5
- "main": "./bundle.js",
5
+ "main": "./bundle.cjs",
6
+ "module": "./bundle.mjs",
6
7
  "types": "./index.d.ts",
7
8
  "sideEffects": false,
8
9
  "exports": {
9
10
  ".": {
10
- "import": "./bundle.js",
11
- "require": "./bundle.js",
12
- "types": "./index.d.ts"
11
+ "types": "./index.d.ts",
12
+ "node": "./bundle.cjs",
13
+ "import": "./bundle.mjs",
14
+ "require": "./bundle.cjs"
13
15
  },
14
16
  "./createBlobWorker": {
15
- "import": "./createBlobWorker.js",
16
- "require": "./createBlobWorker.js",
17
- "types": "./createBlobWorker.d.ts"
17
+ "types": "./createBlobWorker.d.ts",
18
+ "node": "./createBlobWorker.cjs",
19
+ "import": "./createBlobWorker.mjs",
20
+ "require": "./createBlobWorker.cjs"
18
21
  },
19
22
  "./createEasyWebWorker": {
20
- "import": "./createEasyWebWorker.js",
21
- "require": "./createEasyWebWorker.js",
22
- "types": "./createEasyWebWorker.d.ts"
23
+ "types": "./createEasyWebWorker.d.ts",
24
+ "node": "./createEasyWebWorker.cjs",
25
+ "import": "./createEasyWebWorker.mjs",
26
+ "require": "./createEasyWebWorker.cjs"
23
27
  },
24
28
  "./createStaticEasyWebWorker": {
25
- "import": "./createStaticEasyWebWorker.js",
26
- "require": "./createStaticEasyWebWorker.js",
27
- "types": "./createStaticEasyWebWorker.d.ts"
29
+ "types": "./createStaticEasyWebWorker.d.ts",
30
+ "node": "./createStaticEasyWebWorker.cjs",
31
+ "import": "./createStaticEasyWebWorker.mjs",
32
+ "require": "./createStaticEasyWebWorker.cjs"
28
33
  },
29
34
  "./EasyWebWorker": {
30
- "import": "./EasyWebWorker.js",
31
- "require": "./EasyWebWorker.js",
32
- "types": "./EasyWebWorker.d.ts"
35
+ "types": "./EasyWebWorker.d.ts",
36
+ "node": "./EasyWebWorker.cjs",
37
+ "import": "./EasyWebWorker.mjs",
38
+ "require": "./EasyWebWorker.cjs"
33
39
  },
34
40
  "./EasyWebWorkerMessage": {
35
- "import": "./EasyWebWorkerMessage.js",
36
- "require": "./EasyWebWorkerMessage.js",
37
- "types": "./EasyWebWorkerMessage.d.ts"
41
+ "types": "./EasyWebWorkerMessage.d.ts",
42
+ "node": "./EasyWebWorkerMessage.cjs",
43
+ "import": "./EasyWebWorkerMessage.mjs",
44
+ "require": "./EasyWebWorkerMessage.cjs"
38
45
  },
39
46
  "./getWorkerTemplate": {
40
- "import": "./getWorkerTemplate.js",
41
- "require": "./getWorkerTemplate.js",
42
- "types": "./getWorkerTemplate.d.ts"
47
+ "types": "./getWorkerTemplate.d.ts",
48
+ "node": "./getWorkerTemplate.cjs",
49
+ "import": "./getWorkerTemplate.mjs",
50
+ "require": "./getWorkerTemplate.cjs"
43
51
  },
44
52
  "./StaticEasyWebWorker": {
45
- "import": "./StaticEasyWebWorker.js",
46
- "require": "./StaticEasyWebWorker.js",
47
- "types": "./StaticEasyWebWorker.d.ts"
53
+ "types": "./StaticEasyWebWorker.d.ts",
54
+ "node": "./StaticEasyWebWorker.cjs",
55
+ "import": "./StaticEasyWebWorker.mjs",
56
+ "require": "./StaticEasyWebWorker.cjs"
48
57
  },
49
58
  "./types": {
50
- "import": "./types.js",
51
- "require": "./types.js",
52
- "types": "./types.d.ts"
59
+ "types": "./types.d.ts",
60
+ "node": "./types.cjs",
61
+ "import": "./types.mjs",
62
+ "require": "./types.cjs"
53
63
  },
54
64
  "./uniqueId": {
55
- "import": "./uniqueId.js",
56
- "require": "./uniqueId.js",
57
- "types": "./uniqueId.d.ts"
58
- }
65
+ "types": "./uniqueId.d.ts",
66
+ "node": "./uniqueId.cjs",
67
+ "import": "./uniqueId.mjs",
68
+ "require": "./uniqueId.cjs"
69
+ },
70
+ "./createWorker": {
71
+ "types": "./createWorker.d.ts",
72
+ "node": "./createWorker.cjs",
73
+ "import": "./createWorker.mjs",
74
+ "require": "./createWorker.cjs"
75
+ },
76
+ "./defineWorker": {
77
+ "types": "./defineWorker.d.ts",
78
+ "node": "./defineWorker.cjs",
79
+ "import": "./defineWorker.mjs",
80
+ "require": "./defineWorker.cjs"
81
+ },
82
+ "./package.json": "./package.json"
59
83
  },
60
84
  "files": [
61
85
  "*.js",
86
+ "*.cjs",
87
+ "*.mjs",
62
88
  "*.d.ts"
63
89
  ],
64
- "scripts": {
65
- "test": "npm run build && jest --maxWorkers=4 -c --no-watchman -u",
66
- "test:debug": "npm run build && node --inspect-brk node_modules/.bin/jest --watch --runInBand",
67
- "test:debug:quick": "node --inspect-brk node_modules/.bin/jest --watch --runInBand",
68
- "test:quick": "jest --maxWorkers=4 -c --no-watchman -u",
69
- "test:coverage": "npm run build && jest --maxWorkers=4 -c --colors --no-watchman --verbose --coverage",
70
- "build": "webpack --config webpack.config.js",
71
- "prepare": "npm run build",
72
- "version": "npm run format && git add -A src",
73
- "postversion": "git push && git push --tags",
74
- "lint": "eslint src --ext .js,.jsx,.ts,.tsx --max-warnings=0",
75
- "lint:fix": "eslint --fix src --ext .js,.jsx,.ts,.tsx --max-warnings=0",
76
- "clean": "find . -maxdepth 1 -type f \\( -name '*.js' -o -name '*.d.ts' \\) ! -name 'webpack.config.js' -exec rm {} +"
77
- },
78
90
  "repository": {
79
91
  "type": "git",
80
92
  "url": "git+https://github.com/johnny-quesada-developer/easy-web-worker.git"
@@ -94,30 +106,11 @@
94
106
  "url": "https://github.com/johnny-quesada-developer/easy-web-worker/issues"
95
107
  },
96
108
  "homepage": "https://github.com/johnny-quesada-developer/easy-web-worker#readme",
97
- "devDependencies": {
98
- "@babel/core": "^7.21.3",
99
- "@babel/plugin-proposal-class-properties": "^7.18.6",
100
- "@babel/plugin-proposal-export-namespace-from": "^7.18.9",
101
- "@babel/plugin-transform-modules-commonjs": "^7.21.2",
102
- "@babel/preset-env": "^7.20.2",
103
- "@babel/preset-typescript": "^7.21.0",
104
- "@types/jest": "^29.2.4",
105
- "@types/node": "^20.11.0",
106
- "babel-loader": "^9.1.2",
107
- "jest": "^29.3.1",
108
- "jsdom": "^16.4.0",
109
- "ts-jest": "^29.1.1",
110
- "ts-loader": "^9.4.2",
111
- "tslib": "^2.4.1",
112
- "typescript": "^5.3.3",
113
- "webpack": "^5.76.3",
114
- "webpack-cli": "^5.0.1"
115
- },
116
109
  "dependencies": {
117
- "easy-cancelable-promise": "^1.0.3"
110
+ "easy-cancelable-promise": "^2.0.1"
118
111
  },
119
112
  "peerDependencies": {
120
- "easy-cancelable-promise": "^1.0.3"
113
+ "easy-cancelable-promise": "^2.0.1"
121
114
  },
122
115
  "peerDependenciesMeta": {
123
116
  "easy-cancelable-promise": {
package/types.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";var n=Object.defineProperty;var t=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var i=(r,e,s,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of l(e))!d.call(r,a)&&a!==s&&n(r,a,{get:()=>e[a],enumerable:!(o=t(e,a))||o.enumerable});return r};var y=r=>i(n({},"__esModule",{value:!0}),r);var T={};module.exports=y(T);
package/types.d.ts CHANGED
@@ -1,3 +1,6 @@
1
+ import type { CancelablePromise } from 'easy-cancelable-promise/CancelablePromise';
2
+ import type { EasyWebWorker } from './EasyWebWorker';
3
+ import type { workerInstance$ } from './unwrap';
1
4
  export type Subscription = () => void;
2
5
  /**
3
6
  * EasyWorker Config
@@ -151,6 +154,22 @@ export type TOverrideConfig = {
151
154
  * @template IResult - Indicates if your WORKERS messages has a result... NULL indicates all you messages are Promise<void>
152
155
  * @param {IEasyWorkerInstance<IPayload, IResult>} easyWorker - ,
153
156
  */
157
+ /**
158
+ * Global scope of a dedicated worker, as the `webworker` lib of TypeScript declares it.
159
+ * It is read from the global types instead of named, so the declarations of this package also compile in
160
+ * a project that only loads the `dom` lib. There, the scope falls back to the members every worker has.
161
+ */
162
+ type NativeWorkerScope = typeof globalThis extends {
163
+ DedicatedWorkerGlobalScope: {
164
+ prototype: infer TScope;
165
+ };
166
+ } ? TScope : EventTarget & {
167
+ readonly name: string;
168
+ readonly self: unknown;
169
+ postMessage(message: any, transfer?: Transferable[]): void;
170
+ importScripts(...urls: (string | URL)[]): void;
171
+ close(): void;
172
+ };
154
173
  export type EasyWebWorkerBody<IPayload = null, IResult = void, TPrimitiveParameters extends any[] = unknown[]> = (
155
174
  /**
156
175
  * This is the instance of the worker that you can use to communicate with the main thread
@@ -159,7 +178,7 @@ easyWorker: IEasyWorkerInstance<IPayload, IResult>,
159
178
  /**
160
179
  * This is the context of the worker, you can use it to access to the global scope of the worker
161
180
  * */
162
- context: DedicatedWorkerGlobalScope & {
181
+ context: NativeWorkerScope & {
163
182
  primitiveParameters: TPrimitiveParameters;
164
183
  } & Record<string, unknown>) => void;
165
184
  export type TMessagePostType = 'progress' | 'resolved' | 'rejected' | 'canceled' | 'worker_cancelation';
@@ -227,3 +246,115 @@ export interface IEasyWebWorkerMessage<TPayload = null, TResult = void> {
227
246
  */
228
247
  readonly onFinalize: (callback: TMessageCallback) => Subscription;
229
248
  }
249
+ /**
250
+ * Message received by the methods of defineWorker as second parameter.
251
+ * The result of these methods is the value they return, that is why resolve is not typed with the result here.
252
+ * Use onMessage<TPayload, TResult>().handle(...) to get a message with a typed resolve.
253
+ */
254
+ export type WorkerMethodMessage<TPayload = null> = Omit<IEasyWebWorkerMessage<TPayload, unknown>, 'resolve'> & {
255
+ /**
256
+ * This method is used to resolve the message from inside the worker
257
+ * */
258
+ readonly resolve: (result?: unknown, transfer?: Transferable[]) => void;
259
+ };
260
+ /**
261
+ * Method of a worker created with defineWorker: the value it returns resolves the message, the error it throws rejects it
262
+ */
263
+ export type WorkerMethodHandler<TPayload = null, TResult = void> = (payload: TPayload, message: WorkerMethodMessage<TPayload>, event: MessageEvent<IMessageData<TPayload>>) => TResult | Promise<TResult>;
264
+ /**
265
+ * Method of a worker created with onMessage<TPayload, TResult>().handle(...),
266
+ * the message is completed by the callback whenever it calls resolve, reject or cancel
267
+ */
268
+ export type WorkerDeferredHandler<TPayload = null, TResult = void> = {
269
+ readonly handle: (message: IEasyWebWorkerMessage<TPayload, TResult>, event: MessageEvent<IMessageData<TPayload>>) => void;
270
+ };
271
+ export type WorkerMethods = Record<string, WorkerMethodHandler<any, any> | WorkerDeferredHandler<any, any>>;
272
+ /**
273
+ * Helper of defineWorker to create the methods of the worker with the types inferred
274
+ */
275
+ export type WorkerOnMessage = {
276
+ /**
277
+ * The value returned by the handler resolves the message, the error it throws rejects it.
278
+ * The payload type is taken from the first parameter and the result type from the returned value.
279
+ */
280
+ <TPayload = null, TResult = void>(handler: WorkerMethodHandler<TPayload, TResult>): WorkerMethodHandler<TPayload, TResult>;
281
+ /**
282
+ * Creates a method that receives only the message and completes it whenever it wants
283
+ */
284
+ <TPayload = null, TResult = void>(): {
285
+ handle: (callback: WorkerDeferredHandler<TPayload, TResult>['handle']) => WorkerDeferredHandler<TPayload, TResult>;
286
+ };
287
+ };
288
+ export type WorkerHelpers = {
289
+ onMessage: WorkerOnMessage;
290
+ };
291
+ /**
292
+ * Global scope of the worker
293
+ */
294
+ export type WorkerScope<TPrimitiveParameters extends any[] = unknown[]> = NativeWorkerScope & {
295
+ /**
296
+ * Values of the primitiveParameters option, only for the workers created from a function
297
+ */
298
+ primitiveParameters: TPrimitiveParameters;
299
+ } & Record<string, unknown>;
300
+ /**
301
+ * Function used by createWorker as the source of a worker, it returns the methods of the worker.
302
+ * It becomes the source of a real worker, so it can not use variables from outside of it.
303
+ */
304
+ export type WorkerBuilder<TMethods extends WorkerMethods | void = WorkerMethods, TPrimitiveParameters extends any[] = unknown[]> = (
305
+ /**
306
+ * onMessage to create the methods with the types inferred, and easyWorker to keep using the message api
307
+ */
308
+ helpers: WorkerHelpers & {
309
+ /**
310
+ * This is the instance of the worker, the message api is still available through it:
311
+ * easyWorker.onMessage('method', (message) => { ... }), easyWorker.onMessage((message) => { ... }),
312
+ * easyWorker.importScripts(...) and easyWorker.close()
313
+ */
314
+ easyWorker: IEasyWorkerInstance;
315
+ },
316
+ /**
317
+ * This is the context of the worker, you can use it to access to the global scope of the worker
318
+ * */
319
+ context: WorkerScope<TPrimitiveParameters>) => TMethods;
320
+ /**
321
+ * Methods of a worker created from several functions: the methods of each function merged, the last one wins
322
+ */
323
+ export type MergeWorkerMethods<TBuilders extends readonly unknown[]> = TBuilders extends readonly [infer TBuilder, ...infer TRest] ? MergeWorkerMethods<TRest> extends infer TOverrides ? {
324
+ [TName in Exclude<keyof WorkerBuilderMethods<TBuilder>, keyof TOverrides> | keyof TOverrides]: TName extends keyof TOverrides ? TOverrides[TName] : WorkerBuilderMethods<TBuilder>[TName & keyof WorkerBuilderMethods<TBuilder>];
325
+ } : never : {};
326
+ type WorkerBuilderMethods<TBuilder> = TBuilder extends (...parameters: any[]) => infer TMethods ? TMethods extends WorkerMethods ? TMethods : {} : {};
327
+ /**
328
+ * Result of defineWorker, export its type to use the worker from the main thread:
329
+ * export type MyWorker = typeof worker;
330
+ */
331
+ export type WorkerDefinition<TMethods extends WorkerMethods = WorkerMethods> = {
332
+ readonly [workerInstance$]: IEasyWorkerInstance;
333
+ /**
334
+ * Only carries the type of the methods, it does not exist at runtime
335
+ */
336
+ readonly __methods?: TMethods;
337
+ };
338
+ type IsAny<T> = 0 extends 1 & T ? true : false;
339
+ /**
340
+ * How a method of the worker is called from the main thread
341
+ */
342
+ export type WorkerMethodCaller<TPayload, TResult> = IsAny<TPayload> extends true ? (payload?: TPayload, transfer?: Transferable[]) => CancelablePromise<TResult> : [TPayload] extends [null | undefined | void] ? () => CancelablePromise<TResult> : undefined extends TPayload ? (payload?: TPayload, transfer?: Transferable[]) => CancelablePromise<TResult> : (payload: TPayload, transfer?: Transferable[]) => CancelablePromise<TResult>;
343
+ /**
344
+ * The methods of a worker as they are called from the main thread
345
+ */
346
+ export type WorkerApi<TMethods> = {
347
+ readonly [TName in keyof TMethods]: TMethods[TName] extends WorkerDeferredHandler<infer TPayload, infer TResult> ? WorkerMethodCaller<TPayload, TResult> : TMethods[TName] extends (...parameters: infer TParameters) => infer TReturn ? WorkerMethodCaller<TParameters extends [] ? null : TParameters[0], Awaited<TReturn>> : never;
348
+ };
349
+ /**
350
+ * Extracts the methods from the type of a worker definition: typeof worker
351
+ */
352
+ export type InferWorkerMethods<TWorker> = TWorker extends WorkerDefinition<infer TMethods> ? TMethods : TWorker extends WorkerMethods ? TWorker : never;
353
+ /**
354
+ * Result of createWorker: only the methods of the worker.
355
+ * Use unwrap(worker) to reach the EasyWebWorker instance behind it.
356
+ */
357
+ export type WorkerProxy<TWorker> = WorkerApi<InferWorkerMethods<TWorker>> & {
358
+ readonly [workerInstance$]: EasyWebWorker<unknown, unknown>;
359
+ };
360
+ export {};
package/types.js CHANGED
@@ -1 +1 @@
1
- !function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o():"function"==typeof define&&define.amd?define([],o):"object"==typeof exports?exports["easy-web-worker"]=o():e["easy-web-worker"]=o()}(this,(()=>(()=>{"use strict";var e={};return(()=>{var o=e;Object.defineProperty(o,"__esModule",{value:!0})})(),e})()));
1
+ "use strict";var n=Object.defineProperty;var t=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var i=(r,e,s,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of l(e))!d.call(r,a)&&a!==s&&n(r,a,{get:()=>e[a],enumerable:!(o=t(e,a))||o.enumerable});return r};var y=r=>i(n({},"__esModule",{value:!0}),r);var T={};module.exports=y(T);
package/types.mjs ADDED
File without changes
package/uniqueId.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";var o=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var S=(t,r)=>{for(var n in r)o(t,n,{get:r[n],enumerable:!0})},a=(t,r,n,u)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of s(r))!E.call(t,e)&&e!==n&&o(t,e,{get:()=>r[e],enumerable:!(u=g(r,e))||u.enumerable});return t};var c=t=>a(o({},"__esModule",{value:!0}),t);var f={};S(f,{default:()=>d,uniqueId:()=>i});module.exports=c(f);var i=(()=>{let t=0;return(r="")=>(t===Number.MAX_SAFE_INTEGER&&(t=0),r+Date.now().toString(36)+(t++).toString(36))})(),d=i;0&&(module.exports={uniqueId});
package/uniqueId.js CHANGED
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["easy-web-worker"]=t():e["easy-web-worker"]=t()}(this,(()=>(()=>{"use strict";var e={};return((e,t)=>{var o;Object.defineProperty(t,"__esModule",{value:!0}),t.uniqueId=void 0,t.uniqueId=(o=0,function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return o===Number.MAX_SAFE_INTEGER&&(o=0),e+Date.now().toString(36)+(o++).toString(36)}),t.default=t.uniqueId})(0,e),e})()));
1
+ "use strict";var o=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var S=(t,r)=>{for(var n in r)o(t,n,{get:r[n],enumerable:!0})},a=(t,r,n,u)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of s(r))!E.call(t,e)&&e!==n&&o(t,e,{get:()=>r[e],enumerable:!(u=g(r,e))||u.enumerable});return t};var c=t=>a(o({},"__esModule",{value:!0}),t);var f={};S(f,{default:()=>d,uniqueId:()=>i});module.exports=c(f);var i=(()=>{let t=0;return(r="")=>(t===Number.MAX_SAFE_INTEGER&&(t=0),r+Date.now().toString(36)+(t++).toString(36))})(),d=i;0&&(module.exports={uniqueId});
package/uniqueId.mjs ADDED
@@ -0,0 +1 @@
1
+ var e=(()=>{let t=0;return(r="")=>(t===Number.MAX_SAFE_INTEGER&&(t=0),r+Date.now().toString(36)+(t++).toString(36))})(),n=e;export{n as default,e as uniqueId};
package/unwrap.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";var t=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var p=(e,r)=>{for(var o in r)t(e,o,{get:r[o],enumerable:!0})},y=(e,r,o,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of c(r))!u.call(e,n)&&n!==o&&t(e,n,{get:()=>r[n],enumerable:!(s=w(r,n))||s.enumerable});return e};var l=e=>y(t({},"__esModule",{value:!0}),e);var b={};p(b,{default:()=>x,unwrap:()=>k,workerInstance$:()=>a});module.exports=l(b);var a=Symbol.for("easy-web-worker/instance"),k=e=>e[a],x=k;0&&(module.exports={unwrap,workerInstance$});
package/unwrap.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Key that carries the worker behind the objects created by defineWorker and createWorker.
3
+ * It is a registered symbol, so it is the same even if the package is loaded more than once (esm and cjs)
4
+ * and the methods of a worker, which are strings, can never override it.
5
+ */
6
+ export declare const workerInstance$: unique symbol;
7
+ /**
8
+ * Gives access to the worker behind the objects created by defineWorker and createWorker
9
+ *
10
+ * - Inside the worker file: unwrap(definition) returns the static worker (onMessage, close, importScripts)
11
+ * - In the main thread: unwrap(worker) returns the EasyWebWorker instance (cancelAll, reboot, dispose, ...)
12
+ */
13
+ export declare const unwrap: <TWorker extends {
14
+ readonly [workerInstance$]: unknown;
15
+ }>(worker: TWorker) => TWorker[typeof workerInstance$];
16
+ export default unwrap;
package/unwrap.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";var t=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var p=(e,r)=>{for(var o in r)t(e,o,{get:r[o],enumerable:!0})},y=(e,r,o,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of c(r))!u.call(e,n)&&n!==o&&t(e,n,{get:()=>r[n],enumerable:!(s=w(r,n))||s.enumerable});return e};var l=e=>y(t({},"__esModule",{value:!0}),e);var b={};p(b,{default:()=>x,unwrap:()=>k,workerInstance$:()=>a});module.exports=l(b);var a=Symbol.for("easy-web-worker/instance"),k=e=>e[a],x=k;0&&(module.exports={unwrap,workerInstance$});
package/unwrap.mjs ADDED
@@ -0,0 +1 @@
1
+ var r=Symbol.for("easy-web-worker/instance"),n=e=>e[r],o=n;export{o as default,n as unwrap,r as workerInstance$};
package/webpack.config.js DELETED
@@ -1,86 +0,0 @@
1
- const path = require('path');
2
- const TerserPlugin = require('terser-webpack-plugin');
3
-
4
- module.exports = {
5
- mode: 'production',
6
- entry: {
7
- bundle: './src/index.ts',
8
- createBlobWorker: './src/createBlobWorker.ts',
9
- createEasyWebWorker: './src/createEasyWebWorker.ts',
10
- createStaticEasyWebWorker: './src/createStaticEasyWebWorker.ts',
11
- EasyWebWorker: './src/EasyWebWorker.ts',
12
- EasyWebWorkerMessage: './src/EasyWebWorkerMessage.ts',
13
- getWorkerTemplate: './src/getWorkerTemplate.ts',
14
- StaticEasyWebWorker: './src/StaticEasyWebWorker.ts',
15
- types: './src/types.ts',
16
- uniqueId: './src/uniqueId.ts',
17
- },
18
- externals: {
19
- 'easy-cancelable-promise': 'easy-cancelable-promise',
20
-
21
- 'easy-cancelable-promise/CancelablePromise':
22
- 'easy-cancelable-promise/CancelablePromise',
23
-
24
- 'cancelable-promise/groupAsCancelablePromise':
25
- 'easy-cancelable-promise/groupAsCancelablePromise',
26
- },
27
- output: {
28
- path: path.resolve(__dirname),
29
- filename: ({ chunk: { name } }) => {
30
- if (name.includes('worker')) {
31
- return `${name}.worker.js`;
32
- }
33
-
34
- return `${name}.js`;
35
- },
36
- libraryTarget: 'umd',
37
- library: 'easy-web-worker',
38
- globalObject: 'this',
39
- },
40
- resolve: {
41
- extensions: ['.ts', '.js'],
42
- alias: {
43
- 'easy-web-worker': path.resolve(
44
- __dirname,
45
- 'node_modules/easy-web-worker/package.json'
46
- ),
47
- },
48
- },
49
- module: {
50
- rules: [
51
- {
52
- test: /\.ts$/,
53
- use: [
54
- {
55
- loader: 'babel-loader',
56
- options: {
57
- presets: ['@babel/preset-env', '@babel/preset-typescript'],
58
- plugins: [
59
- '@babel/plugin-transform-modules-commonjs',
60
- '@babel/plugin-proposal-class-properties',
61
- '@babel/plugin-proposal-export-namespace-from',
62
- ],
63
- },
64
- },
65
- {
66
- loader: 'ts-loader',
67
- },
68
- ],
69
- exclude: /node_modules/,
70
- },
71
- ],
72
- },
73
- optimization: {
74
- minimize: true,
75
- minimizer: [
76
- new TerserPlugin({
77
- extractComments: false,
78
- terserOptions: {
79
- format: {
80
- comments: false,
81
- },
82
- },
83
- }),
84
- ],
85
- },
86
- };