Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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}`);
Expand Down
10 changes: 7 additions & 3 deletions packages/core/schematics/ng-generate/output-migration/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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}...`);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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. */
Expand All @@ -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;
Expand All @@ -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));
}
Expand All @@ -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);
}
Expand Down