Customization
Custom Directive
typescript
import { render, Traversal, type Loc } from 'janja';
class CustomNode extends Traversal {
readonly type = 'CUSTOM';
constructor(public readonly loc: Loc) {
super();
}
}
await render('{{ custom }}', {}, {
parsers: {
*custom(token) {
yield 'NEXT';
yield new CustomNode(token.loc);
},
},
compilers: {
CUSTOM: (node, compiler) => {
compiler.pushStr(node.loc, '<CUSTOM/>');
},
},
});
// "<CUSTOM/>"Custom Filter
typescript
import { Renderer } from 'janja';
const renderer = new Renderer({
filters: {
my_filter(value) {
return `Custom: ${value}`;
},
},
});
await renderer.render('{{= foo | my_filter }}', { foo: 'bar' });
// "Custom: bar"Filters may be async.