UNPKG

@sm.ahmadi77/type-safe-url-s

Version:

A lightweight TypeScript library for writing URLs in a type-safe manner 👍.

40 lines (37 loc) 1.75 kB
import { MergeIntersection, MakeOptionalPropertiesAcceptUndefined } from 'advanced-type-utilities'; /** Options for creating URL strings. */ type UrlBuilderOptions = { /** default value: '' */ baseUrl?: string | undefined; /** default value: true */ autoAddLeadingSlash?: boolean | undefined; /** default value: false */ autoAddTrailingSlash?: boolean | undefined; }; declare const PATH_SEGMENTS_KEY: unique symbol; declare const OPTIONS_KEY: unique symbol; declare const QUERY_PARAMS_KEY: unique symbol; declare function createRootPathObject<UrlSchema>(options?: UrlBuilderOptions): PathObject<UrlSchema>; type Internal = { [PATH_SEGMENTS_KEY]: string[]; [OPTIONS_KEY]: UrlBuilderOptions; }; type PathObject<UrlSchema> = UrlSchema extends (...pathParams: infer PathParams) => infer NestedUrlSchema ? MergeIntersection<Internal & ("?" extends keyof UrlSchema ? { [QUERY_PARAMS_KEY]: UrlSchema["?"]; } : {}) & { [K in Exclude<keyof UrlSchema, "?" | symbol>]: PathObject<UrlSchema[K]>; }> & ((...pathParams: PathParams) => PathObject<NestedUrlSchema>) : MergeIntersection<Internal & ("?" extends keyof UrlSchema ? { [QUERY_PARAMS_KEY]: UrlSchema["?"]; } : {}) & { [K in Exclude<keyof UrlSchema, "?" | symbol>]: PathObject<UrlSchema[K]>; }>; declare function urlOf<T extends { [PATH_SEGMENTS_KEY]: string[]; [OPTIONS_KEY]: UrlBuilderOptions; [QUERY_PARAMS_KEY]: object; }>(pathObject: T, queryParams?: MakeOptionalPropertiesAcceptUndefined<Partial<T[typeof QUERY_PARAMS_KEY]>>): string; declare function urlOf<T extends { [PATH_SEGMENTS_KEY]: string[]; [OPTIONS_KEY]: UrlBuilderOptions; }>(pathObject: T): string; export { type UrlBuilderOptions, createRootPathObject, urlOf };