feat: add type definitions for hogan.js

This commit is contained in:
Andrew Leedham
2019-04-04 12:52:01 +01:00
parent 576c81e41b
commit a5f8be33a9
4 changed files with 148 additions and 0 deletions
+24
View File
@@ -0,0 +1,24 @@
import Hogan from "hogan.js";
// $ExpectType HoganTemplate
const compiled = Hogan.compile("{{#if}}{{value}}{{/if}}");
// $ExpectType string
Hogan.compile("<%_foo%><%value%><%/foo%>", {
asString: true,
sectionTags: [{
o: '_foo',
c: 'foo'
}],
delimiters: '<% %>',
disableLambda: true
});
// $ExpectType string
compiled.render({ value: "test" });
// $ExpectType Token[]
const scanned = Hogan.scan("{{#if}}{{value}}{{/if}}");
// $ExpectType Leaf[]
Hogan.parse(scanned);
+100
View File
@@ -0,0 +1,100 @@
// Type definitions for hogan.js 3.0
// Project: http://twitter.github.com/hogan.js/
// Definitions by: Andrew Leedham <https://github.com/AndrewLeedham>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.2
export interface Context {
[key: string]: any;
}
export interface SectionTags {
o: string;
c: string;
}
export interface HoganOptions {
asString?: boolean;
sectionTags?: SectionTags[];
delimiters?: string;
disableLambda?: boolean;
}
export interface Token {
tag: string;
otag?: string;
ctag?: string;
i?: number;
n?: string;
text?: string;
}
export interface Leaf extends Token {
end: number;
nodes: Token[];
}
export type Tree = Leaf[];
export class HoganTemplate {
/**
* Renders the template to a string.
*
* @param context - The data to render the template with.
* @param partials - The partials to render the template with.
* @param indent - The string to indent when rendering the template.
* @returns A rendered template.
*/
render(context: Context, partials?: Partials, indent?: string): string;
}
export interface Partials {
[symbol: string]: HoganTemplate;
}
declare namespace Hogan {
export { HoganTemplate as Template, HoganTemplate as template };
export function compile(
text: string,
options?: HoganOptions & { asString: false }
): HoganTemplate;
export function compile(
text: string,
options?: HoganOptions & { asString: true }
): string;
/**
* Compiles templates to HoganTemplate objects, which have a render method.
*
* @param text - Raw mustache string to compile.
* @param options - Options to use when compiling. See https://github.com/twitter/hogan.js#compilation-options.
* @returns A HoganTemplate.
*/
export function compile(
text: string,
options?: HoganOptions
): Template | string;
/**
* Scans templates returning an array of found tokens.
*
* @param text - Raw mustache string to scan.
* @param delimiters - A string that overrides the default delimiters. Example: "<% %>".
* @returns Found tokens.
*/
export function scan(text: string, delimiters?: string): Token[];
/**
* Structures tokens into a tree.
*
* @param tokens - An array of scanned tokens.
* @param text - Unused pass undefined.
* @param options - Options to use when parsing. See https://github.com/twitter/hogan.js#compilation-options.
* @returns The tree structure of the given tokens.
*/
export function parse(
tokens: Token[],
text?: undefined,
options?: HoganOptions
): Tree;
}
export default Hogan;
+23
View File
@@ -0,0 +1,23 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"es6"
],
"noImplicitAny": true,
"noImplicitThis": true,
"strictNullChecks": true,
"baseUrl": "../",
"typeRoots": [
"../"
],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true,
"strictFunctionTypes": true
},
"files": [
"index.d.ts",
"hogan.js-tests.ts"
]
}
+1
View File
@@ -0,0 +1 @@
{ "extends": "dtslint/dt.json" }