Skip to content

Commit 4a3ae58

Browse files
authored
fix(material/schematics): add renaming of non standard symbols (#25523)
1 parent 189a9b7 commit 4a3ae58

File tree

3 files changed

+56
-1
lines changed

3 files changed

+56
-1
lines changed

src/material/schematics/ng-update/migrations/legacy-components-v15/constants.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,19 @@ export const MDC_IMPORT_CHANGES = COMPONENTS.map(component => ({
4141
new: `@angular/material/${component}`,
4242
}));
4343

44+
export const CUSTOM_TS_SYMBOL_RENAMINGS = [
45+
{old: 'ProgressAnimationEnd', new: 'LegacyProgressAnimationEnd'},
46+
{old: 'ProgressBarMode', new: 'LegacyProgressBarMode'},
47+
{old: 'ProgressSpinnerMode', new: 'LegacyProgressSpinnerMode'},
48+
{old: 'AutoFocusTarget', new: 'LegacyAutoFocusTarget'},
49+
{old: 'DialogRole', new: 'LegacyDialogRole'},
50+
{old: 'DialogPosition', new: 'LegacyDialogPosition'},
51+
{old: '_closeDialogVia', new: '_closeLegacyDialogVia'},
52+
{old: 'MatTestDialogOpener', new: 'MatTestLegacyDialogOpener'},
53+
{old: 'SimpleSnackBar', new: 'LegacySimpleSnackBar'},
54+
{old: 'TextOnlySnackBar', new: 'LegacyTextOnlySnackBar'},
55+
];
56+
4457
export const MIXINS = COMPONENTS.concat(['option', 'optgroup']).flatMap(component => [
4558
`${component}-theme`,
4659
`${component}-color`,

src/material/schematics/ng-update/migrations/legacy-components-v15/index.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@ import * as ts from 'typescript';
1010
import * as postcss from 'postcss';
1111
import * as scss from 'postcss-scss';
1212

13-
import {MAT_IMPORT_CHANGES, MDC_IMPORT_CHANGES, MIXINS} from './constants';
13+
import {
14+
CUSTOM_TS_SYMBOL_RENAMINGS,
15+
MAT_IMPORT_CHANGES,
16+
MDC_IMPORT_CHANGES,
17+
MIXINS,
18+
} from './constants';
1419

1520
import {Migration, ResolvedResource, TargetVersion, WorkspacePath} from '@angular/cdk/schematics';
1621

@@ -152,6 +157,16 @@ export class LegacyComponentsMigration extends Migration<null> {
152157
const separator = ts.isImportSpecifier(node) ? ' as ' : ': ';
153158
const oldExport = name.escapedText.toString();
154159

160+
// Handle TS Symbols that have non-standard renamings.
161+
const customMapping = CUSTOM_TS_SYMBOL_RENAMINGS.find(v => v.old === oldExport);
162+
if (customMapping) {
163+
const replacement = node.propertyName
164+
? customMapping.new
165+
: `${customMapping.new}${separator}${customMapping.old}`;
166+
this._tsReplaceAt(name, {old: oldExport, new: replacement});
167+
return;
168+
}
169+
155170
// Handle TS Symbols that have standard renamings.
156171
const newExport = this._parseMatSymbol(oldExport);
157172
if (newExport) {

src/material/schematics/ng-update/test-cases/v15/legacy-components-v15.spec.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,15 @@ describe('v15 legacy components migration', () => {
4343
expect(readLine(TS_FILE_PATH)).withContext(ctx).toEqual(opts.new);
4444
}
4545

46+
async function runMultilineTypeScriptMigrationTest(
47+
ctx: string,
48+
opts: {old: string[]; new: string[]},
49+
) {
50+
writeLines(TS_FILE_PATH, opts.old);
51+
await runMigration();
52+
expect(readLines(TS_FILE_PATH)).withContext(ctx).toEqual(opts.new);
53+
}
54+
4655
describe('material --> legacy', () => {
4756
it('updates import declarations', async () => {
4857
await runTypeScriptMigrationTest('named binding', {
@@ -61,6 +70,24 @@ describe('v15 legacy components migration', () => {
6170
old: `import {MatButton, MatButtonModule as ButtonModule} from '@angular/material/button';`,
6271
new: `import {MatLegacyButton as MatButton, MatLegacyButtonModule as ButtonModule} from '@angular/material/legacy-button';`,
6372
});
73+
await runMultilineTypeScriptMigrationTest('specific cases', {
74+
old: [
75+
`import {ProgressAnimationEnd, ProgressBarMode} from '@angular/material/progress-bar';`,
76+
`import {ProgressSpinnerMode} from '@angular/material/progress-spinner';`,
77+
`import {AutoFocusTarget, DialogRole, DialogPosition, _closeDialogVia, MatTestDialogOpener} from '@angular/material/dialog';`,
78+
`import {SimpleSnackBar, TextOnlySnackBar} from '@angular/material/snack-bar';`,
79+
],
80+
new: [
81+
`import {LegacyProgressAnimationEnd as ProgressAnimationEnd, LegacyProgressBarMode as ProgressBarMode} from '@angular/material/legacy-progress-bar';`,
82+
`import {LegacyProgressSpinnerMode as ProgressSpinnerMode} from '@angular/material/legacy-progress-spinner';`,
83+
`import {LegacyAutoFocusTarget as AutoFocusTarget, LegacyDialogRole as DialogRole, LegacyDialogPosition as DialogPosition, _closeLegacyDialogVia as _closeDialogVia, MatTestLegacyDialogOpener as MatTestDialogOpener} from '@angular/material/legacy-dialog';`,
84+
`import {LegacySimpleSnackBar as SimpleSnackBar, LegacyTextOnlySnackBar as TextOnlySnackBar} from '@angular/material/legacy-snack-bar';`,
85+
],
86+
});
87+
await runTypeScriptMigrationTest('specific case w/ alias', {
88+
old: `import {ProgressBarMode as MatProgressBarMode} from '@angular/material/progress-bar';`,
89+
new: `import {LegacyProgressBarMode as MatProgressBarMode} from '@angular/material/legacy-progress-bar';`,
90+
});
6491
});
6592

6693
it('updates import expressions', async () => {

0 commit comments

Comments
 (0)