Simple micro templating
Useful when all you need is to fill in some placeholders.
npm install pupa
import pupa from 'pupa';
pupa('The mobile number of {name} is {phone.mobile}', {
name: 'Sindre',
phone: {
mobile: '609 24 363'
}
});
//=> 'The mobile number of Sindre is 609 24 363'
pupa('I like {0} and {1}', ['🦄', '🐮']);
//=> 'I like 🦄 and 🐮'
// Double braces encodes the HTML entities to avoid code injection.
pupa('I like {{0}} and {{1}}', ['<br>🦄</br>', '<i>🐮</i>']);
//=> 'I like <br>🦄</br> and <i>🐮</i>'
Note: It does not support nesting placeholders: pupa('{phone.{type}}', …)
Type: string
Text with placeholders for data
properties.
Type: object | unknown[]
Data to interpolate into template
.
The keys should be a valid JS identifier or number (a-z
, A-Z
, 0-9
).
Type: object
Type: boolean
\
Default: false
By default, Pupa throws a MissingValueError
when a placeholder resolves to undefined
. With this option set to true
, it simply ignores it and leaves the placeholder as is.
Type: ((data: {value: unknown; key: string}) => unknown) | undefined
(default: ({value}) => value
)
Performs arbitrary operation for each interpolation. If the returned value was undefined
, it behaves differently depending on the ignoreMissing
option. Otherwise, the returned value will be interpolated into a string (and escaped when double-braced) and embedded into the template.
Exposed for instance checking.
Template literals expand on creation. This module expands the template on execution, which can be useful if either or both template and data are lazily created or user-supplied.