25 lines
1.0 KiB
TypeScript
25 lines
1.0 KiB
TypeScript
/** Normalização dos valores nutricionais recebidos do Open Food Facts. */
|
|
export function getNutrientValue(value: unknown): number | null {
|
|
if (typeof value !== "number" && typeof value !== "string") return null;
|
|
if (typeof value === "string" && value.trim() === "") return null;
|
|
const number = Number(value);
|
|
return Number.isFinite(number) && number >= 0 ? number : null;
|
|
}
|
|
|
|
/**
|
|
* Prefere o campo explícito em kcal. Os campos energy/energy-kj usam kJ;
|
|
* 1 kcal = 4.184 kJ. Zero é um valor válido, distinto de dado ausente.
|
|
* https://openfoodfacts.github.io/openfoodfacts-server/api/tutorial-off-api/
|
|
*/
|
|
export function getEnergyKcal(nutriments?: {
|
|
"energy-kcal_100g"?: unknown;
|
|
"energy-kj_100g"?: unknown;
|
|
energy_100g?: unknown;
|
|
}): number | null {
|
|
const kcal = getNutrientValue(nutriments?.["energy-kcal_100g"]);
|
|
if (kcal !== null) return kcal;
|
|
const kj = getNutrientValue(nutriments?.["energy-kj_100g"])
|
|
?? getNutrientValue(nutriments?.energy_100g);
|
|
return kj === null ? null : kj / 4.184;
|
|
}
|