npm.io
1.0.1 • Published 1 month ago

@codewaveds/beautify-json-log

Licence
MIT
Version
1.0.1
Deps
0
Size
141 kB
Vulns
0
Weekly
0

beautify-json-log

Uma biblioteca para visualizar e inspecionar valores JavaScript/JSON com realce de sintaxe por tipo, tanto no terminal (Node.js) quanto em aplicações React.


Instalação

npm i -D @codewaveds/beautify-json-log
# ou
yarn add -D @codewaveds/beautify-json-log

Terminal

import { BeautifyJsonLog } from '@codewaveds/beautify-json-log';

BeautifyJsonLog('Meu objeto', {
  nome: 'Alice',
  idade: 30,
  ativo: true,
  score: null,
  tags: ['admin', 'user'],
  criado: new Date(),
  meta: new Map([['chave', 1]]),
  ids: new Set([1, 2, 3]),
});

Exibe no terminal uma visualização colorida e formatada, com suporte completo a:

  • Chaves em verde
  • Strings em azul
  • Números em amarelo
  • Booleanos em magenta
  • Null / Error em vermelho
  • Date / Map / Set em ciano
  • undefined em cinza
  • Referências circulares detectadas e exibidas como [Circular]
  • BigInt com sufixo n
Opções
BeautifyJsonLog('título', valor, {
  indent: 4,           // espaços de indentação (padrão: 2)
  theme: meuTema,      // AnsiTheme customizado
  transport: console.error, // onde enviar a saída (padrão: console.log)
  plugins: [minhaTransformação], // transforma a árvore antes de renderizar
});

React

import { JsonViewer } from '@codewaveds/beautify-json-log';

<JsonViewer title="Resposta da API" value={data} />
Props
Prop Tipo Padrão Descrição
value unknown Valor a exibir
title string Título opcional acima do viewer
theme CssTheme tema padrão (VS Code dark) Cores CSS para cada tipo
indent number 16 Indentação em pixels
plugins Plugin[] [] Transforma a árvore antes de renderizar
style CSSProperties Estilo do container

Plugins

Plugins são funções que recebem o nó raiz da árvore (RenderNode) e retornam um nó transformado. Útil para ocultar campos sensíveis, mascarar valores, etc.

import { BeautifyJsonLog, Plugin } from '@codewaveds/beautify-json-log';

const redact: Plugin = node => {
  if (node.kind !== 'object') return node;
  return {
    ...node,
    entries: node.entries.map(e =>
      e.key === 'senha'
        ? { key: e.key, value: { kind: 'primitive', valueType: 'string', raw: '"[REDACTED]"' } }
        : e
    ),
  };
};

BeautifyJsonLog('Usuário', usuario, { plugins: [redact] });

O mesmo plugin funciona tanto no terminal quanto no <JsonViewer>.


Temas

Terminal (AnsiTheme)
import { BeautifyJsonLog, AnsiTheme } from '@codewaveds/beautify-json-log';

const meuTema: AnsiTheme = {
  key: s => `\x1b[35m${s}\x1b[0m`,      // magenta
  string: s => `\x1b[33m${s}\x1b[0m`,   // amarelo
  number: s => `\x1b[36m${s}\x1b[0m`,   // ciano
  boolean: s => `\x1b[32m${s}\x1b[0m`,  // verde
  null: s => `\x1b[31m${s}\x1b[0m`,     // vermelho
  undefined: s => s,
  bigint: s => `\x1b[36m${s}\x1b[0m`,
  date: s => `\x1b[34m${s}\x1b[0m`,
  error: s => `\x1b[31m${s}\x1b[0m`,
  bracket: s => s,
  punctuation: s => s,
  circular: s => `\x1b[31m${s}\x1b[0m`,
  special: s => `\x1b[34m${s}\x1b[0m`,
};

BeautifyJsonLog('Log', dados, { theme: meuTema });
React (CssTheme)
import { JsonViewer, CssTheme } from '@codewaveds/beautify-json-log';

const meuTema: CssTheme = {
  key: '#c586c0',
  string: '#ce9178',
  number: '#b5cea8',
  boolean: '#569cd6',
  null: '#f44747',
  undefined: '#808080',
  bigint: '#b5cea8',
  date: '#4fc1ff',
  error: '#f44747',
  bracket: '#d4d4d4',
  punctuation: '#d4d4d4',
  circular: '#f44747',
  special: '#4fc1ff',
};

<JsonViewer value={dados} theme={meuTema} />

API

// Renderização no terminal
BeautifyJsonLog(title: string, value: unknown, options?: LoggerOptions): void
formatTree(node: RenderNode, options?: FormatOptions): string
buildTree(value: unknown): RenderNode

// Componente React
<JsonViewer value={unknown} ...props />

// Tipos
type Plugin = (node: RenderNode) => RenderNode
type Transport = (output: string) => void
type AnsiTheme = Record<ThemeKey, (s: string) => string>
type CssTheme = Record<ThemeKey, string>