UNPKG

thread-manager-service

Version:

Yet another way to fake threads in JS, of course using Web Workers

1 lines 12 kB
!function(e){var t={};function n(s){if(t[s])return t[s].exports;var r=t[s]={i:s,l:!1,exports:{}};return e[s].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,s){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(n.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(s,r,function(t){return e[t]}.bind(null,r));return s},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(module,exports){!function(e){var t={};function n(s){if(t[s])return t[s].exports;var r=t[s]={i:s,l:!1,exports:{}};return e[s].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,s){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(n.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(s,r,function(t){return e[t]}.bind(null,r));return s},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=3)}([function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var s=n(1),r=n(2);const a=new WeakMap,i=new WeakMap;class o extends ExtendableEventTarget{constructor(e){super();const t=new r.a(this),n=new s.a(t),o=e=>{if(t.run(e),!t.running){const e=new Event("error");e.message="Unable to execute Worker code!",this.terminate(),this.dispatchEvent(e)}},l=e=>{const t=new Event("error");t.message=e,this.terminate(),this.dispatchEvent(t)};a.set(this,t),i.set(this,n);const u=new XMLHttpRequest;this.onmessage=null,this.onmessageerror=null,this.onerror=null,t.addEventListener("message",e=>{"function"==typeof this.onmessage&&this.onmessage(e)}),t.addEventListener("messageerror",e=>{"function"==typeof this.onmessageerror&&this.onmessageerror(e)}),this.addEventListener("error",e=>{"function"==typeof this.onerror&&this.onerror(e)}),e instanceof Blob?e.text().then(e=>o(e)).catch(e=>l(e)):"string"==typeof e&&(u.open("GET",e),u.onreadystatechange=()=>{u.readyState===XMLHttpRequest.DONE&&(200===u.status?o(u.responseText):l("Worker code not available!"))},u.send())}get running(){return Boolean(a.has(this)&&a.get(this).running)}postMessage(...e){if(i.has(this))return i.get(this).postMessage(...e)}terminate(){i.has(this)&&(i.get(this).clear(),i.delete(this)),a.has(this)&&(a.get(this).terminate(),a.delete(this))}}},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));const s=[];self.ArrayBuffer&&s.push(ArrayBuffer),self.MessagePort&&s.push(MessagePort),self.ImageBitmap&&s.push(ImageBitmap),self.OffscreenCanvas&&s.push(OffscreenCanvas);const r=new WeakMap,a=(e,t,n)=>(e&&"object"==typeof e&&t.indexOf(e)<0&&(n.indexOf(e)>=0?e=void 0:(n.push(e),e=Array.isArray(e)?((e,t,n)=>{const s=[];for(let r of e)r=a(r,t,n),void 0!==r&&s.push(r);return s})(e,t,n):((e,t,n)=>{try{e=Object.assign({},e);const s=Object.keys(e),r={};for(let i of s){const s=a(e[i],t,n);void 0!==s&&(r[i]=s)}return r}catch(e){}})(e,t,n))),e);class i{constructor(e){r.set(this,e)}postMessage(e,t){if(r.has(this)){const n=new Event("message"),i=r.get(this);n.data=((e,t)=>(t=Array.isArray(t)?t.filter(e=>{for(let t of s)if(e instanceof t)return!0;return!1}):[],a(e,t,[])))(e,t),setTimeout(()=>i.dispatchEvent(n))}}clear(){r.has(this)&&r.delete(this)}}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return WorkerScope}));var _worker_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(0),_worker_channel_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1);const eventMap=new WeakMap,channelMap=new WeakMap,originalAnimationFrame=e=>self.requestAnimationFrame(e);class WorkerScope extends ExtendableEventTarget{constructor(e){super();const t=new _worker_channel_js__WEBPACK_IMPORTED_MODULE_1__.a(e);this.running=!1,eventMap.set(this,{events:[],intervals:[],frames:[],timeouts:[]}),channelMap.set(this,t)}run(code){this.running=!0;const self={location:document.location,navigator:window.navigator,close:this.terminate,dump:console.log,onmessage:null,postMessage:(...e)=>channelMap.get(this).postMessage(...e),addEventListener:(...e)=>this.addEventListener(...e),removeEventListener:(...e)=>this.removeEventListener(...e),dispatchEvent:(...e)=>this.dispatchEvent(...e),ArrayBuffer:window.ArrayBuffer,MessagePort:window.MessagePort,ImageBitmap:window.ImageBitmap,OffscreenCanvas:window.OffscreenCanvas};let setTimeout=(...e)=>this.setTimeout(...e),setInterval=(...e)=>this.setInterval(...e),requestAnimationFrame=(...e)=>this.requestAnimationFrame(...e),clearTimeout=(...e)=>this.clearTimeout(...e),clearInterval=(...e)=>this.clearInterval(...e),cancelAnimationFrame=(...e)=>this.cancelAnimationFrame(...e),close=()=>this.terminate(),dump=(...e)=>console.log(),postMessage=self.postMessage,onmessage=null,location=self.location,navigator=self.navigator,Worker=_worker_js__WEBPACK_IMPORTED_MODULE_0__.a;this.addEventListener("message",e=>{const t=onmessage||self.onmessage;"function"==typeof t&&t(e)});try{eval(code)}catch(e){this.running=!1;const t=new Event("messageerror");t.message=e,this.dispatchEvent(t)}const workerStatusCheck=()=>{let e,t,n,s;eventMap.has(this)&&(e=eventMap.get(this).events.length>1||"function"==typeof onmessage||"function"==typeof self.onmessage,t=eventMap.get(this).timeouts.length>0,n=eventMap.get(this).intervals.length>0,s=eventMap.get(this).frames.length>0),this.running=e||t||n||s,this.running?originalAnimationFrame(workerStatusCheck):this.terminate()};originalAnimationFrame(workerStatusCheck)}setTimeout(...e){if(eventMap.has(this)){const t=self.setTimeout(...e);return eventMap.get(this).timeouts.push(t),self.setTimeout(()=>this.clearTimeout(t),(e[1]||0)+1),t}}setInterval(...e){if(eventMap.has(this)){const t=self.setInterval(...e);return eventMap.get(this).intervals.push(t),t}}requestAnimationFrame(...e){if(eventMap.has(this)){const t=self.requestAnimationFrame(...e);return eventMap.get(this).frames.push(t),self.requestAnimationFrame(()=>this.cancelAnimationFrame(t)),t}}clearTimeout(e){if(eventMap.has(this)){const t=eventMap.get(this).timeouts,n=t.indexOf(e);return n>=0&&t.splice(n,1),self.clearTimeout(e)}}clearInterval(e){if(eventMap.has(this)){const t=eventMap.get(this).intervals,n=t.indexOf(e);return n>=0&&t.splice(n,1),self.clearInterval(e)}}cancelAnimationFrame(e){if(eventMap.has(this)){const t=eventMap.get(this).frames,n=t.indexOf(e);return n>=0&&t.splice(n,1),self.cancelAnimationFrame(e)}}addEventListener(...e){if(eventMap.has(this))return eventMap.get(this).events.push(e),super.addEventListener(...e)}terminate(){if(eventMap.has(this)){const e=eventMap.get(this).events.slice(),t=eventMap.get(this).timeouts.slice(),n=eventMap.get(this).intervals.slice(),s=eventMap.get(this).frames.slice();let r,a;for(r=0,a=e.length;r<a;r++)this.removeEventListener(...e[r]);for(r=0,a=t.length;r<a;r++)this.clearTimeout(t[r]);for(r=0,a=n.length;r<a;r++)this.clearInterval(n[r]);for(r=0,a=s.length;r<a;r++)this.cancelAnimationFrame(s[r]);eventMap.delete(this)}channelMap.has(this)&&(channelMap.get(this).clear(),channelMap.delete(this))}}},function(e,t,n){"use strict";n.r(t);const s=new WeakMap;let r=!1;if(self.EventTarget)try{new EventTarget,r=!0}catch(e){}self.ExtendableEventTarget=r?self.EventTarget:class{constructor(){s.set(this,{})}addEventListener(e,t){const n=s.get(this);n.hasOwnProperty(e)||(n[e]=[]),n[e].indexOf(t)<0&&n[e].push(t)}removeEventListener(e,t){const n=s.get(this);if(n.hasOwnProperty(e)){const s=n[e].indexOf(t);s>=0&&n[e].splice(s,1)}}dispatchEvent(e){const t=e.type,n=s.get(this);if(n.hasOwnProperty(t)){const s=n[t].slice();for(let t of s)t(e)}}};var a=n(0);self.Worker||(self.Worker=a.a)}])},function(e,t,n){"use strict";n.r(t);n(0);class s extends Worker{constructor(e,t){super(e);let n=null;Object.defineProperty(this,"id",{value:t,enumerable:!0,writable:!1}),Object.defineProperty(this,"result",{enumerable:!0,get:()=>n}),this.postMessage({type:"shared-memory-id",value:t}),this.addEventListener("message",e=>{e&&e.data&&"thread-terminate"===e.data.type&&(e.stopImmediatePropagation(),n=e.data.value,this.terminate())})}terminate(){const e=new Event("terminate");return e.result=this.result,this.dispatchEvent(e),super.terminate()}}var r=s;let a=4;const i={},o=new Proxy(i,{set:(e,t,n)=>(m(t,n),!0)}),l=[],u=[],c=new WeakMap,h=new ArrayBuffer(256);for(let e=0;e<256;e++)h[e]=(e<16?"0":"")+e.toString(16).toUpperCase();const f=()=>{const e=4294967295*Math.random()|0,t=4294967295*Math.random()|0,n=4294967295*Math.random()|0,s=4294967295*Math.random()|0;return h[255&e]+h[e>>8&255]+h[e>>16&255]+h[e>>24&255]+"-"+h[255&t]+h[t>>8&255]+"-"+h[t>>16&15|64]+h[t>>24&255]+"-"+h[63&n|128]+h[n>>8&255]+"-"+h[n>>16&255]+h[n>>24&255]+h[255&s]+h[s>>8&255]+h[s>>16&255]+h[s>>24&255]},p=function(){let e={};const t=new Proxy(e,{set:(e,t,n)=>(e[t]=n,self.postMessage({type:"shared-memory-updated",property:t,value:n}),!0)});Object.defineProperty(self,"shared",{enumerable:!1,get:()=>t}),shared=self.shared,self.addEventListener("message",t=>{t.data&&t.data.type&&"shared-memory-update"===t.data.type&&(e[t.data.property]=t.data.value,t.stopImmediatePropagation()),t.data&&t.data.type&&"shared-memory-id"===t.data.type&&(Object.defineProperty(self,"threadId",{value:t.data.value,enumerable:!1,writable:!1}),threadId=self.threadId,t.stopImmediatePropagation()),t.data&&t.data.type&&"shared-memory-init"===t.data.type&&(Object.assign(e,t.data.value),t.stopImmediatePropagation(),start())})},d=e=>{const t=[{type:"thread-terminate",value:e}],n=[],s=["ArrayBuffer","MessagePort","ImageBitmap","OffscreenCanvas"],r=e=>{if((e=>{let t=!1;if(e)for(let n of s){const s=self[n];s&&(t=t||e instanceof s)}return t})(e))n.push(e);else if(e&&"object"==typeof e)for(let t in e){const n=e[t];r(n)}};r(e),n.length>0&&t.push(n),self.postMessage(...t)},m=(e,t)=>{i[e]=t;for(let n of u)n.postMessage({type:"shared-memory-update",property:e,value:t})},g=()=>{for(;l.length>0&&u.length<a;){const e=l.shift();y(...e)}},v=e=>{const t=(e=>{let t;if("function"==typeof e)if(c.has(e))t=c.get(e);else{const n="let threadId=null,shared=null;("+p.toString()+")();",s="let exit=self.exit=d=>{("+d.toString()+")(d)};",r="let start=()=>{("+e.toString()+")();start=undefined};",a=new Blob([n+s+r]);t=URL.createObjectURL(a),c.set(e,t)}return t})(e);if(t)try{const e=new r(t,f());return e.addEventListener("terminate",()=>(e=>{const t=u.indexOf(e);t>=0&&(u.splice(t,1),g())})(e)),e.addEventListener("message",e=>{e.data&&e.data.type&&"shared-memory-updated"===e.data.type&&(e.stopImmediatePropagation(),m(e.data.property,e.data.value))}),e.postMessage({type:"shared-memory-init",value:i}),u.push(e),e}catch{}},y=(e,t,n)=>{const s=v(e);s?t(s):(g(),n())};var M=new class{get shared(){return o}get count(){return u.length}get queue(){return l.length}get running(){return u.slice()}get limit(){return a}set limit(e){e=Number(e),!isNaN(e)&&e>=1&&(a=Math.round(e),g())}run(e){return new Promise((t,n)=>{u.length<a?y(e,t,n):l.push([e,t,n])})}async execute(e){const t=await this.run(e);return await new Promise(e=>{t.addEventListener("terminate",t=>e(t.result))})}purge(){const e=u.slice();l.length=0;for(let t of e)t.terminate()}generateUUID(){return f()}};self.Threads=M;t.default=M}]);