object-placeholder
Version:
It's a zero-dependency package that exports default function: ```text placeholder(<template>, <data>, <options>) ``` and function with named params: ```text placeholder.replace({ template, data, options }) ``` where: - `template` - some template ( [string
87 lines (80 loc) • 2.23 kB
JavaScript
const test = require('ava')
const template = {
title: '{{ service.id }}',
users: [
'@{{ service.members | member }}',
'&{{ @.member }}',
],
members: '&{{ service.members }}',
admin: '&{{ service.members[0] }}',
origin: '&{{ service }}',
}
const data = {
service: {
id: 'SOME_IT_SERVICE',
members: [
{ id: 'user1', email: 'user1@test.com' },
{ id: 'user2', email: 'user2@test.com' },
{ id: 'user3', email: 'user3@test.com' },
],
},
}
const output = {
title: data.service.id,
users: data.service.members,
members: data.service.members,
admin: data.service.members[0],
origin: data.service,
}
test('placeholder: options.clone = false',
casePlaceholderDeepCloneWithout,
{ template, data, options: { clone: false } },
output
)
test('placeholder: options.clone = true',
casePlaceholderDeepClone,
{ template, data, options: { clone: true } },
output
)
test('placeholder: options.clone = function',
casePlaceholderDeepClone,
{
template,
data,
options: {
clone: (obj) => JSON.parse(JSON.stringify(obj)),
},
},
output
)
function casePlaceholderDeepClone(t, input = {}, expected) {
const { placeholder } = t.context
const { template, data, options } = input
const result = placeholder(template, data, options)
t.is(result.title, expected.title)
t.not(result.users, expected.users)
result.users.forEach((_, i) =>
t.not(result.users[i], expected.users[i])
)
t.not(result.members, expected.members)
result.members.forEach((_, i) =>
t.not(result.users[i], expected.members[i])
)
t.not(result.admin, expected.admin)
t.not(result.origin, expected.origin)
t.deepEqual(result, expected)
}
function casePlaceholderDeepCloneWithout(t, input = {}, expected) {
const { placeholder } = t.context
const { template, data, options } = input
const result = placeholder(template, data, options)
t.is(result.title, expected.title)
t.not(result.users, expected.users)
result.users.forEach((_, i) =>
t.is(result.users[i], expected.users[i])
)
t.is(result.members, expected.members)
t.is(result.admin, expected.admin)
t.is(result.origin, expected.origin)
t.deepEqual(result, expected)
}