Makuco UI
Geral

Telemetria

Telemetria de adoção do Makuco UI — o que é coletado, como habilitar restrita a desenvolvimento, e como desabilitar.

O Makuco UI expõe uma telemetria opcional de adoção, exportada diretamente de @db1/makuco-ui-core. Ela responde perguntas como "quais projetos já migraram para a versão X" ou "vale continuar investindo no wrapper Angular" — não mede frequência de uso, nem props ou valores configurados nos componentes.

Conteúdo


O que é coletado

CampoOrigem
projectNamePassado explicitamente em initTelemetry({ projectName }).
makucoVersionVersão instalada de @db1/makuco-ui-core, injetada em build-time.
framework'react', 'angular' ou 'unknown' — auto-detectado via fingerprint no DOM (Fiber/Ivy).
componentsNomes canônicos (mk-button, mk-input, …) dos componentes montados na sessão.

Nenhum dado de usuário, prop ou valor configurado é coletado — só o fato de que um componente foi montado.

Como funciona

Cada componente mk-* chama trackComponentUsage no próprio componentDidLoad. Os nomes vão se acumulando em memória (sem uma requisição por componente) e são enviados de uma vez, via navigator.sendBeacon, quando a aba perde visibilidade ou é fechada (visibilitychange para hidden, ou pagehide). Isso mantém o custo de rede em um envio por sessão de aba, não um por componente.

Se a aba estiver offline no momento do envio, o lote fica retido e é reenviado na próxima tentativa de flush — nada é descartado silenciosamente.

Habilitando

import { initTelemetry } from '@db1/makuco-ui-core';

initTelemetry({ projectName: 'meu-app' });

projectName é obrigatório — sem ele (ou com uma chamada a initTelemetry que nunca aconteceu), nenhum evento é enfileirado ou enviado. framework pode ser passado explicitamente para pular a auto-detecção via DOM, mas normalmente não é necessário.

Guarda de ambiente

Não existe detecção embutida de ambiente dev/prod — essa distinção é responsabilidade do consumidor. Importe o subpath por trás de uma guarda que restrinja a chamada a desenvolvimento, o que também permite ao seu bundler fazer dead-code elimination do módulo inteiro no bundle de produção (mesmo padrão usado pelo MUI X e pelo Next.js):

if (process.env.NODE_ENV !== 'production') {
  import('@db1/makuco-ui-core').then(({ initTelemetry }) => {
    initTelemetry({ projectName: 'meu-app' });
  });
}

Por que a guarda não vive dentro do pacote

packages/core é publicado pré-compilado — é o build do próprio Stencil, não o do seu app, que primeiro veria um process.env.NODE_ENV embutido no pacote, congelando o resultado para sempre no artefato publicado. A guarda só funciona no ponto de import do seu projeto.

Opt-out

Independente da guarda de ambiente, a coleta desliga sozinha nos seguintes casos:

CondiçãoMotivo
process.env.CI ou process.env.TF_BUILD presenteEvita ruído de pipelines (Azure DevOps, GitHub Actions).
process.env.DO_NOT_TRACK presenteConvenção consentwg/do-not-track.
Fora de um ambiente com document (SSR, build-time)Mesmo padrão usado pelo serviço de toast.

process.env em app bundlado

Essas três checagens só têm efeito em contexto Node real (CI, SSR, scripts de build, testes) — a maioria dos bundlers de browser não expõe um process global de verdade em nenhum modo. Para produção de verdade no browser, a defesa é a guarda de ambiente da seção anterior.

Referência

FunçãoAssinaturaDescrição
initTelemetry(options: { projectName: string; framework?: 'react' | 'angular' }) => voidInicializa a telemetria. Chame uma única vez, o mais perto possível do bootstrap da aplicação.

On this page