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!
63 lines (62 loc) • 5.43 kB
JavaScript
;
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.buildBeanCallExpressionForSingleBeanForLifecycle = exports.buildDependenciesStatementsForLifecycle = void 0;
var typescript_1 = __importStar(require("typescript"));
var getGlobalContextIdentifierFromArrayOrCreateNewAndPush_1 = require("../utils/getGlobalContextIdentifierFromArrayOrCreateNewAndPush");
var QualifiedType_1 = require("../../ts-helpers/type-qualifier/QualifiedType");
function buildDependenciesStatementsForLifecycle(lifecycleDescriptor, contextDescriptorToIdentifierList) {
return lifecycleDescriptor.dependencies.list().map(function (lifecycleDependencyDescriptor) {
if (lifecycleDependencyDescriptor.qualifiedType.kind === QualifiedType_1.QualifiedTypeKind.PLAIN) {
var qualifiedBeanDescriptor = lifecycleDependencyDescriptor.beanDescriptors.firstOrNull();
if (qualifiedBeanDescriptor === null) {
return;
}
var beanCallExpression = buildBeanCallExpressionForSingleBeanForLifecycle(qualifiedBeanDescriptor, lifecycleDependencyDescriptor, lifecycleDescriptor, contextDescriptorToIdentifierList);
return typescript_1.factory.createVariableStatement(undefined, typescript_1.factory.createVariableDeclarationList([typescript_1.factory.createVariableDeclaration(typescript_1.factory.createIdentifier(lifecycleDependencyDescriptor.parameterName), undefined, lifecycleDependencyDescriptor.qualifiedType.typeNode, beanCallExpression)], typescript_1.default.NodeFlags.Const));
}
if (lifecycleDependencyDescriptor.qualifiedType.kind === QualifiedType_1.QualifiedTypeKind.LIST) {
var beanCallExpressions = lifecycleDependencyDescriptor.beanDescriptors.list()
.map(function (beanDescriptor) { return buildBeanCallExpressionForSingleBeanForLifecycle(beanDescriptor, lifecycleDependencyDescriptor, lifecycleDescriptor, contextDescriptorToIdentifierList); });
return typescript_1.factory.createVariableStatement(undefined, typescript_1.factory.createVariableDeclarationList([typescript_1.factory.createVariableDeclaration(typescript_1.factory.createIdentifier(lifecycleDependencyDescriptor.parameterName), undefined, lifecycleDependencyDescriptor.qualifiedType.typeNode, typescript_1.factory.createArrayLiteralExpression(beanCallExpressions, true))], typescript_1.default.NodeFlags.Const));
}
});
}
exports.buildDependenciesStatementsForLifecycle = buildDependenciesStatementsForLifecycle;
function buildBeanCallExpressionForSingleBeanForLifecycle(beanDescriptor, dependencyDescriptor, contextLifecycleDescriptor, contextDescriptorToIdentifierList) {
if (isBeanFromCurrentContext(beanDescriptor.contextDescriptor, contextLifecycleDescriptor.contextDescriptor)) {
var beanAccessExpression_1 = typescript_1.factory.createCallExpression(typescript_1.factory.createPropertyAccessExpression(typescript_1.factory.createThis(), typescript_1.factory.createIdentifier('getPrivateBean')), undefined, [typescript_1.factory.createStringLiteral(beanDescriptor.classMemberName)]);
if (beanDescriptor.nestedProperty !== null) {
beanAccessExpression_1 = typescript_1.factory.createPropertyAccessExpression(beanAccessExpression_1, typescript_1.factory.createIdentifier(beanDescriptor.nestedProperty));
}
return beanAccessExpression_1;
}
var globalContextIdentifier = (0, getGlobalContextIdentifierFromArrayOrCreateNewAndPush_1.getGlobalContextIdentifierFromArrayOrCreateNewAndPush)(beanDescriptor.contextDescriptor, contextDescriptorToIdentifierList);
var beanAccessExpression = typescript_1.factory.createCallExpression(typescript_1.factory.createPropertyAccessExpression(typescript_1.factory.createPropertyAccessExpression(globalContextIdentifier, typescript_1.factory.createIdentifier(globalContextIdentifier.text)), typescript_1.factory.createIdentifier('getPrivateBean')), undefined, [typescript_1.factory.createStringLiteral(beanDescriptor.classMemberName)]);
if (beanDescriptor.nestedProperty !== null) {
beanAccessExpression = typescript_1.factory.createPropertyAccessExpression(beanAccessExpression, typescript_1.factory.createIdentifier(beanDescriptor.nestedProperty));
}
return beanAccessExpression;
}
exports.buildBeanCallExpressionForSingleBeanForLifecycle = buildBeanCallExpressionForSingleBeanForLifecycle;
function isBeanFromCurrentContext(dependencyBeanContext, lifecycleContext) {
return dependencyBeanContext.id === lifecycleContext.id;
}