-
-
Notifications
You must be signed in to change notification settings - Fork 12
Known issues
For the sake of speed and smaller code size, some edge cases are not addressed but you should be aware of:
Paths cannot be expressions
const scope = {
arr: [10,20,30,40]
}
const template = `{{arr[1+1]}}`
// Gives a syntax error instead of `arr[2]`However, you can process the paths (after using parse()) to support any syntax or DSL you desire.
Paths cannot include the ']' character
For example if you have an object like:
const a = {
']': 'close'
}a[']'] will not give 'close' but rather throws a syntax error complaining that you have a mismatching quotation!
Paths cannot contain the open or close tags even when properly quoted
Examples:
Hello {{name["{{"]}}!Hello {{name["}}"]}}!
Paths can start with a dot (.)
Hello {{.name}} is the same as Hello {{name}}
Paths don't require string delimiters:
Suppose you have this in Javascript:
const a = {
'foo': 'bar'
}If you want to get the value of the foo property, in Javascript you can say a['foo']. This works in micromustache too but you can also say a[foo] which is not valid Javascript strictly speaking but works without error.
This has a side effect that might be surprising:
const foo = 'baz'
const a = {
foo: 'bar',
baz: 'qux'
}
console.log(micromustache.render('{{a['foo']}}'))
// 'bar'
console.log(`${a['foo']}`)
// 'bar'
console.log(micromustache.render('{{a[foo]}}`)
// 'bar'
console.log(`${a[foo]}`)
// 'qux'No support for comments
Unlike Mustache.js you cannot comment a path. You can of course work around this limitation by using your own resolve function.
No escape sequence
The templates cannot currently contain {{ and there's no way to escape it. One workaround is to literally pass '{{' as a value for a variable. Another workaround is to explicitly set the tags option to something other than ['{{', '}}'], for example ['<', '>'].
No nested paths
Currently there is no way to use a nested path:
const scope = {
a: ['Java', 'Python', 'Ruby'],
b: 1
}
micromustache.render(`My favorite language is not {{a[b]}}`)
// 'foo'Will not give 'Python' because a[b] is treated as a['b'] or a.b. In other words instead of scope.a[scope.b] it gives the value of scope.a.b.
Made in Sweden 🇸🇪 by @alexewerlof