API du chargeur de contenu d'Astro
L’API du chargeur de contenu d’Astro (Content Loader) vous permet de charger vos données à partir de n’importe quelle source, locale ou distante, et d’interagir avec la couche de contenu d’Astro pour gérer vos collections de contenu.
Qu’est-ce qu’un chargeur ?
Titre de la section Qu’est-ce qu’un chargeur ?Les chargeurs Astro vous permettent de charger des données dans des collections de contenu, qui peuvent ensuite être utilisées dans des pages et des composants. Les chargeurs intégrés glob()
et file()
sont utilisés pour charger le contenu du système de fichiers, et vous pouvez créer vos propres chargeurs pour charger le contenu à partir d’autres sources.
Chaque collection a besoin d’un chargeur défini dans son schéma. Vous pouvez définir un chargeur en ligne dans le fichier src/content.config.ts
de votre projet, partager un chargeur entre plusieurs collections, ou même publier votre chargeur sur NPM en tant que paquet à partager avec d’autres et à inclure dans notre bibliothèque d’intégrations.
Types de chargeurs
Titre de la section Types de chargeursLes chargeurs peuvent être définis soit comme une simple fonction qui renvoie un tableau d’entrées, soit avec l’API du chargeur de contenu sous forme d’objet plus puissante pour plus de contrôle sur le processus de chargement.
Chargeurs en ligne
Titre de la section Chargeurs en ligneUn chargeur en ligne est une fonction asynchrone qui renvoie un tableau ou un objet contenant des entrées. Utilisez-le pour les chargeurs simples, en particulier ceux qui sont définis en ligne dans le fichier src/content.config.ts
.
La fonction peut être asynchrone et doit renvoyer soit un tableau d’entrées contenant chacune un champ id
unique, soit un objet où chaque clé est un ID unique et chaque valeur est l’entrée. Chaque fois que le chargeur est appelé, il efface le magasin et recharge toutes les entrées.
Chargeurs sous forme d’objet
Titre de la section Chargeurs sous forme d’objetUn chargeur est un objet doté d’une méthode load()
qui est appelée au moment de la construction pour récupérer des données et mettre à jour le magasin de données. Il permet de mettre à jour les entrées de manière incrémentielle ou de vider le magasin uniquement lorsque cela est nécessaire. Il peut également définir un schéma pour les entrées, qui peut être utilisé pour valider les données et générer des types statiques.
Le modèle recommandé consiste à définir une fonction qui accepte les options de configuration et renvoie l’objet chargeur, de la même manière que vous définiriez normalement une intégration Astro ou un plugin Vite.
Ces options de configuration peuvent ensuite être définies lors de la définition d’une collection :
API du chargeur
Titre de la section API du chargeurL’API pour les chargeurs en ligne est très simple et est présentée ci-dessus. Cette section présente l’API permettant de définir un chargeur sous forme d’objet.
L’objet Loader
Titre de la section L’objet LoaderL’objet chargeur possède les propriétés suivantes :
Type : string
Un nom unique pour le chargeur, utilisé dans les logs et pour le chargement conditionnel.
Type : (context: LoaderContext) => Promise<void>
Une fonction asynchrone qui est appelée au moment de la construction pour charger les données et mettre à jour le magasin. Voir LoaderContext
pour plus d’informations.
Type : ZodSchema | Promise<ZodSchema> | (() => ZodSchema | Promise<ZodSchema>)
Un schéma Zod facultatif qui définit la forme des entrées. Il est utilisé à la fois pour valider les données et pour générer des types TypeScript pour la collection.
Si une fonction est fournie, elle sera appelée au moment de la construction avant load()
pour générer le schéma. Vous pouvez l’utiliser pour générer dynamiquement le schéma en fonction des options de configuration ou en introspectant une API.
LoaderContext
Titre de la section LoaderContextCet objet est passé à la méthode load()
du chargeur et contient les propriétés suivantes :
collection
Titre de la section collectionType : string
Le nom unique de la collection. Il s’agit de la clé dans l’objet collections
dans le fichier src/content.config.ts
.
Type : DataStore
Une magasin de données pour stocker les données réelles. Utilisez-le pour mettre à jour le magasin avec de nouvelles entrées. Voir DataStore
pour plus d’informations.
Type : MetaStore
Un magasin de clés-valeurs avec une portée limitée à la collection, conçu pour des choses comme la synchronisation des jetons et des heures de dernière modification. Ces métadonnées sont conservées entre les constructions avec les données de la collection, mais ne sont disponibles qu’à l’intérieur du chargeur.
Type : AstroIntegrationLogger
Un enregistreur qui peut être utilisé pour enregistrer des messages sur la console. Utilisez-le à la place de console.log
pour des journaux plus utiles qui incluent le nom du chargeur dans le message de journal. Voir AstroIntegrationLogger
pour plus d’informations.
Type : AstroConfig
L’objet de configuration Astro complet et résolu avec toutes les valeurs par défaut appliquées. Consultez la référence de configuration pour plus d’informations.
parseData
Titre de la section parseDataType : (props: ParseDataOptions<TData>) => Promise<TData>
Valide et analyse les données conformément au schéma de la collection. Transmettez les données à cette fonction pour les valider et les analyser avant de les stocker dans le magasin de données.
generateDigest
Titre de la section generateDigestType : (data: Record<string, unknown> | string) => string
Génère un résumé de contenu non cryptographique d’un objet ou d’une chaîne de caractères. Cela peut être utilisé pour suivre si les données ont changé en définissant le champ digest
d’une entrée.
watcher
Titre de la section watcherType : FSWatcher
En mode dev, il s’agit d’un observateur de système de fichiers qui peut être utilisé pour déclencher des mises à jour. Voir ViteDevServer
pour plus d’informations.
refreshContextData
Titre de la section refreshContextDataType : Record<string, unknown>
Si le chargeur a été déclenché par une intégration, il peut éventuellement contenir des données supplémentaires définies par cette intégration. Il n’est défini que lorsque le chargeur est déclenché par une intégration. Consultez la référence du hook astro:server:setup
pour plus d’informations.
DataStore
Titre de la section DataStoreLe magasin de données est l’interface d’un chargeur vers les données de la collection de contenu. Il s’agit d’un magasin clé-valeur (abrégé KV en anglais), limité à la collection, et par conséquent, un chargeur ne peut accéder qu’aux données de sa propre collection.
Type : (key: string) => DataEntry | undefined
Obtenir une entrée du magasin par son ID. Renvoie undefined
si l’entrée n’existe pas.
L’objet renvoyé est un objet DataEntry
.
Type : (entry: DataEntry) => boolean
Utilisé après que les données ont été validées et analysées pour ajouter une entrée au magasin, renvoyant true
si l’entrée a été définie. Renvoie false
lorsque la propriété digest
détermine qu’une entrée n’a pas changé et ne doit pas être mise à jour.
entries
Titre de la section entriesType : () => Array<[id: string, DataEntry]>
Obtenir toutes les entrées de la collection sous forme de tableau de paires clé-valeur.
Type : () => Array<string>
Obtenir toutes les clés des entrées de la collection.
Type : () => Array<DataEntry>
Obtenir toutes les entrées de la collection sous forme de tableau.
Type : (key: string) => void
Supprimer une entrée du magasin par son ID.
Type : () => void
Effacer toutes les entrées de la collection.
Type : (key: string) => boolean
Vérifier si une entrée existe dans le magasin par son ID.
DataEntry
Titre de la section DataEntryIl s’agit du type d’objet stocké dans le magasin de données. Il possède les propriétés suivantes :
Type : string
Un identifiant pour l’entrée, qui doit être unique dans la collection. Il est utilisé pour rechercher l’entrée dans le magasin et constitue la clé utilisée avec getEntry
pour cette collection.
Type : Record<string, unknown>
Les données réelles de l’entrée. Lorsqu’un utilisateur accède à la collection, des types TypeScript seront générés selon le schéma de la collection.
Il est de la responsabilité du chargeur d’utiliser parseData
pour valider et analyser les données avant de les stocker dans le magasin de données : aucune validation n’est effectuée lors de l’obtention ou de la définition des données.
filePath
Titre de la section filePathType : string | undefined
Chemin d’accès au fichier source de cette entrée, par rapport à la racine du site. Cela s’applique uniquement aux chargeurs basés sur des fichiers et est utilisé pour résoudre des chemins tels que des images ou d’autres ressources.
S’il n’est pas défini, tous les champs du schéma qui utilisent l’assistant image()
seront traités comme des chemins publics et non transformés.
Type : string | undefined
Le corps brut de l’entrée, le cas échéant. Si l’entrée inclut du contenu rendu, ce champ peut être utilisé pour stocker la source brute. Ceci est facultatif et n’est pas utilisé en interne.
Type : string | undefined
Un résumé facultatif du contenu de l’entrée qui peut être utilisé pour vérifier si les données ont changé.
Lors de la définition d’une entrée, l’entrée ne sera mise à jour que si le résumé ne correspond pas à une entrée existante avec le même ID.
Le format du résumé dépend du chargeur, mais il doit s’agir d’une chaîne de caractères qui change lorsque les données changent. Cela peut être fait avec la fonction generateDigest
.
rendered
Titre de la section renderedType : RenderedContent | undefined
Stocke un objet avec le contenu rendu et les métadonnées d’une entrée si elle a été rendue au format HTML. Par exemple, cela peut être utilisé pour stocker le contenu rendu d’une entrée Markdown ou du code HTML d’un CMS.
Si ce champ est fourni, alors la fonction render()
et le composant <Content />
sont disponibles pour restituer l’entrée dans une page.
Le format de l’objet RenderedContent
est :