log-vault
Version:
A generator of Winston logger instance with pre-defined configurable transports and formats and extra functionality.
51 lines (50 loc) • 1.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.formatMaskFields = void 0;
const winston_1 = require("winston");
const __1 = require("..");
const obj_walker_1 = require("obj-walker");
const defaults_1 = require("../defaults");
exports.formatMaskFields = (0, winston_1.format)((info, opts) => {
const { message, extra, error } = info;
const { fields, maskLabel, replacers } = opts;
if (fields === null || fields === void 0 ? void 0 : fields.length) {
if (message) {
info.message = mask(message);
info[__1.MESSAGE] = info.message;
}
if (extra)
info.extra = mask(extra);
if (error)
info.error = mask(error);
}
return info;
function mask(data) {
if (typeof data === 'string') {
return maskString(data);
}
return (0, obj_walker_1.map)(data, ({ key, val }) => {
if (key && fields.includes(key))
val = maskLabel || defaults_1.defaultMaskFieldsOptions.maskLabel;
if (typeof val === "string") {
const trimmed = val.trimStart();
if (trimmed.startsWith("{") || trimmed.startsWith("[")) {
try {
const parsed = JSON.parse(val);
val = JSON.stringify(mask(parsed));
// eslint-disable-next-line no-empty
}
catch (error) { }
}
val = maskString(val);
}
return val;
}, { modifyInPlace: true });
}
function maskString(val) {
replacers === null || replacers === void 0 ? void 0 : replacers.forEach(([regExp, cb]) => {
val = val.replace(regExp, cb);
});
return val;
}
});