@sensinum/astro-strapi-loader
Version:
Astro loader for Strapi CMS
43 lines (42 loc) • 1.63 kB
JavaScript
import qs from "qs";
import { fetchContent } from "./strapi";
export function strapiLoader(contentType, options, query = {}) {
return {
name: "strapi-loader",
load: async (context) => {
const { store, logger, parseData, generateDigest } = context;
logger.info(`[${contentType}] Loading data from Strapi...`);
const { url, token } = options;
const response = await fetchContent({
url,
token,
contentType,
queryParams: query ? qs.stringify(query) : undefined,
});
store.clear();
if (response.data.length === 0) {
logger.info(`[${contentType}] No data found in Strapi`);
return;
}
if (Array.isArray(response.data)) {
await Promise.all(response.data.map(async (item) => {
const data = await parseData({
id: item.documentId,
data: item,
});
const digest = generateDigest(data);
store.set({ id: data.documentId, data, digest });
}));
}
else {
const data = await parseData({
id: response.data.documentId,
data: response.data,
});
const digest = generateDigest(data);
store.set({ id: data.documentId, data, digest });
}
logger.info(`[${contentType}] Loading data from Strapi... DONE`);
},
};
}