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!

62 lines (61 loc) 2.79 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.isContextLifecycleDecorator = exports.getLifecycleTypes = exports.CONTEXT_LIFECYCLE_DECORATORS = void 0; var typescript_1 = __importDefault(require("typescript")); var lodash_1 = require("lodash"); var node_source_descriptor_1 = require("../ts-helpers/node-source-descriptor"); var libraryName_1 = require("../../constants/libraryName"); exports.CONTEXT_LIFECYCLE_DECORATORS = [ 'PostConstruct', 'BeforeDestruct', ]; var LIFECYCLE_DECORATOR_TO_LIFECYCLE_TYPE = (_a = {}, _a[exports.CONTEXT_LIFECYCLE_DECORATORS[0]] = 'post-construct', _a[exports.CONTEXT_LIFECYCLE_DECORATORS[1]] = 'before-destruct', _a); var getLifecycleTypes = function (decorators) { var lifecycleDecorators = decorators.filter(exports.isContextLifecycleDecorator); if (lifecycleDecorators.length === 0) { return null; } var lifecycles = (0, lodash_1.compact)(lifecycleDecorators.map(function (decorator) { var nameToFind = undefined; var expression = decorator.expression; if (typescript_1.default.isIdentifier(expression) || typescript_1.default.isPropertyAccessExpression(expression)) { nameToFind = expression.getText(); } if (nameToFind === undefined) { return null; } var nodeSourceDescriptor = (0, node_source_descriptor_1.getNodeSourceDescriptorDeep)(decorator.getSourceFile(), nameToFind); if (nodeSourceDescriptor === null) { return null; } if (nodeSourceDescriptor.path !== libraryName_1.libraryName) { return null; } return LIFECYCLE_DECORATOR_TO_LIFECYCLE_TYPE[nodeSourceDescriptor.name]; })); return lifecycles.length === 0 ? null : new Set(lifecycles); }; exports.getLifecycleTypes = getLifecycleTypes; var isContextLifecycleDecorator = function (decorator) { var nameToFind = undefined; var expression = decorator.expression; if (typescript_1.default.isIdentifier(expression) || typescript_1.default.isPropertyAccessExpression(expression)) { nameToFind = expression.getText(); } if (nameToFind === undefined) { return false; } var nodeSourceDescriptor = (0, node_source_descriptor_1.getNodeSourceDescriptorDeep)(decorator.getSourceFile(), nameToFind); if (nodeSourceDescriptor === null) { return false; } return exports.CONTEXT_LIFECYCLE_DECORATORS.includes(nodeSourceDescriptor.name) && nodeSourceDescriptor.path === libraryName_1.libraryName; }; exports.isContextLifecycleDecorator = isContextLifecycleDecorator;