Pular para o conteúdo
duxt

Gerar as coleções a partir de uma só lista de fontes

Calcular as coleções do Content a partir de uma lista de fontes compacta ao carregar a configuração, em vez de fazer quem a consome declará-las.

Contexto

O Nuxt Content vai buscar uma coleção a um repositório git num ramo ou numa tag, autentica-se contra um repositório privado e guarda a descarga em cache por hash. Isso foi verificado lendo o próprio Content antes de nada disto ser construído, e significa que a metade difícil da documentação versionada e multirrepositório já existia e não precisava de ser refeita.

O que não existia era a ergonomia. Um site que serve várias versões de vários projetos declara uma coleção por repositório × ref, à mão: três versões em catorze repositórios são quarenta e duas declarações, e cortar um lançamento edita as catorze. O Content também não oferece nenhum hook para injetar coleções — mas carrega a configuração de conteúdo de cada camada através do c12, o que faz desse ficheiro código executado e não um ficheiro de dados, podendo calcular as suas coleções quando é carregado.

Decisão

Quem a consome declara uma lista de fontes compacta — uma pasta, opcionalmente um repositório, opcionalmente refs — na configuração de aplicação do próprio site, e a configuração de conteúdo da camada calcula a partir dela uma coleção por fonte × ref no carregamento. A mesma lista é resolvida uma segunda vez pela compilação num manifesto que nomeia que coleção serve que prefixo de URL, e é esse manifesto que o tema lê.

Consequências

A lista tem o comprimento do número de projetos e não o do produto de projetos por versões, e a pasta única sem versões não precisa de configuração nenhuma.

O atalho exprime menos do que uma coleção escrita à mão, e vai exprimir sempre. Isso só é suportável porque o Content combina a configuração de conteúdo de cada camada, ganhando a posterior: quem a consome e precise de algo que o atalho não consegue dizer escreve um ficheiro próprio e assume por completo.

Várias funcionalidades deixam de precisar de configuração própria, porque uma fonte já nomeia um repositório, uma ref e uma pasta — as ligações de volta à fonte, a data da última alteração e a lista de quem contribuiu derivam todas dela.

Os nomes das coleções tornam-se dados. Um site com dois repositórios não tem nenhuma coleção chamada docs, por isso nada na camada pode nomear uma, e o tema lê antes o nome a partir do manifesto. Código que fixa um nome de coleção funciona num site de fonte única e quebra em todos os outros.

Os caminhos das coleções resolvem contra a camada e não contra quem a consome, porque o Content regista como raiz de uma coleção a camada que a declarou. A camada calcula por isso caminhos absolutos, o que só é possível porque a configuração é código executado — a mesma propriedade sobre a qual assenta todo o atalho.

Esta página foi útil?