merge.js 1.0 KB

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