logolite
Version:
Lite Virtual Logger and Writer
43 lines (42 loc) • 1.52 kB
JavaScript
;
const argPattern = /(\{|\$\{|\#\{)[\s]*([0-9]+|[a-zA-Z_][0-9a-zA-Z_\.]*[0-9a-zA-Z_])[\s]*(\})/g;
const notFoundValue = process.env.LOGOLITE_FORMAT_NOT_FOUND_VALUE || 'not_found_value';
const stringifyFailed = process.env.LOGOLITE_STRINGIFY_FAILED_VALUE || 'stringify_failed';
function transform(a) {
let b;
if (arguments.length === 2 && typeof arguments[1] === "object") {
b = arguments[1];
} else {
b = Array.prototype.slice.call(arguments, 1);
}
if (!b || !b.hasOwnProperty) b = {};
return a.replace(argPattern, function h(c, d, f, g, e) {
if (a[e - 1] === "{" && d === "{" && a[e + c.length] === "}") {
return f; // transform {{variable}} to {variable}
} else if (a[e - 1] === "$" && d === "${") {
return "{" + f + "}"; // transform $${variable} to ${variable}
} else if (a[e - 1] === "#" && d === "#{") {
return "{" + f + "}"; // transform ##{variable} to #{variable}
} else {
let a = b.hasOwnProperty(f) ? b[f] : null;
if (a === null || a === undefined) {
let c = f.split('.');
if (c.length > 1) {
a = c.reduce(function (a, b) {
return a && a.hasOwnProperty(b) ? a[b] : null;
}, b);
}
}
if (a === null || a === undefined) return notFoundValue;
if (typeof a === "object") return stringify(a);
return a;
}
});
}
function stringify(a) {
try {
return JSON.stringify(a);
} catch (a) {}
return stringifyFailed;
}
module.exports = transform;