Strapi
Lies einen Strapi-Content-Type über seine REST-API mit der strapi()-Quelle ein und wandle Blocks-Inhalte sowohl unter Strapi 4 als auch unter Strapi 5 in Markdown um.
Der integrierte strapi()-Adapter liest einen Content-Type über die Strapi-REST-API (/api/<pluralApiId>) und wandelt den Blocks-Inhalt jedes Eintrags in Markdown um: Absätze, Überschriften, Listen, Zitate, Codeblöcke, Bilder und Links. Ein Markdown-Rich-Text-Feld wird unverändert übernommen. Die einzige Ausnahme sind Links, die weder auf eine Web-, Mail- oder Telefonadresse noch auf eine relative Adresse verweisen. Von ihnen bleibt nur die Beschriftung erhalten. Antworten von Strapi 5 werden direkt gelesen, und die attributes-Hülle von Strapi 4 wird aufgelöst, sodass dieselben Feldpfade gelten. Du musst nichts installieren.
import { defineConfig } from "blume";
import { filesystem, strapi } from "blume/sources";
export default defineConfig({
content: {
sources: [
filesystem({ root: "docs" }),
strapi({
prefix: "guides",
url: "https://cms.example.com",
contentType: "guides",
// locale: "en"
// Field paths default to title / description / slug / content / updatedAt
fields: { body: "body" },
// Extra query parameters: filters[...], sort
params: { "filters[section][$eq]": "sdk" },
}),
],
},
});
Das API-Token stammt aus der Umgebungsvariable STRAPI_API_TOKEN und wird als Bearer-Token gesendet. Einträge werden mit populate=* abgerufen, damit Bilder ihre URLs mitbringen (setze populate, um das einzuschränken). Ein relativer Upload-Pfad (/uploads/x.png) wird relativ zu url aufgelöst. Importiert werden nur veröffentlichte Einträge. Mit --preview werden Entwürfe angefragt (status=draft unter Strapi 5, publicationState=preview unter Strapi 4). Jedes Dokument, das noch nie veröffentlicht wurde, wird dabei mit draft: true bereitgestellt. Bei einem veröffentlichten Dokument siehst du in der Vorschau seinen neuesten Entwurf.