UNPKG

@rx-angular/cdk

Version:

@rx-angular/cdk is a Component Development Kit for ergonomic and highly performant angular applications. It helps to to build Large scale applications, UI libs, state management, rendering systems and much more. Furthermore the unique way of mixing reacti

89 lines (88 loc) 3.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.renamingRule = renamingRule; const schematics_1 = require("@angular-devkit/schematics"); const ng_morph_1 = require("ng-morph"); function renamingRule(packageName, renames) { const getRename = configureRenames(renames); return () => { return (0, schematics_1.chain)([ (tree) => { console.log('Migration schematics might cause your code to be formatted incorrectly. Make sure to run your formatter of choice after the migration.'); (0, ng_morph_1.setActiveProject)((0, ng_morph_1.createProject)(tree, '/', ['**/*.ts'])); const imports = (0, ng_morph_1.getImports)('**/*.ts', { moduleSpecifier: packageName, }); const newImports = new Map(); for (const importDeclaration of imports) { const namedImports = importDeclaration.getNamedImports(); for (const namedImport of namedImports) { const oldName = namedImport.getName(); const rename = getRename(oldName); if (rename == null) { continue; } const filePath = importDeclaration .getSourceFile() .getFilePath() .toString(); const key = `${filePath}__${rename.moduleSpecifier}`; const namedImportConfig = { name: rename.namedImport, }; if (namedImport.getAliasNode()) { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion namedImportConfig.alias = namedImport.getAliasNode().getText(); } if (newImports.has(key)) { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const value = newImports.get(key); newImports.set(key, [...value, namedImportConfig]); } else { newImports.set(key, [namedImportConfig]); } renameReferences(namedImport, oldName, rename.namedImport); namedImport.remove(); } if (importDeclaration.getNamedImports().length === 0) { importDeclaration.remove(); } } for (const [key, namedImports] of newImports.entries()) { const [filePath, moduleSpecifier] = key.split('__'); (0, ng_morph_1.addImports)(filePath, { namedImports: namedImports, moduleSpecifier: moduleSpecifier, }); } (0, ng_morph_1.saveActiveProject)(); }, ]); }; } function renameReferences(importSpecifier, oldName, newName) { importSpecifier .getNameNode() .findReferencesAsNodes() .forEach((ref) => { if (ref.getText() === oldName) { ref.replaceWithText(newName); } }); } function configureRenames(renames) { return (namedImport) => { if (renames[namedImport] == null) { return null; } return { namedImport: Array.isArray(renames[namedImport]) ? renames[namedImport][0] : namedImport, moduleSpecifier: Array.isArray(renames[namedImport]) ? renames[namedImport][1] : renames[namedImport], }; }; }