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