(parser)
| 118 | this.stubs = stubs; |
| 119 | } |
| 120 | static parse(parser) { |
| 121 | if (parser.matchToken("worker")) { |
| 122 | var name = parser.requireElement("dotOrColonPath"); |
| 123 | var qualifiedName = name.evalStatically(); |
| 124 | var nameSpace = qualifiedName.split("."); |
| 125 | var workerName = nameSpace.pop(); |
| 126 | var extraScripts = []; |
| 127 | if (parser.matchOpToken("(")) { |
| 128 | if (parser.matchOpToken(")")) { |
| 129 | } else { |
| 130 | do { |
| 131 | var extraScript = parser.requireTokenType("STRING").value; |
| 132 | var absoluteUrl = new URL(extraScript, location.href).href; |
| 133 | extraScripts.push(absoluteUrl); |
| 134 | } while (parser.matchOpToken(",")); |
| 135 | parser.requireOpToken(")"); |
| 136 | } |
| 137 | } |
| 138 | var funcNames = []; |
| 139 | var bodyStartIndex = parser.consumed.length; |
| 140 | var bodyEndIndex = parser.consumed.length; |
| 141 | do { |
| 142 | var feature = parser.parseAnyOf(["defFeature", "jsFeature"]); |
| 143 | if (feature) { |
| 144 | if (feature.type === "defFeature") { |
| 145 | funcNames.push(feature.name); |
| 146 | bodyEndIndex = parser.consumed.length; |
| 147 | } else { |
| 148 | if (parser.hasMore()) continue; |
| 149 | } |
| 150 | } else break; |
| 151 | } while (parser.matchToken("end") && parser.hasMore()); |
| 152 | var bodyTokens = parser.consumed.slice(bodyStartIndex, bodyEndIndex + 1); |
| 153 | var bodySrc = parser.source.substring(bodyTokens[0].start, bodyTokens[bodyTokens.length - 1].end); |
| 154 | var worker = new Worker(workerUri); |
| 155 | worker.postMessage({ |
| 156 | type: "init", |
| 157 | _hyperscript: document.currentScript?.src || "/dist/_hyperscript.js", |
| 158 | extraScripts, |
| 159 | src: bodySrc |
| 160 | }); |
| 161 | var workerPromise = new Promise(function(resolve, reject) { |
| 162 | worker.addEventListener( |
| 163 | "message", |
| 164 | function(e) { |
| 165 | if (e.data.type === "didInit") resolve(); |
| 166 | }, |
| 167 | { once: true } |
| 168 | ); |
| 169 | }); |
| 170 | var stubs = {}; |
| 171 | funcNames.forEach(function(funcName) { |
| 172 | stubs[funcName] = function() { |
| 173 | var args = arguments; |
| 174 | return new Promise(function(resolve, reject) { |
| 175 | var id = invocationIdCounter++; |
| 176 | worker.addEventListener("message", function returnListener(e) { |
| 177 | if (e.data.id !== id) return; |
no test coverage detected