composium v0.99.7
Composium™
Ultra-fast, lightweight, general purpose composition engine for Node.js
$ npm i composium
Composium is an easily and incrementally adoptable ultra fast and lightweight general purpose composition engine that targets the Node.js platform as an NPM module.
- Unopinionated
- Open source
- ISC licensed
- Dependency free
Unlike templating engines, Composium does not require the use of a templating paradigm and supports advanced logic using ECMAScript and optionally Node.js modules.
- Clear separation of presentation and logic
- Full presentation and logic support in included templates
Quickstart
Contrived example referencing data with no logic:
const composium = require('composium')
let template = '<presentation>Hi <data>firstName</data>!</presentation>'
composium.loadTemplate('Hi Template', template)
let output = composium.compose('Hi Template', { firstName: 'Sam' })Template format
Templates are comprised of a presentation tag and/or a script tag for logic and for explicit manipulation of the output.
<script>
let name = (data.firstName) ? data.firstName | 'world'
</script>
<presentation>
<p>Hello <variable>name</variable>!</p>
<presentation>Presentation tag
The presentation tag contains a tag-based logicless template for merging copy with data and variables created in a corresponding script tag.
- Required when
scripttag is absent - White space is preserved
- Data and variable value encoding can be specified optionally with a
profile
Quick guide
| Tag | Use |
| ------ | ------ |
| data | <data>name</data> |
| else | <if condition="condition">...<else>...</else></if>|
| for | <for each="item" in="items">...</for>|
| if | <if condition="condition">...</if>|
| include | <include>name</include>|
| variable | <variable>name</variable |
Script tag
The script tag contains ECMAScript for template logic and for optionally manipulating the output explicitly.
- Required when
presentationtag is absent
Any variable created in the script tag can be referenced by the variable tag in the presentation.
Quick guide
| Object | Use |
| ------ | ------ |
| data | data.property[.property] etc |
| include | include('templateName') |
| output | output.clear() |
| output | output.set('string') |
| output | output.toString() |
| profile | profile.property[.property] etc |
| require | require('moduleName') |
| workspace | workspace.get('name') |
| workspace | workspace.set('name',object) |
Profile
The profile provides a mechanism for externalizing behavior for a single compose call.
- A profile is not required
- Encoding settings for data and variables (defaults to
none) - Before/After compostion to optionally invoke specified template(s) by name
- Properties can be referenced within logic to customize behavior
Quick guide
{
name: 'Profile name',
variableEncoding: 'none/xml/html',
dataEncoding: 'none/xml/html',
beforeComposition: ['Template name'],
afterComposition: ['Template name'],
properties: {
samplePropertyName: 'samplePropertyValue'
}
}Coming soon!
- Custom tags
- Enhanced encoding support
- Data and variable defaulting
- Variable prefix whitelisting
- More...
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
7 years ago
7 years ago