UNPKG

9.03 kBSource Map (JSON)View Raw
1{"version":3,"file":"worker.min.js","sources":["../src/lib/plugin/worker.js","../src/web/plugin/worker.js"],"sourcesContent":["///=========================================================================\n/// This module provides the worker feature for hyperscript\n///=========================================================================\n\n/**\n * @param {HyperscriptObject} _hyperscript\n */\nexport default _hyperscript => {\n\n\tvar invocationIdCounter = 0;\n\n\tvar workerFunc = function (self) {\n\t\tself.onmessage = function (e) {\n\t\t\tswitch (e.data.type) {\n\t\t\t\tcase \"init\":\n\t\t\t\t\tself.importScripts(e.data._hyperscript);\n\t\t\t\t\tself.importScripts.apply(self, e.data.extraScripts);\n\t\t\t\t\tconst _hyperscript = self['_hyperscript']\n\t\t\t\t\tvar tokens = _hyperscript.internals.lexer.makeTokensObject(e.data.tokens, [], e.data.source);\n\t\t\t\t\tvar hyperscript = _hyperscript.internals.parser.parseElement(\"hyperscript\", tokens);\n\t\t\t\t\thyperscript.apply(self, self);\n\t\t\t\t\tpostMessage({ type: \"didInit\" });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"call\":\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar result = self['_hyperscript'].internals.runtime\n\t\t\t\t\t\t\t.getHyperscriptFeatures(self)[e.data.function]\n\t\t\t\t\t\t\t.apply(self, e.data.args);\n\t\t\t\t\t\tPromise.resolve(result)\n\t\t\t\t\t\t\t.then(function (value) {\n\t\t\t\t\t\t\t\tpostMessage({\n\t\t\t\t\t\t\t\t\ttype: \"resolve\",\n\t\t\t\t\t\t\t\t\tid: e.data.id,\n\t\t\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch(function (error) {\n\t\t\t\t\t\t\t\tpostMessage({\n\t\t\t\t\t\t\t\t\ttype: \"reject\",\n\t\t\t\t\t\t\t\t\tid: e.data.id,\n\t\t\t\t\t\t\t\t\terror: error.toString(),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tpostMessage({\n\t\t\t\t\t\t\ttype: \"reject\",\n\t\t\t\t\t\t\tid: e.data.id,\n\t\t\t\t\t\t\terror: error.toString(),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t};\n\n\t// extract the body of the function, which was only defined so\n\t// that we can get syntax highlighting\n\tvar workerCode = \"(\" + workerFunc.toString() + \")(self)\";\n\tvar blob = new Blob([workerCode], { type: \"text/javascript\" });\n\tvar workerUri = URL.createObjectURL(blob);\n\n\t_hyperscript.addFeature(\"worker\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"worker\")) {\n\t\t\tvar name = parser.requireElement(\"dotOrColonPath\", tokens);\n\t\t\tvar qualifiedName = name.evaluate();\n\t\t\tvar nameSpace = qualifiedName.split(\".\");\n\t\t\tvar workerName = nameSpace.pop();\n\n\t\t\t// Parse extra scripts\n\t\t\tvar extraScripts = [];\n\t\t\tif (tokens.matchOpToken(\"(\")) {\n\t\t\t\tif (tokens.matchOpToken(\")\")) {\n\t\t\t\t\t// no external scripts\n\t\t\t\t} else {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tvar extraScript = tokens.requireTokenType(\"STRING\").value;\n\t\t\t\t\t\tvar absoluteUrl = new URL(extraScript, location.href).href;\n\t\t\t\t\t\textraScripts.push(absoluteUrl);\n\t\t\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t\t\t\ttokens.requireOpToken(\")\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Consume worker methods\n\n\t\t\tvar funcNames = [];\n\t\t\tvar bodyStartIndex = tokens.consumed.length;\n\t\t\tvar bodyEndIndex = tokens.consumed.length;\n\t\t\tdo {\n\t\t\t\tvar feature = parser.parseAnyOf([\"defFeature\", \"jsFeature\"], tokens);\n\t\t\t\tif (feature) {\n\t\t\t\t\tif (feature.type === \"defFeature\") {\n\t\t\t\t\t\tfuncNames.push(feature.name);\n\t\t\t\t\t\tbodyEndIndex = tokens.consumed.length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (tokens.hasMore()) continue;\n\t\t\t\t\t}\n\t\t\t\t} else break;\n\t\t\t} while (tokens.matchToken(\"end\") && tokens.hasMore()); // worker end\n\n\t\t\tvar bodyTokens = tokens.consumed.slice(bodyStartIndex, bodyEndIndex + 1);\n\n\t\t\t// Create worker\n\n\t\t\tvar worker = new Worker(workerUri);\n\n\t\t\t// Send init message to worker\n\n\t\t\tworker.postMessage({\n\t\t\t\ttype: \"init\",\n\t\t\t\t_hyperscript: runtime.hyperscriptUrl,\n\t\t\t\textraScripts: extraScripts,\n\t\t\t\ttokens: bodyTokens,\n\t\t\t\tsource: tokens.source,\n\t\t\t});\n\n\t\t\tvar workerPromise = new Promise(function (resolve, reject) {\n\t\t\t\tworker.addEventListener(\n\t\t\t\t\t\"message\",\n\t\t\t\t\tfunction (e) {\n\t\t\t\t\t\tif (e.data.type === \"didInit\") resolve();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t});\n\n\t\t\t// Create function stubs\n\t\t\tvar stubs = {};\n\t\t\tfuncNames.forEach(function (funcName) {\n\t\t\t\tconsole.log(funcName)\n\t\t\t\tstubs[funcName] = function () {\n\t\t\t\t\tvar args = arguments;\n\t\t\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\t\t\tvar id = invocationIdCounter++;\n\t\t\t\t\t\tworker.addEventListener(\"message\", function returnListener(e) {\n\t\t\t\t\t\t\tif (e.data.id !== id) return;\n\t\t\t\t\t\t\tworker.removeEventListener(\"message\", returnListener);\n\t\t\t\t\t\t\tif (e.data.type === \"resolve\") resolve(e.data.value);\n\t\t\t\t\t\t\telse reject(e.data.error);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tworkerPromise.then(function () {\n\t\t\t\t\t\t\t// Worker has been initialized, send invocation.\n\t\t\t\t\t\t\tworker.postMessage({\n\t\t\t\t\t\t\t\ttype: \"call\",\n\t\t\t\t\t\t\t\tfunction: funcName,\n\t\t\t\t\t\t\t\targs: Array.from(args),\n\t\t\t\t\t\t\t\tid: id,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tname: workerName,\n\t\t\t\tworker: worker,\n\t\t\t\tinstall: function (target) {\n\t\t\t\t\truntime.assignToNamespace(target, nameSpace, workerName, stubs);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n}\n","\nimport worker from \"../../lib/plugin/worker.js\"\n\nworker(window._hyperscript)\n\n"],"names":["_hyperscript","invocationIdCounter","workerCode","blob","workerUri","window","self","onmessage","e","data","type","importScripts","apply","extraScripts","tokens","internals","lexer","makeTokensObject","source","parser","parseElement","postMessage","result","runtime","getHyperscriptFeatures","args","Promise","resolve","then","value","id","error","toString","Blob","URL","createObjectURL","addFeature","matchToken","nameSpace","requireElement","evaluate","split","workerName","pop","matchOpToken","extraScript","requireTokenType","absoluteUrl","location","href","push","requireOpToken","funcNames","bodyStartIndex","consumed","length","bodyEndIndex","feature","parseAnyOf","name","hasMore","bodyTokens","slice","worker","Worker","hyperscriptUrl","workerPromise","reject","addEventListener","once","stubs","forEach","funcName","console","log","arguments","returnListener","removeEventListener","function","Array","from","install","target","assignToNamespace"],"mappings":"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"}
\No newline at end of file