@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
53 lines • 2.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.renameTypes = renameTypes;
const ng_morph_1 = require("ng-morph");
const add_unique_import_1 = require("../../utils/add-unique-import");
const colored_log_1 = require("../../utils/colored-log");
const get_named_import_references_1 = require("../../utils/get-named-import-references");
const import_manipulations_1 = require("../../utils/import-manipulations");
function renameType({ from, to, moduleSpecifier, preserveGenerics = false, removeImport = false, newImports = [], }) {
const references = (0, get_named_import_references_1.getNamedImportReferences)(from, moduleSpecifier);
references.forEach((ref) => {
if (ref.wasForgotten()) {
return;
}
const parent = ref.getParent();
if (ng_morph_1.Node.isImportSpecifier(parent)) {
processImport(parent, from, to, removeImport);
}
else if (ng_morph_1.Node.isTypeReference(parent)) {
const targetType = preserveGenerics && to ? addGeneric(to, parent.getTypeArguments()) : to;
parent.replaceWithText(targetType || 'any');
newImports.forEach(({ name, moduleSpecifier }) => {
(0, add_unique_import_1.addUniqueImport)(parent.getSourceFile().getFilePath(), name, moduleSpecifier);
});
}
});
}
function processImport(node, from, to, remove) {
const filePath = node.getSourceFile().getFilePath();
const targetImportAlreadyExists = Boolean((0, ng_morph_1.getImports)(filePath, { namedImports: to }).length);
if (to && !targetImportAlreadyExists && !remove) {
(0, import_manipulations_1.renameImport)(node, removeGeneric(to), removeGeneric(from));
}
else {
(0, import_manipulations_1.removeImport)(node);
}
}
function removeGeneric(type) {
return type.replaceAll(/<.*>$/g, '');
}
function addGeneric(typeName, generics) {
const typeArgs = generics.map((t) => t.getType().getText());
const genericType = typeArgs.length ? `<${typeArgs.join(', ')}>` : '';
return `${typeName}${genericType}`;
}
function renameTypes(options, types) {
!options['skip-logs'] &&
(0, colored_log_1.infoLog)(`${colored_log_1.SMALL_TAB_SYMBOL}${colored_log_1.REPLACE_SYMBOL} renaming types...`);
types.forEach(renameType);
!options['skip-logs'] &&
(0, colored_log_1.successLog)(`${colored_log_1.SMALL_TAB_SYMBOL}${colored_log_1.SUCCESS_SYMBOL} types renamed \n`);
}
//# sourceMappingURL=rename-types.js.map