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!
70 lines (69 loc) • 3.26 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getQualifierValueFromFunctionArgument = void 0;
var typescript_1 = __importDefault(require("typescript"));
var isParameterQualifierDecorator_1 = require("../ts-helpers/predicates/isParameterQualifierDecorator");
var CompilationContext_1 = require("../../compilation-context/CompilationContext");
function getQualifierValueFromFunctionArgument(parameter, contextDescriptor) {
var _a, _b;
var qualifierDecorators = (_b = (_a = parameter.decorators) === null || _a === void 0 ? void 0 : _a.filter(isParameterQualifierDecorator_1.isParameterQualifierDecorator)) !== null && _b !== void 0 ? _b : [];
if (qualifierDecorators.length === 0) {
return null;
}
if (qualifierDecorators.length > 1) {
CompilationContext_1.CompilationContext.reportError({
node: parameter,
message: 'Parameter Qualifier should not have more than 1 @Qualifier decorator',
filePath: contextDescriptor.absolutePath,
relatedContextPath: contextDescriptor.absolutePath,
});
return null;
}
var decoratorExpression = qualifierDecorators[0].expression;
if (typescript_1.default.isIdentifier(decoratorExpression)) {
CompilationContext_1.CompilationContext.reportError({
node: qualifierDecorators[0],
message: 'You should call @Qualifier with string, when decorating parameter',
filePath: contextDescriptor.absolutePath,
relatedContextPath: contextDescriptor.absolutePath,
});
return null;
}
if (typescript_1.default.isCallExpression(decoratorExpression)) {
var args = decoratorExpression.arguments;
if (args.length === 0) {
CompilationContext_1.CompilationContext.reportError({
node: decoratorExpression,
message: '@Qualifier should have only 1 argument',
filePath: contextDescriptor.absolutePath,
relatedContextPath: contextDescriptor.absolutePath,
});
return null;
}
if (args.length > 1) {
CompilationContext_1.CompilationContext.reportError({
node: decoratorExpression,
message: '@Qualifier should have only 1 argument',
filePath: contextDescriptor.absolutePath,
relatedContextPath: contextDescriptor.absolutePath,
});
return null;
}
var qualifierValue = args[0];
if (!typescript_1.default.isStringLiteral(qualifierValue)) {
CompilationContext_1.CompilationContext.reportError({
node: decoratorExpression,
message: 'Qualifier should be a string literal',
filePath: contextDescriptor.absolutePath,
relatedContextPath: contextDescriptor.absolutePath,
});
return null;
}
return qualifierValue.text;
}
return null;
}
exports.getQualifierValueFromFunctionArgument = getQualifierValueFromFunctionArgument;