28 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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
 | |
| };
 |