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

Method resolve

www/js/_hyperscript.esm.js:6187–6246  ·  view source on GitHub ↗
(context, { url, options })

Source from the content-addressed store, hash-verified

6185 return new _FetchCommand(url, argExprs, type, conversion, dontThrow);
6186 }
6187 resolve(context, { url, options }) {
6188 var detail = options || {};
6189 detail.sender = context.me;
6190 detail.headers = detail.headers || {};
6191 detail.conversion = this.conversion || this.conversionType;
6192 var abortController = new AbortController();
6193 var abortListener = () => abortController.abort();
6194 context.me.addEventListener("fetch:abort", abortListener, { once: true });
6195 detail.signal = abortController.signal;
6196 context.meta.runtime.triggerEvent(context.me, "hyperscript:beforeFetch", detail);
6197 context.meta.runtime.triggerEvent(context.me, "fetch:beforeRequest", detail);
6198 var finished = false;
6199 if (detail.timeout) {
6200 setTimeout(() => {
6201 if (!finished) abortController.abort();
6202 }, detail.timeout);
6203 }
6204 var complete = (result) => {
6205 context.result = result;
6206 context.meta.runtime.triggerEvent(context.me, "fetch:afterRequest", { result });
6207 finished = true;
6208 return this.findNext(context);
6209 };
6210 var checkThrow = !this.dontThrow && this.conversionType !== "response";
6211 return fetch(url, detail).then((resp) => {
6212 var resultDetails = { response: resp };
6213 context.meta.runtime.triggerEvent(context.me, "fetch:afterResponse", resultDetails);
6214 resp = resultDetails.response;
6215 if (checkThrow) {
6216 var statusStr = String(resp.status);
6217 var patterns = config.fetchThrowsOn || [];
6218 for (var i = 0; i < patterns.length; i++) {
6219 if (patterns[i].test(statusStr)) {
6220 var err = new Error("fetch failed: " + resp.status + " " + resp.statusText + " (" + url + ")");
6221 err.response = resp;
6222 err.status = resp.status;
6223 throw err;
6224 }
6225 }
6226 }
6227 if (this.conversionType === "response") return complete(resp);
6228 if (this.conversionType === "json") return resp.json().then(complete);
6229 if (this.conversion) {
6230 var convFn = config.conversions[this.conversion];
6231 if (convFn && convFn._rawResponse) {
6232 return complete(convFn(resp, context.meta.runtime, context));
6233 }
6234 }
6235 return resp.text().then((result) => {
6236 if (this.conversion) result = context.meta.runtime.convertValue(result, this.conversion);
6237 if (this.conversionType === "html") result = context.meta.runtime.convertValue(result, "Fragment");
6238 return complete(result);
6239 });
6240 }).catch((reason) => {
6241 context.meta.runtime.triggerEvent(context.me, "fetch:error", { reason });
6242 throw reason;
6243 }).finally(() => {
6244 context.me.removeEventListener("fetch:abort", abortListener);

Callers

nothing calls this directly

Calls 4

setTimeoutFunction · 0.50
fetchFunction · 0.50
triggerEventMethod · 0.45
convertValueMethod · 0.45

Tested by

no test coverage detected