import { EndpointDefaults , RequestParameters , Route } from "@octokit/types" ; import { lowercaseKeys } from "./util/lowercase-keys" ; import { mergeDeep } from "./util/merge-deep" ; import { removeUndefinedProperties } from "./util/remove-undefined-properties" ; export 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 ) as EndpointDefaults ; 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 ; }