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!
55 lines (54 loc) • 2.49 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.registerArrowFunctionBean = void 0;
var CompilationContext_1 = require("../../compilation-context/CompilationContext");
var getPropertyDecoratorBeanInfo_1 = require("../ts-helpers/bean-info/getPropertyDecoratorBeanInfo");
var BeanRepository_1 = require("./BeanRepository");
var constants_1 = require("./constants");
var TypeQualifier_1 = require("../ts-helpers/type-qualifier/TypeQualifier");
var registerArrowFunctionBean = function (contextDescriptor, classElement) {
var _a;
var classElementName = classElement.name.getText();
if (constants_1.restrictedClassMemberNames.has(classElementName)) {
CompilationContext_1.CompilationContext.reportError({
node: classElement,
message: classElementName + " name is reserved for the di-container, please use another name instead",
filePath: contextDescriptor.absolutePath,
relatedContextPath: contextDescriptor.absolutePath,
});
return;
}
var functionReturnType = (_a = classElement.initializer.type) !== null && _a !== void 0 ? _a : null;
var beanInfo = (0, getPropertyDecoratorBeanInfo_1.getPropertyDecoratorBeanInfo)(classElement);
if (functionReturnType === null) {
CompilationContext_1.CompilationContext.reportError({
node: classElement,
message: 'Can\'t qualify type of Bean, please specify type explicitly',
filePath: contextDescriptor.absolutePath,
relatedContextPath: contextDescriptor.absolutePath,
});
return;
}
var qualifiedType = TypeQualifier_1.TypeQualifier.qualify(functionReturnType);
if (qualifiedType === null) {
CompilationContext_1.CompilationContext.reportError({
node: classElement,
message: 'Can\'t qualify type of Bean',
filePath: contextDescriptor.absolutePath,
relatedContextPath: contextDescriptor.absolutePath,
});
return;
}
BeanRepository_1.BeanRepository.registerBean({
classMemberName: classElement.name.getText(),
nestedProperty: null,
contextDescriptor: contextDescriptor,
scope: beanInfo.scope,
node: classElement,
qualifiedType: qualifiedType,
beanKind: 'arrowFunction',
beanSourceLocation: null,
isPublic: false,
});
};
exports.registerArrowFunctionBean = registerArrowFunctionBean;