UNPKG

ntts

Version:

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

136 lines (135 loc) 6.64 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var ts_morph_1 = require("ts-morph"); var variable_name_generator_1 = __importDefault(require("../variable-name-generator/variable-name-generator")); var import_finder_1 = __importDefault(require("../import-finder/import-finder")); var ImportCreator = /** @class */ (function () { function ImportCreator() { } var _a; _a = ImportCreator; ImportCreator.addEmptyImport = function (moduleSpecifier, sourceFile) { var importDeclaration = sourceFile.getImportDeclaration(moduleSpecifier); if (!importDeclaration) { sourceFile.addImportDeclaration({ moduleSpecifier: moduleSpecifier }); } }; ImportCreator.addSimpleImport = function (importName, moduleSpecifier, sourceFile) { var _b; var importDeclaration = import_finder_1.default.getNonNamespaceImportDeclaration(moduleSpecifier, sourceFile); var defaultImport = (_b = importDeclaration === null || importDeclaration === void 0 ? void 0 : importDeclaration.getDefaultImport()) === null || _b === void 0 ? void 0 : _b.getText(); if (importDeclaration && defaultImport) { return defaultImport; } if (importDeclaration && !defaultImport) { importDeclaration.setDefaultImport(importName); return importName; } sourceFile.addImportDeclaration({ defaultImport: importName, moduleSpecifier: moduleSpecifier, }); return importName; }; ImportCreator.addNamedImport = function (importName, moduleSpecifier, usedNames, sourceFile) { var _b; var importDeclaration = import_finder_1.default.getNonNamespaceImportDeclaration(moduleSpecifier, sourceFile); var importSpecifier = importDeclaration === null || importDeclaration === void 0 ? void 0 : importDeclaration.getNamedImports().find(function (named) { return importName === named.getName(); }); if (importDeclaration && importSpecifier) { return ((_b = importSpecifier.getAliasNode()) === null || _b === void 0 ? void 0 : _b.getText()) || importSpecifier.getName(); } var newImportName = variable_name_generator_1.default.getUsableVariableName(importName, usedNames); var namedImport = newImportName === importName ? importName : "".concat(importName, " as ").concat(newImportName); if (importDeclaration) { importDeclaration.addNamedImport(namedImport); return newImportName; } sourceFile.addImportDeclaration({ namedImports: [namedImport], moduleSpecifier: moduleSpecifier, }); return newImportName; }; ImportCreator.addImport = function (nameNode, moduleSpecifier, sourceFile) { var importDeclaration = import_finder_1.default.getNonNamespaceImportDeclaration(moduleSpecifier, sourceFile); if (ts_morph_1.Node.isIdentifier(nameNode)) { _a.addDefaultImportStatement(importDeclaration, nameNode, moduleSpecifier, sourceFile); } else { _a.addNamedImportStatement(importDeclaration, nameNode, moduleSpecifier, sourceFile); } }; ImportCreator.addNamespaceImport = function (importName, moduleSpecifier, sourceFile) { sourceFile.addImportDeclaration({ namespaceImport: importName, moduleSpecifier: moduleSpecifier, }); return importName; }; ImportCreator.getPropertyName = function (element) { var nameNode = element.getPropertyNameNode(); if (ts_morph_1.Node.isIdentifier(nameNode)) { return nameNode.getText(); } if (ts_morph_1.Node.isStringLiteral(nameNode)) { return nameNode.getLiteralValue(); } if (ts_morph_1.Node.isComputedPropertyName(nameNode)) { var literal = nameNode.getFirstChildByKind(ts_morph_1.SyntaxKind.StringLiteral) || nameNode.getFirstChildByKind(ts_morph_1.SyntaxKind.NoSubstitutionTemplateLiteral); return literal === null || literal === void 0 ? void 0 : literal.getLiteralValue(); } return undefined; }; ImportCreator.getNamedImports = function (objectBinding) { return objectBinding .getElements() .map(function (binding) { var propertyName = _a.getPropertyName(binding); var bindingName = binding.getNameNode().getText(); if (propertyName) { return "".concat(propertyName, " as ").concat(bindingName); } return bindingName; }); }; ImportCreator.addNamedImportStatement = function (importDeclaration, objectBinding, moduleSpecifier, sourceFile) { var existingNamedImports = importDeclaration === null || importDeclaration === void 0 ? void 0 : importDeclaration.getNamedImports().map(function (named) { return named.getNameNode().getText(); }); var namedImports = _a.getNamedImports(objectBinding); if (namedImports.length <= 0) { return; } else if (importDeclaration && existingNamedImports) { var filteredImports = namedImports.filter(function (named) { return !existingNamedImports.includes(named); }); importDeclaration.addNamedImports(filteredImports); } else if (importDeclaration && !existingNamedImports) { importDeclaration.addNamedImports(namedImports); } else { sourceFile.addImportDeclaration({ namedImports: namedImports, moduleSpecifier: moduleSpecifier, }); } }; ImportCreator.addDefaultImportStatement = function (importDeclaration, identifier, moduleSpecifier, sourceFile) { var _b; var defaultImport = (_b = importDeclaration === null || importDeclaration === void 0 ? void 0 : importDeclaration.getDefaultImport()) === null || _b === void 0 ? void 0 : _b.getText(); if (importDeclaration && defaultImport) { identifier.rename(defaultImport); } else if (importDeclaration && !defaultImport) { importDeclaration.setDefaultImport(identifier.getText()); } else { sourceFile.addImportDeclaration({ defaultImport: identifier.getText(), moduleSpecifier: moduleSpecifier, }); } }; return ImportCreator; }()); exports.default = ImportCreator;