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!
59 lines (58 loc) • 2.88 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.checkBeansInterface = void 0;
var CompilationContext_1 = require("../../../compilation-context/CompilationContext");
var typescript_1 = __importDefault(require("typescript"));
var node_source_descriptor_1 = require("../node-source-descriptor");
var ContextRepository_1 = require("../../context/ContextRepository");
var checkBeansInterface = function (node, contextDescriptor) {
var _a, _b;
if (node.expression.name.getText() === 'clearContext') {
return;
}
if (!node.typeArguments || node.typeArguments.length === 0) {
CompilationContext_1.CompilationContext.reportError({
node: node,
message: 'Container access should have a required TBeans type argument',
filePath: node.getSourceFile().fileName,
});
return;
}
var beansType = node.typeArguments[0];
if (!beansType || !typescript_1.default.isTypeReferenceNode(beansType)) {
CompilationContext_1.CompilationContext.reportError({
node: beansType,
message: 'TBeans should be a plain interface reference',
filePath: node.getSourceFile().fileName,
});
return;
}
var nodeDescriptor = (0, node_source_descriptor_1.getNodeSourceDescriptorDeep)(node.getSourceFile(), beansType.typeName.getText());
if (nodeDescriptor === null || nodeDescriptor.node === null) {
CompilationContext_1.CompilationContext.reportError({
node: beansType.typeName,
message: 'Can\'t qualify TBeans declaration',
filePath: node.getSourceFile().fileName,
});
return;
}
var contextBeansInterfaceNodeSourceDescriptor = (_b = (_a = ContextRepository_1.ContextRepository.contextNameToTBeanNodeSourceDescriptor
.get(contextDescriptor.name)) === null || _a === void 0 ? void 0 : _a.nodeSourceDescriptor) !== null && _b !== void 0 ? _b : null;
if (contextBeansInterfaceNodeSourceDescriptor === null || contextBeansInterfaceNodeSourceDescriptor.node === null) {
return;
}
if (nodeDescriptor.name !== contextBeansInterfaceNodeSourceDescriptor.name || nodeDescriptor.path !== contextBeansInterfaceNodeSourceDescriptor.path) {
CompilationContext_1.CompilationContext.reportErrorWithMultipleNodes({
nodes: [
contextBeansInterfaceNodeSourceDescriptor.node,
nodeDescriptor.node,
],
message: "TBeans interface should be the same as on " + contextDescriptor.name + "\nExpected\nFound",
filePath: node.getSourceFile().fileName,
});
}
};
exports.checkBeansInterface = checkBeansInterface;