Aller au contenu
duxt

Sources

Une liste de sources devient chaque collection, préfixe et version que le site sert.

Une source est un dossier de Markdown : dans ce dépôt ou dans un autre, sur le checkout courant ou sur des refs nommées. La liste sources est le seul endroit où on les déclare, et tout le reste en est généré.

sources: [
  { path: 'docs', slug: 'acme' },
  { repo: 'acme/api', path: 'docs', refs: ['main', 'v2.0.0', 'v1.4.0'] }
]

Deux dépôts et trois refs : cinq collections, les préfixes d’URL qui les servent, un sélecteur de versions, les règles de redirection et les entrées du sitemap. Rien de tout cela n’est écrit à la main. Chaque champ figure dans la référence des sources.

Comment cela fonctionne

Content v3 fait déjà la moitié difficile. La source d’une collection accepte une URL de dépôt, une branche ou un tag et des identifiants, et Content la télécharge puis la met en cache par hachage — multi-dépôts, dépôts privés et lecture depuis un tag existent déjà là. duxt n’en réimplémente rien.

Ce que duxt ajoute se produit au chargement de la configuration. content.config.ts est du code exécuté et non un fichier de données : il peut donc lire l’app.config.ts du site et calculer ses collections à partir de cette liste — une collection par dépôt × ref, chacune avec un cwd absolu, un nom dérivé du slug et le schéma de page dont le thème a besoin. La même liste est résolue une seconde fois par la compilation, en manifeste : quelle collection sert quel préfixe d’URL, quelle ref est celle par défaut, d’où vient chaque page. C’est ce manifeste que le thème lit, et il est réécrit dans la configuration de l’application sous resolvedSources.

Pourquoi c’est construit ainsi

Déclarer les collections à la main ne passe pas à l’échelle dans la seule direction où la documentation grandit vraiment : trois versions sur quatorze dépôts font quarante-deux déclarations, et chaque publication en modifie quatorze. Le raccourci garde la liste aussi longue que le nombre de projets.

Le coût, c’est qu’une liste de sources exprime moins qu’une collection écrite à la main. C’est un compromis délibéré : qui a besoin de ce que le raccourci ne sait pas dire écrit son propre content.config.ts et reprend tout, puisque Content fusionne le fichier de chaque couche, la dernière l’emportant.

Ce qui en découle

Parce qu’une source nomme un dépôt, une ref et un dossier, plusieurs fonctionnalités n’ont besoin d’aucune configuration propre : « Modifier cette page », la date de dernière modification et la liste des contributeurs en découlent toutes. Lire l’historique d’une source distante coûte un clone complet : cela attend donc history: true — un clone superficiel attribuerait chaque fichier à l’auteur de la pointe, ce qui est une donnée fausse plutôt qu’une donnée manquante.

Cette page vous a-t-elle été utile ?