MCPcopy Create free account
hub / github.com/bigskysoftware/_hyperscript / parse

Method parse

www/js/ext/worker.js:120–195  ·  view source on GitHub ↗
(parser)

Source from the content-addressed store, hash-verified

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;

Callers 1

workerFuncFunction · 0.45

Calls 9

matchTokenMethod · 0.45
requireElementMethod · 0.45
evalStaticallyMethod · 0.45
matchOpTokenMethod · 0.45
requireTokenTypeMethod · 0.45
requireOpTokenMethod · 0.45
parseAnyOfMethod · 0.45
hasMoreMethod · 0.45
forEachMethod · 0.45

Tested by

no test coverage detected