@bespunky/angular-zen
Version:
The Angular tools you always wished were there.
18 lines (17 loc) • 1.8 kB
TypeScript
import type { FirstChar, Narrow } from '@bespunky/typescript-utils';
import { autoNavigatorNameSeparator } from '../navigation-x.route-creator';
import type { RouteOperationMethod } from './auto-navigator-methods.types';
import type { RouteArgumentName, RouteSegments } from './route-paths.types';
declare type CapitalizeRouteSegment<Segment extends string> = Segment['length'] extends 0 | 1 ? never : Segment extends `:${infer ArgName}` ? Capitalize<ArgName> : Capitalize<Segment>;
declare type JoinStrings<S1 extends string, S2 extends string> = `${S1}${S2}`;
declare type Separator = typeof autoNavigatorNameSeparator;
declare type SegmentedRouteComposerName<Segments extends string[]> = {
0: '';
1: CapitalizeRouteSegment<Segments[0]>;
multi: Segments extends [infer First, ...infer Rest] ? First extends string ? Rest extends string[] ? JoinStrings<CapitalizeRouteSegment<First>, JoinStrings<Separator, SegmentedRouteComposerName<Rest>>> : never : never : never;
}[Segments['length'] extends 0 | 1 ? Segments['length'] : 'multi'];
export declare type GeneratedRouteComposerName<Path extends string> = SegmentedRouteComposerName<RouteSegments<Path>>;
export declare type RouteComposerName<FriendlyName extends string | undefined, FullPath extends string> = FirstChar<FriendlyName> extends string ? FriendlyName : GeneratedRouteComposerName<FullPath>;
export declare type RouteComposerComposeMethod<Entity, Path extends string> = RouteOperationMethod<Entity, Path, string>;
export declare type EntityRouteArgs<Entity, Path extends string> = RouteArgumentName<Path> extends keyof Entity ? Narrow<Pick<Entity, RouteArgumentName<Path>>> : `Route argument '${Exclude<RouteArgumentName<Path>, keyof Entity>}' doesn't match any property on the route's corresponding entity.`;
export {};