inks
Interpolate values from a shared context into a string template (or another object).
Substitutes sections of a string marked with `` by evaluating
contents. As a convenience, the values can be referenced from a
context object.
Used by seneca-msg-test to
support back references to earlier test results.
Quick Example
const Inks = require('inks')
var out = Inks('`foo:bar`', {foo:{bar:'zed'}})
out = Inks({deep:'`foo:bar`'}, {foo:{bar:'zed'}})
out = Inks({deep:'`$.foo`'}, {foo:{bar:'zed'}})
Another example, where $
references the context object.
const context = { red: { foo: 1, bar: 'zed'}, green: { fizz: { buzz: 'FRED' }} }
const template = 'Lorem `red:foo` ipsum `$.red.foo + $.red.bar.length` dolor `green:fizz.buzz` sit \\` amet.'
const result = Inks(template, context)
// prints:
// Lorem 1 ipsum 4 dolor FRED sit ` amet.
Notes
- Value reference syntax:
key:dot-path
. - General form:
<js-expression>
where $ === context
. - Single values are not converted to a string and retain their type:
red:foo
-> 1
not '1'
. - Anything that is not a number or string is converted to a string (if embedded) using
JSON.stringify
. - Escape backticks by prefixing with a backslash:
'a\\`b' -> 'a`b'
Questions?
@rjrodger
License
Copyright (c) 2018-2020, Richard Rodger and other contributors.
Licensed under MIT.