summaryrefslogtreecommitdiff
path: root/ext/fetch/23_response.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/fetch/23_response.js')
-rw-r--r--ext/fetch/23_response.js31
1 files changed, 28 insertions, 3 deletions
diff --git a/ext/fetch/23_response.js b/ext/fetch/23_response.js
index 29a37ceca..5ff6e56c3 100644
--- a/ext/fetch/23_response.js
+++ b/ext/fetch/23_response.js
@@ -12,6 +12,7 @@
"use strict";
((window) => {
+ const { isProxy } = Deno.core;
const webidl = window.__bootstrap.webidl;
const consoleInternal = window.__bootstrap.console;
const { HTTP_TAB_OR_SPACE, regexMatcher } = window.__bootstrap.infra;
@@ -249,7 +250,7 @@
prefix,
context: "Argument 1",
});
- init = webidl.converters["ResponseInit"](init, {
+ init = webidl.converters["ResponseInit_fast"](init, {
prefix,
context: "Argument 2",
});
@@ -260,7 +261,10 @@
);
}
- if (!RegExpPrototypeTest(REASON_PHRASE_RE, init.statusText)) {
+ if (
+ init.statusText &&
+ !RegExpPrototypeTest(REASON_PHRASE_RE, init.statusText)
+ ) {
throw new TypeError("Status text is not valid.");
}
@@ -270,7 +274,7 @@
this[_response] = response;
/** @type {Headers} */
this[_headers] = headersFromHeaderList(response.headerList, "response");
- if (init.headers !== undefined) {
+ if (init.headers) {
fillHeaders(this[_headers], init.headers);
}
if (body !== null) {
@@ -407,6 +411,27 @@
converter: webidl.converters["HeadersInit"],
}],
);
+ webidl.converters["ResponseInit_fast"] = function (init, opts) {
+ if (init === undefined || init === null) {
+ return { status: 200, statusText: "", headers: undefined };
+ }
+ // Fast path, if not a proxy
+ if (typeof init === "object" && !isProxy(init)) {
+ // Not a proxy fast path
+ const status = init.status !== undefined
+ ? webidl.converters["unsigned short"](init.status)
+ : 200;
+ const statusText = init.statusText !== undefined
+ ? webidl.converters["ByteString"](init.statusText)
+ : "";
+ const headers = init.headers !== undefined
+ ? webidl.converters["HeadersInit"](init.headers)
+ : undefined;
+ return { status, statusText, headers };
+ }
+ // Slow default path
+ return webidl.converters["ResponseInit"](init, opts);
+ };
/**
* @param {Response} response