UNPKG

1.3 kBJavaScriptView Raw
1import { lowercaseKeys } from "./util/lowercase-keys";
2import { mergeDeep } from "./util/merge-deep";
3import { removeUndefinedProperties } from "./util/remove-undefined-properties";
4export function merge(defaults, route, options) {
5 if (typeof route === "string") {
6 let [method, url] = route.split(" ");
7 options = Object.assign(url ? { method, url } : { url: method }, options);
8 }
9 else {
10 options = Object.assign({}, route);
11 }
12 // lowercase header names before merging with defaults to avoid duplicates
13 options.headers = lowercaseKeys(options.headers);
14 // remove properties with undefined values before merging
15 removeUndefinedProperties(options);
16 removeUndefinedProperties(options.headers);
17 const mergedOptions = mergeDeep(defaults || {}, options);
18 // mediaType.previews arrays are merged, instead of overwritten
19 if (defaults && defaults.mediaType.previews.length) {
20 mergedOptions.mediaType.previews = defaults.mediaType.previews
21 .filter((preview) => !mergedOptions.mediaType.previews.includes(preview))
22 .concat(mergedOptions.mediaType.previews);
23 }
24 mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map((preview) => preview.replace(/-preview/, ""));
25 return mergedOptions;
26}