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