MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / fetch

Function fetch

examples/io/streams/examples/fetch/fetch.js:192–300  ·  view source on GitHub ↗
(href, info = {})

Source from the content-addressed store, hash-verified

190}
191
192function fetch(href, info = {}) {
193 return new Promise((resolveResponse, rejectResponse) => {
194 let url = new URL(href);
195 if ((url.protocol != "http:") && (url.protocol != "https:"))
196 rejectResponse(new URIError("only http or https"));
197 let method = info.method;
198 let headers = info.headers;
199 let body = info.body;
200 let length = 0;
201 if ((method == "POST") || (method == "PUT") || (method == "PATCH")) {
202 body = info.body;
203 if (body == undefined)
204 rejectResponse(new URIError(method + " no body"));
205 else if (!(body instanceof ArrayBuffer)) {
206 body = body.toString();
207 body = ArrayBuffer.fromString(body);
208 }
209 if (!headers)
210 headers = new Headers();
211 else {
212 if (!(headers instanceof Headers)) {
213 const h = new Headers();
214 for (const name in headers)
215 h.set(name.toLowerCase(), headers[name]);
216 headers = h;
217 }
218 length = headers.get("content-length");
219 if (length == undefined) {
220 headers = new Headers(headers);
221 length = body.byteLength;
222 headers.set("content-length", length);
223 }
224 }
225 }
226 let readableController = null;
227 let redirected = false;
228 let offset = 0;
229 let buffer = null;
230 if (info.signal) {
231 info.signal.addEventListener("abort", event => {
232 if (readableController) {
233 readableController.error(event.signal.reason);
234 readableController = null;
235 }
236 else
237 rejectResponse(event.signal.reason);
238 });
239 }
240 const options = {
241 method,
242 headers,
243 onHeaders(status, headers) {
244 if ((301 === status) || (308 === status) || (302 === status) || (303 === status) || (307 === status)) {
245 url = new URL(headers.get("location"));
246 redirected = this.redirected = true;
247 offset = 0;
248 return;
249 }

Callers 1

readDataFunction · 0.90

Calls 9

setMethod · 0.95
fromStringMethod · 0.80
fetchClientRequestFunction · 0.70
getMethod · 0.65
setMethod · 0.65
addEventListenerMethod · 0.65
toStringMethod · 0.45
errorMethod · 0.45
deleteMethod · 0.45

Tested by

no test coverage detected