nx/scripts/angular-support-upgrades/build-migrations.ts
2023-01-12 12:30:17 -05:00

111 lines
3.2 KiB
TypeScript

import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
import {
getAngularCliMigrationGenerator,
getAngularCliMigrationGeneratorSpec,
} from './files/angular-cli-upgrade-migration';
import { join } from 'path';
function addMigrationPackageGroup(
angularPackageMigrations: Record<string, any>,
targetNxVersion: string,
targetNxMigrationVersion: string,
packageVersionMap: Map<string, string>
) {
angularPackageMigrations.packageJsonUpdates[targetNxVersion] = {
version: `${targetNxMigrationVersion}`,
packages: {},
};
for (const [pkgName, version] of packageVersionMap.entries()) {
if (
pkgName.startsWith('@angular/') &&
!['@angular/core', '@angular/material', '@angular/cdk'].includes(pkgName)
) {
continue;
}
angularPackageMigrations.packageJsonUpdates[targetNxVersion].packages[
pkgName
] = {
version: `~${version}`,
alwaysAddToPackageJson: pkgName === '@angular/core',
};
}
}
export function buildMigrations(
packageVersionMap: Map<string, string>,
targetNxVersion: string,
targetNxMigrationVersion: string
) {
console.log('⏳ - Writing migrations...');
const pathToMigrationsJsonFile = 'packages/angular/migrations.json';
const angularPackageMigrations = JSON.parse(
readFileSync(pathToMigrationsJsonFile, { encoding: 'utf-8' })
);
addMigrationPackageGroup(
angularPackageMigrations,
targetNxVersion,
targetNxMigrationVersion,
packageVersionMap
);
const angularCLIVersion = packageVersionMap.get('@angular/cli') as string;
const angularCliMigrationGeneratorContents =
getAngularCliMigrationGenerator(angularCLIVersion);
const angularCliMigrationGeneratorSpecContents =
getAngularCliMigrationGeneratorSpec(angularCLIVersion);
// Create the directory update-targetNxVersion.dasherize()
// Write the generator
// Update angularPackageMigrations
const migrationGeneratorFolderName =
'update-' + targetNxVersion.replace(/\./g, '-');
const migrationFileName = 'update-angular-cli';
const generatorName = `update-angular-cli-version-${angularCLIVersion.replace(
/\./g,
'-'
)}`;
angularPackageMigrations.schematics[generatorName] = {
cli: 'nx',
version: targetNxMigrationVersion,
description: `Update the @angular/cli package version to ~${angularCLIVersion}.`,
factory: `./src/migrations/${migrationGeneratorFolderName}/${migrationFileName}`,
};
writeFileSync(
pathToMigrationsJsonFile,
JSON.stringify(angularPackageMigrations, null, 2)
);
const pathToMigrationFolder = join(
'packages/angular/src/migrations',
migrationGeneratorFolderName
);
if (!existsSync(pathToMigrationFolder)) {
mkdirSync(pathToMigrationFolder);
}
const pathToMigrationGeneratorFile = join(
pathToMigrationFolder,
`${migrationFileName}.ts`
);
const pathToMigrationGeneratorSpecFile = join(
pathToMigrationFolder,
`${migrationFileName}.spec.ts`
);
writeFileSync(
pathToMigrationGeneratorFile,
angularCliMigrationGeneratorContents
);
writeFileSync(
pathToMigrationGeneratorSpecFile,
angularCliMigrationGeneratorSpecContents
);
console.log('✅ - Wrote migrations');
}