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!
91 lines (90 loc) • 6.96 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.registerAndTransformContext = void 0;
var typescript_1 = __importDefault(require("typescript"));
var addContextPool_1 = require("./transformers/addContextPool");
var replaceExtendingFromCatContext_1 = require("./transformers/replaceExtendingFromCatContext");
var replacePropertyBeans_1 = require("./transformers/replacePropertyBeans");
var transformMethodBeans_1 = require("./transformers/transformMethodBeans");
var addNecessaryImports_1 = require("./transformers/addNecessaryImports");
var ContextRepository_1 = require("../context/ContextRepository");
var registerContext_1 = require("../context/registerContext");
var registerBeans_1 = require("../bean/registerBeans");
var checkIsAllBeansRegisteredInContextAndFillBeanRequierness_1 = require("../bean/checkIsAllBeansRegisteredInContextAndFillBeanRequierness");
var registerBeanDependencies_1 = require("../bean-dependencies/registerBeanDependencies");
var buildDependencyGraphAndFillQualifiedBeans_1 = require("../connect-dependencies/buildDependencyGraphAndFillQualifiedBeans");
var reportAboutCyclicDependencies_1 = require("../report-cyclic-dependencies/reportAboutCyclicDependencies");
var CompilationContext_1 = require("../../compilation-context/CompilationContext");
var registerGlobalCatContext_1 = require("../context/registerGlobalCatContext");
var addGlobalContextInstance_1 = require("./transformers/addGlobalContextInstance");
var transformArrowFunctionBeans_1 = require("./transformers/transformArrowFunctionBeans");
var transformExpressionAndEmbeddedBeans_1 = require("./transformers/transformExpressionAndEmbeddedBeans");
var registerContextLifecycleMethods_1 = require("../context-lifecycle/registerContextLifecycleMethods");
var transformLifecycleMethods_1 = require("./transformers/transformLifecycleMethods");
var transformLifecycleArrowFunctions_1 = require("./transformers/transformLifecycleArrowFunctions");
var addLifecycleConfiguration_1 = require("./transformers/addLifecycleConfiguration");
var DependencyGraph_1 = require("../connect-dependencies/DependencyGraph");
function registerAndTransformContext(context, sourceFile) {
var _a, _b;
CompilationContext_1.CompilationContext.clearErrorsByFilePath(sourceFile.fileName);
var oldContextDescriptor = ContextRepository_1.ContextRepository.contextPathToContextDescriptor.get(sourceFile.fileName);
if (oldContextDescriptor === null || oldContextDescriptor === void 0 ? void 0 : oldContextDescriptor.isGlobal) {
(0, registerGlobalCatContext_1.registerGlobalCatContext)(sourceFile);
var newGlobalContextDescriptor = (_a = ContextRepository_1.ContextRepository.contextPathToContextDescriptor.get(sourceFile.fileName)) !== null && _a !== void 0 ? _a : null;
if (!newGlobalContextDescriptor) {
throw new Error('Global Context is not registered');
}
(0, registerBeans_1.registerBeans)(newGlobalContextDescriptor);
(0, registerBeanDependencies_1.registerBeanDependencies)(newGlobalContextDescriptor);
(0, buildDependencyGraphAndFillQualifiedBeans_1.buildDependencyGraphAndFillQualifiedBeans)(newGlobalContextDescriptor);
(0, registerContextLifecycleMethods_1.registerContextLifecycleMethods)(newGlobalContextDescriptor);
(0, reportAboutCyclicDependencies_1.reportAboutCyclicDependencies)(newGlobalContextDescriptor);
var contextDescriptorToIdentifierList_1 = [];
var transformers_1 = [
(0, addGlobalContextInstance_1.addGlobalContextInstance)(newGlobalContextDescriptor),
(0, replaceExtendingFromCatContext_1.replaceExtendingFromCatContext)(newGlobalContextDescriptor),
(0, replacePropertyBeans_1.replacePropertyBeans)(contextDescriptorToIdentifierList_1),
(0, transformMethodBeans_1.transformMethodBeans)(contextDescriptorToIdentifierList_1),
(0, transformArrowFunctionBeans_1.transformArrowFunctionBeans)(contextDescriptorToIdentifierList_1),
(0, transformExpressionAndEmbeddedBeans_1.transformExpressionAndEmbeddedBeans)(),
(0, addNecessaryImports_1.addNecessaryImports)(contextDescriptorToIdentifierList_1),
];
var file_1 = typescript_1.default.transform(sourceFile, transformers_1).transformed[0];
// const fileText = ts.createPrinter().printFile(file);
return file_1;
}
if (oldContextDescriptor && !(oldContextDescriptor === null || oldContextDescriptor === void 0 ? void 0 : oldContextDescriptor.isGlobal)) {
DependencyGraph_1.DependencyGraph.clearByContextDescriptor(oldContextDescriptor);
}
(0, registerContext_1.registerContext)(sourceFile);
var contextDescriptor = (_b = ContextRepository_1.ContextRepository.contextPathToContextDescriptor.get(sourceFile.fileName)) !== null && _b !== void 0 ? _b : null;
if (!contextDescriptor) {
throw new Error('Context is not registered');
}
(0, registerBeans_1.registerBeans)(contextDescriptor);
(0, checkIsAllBeansRegisteredInContextAndFillBeanRequierness_1.checkIsAllBeansRegisteredInContextAndFillBeanRequierness)(contextDescriptor);
(0, registerBeanDependencies_1.registerBeanDependencies)(contextDescriptor);
(0, buildDependencyGraphAndFillQualifiedBeans_1.buildDependencyGraphAndFillQualifiedBeans)(contextDescriptor);
(0, registerContextLifecycleMethods_1.registerContextLifecycleMethods)(contextDescriptor);
(0, reportAboutCyclicDependencies_1.reportAboutCyclicDependencies)(contextDescriptor);
var contextDescriptorToIdentifierList = [];
var transformers = [
(0, addLifecycleConfiguration_1.addLifecycleConfiguration)(contextDescriptor),
(0, addContextPool_1.addContextPool)(contextDescriptor),
(0, replaceExtendingFromCatContext_1.replaceExtendingFromCatContext)(contextDescriptor),
(0, replacePropertyBeans_1.replacePropertyBeans)(contextDescriptorToIdentifierList),
(0, transformMethodBeans_1.transformMethodBeans)(contextDescriptorToIdentifierList),
(0, transformArrowFunctionBeans_1.transformArrowFunctionBeans)(contextDescriptorToIdentifierList),
(0, transformExpressionAndEmbeddedBeans_1.transformExpressionAndEmbeddedBeans)(),
(0, transformLifecycleMethods_1.transformLifecycleMethods)(contextDescriptorToIdentifierList),
(0, transformLifecycleArrowFunctions_1.transformLifecycleArrowFunctions)(contextDescriptorToIdentifierList),
(0, addNecessaryImports_1.addNecessaryImports)(contextDescriptorToIdentifierList),
];
var file = typescript_1.default.transform(sourceFile, transformers).transformed[0];
// const fileText = ts.createPrinter().printFile(file);
return file;
}
exports.registerAndTransformContext = registerAndTransformContext;