@openfisca/json-model
Version:
Library to handle informations extracted in JSON or YAML format from OpenFisca parameters, variables, etc
44 lines • 9.06 kB
JavaScript
// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/select#return_value
export const pluralizationCategories = ["zero", "one", "two", "few", "many", "other"];
export function getUnitAtDate(unitByName, name, date) {
if (name == null) {
return undefined;
}
let unit = unitByName[name];
if (unit === undefined) {
return undefined;
}
if (date == null) {
return unit;
}
if (unit.units !== undefined) {
unit = Object.entries(unit.units).sort(([startDate1], [startDate2]) => startDate2.localeCompare(startDate1)).find(([startDate]) => startDate <= date)?.[1];
if (unit === undefined) {
return undefined;
}
}
return unit;
}
export function getUnitLabel(unitByName, name, date, pluralizationCategory) {
const unit = getUnitAtDate(unitByName, name, date);
if (unit === undefined) {
return name ?? "";
}
return labelFromUnit(unit, pluralizationCategory);
}
export function getUnitShortLabel(unitByName, name, date, pluralizationCategory) {
const unit = getUnitAtDate(unitByName, name, date);
if (unit === undefined) {
return name ?? "";
}
return shortLabelFromUnit(unit, pluralizationCategory);
}
export function labelFromUnit(unit, pluralizationCategory) {
const label = unit.label;
return label === undefined ? unit.name : typeof label === "string" ? label : label[pluralizationCategory] ?? unit.name;
}
export function shortLabelFromUnit(unit, pluralizationCategory) {
const shortLabel = unit.short_label;
return shortLabel === undefined ? labelFromUnit(unit, pluralizationCategory) : typeof shortLabel === "string" ? shortLabel : shortLabel[pluralizationCategory] ?? labelFromUnit(unit, pluralizationCategory);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwbHVyYWxpemF0aW9uQ2F0ZWdvcmllcyIsImdldFVuaXRBdERhdGUiLCJ1bml0QnlOYW1lIiwibmFtZSIsImRhdGUiLCJ1bmRlZmluZWQiLCJ1bml0IiwidW5pdHMiLCJPYmplY3QiLCJlbnRyaWVzIiwic29ydCIsInN0YXJ0RGF0ZTEiLCJzdGFydERhdGUyIiwibG9jYWxlQ29tcGFyZSIsImZpbmQiLCJzdGFydERhdGUiLCJnZXRVbml0TGFiZWwiLCJwbHVyYWxpemF0aW9uQ2F0ZWdvcnkiLCJsYWJlbEZyb21Vbml0IiwiZ2V0VW5pdFNob3J0TGFiZWwiLCJzaG9ydExhYmVsRnJvbVVuaXQiLCJsYWJlbCIsInNob3J0TGFiZWwiLCJzaG9ydF9sYWJlbCJdLCJzb3VyY2VzIjpbIi4uL3NyYy91bml0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIENoYW5naW5nVW5pdCBleHRlbmRzIFVuaXRCYXNlIHtcbiAgdW5pdHM6IHsgW2RhdGU6IHN0cmluZ106IENvbnN0YW50VW5pdCB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc3RhbnRVbml0IGV4dGVuZHMgVW5pdEJhc2Uge1xuICAvLy8gTmFtZSBvZiBwYXJhbWV0ZXIgY29udGFpbmluZyB0aGUgdmFsdWVzIG9mIHRoZSB1bml0XG4gIHBhcmFtZXRlcj86IHN0cmluZ1xuICAvLy8gQ2FuIHRoaXMgdW5pdCBiZSBleHByZXNzZWQgYXMgYSBwZXJjZW50YWdlP1xuICByYXRpbz86IGJvb2xlYW5cbiAgdW5pdHM/OiB1bmRlZmluZWRcbn1cblxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvUGx1cmFsUnVsZXMvc2VsZWN0I3JldHVybl92YWx1ZVxuZXhwb3J0IGNvbnN0IHBsdXJhbGl6YXRpb25DYXRlZ29yaWVzID0gW1xuICBcInplcm9cIixcbiAgXCJvbmVcIixcbiAgXCJ0d29cIixcbiAgXCJmZXdcIixcbiAgXCJtYW55XCIsXG4gIFwib3RoZXJcIixcbl0gYXMgY29uc3RcbnR5cGUgUGx1cmFsaXphdGlvbkNhdGVnb3JpZXNUdXBsZSA9IHR5cGVvZiBwbHVyYWxpemF0aW9uQ2F0ZWdvcmllc1xuZXhwb3J0IHR5cGUgUGx1cmFsaXphdGlvbkNhdGVnb3J5ID0gUGx1cmFsaXphdGlvbkNhdGVnb3JpZXNUdXBsZVtudW1iZXJdXG5cbmV4cG9ydCB0eXBlIFN0cmluZ0J5UGx1cmFsaXphdGlvbkNhdGVnb3J5ID0ge1xuICBbUHJvcGVydHkgaW4gUGx1cmFsaXphdGlvbkNhdGVnb3J5XT86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBVbml0ID0gQ2hhbmdpbmdVbml0IHwgQ29uc3RhbnRVbml0XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pdEJhc2Uge1xuICBsYWJlbD86IFN0cmluZ0J5UGx1cmFsaXphdGlvbkNhdGVnb3J5IHwgc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBzaG9ydF9sYWJlbD86IFN0cmluZ0J5UGx1cmFsaXphdGlvbkNhdGVnb3J5IHwgc3RyaW5nXG4gIHVuaXRzPzogeyBbZGF0ZTogc3RyaW5nXTogQ29uc3RhbnRVbml0IH0gfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVuaXRBdERhdGUoXG4gIHVuaXRCeU5hbWU6IHsgW25hbWU6IHN0cmluZ106IFVuaXQgfSxcbiAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCxcbiAgZGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCxcbik6IFVuaXQgfCB1bmRlZmluZWQge1xuICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIGxldCB1bml0OiBVbml0IHwgdW5kZWZpbmVkID0gdW5pdEJ5TmFtZVtuYW1lXVxuICBpZiAodW5pdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIGlmIChkYXRlID09IG51bGwpIHtcbiAgICByZXR1cm4gdW5pdFxuICB9XG4gIGlmICh1bml0LnVuaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB1bml0ID0gT2JqZWN0LmVudHJpZXModW5pdC51bml0cylcbiAgICAgIC5zb3J0KChbc3RhcnREYXRlMV0sIFtzdGFydERhdGUyXSkgPT5cbiAgICAgICAgc3RhcnREYXRlMi5sb2NhbGVDb21wYXJlKHN0YXJ0RGF0ZTEpLFxuICAgICAgKVxuICAgICAgLmZpbmQoKFtzdGFydERhdGVdKSA9PiBzdGFydERhdGUgPD0gZGF0ZSk/LlsxXVxuICAgIGlmICh1bml0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuaXRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVuaXRMYWJlbChcbiAgdW5pdEJ5TmFtZTogeyBbbmFtZTogc3RyaW5nXTogVW5pdCB9LFxuICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsLFxuICBkYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsLFxuICBwbHVyYWxpemF0aW9uQ2F0ZWdvcnk6IFBsdXJhbGl6YXRpb25DYXRlZ29yeSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHVuaXQgPSBnZXRVbml0QXREYXRlKHVuaXRCeU5hbWUsIG5hbWUsIGRhdGUpXG4gIGlmICh1bml0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmFtZSA/PyBcIlwiXG4gIH1cbiAgcmV0dXJuIGxhYmVsRnJvbVVuaXQodW5pdCwgcGx1cmFsaXphdGlvbkNhdGVnb3J5KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pdFNob3J0TGFiZWwoXG4gIHVuaXRCeU5hbWU6IHsgW25hbWU6IHN0cmluZ106IFVuaXQgfSxcbiAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCxcbiAgZGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCxcbiAgcGx1cmFsaXphdGlvbkNhdGVnb3J5OiBQbHVyYWxpemF0aW9uQ2F0ZWdvcnksXG4pOiBzdHJpbmcge1xuICBjb25zdCB1bml0ID0gZ2V0VW5pdEF0RGF0ZSh1bml0QnlOYW1lLCBuYW1lLCBkYXRlKVxuICBpZiAodW5pdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5hbWUgPz8gXCJcIlxuICB9XG4gIHJldHVybiBzaG9ydExhYmVsRnJvbVVuaXQodW5pdCwgcGx1cmFsaXphdGlvbkNhdGVnb3J5KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxGcm9tVW5pdChcbiAgdW5pdDogVW5pdCxcbiAgcGx1cmFsaXphdGlvbkNhdGVnb3J5OiBQbHVyYWxpemF0aW9uQ2F0ZWdvcnksXG4pOiBzdHJpbmcge1xuICBjb25zdCBsYWJlbCA9IHVuaXQubGFiZWxcbiAgcmV0dXJuIGxhYmVsID09PSB1bmRlZmluZWRcbiAgICA/IHVuaXQubmFtZVxuICAgIDogdHlwZW9mIGxhYmVsID09PSBcInN0cmluZ1wiXG4gICAgICA/IGxhYmVsXG4gICAgICA6IChsYWJlbFtwbHVyYWxpemF0aW9uQ2F0ZWdvcnldID8/IHVuaXQubmFtZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3J0TGFiZWxGcm9tVW5pdChcbiAgdW5pdDogVW5pdCxcbiAgcGx1cmFsaXphdGlvbkNhdGVnb3J5OiBQbHVyYWxpemF0aW9uQ2F0ZWdvcnksXG4pOiBzdHJpbmcge1xuICBjb25zdCBzaG9ydExhYmVsID0gdW5pdC5zaG9ydF9sYWJlbFxuICByZXR1cm4gc2hvcnRMYWJlbCA9PT0gdW5kZWZpbmVkXG4gICAgPyBsYWJlbEZyb21Vbml0KHVuaXQsIHBsdXJhbGl6YXRpb25DYXRlZ29yeSlcbiAgICA6IHR5cGVvZiBzaG9ydExhYmVsID09PSBcInN0cmluZ1wiXG4gICAgICA/IHNob3J0TGFiZWxcbiAgICAgIDogKHNob3J0TGFiZWxbcGx1cmFsaXphdGlvbkNhdGVnb3J5XSA/P1xuICAgICAgICBsYWJlbEZyb21Vbml0KHVuaXQsIHBsdXJhbGl6YXRpb25D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