handlebars.d.ts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. // Type definitions for Handlebars v4.0.11
  2. // Project: http://handlebarsjs.com/
  3. // Definitions by: Boris Yankov <https://github.com/borisyankov>, Sergei Dorogin <https://github.com/evil-shrike>
  4. // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
  5. // TypeScript Version: 2.3
  6. declare namespace Handlebars {
  7. export interface TemplateDelegate<T = any> {
  8. (context: T, options?: RuntimeOptions): string;
  9. }
  10. export type Template<T = any> = TemplateDelegate<T> | string;
  11. export interface RuntimeOptions {
  12. partial?: boolean;
  13. depths?: any[];
  14. helpers?: { [name: string]: Function };
  15. partials?: { [name: string]: HandlebarsTemplateDelegate };
  16. decorators?: { [name: string]: Function };
  17. data?: any;
  18. blockParams?: any[];
  19. }
  20. export interface HelperOptions {
  21. fn: TemplateDelegate;
  22. inverse: TemplateDelegate;
  23. hash: any;
  24. data?: any;
  25. }
  26. export interface HelperDelegate {
  27. (context?: any, arg1?: any, arg2?: any, arg3?: any, arg4?: any, arg5?: any, options?: HelperOptions): any;
  28. }
  29. export interface HelperDeclareSpec {
  30. [key: string]: HelperDelegate;
  31. }
  32. export function registerHelper(name: string, fn: HelperDelegate): void;
  33. export function registerHelper(name: HelperDeclareSpec): void;
  34. export function unregisterHelper(name: string): void;
  35. export function registerPartial(name: string, fn: Template): void;
  36. export function unregisterPartial(name: string): void;
  37. // TODO: replace Function with actual signature
  38. export function registerDecorator(name: string, fn: Function): void;
  39. export function unregisterDecorator(name: string): void;
  40. export function K(): void;
  41. export function createFrame(object: any): any;
  42. export function blockParams(obj: any[], ids: any[]): any[];
  43. export function Exception(message: string): void;
  44. export function log(level: number, obj: any): void;
  45. export function parse(input: string): hbs.AST.Program;
  46. export function compile<T = any>(input: any, options?: CompileOptions): HandlebarsTemplateDelegate<T>;
  47. export function precompile(input: any, options?: PrecompileOptions): TemplateSpecification;
  48. export function template<T = any>(precompilation: TemplateSpecification): HandlebarsTemplateDelegate<T>;
  49. export function create(): typeof Handlebars;
  50. export const escapeExpression: typeof Utils.escapeExpression;
  51. //export const Utils: typeof hbs.Utils;
  52. export const logger: Logger;
  53. export const templates: HandlebarsTemplates;
  54. export const helpers: { [name: string]: HelperDelegate };
  55. export const partials: { [name: string]: any };
  56. // TODO: replace Function with actual signature
  57. export const decorators: { [name: string]: Function };
  58. export function noConflict(): typeof Handlebars;
  59. export class SafeString {
  60. constructor(str: string);
  61. toString(): string;
  62. toHTML(): string;
  63. }
  64. export namespace Utils {
  65. export function escapeExpression(str: string): string;
  66. export function createFrame(object: any): any;
  67. export function blockParams(obj: any[], ids: any[]): any[];
  68. export function isEmpty(obj: any): boolean;
  69. export function extend(obj: any, ...source: any[]): any;
  70. export function toString(obj: any): string;
  71. export function isArray(obj: any): boolean;
  72. export function isFunction(obj: any): boolean;
  73. }
  74. export namespace AST {
  75. export const helpers: hbs.AST.helpers;
  76. }
  77. interface ICompiler {
  78. accept(node: hbs.AST.Node): void;
  79. Program(program: hbs.AST.Program): void;
  80. BlockStatement(block: hbs.AST.BlockStatement): void;
  81. PartialStatement(partial: hbs.AST.PartialStatement): void;
  82. PartialBlockStatement(partial: hbs.AST.PartialBlockStatement): void;
  83. DecoratorBlock(decorator: hbs.AST.DecoratorBlock): void;
  84. Decorator(decorator: hbs.AST.Decorator): void;
  85. MustacheStatement(mustache: hbs.AST.MustacheStatement): void;
  86. ContentStatement(content: hbs.AST.ContentStatement): void;
  87. CommentStatement(comment?: hbs.AST.CommentStatement): void;
  88. SubExpression(sexpr: hbs.AST.SubExpression): void;
  89. PathExpression(path: hbs.AST.PathExpression): void;
  90. StringLiteral(str: hbs.AST.StringLiteral): void;
  91. NumberLiteral(num: hbs.AST.NumberLiteral): void;
  92. BooleanLiteral(bool: hbs.AST.BooleanLiteral): void;
  93. UndefinedLiteral(): void;
  94. NullLiteral(): void;
  95. Hash(hash: hbs.AST.Hash): void;
  96. }
  97. export class Visitor implements ICompiler {
  98. accept(node: hbs.AST.Node): void;
  99. acceptKey(node: hbs.AST.Node, name: string): void;
  100. acceptArray(arr: hbs.AST.Expression[]): void;
  101. Program(program: hbs.AST.Program): void;
  102. BlockStatement(block: hbs.AST.BlockStatement): void;
  103. PartialStatement(partial: hbs.AST.PartialStatement): void;
  104. PartialBlockStatement(partial: hbs.AST.PartialBlockStatement): void;
  105. DecoratorBlock(decorator: hbs.AST.DecoratorBlock): void;
  106. Decorator(decorator: hbs.AST.Decorator): void;
  107. MustacheStatement(mustache: hbs.AST.MustacheStatement): void;
  108. ContentStatement(content: hbs.AST.ContentStatement): void;
  109. CommentStatement(comment?: hbs.AST.CommentStatement): void;
  110. SubExpression(sexpr: hbs.AST.SubExpression): void;
  111. PathExpression(path: hbs.AST.PathExpression): void;
  112. StringLiteral(str: hbs.AST.StringLiteral): void;
  113. NumberLiteral(num: hbs.AST.NumberLiteral): void;
  114. BooleanLiteral(bool: hbs.AST.BooleanLiteral): void;
  115. UndefinedLiteral(): void;
  116. NullLiteral(): void;
  117. Hash(hash: hbs.AST.Hash): void;
  118. }
  119. }
  120. /**
  121. * Implement this interface on your MVW/MVVM/MVC views such as Backbone.View
  122. **/
  123. interface HandlebarsTemplatable {
  124. template: HandlebarsTemplateDelegate;
  125. }
  126. // NOTE: for backward compatibility of this typing
  127. type HandlebarsTemplateDelegate<T = any> = Handlebars.TemplateDelegate<T>;
  128. interface HandlebarsTemplates {
  129. [index: string]: HandlebarsTemplateDelegate;
  130. }
  131. interface TemplateSpecification {
  132. }
  133. // for backward compatibility of this typing
  134. type RuntimeOptions = Handlebars.RuntimeOptions;
  135. interface CompileOptions {
  136. data?: boolean;
  137. compat?: boolean;
  138. knownHelpers?: {
  139. helperMissing?: boolean;
  140. blockHelperMissing?: boolean;
  141. each?: boolean;
  142. if?: boolean;
  143. unless?: boolean;
  144. with?: boolean;
  145. log?: boolean;
  146. lookup?: boolean;
  147. };
  148. knownHelpersOnly?: boolean;
  149. noEscape?: boolean;
  150. strict?: boolean;
  151. assumeObjects?: boolean;
  152. preventIndent?: boolean;
  153. ignoreStandalone?: boolean;
  154. explicitPartialContext?: boolean;
  155. }
  156. interface PrecompileOptions extends CompileOptions {
  157. srcName?: string;
  158. destName?: string;
  159. }
  160. declare namespace hbs {
  161. // for backward compatibility of this typing
  162. type SafeString = Handlebars.SafeString;
  163. type Utils = typeof Handlebars.Utils;
  164. }
  165. interface Logger {
  166. DEBUG: number;
  167. INFO: number;
  168. WARN: number;
  169. ERROR: number;
  170. level: number;
  171. methodMap: { [level: number]: string };
  172. log(level: number, obj: string): void;
  173. }
  174. declare namespace hbs {
  175. namespace AST {
  176. interface Node {
  177. type: string;
  178. loc: SourceLocation;
  179. }
  180. interface SourceLocation {
  181. source: string;
  182. start: Position;
  183. end: Position;
  184. }
  185. interface Position {
  186. line: number;
  187. column: number;
  188. }
  189. interface Program extends Node {
  190. body: Statement[];
  191. blockParams: string[];
  192. }
  193. interface Statement extends Node { }
  194. interface MustacheStatement extends Statement {
  195. path: PathExpression | Literal;
  196. params: Expression[];
  197. hash: Hash;
  198. escaped: boolean;
  199. strip: StripFlags;
  200. }
  201. interface Decorator extends MustacheStatement { }
  202. interface BlockStatement extends Statement {
  203. path: PathExpression;
  204. params: Expression[];
  205. hash: Hash;
  206. program: Program;
  207. inverse: Program;
  208. openStrip: StripFlags;
  209. inverseStrip: StripFlags;
  210. closeStrip: StripFlags;
  211. }
  212. interface DecoratorBlock extends BlockStatement { }
  213. interface PartialStatement extends Statement {
  214. name: PathExpression | SubExpression;
  215. params: Expression[];
  216. hash: Hash;
  217. indent: string;
  218. strip: StripFlags;
  219. }
  220. interface PartialBlockStatement extends Statement {
  221. name: PathExpression | SubExpression;
  222. params: Expression[];
  223. hash: Hash;
  224. program: Program;
  225. openStrip: StripFlags;
  226. closeStrip: StripFlags;
  227. }
  228. interface ContentStatement extends Statement {
  229. value: string;
  230. original: StripFlags;
  231. }
  232. interface CommentStatement extends Statement {
  233. value: string;
  234. strip: StripFlags;
  235. }
  236. interface Expression extends Node { }
  237. interface SubExpression extends Expression {
  238. path: PathExpression;
  239. params: Expression[];
  240. hash: Hash;
  241. }
  242. interface PathExpression extends Expression {
  243. data: boolean;
  244. depth: number;
  245. parts: string[];
  246. original: string;
  247. }
  248. interface Literal extends Expression { }
  249. interface StringLiteral extends Literal {
  250. value: string;
  251. original: string;
  252. }
  253. interface BooleanLiteral extends Literal {
  254. value: boolean;
  255. original: boolean;
  256. }
  257. interface NumberLiteral extends Literal {
  258. value: number;
  259. original: number;
  260. }
  261. interface UndefinedLiteral extends Literal { }
  262. interface NullLiteral extends Literal { }
  263. interface Hash extends Node {
  264. pairs: HashPair[];
  265. }
  266. interface HashPair extends Node {
  267. key: string;
  268. value: Expression;
  269. }
  270. interface StripFlags {
  271. open: boolean;
  272. close: boolean;
  273. }
  274. interface helpers {
  275. helperExpression(node: Node): boolean;
  276. scopeId(path: PathExpression): boolean;
  277. simpleId(path: PathExpression): boolean;
  278. }
  279. }
  280. }
  281. declare module "handlebars" {
  282. export = Handlebars;
  283. }
  284. declare module "handlebars/runtime" {
  285. export = Handlebars;
  286. }