UNPKG

6.7 kBTypeScriptView Raw
1export type TemplateCallback<T> = (err: lib.TemplateError | null, res: T | null) => void;
2export type Callback<E, T> = (err: E | null, res: T | null) => void;
3
4export function render(name: string, context?: object): string;
5export function render(name: string, context?: object, callback?: TemplateCallback<string>): void;
6
7export function renderString(src: string, context: object): string;
8export function renderString(src: string, context: object, callback?: TemplateCallback<string>): void;
9
10export function compile(src: string, env?: Environment, callback?: TemplateCallback<Template>): Template;
11
12export function precompile(path: string, opts?: PrecompileOptions): string;
13export function precompileString(src: string, opts?: PrecompileOptions): string;
14
15export interface PrecompileOptions {
16 name?: string | undefined;
17 asFunction?: boolean | undefined;
18 force?: boolean | undefined;
19 env?: Environment | undefined;
20 include?: string[] | undefined;
21 exclude?: string[] | undefined;
22 wrapper?(templates: { name: string; template: string }, opts: PrecompileOptions): string;
23}
24
25export class Template {
26 constructor(src: string, env?: Environment, path?: string, eagerCompile?: boolean);
27 render(context?: object): string;
28 render(context?: object, callback?: TemplateCallback<string>): void;
29}
30
31export function configure(options: ConfigureOptions): Environment;
32export function configure(path: string | string[], options?: ConfigureOptions): Environment;
33
34export interface ConfigureOptions {
35 autoescape?: boolean | undefined;
36 throwOnUndefined?: boolean | undefined;
37 trimBlocks?: boolean | undefined;
38 lstripBlocks?: boolean | undefined;
39 watch?: boolean | undefined;
40 noCache?: boolean | undefined;
41 dev?: boolean | undefined;
42 web?:
43 | {
44 useCache?: boolean | undefined;
45 async?: boolean | undefined;
46 }
47 | undefined;
48 express?: object | undefined;
49 tags?:
50 | {
51 blockStart?: string | undefined;
52 blockEnd?: string | undefined;
53 variableStart?: string | undefined;
54 variableEnd?: string | undefined;
55 commentStart?: string | undefined;
56 commentEnd?: string | undefined;
57 }
58 | undefined;
59}
60
61export class Environment {
62 options: {
63 autoescape: boolean;
64 };
65
66 constructor(loader?: ILoaderAny | ILoaderAny[] | null, opts?: ConfigureOptions);
67 render(name: string, context?: object): string;
68 render(name: string, context?: object, callback?: TemplateCallback<string>): void;
69
70 renderString(name: string, context: object): string;
71 renderString(name: string, context: object, callback?: TemplateCallback<string>): void;
72
73 addFilter(name: string, func: (...args: any[]) => any, async?: boolean): Environment;
74 getFilter(name: string): (...args: any[]) => any;
75
76 addExtension(name: string, ext: Extension): Environment;
77 removeExtension(name: string): void;
78 getExtension(name: string): Extension;
79 hasExtension(name: string): boolean;
80
81 addGlobal(name: string, value: any): Environment;
82 getGlobal(name: string): any;
83
84 getTemplate(name: string, eagerCompile?: boolean): Template;
85 getTemplate(name: string, eagerCompile?: boolean, callback?: Callback<Error, Template>): void;
86
87 express(app: object): void;
88
89 on(
90 event: "load",
91 fn: (name: string, source: { src: string; path: string; noCache: boolean }, loader: Loader) => void,
92 ): void;
93}
94
95export interface Extension {
96 tags: string[];
97 // Parser API is undocumented it is suggested to check the source: https://github.com/mozilla/nunjucks/blob/master/src/parser.js
98 parse(parser: any, nodes: any, lexer: any): any;
99}
100
101export function installJinjaCompat(): void;
102
103/** A synchronous or an asynchronous loader. */
104export type ILoaderAny = ILoader | ILoaderAsync | WebLoader;
105// WebLoader is part of the union because it can be both sync or async depending
106// on its constructor arguments, which possibly could only be known on runtime.
107
108/** A synchronous loader. */
109export interface ILoader {
110 async?: false | undefined;
111
112 getSource: (name: string) => LoaderSource;
113}
114
115/** An asynchronous loader. */
116export interface ILoaderAsync {
117 async: true;
118
119 getSource: (name: string, callback: Callback<Error, LoaderSource>) => void;
120}
121
122// Needs both Loader and ILoader since nunjucks uses a custom object system
123// Object system is also responsible for the extend methods
124export class Loader {
125 on(name: string, func: (...args: any[]) => any): void;
126 emit(name: string, ...args: any[]): void;
127 resolve(from: string, to: string): string;
128 isRelative(filename: string): boolean;
129 static extend<LoaderClass extends typeof Loader>(this: LoaderClass, toExtend: ILoaderAny): LoaderClass;
130}
131
132export interface LoaderSource {
133 src: string;
134 path: string;
135 noCache: boolean;
136}
137
138export interface LoaderOptions {
139 /** if true, the system will automatically update templates when they are changed on the filesystem */
140 watch?: boolean;
141
142 /** if true, the system will avoid using a cache and templates will be recompiled every single time */
143 noCache?: boolean;
144}
145
146export type FileSystemLoaderOptions = LoaderOptions;
147export type NodeResolveLoaderOptions = LoaderOptions;
148
149export class FileSystemLoader extends Loader implements ILoader {
150 constructor(searchPaths?: string | string[], opts?: FileSystemLoaderOptions);
151 getSource(name: string): LoaderSource;
152}
153
154export class NodeResolveLoader extends Loader implements ILoader {
155 constructor(searchPaths?: string | string[], opts?: NodeResolveLoaderOptions);
156 getSource(name: string): LoaderSource;
157}
158
159export interface WebLoaderOptions {
160 useCache?: boolean;
161 async?: boolean;
162}
163
164export class WebLoader extends Loader {
165 constructor(baseUrl?: string, opts?: WebLoaderOptions);
166 async: boolean;
167
168 getSource: (name: string, callback: Callback<Error, LoaderSource>) => LoaderSource;
169}
170
171export class PrecompiledLoader extends Loader implements ILoader {
172 constructor(compiledTemplates?: any[]);
173 getSource(name: string): LoaderSource;
174}
175
176export namespace runtime {
177 class SafeString {
178 constructor(val: string);
179 val: string;
180 length: number;
181 valueOf(): string;
182 toString(): string;
183 }
184}
185
186export namespace lib {
187 class TemplateError extends Error {
188 constructor(message: string, lineno: number, colno: number);
189
190 name: string; // always 'Template render error'
191 message: string;
192 stack: string;
193
194 cause?: Error | undefined;
195 lineno: number;
196 colno: number;
197 }
198}