UNPKG

dependency-injection-cat

Version:

DI Cat is a truly clean DI-container, which allows you not to pollute your business logic with decorators from DI/IOC libraries!

63 lines (62 loc) 3.87 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.replaceContainerCall = void 0; var typescript_1 = require("typescript"); var upath_1 = __importDefault(require("upath")); var CompilationContext_1 = require("../../../compilation-context/CompilationContext"); var getContextNameFromContainerCall_1 = require("./getContextNameFromContainerCall"); var addContextPool_1 = require("../../build-context/transformers/addContextPool"); var validContainerKeys_1 = require("./validContainerKeys"); var constants_1 = require("../../context/constants"); var ContextNamesRepository_1 = require("../../context/ContextNamesRepository"); var registerContextNames_1 = require("../../context/registerContextNames"); var removeExtensionFromPath_1 = require("../../utils/removeExtensionFromPath"); var replaceContainerCall = function (node, factoryImportsToAdd) { var _a, _b; CompilationContext_1.CompilationContext.clearErrorsByFilePath(node.getSourceFile().fileName); if (!validContainerKeys_1.validContainerKeys.includes(node.expression.name.getText())) { CompilationContext_1.CompilationContext.reportError({ node: node, message: "Container has only following methods: " + validContainerKeys_1.validContainerKeys.join(', '), filePath: node.getSourceFile().fileName, }); return node; } var contextName = (0, getContextNameFromContainerCall_1.getContextNameFromContainerCall)(node); if (contextName === null) { return node; } if (contextName === constants_1.GLOBAL_CONTEXT_NAME) { CompilationContext_1.CompilationContext.reportError({ message: 'You can\'t access Global Context', node: node, filePath: node.getSourceFile().fileName, }); return node; } var contextPath = (_a = ContextNamesRepository_1.ContextNamesRepository.nameToPath.get(contextName)) !== null && _a !== void 0 ? _a : null; if (contextPath === null) { (0, registerContextNames_1.registerAllContextNames)(); contextPath = (_b = ContextNamesRepository_1.ContextNamesRepository.nameToPath.get(contextName)) !== null && _b !== void 0 ? _b : null; if (contextPath === null) { CompilationContext_1.CompilationContext.reportError({ node: node, message: "Context with name \"" + contextName + "\" not found", filePath: node.getSourceFile().fileName, }); return node; } } // TODO check interfaces // checkBeansInterface(node, contextDescriptor); var contextPathWithoutExt = (0, removeExtensionFromPath_1.removeExtensionFromPath)(upath_1.default.normalize(contextPath)); var importPath = "./" + upath_1.default.relative(upath_1.default.dirname(node.getSourceFile().fileName), contextPathWithoutExt); var importNamespaceName = "" + contextName + addContextPool_1.CONTEXT_POOL_POSTFIX; var importDeclaration = typescript_1.factory.createImportDeclaration(undefined, undefined, typescript_1.factory.createImportClause(false, undefined, typescript_1.factory.createNamespaceImport(typescript_1.factory.createIdentifier(importNamespaceName))), typescript_1.factory.createStringLiteral(importPath)); factoryImportsToAdd.push(importDeclaration); return typescript_1.factory.updateCallExpression(node, typescript_1.factory.createPropertyAccessExpression(typescript_1.factory.createPropertyAccessExpression(typescript_1.factory.createIdentifier(importNamespaceName), typescript_1.factory.createIdentifier(importNamespaceName)), node.expression.name), node.typeArguments, node.arguments); }; exports.replaceContainerCall = replaceContainerCall;