diff --git a/packages/core/schematics/ng-generate/cleanup-unused-imports/index.ts b/packages/core/schematics/ng-generate/cleanup-unused-imports/index.ts index 0518aa3c4b31..b04e3b2cf015 100644 --- a/packages/core/schematics/ng-generate/cleanup-unused-imports/index.ts +++ b/packages/core/schematics/ng-generate/cleanup-unused-imports/index.ts @@ -7,16 +7,20 @@ */ import {Rule} from '@angular-devkit/schematics'; +import {MigrationStage, runMigrationInDevkit} from '../../utils/tsurge/helpers/angular_devkit'; import {UnusedImportsMigration} from './unused_imports_migration'; -import {runMigrationInDevkit} from '../../utils/tsurge/helpers/angular_devkit'; export function migrate(): Rule { return async (tree, context) => { await runMigrationInDevkit({ getMigration: () => new UnusedImportsMigration(), tree, - beforeProgramCreation: (tsconfigPath) => { - context.logger.info(`Preparing analysis for ${tsconfigPath}`); + beforeProgramCreation: (tsconfigPath, stage) => { + if (stage === MigrationStage.Analysis) { + context.logger.info(`Preparing analysis for: ${tsconfigPath}...`); + } else { + context.logger.info(`Running migration for: ${tsconfigPath}...`); + } }, beforeUnitAnalysis: (tsconfigPath) => { context.logger.info(`Scanning for unused imports using ${tsconfigPath}`); diff --git a/packages/core/schematics/ng-generate/output-migration/index.ts b/packages/core/schematics/ng-generate/output-migration/index.ts index 869ec8bb6175..9f7c2613c014 100644 --- a/packages/core/schematics/ng-generate/output-migration/index.ts +++ b/packages/core/schematics/ng-generate/output-migration/index.ts @@ -8,7 +8,7 @@ import {Rule} from '@angular-devkit/schematics'; import {OutputMigration} from '../../migrations/output-migration/output-migration'; -import {runMigrationInDevkit} from '../../utils/tsurge/helpers/angular_devkit'; +import {MigrationStage, runMigrationInDevkit} from '../../utils/tsurge/helpers/angular_devkit'; interface Options { path: string; @@ -28,8 +28,12 @@ export function migrate(options: Options): Rule { ); }, }), - beforeProgramCreation: (tsconfigPath) => { - context.logger.info(`Preparing analysis for: ${tsconfigPath}...`); + beforeProgramCreation: (tsconfigPath, stage) => { + if (stage === MigrationStage.Analysis) { + context.logger.info(`Preparing analysis for: ${tsconfigPath}...`); + } else { + context.logger.info(`Running migration for: ${tsconfigPath}...`); + } }, afterProgramCreation: (info, fs) => { const analysisPath = fs.resolve(options.analysisDir); diff --git a/packages/core/schematics/ng-generate/self-closing-tags-migration/index.ts b/packages/core/schematics/ng-generate/self-closing-tags-migration/index.ts index d7499860a03e..5b9109b12ff4 100644 --- a/packages/core/schematics/ng-generate/self-closing-tags-migration/index.ts +++ b/packages/core/schematics/ng-generate/self-closing-tags-migration/index.ts @@ -8,7 +8,7 @@ import {Rule} from '@angular-devkit/schematics'; import {SelfClosingTagsMigration} from '../../migrations/self-closing-tags-migration/self-closing-tags-migration'; -import {runMigrationInDevkit} from '../../utils/tsurge/helpers/angular_devkit'; +import {MigrationStage, runMigrationInDevkit} from '../../utils/tsurge/helpers/angular_devkit'; interface Options { path: string; @@ -28,8 +28,12 @@ export function migrate(options: Options): Rule { ); }, }), - beforeProgramCreation: (tsconfigPath) => { - context.logger.info(`Preparing analysis for: ${tsconfigPath}...`); + beforeProgramCreation: (tsconfigPath, stage) => { + if (stage === MigrationStage.Analysis) { + context.logger.info(`Preparing analysis for: ${tsconfigPath}...`); + } else { + context.logger.info(`Running migration for: ${tsconfigPath}...`); + } }, beforeUnitAnalysis: (tsconfigPath) => { context.logger.info(`Scanning for component tags: ${tsconfigPath}...`); diff --git a/packages/core/schematics/ng-generate/signal-input-migration/index.ts b/packages/core/schematics/ng-generate/signal-input-migration/index.ts index 4d4b5b69a662..e6a49fd8a1b5 100644 --- a/packages/core/schematics/ng-generate/signal-input-migration/index.ts +++ b/packages/core/schematics/ng-generate/signal-input-migration/index.ts @@ -8,7 +8,7 @@ import {Rule} from '@angular-devkit/schematics'; import {SignalInputMigration} from '../../migrations/signal-migration/src'; -import {runMigrationInDevkit} from '../../utils/tsurge/helpers/angular_devkit'; +import {MigrationStage, runMigrationInDevkit} from '../../utils/tsurge/helpers/angular_devkit'; interface Options { path: string; @@ -32,8 +32,12 @@ export function migrate(options: Options): Rule { ); }, }), - beforeProgramCreation: (tsconfigPath) => { - context.logger.info(`Preparing analysis for: ${tsconfigPath}...`); + beforeProgramCreation: (tsconfigPath, stage) => { + if (stage === MigrationStage.Analysis) { + context.logger.info(`Preparing analysis for: ${tsconfigPath}...`); + } else { + context.logger.info(`Running migration for: ${tsconfigPath}...`); + } }, afterProgramCreation: (info, fs) => { const analysisPath = fs.resolve(options.analysisDir); diff --git a/packages/core/schematics/ng-generate/signal-queries-migration/index.ts b/packages/core/schematics/ng-generate/signal-queries-migration/index.ts index 9da1f2e2d0ec..b13fa85aa156 100644 --- a/packages/core/schematics/ng-generate/signal-queries-migration/index.ts +++ b/packages/core/schematics/ng-generate/signal-queries-migration/index.ts @@ -8,7 +8,7 @@ import {Rule} from '@angular-devkit/schematics'; import {SignalQueriesMigration} from '../../migrations/signal-queries-migration/migration'; -import {runMigrationInDevkit} from '../../utils/tsurge/helpers/angular_devkit'; +import {MigrationStage, runMigrationInDevkit} from '../../utils/tsurge/helpers/angular_devkit'; interface Options { path: string; @@ -32,8 +32,12 @@ export function migrate(options: Options): Rule { ); }, }), - beforeProgramCreation: (tsconfigPath) => { - context.logger.info(`Preparing analysis for: ${tsconfigPath}...`); + beforeProgramCreation: (tsconfigPath, stage) => { + if (stage === MigrationStage.Analysis) { + context.logger.info(`Preparing analysis for: ${tsconfigPath}...`); + } else { + context.logger.info(`Running migration for: ${tsconfigPath}...`); + } }, afterProgramCreation: (info, fs) => { const analysisPath = fs.resolve(options.analysisDir); diff --git a/packages/core/schematics/utils/tsurge/helpers/angular_devkit/run_in_devkit.ts b/packages/core/schematics/utils/tsurge/helpers/angular_devkit/run_in_devkit.ts index f4fff9d87d86..8b4f51566e8e 100644 --- a/packages/core/schematics/utils/tsurge/helpers/angular_devkit/run_in_devkit.ts +++ b/packages/core/schematics/utils/tsurge/helpers/angular_devkit/run_in_devkit.ts @@ -18,6 +18,14 @@ import {ProjectRootRelativePath} from '../../project_paths'; import {ProgramInfo} from '../../program_info'; import {getProjectTsConfigPaths} from '../../../../utils/project_tsconfig_paths'; +export enum MigrationStage { + /** The migration is analyzing an entrypoint */ + Analysis, + + /** The migration is about to migrate an entrypoint */ + Migrate, +} + /** Information necessary to run a Tsurge migration in the devkit. */ export interface TsurgeDevkitMigration { /** Instantiates the migration. */ @@ -27,13 +35,13 @@ export interface TsurgeDevkitMigration { tree: Tree; /** Called before a program is created. Useful to notify the user before processing starts. */ - beforeProgramCreation?: (tsconfigPath: string) => void; + beforeProgramCreation?: (tsconfigPath: string, stage: MigrationStage) => void; /** * Called after a program is created. Useful when the * structure needs to be modified (e.g. filtering files). */ - afterProgramCreation?: (info: ProgramInfo, fileSystem: FileSystem) => void; + afterProgramCreation?: (info: ProgramInfo, fileSystem: FileSystem, stage: MigrationStage) => void; /** Called before a unit is analyzed. Useful for logging. */ beforeUnitAnalysis?: (tsconfigPath: string) => void; @@ -55,21 +63,21 @@ export async function runMigrationInDevkit(config: TsurgeDevkitMigration): Promi if (!buildPaths.length && !testPaths.length) { throw new SchematicsException('Could not find any tsconfig file. Cannot run the migration.'); } + const tsconfigPaths = [...buildPaths, ...testPaths]; const fs = new DevkitMigrationFilesystem(config.tree); setFileSystem(fs); const migration = config.getMigration(fs); const unitResults: unknown[] = []; - const programInfos = [...buildPaths, ...testPaths].map((tsconfigPath) => { - config.beforeProgramCreation?.(tsconfigPath); + + const isFunnelMigration = migration instanceof TsurgeFunnelMigration; + for (const tsconfigPath of tsconfigPaths) { + config.beforeProgramCreation?.(tsconfigPath, MigrationStage.Analysis); const baseInfo = migration.createProgram(tsconfigPath, fs); const info = migration.prepareProgram(baseInfo); - config.afterProgramCreation?.(info, fs); - return {info, tsconfigPath}; - }); + config.afterProgramCreation?.(info, fs, MigrationStage.Analysis); - for (const {info, tsconfigPath} of programInfos) { config.beforeUnitAnalysis?.(tsconfigPath); unitResults.push(await migration.analyze(info)); } @@ -85,12 +93,17 @@ export async function runMigrationInDevkit(config: TsurgeDevkitMigration): Promi const globalMeta = await migration.globalMeta(combined); let replacements: Replacement[]; - if (migration instanceof TsurgeFunnelMigration) { + if (isFunnelMigration) { replacements = (await migration.migrate(globalMeta)).replacements; } else { replacements = []; - for (const {info} of programInfos) { + for (const tsconfigPath of tsconfigPaths) { + config.beforeProgramCreation?.(tsconfigPath, MigrationStage.Migrate); + const baseInfo = migration.createProgram(tsconfigPath, fs); + const info = migration.prepareProgram(baseInfo); + config.afterProgramCreation?.(info, fs, MigrationStage.Migrate); + const result = await migration.migrate(globalMeta, info); replacements.push(...result.replacements); }