Skip to content

Commit 1c15722

Browse files
committed
refactor(migrations): igNamedImportFilter type guard and cleanup
1 parent b2ff7ff commit 1c15722

File tree

3 files changed

+16
-27
lines changed

3 files changed

+16
-27
lines changed

projects/igniteui-angular/migrations/common/tsUtils.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,13 @@ export const getImportModulePositions = (sourceText: string, startsWith: string)
9797
return positions;
9898
};
9999

100-
/** Filters out statements to named imports (e.g. `import {x, y}`) from PACKAGE_IMPORT */
101-
export const namedImportFilter = (statement: ts.Statement) => {
102-
if (statement.kind === ts.SyntaxKind.ImportDeclaration &&
103-
isIgniteuiImport(((statement as ts.ImportDeclaration).moduleSpecifier as ts.StringLiteral).text)) {
104-
105-
const clause = (statement as ts.ImportDeclaration).importClause;
106-
return clause && clause.namedBindings && clause.namedBindings.kind === ts.SyntaxKind.NamedImports;
100+
/** Filters out statements to named imports (e.g. `import {x, y}`) from IG_PACKAGE_NAME */
101+
export const igNamedImportFilter = (
102+
statement: ts.Statement,
103+
): statement is ts.ImportDeclaration & { moduleSpecifier: ts.StringLiteral } & { importClause: { namedBindings: ts.NamedImports } } => {
104+
if (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier) && isIgniteuiImport(statement.moduleSpecifier.text)) {
105+
const clause = statement.importClause;
106+
return clause?.namedBindings && clause.namedBindings.kind === ts.SyntaxKind.NamedImports;
107107
}
108108
return false;
109109
};
@@ -114,14 +114,13 @@ export const getRenamePositions = (sourcePath: string, name: string, service: ts
114114
const source = service.getProgram().getSourceFile(sourcePath);
115115
const positions = [];
116116

117-
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
118-
const imports = source.statements.filter(<(a: ts.Statement) => a is ts.ImportDeclaration>namedImportFilter);
117+
const imports = source.statements.filter(igNamedImportFilter);
119118
if (!imports.length) {
120119
return positions;
121120
}
122121
const elements: ts.NodeArray<ts.ImportSpecifier> =
123122
imports
124-
.map(x => (x.importClause.namedBindings as ts.NamedImports).elements)
123+
.map(x => x.importClause.namedBindings.elements)
125124
.reduce((prev, current) => prev.concat(current) as unknown as ts.NodeArray<ts.ImportSpecifier>);
126125

127126
for (const elem of elements) {

projects/igniteui-angular/migrations/update-17_0_0/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import * as ts from 'typescript';
88
import { UpdateChanges } from '../common/UpdateChanges';
99
// use bare specifier to escape the schematics encapsulation for the dynamic import:
1010
import { nativeImport } from 'igniteui-angular/migrations/common/import-helper.js';
11-
import { namedImportFilter } from '../common/tsUtils';
11+
import { igNamedImportFilter } from '../common/tsUtils';
1212
import { FileChange, findElementNodes, getAttribute, getSourceOffset, hasAttribute, parseFile } from '../common/util';
1313

1414
const version = '17.0.0';
@@ -95,7 +95,7 @@ export default (): Rule => async (host: Tree, context: SchematicContext) => {
9595
var fileContent = host.read(filePath).toString();
9696

9797
const source = ts.createSourceFile('', fileContent, ts.ScriptTarget.Latest, true)
98-
const igImports = source.statements.filter(<(a: ts.Statement) => a is ts.ImportDeclaration>namedImportFilter);
98+
const igImports = source.statements.filter(igNamedImportFilter);
9999

100100
// Find all animations imported from 'igniteui-angular' and delete them.
101101
for (const igImport of igImports) {

projects/igniteui-angular/migrations/update-21_0_0_import-migration/index.ts

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import type {
55
Tree
66
} from '@angular-devkit/schematics';
77
import * as ts from 'typescript';
8-
import { IG_PACKAGE_NAME, IG_LICENSED_PACKAGE_NAME, namedImportFilter } from '../common/tsUtils';
8+
import { IG_PACKAGE_NAME, IG_LICENSED_PACKAGE_NAME, igNamedImportFilter } from '../common/tsUtils';
99

1010
const version = '21.0.0';
1111

@@ -711,22 +711,12 @@ const TYPE_RENAMES = new Map<string, { newName: string, entryPoint: string }>([
711711
]);
712712

713713
function migrateImportDeclaration(node: ts.ImportDeclaration, sourceFile: ts.SourceFile): { start: number, end: number, replacement: string } | null {
714-
// Use namedImportFilter to check if this is a valid igniteui-angular named import
715-
if (!namedImportFilter(node)) {
714+
if (!igNamedImportFilter(node)) {
716715
return null;
717716
}
718717

719-
const moduleSpecifier = node.moduleSpecifier as ts.StringLiteral;
720-
const importPath = moduleSpecifier.text;
721-
722-
// Only process base igniteui-angular imports (not already using entry points)
723-
if (importPath !== IG_PACKAGE_NAME && importPath !== IG_LICENSED_PACKAGE_NAME) {
724-
return null;
725-
}
726-
727-
// namedImportFilter already validates importClause and namedBindings exist with NamedImports type
728-
const importClause = node.importClause!;
729-
const namedBindings = importClause.namedBindings as ts.NamedImports;
718+
const importPath = node.moduleSpecifier.text;
719+
const namedBindings = node.importClause.namedBindings;
730720

731721
// Group imports by entry point
732722
const entryPointGroups = new Map<string, string[]>();
@@ -873,7 +863,7 @@ export default function migrate(): Rule {
873863

874864
const originalContent = content.toString();
875865

876-
// Quick check if file has base igniteui-angular imports (not using entry point subpaths)
866+
// Check if file has base igniteui-angular imports
877867
if (!originalContent.includes(`from '${IG_PACKAGE_NAME}'`) && !originalContent.includes(`from "${IG_PACKAGE_NAME}"`) &&
878868
!originalContent.includes(`from '${IG_LICENSED_PACKAGE_NAME}'`) && !originalContent.includes(`from "${IG_LICENSED_PACKAGE_NAME}"`)) {
879869
return;

0 commit comments

Comments
 (0)