1 | export type TemplateHelper = readonly [
|
2 | name: string,
|
3 | fn: (path: string | undefined, data: unknown) => unknown
|
4 | ];
|
5 |
|
6 | export interface TemplateData<H extends readonly TemplateHelper[] | undefined = readonly TemplateHelper[] | undefined> {
|
7 | helpers?: H;
|
8 | [key: string]: unknown;
|
9 | }
|
10 |
|
11 | export interface SourceTemplateData<H extends readonly TemplateHelper[] | undefined> {
|
12 | filename: string;
|
13 | helpers?: H;
|
14 | [key: string]: unknown;
|
15 | }
|
16 |
|
17 | export 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]);
|
18 | export 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;
|
19 | type KeysOfUnion<T> = T extends T ? keyof T : never;
|
20 | export {};
|
21 |
|
\ | No newline at end of file |