UNPKG

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