UNPKG

@bitloops/bl-transpiler

Version:
106 lines 6.18 kB
"use strict"; 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