Skip to content

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.

Released under the MIT License.