UNPKG

pojo-dump

Version:

JSON printer, print JSON or any POJO to terminal or debug window

86 lines (85 loc) 3.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.toLine = void 0; const util_1 = require("./util"); const dataViewContents = (view) => ' ' + (view.length ? `{ ${view .toString() .split(',') .map((byte) => Number(byte) .toString(16) .toUpperCase() .padStart(view.BYTES_PER_ELEMENT << 1, '0')) .join(' ')} }` : '{}'); const toLine = (value, spacing = ' ') => { switch (value) { case null: return '!n'; case undefined: return '!u'; case true: return '!t'; case false: return '!f'; } switch (typeof value) { case 'number': case 'bigint': { const formatted = typeof value === 'number' && Math.round(value) !== value ? value + '' : Intl.NumberFormat('en-US').format(value) + (typeof value === 'bigint' ? 'n' : ''); if (formatted[0] === '0' && formatted[1] === '.') return formatted.slice(1); return formatted; } case 'string': { if (!value) return '""'; const parts = value.split(/([\u0000-\u001F]|\n|\t)/); return parts .filter(Boolean) .map((part) => { if (part === '\n') return '⏎'; if (part === '\t') return '⇥'; if (part.length === 1 && part.charCodeAt(0) < 32) return '\\x' + part.charCodeAt(0).toString(16).padStart(2, '0'); return (0, util_1.dim)('"') + JSON.stringify(part).slice(1, -1) + (0, util_1.dim)('"'); }) .join(' '); } case 'object': { if (Array.isArray(value)) return value.length ? `[${spacing}${value.map((v) => (0, exports.toLine)(v, spacing)).join(',' + spacing)}${spacing}]` : '[]'; if (value instanceof DataView) return (value.constructor.name + dataViewContents(new Uint8Array(value.buffer, value.byteOffset, value.byteLength))); if (ArrayBuffer.isView(value)) return value.constructor.name + dataViewContents(value); if (value instanceof ArrayBuffer) return 'ArrayBuffer' + dataViewContents(new Uint8Array(value)); if (value instanceof Date) return 'Date { ' + value.getTime() + ' }'; if (value instanceof RegExp) return value + ''; const keys = Object.keys(value); if (!keys.length) return '{}'; return `{${spacing}${keys .map((k) => `${k}${spacing}${(0, util_1.dim)('=')}${spacing}${(0, exports.toLine)(value[k], spacing)}`) .join(',' + spacing)}${spacing}}`; } case 'function': { return `fn ${(0, exports.toLine)(value.name)} ( ${value.length} args )`; } case 'symbol': { return `sym ( ${value.description} )`; } } return '?'; }; exports.toLine = toLine;