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!

63 lines (62 loc) 5.43 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.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; }