@fireenjin/cli
Version:
A set of tools for speeding up production of full-stack Firebase projects.
44 lines (40 loc) • 1.32 kB
text/typescript
import * as Handlebars from "handlebars";
import getHandlebarsHelpers from "./getHandlebarsHelpers";
let currentHelpers: string[] = [];
declare type CustomHelpers = { [helperName: string]: any };
/**
* Render a lump of handlebars
*/
export default function renderHandlebars(
templateStr: string,
data?: any,
options?: {
partials?: { id: string; html?: string }[];
helpers?: CustomHelpers;
}
): string {
for (const partial of options?.partials || []) {
Handlebars.registerPartial(partial.id, partial?.html || "");
}
try {
const helpers = (
Object.keys(options?.helpers || []).length
? options?.helpers
: getHandlebarsHelpers()
) as CustomHelpers;
for (const [helperName, helperFn] of Object.entries(helpers)) {
try {
if (currentHelpers.includes(helperName))
Handlebars.unregisterHelper(helperName);
Handlebars.registerHelper(helperName, helperFn as any);
if (!currentHelpers.includes(helperName))
currentHelpers = [...currentHelpers, helperName];
} catch (error) {
console.log(`Error setting helper ${helperName}.`, error);
}
}
} catch {
console.log("Error setting helpers.");
}
return Handlebars.compile(templateStr)(data);
}