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
JavaScript
;
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;