I know that there are many questions of similar title like this. However, I read all of them and I cannot get to solve my problem. I've fallen in a circular dependency where I have those functions[each one defined in a dedicated module]:
generateNodeCode
generateGroupCode
generateContainerCode
and the circle is closed by generateNodeCode
referencing generateGroupCode
which in turn referencing generateGroupCode
which in turn referencing generateContainerCode
.
To simplify the situation, look at this graph.
I know that I should refactor this to reach a better design but I do not know how.
Here is an example code:
generateNodeCode.js
const { generateGroupCode } = require("./generateGroupCode");
function generateNodeCode(node) {
switch(node.constructor.name) {
// many cases
case "Group":
return generateGroupCode(node);
}
}
module.exports = {
generateNodeCode
};
generateGroupCode.js
const { generateContainerCode } = require("./generateContainerCode");
function generateGroupCode(group) {
// some stuff
return generateContainerCode();
}
module.exports = {
generateGroupCode
};
generateContainerCode.js
const { generateNodeCode } = require("./generateNodeCode");
function generateContainerCode(children) {
// some stuff
children.forEach(child => {
generateNodeCode();
});
}
module.exports = {
generateContainerCode
};