UNPKG

1.53 kBTypeScriptView Raw
1export type TemplateHelper = readonly [
2 name: string,
3 fn: (path: string | undefined, data: unknown) => unknown
4];
5/** The generic type a template can have as its input. */
6export interface TemplateData<H extends readonly TemplateHelper[] | undefined = readonly TemplateHelper[] | undefined> {
7 helpers?: H;
8 [key: string]: unknown;
9}
10/** The generic type a template can have as its text used to write files */
11export interface SourceTemplateData<H extends readonly TemplateHelper[] | undefined> {
12 filename: string;
13 helpers?: H;
14 [key: string]: unknown;
15}
16/** The parameters you can provide a template with */
17export type Commands<Arg extends string = string, T extends TemplateData = TemplateData> = Arg | [cmd: 'each', arg: Arg] | [cmd: '/each'] | [cmd: 'if', arg: Arg] | [cmd: 'else'] | [cmd: '/if'] | (undefined extends T['helpers'] ? void : [cmd: `$${Exclude<T['helpers'], undefined>[number][0]}`, args?: Arg]);
18export type KeysOf<T extends Record<string, unknown> | readonly unknown[], Key extends keyof T = KeysOfUnion<T>> = Key extends string | number ? NonNullable<T[Key]> extends Record<string, unknown> | readonly unknown[] ? (Key & string) | `${T extends readonly unknown[] ? Key | '@' : Key}.${NonNullable<T[Key]> extends readonly unknown[] ? KeysOf<NonNullable<T[Key]>> | '@' : KeysOf<NonNullable<T[Key]>>}` : `${T extends readonly unknown[] ? Exclude<Key, keyof []> | '@' : Key}` : never;
19type KeysOfUnion<T> = T extends T ? keyof T : never;
20export {};
21//# sourceMappingURL=types.d.ts.map
\No newline at end of file