Skip to content

analyze()

O núcleo semântico da dumpkit. A função analyze() percorre qualquer valor em runtime e constrói uma árvore de análise rica e independente de formatação – não é uma string, mas sim uma estrutura de dados que representa a forma interna do valor.

Esta árvore pode ser usada programaticamente para compreender a estrutura dos dados, detectar referências circulares ou partilhadas, e servir de base para diferentes visualizações (flat, tree, table).


Sintaxe

ts
analyze(valor: unknown, opcoes?: AnalyzeOptions): AnalysisNode

Parâmetros

ParâmetroTipoDescrição
valorunknownO valor a ser analisado
opcoesAnalyzeOptionsOpções de configuração (profundidade, limites, etc.)

Opções

OpçãoTipoPadrãoDescrição
depthnumber30Profundidade máxima de análise
maxArrayLengthnumber1000Número máximo de itens de array analisados
maxStringLengthnumber5000Comprimento máximo de string
maxPropertiesnumber200Número máximo de propriedades de objeto
showHiddenbooleanfalseIncluir propriedades não enumeráveis e símbolos

Retorno – AnalysisNode

A AnalysisNode é um nó de uma árvore que descreve semanticamente o valor. Cada nó possui uma propriedade type, que pode ser:

TipoDescrição
primitiveValores primitivos (string, número, booleano, null, undefined, bigint, symbol)
objectObjetos (com className, properties e flag truncated)
arrayArrays (com length, items e truncated)
mapMap (com size, entries e truncated)
setSet (com size, values e truncated)
dateDate (com isValid e value ISO)
errorError (com name e message)
regexpRegExp (com source e flags)
functionFunção (com name)
typedarrayTypedArray (com className, items e truncated)
weakmapWeakMap (apenas tipo)
weaksetWeakSet (apenas tipo)
promisePromise (apenas tipo)
circularReferência circular detectada
sharedObjeto partilhado (referenciado múltiplas vezes)

Exemplos

Análise programática

js
import { analyze } from 'dumpkit';

const user = {
  name: 'João',
  age: 30,
  tags: ['admin', 'user']
};

const analysis = analyze(user);
console.log(analysis.type);                // 'object'
console.log(analysis.properties.length);   // 3
console.log(analysis.properties[0].key);   // 'name'

Deteção de referências circulares

js
const circular = {};
circular.self = circular;

const analysis = analyze(circular);
// analysis.properties[0].value.type === 'circular'
// analysis.properties[0].value.refId === 1

Limitar profundidade

js
const deep = { a: { b: { c: 'valor' } } };
const shallow = analyze(deep, { depth: 1 });
// shallow.properties[0].value.type === 'object' (não expandido)

Objecto partilhado

js
const shared = { x: 1 };
const data = { a: shared, b: shared };

const analysis = analyze(data);
// analysis.properties[0].value.type === 'object'
// analysis.properties[1].value.type === 'shared'
// analysis.properties[1].value.refId === 1

Porquê usar analyze()?

  • Compreensão estrutural – obtenha programaticamente a estrutura de qualquer valor
  • Extensibilidade – crie os seus próprios visualizadores em cima da análise
  • Performance – análise isolada da formatação (pode ser cacheada)
  • Deteção avançada – identifique referências circulares e partilhadas

Veja também

  • inspect() – formata valores para string usando diferentes visualizações
  • dump() – imprime valores com suporte a flat, tree e table

MIT License