TBLK is a JavaScript (TypeScript) template engine which uses JavaScript expressions syntax, it is mainly developed to be used in code generators.
Features:
- Pre-compiles templates to both JavaScript and TypeScript.
- Dynamic templates using the API.
- Supports JavaScript expressions.
- Multi-file templates (Supports partials.)
- Tries to preserve white spaces and line indention.
- It compiles to native JavaScript code so it's FAST!
- Generates source maps.
If you want to use the API install it as a dependency:
yarn add tblk
otherwise install tblk
as a development dependency:
yarn add -D tblk
# Using a configuration file:
npx tblk -config config.tblk.json
# Manual usage:
npx tblk file1.tblk file2.tblk -ts -no-source-map -o dist
Sample config file:
{
"outDir": "./dist",
"compilerOptions": {
"sourceMap": false,
"typescript": true
},
"include": [
"templates/**/*.tblk"
]
}
Files that are prefixed by an underscore are treated as partials, take look at the example directory to learn more.
import * as tblk from 'tblk';
const template = tblk.compile(`<% a %> + <% b %> = <% a + b %>`);
console.log(template({a: 2, b: 3})); // 2 + 3 = 5
All the commands are supposed to be inside <% ... %>
, otherwise they are treated
as normal text.
There are only a few commands:
- Condition
- Loop
- Partial Definition
- Partial
<% expression %>
2 + 2 = <% 2 + 2 %>
<% if expression %>
Consequence 1
<% else if expression %>
Consequence 2
<% else %>
Alternate
<% /if %>
<% for identifier in expression %>
<% /for %>
Loops also support in-place filtering of the data using the |>
operator:
<% for identifier in expression |> x >= 5 %>
<% /for %>
2 + 3 = <% #sum a=2 b=3 %>
<% function sum %>
<% a + b %>
<% /function %>
When I tried other template engines there were problems with indention, take a look at the following example:
<% "A\nB\nC" %>
Where most template engines will print something like:
A
B
C
TBLK tries to preserve the line indention by printing:
A
B
C
Another problem appears when you try to split your template into separate
modules, with TBLK you just have to prefix your filename with an _
and
you can use it in other parts just by writing <% #filename x=2 y=3 ... %>
.
Please do!