ObjectHandlebars is a handlebars templating library for use on object properties. It is a single function that resolves handlebar expressions relative to the current object.
For example;
import {render} from '@reactgular/object-handlebars';
const data = {
first: 'John',
last: 'Smith',
fullName: '{{first}} {{last}}'
};
console.log(render(data)); // prints {first: "John", last: "Smith", fullName: "John Smith"}
To get started, install the package from npm.
npm install --save @reactgular/object-handlebars
ObjectHandlerbars is a function that takes the context object, filters and recursion depth as parameters. It does not directly modify the context object, but instead returns a deep clone.
You can install the library with npm install @reactgular/object-handlebars
and import the main function.
// using TypeScript
import {render} from '@reactgular/object-handlebars';
// using NodeJS
const objectHandlebars = require('@reactgular/object-handlebars');
objectHandlebars.render();
You can call the ObjectHandlebars function with a single object parameter, and it returns a deep clone of that object with all string properties rendered with handlebars.
// function definition for ObjectHandlebars
export type render = <TType>(obj: TType, filters: Filters = {}, maxDepth: number = 100) => TType;
// filter functions
export type Filter = (s: string) => string;
export interface Filters { [key: string]: Filter;}
Object properties that are strings will be rendered as basic handlebar templates.
import {render} from '@reactgular/object-handlebars';
console.log(render({a: "one", b: "{{a}}"})); // prints {a: "one", b: "one"}
You can pass a map of filter functions. A filter function takes a single argument of a string and returns a string. Filters
can be chained together in a handlebars expression like this {{property|filterA|filterB|filterC}}
.
import {render} from '@reactgular/object-handlebars';
const upper = (s) => s.toUppercase();
console.log(render({a: "one", b: "{{a|upper}}"}, {upper})); // prints {a: "one", b: "ONE"}
Handlebar expressions can use dot notation to reference nested values, but the path is always from the top of the context object.
import {render} from '@reactgular/object-handlebars';
const data = {
person: {
first: "John",
last: "Smith"
},
fullName: "{{person.first}} {{person.last}}"
};
console.log(render(data)); // prints {person: {first: "John", last: "Smith"}, fullName: "John Smith"}
ObjectHandlebars will render any nested objects found in arrays.
import {render} from '@reactgular/object-handlebars';
const data = {
person: {first: "John", last: "Smith"},
values: ["{{person.first}}", "{{person.last}}"],
objects: [
{fullName: "{{person.first}} {{person.last}}"}
]
};
console.log(render(data));
// prints
// {
// person: {first: "John", last: "Smith"}
// values: ["John", "Smith"],
// objects: [{fullName: "John Smith"}]
// }