Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/request / src / deps / fromRequestToSerialized.ts
Size: Mime:
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
}