2026-04-28 12:22:24 +02:00

42 lines
1.1 KiB
JavaScript

/**
* Helpers — extraire les fichiers média des réponses Strapi v5 (structure plate).
*/
function isUploadedImage(obj) {
if (!obj || typeof obj !== "object" || typeof obj.url !== "string") return false;
if (!obj.url.includes("/uploads/")) return false;
if (obj.mime && !obj.mime.startsWith("image/")) return false;
return true;
}
/** Liste { file, index } pour un champ média Strapi */
function normalizeField(fieldVal, multiple) {
if (!fieldVal) return [];
if (multiple) {
const arr = Array.isArray(fieldVal) ? fieldVal : [fieldVal];
return arr
.filter(isUploadedImage)
.map((file, index) => ({ file, index }));
}
return isUploadedImage(fieldVal)
? [{ file: fieldVal, index: 0 }]
: [];
}
function safeSlug(entry) {
const s =
entry.slug ??
entry.documentId ??
(entry.id != null ? String(entry.id) : "unknown");
return String(s)
.replace(/[^\wÀ-ÖØ-öø-ÿ.-]+/gu, "_")
.slice(0, 96)
.replace(/^_|_$/g, "") || "entry";
}
module.exports = {
normalizeField,
safeSlug,
isUploadedImage,
};