UNPKG

dinotask

Version:

A lightweight web-workers library for building multithreaded applications in browser.

1 lines 2.9 kB
var DinoTask=function(){function r(){this.data={},this.body=null,this.listener=function(t){},this.errHandler=function(t){}}return r.prototype.InitialTask=function(){var t={},n=[],e=self;t.result=function(t){return 0<n.length&&n.pop(),t},t.emit=function(t){e.postMessage({PARENT_EMIT:t})},t.functions="[[functions]]"},r.prototype.getInitialTask=function(){if(r.utility.isNullOrUndefined(r.taskBlockStringified)){var t=r.utility.stringifyOnlyMethods(r.functions);r.taskBlockStringified=r.utility.getFunctionBody(this.InitialTask).replace("'[[functions]]'",t)}return r.taskBlockStringified},r.prototype.getPreTask=function(t){return"var "+this.taskName+" = "+t.toString()+";"},r.prototype.getParamsToBeInjected=function(t){if(!r.utility.isNullOrUndefined(t)&&0<t.length){for(var n="",e=0;e<t.length;e++)n+="params["+e+"]",e<t.length-1&&(n+=", ");return n}return""},r.prototype.PostTask=function(){var n=self;n.onerror=function(t){},n.onmessage=function(t){t.data.params;n.postMessage("[[name]]([[params]])")}},r.prototype.getPostTask=function(t){var n=this.getParamsToBeInjected(t);return r.utility.getFunctionBody(this.PostTask).replace("'[[name]]",this.taskName).replace("([[params]])'","("+n+")")},r.create=function(t,n,e){var i=new r;return i.taskName=e||"task_anonymous",i.data.params=t,i.body=i.getInitialTask()+i.getPreTask(n)+i.getPostTask(t),i},r.prototype.addListener=function(t){return this.listener=t,this},r.prototype.errorHandler=function(t){return this.errHandler=t,this},r.prototype.run=function(n){var e=this,t=window.URL.createObjectURL(new Blob([this.body],{type:"text/javascript"})),i=new Worker(t);return i.onmessage=function(t){r.utility.isNullOrUndefined(t.data.PARENT_EMIT)?(i.terminate(),n(t.data,t)):e.listener(t.data.PARENT_EMIT)},i.onerror=function(t){i.terminate(),e.errHandler(t)},i.postMessage(this.data),window.URL.revokeObjectURL(t),this},r.functions={},r.result=function(t){return t},r.emit=function(t){},r}();DinoTask.utility={isNullOrUndefined:function(t){return null==t},isFunction:function(t){return"function"==typeof t},stringifyOnlyMethods:function(t){for(var n=Object.keys(t),e="{",i=0;i<n.length;i++)DinoTask.utility.isFunction(t[n[i]])&&(e+=n[i]+":"+DinoTask.utility.populateFunction(t[n[i]],n[i])),i<n.length-1&&(e+=", ");return e+="}"},populateFunction:function(t,n){var e=DinoTask.utility.getFunctionBody(t);return DinoTask.utility.getFunctionSignature(t)+DinoTask.utility.getTaskFunctionsFirstStatementsToInsert().replace("[[taskBlock]]",n)+e+DinoTask.utility.getTaskFunctionsFinalStatementsToInsert()+"}"},getTaskFunctionsFirstStatementsToInsert:function(){return"stackTrace.push('[[taskBlock]]');"},getTaskFunctionsFinalStatementsToInsert:function(){return""},getFunctionBody:function(t){var n=t.toString();return n.slice(n.indexOf("{")+1,n.lastIndexOf("}"))},getFunctionSignature:function(t){var n=t.toString();return n.slice(0,n.indexOf("{")+1)}};