UNPKG

ntts

Version:

A CLI tool for refactoring an existing NodeJs application to a fully functional TypeScript application.

75 lines (74 loc) 3.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ts_morph_1 = require("ts-morph"); var combined_types_1 = require("../combined-types/combined-types"); var reference_finder_1 = require("../reference-finder/reference-finder"); var DeclarationFinder = /** @class */ (function () { function DeclarationFinder() { } var _a; _a = DeclarationFinder; DeclarationFinder.getClassOrFunction = function (nameNode) { var references = (0, reference_finder_1.findReferences)(nameNode).map(function (reference) { return reference.getDefinition().getDeclarationNode(); }); var result = references.reduce(function (acc, node) { return _a.getClassOrFunctionDeclarationOrExpression(node) || acc; }, undefined); if (result) { return result; } var last = references.length > 0 ? references[references.length - 1] : undefined; if (ts_morph_1.Node.isExportAssignment(last)) { return _a.getClassOrFunctionFromExportAssignment(last.getExpression()); } if (ts_morph_1.Node.isExportSpecifier(last) || ts_morph_1.Node.isImportSpecifier(last)) { return _a.getClassOrFunction(last.getNameNode()); } var grandParent = last === null || last === void 0 ? void 0 : last.getParent(); if (ts_morph_1.Node.isImportClause(last) && ts_morph_1.Node.isImportDeclaration(grandParent) && last.getDefaultImport()) { return _a.getClassOrFunctionFromDefaultExport(grandParent); } return undefined; }; DeclarationFinder.getClassOrFunctionFromExportAssignment = function (expression) { if (ts_morph_1.Node.isIdentifier(expression) || ts_morph_1.Node.isPropertyAccessExpression(expression)) { return _a.getClassOrFunction(expression); } if (_a.isClassOrFunctionExpression(expression)) { return expression; } return undefined; }; DeclarationFinder.getClassOrFunctionFromDefaultExport = function (importDeclaration) { var _b; var sourceFile = importDeclaration.getModuleSpecifierSourceFile(); var declarations = (_b = sourceFile === null || sourceFile === void 0 ? void 0 : sourceFile.getDefaultExportSymbol()) === null || _b === void 0 ? void 0 : _b.getDeclarations(); if (!sourceFile || sourceFile.isInNodeModules() || sourceFile.isFromExternalLibrary()) { return undefined; } if (!declarations || declarations.length <= 0) { return undefined; } var first = declarations[0]; if (_a.isClassOrFunctionDeclaration(first)) { return first; } if (ts_morph_1.Node.isExportAssignment(first)) { return _a.getClassOrFunctionFromExportAssignment(first.getExpression()); } return undefined; }; DeclarationFinder.getClassOrFunctionDeclarationOrExpression = function (node) { if (_a.isClassOrFunctionDeclaration(node)) { return node; } if ((0, combined_types_1.isFieldDeclaration)(node)) { var initializer = node.getInitializer(); return _a.isClassOrFunctionExpression(initializer) ? initializer : undefined; } return undefined; }; DeclarationFinder.isClassOrFunctionExpression = function (node) { return ts_morph_1.Node.isFunctionExpression(node) || ts_morph_1.Node.isArrowFunction(node) || ts_morph_1.Node.isClassExpression(node); }; DeclarationFinder.isClassOrFunctionDeclaration = function (node) { return ts_morph_1.Node.isFunctionDeclaration(node) || ts_morph_1.Node.isMethodDeclaration(node) || ts_morph_1.Node.isClassDeclaration(node); }; return DeclarationFinder; }()); exports.default = DeclarationFinder;