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

Method resolve

src/parsetree/commands/basic.js:618–683  ·  view source on GitHub ↗
(context, { url, options })

Source from the content-addressed store, hash-verified

616 }
617
618 resolve(context, { url, options }) {
619 var detail = options || {};
620 detail.sender = context.me;
621 detail.headers = detail.headers || {};
622 detail.conversion = this.conversion || this.conversionType;
623 var abortController = new AbortController();
624 var abortListener = () => abortController.abort();
625 context.me.addEventListener('fetch:abort', abortListener, {once: true});
626 detail.signal = abortController.signal;
627 context.meta.runtime.triggerEvent(context.me, "hyperscript:beforeFetch", detail);
628 context.meta.runtime.triggerEvent(context.me, "fetch:beforeRequest", detail);
629 var finished = false;
630 if (detail.timeout) {
631 setTimeout(() => { if (!finished) abortController.abort(); }, detail.timeout);
632 }
633
634 var complete = (result) => {
635 context.result = result;
636 context.meta.runtime.triggerEvent(context.me, "fetch:afterRequest", {result});
637 finished = true;
638 return this.findNext(context);
639 };
640
641 var checkThrow = !this.dontThrow && this.conversionType !== "response";
642
643 return fetch(url, detail)
644 .then((resp) => {
645 var resultDetails = {response: resp};
646 context.meta.runtime.triggerEvent(context.me, "fetch:afterResponse", resultDetails);
647 resp = resultDetails.response;
648
649 if (checkThrow) {
650 var statusStr = String(resp.status);
651 var patterns = config.fetchThrowsOn || [];
652 for (var i = 0; i < patterns.length; i++) {
653 if (patterns[i].test(statusStr)) {
654 var err = new Error("fetch failed: " + resp.status + " " + resp.statusText + " (" + url + ")");
655 err.response = resp;
656 err.status = resp.status;
657 throw err;
658 }
659 }
660 }
661
662 if (this.conversionType === "response") return complete(resp);
663 if (this.conversionType === "json") return resp.json().then(complete);
664 if (this.conversion) {
665 var convFn = config.conversions[this.conversion];
666 if (convFn && convFn._rawResponse) {
667 return complete(convFn(resp, context.meta.runtime, context));
668 }
669 }
670 return resp.text().then((result) => {
671 if (this.conversion) result = context.meta.runtime.convertValue(result, this.conversion);
672 if (this.conversionType === "html") result = context.meta.runtime.convertValue(result, "Fragment");
673 return complete(result);
674 });
675 })

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