aboutsummaryrefslogtreecommitdiff
path: root/node_modules/pupa/index.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2022-06-04 08:51:01 +0200
committerMinteck <contact@minteck.org>2022-06-04 08:51:01 +0200
commit383285ecd5292bf9a825e05904955b937de84cc9 (patch)
tree0a53b6f02c1604b078044567c03dc1b6c944c8c2 /node_modules/pupa/index.js
downloadequestriadb-383285ecd5292bf9a825e05904955b937de84cc9.tar.gz
equestriadb-383285ecd5292bf9a825e05904955b937de84cc9.tar.bz2
equestriadb-383285ecd5292bf9a825e05904955b937de84cc9.zip
Initial commit
Diffstat (limited to 'node_modules/pupa/index.js')
-rw-r--r--node_modules/pupa/index.js39
1 files changed, 39 insertions, 0 deletions
diff --git a/node_modules/pupa/index.js b/node_modules/pupa/index.js
new file mode 100644
index 0000000..85739eb
--- /dev/null
+++ b/node_modules/pupa/index.js
@@ -0,0 +1,39 @@
+'use strict';
+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}\``);
+ }
+
+ // The regex tries to match either a number inside `{{ }}` or a valid JS identifier or key path.
+ const doubleBraceRegex = /{{(\d+|[a-z$_][a-z\d$_]*?(?:\.[a-z\d$_]*?)*?)}}/gi;
+
+ if (doubleBraceRegex.test(template)) {
+ template = template.replace(doubleBraceRegex, (_, key) => {
+ let result = data;
+
+ for (const property of key.split('.')) {
+ result = result ? result[property] : '';
+ }
+
+ return htmlEscape(String(result));
+ });
+ }
+
+ const braceRegex = /{(\d+|[a-z$_][a-z\d$_]*?(?:\.[a-z\d$_]*?)*?)}/gi;
+
+ return template.replace(braceRegex, (_, key) => {
+ let result = data;
+
+ for (const property of key.split('.')) {
+ result = result ? result[property] : '';
+ }
+
+ return String(result);
+ });
+};