Repository URL to install this package:
|
Version:
5.2.0 ▾
|
/**
* @file @todo rewrite and split this file elsewhere
* ^ this is here because we are doing this for logging & tests
*/
import { isFunction } from 'exotic'
import { URL } from 'url'
import { Params, OneRequest, OneRequestAsSerializedDebug } from '../typings'
import { config } from '../config'
import { setParamsOnSearchParams, serializeBody } from '../adapters/fetch'
import { encodeBody } from '../deps/encodeBody'
import { fromParamsToStringified } from '../deps/fromParamsToStringified'
export function fromHeadersToSerialized(headers: Headers) {
const headersObj = {}
headers.forEach((value: string | any, key: string) => {
headersObj[key] = value
})
return headersObj
}
// @todo need to test POST
export function fromBodyToSerialized(body: Body) {
// @todo
}
/**
* @param url | string
*/
export function cloneURL(url: URL) {
return new URL(url.href)
}
export function fromParamsToSerializedUrlParams(
params: Params,
request: OneRequest
) {
const stringifiedParams = fromParamsToStringified(params)
// @todo cleanup params
const url = cloneURL(request.store.get('urlObj'))
setParamsOnSearchParams(stringifiedParams, url)
return url
}
// @todo typings with the Url stuff
// @todo for more accurate output, need to use URLSearchParams
export function fromParamsToSerialized(params: Params, request: OneRequest) {
const url = fromParamsToSerializedUrlParams(params, request)
const serializedParams = {}
url.searchParams.forEach((value: string | any, key: string) => {
serializedParams[key] = value
})
return serializedParams
}
const toValue = (request, constantHeader) => {
if (isFunction(constantHeader)) {
return constantHeader(request.store)
} else {
return constantHeader
}
}
/**
* @todo may want to clone
*/
export function fromOneRequestToSerialized(
request: OneRequest
): OneRequestAsSerializedDebug {
const headers = request.store.get('headers')
const params = request.store.get('params')
const url = request.store.get('url')
// const urlObj = request.store.get('urlObj')
// const baseUrl = request.store.get('baseUrl')
// const path = request.store.get('path')
const body = request.store.get('body')
const method = request.store.get('method')
const named = request.store.get('named')
const jwt = request.store.get('jwt')
const debug = request.store.get('debug')
// have to see how jest serializes functions
const tapResponse = request.store.get('tapResponse')
const tapParams = request.store.get('tapParams')
/**
* @todo move this whole merging separately
* @todo @invalid THIS IS OVERRIDING THE HEADERS WITH CONSTANT HEADERS!
*/
const mergedHeaders = fromHeadersToSerialized(headers)
const constantHeaders = config.get('constantHeaders')
Object
.keys(constantHeaders)
// .filter(key => mergedHeaders[key] !== undefined)
.forEach(key => {
const constantHeader = constantHeaders[key]
mergedHeaders[key] = toValue(request, constantHeader)
})
// @todo add same dynamic fn thing to params...
const mergedParams = fromParamsToSerialized(params, request)
const constantParams = config.get('constantParams')
Object.assign(mergedParams, constantParams)
const { href } = fromParamsToSerializedUrlParams(mergedParams, request)
const asSerialized = {
// headers,
// mergedHeaders,
// mergedParams,
// params,
params: mergedParams,
headers: mergedHeaders,
url,
href,
// urlObj,
// baseUrl,
// path,
body,
method,
named,
jwt,
debug,
}
// @note - for snapshots
Object.keys(asSerialized).forEach(key => {
if (asSerialized[key] === undefined) {
delete asSerialized[key]
}
})
return asSerialized
// const asAutoFixed = autofix(asSerialized)
// return asAutoFixed
}