(context, { url, options })
| 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 | }) |
nothing calls this directly
no test coverage detected