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!

57 lines (56 loc) 2.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.registerContext = void 0; var isExtendsCatContextContext_1 = require("../ts-helpers/predicates/isExtendsCatContextContext"); var CompilationContext_1 = require("../../compilation-context/CompilationContext"); var isNamedClassDeclaration_1 = require("../ts-helpers/predicates/isNamedClassDeclaration"); var constants_1 = require("./constants"); var ContextRepository_1 = require("./ContextRepository"); function registerContext(sourceFile) { var catContextClassDeclarations = sourceFile.statements.filter(isExtendsCatContextContext_1.isExtendsCatContextContext); if (catContextClassDeclarations.length > 1) { var excessCatContextClasses = catContextClassDeclarations.slice(1); CompilationContext_1.CompilationContext.reportErrorWithMultipleNodes({ message: 'Only one context should be defined in file.', nodes: excessCatContextClasses, filePath: sourceFile.fileName, }); return; } if (catContextClassDeclarations.length === 1) { registerCatContext(catContextClassDeclarations[0]); } } exports.registerContext = registerContext; function registerCatContext(classDeclaration) { if (!(0, isNamedClassDeclaration_1.isNamedClassDeclaration)(classDeclaration)) { CompilationContext_1.CompilationContext.reportError({ message: 'Context should be a named class declaration', node: classDeclaration, filePath: classDeclaration.getSourceFile().fileName, }); return; } var name = classDeclaration.name.getText(); if (name === constants_1.GLOBAL_CONTEXT_NAME) { CompilationContext_1.CompilationContext.reportError({ message: "\"" + constants_1.GLOBAL_CONTEXT_NAME + "\" name of context is preserved for DI container", node: classDeclaration, filePath: classDeclaration.getSourceFile().fileName, }); return; } var oldContext = ContextRepository_1.ContextRepository.getContextByName(name); if (oldContext !== null && classDeclaration.getSourceFile().fileName !== oldContext.absolutePath) { CompilationContext_1.CompilationContext.reportErrorWithMultipleNodes({ message: 'Registered more than 1 contexts with same name', nodes: [ classDeclaration, oldContext.node, ], filePath: classDeclaration.getSourceFile().fileName, }); return; } ContextRepository_1.ContextRepository.registerContext(name, classDeclaration); }