import * as tm from "type-mapping"; import {RouteData, Route} from "../route"; import {SetQuery, setQuery} from "./set-query"; export type DeepMergeQuery = ( undefined extends DataT["query"] ? SetQuery : Route<{ readonly method : DataT["method"]; readonly path : DataT["path"]; readonly param : DataT["param"]; readonly query : tm.DeepMergeMapper< Exclude, [F] >; readonly body : DataT["body"]; readonly header : DataT["header"]; readonly response : DataT["response"]; }> ); /** Your query mapper should handle the following types, `string|(string[])|undefined` */ export function deepMergeQuery ( data : DataT, f : F ) : DeepMergeQuery { if (data.query == undefined) { return setQuery(data, f) as any; } else { return new Route<{ readonly method : DataT["method"]; readonly path : DataT["path"]; readonly param : DataT["param"]; readonly query : tm.DeepMergeMapper< Exclude, [F] >; readonly body : DataT["body"]; readonly header : DataT["header"]; readonly response : DataT["response"]; }>({ ...data, query : tm.deepMerge( data.query as Exclude, f ), }) as any; } }