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