UNPKG

6.53 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 web?:
48 | {
49 useCache?: boolean | undefined;
50 async?: boolean | undefined;
51 }
52 | undefined;
53 express?: object | undefined;
54 tags?:
55 | {
56 blockStart?: string | undefined;
57 blockEnd?: string | undefined;
58 variableStart?: string | undefined;
59 variableEnd?: string | undefined;
60 commentStart?: string | undefined;
61 commentEnd?: string | undefined;
62 }
63 | undefined;
64}
65
66export class Environment {
67 options: {
68 autoescape: boolean;
69 };
70
71 constructor(loader?: ILoader | ILoader[] | null, opts?: ConfigureOptions);
72 render(name: string, context?: object): string;
73 render(name: string, context?: object, callback?: TemplateCallback<string>): void;
74
75 renderString(name: string, context: object): string;
76 renderString(name: string, context: object, callback?: TemplateCallback<string>): void;
77
78 addFilter(name: string, func: (...args: any[]) => any, async?: boolean): Environment;
79 getFilter(name: string): (...args: any[]) => any;
80
81 addExtension(name: string, ext: Extension): Environment;
82 removeExtension(name: string): void;
83 getExtension(name: string): Extension;
84 hasExtension(name: string): boolean;
85
86 addGlobal(name: string, value: any): Environment;
87 getGlobal(name: string): any;
88
89 getTemplate(name: string, eagerCompile?: boolean): Template;
90 getTemplate(name: string, eagerCompile?: boolean, callback?: Callback<Error, Template>): void;
91
92 express(app: object): void;
93
94 on(
95 event: 'load',
96 fn: (name: string, source: { src: string; path: string; noCache: boolean }, loader: Loader) => void,
97 ): void;
98}
99
100export interface Extension {
101 tags: string[];
102 // Parser API is undocumented it is suggested to check the source: https://github.com/mozilla/nunjucks/blob/master/src/parser.js
103 parse(parser: any, nodes: any, lexer: any): any;
104}
105
106export function installJinjaCompat(): void;
107
108export interface ILoader {
109 async?: boolean | undefined;
110 getSource(name: string): LoaderSource;
111 getSource(name: string, callback: Callback<Error, LoaderSource>): void;
112}
113
114// Needs both Loader and ILoader since nunjucks uses a custom object system
115// Object system is also responsible for the extend methods
116export class Loader {
117 on(name: string, func: (...args: any[]) => any): void;
118 emit(name: string, ...args: any[]): void;
119 resolve(from: string, to: string): string;
120 isRelative(filename: string): boolean;
121 static extend<LoaderClass extends typeof Loader>(this: LoaderClass, toExtend: ILoader): LoaderClass;
122}
123
124export interface LoaderSource {
125 src: string;
126 path: string;
127 noCache: boolean;
128}
129
130export interface LoaderOptions {
131 /** if true, the system will automatically update templates when they are changed on the filesystem */
132 watch?: boolean;
133
134 /** if true, the system will avoid using a cache and templates will be recompiled every single time */
135 noCache?: boolean;
136}
137
138export type FileSystemLoaderOptions = LoaderOptions;
139export type NodeResolveLoaderOptions = LoaderOptions;
140
141export class FileSystemLoader extends Loader implements ILoader {
142 constructor(searchPaths?: string | string[], opts?: FileSystemLoaderOptions);
143 getSource(name: string): LoaderSource;
144}
145
146export class NodeResolveLoader extends Loader implements ILoader {
147 constructor(searchPaths?: string | string[], opts?: NodeResolveLoaderOptions);
148 getSource(name: string): LoaderSource;
149}
150
151export interface WebLoaderOptions {
152 useCache?: boolean;
153 async?: boolean;
154}
155
156export class WebLoader extends Loader implements ILoader {
157 constructor(baseUrl?: string, opts?: WebLoaderOptions);
158 getSource(name: string): LoaderSource;
159}
160
161export class PrecompiledLoader extends Loader implements ILoader {
162 constructor(compiledTemplates?: any[]);
163 getSource(name: string): LoaderSource;
164}
165
166export namespace runtime {
167 class SafeString {
168 constructor(val: string);
169 val: string;
170 length: number;
171 valueOf(): string;
172 toString(): string;
173 }
174}
175
176export namespace lib {
177 class TemplateError extends Error {
178 constructor(message: string, lineno: number, colno: number);
179
180 name: string; // always 'Template render error'
181 message: string;
182 stack: string;
183
184 cause?: Error | undefined;
185 lineno: number;
186 colno: number;
187 }
188}