UNPKG

2.12 kBJavaScriptView Raw
1(function(){var g=0;var e=function(){self.onmessage=function(r){switch(r.data.type){case"init":importScripts(r.data._hyperscript);importScripts.apply(self,r.data.extraScripts);var e=_hyperscript.internals.lexer.makeTokensObject(r.data.tokens,[],r.data.source);var t=_hyperscript.internals.parser.parseElement("hyperscript",e);postMessage({type:"didInit"});break;case"call":try{var a=self[r.data.function].apply(self,r.data.args);Promise.resolve(a).then(function(e){postMessage({type:"resolve",id:r.data.id,value:e})}).catch(function(e){postMessage({type:"reject",id:r.data.id,error:e.toString()})})}catch(e){postMessage({type:"reject",id:r.data.id,error:e.toString()})}break}}};var r="("+e.toString()+")()";var t=new Blob([r],{type:"text/javascript"});var k=URL.createObjectURL(t);_hyperscript.addFeature("worker",function(e,r,t){if(t.matchToken("worker")){var a=e.requireElement("dotOrColonPath",t);var n=a.evaluate();var s=n.split(".");var i=s.pop();var o=[];if(t.matchOpToken("(")){if(t.matchOpToken(")")){}else{do{var c=t.requireTokenType("STRING").value;var p=new URL(c,location.href).href;o.push(p)}while(t.matchOpToken(","));t.requireOpToken(")")}}var d=[];var u=t.consumed.length;var l=t.consumed.length;do{var v=e.parseAnyOf(["defFeature","jsFeature"],t);if(v){if(v.type==="defFeature"){d.push(v.name);l=t.consumed.length}else{if(t.hasMore())continue}}else break}while(t.matchToken("end")&&t.hasMore());var f=t.consumed.slice(u,l+1);var h=new Worker(k);h.postMessage({type:"init",_hyperscript:r.hyperscriptUrl,extraScripts:o,tokens:f,source:t.source});var m=new Promise(function(r,e){h.addEventListener("message",function(e){if(e.data.type==="didInit")r()},{once:true})});var y={};d.forEach(function(r){y[r]=function(){var e=arguments;return new Promise(function(t,a){var n=g++;h.addEventListener("message",function e(r){if(r.data.id!==n)return;h.removeEventListener("message",e);if(r.data.type==="resolve")t(r.data.value);else a(r.data.error)});m.then(function(){h.postMessage({type:"call",function:r,args:Array.from(e),id:n})})})}});return{name:i,worker:h,execute:function(e){r.assignToNamespace(s,i,y)}}}})})();
\No newline at end of file