@openfisca/json-model
Version:
Library to handle informations extracted in JSON or YAML format from OpenFisca parameters, variables, etc
87 lines (86 loc) • 11.1 kB
JavaScript
import { ParameterClass, ScaleType } from "../../parameters.js"; /// Note: This converter assumes that the input data is a valid editable parameter.
export function convertEditableParameterToRaw(editableParameter) {
const parameterKeys = new Set(["brackets", "class", "children", "description", "documentation", "file_path", "name", "values"]);
const rawParameter = {
...editableParameter
};
// Move non-parameter attributes to metadata.
const metadata = {};
for (const [key, value] of Object.entries(editableParameter)) {
if (parameterKeys.has(key)) {
continue;
}
metadata[key] = value;
delete rawParameter[key];
}
switch (editableParameter.class) {
case ParameterClass.Node:
{
if (editableParameter.children !== undefined) {
for (const [key, child] of Object.entries(editableParameter.children)) {
rawParameter[key] = convertEditableParameterToRaw(child);
}
delete rawParameter.children;
}
break;
}
case ParameterClass.Scale:
{
switch (editableParameter.type) {
case ScaleType.LinearAverageRate:
{
rawParameter.brackets = editableParameter.brackets.map(editableBracket => {
const rawBracket = {
...editableBracket
};
rawBracket.average_rate = editableBracket.rate;
delete rawBracket.rate;
return rawBracket;
});
delete metadata.type;
break;
}
case ScaleType.MarginalAmount:
{
delete metadata.type;
break;
}
case ScaleType.MarginalRate:
{
delete metadata.type;
break;
}
case ScaleType.SingleAmount:
{
break;
}
}
break;
}
case ParameterClass.Value:
{
delete metadata.type;
// if (editableParameter.values !== undefined) {
// for (const [instant, value] of Object.entries(
// editableParameter.values,
// )) {
// rawParameter[instant] = value
// }
// delete rawParameter.values
// }
break;
}
}
delete rawParameter.class;
const referencesByInstant = editableParameter.reference;
if (referencesByInstant !== undefined) {
const newReferencesByInstant = Object.fromEntries(Object.entries(referencesByInstant).map(([instant, references]) => [instant, references.length === 1 ? references[0] : references]));
const instants = Object.keys(newReferencesByInstant);
metadata.reference = instants.length === 1 && instants[0] === "0001-01-01" ? newReferencesByInstant["0001-01-01"] : newReferencesByInstant;
}
if (Object.keys(metadata).length > 0) {
rawParameter.metadata = metadata;
}
return rawParameter;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJhbWV0ZXJDbGFzcyIsIlNjYWxlVHlwZSIsImNvbnZlcnRFZGl0YWJsZVBhcmFtZXRlclRvUmF3IiwiZWRpdGFibGVQYXJhbWV0ZXIiLCJwYXJhbWV0ZXJLZXlzIiwiU2V0IiwicmF3UGFyYW1ldGVyIiwibWV0YWRhdGEiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJoYXMiLCJjbGFzcyIsIk5vZGUiLCJjaGlsZHJlbiIsInVuZGVmaW5lZCIsImNoaWxkIiwiU2NhbGUiLCJ0eXBlIiwiTGluZWFyQXZlcmFnZVJhdGUiLCJicmFja2V0cyIsIm1hcCIsImVkaXRhYmxlQnJhY2tldCIsInJhd0JyYWNrZXQiLCJhdmVyYWdlX3JhdGUiLCJyYXRlIiwiTWFyZ2luYWxBbW91bnQiLCJNYXJnaW5hbFJhdGUiLCJTaW5nbGVBbW91bnQiLCJWYWx1ZSIsInJlZmVyZW5jZXNCeUluc3RhbnQiLCJyZWZlcmVuY2UiLCJuZXdSZWZlcmVuY2VzQnlJbnN0YW50IiwiZnJvbUVudHJpZXMiLCJpbnN0YW50IiwicmVmZXJlbmNlcyIsImxlbmd0aCIsImluc3RhbnRzIiwia2V5cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdWRpdG9ycy9wYXJhbWV0ZXJzL2VkaXRhYmxlX3RvX3Jhdy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhcmFtZXRlciB9IGZyb20gXCIuLi8uLi9wYXJhbWV0ZXJzXCJcbmltcG9ydCB7IFBhcmFtZXRlckNsYXNzLCBTY2FsZVR5cGUgfSBmcm9tIFwiLi4vLi4vcGFyYW1ldGVyc1wiXG5cbi8vLyBOb3RlOiBUaGlzIGNvbnZlcnRlciBhc3N1bWVzIHRoYXQgdGhlIGlucHV0IGRhdGEgaXMgYSB2YWxpZCBlZGl0YWJsZSBwYXJhbWV0ZXIuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEVkaXRhYmxlUGFyYW1ldGVyVG9SYXcoZWRpdGFibGVQYXJhbWV0ZXI6IFBhcmFtZXRlcik6IHtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93blxufSB7XG4gIGNvbnN0IHBhcmFtZXRlcktleXMgPSBuZXcgU2V0KFtcbiAgICBcImJyYWNrZXRzXCIsXG4gICAgXCJjbGFzc1wiLFxuICAgIFwiY2hpbGRyZW5cIixcbiAgICBcImRlc2NyaXB0aW9uXCIsXG4gICAgXCJkb2N1bWVudGF0aW9uXCIsXG4gICAgXCJmaWxlX3BhdGhcIixcbiAgICBcIm5hbWVcIixcbiAgICBcInZhbHVlc1wiLFxuICBdKVxuICBjb25zdCByYXdQYXJhbWV0ZXI6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9ID0geyAuLi5lZGl0YWJsZVBhcmFtZXRlciB9XG5cbiAgLy8gTW92ZSBub24tcGFyYW1ldGVyIGF0dHJpYnV0ZXMgdG8gbWV0YWRhdGEuXG4gIGNvbnN0IG1ldGFkYXRhOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSA9IHt9XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGVkaXRhYmxlUGFyYW1ldGVyKSkge1xuICAgIGlmIChwYXJhbWV0ZXJLZXlzLmhhcyhrZXkpKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBtZXRhZGF0YVtrZXldID0gdmFsdWVcbiAgICBkZWxldGUgcmF3UGFyYW1ldGVyW2tleV1cbiAgfVxuXG4gIHN3aXRjaCAoZWRpdGFibGVQYXJhbWV0ZXIuY2xhc3MpIHtcbiAgICBjYXNlIFBhcmFtZXRlckNsYXNzLk5vZGU6IHtcbiAgICAgIGlmIChlZGl0YWJsZVBhcmFtZXRlci5jaGlsZHJlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKGVkaXRhYmxlUGFyYW1ldGVyLmNoaWxkcmVuKSkge1xuICAgICAgICAgIHJhd1BhcmFtZXRlcltrZXldID0gY29udmVydEVkaXRhYmxlUGFyYW1ldGVyVG9SYXcoY2hpbGQpXG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHJhd1BhcmFtZXRlci5jaGlsZHJlblxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSBQYXJhbWV0ZXJDbGFzcy5TY2FsZToge1xuICAgICAgc3dpdGNoIChlZGl0YWJsZVBhcmFtZXRlci50eXBlKSB7XG4gICAgICAgIGNhc2UgU2NhbGVUeXBlLkxpbmVhckF2ZXJhZ2VSYXRlOiB7XG4gICAgICAgICAgcmF3UGFyYW1ldGVyLmJyYWNrZXRzID0gZWRpdGFibGVQYXJhbWV0ZXIuYnJhY2tldHMubWFwKFxuICAgICAgICAgICAgKGVkaXRhYmxlQnJhY2tldCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByYXdCcmFja2V0OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSA9IHtcbiAgICAgICAgICAgICAgICAuLi5lZGl0YWJsZUJyYWNrZXQsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmF3QnJhY2tldC5hdmVyYWdlX3JhdGUgPSBlZGl0YWJsZUJyYWNrZXQucmF0ZVxuICAgICAgICAgICAgICBkZWxldGUgcmF3QnJhY2tldC5yYXRlXG4gICAgICAgICAgICAgIHJldHVybiByYXdCcmFja2V0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIClcbiAgICAgICAgICBkZWxldGUgbWV0YWRhdGEudHlwZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBTY2FsZVR5cGUuTWFyZ2luYWxBbW91bnQ6IHtcbiAgICAgICAgICBkZWxldGUgbWV0YWRhdGEudHlwZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBTY2FsZVR5cGUuTWFyZ2luYWxSYXRlOiB7XG4gICAgICAgICAgZGVsZXRlIG1ldGFkYXRhLnR5cGVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgU2NhbGVUeXBlLlNpbmdsZUFtb3VudDoge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgUGFyYW1ldGVyQ2xhc3MuVmFsdWU6IHtcbiAgICAgIGRlbGV0ZSBtZXRhZGF0YS50eXBlXG4gICAgICAvLyBpZiAoZWRpdGFibGVQYXJhbWV0ZXIudmFsdWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vICAgZm9yIChjb25zdCBbaW5zdGFudCwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgLy8gICAgIGVkaXRhYmxlUGFyYW1ldGVyLnZhbHVlcyxcbiAgICAgIC8vICAgKSkge1xuICAgICAgLy8gICAgIHJhd1BhcmFtZXRlcltpbnN0YW50XSA9IHZhbHVlXG4gICAgICAvLyAgIH1cbiAgICAgIC8vICAgZGVsZXRlIHJhd1BhcmFtZXRlci52YWx1ZXNcbiAgICAgIC8vIH1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG4gIGRlbGV0ZSByYXdQYXJhbWV0ZXIuY2xhc3NcblxuICBjb25zdCByZWZlcmVuY2VzQnlJbnN0YW50ID0gZWRpdGFibGVQYXJhbWV0ZXIucmVmZXJlbmNlXG4gIGlmIChyZWZlcmVuY2VzQnlJbnN0YW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBuZXdSZWZlcmVuY2VzQnlJbnN0YW50ID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMocmVmZXJlbmNlc0J5SW5zdGFudCkubWFwKChbaW5zdGFudCwgcmVmZXJlbmNlc10pID0+IFtcbiAgICAgICAgaW5zdGFudCxcbiAgICAgICAgcmVmZXJlbmNlcy5sZW5ndGggPT09IDEgPyByZWZlcmVuY2VzWzBdIDogcmVmZXJlbmNlcyxcbiAgICAgIF0pLFxuICAgIClcbiAgICBjb25zdCBpbnN0YW50cyA9IE9iamVjdC5rZXlzKG5ld1JlZmVyZW5jZXNCeUluc3RhbnQpXG4gICAgbWV0YWRhdGEucmVmZXJlbmNlID1cbiAgICAgIGluc3RhbnRzLmxlbmd0aCA9PT0gMSAmJiBpbnN0YW50c1swXSA9PT0gXCIwMDAxLTAxLTAxXCJcbiAgICAgICAgPyBuZXdSZWZlcmVuY2VzQnlJbnN0YW50W1wiMDAwMS0wMS0wMVwiXVxuICAgICAgICA6IG5ld1JlZmVyZW5jZXNCeUluc3RhbnRcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCkge1xuICAgIHJhd1BhcmFtZXRlci5tZXRhZGF0YSA9IG1ldGFkYXRhXG4gIH1cblxuICByZXR1cm4gcmF3UGFyYW1ldGVyXG59XG4iXSwibWFwcGluZ3MiOiJTQUNTQSxjQUFjLEVBQUVDLFNBQVMsK0JBRWxDO0FBQ0EsT0FBTyxTQUFTQyw2QkFBNkJBLENBQUNDLGlCQUE0QixFQUV4RTtFQUNBLE1BQU1DLGFBQWEsR0FBRyxJQUFJQyxHQUFHLENBQUMsQ0FDNUIsVUFBVSxFQUNWLE9BQU8sRUFDUCxVQUFVLEVBQ1YsYUFBYSxFQUNiLGVBQWUsRUFDZixXQUFXLEVBQ1gsTUFBTSxFQUNOLFFBQVEsQ0FDVCxDQUFDO0VBQ0YsTUFBTUMsWUFBd0MsR0FBRztJQUFFLEdBQUdIO0VBQWtCLENBQUM7O0VBRXpFO0VBQ0EsTUFBTUksUUFBb0MsR0FBRyxDQUFDLENBQUM7RUFDL0MsS0FBSyxNQUFNLENBQUNDLEdBQUcsRUFBRUMsS0FBSyxDQUFDLElBQUlDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDUixpQkFBaUIsQ0FBQyxFQUFFO0lBQzVELElBQUlDLGFBQWEsQ0FBQ1EsR0FBRyxDQUFDSixHQUFHLENBQUMsRUFBRTtNQUMxQjtJQUNGO0lBQ0FELFFBQVEsQ0FBQ0MsR0FBRyxDQUFDLEdBQUdDLEtBQUs7SUFDckIsT0FBT0gsWUFBWSxDQUFDRSxHQUFHLENBQUM7RUFDMUI7RUFFQSxRQUFRTCxpQkFBaUIsQ0FBQ1UsS0FBSztJQUM3QixLQUFLYixjQUFjLENBQUNjLElBQUk7TUFBRTtRQUN4QixJQUFJWCxpQkFBaUIsQ0FBQ1ksUUFBUSxLQUFLQyxTQUFTLEVBQUU7VUFDNUMsS0FBSyxNQUFNLENBQUNSLEdBQUcsRUFBRVMsS0FBSyxDQUFDLElBQUlQLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDUixpQkFBaUIsQ0FBQ1ksUUFB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