diff --git a/packages/schematics/angular/migrations/migration-collection.json b/packages/schematics/angular/migrations/migration-collection.json index 5d789a24cb..0e03d24ae7 100644 --- a/packages/schematics/angular/migrations/migration-collection.json +++ b/packages/schematics/angular/migrations/migration-collection.json @@ -24,6 +24,11 @@ "version": "7.0.4", "factory": "./update-7", "description": "Update an Angular CLI project to version 7." + }, + "migration-06": { + "version": "7.0.3", + "factory": "./update-7/index#updateDevkitBuildNgPackagr", + "description": "Update an Angular CLI project to version 7." } } } diff --git a/packages/schematics/angular/migrations/update-7/devkit-ng-packagr.ts b/packages/schematics/angular/migrations/update-7/devkit-ng-packagr.ts new file mode 100644 index 0000000000..d52aefce47 --- /dev/null +++ b/packages/schematics/angular/migrations/update-7/devkit-ng-packagr.ts @@ -0,0 +1,33 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +import { Rule } from '@angular-devkit/schematics'; +import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks'; +import { addPackageJsonDependency, getPackageJsonDependency } from '../../utility/dependencies'; +import { latestVersions } from '../../utility/latest-versions'; + +export function updateDevkitBuildNgPackagr(): Rule { + return (tree, context) => { + const existing = getPackageJsonDependency(tree, '@angular-devkit/build-ng-packagr'); + + if (!existing) { + return; + } + + addPackageJsonDependency( + tree, + { + type: existing.type, + name: '@angular-devkit/build-ng-packagr', + version: latestVersions.DevkitBuildNgPackagr, + overwrite: true, + }, + ); + + context.addTask(new NodePackageInstallTask()); + }; +} diff --git a/packages/schematics/angular/migrations/update-7/devkit-ng-packagr_spec.ts b/packages/schematics/angular/migrations/update-7/devkit-ng-packagr_spec.ts new file mode 100644 index 0000000000..a606dfdc37 --- /dev/null +++ b/packages/schematics/angular/migrations/update-7/devkit-ng-packagr_spec.ts @@ -0,0 +1,52 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +import { EmptyTree } from '@angular-devkit/schematics'; +import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing'; +import { latestVersions } from '../../utility/latest-versions'; + +const oldPkg = ` +{ + "devDependencies": { + "@angular-devkit/build-angular": "0.0.0", + "@angular-devkit/build-ng-packagr": "0.0.0" + } +} +`; + +describe('updateDevkitBuildNgPackagr', () => { + const schematicRunner = new SchematicTestRunner( + 'migrations', + require.resolve('../migration-collection.json'), + ); + + let tree: UnitTestTree; + + beforeEach(async () => { + tree = new UnitTestTree(new EmptyTree()); + tree = await schematicRunner.runExternalSchematicAsync( + require.resolve('../../collection.json'), 'ng-new', + { + name: 'migration-test', + version: '1.2.3', + directory: '.', + }, + tree, + ).toPromise(); + }); + + it('should work as expected', async () => { + tree.overwrite('/package.json', oldPkg); + const tree2 = await schematicRunner.runSchematicAsync('migration-06', {}, tree.branch()) + .toPromise(); + + const content = tree2.readContent('/package.json'); + const pkg = JSON.parse(content); + expect(pkg.devDependencies['@angular-devkit/build-ng-packagr']) + .toBe(latestVersions.DevkitBuildNgPackagr); + }); +}); diff --git a/packages/schematics/angular/migrations/update-7/index.ts b/packages/schematics/angular/migrations/update-7/index.ts index b54923bd33..5359f37ef4 100644 --- a/packages/schematics/angular/migrations/update-7/index.ts +++ b/packages/schematics/angular/migrations/update-7/index.ts @@ -16,6 +16,7 @@ import { latestVersions } from '../../utility/latest-versions'; export { polyfillMetadataRule } from './polyfill-metadata'; export { typeScriptHelpersRule } from './typescript-helpers'; +export { updateDevkitBuildNgPackagr } from './devkit-ng-packagr'; export default function(): Rule { return (tree, context) => {