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.
Chargeurs intégrés
Titre de la section Chargeurs intégrésAstro propose deux systèmes de chargement intégrés pour vous aider à récupérer vos collections. Les deux offrent des options qui conviennent à un large choix de cas d’utilisation.
Le chargeur glob()
Titre de la section Le chargeur glob()Type : (options: GlobOptions) => Loader
astro@5.0.0
Le chargeur glob()
crée des entrées à partir de répertoires de fichiers situés n’importe où sur le système de fichiers. Les types de fichiers supportés sont les fichiers Markdown, MDX, Markdoc, JSON et YAML.
Ce chargeur accepte un objet avec les propriétés suivantes : pattern
, base
(optionnel), et generateId
(optionnel).
pattern
Titre de la section patternType : string | string[]
La propriété pattern
accepte une chaîne de caractères ou un tableau de chaînes de caractères utilisant la correspondance globale (par exemple, wildcards, globstars). Les motifs doivent être relatifs au répertoire de base des fichiers d’entrée à comparer.
Pour en savoir plus sur la syntaxe à utiliser, consultez la documentation micromatch. Vous pouvez également vérifier la validité de votre modèle à l’aide d’un outil en ligne tel que le DigitalOcean Glob Tool.
Type : string | URL
Par défaut : "."
Un chemin relatif ou URL vers le répertoire à partir duquel résoudre le pattern
.
generateId()
Titre de la section generateId()Type : (options: GenerateIdOptions) => string
Une fonction de rappel qui renvoie une chaîne de caractères unique pour chaque entrée d’une collection. Elle accepte un objet comme paramètre avec les propriétés suivantes :
entry
- le chemin d’accès au fichier d’entrée, par rapport au répertoire de basebase
- l’URL du répertoire de basedata
- les données analysées et non validées de l’entrée
Par défaut, il utilise github-slugger
pour générer un slug avec des mots au format kebab-case.
Le chargeur file()
Titre de la section Le chargeur file()Type : (fileName: string, options?: FileOptions) => Loader
astro@5.0.0
Le chargeur file()
crée des entrées à partir d’un seul fichier qui contient un tableau d’objets avec un champ id
unique, ou un objet avec des clés de type chaîne. Il supporte JSON ou YAML, et vous pouvez fournir un parser
personnalisé pour les fichiers de données qu’il ne peut pas analyser par défaut.
Ce chargeur accepte une propriété fileName
et un objet optionnel comme second argument :
fileName
Titre de la section fileNameType : string
Définit le chemin d’accès au fichier à charger, par rapport au répertoire racine.
Options
Titre de la section OptionsType : FileOptions
Un objet optionnel avec les propriétés suivantes :
parser()
Titre de la section parser()Type : (text: string) => Record<string, Record<string, unknown>> | Array<Record<string, unknown>>
Une fonction de rappel pour créer une collection à partir du contenu d’un fichier. Utilisez-la lorsque vous avez besoin de traiter des fichiers non supportés par défaut (par exemple .csv
) ou lorsque vous utilisez des documents .json
imbriqués.
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 d’objets
Titre de la section API du chargeur d’objetsL’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 :