Arquitetura de Plugins de Documentação
O workspace de documentação tupynambalucas.dev é alimentado estritamente pelo Docusaurus v3 e utiliza uma combinação de padrões padrão do React e transformadores avançados de Árvore de Sintaxe Abstrata (AST).
1. Wrappers de Plugins de Domínio (Arquitetura SSOT)
Para aplicar o Single Source of Truth (SSOT) e manter um docusaurus.config.ts limpo, o monorepo utiliza um Preset Customizado do Docusaurus (@/docs/preset/). Este preset é o núcleo autoritativo que encapsula e configura todos os motores de documentação subjacentes.
Em vez de declarar os plugins principais do Docusaurus diretamente no array de presets, utilizamos Wrappers de Plugins de Domínio (localizados em preset/plugins/):
content-docscontent-blogcontent-pages
O Ciclo de Vida do Wrapper
Cada wrapper de domínio importa o plugin nativo do Docusaurus (por exemplo, @docusaurus/plugin-content-docs), mescla dinamicamente nossas regras corporativas e, em seguida, invoca o plugin nativo. Isso garante que todas as instâncias de documentação — seja o manual principal, o roadmap ou as especificações de workspaces — sejam forçadas a passar automaticamente pelos nossos pipelines de sanitização e injeção de AST.
- Validação de Opções: Os wrappers reexportam
validateOptionspara atender aos validadores de esquema estritos do Docusaurus. - Injeção de AST: Os wrappers anexam automaticamente o plugin customizado
remark-project-variablesao arrayremarkPlugins. - Preservação de Contexto: Os wrappers retornam exatamente o nome original (por exemplo,
docusaurus-plugin-content-docs) para garantir que os componentes de UI do React resolvam corretamente os dados de contexto global durante a Geração do Lado do Servidor (SSG).
2. O Plugin remark-project-variables
Para manter um monorepo genérico e pronto para copiar e colar, a documentação NÃO DEVE conter nomes de marcas ou URLs hardcoded (por exemplo, example.com). Em vez disso, os autores devem escrever tokens genéricos usando wrappers de porcentagem, como tupynambalucas.dev ou Tupynambalucas.
Como Funciona
- Transformação de AST: O plugin customizado
remark-project-variablesse conecta ao pipeline de compilação MDX do unified/remark. - Intercepção de Nó de Texto: Ele percorre a AST do Markdown (
mdast) utilizandounist-util-visit. - Resolução de Valores: Ele intercepta nós do tipo
text,inlineCode,linkeimage, e busca por padrões comotupynambalucas.dev. - Substituição: Ele substitui esses tokens por valores reais obtidos de uma única fonte de verdade (
project.config.json) antes que o MDX seja compilado em React JSX.
Esta arquitetura garante que os embeddings de IA RAG (como os vetores de cortex/memory) ingeriram os arquivos de origem agnósticos, evitando a alucinação de marcas quando o repositório for bifurcado ou aplicado a novos clientes.
3. Coleções Dinâmicas e Localização (L10n)
Para dar suporte a múltiplas instâncias de conteúdo e à localização contínua orientada por GitOps, o monorepo implementa um Plugin Locales Sync dinâmico (preset/plugins/locales-sync/).
O Ciclo de Vida Dinâmico
Em vez de fazer o check-in manual dos templates de UI traduzidos do Docusaurus e chumbados nos caminhos absolutos, o docusaurus.config.ts utiliza uma propriedade personalizada chamada collection no formato [namespace]/[content] (ex: portal/docs):
- Orquestração pelo Preset: O Preset Personalizado intercepta as configurações de
docseblog, calcula dinamicamente opathabsoluto para os arquivos markdown (collections/namespaces/[namespace]/content/[content]) e o injeta diretamente no motor. - Extração de Traduções: O comando nativo do Docusaurus
write-translationsextrai os arquivos JSON no formato Chrome i18n (comocode.json,theme/navbar.json) e os armazena de forma segura emcollections/namespaces/[namespace]/content/messages/. - Descompactação no Build: Durante o pipeline
kb:docusaurus:portal:build, o pluginplugin-locales-synclê dinamicamente as pastaslocales/[locale]/sincronizadas e as mapeia de volta para o formato nativo da engine Docusaurus dentro dei18n/[locale]/docusaurus-plugin-content-[type]-[id]/.
Este plugin garante a separação completa entre o conteúdo traduzido e a engine executável do Docusaurus, operando inteiramente sob convenções de diretório GitOps sem mapeamentos hardcoded.