Skip to content

Commit 165ab4c

Browse files
tsctxcrysmags
authored andcommitted
refactor: use fromInnerResponse (nodejs#2635)
* refactor: use fromInnerResponse * test: add * Update lib/cache/cache.js * Update lib/fetch/response.js * Update request.js
1 parent c17c1f2 commit 165ab4c

5 files changed

Lines changed: 53 additions & 52 deletions

File tree

lib/cache/cache.js

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@
33
const { kConstruct } = require('./symbols')
44
const { urlEquals, fieldValues: getFieldValues } = require('./util')
55
const { kEnumerableProperty, isDisturbed } = require('../core/util')
6-
const { kHeadersList } = require('../core/symbols')
76
const { webidl } = require('../fetch/webidl')
8-
const { Response, cloneResponse } = require('../fetch/response')
7+
const { Response, cloneResponse, fromInnerResponse } = require('../fetch/response')
98
const { Request, fromInnerRequest } = require('../fetch/request')
10-
const { Headers } = require('../fetch/headers')
11-
const { kState, kHeaders, kGuard } = require('../fetch/symbols')
9+
const { kState } = require('../fetch/symbols')
1210
const { fetching } = require('../fetch/index')
1311
const { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = require('../fetch/util')
1412
const assert = require('assert')
@@ -783,11 +781,7 @@ class Cache {
783781
// 5.5.2
784782
for (const response of responses) {
785783
// 5.5.2.1
786-
const responseObject = new Response(kConstruct)
787-
responseObject[kState] = response
788-
responseObject[kHeaders] = new Headers(kConstruct)
789-
responseObject[kHeaders][kHeadersList] = response.headersList
790-
responseObject[kHeaders][kGuard] = 'immutable'
784+
const responseObject = fromInnerResponse(response, 'immutable', { settingsObject: {} })
791785

792786
responseList.push(responseObject.clone())
793787

lib/fetch/index.js

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
'use strict'
44

55
const {
6-
Response,
76
makeNetworkError,
87
makeAppropriateNetworkError,
98
filterResponse,
10-
makeResponse
9+
makeResponse,
10+
fromInnerResponse
1111
} = require('./response')
12-
const { Headers, HeadersList } = require('./headers')
12+
const { HeadersList } = require('./headers')
1313
const { Request, makeRequest } = require('./request')
1414
const zlib = require('zlib')
1515
const {
@@ -45,7 +45,7 @@ const {
4545
simpleRangeHeaderValue,
4646
buildContentRange
4747
} = require('./util')
48-
const { kState, kHeaders, kGuard, kRealm } = require('./symbols')
48+
const { kState } = require('./symbols')
4949
const assert = require('assert')
5050
const { safelyExtractBody, extractBody } = require('./body')
5151
const {
@@ -55,7 +55,6 @@ const {
5555
requestBodyHeader,
5656
subresourceSet
5757
} = require('./constants')
58-
const { kHeadersList, kConstruct } = require('../core/symbols')
5958
const EE = require('events')
6059
const { Readable, pipeline } = require('stream')
6160
const { addAbortListener, isErrored, isReadable, nodeMajor, nodeMinor, bufferToLowerCasedHeaderName } = require('../core/util')
@@ -232,13 +231,7 @@ function fetch (input, init = undefined) {
232231

233232
// 4. Set responseObject to the result of creating a Response object,
234233
// given response, "immutable", and relevantRealm.
235-
responseObject = new Response(kConstruct)
236-
responseObject[kState] = response
237-
responseObject[kRealm] = relevantRealm
238-
responseObject[kHeaders] = new Headers(kConstruct)
239-
responseObject[kHeaders][kHeadersList] = response.headersList
240-
responseObject[kHeaders][kGuard] = 'immutable'
241-
responseObject[kHeaders][kRealm] = relevantRealm
234+
responseObject = fromInnerResponse(response, 'immutable', relevantRealm)
242235

243236
// 5. Resolve p with responseObject.
244237
p.resolve(responseObject)

lib/fetch/request.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -836,6 +836,7 @@ function cloneRequest (request) {
836836
}
837837

838838
/**
839+
* @see https://fetch.spec.whatwg.org/#request-create
839840
* @param {any} innerRequest
840841
* @param {AbortSignal} signal
841842
* @param {'request' | 'immutable' | 'request-no-cors' | 'response' | 'none'} guard

lib/fetch/response.js

Lines changed: 25 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,8 @@ class Response {
3838
// The static error() method steps are to return the result of creating a
3939
// Response object, given a new network error, "immutable", and this’s
4040
// relevant Realm.
41-
const responseObject = new Response(kConstruct)
42-
responseObject[kState] = makeNetworkError()
43-
responseObject[kRealm] = relevantRealm
44-
responseObject[kHeaders] = new Headers(kConstruct)
45-
responseObject[kHeaders][kHeadersList] = responseObject[kState].headersList
46-
responseObject[kHeaders][kGuard] = 'immutable'
47-
responseObject[kHeaders][kRealm] = relevantRealm
41+
const responseObject = fromInnerResponse(makeNetworkError(), 'immutable', relevantRealm)
42+
4843
return responseObject
4944
}
5045

@@ -67,13 +62,7 @@ class Response {
6762
// 3. Let responseObject be the result of creating a Response object, given a new response,
6863
// "response", and this’s relevant Realm.
6964
const relevantRealm = { settingsObject: {} }
70-
const responseObject = new Response(kConstruct)
71-
responseObject[kState] = makeResponse({})
72-
responseObject[kRealm] = relevantRealm
73-
responseObject[kHeaders] = new Headers(kConstruct)
74-
responseObject[kHeaders][kHeadersList] = responseObject[kState].headersList
75-
responseObject[kHeaders][kGuard] = 'response'
76-
responseObject[kHeaders][kRealm] = relevantRealm
65+
const responseObject = fromInnerResponse(makeResponse({}), 'response', relevantRealm)
7766

7867
// 4. Perform initialize a response given responseObject, init, and (body, "application/json").
7968
initializeResponse(responseObject, init, { body: body[0], type: 'application/json' })
@@ -111,13 +100,7 @@ class Response {
111100

112101
// 4. Let responseObject be the result of creating a Response object,
113102
// given a new response, "immutable", and this’s relevant Realm.
114-
const responseObject = new Response(kConstruct)
115-
responseObject[kState] = makeResponse({})
116-
responseObject[kRealm] = relevantRealm
117-
responseObject[kHeaders] = new Headers(kConstruct)
118-
responseObject[kHeaders][kHeadersList] = responseObject[kState].headersList
119-
responseObject[kHeaders][kGuard] = 'immutable'
120-
responseObject[kHeaders][kRealm] = relevantRealm
103+
const responseObject = fromInnerResponse(makeResponse({}), 'immutable', relevantRealm)
121104

122105
// 5. Set responseObject’s response’s status to status.
123106
responseObject[kState].status = status
@@ -269,15 +252,7 @@ class Response {
269252

270253
// 3. Return the result of creating a Response object, given
271254
// clonedResponse, this’s headers’s guard, and this’s relevant Realm.
272-
const clonedResponseObject = new Response(kConstruct)
273-
clonedResponseObject[kState] = clonedResponse
274-
clonedResponseObject[kRealm] = this[kRealm]
275-
clonedResponseObject[kHeaders] = new Headers(kConstruct)
276-
clonedResponseObject[kHeaders][kHeadersList] = clonedResponse.headersList
277-
clonedResponseObject[kHeaders][kGuard] = this[kHeaders][kGuard]
278-
clonedResponseObject[kHeaders][kRealm] = this[kHeaders][kRealm]
279-
280-
return clonedResponseObject
255+
return fromInnerResponse(clonedResponse, this[kHeaders][kGuard], this[kRealm])
281256
}
282257
}
283258

@@ -512,6 +487,24 @@ function initializeResponse (response, init, body) {
512487
}
513488
}
514489

490+
/**
491+
* @see https://fetch.spec.whatwg.org/#response-create
492+
* @param {any} innerResponse
493+
* @param {'request' | 'immutable' | 'request-no-cors' | 'response' | 'none'} guard
494+
* @param {any} [realm]
495+
* @returns {Response}
496+
*/
497+
function fromInnerResponse (innerResponse, guard, realm) {
498+
const response = new Response(kConstruct)
499+
response[kState] = innerResponse
500+
response[kRealm] = realm
501+
response[kHeaders] = new Headers(kConstruct)
502+
response[kHeaders][kHeadersList] = innerResponse.headersList
503+
response[kHeaders][kGuard] = guard
504+
response[kHeaders][kRealm] = realm
505+
return response
506+
}
507+
515508
webidl.converters.ReadableStream = webidl.interfaceConverter(
516509
ReadableStream
517510
)
@@ -588,5 +581,6 @@ module.exports = {
588581
makeAppropriateNetworkError,
589582
filterResponse,
590583
Response,
591-
cloneResponse
584+
cloneResponse,
585+
fromInnerResponse
592586
}

test/fetch/response.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@ const {
77
Response,
88
FormData
99
} = require('../../')
10+
const { fromInnerResponse, makeResponse } = require('../../lib/fetch/response')
1011
const {
1112
Blob: ThirdPartyBlob,
1213
FormData: ThirdPartyFormData
1314
} = require('formdata-node')
15+
const { kState, kGuard, kRealm, kHeaders } = require('../../lib/fetch/symbols')
16+
const { kHeadersList } = require('../../lib/core/symbols')
1417

1518
test('arg validation', async () => {
1619
// constructor
@@ -269,3 +272,19 @@ test('Check the Content-Type of invalid formData', async (t) => {
269272
await rejects(response.formData(), TypeError)
270273
})
271274
})
275+
276+
test('fromInnerResponse', () => {
277+
const realm = { settingsObject: {} }
278+
const innerResponse = makeResponse({
279+
urlList: [new URL('http://asd')]
280+
})
281+
282+
const response = fromInnerResponse(innerResponse, 'immutable', realm)
283+
284+
// check property
285+
assert.strictEqual(response[kState], innerResponse)
286+
assert.strictEqual(response[kRealm], realm)
287+
assert.strictEqual(response[kHeaders][kHeadersList], innerResponse.headersList)
288+
assert.strictEqual(response[kHeaders][kGuard], 'immutable')
289+
assert.strictEqual(response[kHeaders][kRealm], realm)
290+
})

0 commit comments

Comments
 (0)