Die Collections aus einer Quellenliste erzeugen
Content-Collections zur Ladezeit der Konfiguration aus einer kompakten Quellenliste berechnen, statt Konsumenten sie deklarieren zu lassen.
Kontext
Nuxt Content bezieht eine Collection aus einem git-Repository an einem Branch oder einem Tag, authentifiziert sich gegen ein privates und cacht den Download über einen Hash. Das wurde durch das Lesen von Content selbst verifiziert, bevor irgendetwas hiervon gebaut wurde, und es heißt, dass die schwere Hälfte versionierter Dokumentation über mehrere Repositories bereits existierte und nicht neu gebaut werden musste.
Was nicht existierte, war die Ergonomie. Eine Seite, die mehrere Versionen mehrerer Projekte ausliefert, deklariert eine Collection je Repository × Ref, von Hand: Drei Versionen über vierzehn Repositories sind zweiundvierzig Deklarationen, und ein Release zu schneiden bearbeitet alle vierzehn. Content bietet auch keinen Hook, um Collections einzuschleusen — aber es lädt die Content-Konfiguration jeder Ebene über c12, was heißt, dass diese Datei ausgeführter Code ist statt einer Datendatei, und ihre Collections beim Laden berechnen darf.
Entscheidung
Konsumenten deklarieren eine kompakte Quellenliste — ein Ordner, optional ein Repository, optional Refs — in der eigenen App-Konfiguration der Seite, und die Content-Konfiguration der Ebene berechnet daraus zur Ladezeit eine Collection je Quelle × Ref. Dieselbe Liste wird vom Build ein zweites Mal aufgelöst, zu einem Manifest, das benennt, welche Collection welches URL-Präfix bedient, und dieses Manifest ist das, was das Theme liest.
Konsequenzen
Die Liste hat die Länge der Anzahl der Projekte statt des Produkts aus Projekten und Versionen, und der einzelne unversionierte Ordner braucht überhaupt keine Konfiguration.
Die Kurzform drückt weniger aus als eine handgeschriebene Collection, und das wird immer so bleiben. Überlebbar ist das nur, weil Content die Content-Konfiguration jeder Ebene zusammenführt, wobei die spätere gewinnt: Ein Konsument, der etwas braucht, das die Kurzform nicht sagen kann, schreibt seine eigene Datei und übernimmt vollständig.
Mehrere Funktionen brauchen keine eigene Konfiguration mehr, weil eine Quelle bereits ein Repository, einen Ref und einen Ordner benennt — Links zurück zur Quelle, das Datum der letzten Aktualisierung und die Liste der Mitwirkenden fallen alle daraus ab.
Collection-Namen werden zu Daten. Eine Seite mit zwei Repositories hat keine
Collection namens docs, nichts in der Ebene darf also eine so benennen, und
das Theme liest den Namen stattdessen aus dem Manifest. Code, der einen
Collection-Namen fest verdrahtet, funktioniert auf einer Seite mit einer
einzigen Quelle und bricht auf jeder anderen.
Die Collection-Pfade lösen gegen die Ebene auf statt gegen den Konsumenten, weil Content die Ebene, die eine Collection deklariert hat, als deren Wurzel vermerkt. Die Ebene berechnet deshalb absolute Pfade, was nur möglich ist, weil die Konfiguration ausgeführter Code ist — dieselbe Eigenschaft, auf der die ganze Kurzform ruht.