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!

99 lines (98 loc) 4.95 kB
"use strict"; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.registerPropertyBeanDependencies = void 0; var typescript_1 = __importDefault(require("typescript")); var node_source_descriptor_1 = require("../ts-helpers/node-source-descriptor"); var CompilationContext_1 = require("../../compilation-context/CompilationContext"); var SourceFilesCache_1 = require("../ts-helpers/source-files-cache/SourceFilesCache"); var findClassDeclarationInSourceFileByName_1 = require("../ts-helpers/predicates/findClassDeclarationInSourceFileByName"); var getParameterType_1 = require("./getParameterType"); var BeanDependenciesRepository_1 = require("./BeanDependenciesRepository"); var ExtendedSet_1 = require("../utils/ExtendedSet"); var registerPropertyBeanDependencies = function (descriptor) { var _a; //Assuming that we're already checked that first argument in property bean is reference var classReference = descriptor.node.initializer.arguments[0]; var nameToFind = classReference.getText(); var sourceFile = classReference.getSourceFile(); var nodeSourceDescriptor = (0, node_source_descriptor_1.getNodeSourceDescriptorDeep)(sourceFile, nameToFind); if (nodeSourceDescriptor === null) { CompilationContext_1.CompilationContext.reportError({ node: classReference, message: 'Can\'t qualify property Bean dependencies, please try to use method Bean', filePath: descriptor.contextDescriptor.absolutePath, relatedContextPath: descriptor.contextDescriptor.absolutePath, }); return; } var nodeSourceFile = SourceFilesCache_1.SourceFilesCache.getSourceFileByPath(nodeSourceDescriptor.path); var classDeclaration = (0, findClassDeclarationInSourceFileByName_1.findClassDeclarationInSourceFileByName)(nodeSourceFile, nodeSourceDescriptor.name); descriptor.beanSourceLocation = nodeSourceDescriptor.path; if (classDeclaration === null) { CompilationContext_1.CompilationContext.reportError({ node: classReference, message: 'Can\'t qualify property Bean dependencies, please try to use method bean', filePath: descriptor.contextDescriptor.absolutePath, relatedContextPath: descriptor.contextDescriptor.absolutePath, }); return; } var constructor = (_a = classDeclaration.members.find(typescript_1.default.isConstructorDeclaration)) !== null && _a !== void 0 ? _a : null; if (constructor === null) { return; } var parameterTypes = constructor.parameters.map(function (parameter) { return [parameter, (0, getParameterType_1.getParameterType)(parameter)]; }); var qualifiedParameters = parameterTypes.filter(function (_a) { var _b = __read(_a, 2), _ = _b[0], parameterType = _b[1]; return parameterType !== null; }); qualifiedParameters.forEach(function (_a) { var _b = __read(_a, 2), parameter = _b[0], qualifiedType = _b[1]; BeanDependenciesRepository_1.BeanDependenciesRepository.registerBeanDependency(descriptor, { qualifier: null, contextName: descriptor.contextDescriptor.name, qualifiedType: qualifiedType, parameterName: parameter.name.getText(), node: parameter, qualifiedBeans: new ExtendedSet_1.ExtendedSet(), }); }); var unQualifiedParameters = parameterTypes.filter(function (_a) { var _b = __read(_a, 2), _ = _b[0], parameterType = _b[1]; return parameterType === null; }); if (unQualifiedParameters.length === 0) { return; } var unQualifiedParametersText = unQualifiedParameters .map(function (_a) { var _b = __read(_a, 1), parameter = _b[0]; return parameter.getText() + " <--"; }).join('\n'); CompilationContext_1.CompilationContext.reportError({ node: classReference, message: "Class \"" + classReference.getText() + "\" have some unqualified dependencies, please try to use \"method Bean\" instead:\n" + unQualifiedParametersText, filePath: descriptor.contextDescriptor.absolutePath, relatedContextPath: descriptor.contextDescriptor.absolutePath, }); }; exports.registerPropertyBeanDependencies = registerPropertyBeanDependencies;