Files
ben-to/scripts/recipe-category.mjs
T
2026-07-21 16:50:58 +02:00

118 lines
3.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Catégories recettes Ben-to (alignées produit : familles & variantes typiques).
* Utilisé par `build-recipes.mjs` pour associer chaque recette à une « base » du catalogue.
*/
/** @typedef {'sweet' | 'savory'} BaseFlavor */
/** Ordre daffichage dans le builder (étape « base »). */
export const RECIPE_BASE_DISPLAY_ORDER = [
"base:onigiri",
"base:gimbap",
"base:mandu",
"base:empanadas-savory",
"base:empanadas-sweet",
"base:galettes",
"base:bao",
"base:muffin",
"base:mini-cakes",
"base:biscuits-secs",
"base:fluffy-cakes",
"base:cakes",
"base:carnet"
];
/** Flavour du bandeau salé / sucré pour la carte « base » (une valeur par catégorie). */
export const RECIPE_BASE_FLAVOR = /** @type {Readonly<Record<string, BaseFlavor>>} */ ({
"base:onigiri": "savory",
"base:gimbap": "savory",
"base:mandu": "savory",
"base:empanadas-savory": "savory",
"base:empanadas-sweet": "sweet",
"base:galettes": "savory",
"base:bao": "savory",
"base:muffin": "sweet",
"base:mini-cakes": "sweet",
"base:biscuits-secs": "sweet",
"base:fluffy-cakes": "sweet",
"base:cakes": "sweet",
"base:carnet": "savory"
});
const normSlug = (slug) => slug.toLowerCase();
const normTags = (tags) => tags.map((t) => t.trim().toLowerCase()).filter(Boolean);
/**
* Associe une recette à un identifiant de base catalogue.
* Règles évaluées du plus spécifique au plus général ; la première correspondance lemporte.
*
* @param {string} slug
* @param {ReadonlyArray<string>} tags Tags bentext (section tags), déjà en minuscules possible
* @returns {string}
*/
export const resolveRecipeBaseId = (slug, tags) => {
const s = normSlug(slug);
const tg = normTags([...tags]);
if (
tg.includes("carnet") ||
tg.includes('cheesecake') ||
tg.includes('carrot-cake')
) return "base:carnet";
if (s.includes("inarizushi") || s.includes("musubi") || s.includes("onigiri")) return "base:onigiri";
if (
s.includes("gimbap") ||
s.includes("kimbap") ||
(s.includes("maki") && !s.includes("makisu"))
) {
return "base:gimbap";
}
if (s.includes("mandu") || s.includes("gyoza") || s.includes("jiaozi") || s.includes("mandoo")) {
return "base:mandu";
}
if (s.includes("empanadas-citron") || s.includes("empanada-citron")) return "base:empanadas-sweet";
if (s.includes("empanad")) return "base:empanadas-savory";
if (
s.includes("dan-bing") ||
s.includes("danbing") ||
s.includes("blini") ||
s.includes("naan") ||
s.includes("jeon") ||
s.includes("paratha") ||
s.includes("cong-you") ||
s.includes("congyou")
) {
return "base:galettes";
}
if (/\b(mantou|baozi)\b/i.test(slug) || /\bbao\b/i.test(slug)) return "base:bao";
if (s.includes("muffin")) return "base:muffin";
if (s.includes("madeleine") || s.includes("financier")) return "base:mini-cakes";
if (s.includes("biscuit")) return "base:biscuits-secs";
if (
s.includes("savoie") ||
s.includes("fluffy") ||
s.includes("gateau") ||
s.includes("gâteau")
) {
return "base:fluffy-cakes";
}
if (s.includes("cake") || s.includes("banana") ||
s.includes("cremeux") ||
s.includes("crémeux")) {
return "base:cakes";
}
return "base:carnet";
};