diff --git a/lib/handlebars/runtime.js b/lib/handlebars/runtime.js index 3884e88c8..a73ebd280 100644 --- a/lib/handlebars/runtime.js +++ b/lib/handlebars/runtime.js @@ -209,6 +209,9 @@ export function wrapProgram(container, i, fn, data, declaredBlockParams, blockPa return prog; } +/** + * This is currently part of the official API, therefore implementation details should not be changed. + */ export function resolvePartial(partial, context, options) { if (!partial) { if (options.name === '@partial-block') { diff --git a/types/index.d.ts b/types/index.d.ts index d075e234a..99ec21364 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -7,6 +7,7 @@ * - Raanan Weber * - Sergei Dorogin * - webbiesdk + * - Andrew Leedham * For full history prior to their migration to handlebars.js, please see: * https://github.com/DefinitelyTyped/DefinitelyTyped/commits/1ce60bdc07f10e0b076778c6c953271c072bc894/types/handlebars/index.d.ts */ @@ -20,6 +21,7 @@ declare namespace Handlebars { export type Template = TemplateDelegate|string; export interface RuntimeOptions { + name?: string; partial?: boolean; depths?: any[]; helpers?: { [name: string]: Function }; @@ -147,6 +149,13 @@ declare namespace Handlebars { NullLiteral(): void; Hash(hash: hbs.AST.Hash): void; } + + export namespace VM { + /** + * @deprecated + */ + export function resolvePartial(partial: HandlebarsTemplateDelegate | undefined, context: any, options: RuntimeOptions): HandlebarsTemplateDelegate; + } } /** @@ -223,6 +232,8 @@ interface Logger { log(level: number, obj: string): void; } +type CompilerInfo = [number/* revision */, string /* versions */]; + declare namespace hbs { namespace AST { interface Node { diff --git a/types/test.ts b/types/test.ts index f242f55bc..24951f48b 100644 --- a/types/test.ts +++ b/types/test.ts @@ -90,6 +90,16 @@ const parsedTmpl = Handlebars.parse('

Hello, my name is {{name}}.

', { const parsedTmplWithoutOptions = Handlebars.parse('

Hello, my name is {{name}}.

'); +// Custom partial resolution. +const originalResolvePartial = Handlebars.VM.resolvePartial; +Handlebars.VM.resolvePartial = (partial: HandlebarsTemplateDelegate | undefined, context: any, options: RuntimeOptions): HandlebarsTemplateDelegate => { + const name = options.name; + // transform name. + options.name = name; + return originalResolvePartial(partial, context, options); +} + + // #1544, allow custom helpers in knownHelpers Handlebars.compile('test', { knownHelpers: {