Skip to content

Commit

Permalink
make cloned request inherit dispatcher
Browse files Browse the repository at this point in the history
  • Loading branch information
KhafraDev committed Sep 20, 2024
1 parent 54fd2df commit accbd5b
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 2 deletions.
1 change: 1 addition & 0 deletions lib/web/cache/cache.js
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,7 @@ class Cache {
for (const request of requests) {
const requestObject = fromInnerRequest(
request,
undefined,
new AbortController().signal,
'immutable'
)
Expand Down
6 changes: 4 additions & 2 deletions lib/web/fetch/request.js
Original file line number Diff line number Diff line change
Expand Up @@ -775,7 +775,7 @@ class Request {
}

// 4. Return clonedRequestObject.
return fromInnerRequest(clonedRequest, ac.signal, getHeadersGuard(this[kHeaders]))
return fromInnerRequest(clonedRequest, this[kDispatcher], ac.signal, getHeadersGuard(this[kHeaders]))
}

[nodeUtil.inspect.custom] (depth, options) {
Expand Down Expand Up @@ -875,13 +875,15 @@ function cloneRequest (request) {
/**
* @see https://fetch.spec.whatwg.org/#request-create
* @param {any} innerRequest
* @param {import('../../dispatcher/agent')} dispatcher
* @param {AbortSignal} signal
* @param {'request' | 'immutable' | 'request-no-cors' | 'response' | 'none'} guard
* @returns {Request}
*/
function fromInnerRequest (innerRequest, signal, guard) {
function fromInnerRequest (innerRequest, dispatcher, signal, guard) {
const request = new Request(kConstruct)
request[kState] = innerRequest
request[kDispatcher] = dispatcher
request[kSignal] = signal
request[kHeaders] = new Headers(kConstruct)
setHeadersList(request[kHeaders], innerRequest.headersList)
Expand Down
12 changes: 12 additions & 0 deletions test/fetch/issue-3630.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
'use strict'

const { test } = require('node:test')
const assert = require('node:assert')
const { Request, Agent } = require('../..')
const { kDispatcher } = require('../../lib/web/fetch/symbols')

test('Cloned request should inherit its dispatcher', () => {
const agent = new Agent()
const request = new Request('https://a', { dispatcher: agent })
assert.strictEqual(request[kDispatcher], agent)
})

0 comments on commit accbd5b

Please sign in to comment.