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
JavaScript
;
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);
}