ntts
Version:
A CLI tool for refactoring an existing NodeJs application to a fully functional TypeScript application.
136 lines (135 loc) • 6.64 kB
JavaScript
;
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;