Skip to content

Error: Could not process ValueSet at node_modules/kbv.basis/KBV_VS_Base_Diagnosis_SNOMED_CT.json: Maximum call stack size exceeded #283

@fardolieri

Description

@fardolieri

I tried running

npm install gofsh
npm --registry https://packages.simplifier.net install kbv.basis@1.3.0
node node_modules/.bin/gofsh node_modules/kbv.basis/ --out gofish_output --dependency de.basisprofil.r4@1.3.2

This produces an error

...
info  Processed 10 of 40 ValueSets...
error Could not process ValueSet at node_modules/kbv.basis/KBV_VS_Base_Diagnosis_SNOMED_CT.json: Maximum call stack size exceeded
info  Processed 15 of 40 ValueSets...
...

Turns out the problem lies in this line

const newRules: ExportableValueSet['rules'] = [];
newRules.push(
...CaretValueRuleExtractor.processResource(input, fisher, input.resourceType, config)
);

The size of an array that can be destructured into an argument list is limited by JavaScript. In my case the array has 466433 elements. Try it yourself in a node REPL.

[].push(...Array.from({ length: 400_000 }))

You will get a RangeError: Maximum call stack size exceeded because it cannot handle a function call with 400k arguments. Fortunately the fix for this is straight forward by not using Array.push:

    const newRules: ExportableValueSet['rules'] = [
      ...CaretValueRuleExtractor.processResource(input, fisher, input.resourceType, config)
    ];

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions