@teaui/core
Version:
A high-level terminal UI library for Node
174 lines • 5.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.colorize = void 0;
exports.isDebugging = isDebugging;
exports.inspect = inspect;
const ansi_1 = require("./ansi");
let _debug = false;
function isDebugging(enabled) {
if (enabled !== undefined) {
_debug = enabled;
}
return _debug;
}
function isEmpty(object) {
for (const key in object) {
return false;
}
return true;
}
const MAX = 200;
function inspect(value, wrap = true, recursionDepth = 0, visited = new Set()) {
if (value && (typeof value === 'object' || typeof value === 'function')) {
if (visited.has(value)) {
return (0, ansi_1.red)('[Circular]');
}
else {
visited = new Set(visited);
visited.add(value);
}
}
if (recursionDepth >= 10) {
return (0, ansi_1.red)('...');
}
if (value instanceof Set) {
return `new Set(${inspect(Array.from(value.values()), wrap, recursionDepth, visited)})`;
}
if (value instanceof Map) {
return `new Map(${inspect(value.entries(), wrap, recursionDepth, visited)})`;
}
const tab = ' '.repeat(recursionDepth);
const innerTab = tab + ' ';
if (Array.isArray(value)) {
if (value.length === 0) {
return '[]';
}
const values = value.map(val => inspect(val, wrap, recursionDepth + 1, visited));
const count = values.reduce((len, val) => len + val.length, 0);
const newline = wrap && count > MAX;
let inner;
if (newline) {
const [prev, line] = values.reduce(([prev, line], value) => {
if (line.length + value.length > MAX) {
return [(prev ? prev + `,\n${innerTab}` : '') + line, value];
}
return [prev, line ? line + ', ' + value : value];
}, ['', '']);
inner = (prev ? prev + `,\n${innerTab}` : '') + line;
}
else {
inner = values.join(', ');
}
return newline ? `[\n${innerTab}${inner}\n${tab}]` : `[ ${inner} ]`;
}
else if (typeof value === 'string') {
return exports.colorize.string(value, recursionDepth > 0);
}
else if (typeof value === 'symbol') {
return exports.colorize.symbol(value);
}
else if (typeof value === 'number' ||
typeof value === 'boolean' ||
value === undefined ||
value === null) {
return exports.colorize.format(value);
}
else if (typeof value === 'function') {
return `function${value.name ? ` ${value.name}` : ''}() {…}`;
}
else if (value instanceof Object &&
value.constructor !== Object &&
isEmpty(value)) {
return `${value.constructor.name}({})`;
}
const name = value.constructor === undefined
? ''
: value.constructor.name === 'Object'
? ''
: value.constructor.name.concat(' ');
const keys = Object.keys(value);
if (keys.length === 0) {
return '{}';
}
// weird ReactFiberNode one-off
if ('$$typeof' in value && '_owner' in value) {
const { _owner: _, ...remainder } = value;
return inspect(remainder, wrap, recursionDepth, visited);
}
const values = keys.map(key => `${exports.colorize.key(key)}: ${inspect(value[key], wrap, recursionDepth + 1, visited)}`);
const count = values.reduce((len, val) => len + val.length, 0);
const newline = wrap && count > MAX;
let inner;
if (newline) {
const [prev, line] = values.reduce(([prev, line], value) => {
if (line.length + value.length > MAX) {
return [(prev ? prev + `,\n${innerTab}` : '') + line, value];
}
return [prev, line ? line + ', ' + value : line];
}, ['', '']);
inner = (prev ? prev + `,\n${innerTab}` : '') + line;
inner = values.join(`,\n${innerTab}`);
}
else {
inner = values.join(', ');
}
return newline
? `${name}{\n${innerTab}${inner}\n${tab}}`
: `${name}{ ${inner} }`;
}
exports.colorize = {
format: function (input) {
switch (typeof input) {
case 'string':
return exports.colorize.string(input);
case 'symbol':
return exports.colorize.symbol(input);
case 'number':
return exports.colorize.number(input);
case 'undefined':
return exports.colorize.undefined();
case 'object':
return exports.colorize['null']();
default:
return String(input);
}
},
number: function (input) {
return (0, ansi_1.yellow)(''.concat(String(input)));
},
symbol: function (input) {
return (0, ansi_1.red)(''.concat(String(input)));
},
string: function (input, doQuote = true) {
let quote;
if (doQuote) {
if (input.includes("'")) {
quote = '"';
input = input.replaceAll('"', '\\"');
}
else {
quote = "'";
input = input.replaceAll("'", "\\'");
}
}
else {
quote = '';
}
input = input.replaceAll(/\n/g, '⤦');
input = input.replaceAll(/\x1b/g, '␛');
return (0, ansi_1.green)(quote.concat(input, quote));
},
key: function (input) {
return (0, ansi_1.cyan)(String(input));
},
boolean: function (input) {
return (0, ansi_1.yellow)(''.concat(String(input)));
},
undefined: function () {
return (0, ansi_1.gray)('undefined');
},
null: function () {
return (0, ansi_1.bold)('null');
},
};
//# sourceMappingURL=inspect.js.map