function slugifyContentId(value, fallback = "item") { const normalized = String(value || "") .trim() .toLowerCase() .replace(/[^a-z0-9]+/g, "-") .replace(/^-+|-+$/g, ""); return normalized || fallback; } function ensureUniqueIds(items, getExistingId, getSourceValue, fallbackPrefix) { const usedIds = new Set(); return (Array.isArray(items) ? items : []).map((item, index) => { const existingId = String(getExistingId(item, index) || "").trim(); let nextId = existingId || slugifyContentId(getSourceValue(item, index), `${fallbackPrefix}-${index + 1}`); let suffix = 2; while (usedIds.has(nextId)) { nextId = `${existingId || slugifyContentId(getSourceValue(item, index), fallbackPrefix)}-${suffix}`; suffix += 1; } usedIds.add(nextId); return { ...item, id: nextId, }; }); } module.exports = { slugifyContentId, ensureUniqueIds, };