-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
31 lines (23 loc) · 914 Bytes
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"use strict";
const objectPath = require("object-path");
const { htmlEscape } = require("escape-goat");
module.exports = (template, data) => {
if (typeof template !== "string") {
throw new TypeError(`Expected a \`string\` in the first argument, got \`${typeof template}\``);
}
if (typeof data !== "object") {
throw new TypeError(`Expected an \`object\` or \`Array\` in the second argument, got \`${typeof data}\``);
}
const doubleBraceRegex = /{{(.*?)}}/gi;
if (doubleBraceRegex.test(template)) {
template = template.replace(doubleBraceRegex, (_, key) => {
const result = objectPath.get(data, key);
return htmlEscape(String(result));
});
}
const braceRegex = /{(.*?)}/gi;
return template.replace(braceRegex, (_, key) => {
const result = objectPath.get(data, key);
return String(result);
});
};