Skip to content

Commit cb7d817

Browse files
devversiondylhunn
authored andcommitted
refactor(migrations): improve generic assignability in tsurge and pass more info (#57451)
* Improves some of the generic assignability for tsurge. Anything is allowed to be returned from an overridden `prepareProgram` method. This is useful for the signal input migration. * Passes the absolute root paths to migrations. This is helpful for the signal input migration and there is no other way to access it. It's better to pass specifically, compared to passing the whole unsafe `ParsedConfiguration` object. PR Close #57451
1 parent 8645152 commit cb7d817

File tree

7 files changed

+32
-12
lines changed

7 files changed

+32
-12
lines changed

packages/core/schematics/utils/tsurge/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ ts_library(
44
name = "tsurge",
55
srcs = glob(["**/*.ts"]),
66
visibility = [
7-
"//packages/core/schematics/utils/tsurge/test:__pkg__",
7+
"//packages/core/schematics:__subpackages__",
88
],
99
deps = [
1010
"//packages/compiler-cli",

packages/core/schematics/utils/tsurge/executors/analyze_exec.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,21 @@
88

99
import {TsurgeMigration} from '../migration';
1010
import {Serializable} from '../helpers/serializable';
11+
import ts from 'typescript';
12+
import {NgtscProgram} from '../../../../../compiler-cli/src/ngtsc/program';
1113

1214
/**
1315
* Executes the analyze phase of the given migration against
1416
* the specified TypeScript project.
1517
*
1618
* @returns the serializable migration unit data.
1719
*/
18-
export async function executeAnalyzePhase<UnitData, GlobalData>(
19-
migration: TsurgeMigration<UnitData, GlobalData>,
20+
export async function executeAnalyzePhase<
21+
UnitData,
22+
GlobalData,
23+
TsProgramType extends ts.Program | NgtscProgram,
24+
>(
25+
migration: TsurgeMigration<UnitData, GlobalData, TsProgramType, unknown>,
2026
tsconfigAbsolutePath: string,
2127
): Promise<Serializable<UnitData>> {
2228
const baseInfo = migration.createProgram(tsconfigAbsolutePath);

packages/core/schematics/utils/tsurge/executors/merge_exec.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,23 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9+
import ts from 'typescript';
910
import {Serializable} from '../helpers/serializable';
1011
import {TsurgeMigration} from '../migration';
12+
import {NgtscProgram} from '../../../../../compiler-cli/src/ngtsc/program';
1113

1214
/**
1315
* Executes the merge phase for the given migration against
1416
* the given set of analysis unit data.
1517
*
1618
* @returns the serializable migration global data.
1719
*/
18-
export async function executeMergePhase<UnitData, GlobalData>(
19-
migration: TsurgeMigration<UnitData, GlobalData>,
20+
export async function executeMergePhase<
21+
UnitData,
22+
GlobalData,
23+
TsProgramType extends ts.Program | NgtscProgram,
24+
>(
25+
migration: TsurgeMigration<UnitData, GlobalData, TsProgramType, unknown>,
2026
units: UnitData[],
2127
): Promise<Serializable<GlobalData>> {
2228
return await migration.merge(units);

packages/core/schematics/utils/tsurge/executors/migrate_exec.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
import {TsurgeMigration} from '../migration';
1010
import {Replacement} from '../replacement';
11+
import {NgtscProgram} from '../../../../../compiler-cli/src/ngtsc/program';
12+
import ts from 'typescript';
1113

1214
/**
1315
* Executes the migrate phase of the given migration against
@@ -18,8 +20,12 @@ import {Replacement} from '../replacement';
1820
*
1921
* @returns a list of text replacements to apply to disk.
2022
*/
21-
export async function executeMigratePhase<UnitData, GlobalData>(
22-
migration: TsurgeMigration<UnitData, GlobalData>,
23+
export async function executeMigratePhase<
24+
UnitData,
25+
GlobalData,
26+
TsProgramType extends ts.Program | NgtscProgram,
27+
>(
28+
migration: TsurgeMigration<UnitData, GlobalData, TsProgramType, unknown>,
2329
globalMetadata: GlobalData,
2430
tsconfigAbsolutePath: string,
2531
): Promise<Replacement[]> {

packages/core/schematics/utils/tsurge/helpers/ngtsc_program.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ export function createNgtscProgram(
5959
return {
6060
program: ngtscProgram,
6161
userOptions: tsconfig.options,
62+
programAbsoluteRootPaths: tsconfig.rootNames,
6263
tsconfigAbsolutePath: absoluteTsconfigPath,
6364
};
6465
}

packages/core/schematics/utils/tsurge/migration.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export abstract class TsurgeMigration<
4848
UnitAnalysisMetadata,
4949
CombinedGlobalMetadata,
5050
TsProgramType extends ts.Program | NgtscProgram = NgtscProgram,
51-
FullProgramInfo extends ProgramInfo<TsProgramType> = ProgramInfo<TsProgramType>,
51+
PreparationInfo = ProgramInfo<TsProgramType>,
5252
> {
5353
// By default, ngtsc programs are being created.
5454
createProgram(tsconfigAbsPath: string, fs?: FileSystem): BaseProgramInfo<TsProgramType> {
@@ -57,7 +57,7 @@ export abstract class TsurgeMigration<
5757

5858
// Optional function to prepare the base `ProgramInfo` even further,
5959
// for the analyze and migrate phases. E.g. determining source files.
60-
prepareProgram(info: BaseProgramInfo<TsProgramType>): FullProgramInfo {
60+
prepareProgram(info: BaseProgramInfo<TsProgramType>): PreparationInfo {
6161
assert(info.program instanceof NgtscProgram);
6262

6363
const userProgram = info.program.getTsProgram();
@@ -78,11 +78,11 @@ export abstract class TsurgeMigration<
7878
sourceFiles,
7979
fullProgramSourceFiles,
8080
projectDirAbsPath,
81-
} as FullProgramInfo;
81+
} as PreparationInfo;
8282
}
8383

8484
/** Analyzes the given TypeScript project and returns serializable compilation unit data. */
85-
abstract analyze(program: FullProgramInfo): Promise<Serializable<UnitAnalysisMetadata>>;
85+
abstract analyze(program: PreparationInfo): Promise<Serializable<UnitAnalysisMetadata>>;
8686

8787
/** Merges all compilation unit data from previous analysis phases into a global metadata. */
8888
abstract merge(units: UnitAnalysisMetadata[]): Promise<Serializable<CombinedGlobalMetadata>>;
@@ -93,6 +93,6 @@ export abstract class TsurgeMigration<
9393
*/
9494
abstract migrate(
9595
globalMetadata: CombinedGlobalMetadata,
96-
program: FullProgramInfo,
96+
program: PreparationInfo,
9797
): Promise<Replacement[]>;
9898
}

packages/core/schematics/utils/tsurge/program_info.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import ts from 'typescript';
1919
export interface BaseProgramInfo<T extends NgtscProgram | ts.Program> {
2020
program: T;
2121
userOptions: NgCompilerOptions;
22+
programAbsoluteRootPaths: string[];
2223
tsconfigAbsolutePath: string;
2324
}
2425

0 commit comments

Comments
 (0)