import { RouteLocationNormalizedLoaded, RouteLocationNormalized } from 'vue-router' import { RouteNames, RoutiderRoutes } from '../options/options' import { ExtractParams } from '../options/path' import { RouteRecordName } from '../options/name' import { RoutiderRouteRecord } from './route' import { EntityOrArrayToUnion, UnionToIntersection } from '../type' import { ExtractQueries, QueryMap } from '../options/queries' type RecordWithOptional< KRequired extends string | number | symbol, KOptional extends string | number | symbol, V > = Record & Partial> export interface Params< ParamNames extends string | undefined, OptionalParamNames extends string | undefined > { params: Readonly< RecordWithOptional< Exclude, Exclude, string | string[] > > } export interface Queries { query: Readonly>> } /** * Typed `RouteLocationNormalized` */ export type RoutiderLocationN< ParamNames extends string | undefined, OptionalParamNames extends string | undefined, QueryNames extends string | undefined, RouteName extends RouteNames > = Omit & { name: RouteName } & Params & Queries /** * Typed `RouteLocationNormalizedLoaded` */ export type RoutiderLocation< ParamNames extends string | undefined, OptionalParamNames extends string | undefined, QueryNames extends string | undefined, RouteName extends RouteNames > = Omit & { name: RouteName } & Params & Queries type RoutesOfNames< Routes extends RoutiderRoutes, Ns extends RouteNames | RouteNames[] > = { [N in EntityOrArrayToUnion]: Routes[N] } type IntersectionParamsOfRoutes< Rs extends Record > = ExtractParams< UnionToIntersection< { [K in keyof Rs]: Exclude }[keyof Rs] > > type UnionParamsOfRoutes< Rs extends Record > = { [K in keyof Rs]: ExtractParams }[keyof Rs] type UnionQueriesOfRoutes< Rs extends Record > = { [K in keyof Rs]: ExtractQueries }[keyof Rs] /** * Get Typed `RouteLocationNormalizedLoaded` from Route */ export type RoutiderLocationOfNames< Routes extends RoutiderRoutes, N extends RouteNames | RouteNames[] > = RoutiderLocation< IntersectionParamsOfRoutes>, UnionParamsOfRoutes>, UnionQueriesOfRoutes>, EntityOrArrayToUnion >