@evojs/logger
Version:
Nodejs logger
60 lines (59 loc) • 1.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.cleanText = cleanText;
exports.floatRight = floatRight;
exports.resolveSeparators = resolveSeparators;
exports.toJson = toJson;
/* eslint-disable lodash/prefer-lodash-typecheck */
const ANSI_COLORS_REPLACE_MASK =
// eslint-disable-next-line no-control-regex
/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
function cleanText(text) {
return text.replace(ANSI_COLORS_REPLACE_MASK, '');
}
function floatRight(maxLength, leftText, rightText) {
if (!rightText) {
return leftText;
}
const ltLength = cleanText(leftText).length;
const rtLength = cleanText(rightText).length;
if (ltLength + rtLength < maxLength) {
const spacesLength = maxLength - ltLength - rtLength;
return leftText + ' '.repeat(spacesLength) + rightText;
}
if (leftText) {
return `${leftText}\n${rightText}`;
}
return rightText;
}
function resolveSeparators(text, separator, lineLength) {
return text
.split('\n')
.map((s) => {
const parts = s.split(separator);
const res = [];
for (let i = 0, lt, rt; i < parts.length; i += 2) {
lt = parts[i];
rt = parts[i + 1];
if (rt === undefined) {
res.push(lt);
continue;
}
res.push(floatRight(lineLength, lt, rt));
}
return res.join('\n');
})
.join('\n');
}
function toJson(data) {
const cache = [];
return JSON.stringify(data, (key, value) => {
if (typeof value === 'object' && value) {
if (cache.includes(value)) {
return `[circular]`; // TODO: key from cache
}
cache.push(value);
}
return value;
});
}