UNPKG

12.9 kBTypeScriptView Raw
1/* These definitions were imported from https://github.com/DefinitelyTyped/DefinitelyTyped
2 * and includes previous contributions from the DefinitelyTyped community by:
3 * - Albert Willemsen <https://github.com/AlbertWillemsen-Centric>
4 * - Boris Yankov <https://github.com/borisyankov>
5 * - Jessica Franco <https://github.com/Kovensky>
6 * - Masahiro Wakame <https://github.com/vvakame>
7 * - Raanan Weber <https://github.com/RaananW>
8 * - Sergei Dorogin <https://github.com/evil-shrike>
9 * - webbiesdk <https://github.com/webbiesdk>
10 * - Andrew Leedham <https://github.com/AndrewLeedham>
11 * - Nils Knappmeier <https://github.com/nknapp>
12 * For full history prior to their migration to handlebars.js, please see:
13 * https://github.com/DefinitelyTyped/DefinitelyTyped/commits/1ce60bdc07f10e0b076778c6c953271c072bc894/types/handlebars/index.d.ts
14 */
15// TypeScript Version: 2.3
16
17declare namespace Handlebars {
18 export interface TemplateDelegate<T = any> {
19 (context: T, options?: RuntimeOptions): string;
20 }
21
22 export type Template<T = any> = TemplateDelegate<T>|string;
23
24 export interface RuntimeOptions {
25 partial?: boolean;
26 depths?: any[];
27 helpers?: { [name: string]: Function };
28 partials?: { [name: string]: HandlebarsTemplateDelegate };
29 decorators?: { [name: string]: Function };
30 data?: any;
31 blockParams?: any[];
32 allowCallsToHelperMissing?: boolean;
33 allowedProtoProperties?: { [name: string]: boolean };
34 allowedProtoMethods?: { [name: string]: boolean };
35 allowProtoPropertiesByDefault?: boolean;
36 allowProtoMethodsByDefault?: boolean;
37 }
38
39 export interface HelperOptions {
40 fn: TemplateDelegate;
41 inverse: TemplateDelegate;
42 hash: any;
43 data?: any;
44 }
45
46 export interface HelperDelegate {
47 (context?: any, arg1?: any, arg2?: any, arg3?: any, arg4?: any, arg5?: any, options?: HelperOptions): any;
48 }
49 export interface HelperDeclareSpec {
50 [key: string]: HelperDelegate;
51 }
52
53 export interface ParseOptions {
54 srcName?: string;
55 ignoreStandalone?: boolean;
56 }
57
58 export function registerHelper(name: string, fn: HelperDelegate): void;
59 export function registerHelper(name: HelperDeclareSpec): void;
60 export function unregisterHelper(name: string): void;
61
62 export function registerPartial(name: string, fn: Template): void;
63 export function registerPartial(spec: { [name: string]: HandlebarsTemplateDelegate }): void;
64 export function unregisterPartial(name: string): void;
65
66 // TODO: replace Function with actual signature
67 export function registerDecorator(name: string, fn: Function): void;
68 export function unregisterDecorator(name: string): void;
69
70 export function K(): void;
71 export function createFrame(object: any): any;
72 export function blockParams(obj: any[], ids: any[]): any[];
73 export function log(level: number, obj: any): void;
74 export function parse(input: string, options?: ParseOptions): hbs.AST.Program;
75 export function parseWithoutProcessing(input: string, options?: ParseOptions): hbs.AST.Program;
76 export function compile<T = any>(input: any, options?: CompileOptions): HandlebarsTemplateDelegate<T>;
77 export function precompile(input: any, options?: PrecompileOptions): TemplateSpecification;
78 export function template<T = any>(precompilation: TemplateSpecification): HandlebarsTemplateDelegate<T>;
79
80 export function create(): typeof Handlebars;
81
82 export const escapeExpression: typeof Utils.escapeExpression;
83 //export const Utils: typeof hbs.Utils;
84 export const logger: Logger;
85 export const templates: HandlebarsTemplates;
86 export const helpers: { [name: string]: HelperDelegate };
87 export const partials: { [name: string]: any };
88 // TODO: replace Function with actual signature
89 export const decorators: { [name: string]: Function };
90
91 export const VERSION: string;
92
93 export function noConflict(): typeof Handlebars;
94
95 export class Exception {
96 constructor(message: string, node?: hbs.AST.Node);
97 description: string;
98 fileName: string;
99 lineNumber?: any;
100 endLineNumber?: any;
101 message: string;
102 name: string;
103 number: number;
104 stack?: string;
105 column?: any;
106 endColumn?: any;
107 }
108
109 export class SafeString {
110 constructor(str: string);
111 toString(): string;
112 toHTML(): string;
113 }
114
115 export namespace Utils {
116 export function escapeExpression(str: string): string;
117 export function createFrame(object: any): any;
118 export function blockParams(obj: any[], ids: any[]): any[];
119 export function isEmpty(obj: any) : boolean;
120 export function extend(obj: any, ...source: any[]): any;
121 export function toString(obj: any): string;
122 export function isArray(obj: any): boolean;
123 export function isFunction(obj: any): boolean;
124 }
125
126 export namespace AST {
127 export const helpers: hbs.AST.helpers;
128 }
129
130 interface ICompiler {
131 accept(node: hbs.AST.Node): void;
132 Program(program: hbs.AST.Program): void;
133 BlockStatement(block: hbs.AST.BlockStatement): void;
134 PartialStatement(partial: hbs.AST.PartialStatement): void;
135 PartialBlockStatement(partial: hbs.AST.PartialBlockStatement): void;
136 DecoratorBlock(decorator: hbs.AST.DecoratorBlock): void;
137 Decorator(decorator: hbs.AST.Decorator): void;
138 MustacheStatement(mustache: hbs.AST.MustacheStatement): void;
139 ContentStatement(content: hbs.AST.ContentStatement): void;
140 CommentStatement(comment?: hbs.AST.CommentStatement): void;
141 SubExpression(sexpr: hbs.AST.SubExpression): void;
142 PathExpression(path: hbs.AST.PathExpression): void;
143 StringLiteral(str: hbs.AST.StringLiteral): void;
144 NumberLiteral(num: hbs.AST.NumberLiteral): void;
145 BooleanLiteral(bool: hbs.AST.BooleanLiteral): void;
146 UndefinedLiteral(): void;
147 NullLiteral(): void;
148 Hash(hash: hbs.AST.Hash): void;
149 }
150
151 export class Visitor implements ICompiler {
152 accept(node: hbs.AST.Node): void;
153 acceptKey(node: hbs.AST.Node, name: string): void;
154 acceptArray(arr: hbs.AST.Expression[]): void;
155 Program(program: hbs.AST.Program): void;
156 BlockStatement(block: hbs.AST.BlockStatement): void;
157 PartialStatement(partial: hbs.AST.PartialStatement): void;
158 PartialBlockStatement(partial: hbs.AST.PartialBlockStatement): void;
159 DecoratorBlock(decorator: hbs.AST.DecoratorBlock): void;
160 Decorator(decorator: hbs.AST.Decorator): void;
161 MustacheStatement(mustache: hbs.AST.MustacheStatement): void;
162 ContentStatement(content: hbs.AST.ContentStatement): void;
163 CommentStatement(comment?: hbs.AST.CommentStatement): void;
164 SubExpression(sexpr: hbs.AST.SubExpression): void;
165 PathExpression(path: hbs.AST.PathExpression): void;
166 StringLiteral(str: hbs.AST.StringLiteral): void;
167 NumberLiteral(num: hbs.AST.NumberLiteral): void;
168 BooleanLiteral(bool: hbs.AST.BooleanLiteral): void;
169 UndefinedLiteral(): void;
170 NullLiteral(): void;
171 Hash(hash: hbs.AST.Hash): void;
172 }
173
174
175 export interface ResolvePartialOptions {
176 name: string;
177 helpers?: { [name: string]: Function };
178 partials?: { [name: string]: HandlebarsTemplateDelegate };
179 decorators?: { [name: string]: Function };
180 data?: any;
181 }
182
183 export namespace VM {
184 /**
185 * @deprecated
186 */
187 export function resolvePartial<T = any>(partial: HandlebarsTemplateDelegate<T> | undefined, context: any, options: ResolvePartialOptions): HandlebarsTemplateDelegate<T>;
188 }
189}
190
191/**
192* Implement this interface on your MVW/MVVM/MVC views such as Backbone.View
193**/
194interface HandlebarsTemplatable {
195 template: HandlebarsTemplateDelegate;
196}
197
198// NOTE: for backward compatibility of this typing
199type HandlebarsTemplateDelegate<T = any> = Handlebars.TemplateDelegate<T>;
200
201interface HandlebarsTemplates {
202 [index: string]: HandlebarsTemplateDelegate;
203}
204
205interface TemplateSpecification {
206
207}
208
209// for backward compatibility of this typing
210type RuntimeOptions = Handlebars.RuntimeOptions;
211
212interface CompileOptions {
213 data?: boolean;
214 compat?: boolean;
215 knownHelpers?: KnownHelpers;
216 knownHelpersOnly?: boolean;
217 noEscape?: boolean;
218 strict?: boolean;
219 assumeObjects?: boolean;
220 preventIndent?: boolean;
221 ignoreStandalone?: boolean;
222 explicitPartialContext?: boolean;
223}
224
225type KnownHelpers = {
226 [name in BuiltinHelperName | CustomHelperName]: boolean;
227};
228
229type BuiltinHelperName =
230 "helperMissing"|
231 "blockHelperMissing"|
232 "each"|
233 "if"|
234 "unless"|
235 "with"|
236 "log"|
237 "lookup";
238
239type CustomHelperName = string;
240
241interface PrecompileOptions extends CompileOptions {
242 srcName?: string;
243 destName?: string;
244}
245
246declare namespace hbs {
247 // for backward compatibility of this typing
248 type SafeString = Handlebars.SafeString;
249
250 type Utils = typeof Handlebars.Utils;
251}
252
253interface Logger {
254 DEBUG: number;
255 INFO: number;
256 WARN: number;
257 ERROR: number;
258 level: number;
259
260 methodMap: { [level: number]: string };
261
262 log(level: number, obj: string): void;
263}
264
265type CompilerInfo = [number/* revision */, string /* versions */];
266
267declare namespace hbs {
268 namespace AST {
269 interface Node {
270 type: string;
271 loc: SourceLocation;
272 }
273
274 interface SourceLocation {
275 source: string;
276 start: Position;
277 end: Position;
278 }
279
280 interface Position {
281 line: number;
282 column: number;
283 }
284
285 interface Program extends Node {
286 body: Statement[];
287 blockParams: string[];
288 }
289
290 interface Statement extends Node {}
291
292 interface MustacheStatement extends Statement {
293 type: 'MustacheStatement';
294 path: PathExpression | Literal;
295 params: Expression[];
296 hash: Hash;
297 escaped: boolean;
298 strip: StripFlags;
299 }
300
301 interface Decorator extends MustacheStatement { }
302
303 interface BlockStatement extends Statement {
304 type: 'BlockStatement';
305 path: PathExpression;
306 params: Expression[];
307 hash: Hash;
308 program: Program;
309 inverse: Program;
310 openStrip: StripFlags;
311 inverseStrip: StripFlags;
312 closeStrip: StripFlags;
313 }
314
315 interface DecoratorBlock extends BlockStatement { }
316
317 interface PartialStatement extends Statement {
318 type: 'PartialStatement';
319 name: PathExpression | SubExpression;
320 params: Expression[];
321 hash: Hash;
322 indent: string;
323 strip: StripFlags;
324 }
325
326 interface PartialBlockStatement extends Statement {
327 type: 'PartialBlockStatement';
328 name: PathExpression | SubExpression;
329 params: Expression[];
330 hash: Hash;
331 program: Program;
332 openStrip: StripFlags;
333 closeStrip: StripFlags;
334 }
335
336 interface ContentStatement extends Statement {
337 type: 'ContentStatement';
338 value: string;
339 original: StripFlags;
340 }
341
342 interface CommentStatement extends Statement {
343 type: 'CommentStatement';
344 value: string;
345 strip: StripFlags;
346 }
347
348 interface Expression extends Node {}
349
350 interface SubExpression extends Expression {
351 type: 'SubExpression';
352 path: PathExpression;
353 params: Expression[];
354 hash: Hash;
355 }
356
357 interface PathExpression extends Expression {
358 type: 'PathExpression';
359 data: boolean;
360 depth: number;
361 parts: string[];
362 original: string;
363 }
364
365 interface Literal extends Expression {}
366 interface StringLiteral extends Literal {
367 type: 'StringLiteral';
368 value: string;
369 original: string;
370 }
371
372 interface BooleanLiteral extends Literal {
373 type: 'BooleanLiteral';
374 value: boolean;
375 original: boolean;
376 }
377
378 interface NumberLiteral extends Literal {
379 type: 'NumberLiteral';
380 value: number;
381 original: number;
382 }
383
384 interface UndefinedLiteral extends Literal {
385 type: 'UndefinedLiteral';
386 }
387
388 interface NullLiteral extends Literal {
389 type: 'NullLiteral';
390 }
391
392 interface Hash extends Node {
393 type: 'Hash';
394 pairs: HashPair[];
395 }
396
397 interface HashPair extends Node {
398 type: 'HashPair';
399 key: string;
400 value: Expression;
401 }
402
403 interface StripFlags {
404 open: boolean;
405 close: boolean;
406 }
407
408 interface helpers {
409 helperExpression(node: Node): boolean;
410 scopeId(path: PathExpression): boolean;
411 simpleId(path: PathExpression): boolean;
412 }
413 }
414}
415
416declare module "handlebars" {
417 export = Handlebars;
418}
419
420declare module "handlebars/runtime" {
421 export = Handlebars;
422}