1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-21 15:04:11 -05:00

refactor(ext/fetch): align error messages (#25374)

Aligns the error messages in the ext/fetch folder to be in-line with the
Deno style guide.

https://github.com/denoland/deno/issues/25269
This commit is contained in:
Ian Bull 2024-09-04 00:05:29 -07:00 committed by GitHub
parent 7079acd74d
commit ce6b675102
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 51 additions and 41 deletions

View file

@ -73,7 +73,7 @@ function fillHeaders(headers, object) {
const header = object[i]; const header = object[i];
if (header.length !== 2) { if (header.length !== 2) {
throw new TypeError( throw new TypeError(
`Invalid header. Length must be 2, but is ${header.length}`, `Invalid header: length must be 2, but is ${header.length}`,
); );
} }
appendHeader(headers, header[0], header[1]); appendHeader(headers, header[0], header[1]);
@ -133,15 +133,15 @@ function appendHeader(headers, name, value) {
// 2. // 2.
if (!checkHeaderNameForHttpTokenCodePoint(name)) { if (!checkHeaderNameForHttpTokenCodePoint(name)) {
throw new TypeError("Header name is not valid."); throw new TypeError(`Invalid header name: "${name}"`);
} }
if (!checkForInvalidValueChars(value)) { if (!checkForInvalidValueChars(value)) {
throw new TypeError("Header value is not valid."); throw new TypeError(`Invalid header value: "${value}"`);
} }
// 3. // 3.
if (headers[_guard] == "immutable") { if (headers[_guard] == "immutable") {
throw new TypeError("Headers are immutable."); throw new TypeError("Cannot change header: headers are immutable");
} }
// 7. // 7.
@ -330,10 +330,10 @@ class Headers {
name = webidl.converters["ByteString"](name, prefix, "Argument 1"); name = webidl.converters["ByteString"](name, prefix, "Argument 1");
if (!checkHeaderNameForHttpTokenCodePoint(name)) { if (!checkHeaderNameForHttpTokenCodePoint(name)) {
throw new TypeError("Header name is not valid."); throw new TypeError(`Invalid header name: "${name}"`);
} }
if (this[_guard] == "immutable") { if (this[_guard] == "immutable") {
throw new TypeError("Headers are immutable."); throw new TypeError("Cannot change headers: headers are immutable");
} }
const list = this[_headerList]; const list = this[_headerList];
@ -356,7 +356,7 @@ class Headers {
name = webidl.converters["ByteString"](name, prefix, "Argument 1"); name = webidl.converters["ByteString"](name, prefix, "Argument 1");
if (!checkHeaderNameForHttpTokenCodePoint(name)) { if (!checkHeaderNameForHttpTokenCodePoint(name)) {
throw new TypeError("Header name is not valid."); throw new TypeError(`Invalid header name: "${name}"`);
} }
const list = this[_headerList]; const list = this[_headerList];
@ -387,7 +387,7 @@ class Headers {
name = webidl.converters["ByteString"](name, prefix, "Argument 1"); name = webidl.converters["ByteString"](name, prefix, "Argument 1");
if (!checkHeaderNameForHttpTokenCodePoint(name)) { if (!checkHeaderNameForHttpTokenCodePoint(name)) {
throw new TypeError("Header name is not valid."); throw new TypeError(`Invalid header name: "${name}"`);
} }
const list = this[_headerList]; const list = this[_headerList];
@ -415,14 +415,14 @@ class Headers {
// 2. // 2.
if (!checkHeaderNameForHttpTokenCodePoint(name)) { if (!checkHeaderNameForHttpTokenCodePoint(name)) {
throw new TypeError("Header name is not valid."); throw new TypeError(`Invalid header name: "${name}"`);
} }
if (!checkForInvalidValueChars(value)) { if (!checkForInvalidValueChars(value)) {
throw new TypeError("Header value is not valid."); throw new TypeError(`Invalid header value: "${value}"`);
} }
if (this[_guard] == "immutable") { if (this[_guard] == "immutable") {
throw new TypeError("Headers are immutable."); throw new TypeError("Cannot change headers: headers are immutable");
} }
const list = this[_headerList]; const list = this[_headerList];

View file

@ -396,7 +396,9 @@ class MultipartParser {
*/ */
constructor(body, boundary) { constructor(body, boundary) {
if (!boundary) { if (!boundary) {
throw new TypeError("multipart/form-data must provide a boundary"); throw new TypeError(
"Cannot construct MultipartParser: multipart/form-data must provide a boundary",
);
} }
this.boundary = `--${boundary}`; this.boundary = `--${boundary}`;
@ -445,7 +447,7 @@ class MultipartParser {
) { ) {
return new FormData(); return new FormData();
} }
throw new TypeError("Unable to parse body as form data."); throw new TypeError("Unable to parse body as form data");
} }
const formData = new FormData(); const formData = new FormData();

View file

@ -151,7 +151,7 @@ class InnerBody {
* @returns {Promise<Uint8Array>} * @returns {Promise<Uint8Array>}
*/ */
consume() { consume() {
if (this.unusable()) throw new TypeError("Body already consumed."); if (this.unusable()) throw new TypeError("Body already consumed");
if ( if (
ObjectPrototypeIsPrototypeOf( ObjectPrototypeIsPrototypeOf(
ReadableStreamPrototype, ReadableStreamPrototype,
@ -372,7 +372,7 @@ function packageData(bytes, type, mimeType) {
const boundary = mimeType.parameters.get("boundary"); const boundary = mimeType.parameters.get("boundary");
if (boundary === null) { if (boundary === null) {
throw new TypeError( throw new TypeError(
"Missing boundary parameter in mime type of multipart formdata.", "Cannot turn into form data: missing boundary parameter in mime type of multipart form data",
); );
} }
return parseFormData(chunkToU8(bytes), boundary); return parseFormData(chunkToU8(bytes), boundary);

View file

@ -172,7 +172,7 @@ function initializeAResponse(response, init, bodyWithType) {
// 1. // 1.
if ((init.status < 200 || init.status > 599) && init.status != 101) { if ((init.status < 200 || init.status > 599) && init.status != 101) {
throw new RangeError( throw new RangeError(
`The status provided (${init.status}) is not equal to 101 and outside the range [200, 599].`, `The status provided (${init.status}) is not equal to 101 and outside the range [200, 599]`,
); );
} }
@ -181,7 +181,9 @@ function initializeAResponse(response, init, bodyWithType) {
init.statusText && init.statusText &&
RegExpPrototypeExec(REASON_PHRASE_RE, init.statusText) === null RegExpPrototypeExec(REASON_PHRASE_RE, init.statusText) === null
) { ) {
throw new TypeError("Status text is not valid."); throw new TypeError(
`Invalid status text: "${init.statusText}"`,
);
} }
// 3. // 3.
@ -263,7 +265,7 @@ class Response {
const baseURL = getLocationHref(); const baseURL = getLocationHref();
const parsedURL = new URL(url, baseURL); const parsedURL = new URL(url, baseURL);
if (!redirectStatus(status)) { if (!redirectStatus(status)) {
throw new RangeError("Invalid redirect status code."); throw new RangeError(`Invalid redirect status code: ${status}`);
} }
const inner = newInnerResponse(status); const inner = newInnerResponse(status);
inner.type = "default"; inner.type = "default";
@ -395,7 +397,7 @@ class Response {
clone() { clone() {
webidl.assertBranded(this, ResponsePrototype); webidl.assertBranded(this, ResponsePrototype);
if (this[_body] && this[_body].unusable()) { if (this[_body] && this[_body].unusable()) {
throw new TypeError("Body is unusable."); throw new TypeError("Body is unusable");
} }
const second = webidl.createBranded(Response); const second = webidl.createBranded(Response);
const newRes = cloneInnerResponse(this[_response]); const newRes = cloneInnerResponse(this[_response]);

View file

@ -99,7 +99,7 @@ function createResponseBodyStream(responseBodyRid, terminator) {
async function mainFetch(req, recursive, terminator) { async function mainFetch(req, recursive, terminator) {
if (req.blobUrlEntry !== null) { if (req.blobUrlEntry !== null) {
if (req.method !== "GET") { if (req.method !== "GET") {
throw new TypeError("Blob URL fetch only supports GET method."); throw new TypeError("Blob URL fetch only supports GET method");
} }
const body = new InnerBody(req.blobUrlEntry.stream()); const body = new InnerBody(req.blobUrlEntry.stream());
@ -145,7 +145,7 @@ async function mainFetch(req, recursive, terminator) {
reqRid = resourceForReadableStream(stream, req.body.length); reqRid = resourceForReadableStream(stream, req.body.length);
} }
} else { } else {
throw new TypeError("invalid body"); throw new TypeError("Invalid body");
} }
} }
@ -441,13 +441,15 @@ function handleWasmStreaming(source, rid) {
typeof contentType !== "string" || typeof contentType !== "string" ||
StringPrototypeToLowerCase(contentType) !== "application/wasm" StringPrototypeToLowerCase(contentType) !== "application/wasm"
) { ) {
throw new TypeError("Invalid WebAssembly content type."); throw new TypeError("Invalid WebAssembly content type");
} }
} }
// 2.5. // 2.5.
if (!res.ok) { if (!res.ok) {
throw new TypeError(`HTTP status code ${res.status}`); throw new TypeError(
`Failed to receive WebAssembly content: HTTP status code ${res.status}`,
);
} }
// Pass the resolved URL to v8. // Pass the resolved URL to v8.

View file

@ -43,7 +43,7 @@ impl FetchHandler for FsFetchHandler {
Ok::<_, ()>(response) Ok::<_, ()>(response)
} }
.map_err(move |_| { .map_err(move |_| {
type_error("NetworkError when attempting to fetch resource.") type_error("NetworkError when attempting to fetch resource")
}) })
.or_cancel(&cancel_handle) .or_cancel(&cancel_handle)
.boxed_local(); .boxed_local();

View file

@ -177,7 +177,7 @@ impl FetchHandler for DefaultFileFetchHandler {
) -> (CancelableResponseFuture, Option<Rc<CancelHandle>>) { ) -> (CancelableResponseFuture, Option<Rc<CancelHandle>>) {
let fut = async move { let fut = async move {
Ok(Err(type_error( Ok(Err(type_error(
"NetworkError when attempting to fetch resource.", "NetworkError when attempting to fetch resource",
))) )))
}; };
(Box::pin(fut), None) (Box::pin(fut), None)
@ -361,14 +361,14 @@ where
let (request_rid, cancel_handle_rid) = match scheme { let (request_rid, cancel_handle_rid) = match scheme {
"file" => { "file" => {
let path = url.to_file_path().map_err(|_| { let path = url.to_file_path().map_err(|_| {
type_error("NetworkError when attempting to fetch resource.") type_error("NetworkError when attempting to fetch resource")
})?; })?;
let permissions = state.borrow_mut::<FP>(); let permissions = state.borrow_mut::<FP>();
permissions.check_read(&path, "fetch()")?; permissions.check_read(&path, "fetch()")?;
if method != Method::GET { if method != Method::GET {
return Err(type_error(format!( return Err(type_error(format!(
"Fetching files only supports the GET method. Received {method}." "Fetching files only supports the GET method: received {method}"
))); )));
} }
@ -394,7 +394,7 @@ where
let uri = url let uri = url
.as_str() .as_str()
.parse::<Uri>() .parse::<Uri>()
.map_err(|_| type_error("Invalid URL"))?; .map_err(|_| type_error(format!("Invalid URL {url}")))?;
let mut con_len = None; let mut con_len = None;
let body = if has_body { let body = if has_body {
@ -522,7 +522,9 @@ where
// because the URL isn't an object URL. // because the URL isn't an object URL.
return Err(type_error("Blob for the given URL not found.")); return Err(type_error("Blob for the given URL not found."));
} }
_ => return Err(type_error(format!("scheme '{scheme}' not supported"))), _ => {
return Err(type_error(format!("Url scheme '{scheme}' not supported")))
}
}; };
Ok(FetchReturn { Ok(FetchReturn {
@ -586,7 +588,7 @@ pub async fn op_fetch_send(
return Err(type_error(err.to_string())); return Err(type_error(err.to_string()));
} }
Err(_) => return Err(type_error("request was cancelled")), Err(_) => return Err(type_error("Request was cancelled")),
}; };
let status = res.status(); let status = res.status();
@ -1016,9 +1018,11 @@ pub fn create_http_client(
let mut http_connector = HttpConnector::new(); let mut http_connector = HttpConnector::new();
http_connector.enforce_http(false); http_connector.enforce_http(false);
let user_agent = user_agent let user_agent = user_agent.parse::<HeaderValue>().map_err(|_| {
.parse::<HeaderValue>() type_error(format!(
.map_err(|_| type_error("illegal characters in User-Agent"))?; "Illegal characters in User-Agent: received {user_agent}"
))
})?;
let mut builder = let mut builder =
hyper_util::client::legacy::Builder::new(TokioExecutor::new()); hyper_util::client::legacy::Builder::new(TokioExecutor::new());
@ -1060,7 +1064,7 @@ pub fn create_http_client(
} }
(true, true) => {} (true, true) => {}
(false, false) => { (false, false) => {
return Err(type_error("Either `http1` or `http2` needs to be true")) return Err(type_error("Cannot create Http Client: either `http1` or `http2` needs to be set to true"))
} }
} }

View file

@ -1,2 +1,2 @@
error: Uncaught (in promise) TypeError: Invalid WebAssembly content type. error: Uncaught (in promise) TypeError: Invalid WebAssembly content type
at handleWasmStreaming (ext:deno_fetch/26_fetch.js:[WILDCARD]) at handleWasmStreaming (ext:deno_fetch/26_fetch.js:[WILDCARD])

View file

@ -118,7 +118,7 @@ Deno.test(async function cachePutReaderLock() {
await response.arrayBuffer(); await response.arrayBuffer();
}, },
TypeError, TypeError,
"Body already consumed.", "Body already consumed",
); );
await promise; await promise;

View file

@ -1131,7 +1131,7 @@ Deno.test(function fetchResponseConstructorInvalidStatus() {
assert(e instanceof RangeError); assert(e instanceof RangeError);
assert( assert(
e.message.endsWith( e.message.endsWith(
"is not equal to 101 and outside the range [200, 599].", "is not equal to 101 and outside the range [200, 599]",
), ),
); );
} }
@ -1662,7 +1662,7 @@ Deno.test(
); );
}, },
TypeError, TypeError,
"Fetching files only supports the GET method. Received POST.", "Fetching files only supports the GET method: received POST",
); );
}, },
); );

View file

@ -406,11 +406,11 @@ Deno.test(function invalidHeadersFlaky() {
assertThrows( assertThrows(
() => new Headers([["x", "\u0000x"]]), () => new Headers([["x", "\u0000x"]]),
TypeError, TypeError,
"Header value is not valid.", 'Invalid header value: "\u0000x"',
); );
assertThrows( assertThrows(
() => new Headers([["x", "\u0000x"]]), () => new Headers([["x", "\u0000x"]]),
TypeError, TypeError,
"Header value is not valid.", 'Invalid header value: "\u0000x"',
); );
}); });

View file

@ -53,7 +53,7 @@ Deno.test(
await assertRejects( await assertRejects(
() => wasmPromise, () => wasmPromise,
TypeError, TypeError,
"Invalid WebAssembly content type.", "Invalid WebAssembly content type",
); );
}, },
); );