@bitloops/bl-transpiler
Version:
The one and only Bitloops Language transpiler
106 lines • 6.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.IntermediateASTToCompletedIntermediateASTTransformer = void 0;
const mappings_js_1 = require("../../../helpers/mappings.js");
const ReturnOkErrorNodeTransformer_js_1 = require("./node-transformers/ReturnOkErrorNodeTransformer.js");
const DomainEventHandlerNodeTransformer_js_1 = require("./node-transformers/DomainEventHandlerNodeTransformer.js");
const IntegrationEventHandlerNodeTransformer_js_1 = require("./node-transformers/IntegrationEventHandlerNodeTransformer.js");
const IntegrationEventNodeTransformer_js_1 = require("./node-transformers/IntegrationEventNodeTransformer.js");
const ExecuteNodeTransformer_js_1 = require("./node-transformers/ExecuteNodeTransformer.js");
const RepoPortNodeTransformer_js_1 = require("./node-transformers/RepoPortNodeTransformer.js");
const ServicePortNodeTransformer_js_1 = require("./node-transformers/ServicePortNodeTransformer.js");
const DomainServiceNodeTransformer_js_1 = require("./node-transformers/DomainServiceNodeTransformer.js");
const IfErrorExpressionNodeTransformer_js_1 = require("./node-transformers/IfErrorExpressionNodeTransformer.js");
class IntermediateASTToCompletedIntermediateASTTransformer {
complete(intermediateAST) {
const boundedContexts = this.completeCore(intermediateAST.core);
const intermediateASTSetup = intermediateAST.setup;
return {
core: boundedContexts,
setup: intermediateASTSetup,
};
}
completeCore(core) {
let boundedContexts = {};
for (const [boundedContextName, boundedContext] of Object.entries(core)) {
for (const [moduleName, ASTTree] of Object.entries(boundedContext)) {
const treeUpdated = ASTTree.copy(); // TODO implement copy method
const rootNode = treeUpdated.getRootNode();
treeUpdated.traverse(rootNode, (node) => {
const transformer = this.getNodeTransformer({
intermediateASTNode: node,
intermediateASTTree: treeUpdated,
});
if (transformer) {
transformer.run();
}
});
treeUpdated.buildValueRecursiveBottomUp(rootNode);
// Uncomment to validate parent refs and prevent bugs from model-to-model transformations
// treeUpdated.validateParentRefs();
if (!boundedContexts) {
boundedContexts = {
[boundedContextName]: {
[moduleName]: treeUpdated,
},
};
}
else if (!boundedContexts[boundedContextName]) {
boundedContexts[boundedContextName] = {
[moduleName]: treeUpdated,
};
}
else if (!boundedContexts[boundedContextName][moduleName]) {
boundedContexts[boundedContextName][moduleName] = treeUpdated;
}
}
}
return boundedContexts;
}
getNodeTransformer(factoryParams) {
const { intermediateASTNode, intermediateASTTree } = factoryParams;
const type = intermediateASTNode.getNodeType();
switch (type) {
case mappings_js_1.BitloopsTypesMapping.TIfErrorExpression: {
const ifErrorExpressionNode = intermediateASTNode;
return new IfErrorExpressionNodeTransformer_js_1.IfErrorExpressionNodeTransformer(intermediateASTTree, ifErrorExpressionNode);
}
case mappings_js_1.BitloopsTypesMapping.TOkErrorReturnType: {
const returnOkErrorNode = intermediateASTNode;
return new ReturnOkErrorNodeTransformer_js_1.ReturnOKErrorNodeTransformer(intermediateASTTree, returnOkErrorNode);
}
case mappings_js_1.BitloopsTypesMapping.TDomainEventHandler: {
const domainEventHandlerNode = intermediateASTNode;
return new DomainEventHandlerNodeTransformer_js_1.DomainEventHandlerNodeTransformer(intermediateASTTree, domainEventHandlerNode);
}
case mappings_js_1.BitloopsTypesMapping.TIntegrationEventHandler: {
const integrationEventHandlerNode = intermediateASTNode;
return new IntegrationEventHandlerNodeTransformer_js_1.IntegrationEventHandlerNodeTransformer(intermediateASTTree, integrationEventHandlerNode);
}
case mappings_js_1.BitloopsTypesMapping.TIntegrationEvent: {
const integrationEventNode = intermediateASTNode;
return new IntegrationEventNodeTransformer_js_1.IntegrationEventNodeTransformer(intermediateASTTree, integrationEventNode);
}
case mappings_js_1.BitloopsTypesMapping.TExecute: {
const executeNode = intermediateASTNode;
return new ExecuteNodeTransformer_js_1.ExecuteNodeTransformer(intermediateASTTree, executeNode);
}
case mappings_js_1.BitloopsTypesMapping.TRepoPort: {
const repoPortNode = intermediateASTNode;
return new RepoPortNodeTransformer_js_1.RepoPortNodeTransformer(intermediateASTTree, repoPortNode);
}
case mappings_js_1.BitloopsTypesMapping.TServicePort: {
const servicePortNode = intermediateASTNode;
return new ServicePortNodeTransformer_js_1.ServicePortNodeTransformer(intermediateASTTree, servicePortNode);
}
case mappings_js_1.BitloopsTypesMapping.TDomainService: {
const servicePortNode = intermediateASTNode;
return new DomainServiceNodeTransformer_js_1.DomainServiceNodeTransformer(intermediateASTTree, servicePortNode);
}
default:
return null;
}
}
}
exports.IntermediateASTToCompletedIntermediateASTTransformer = IntermediateASTToCompletedIntermediateASTTransformer;
//# sourceMappingURL=IntermediateASTToAST.js.map