UNPKG

hydrate-text

Version:

A small, dependency-free and strongly typed template engine.

87 lines (86 loc) 2.62 kB
declare type ValueType = string | boolean | number | bigint; declare type GetVariablesHelper< Text extends string, Prefix extends string, Suffix extends string, Accumulator, > = string extends Text ? string : Prefix extends "" ? Suffix extends "" ? Text extends `${infer Letter}${infer Rest}` ? GetVariablesHelper<Rest, Prefix, Suffix, Letter | Accumulator> : Accumulator : Text extends `${infer Variable}${Suffix}${infer Rest}` ? GetVariablesHelper<Rest, Prefix, Suffix, Variable | Accumulator> : Accumulator : Suffix extends "" ? Text extends `${infer _Start}${Prefix}${infer Variable}` ? Variable extends `${infer _Variable}${Prefix}${infer Rest}` ? GetVariablesHelper< `${Prefix}${Rest}`, Prefix, Suffix, _Variable | Accumulator > : Variable | Accumulator : Accumulator : Text extends `${infer _Start}${Prefix}${infer Variable}${Suffix}${infer Rest}` ? Variable extends `${infer _Start}${Prefix}${infer _Variable}` ? GetVariablesHelper< `${_Start}${Prefix}${_Variable}${Suffix}${Rest}`, Prefix, Suffix, Accumulator > : GetVariablesHelper<Rest, Prefix, Suffix, Variable | Accumulator> : Accumulator; declare type GetVariables< Text extends string, Prefix extends string, Suffix extends string, > = GetVariablesHelper<Text, Prefix, Suffix, never>; interface InterpolationOptions<Prefix extends string, Suffix extends string> { prefix: Prefix; suffix: Suffix; } declare type DefaultPrefix = "{"; declare type DefaultSuffix = "}"; interface HydrateText { < Text extends string, Prefix extends string = DefaultPrefix, Suffix extends string = DefaultSuffix, >( text: Text, variables?: Record<GetVariables<Text, Prefix, Suffix>, ValueType>, interpolationOptions?: InterpolationOptions<Prefix, Suffix>, ): string; } interface ConfigureHydrateText { < _Prefix extends string = DefaultPrefix, _Suffix extends string = DefaultSuffix, >( interpolationOptions: InterpolationOptions<_Prefix, _Suffix>, ): < Text extends string, Prefix extends string = _Prefix, Suffix extends string = _Suffix, >( text: Text, variables?: Record<GetVariables<Text, Prefix, Suffix>, ValueType>, interpolationOptions?: InterpolationOptions<Prefix, Suffix>, ) => string; } declare const hydrateText: HydrateText; declare const configureHydrateText: ConfigureHydrateText; export { configureHydrateText, hydrateText }; export type { ConfigureHydrateText, DefaultPrefix, DefaultSuffix, HydrateText, InterpolationOptions, ValueType, };