UNPKG

ngrx-uml

Version:
95 lines (94 loc) 4.57 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.NgModuleConverter = void 0; const chalk_1 = __importDefault(require("chalk")); const loglevel_1 = __importDefault(require("loglevel")); const typescript_1 = __importDefault(require("typescript")); const ng_module_model_1 = require("../../../core/converters/models/converted-items/ng-module.model"); const node_converter_1 = require("../../../core/converters/node.converter"); const register_reducer_call_converter_1 = require("./register-reducer-call.converter"); class NgModuleConverter extends node_converter_1.NodeConverter { convert(context, node) { const sourceFile = node.getSourceFile(); const decorator = this.getModuleDecorator(context, node); if (decorator && node.name) { const symbol = context.typeChecker.getSymbolAtLocation(node.name); if (symbol) { // log.info(context.typeChecker.getSymbolAtLocation(decorator)); const item = new ng_module_model_1.NgModule(node.name.getText(), sourceFile.fileName, node.getStart(), node.getEnd()); // log.warn('node start', node.getStart(), ' / ', node.getEnd(), ' / ',node.getFullStart(), node.pos, node.end , node.getLeadingTriviaWidth()); // log.info(item.name, chalk.gray(item.filePath)); item.registeredReducers = this.getReducersFromDecorator(context, decorator); context.addResult({ symbol, item }); return item; } } return; } getModuleDecorator(_context, node) { if (node.decorators) { return node.decorators.find(decorator => this.isNgModuleDecorator(decorator)); } return; } isNgModuleDecorator(decorator) { return typescript_1.default.isCallExpression(decorator.expression) && decorator.expression.expression.getText() === 'NgModule'; } extractStoreModuleCall(context, storeModuleCall) { return new register_reducer_call_converter_1.RegisterReducerCallConverter().convert(context, storeModuleCall); } extractImportsProperty(context, importsProperty) { if (!typescript_1.default.isArrayLiteralExpression(importsProperty.initializer)) { return; } const registeredReducers = []; for (const el of importsProperty.initializer.elements) { if (typescript_1.default.isCallExpression(el) && typescript_1.default.isPropertyAccessExpression(el.expression)) { switch (el.expression.expression.getText()) { case 'StoreModule': { const result = this.extractStoreModuleCall(context, el); if (result) { registeredReducers.push(result); } else { loglevel_1.default.warn(chalk_1.default.yellow('StoreModule call without reducer'), el.getText()); } // context.converter.convertNode(context, el); } } } } return registeredReducers.length ? registeredReducers : undefined; } getImportsProperty(expression) { const importsProperty = expression.properties.find(p => { var _a; return ((_a = p.name) === null || _a === void 0 ? void 0 : _a.getText()) === 'imports'; }); if (importsProperty && typescript_1.default.isPropertyAssignment(importsProperty)) { return importsProperty; } return; } getReducersFromDecoratorArgument(context, arg) { if (typescript_1.default.isObjectLiteralExpression(arg)) { const importsProperty = this.getImportsProperty(arg); if (importsProperty) { return this.extractImportsProperty(context, importsProperty); } } return; } getNgModuleMetadata(decorator) { if (typescript_1.default.isCallExpression(decorator.expression)) { return decorator.expression.arguments[0]; } return; } getReducersFromDecorator(context, decorator) { const ngModuleMetadata = this.getNgModuleMetadata(decorator); return ngModuleMetadata && this.getReducersFromDecoratorArgument(context, ngModuleMetadata); } } exports.NgModuleConverter = NgModuleConverter;