Repository URL to install this package:
|
Version:
4.0.3 ▾
|
/**
* @file @todo rewrite and split this file elsewhere
* ^ this is here because we are doing this for logging & tests
*/
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
}
/**
* @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')
const mergedHeaders = fromHeadersToSerialized(headers)
const constantHeaders = config.get('constantHeaders')
Object.assign(mergedHeaders, constantHeaders)
const mergedParams = fromParamsToSerialized(params, request)
const constantParams = config.get('constantParams')
Object.assign(mergedParams, constantParams)
const asSerialized = {
// headers,
// mergedHeaders,
// mergedParams,
// params,
params: mergedParams,
headers: mergedHeaders,
url,
// 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
}