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

Method parse

www/js/ext/worker.esm.js:118–193  ·  view source on GitHub ↗
(parser)

Source from the content-addressed store, hash-verified

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