diff --git a/example.env b/example.env index 6a5c600a44acf107854ce2df380d40521499726e..89f58881af28ad4a838b10bb4c7fb3540e38313a 100644 --- a/example.env +++ b/example.env @@ -15,7 +15,7 @@ BASE_URL="http://localhost:3000" CHILDREN_KEY="enfants" # Path to file containing decompositions in JSON format -DECOMPOSITION_PATH="../openfisca-france-json/custom/decompositions.json" +DECOMPOSITION_PATH="../openfisca-france-json/decompositions_customized.json" # Name of variable used as root of decomposition DECOMPOSITION_ROOT="revenu_disponible" diff --git a/package-lock.json b/package-lock.json index 35d102f9e54f7530662d44ec3aa94e3f4a97aa7f..25565be80f2471c99c15683da7b9fd163c9684e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "@auditors/core": "^0.1.7", "@fontsource/lato": "^4.3.0", "@fontsource/lora": "^4.3.0", - "@openfisca/ast": "^0.8.9", + "@openfisca/ast": "^0.9.1", "@sveltejs/adapter-node": "next", "@sveltejs/kit": "next", "@tailwindcss/forms": "^0.3.2", @@ -1907,9 +1907,9 @@ } }, "node_modules/@openfisca/ast": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@openfisca/ast/-/ast-0.8.9.tgz", - "integrity": "sha512-8V+hFc1lJOx4VqG9V+MxP7miJ68IxlxEeOD1cHVKI5HZVXA1ZebBzHWNcPiWLlr61FvwPrfcgni+9cZQN9tCpg==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@openfisca/ast/-/ast-0.9.1.tgz", + "integrity": "sha512-MPlbVhe6zk78RptA/Q6KI5i6t9k7jIR7aQ2oRFa8Q2ql0//9aet/8rXWO2798i40+/X48Ug3hAe1LNQWC6Lplw==", "dev": true, "dependencies": { "@auditors/core": "^0.1.11", @@ -8235,9 +8235,9 @@ } }, "@openfisca/ast": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@openfisca/ast/-/ast-0.8.9.tgz", - "integrity": "sha512-8V+hFc1lJOx4VqG9V+MxP7miJ68IxlxEeOD1cHVKI5HZVXA1ZebBzHWNcPiWLlr61FvwPrfcgni+9cZQN9tCpg==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@openfisca/ast/-/ast-0.9.1.tgz", + "integrity": "sha512-MPlbVhe6zk78RptA/Q6KI5i6t9k7jIR7aQ2oRFa8Q2ql0//9aet/8rXWO2798i40+/X48Ug3hAe1LNQWC6Lplw==", "dev": true, "requires": { "@auditors/core": "^0.1.11", diff --git a/package.json b/package.json index 126a0524098287343300e091c080f5921bf59b67..4c8d333b4fb1fc0c41f7a6c361bfd63650fd44e8 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "@auditors/core": "^0.1.7", "@fontsource/lato": "^4.3.0", "@fontsource/lora": "^4.3.0", - "@openfisca/ast": "^0.8.9", + "@openfisca/ast": "^0.9.1", "@sveltejs/adapter-node": "next", "@sveltejs/kit": "next", "@tailwindcss/forms": "^0.3.2", diff --git a/src/lib/decompositions.ts b/src/lib/decompositions.ts index fdd9e6a8964ac73bdf6e8e546389e1c3a67f1fe6..387d2e059aa636d606e9c8bba3a06fe6ac3aa323 100644 --- a/src/lib/decompositions.ts +++ b/src/lib/decompositions.ts @@ -1,4 +1,7 @@ -import type { Decomposition as DecompositionJson } from "@openfisca/ast" +import type { + Decomposition as DecompositionJson, + DecompositionReference, +} from "@openfisca/ast" export interface DecompositionCore extends DecompositionJson { lastReview?: string @@ -37,6 +40,7 @@ export function decompositionByNameFromCore( name: string, parentName: string | undefined = undefined, index = 0, + negate: boolean | undefined = undefined, decompositionByName: DecompositionByName = {}, visitedNames = new Set<string>(), ): DecompositionByName | undefined { @@ -58,14 +62,16 @@ export function decompositionByNameFromCore( label: decompositionCore.label, lastReview: decompositionCore.lastReview, name, - negate: decompositionCore.negate, + negate, } decompositionByName[name] = decomposition if (parentName !== undefined) { decomposition.parentName = parentName } if (decompositionCore.children !== undefined) { - decomposition.childrenName = decompositionCore.children + decomposition.childrenName = decompositionCore.children.map( + ({ name }) => name, + ) let ancestor: Decomposition | undefined = undefined let depth = 0 for (const ancestorName of iterDecompositionAncestorsName( @@ -90,13 +96,14 @@ export function decompositionByNameFromCore( } for (const [ childIndex, - childName, + childReference, ] of decompositionCore.children.entries()) { decompositionByNameFromCore( decompositionCoreByName, - childName, + childReference.name, name, childIndex, + childReference.negate, decompositionByName, visitedNames, ) @@ -282,10 +289,10 @@ export function* walkDecompositionsCore( yield [name, decompositionCore] } if (decompositionCore.children !== undefined) { - for (const childName of decompositionCore.children) { + for (const childReference of decompositionCore.children) { yield* walkDecompositionsCore( decompositionCoreByName, - childName, + childReference.name, depthFirst, ) } @@ -308,10 +315,10 @@ export function* walkDecompositionsCoreName( yield name } if (decompositionCore.children !== undefined) { - for (const childName of decompositionCore.children) { + for (const childReference of decompositionCore.children) { yield* walkDecompositionsCoreName( decompositionCoreByName, - childName, + childReference.name, depthFirst, ) }