Repository URL to install this package:
|
Version:
7.1.2 ▾
|
/**
* @file @todo rewrite and split this file elsewhere
* ^ this is here because we are doing this for logging & tests
*/
import { isFunction, isMap } from 'exotic'
import { URL } from 'url'
import {
Params,
OneRequest,
OneRequestStore,
OneRequestAsSerializedDebug,
} from '../typings'
import { config } from '../config'
import { setParamsOnSearchParams, serializeBody } from '../adapters/fetch'
import { encodeBody } from '../deps/encodeBody'
import { fromParamsToStringified } from '../deps/fromParamsToStringified'
import { fromHeadersToSerialized } from './fromHeadersToSerialized'
import { cloneURL } from './cloneURL'
// @todo need to test POST
export function fromBodyToSerialized(body: Body) {
// @todo
}
export { cloneURL } from './cloneURL'
export { fromHeadersToSerialized } from './fromHeadersToSerialized'
export function fromParamsToSerializedUrlParams(
params: Params,
request: OneRequest | OneRequestStore | { store: OneRequestStore }
): URL {
const stringifiedParams = fromParamsToStringified(params)
const requestStore = isMap(request) ? request : request.store
const url = cloneURL(requestStore.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 | OneRequestStore | { store: OneRequestStore }
) {
const url = fromParamsToSerializedUrlParams(params, request)
const serializedParams = {}
url.searchParams.forEach((value: string | any, key: string) => {
serializedParams[key] = value
})
return serializedParams
}
export const toValue = (request: OneRequest, constantHeader: unknown) => {
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
}