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!

149 lines (148 loc) 6.58 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.registerEmbeddedBean = void 0; var ts = __importStar(require("typescript")); var constants_1 = require("./constants"); var CompilationContext_1 = require("../../compilation-context/CompilationContext"); var TypeQualifier_1 = require("../ts-helpers/type-qualifier/TypeQualifier"); var BeanRepository_1 = require("./BeanRepository"); var node_source_descriptor_1 = require("../ts-helpers/node-source-descriptor"); var registerEmbeddedBean = 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 propertyType = (_a = classElement.type) !== null && _a !== void 0 ? _a : null; if (propertyType === null) { CompilationContext_1.CompilationContext.reportError({ node: classElement, message: 'Can\'t qualify type of Embedded Bean, please specify type explicitly', filePath: contextDescriptor.absolutePath, relatedContextPath: contextDescriptor.absolutePath, }); return; } if (!ts.isTypeReferenceNode(propertyType)) { CompilationContext_1.CompilationContext.reportError({ node: propertyType, message: 'Type of Embedded Bean should be a type reference', filePath: contextDescriptor.absolutePath, relatedContextPath: contextDescriptor.absolutePath, }); return; } var nodeSourceDescriptor = (0, node_source_descriptor_1.getNodeSourceDescriptorDeep)(propertyType.getSourceFile(), propertyType.getText()); if (!(nodeSourceDescriptor === null || nodeSourceDescriptor === void 0 ? void 0 : nodeSourceDescriptor.node)) { CompilationContext_1.CompilationContext.reportError({ node: propertyType, message: 'Can not find type of Embedded Bean', filePath: contextDescriptor.absolutePath, relatedContextPath: contextDescriptor.absolutePath, }); return; } if (!ts.isInterfaceDeclaration(nodeSourceDescriptor.node)) { CompilationContext_1.CompilationContext.reportError({ node: propertyType, message: 'Type of Embedded Bean should be a plain interface declaration (without extends keyword)', filePath: nodeSourceDescriptor.path, relatedContextPath: contextDescriptor.absolutePath, }); return; } var interfaceMembers = nodeSourceDescriptor.node.members; if (!isPropertySignatureList(interfaceMembers)) { CompilationContext_1.CompilationContext.reportError({ node: nodeSourceDescriptor.node, message: 'Type of Embedded Bean should be a plain interface declaration (without extends keyword)', filePath: nodeSourceDescriptor.path, relatedContextPath: contextDescriptor.absolutePath, }); return; } interfaceMembers.forEach(function (node) { var propertyName = node.name.getText(); var propertyType = node.type; if (!propertyType) { CompilationContext_1.CompilationContext.reportError({ node: node, message: 'Each interface element Embedded Bean type should have a type', filePath: nodeSourceDescriptor.path, relatedContextPath: contextDescriptor.absolutePath, }); return; } var qualifiedType = TypeQualifier_1.TypeQualifier.qualify(propertyType); if (qualifiedType === null) { CompilationContext_1.CompilationContext.reportError({ node: node, message: 'Can\'t qualify type of Nested Bean element', filePath: nodeSourceDescriptor.path, relatedContextPath: contextDescriptor.absolutePath, }); return; } BeanRepository_1.BeanRepository.registerBean({ classMemberName: classElement.name.getText(), nestedProperty: propertyName, contextDescriptor: contextDescriptor, qualifiedType: qualifiedType, scope: 'singleton', node: classElement, beanKind: 'embedded', beanSourceLocation: null, isPublic: false, }); }); var qualifiedType = TypeQualifier_1.TypeQualifier.qualify(propertyType); if (qualifiedType === null) { CompilationContext_1.CompilationContext.reportError({ node: classElement, message: 'Can\'t qualify type of Embedded Bean', filePath: contextDescriptor.absolutePath, relatedContextPath: contextDescriptor.absolutePath, }); return; } BeanRepository_1.BeanRepository.registerBean({ classMemberName: classElement.name.getText(), nestedProperty: null, contextDescriptor: contextDescriptor, qualifiedType: qualifiedType, scope: 'singleton', node: classElement, beanKind: 'embedded', beanSourceLocation: null, isPublic: false, }); }; exports.registerEmbeddedBean = registerEmbeddedBean; function isPropertySignatureList(list) { return list.every(function (it) { return ts.isPropertySignature(it); }); }