Gleam.br Wiki

GBR SSG Core (`gbr_ssg_core`) | Governança

Especificação técnica e manual do componente gbr_ssg_core.

GBR SSG Core (gbr_ssg_core)

O gbr_ssg_core é a biblioteca que orquestra o motor de compilação estática de documentos do ecossistema Gleam-BR. Ele é responsável por extrair metadados TOML de frontmatter, construir a árvore lógica de navegação Wiki e acoplar o conteúdo em Djot à renderização baseada em Lustre SSR.


1. Por quê? (Why)

No desenvolvimento de *Sistemas Lúcidos*, o desacoplamento e a imutabilidade são diretrizes fundamentais. A decisão de isolar as regras de conversão lógica de documentos em um pacote dedicado baseia-se em:

  • *Isolamento de Efeitos (Sem I/O ou Rede):* O core não lê arquivos do disco e não abre conexões de rede. Ele opera exclusivamente como uma transformação pura de dados em memória (String -> Result(DocumentInfo, String)).
  • *Portabilidade Cross-Target Extrema:* Por ser livre de dependências nativas de sistema operacional ou de runtime, o gbr_ssg_core é totalmente portável. Ele pode ser compilado tanto para o target *Erlang* (BEAM) na nuvem/borda quanto transpilado para *JavaScript* para execução no navegador, se necessário.
  • *Contratos e Tipagem Estrita:* Toda a modelagem de páginas, categorias e Sidebar é expressada em Tipos de Dados Algébricos (ADTs) no Gleam, eliminando inconsistências comuns em geradores estáticos baseados em JSON dinâmico ou YAML opaco.

2. Como? (How)

A biblioteca é estruturada em torno de tipos de dados imutáveis e funções puras:

Estruturas de Dados

/// Metadados estruturados extraídos do cabeçalho TOML.
pub type PageMetadata {
  PageMetadata(
    title: String,
    description: String,
    path: String,
    category: String,
    order: Int,
  )
}

/// O índice consolidado de páginas do site para a Sidebar.
pub type SiteIndex {
  SiteIndex(pages: List(PageMetadata))
}

/// Árvore lógica estruturada e ordenada por categoria.
pub type NavigationTree = List(#(String, List(PageMetadata)))

Principais APIs Expostas

  • parse_document(content: String, path: String) -> Result(DocumentInfo, String) Separa a string do Frontmatter TOML delimitada por +++ do corpo em Djot. Utiliza a biblioteca tom para decodificar as propriedades e inferir fallbacks caso title ou category estejam ausentes (usando o caminho do arquivo).
  • build_navigation_tree(index: SiteIndex) -> NavigationTree Agrupa as páginas por categoria de forma determinística e as ordena numericamente por order. Em caso de empate de prioridade, aplica o desempate alfabético por título.
  • render(doc: DocumentInfo, index: SiteIndex, template: fn(DocumentInfo, SiteIndex) -> Element(Nil)) -> String Une o documento de página atual com o índice geral do site, aplicando um template Lustre e transformando o AST em uma string de documento HTML5 compilada.

3. Para quê? (What for)

O gbr_ssg_core serve como o motor central reutilizável para a holding FVideen e o ecossistema Gleam-BR. Ele abstrai a complexidade do parser de Djot (jot) e TOML (tom) para que qualquer aplicação (seja nossa CLI de build local, um plugin Webpack/Vite ou um microserviço HTTP que renderiza documentos dinamicamente na nuvem) possa transformar conteúdo textual puro em páginas web ricas de forma rápida, lúcida e resiliente.