Repository URL to install this package:
|
Version:
7.1.2 ▾
|
import { EMPTY_OBJ } from 'exotic'
import { OneResponse, OneFetchRequestAdapted } from '../typings'
import { fromHeadersToSerialized } from './fromHeadersToSerialized'
const SERIALIZABLE_PROPERTIES_LIST = Object.freeze([
'cache',
'method',
'mode',
'referrer',
// 'integrity',
// 'keepalive',
// 'redirect',
// 'referrerPolicy',
// 'signal',
])
/**
* @see https://github.com/bitinn/node-fetch/tree/master/src
* @see https://github.com/apollographql/apollo-server/blob/master/packages/apollo-server-env/src/index.ts
* @see https://github.com/apollographql/apollo-server/blob/master/packages/apollo-server-env/src/index.d.ts
* @see https://github.com/apollographql/apollo-server/blob/master/packages/apollo-server-core/src/nodeHttpToRequest.ts
*/
export function fromRequestToSerialized(response: Request) {
const temp: any = {} as any
const clean: OneFetchRequestAdapted = {} as OneFetchRequestAdapted
Object.getOwnPropertySymbols(response).forEach(symbol => {
// String(symbol) !== 'Symbol(Body internals)'
if (!response[symbol].body) {
temp[String(symbol)] = response[symbol]
}
})
const bodyInternals = temp['Symbol(Body internals)'] || EMPTY_OBJ
const requestInternals = temp['Symbol(Request internals)'] || EMPTY_OBJ
const merged = { ...bodyInternals, ...requestInternals, ...response }
// clean.redirect = requestInternals.redirect
clean.body = bodyInternals.body
clean.method = requestInternals.method
clean.headers = fromHeadersToSerialized(requestInternals.headers)
clean.url = requestInternals.parsedURL.href
SERIALIZABLE_PROPERTIES_LIST.forEach(key => {
if (merged[key] !== undefined) {
clean[key] = merged[key]
}
})
return clean
}