|
import { lowercaseKeys } from "./util/lowercase-keys"; |
|
import { mergeDeep } from "./util/merge-deep"; |
|
import { removeUndefinedProperties } from "./util/remove-undefined-properties"; |
|
function merge(defaults, route, options) { |
|
if (typeof route === "string") { |
|
let [method, url] = route.split(" "); |
|
options = Object.assign(url ? { method, url } : { url: method }, options); |
|
} else { |
|
options = Object.assign({}, route); |
|
} |
|
options.headers = lowercaseKeys(options.headers); |
|
removeUndefinedProperties(options); |
|
removeUndefinedProperties(options.headers); |
|
const mergedOptions = mergeDeep(defaults || {}, options); |
|
if (options.url === "/graphql") { |
|
if (defaults && defaults.mediaType.previews?.length) { |
|
mergedOptions.mediaType.previews = defaults.mediaType.previews.filter( |
|
(preview) => !mergedOptions.mediaType.previews.includes(preview) |
|
).concat(mergedOptions.mediaType.previews); |
|
} |
|
mergedOptions.mediaType.previews = (mergedOptions.mediaType.previews || []).map((preview) => preview.replace(/-preview/, "")); |
|
} |
|
return mergedOptions; |
|
} |
|
export { |
|
merge |
|
}; |
|
|