diff --git a/lib/client.js b/lib/client.js index b753df0d906..7eb2d196d1b 100644 --- a/lib/client.js +++ b/lib/client.js @@ -370,10 +370,10 @@ class Client extends DispatcherBase { // TODO: for H2 we need to gracefully flush the remaining enqueued // request and close each stream. return new Promise((resolve) => { - if (!this[kSize]) { - resolve(null) - } else { + if (this[kSize]) { this[kClosedResolve] = resolve + } else { + resolve(null) } }) } @@ -401,10 +401,10 @@ class Client extends DispatcherBase { this[kHTTP2SessionState] = null } - if (!this[kSocket]) { - queueMicrotask(callback) - } else { + if (this[kSocket]) { util.destroy(this[kSocket].on('close', callback), err) + } else { + queueMicrotask(callback) } resume(this) diff --git a/lib/core/request.js b/lib/core/request.js index 7f8a82e6701..74e0ca16eaa 100644 --- a/lib/core/request.js +++ b/lib/core/request.js @@ -369,8 +369,11 @@ class Request { if (value == null || value.length === 0) continue - if (headers[key]) headers[key] += `,${value}` - else headers[key] = value + if (headers[key]) { + headers[key] += `,${value}` + } else { + headers[key] = value + } } return headers @@ -433,20 +436,22 @@ function processHeader (request, key, val, skipAppend = false) { } } else if (headerName === 'expect') { throw new NotSupportedError('expect header not supported') - } else { - if (Array.isArray(val)) { - for (let i = 0; i < val.length; i++) { - if (skipAppend) { - if (request.headers[key]) request.headers[key] += `,${processHeaderValue(key, val[i], skipAppend)}` - else request.headers[key] = processHeaderValue(key, val[i], skipAppend) + } else if (Array.isArray(val)) { + for (let i = 0; i < val.length; i++) { + if (skipAppend) { + if (request.headers[key]) { + request.headers[key] += `,${processHeaderValue(key, val[i], skipAppend)}` } else { - request.headers += processHeaderValue(key, val[i]) + request.headers[key] = processHeaderValue(key, val[i], skipAppend) } + } else { + request.headers += processHeaderValue(key, val[i]) } - } else { - if (skipAppend) request.headers[key] = processHeaderValue(key, val, skipAppend) - else request.headers += processHeaderValue(key, val) } + } else if (skipAppend) { + request.headers[key] = processHeaderValue(key, val, skipAppend) + } else { + request.headers += processHeaderValue(key, val) } } diff --git a/lib/core/tree.js b/lib/core/tree.js index a61de9efbd9..03be18d235e 100644 --- a/lib/core/tree.js +++ b/lib/core/tree.js @@ -57,12 +57,10 @@ class TstNode { } else { this.left = new TstNode(key, value, index) } + } else if (this.right !== null) { + this.right.add(key, value, index) } else { - if (this.right !== null) { - this.right.add(key, value, index) - } else { - this.right = new TstNode(key, value, index) - } + this.right = new TstNode(key, value, index) } } diff --git a/lib/core/util.js b/lib/core/util.js index 69fe8956825..6a692465893 100644 --- a/lib/core/util.js +++ b/lib/core/util.js @@ -254,19 +254,19 @@ function parseHeaders (headers, obj) { const key = headerNameToString(headers[i]) let val = obj[key] - if (!val) { + if (val) { + if (typeof val === 'string') { + val = [val] + obj[key] = val + } + val.push(headers[i + 1].toString('utf8')) + } else { const headersValue = headers[i + 1] if (typeof headersValue === 'string') { obj[key] = headersValue } else { obj[key] = Array.isArray(headersValue) ? headersValue.map(x => x.toString('utf8')) : headersValue.toString('utf8') } - } else { - if (typeof val === 'string') { - val = [val] - obj[key] = val - } - val.push(headers[i + 1].toString('utf8')) } } diff --git a/lib/eventsource/eventsource-stream.js b/lib/eventsource/eventsource-stream.js index 3117318df10..754934568d0 100644 --- a/lib/eventsource/eventsource-stream.js +++ b/lib/eventsource/eventsource-stream.js @@ -337,7 +337,7 @@ class EventSourceStream extends Transform { if (event[field] === undefined) { event[field] = value } else { - event[field] += '\n' + value + event[field] += `\n${value}` } break case 'retry': diff --git a/lib/fetch/body.js b/lib/fetch/body.js index 621c5a2d47b..45aecd04c79 100644 --- a/lib/fetch/body.js +++ b/lib/fetch/body.js @@ -167,7 +167,7 @@ function extractBody (object, keepalive = false) { // Set type to `multipart/form-data; boundary=`, // followed by the multipart/form-data boundary string generated // by the multipart/form-data encoding algorithm. - type = 'multipart/form-data; boundary=' + boundary + type = `multipart/form-data; boundary=${boundary}` } else if (isBlobLike(object)) { // Blob @@ -455,7 +455,7 @@ function bodyMixinMethods (instance) { } catch (err) { // istanbul ignore next: Unclear when new URLSearchParams can fail on a string. // 2. If entries is failure, then throw a TypeError. - throw Object.assign(new TypeError(), { cause: err }) + throw new TypeError(undefined, { cause: err }) } // 3. Return a new FormData object whose entries are entries. diff --git a/lib/fetch/file.js b/lib/fetch/file.js index e4230880c92..d52feb3e3c9 100644 --- a/lib/fetch/file.js +++ b/lib/fetch/file.js @@ -283,12 +283,12 @@ function processBlobParts (parts, options) { // 2. If element is a BufferSource, get a copy of the // bytes held by the buffer source, and append those // bytes to bytes. - if (!element.buffer) { // ArrayBuffer - bytes.push(new Uint8Array(element)) - } else { + if (element.buffer) { bytes.push( new Uint8Array(element.buffer, element.byteOffset, element.byteLength) ) + } else { // ArrayBuffer + bytes.push(new Uint8Array(element)) } } else if (isBlobLike(element)) { // 3. If element is a Blob, append the bytes it represents diff --git a/lib/fetch/index.js b/lib/fetch/index.js index d14f4f998fd..a045bbc6dbc 100644 --- a/lib/fetch/index.js +++ b/lib/fetch/index.js @@ -224,9 +224,7 @@ function fetch (input, init = undefined) { // 3. If response is a network error, then reject p with a TypeError // and terminate these substeps. if (response.type === 'error') { - p.reject( - Object.assign(new TypeError('fetch failed'), { cause: response.error }) - ) + p.reject(new TypeError('fetch failed', { cause: response.error })) return Promise.resolve() } diff --git a/lib/fetch/response.js b/lib/fetch/response.js index 3255b78dab7..37ac53015e8 100644 --- a/lib/fetch/response.js +++ b/lib/fetch/response.js @@ -88,14 +88,12 @@ class Response { try { parsedURL = new URL(url, getGlobalOrigin()) } catch (err) { - throw Object.assign(new TypeError('Failed to parse URL from ' + url), { - cause: err - }) + throw new TypeError(`Failed to parse URL from ${url}`, { cause: err }) } // 3. If status is not a redirect status, then throw a RangeError. if (!redirectStatusSet.has(status)) { - throw new RangeError('Invalid status code ' + status) + throw new RangeError(`Invalid status code ${status}`) } // 4. Let responseObject be the result of creating a Response object, @@ -472,7 +470,7 @@ function initializeResponse (response, init, body) { if (nullBodyStatus.includes(response.status)) { throw webidl.errors.exception({ header: 'Response constructor', - message: 'Invalid response status code ' + response.status + message: `Invalid response status code ${response.status}` }) } diff --git a/lib/handler/RetryHandler.js b/lib/handler/RetryHandler.js index 13eb1005083..05d55792c1f 100644 --- a/lib/handler/RetryHandler.js +++ b/lib/handler/RetryHandler.js @@ -151,7 +151,7 @@ class RetryHandler { let retryAfterHeader = headers != null && headers['retry-after'] if (retryAfterHeader) { retryAfterHeader = Number(retryAfterHeader) - retryAfterHeader = isNaN(retryAfterHeader) + retryAfterHeader = Number.isNaN(retryAfterHeader) ? calculateRetryAfterHeader(retryAfterHeader) : retryAfterHeader * 1e3 // Retry-After is in seconds } diff --git a/lib/websocket/receiver.js b/lib/websocket/receiver.js index b8b63ceb9d8..c75939c29b7 100644 --- a/lib/websocket/receiver.js +++ b/lib/websocket/receiver.js @@ -236,9 +236,7 @@ class ByteParser extends Writable { } } - if (this.#byteOffset > 0) { - continue - } else { + if (this.#byteOffset === 0) { callback() break } diff --git a/lib/websocket/util.js b/lib/websocket/util.js index d15a63cde92..dc3e1ad7c3d 100644 --- a/lib/websocket/util.js +++ b/lib/websocket/util.js @@ -39,7 +39,7 @@ function isClosed (ws) { * @param {EventTarget} target * @param {EventInit | undefined} eventInitDict */ -function fireEvent (e, target, eventConstructor = Event, eventInitDict) { +function fireEvent (e, target, eventConstructor = Event, eventInitDict = {}) { // 1. If eventConstructor is not given, then let eventConstructor be Event. // 2. Let event be the result of creating an event given eventConstructor,