UNPKG

@openfisca/json-model

Version:

Library to handle informations extracted in JSON or YAML format from OpenFisca parameters, variables, etc

51 lines 10.9 kB
import { auditChain, auditBoolean, auditCleanArray, auditFunction, auditKeyValueDictionary, auditOptions, auditRequire, auditString, auditSwitch, auditTrimString } from "@auditors/core"; import { pluralizationCategories } from "../units.js"; import { auditDate } from "./periods.js"; function auditConstantUnit(audit, dataUnknown) { if (dataUnknown == null) { return [dataUnknown, null]; } if (typeof dataUnknown !== "object") { return audit.unexpectedType(dataUnknown, "object"); } const data = { ...dataUnknown }; const errors = {}; const remainingKeys = new Set(Object.keys(data)); auditConstantUnitContent(audit, data, errors, remainingKeys); return audit.reduceRemaining(data, errors, remainingKeys); } function auditConstantUnitContent(audit, data, errors, remainingKeys) { for (const key of ["label", "short_label"]) { audit.attribute(data, key, true, errors, remainingKeys, auditSwitch(auditString, auditKeyValueDictionary(auditOptions([...pluralizationCategories]), [auditString, auditRequire]))); } audit.attribute(data, "name", true, errors, remainingKeys, auditTrimString, auditRequire); audit.attribute(data, "parameter", true, errors, remainingKeys, auditTrimString); audit.attribute(data, "ratio", true, errors, remainingKeys, auditBoolean, auditFunction(value => value ? true : null)); } function auditUnit(audit, dataUnknown) { if (dataUnknown == null) { return [dataUnknown, null]; } if (typeof dataUnknown !== "object") { return audit.unexpectedType(dataUnknown, "object"); } const data = { ...dataUnknown }; const errors = {}; const remainingKeys = new Set(Object.keys(data)); if (data.units == undefined) { auditConstantUnitContent(audit, data, errors, remainingKeys); } else { for (const key of ["label", "short_label"]) { audit.attribute(data, key, true, errors, remainingKeys, auditSwitch(auditString, auditKeyValueDictionary(auditOptions([...pluralizationCategories]), [auditString, auditRequire]))); } audit.attribute(data, "name", true, errors, remainingKeys, auditTrimString, auditRequire); audit.attribute(data, "units", true, errors, remainingKeys, auditKeyValueDictionary(auditDate, [auditConstantUnit, auditRequire])); } return audit.reduceRemaining(data, errors, remainingKeys); } export const auditUnits = auditChain(auditCleanArray(auditUnit), auditRequire); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhdWRpdENoYWluIiwiYXVkaXRCb29sZWFuIiwiYXVkaXRDbGVhbkFycmF5IiwiYXVkaXRGdW5jdGlvbiIsImF1ZGl0S2V5VmFsdWVEaWN0aW9uYXJ5IiwiYXVkaXRPcHRpb25zIiwiYXVkaXRSZXF1aXJlIiwiYXVkaXRTdHJpbmciLCJhdWRpdFN3aXRjaCIsImF1ZGl0VHJpbVN0cmluZyIsInBsdXJhbGl6YXRpb25DYXRlZ29yaWVzIiwiYXVkaXREYXRlIiwiYXVkaXRDb25zdGFudFVuaXQiLCJhdWRpdCIsImRhdGFVbmtub3duIiwidW5leHBlY3RlZFR5cGUiLCJkYXRhIiwiZXJyb3JzIiwicmVtYWluaW5nS2V5cyIsIlNldCIsIk9iamVjdCIsImtleXMiLCJhdWRpdENvbnN0YW50VW5pdENvbnRlbnQiLCJyZWR1Y2VSZW1haW5pbmciLCJrZXkiLCJhdHRyaWJ1dGUiLCJ2YWx1ZSIsImF1ZGl0VW5pdCIsInVuaXRzIiwidW5kZWZpbmVkIiwiYXVkaXRVbml0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdWRpdG9ycy91bml0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhdWRpdENoYWluLFxuICBhdWRpdEJvb2xlYW4sXG4gIGF1ZGl0Q2xlYW5BcnJheSxcbiAgYXVkaXRGdW5jdGlvbixcbiAgYXVkaXRLZXlWYWx1ZURpY3Rpb25hcnksXG4gIGF1ZGl0T3B0aW9ucyxcbiAgYXVkaXRSZXF1aXJlLFxuICBhdWRpdFN0cmluZyxcbiAgYXVkaXRTd2l0Y2gsXG4gIGF1ZGl0VHJpbVN0cmluZyxcbiAgdHlwZSBBdWRpdCxcbn0gZnJvbSBcIkBhdWRpdG9ycy9jb3JlXCJcblxuaW1wb3J0IHsgcGx1cmFsaXphdGlvbkNhdGVnb3JpZXMgfSBmcm9tIFwiLi4vdW5pdHNcIlxuXG5pbXBvcnQgeyBhdWRpdERhdGUgfSBmcm9tIFwiLi9wZXJpb2RzXCJcblxuZnVuY3Rpb24gYXVkaXRDb25zdGFudFVuaXQoXG4gIGF1ZGl0OiBBdWRpdCxcbiAgZGF0YVVua25vd246IHVua25vd24sXG4pOiBbdW5rbm93biwgdW5rbm93bl0ge1xuICBpZiAoZGF0YVVua25vd24gPT0gbnVsbCkge1xuICAgIHJldHVybiBbZGF0YVVua25vd24sIG51bGxdXG4gIH1cbiAgaWYgKHR5cGVvZiBkYXRhVW5rbm93biAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBhdWRpdC51bmV4cGVjdGVkVHlwZShkYXRhVW5rbm93biwgXCJvYmplY3RcIilcbiAgfVxuXG4gIGNvbnN0IGRhdGE6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9ID0geyAuLi5kYXRhVW5rbm93biB9XG4gIGNvbnN0IGVycm9yczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gPSB7fVxuICBjb25zdCByZW1haW5pbmdLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhkYXRhKSlcblxuICBhdWRpdENvbnN0YW50VW5pdENvbnRlbnQoYXVkaXQsIGRhdGEsIGVycm9ycywgcmVtYWluaW5nS2V5cylcblxuICByZXR1cm4gYXVkaXQucmVkdWNlUmVtYWluaW5nKGRhdGEsIGVycm9ycywgcmVtYWluaW5nS2V5cylcbn1cblxuZnVuY3Rpb24gYXVkaXRDb25zdGFudFVuaXRDb250ZW50KFxuICBhdWRpdDogQXVkaXQsXG4gIGRhdGE6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LFxuICBlcnJvcnM6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LFxuICByZW1haW5pbmdLZXlzOiBTZXQ8c3RyaW5nPixcbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IGtleSBvZiBbXCJsYWJlbFwiLCBcInNob3J0X2xhYmVsXCJdKSB7XG4gICAgYXVkaXQuYXR0cmlidXRlKFxuICAgICAgZGF0YSxcbiAgICAgIGtleSxcbiAgICAgIHRydWUsXG4gICAgICBlcnJvcnMsXG4gICAgICByZW1haW5pbmdLZXlzLFxuICAgICAgYXVkaXRTd2l0Y2goXG4gICAgICAgIGF1ZGl0U3RyaW5nLFxuICAgICAgICBhdWRpdEtleVZhbHVlRGljdGlvbmFyeShhdWRpdE9wdGlvbnMoWy4uLnBsdXJhbGl6YXRpb25DYXRlZ29yaWVzXSksIFtcbiAgICAgICAgICBhdWRpdFN0cmluZyxcbiAgICAgICAgICBhdWRpdFJlcXVpcmUsXG4gICAgICAgIF0pLFxuICAgICAgKSxcbiAgICApXG4gIH1cbiAgYXVkaXQuYXR0cmlidXRlKFxuICAgIGRhdGEsXG4gICAgXCJuYW1lXCIsXG4gICAgdHJ1ZSxcbiAgICBlcnJvcnMsXG4gICAgcmVtYWluaW5nS2V5cyxcbiAgICBhdWRpdFRyaW1TdHJpbmcsXG4gICAgYXVkaXRSZXF1aXJlLFxuICApXG4gIGF1ZGl0LmF0dHJpYnV0ZShcbiAgICBkYXRhLFxuICAgIFwicGFyYW1ldGVyXCIsXG4gICAgdHJ1ZSxcbiAgICBlcnJvcnMsXG4gICAgcmVtYWluaW5nS2V5cyxcbiAgICBhdWRpdFRyaW1TdHJpbmcsXG4gIClcbiAgYXVkaXQuYXR0cmlidXRlKFxuICAgIGRhdGEsXG4gICAgXCJyYXRpb1wiLFxuICAgIHRydWUsXG4gICAgZXJyb3JzLFxuICAgIHJlbWFpbmluZ0tleXMsXG4gICAgYXVkaXRCb29sZWFuLFxuICAgIGF1ZGl0RnVuY3Rpb24oKHZhbHVlKSA9PiAodmFsdWUgPyB0cnVlIDogbnVsbCkpLFxuICApXG59XG5cbmZ1bmN0aW9uIGF1ZGl0VW5pdChhdWRpdDogQXVkaXQsIGRhdGFVbmtub3duOiB1bmtub3duKTogW3Vua25vd24sIHVua25vd25dIHtcbiAgaWYgKGRhdGFVbmtub3duID09IG51bGwpIHtcbiAgICByZXR1cm4gW2RhdGFVbmtub3duLCBudWxsXVxuICB9XG4gIGlmICh0eXBlb2YgZGF0YVVua25vd24gIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gYXVkaXQudW5leHBlY3RlZFR5cGUoZGF0YVVua25vd24sIFwib2JqZWN0XCIpXG4gIH1cblxuICBjb25zdCBkYXRhOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSA9IHsgLi4uZGF0YVVua25vd24gfVxuICBjb25zdCBlcnJvcnM6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9ID0ge31cbiAgY29uc3QgcmVtYWluaW5nS2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMoZGF0YSkpXG5cbiAgaWYgKGRhdGEudW5pdHMgPT0gdW5kZWZpbmVkKSB7XG4gICAgYXVkaXRDb25zdGFudFVuaXRDb250ZW50KGF1ZGl0LCBkYXRhLCBlcnJvcnMsIHJlbWFpbmluZ0tleXMpXG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgW1wibGFiZWxcIiwgXCJzaG9ydF9sYWJlbFwiXSkge1xuICAgICAgYXVkaXQuYXR0cmlidXRlKFxuICAgICAgICBkYXRhLFxuICAgICAgICBrZXksXG4gICAgICAgIHRydWUsXG4gICAgICAgIGVycm9ycyxcbiAgICAgICAgcmVtYWluaW5nS2V5cyxcbiAgICAgICAgYXVkaXRTd2l0Y2goXG4gICAgICAgICAgYXVkaXRTdHJpbmcsXG4gICAgICAgICAgYXVkaXRLZXlWYWx1ZURpY3Rpb25hcnkoYXVkaXRPcHRpb25zKFsuLi5wbHVyYWxpemF0aW9uQ2F0ZWdvcmllc10pLCBbXG4gICAgICAgICAgICBhdWRpdFN0cmluZyxcbiAgICAgICAgICAgIGF1ZGl0UmVxdWlyZSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICB9XG4gICAgYXVkaXQuYXR0cmlidXRlKFxuICAgICAgZGF0YSxcbiAgICAgIFwibmFtZVwiLFxuICAgICAgdHJ1ZSxcbiAgICAgIGVycm9ycyxcbiAgICAgIHJlbWFpbmluZ0tleXMsXG4gICAgICBhdWRpdFRyaW1TdHJpbmcsXG4gICAgICBhdWRpdFJlcXVpcmUsXG4gICAgKVxuICAgIGF1ZGl0LmF0dHJpYnV0ZShcbiAgICAgIGRhdGEsXG4gICAgICBcInVuaXRzXCIsXG4gICAgICB0cnVlLFxuICAgICAgZXJyb3JzLFxuICAgICAgcmVtYWluaW5nS2V5cyxcbiAgICAgIGF1ZGl0S2V5VmFsdWVEaWN0aW9uYXJ5KGF1ZGl0RGF0ZSwgW2F1ZGl0Q29uc3RhbnRVbml0LCBhdWRpdFJlcXVpcmVdKSxcbiAgICApXG4gIH1cblxuICByZXR1cm4gYXVkaXQucmVkdWNlUmVtYWluaW5nKGRhdGEsIGVycm9ycywgcmVtYWluaW5nS2V5cylcbn1cblxuZXhwb3J0IGNvbnN0IGF1ZGl0VW5pdHMgPSBhdWRpdENoYWluKGF1ZGl0Q2xlYW5BcnJheShhdWRpdFVuaXQpLCBhdWRpdFJlcXVpcmUpXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQ0VBLFVBQVUsRUFDVkMsWUFBWSxFQUNaQyxlQUFlLEVBQ2ZDLGFBQWEsRUFDYkMsdUJBQXVCLEVBQ3ZCQyxZQUFZLEVBQ1pDLFlBQVksRUFDWkMsV0FBVyxFQUNYQyxXQUFXLEVBQ1hDLGVBQWUsUUFFVixnQkFBZ0I7QUFBQSxTQUVkQyx1QkFBdUI7QUFBQSxTQUV2QkMsU0FBUztBQUVsQixTQUFTQyxpQkFBaUJBLENBQ3hCQyxLQUFZLEVBQ1pDLFdBQW9CLEVBQ0E7RUFDcEIsSUFBSUEsV0FBVyxJQUFJLElBQUksRUFBRTtJQUN2QixPQUFPLENBQUNBLFdBQVcsRUFBRSxJQUFJLENBQUM7RUFDNUI7RUFDQSxJQUFJLE9BQU9BLFdBQVcsS0FBSyxRQUFRLEVBQUU7SUFDbkMsT0FBT0QsS0FBSyxDQUFDRSxjQUFjLENBQUNELFdBQVcsRUFBRSxRQUFRLENBQUM7RUFDcEQ7RUFFQSxNQUFNRSxJQUFnQyxHQUFHO0lBQUUsR0FBR0Y7RUFBWSxDQUFDO0VBQzNELE1BQU1HLE1BQWtDLEdBQUcsQ0FBQyxDQUFDO0VBQzdDLE1BQU1DLGFBQWEsR0FBRyxJQUFJQyxHQUFHLENBQUNDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDTCxJQUFJLENBQUMsQ0FBQztFQUVoRE0sd0JBQXdCLENBQUNULEtBQUssRUFBRUcsSUFBSSxFQUFFQyxNQUFNLEVBQUVDLGFBQWEsQ0FBQztFQUU1RCxPQUFPTCxLQUFLLENBQUNVLGVBQWUsQ0FBQ1AsSUFBSSxFQUFFQyxNQUFNLEVBQUVDLGFBQWEsQ0FBQztBQUMzRDtBQUVBLFNBQVNJLHdCQUF3QkEs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