import { RouteFnArgs } from './routeArgs'; import { ChildrenRouterFn, ChildRouteMap, routeFn, RouteFn, RouteFnContext, } from './routeFn'; import { RouteNode } from './routeNode'; import { OptionsRouterFn, RouterFn } from './router'; import { RouteOptions, TemplateParserMap } from './types'; export * from './components'; export { createRouteObjectsFromRouter } from './createRouteObjects'; export * from './hooks'; export * from './paramParser'; export { RouteElement, RouteOptions } from './types'; type OptionsRouteFn = ( options: Required ) => RouteFn; const optionsRouteFn = (options: Required) => < T extends string, TPM extends TemplateParserMap, CRM extends ChildRouteMap, CRF extends ChildrenRouterFn >( templateWithQuery: T, args: RouteFnArgs, children?: CRF ): RouteNode => routeFn.call< RouteFnContext, [T, typeof args, CRF | undefined], RouteNode >( { previousPath: '', previousQueryParams: {}, previousOptions: options, }, templateWithQuery, args, children ); const optionsRoute: OptionsRouteFn = optionsRouteFn; export const Router: RouterFn = routes => routes(optionsRoute(undefined)); export const OptionsRouter: OptionsRouterFn = (options, routes) => Object.assign( { defaultOptions: options }, routes(optionsRoute(options)) ) as any;