mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-17 02:54:21 +08:00
86 lines
2.5 KiB
TypeScript
86 lines
2.5 KiB
TypeScript
/**
|
|
* @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
|
|
*/
|
|
|
|
// tslint:disable:no-global-tslint-disable no-any
|
|
import { normalize } from '@angular-devkit/core';
|
|
import { CommandScope, Option } from '../models/command';
|
|
import { CoreSchematicOptions, SchematicCommand } from '../models/schematic-command';
|
|
import { findUp } from '../utilities/find-up';
|
|
|
|
export interface UpdateOptions extends CoreSchematicOptions {
|
|
next: boolean;
|
|
schematic?: boolean;
|
|
}
|
|
|
|
|
|
export default class UpdateCommand extends SchematicCommand {
|
|
public readonly name = 'update';
|
|
public readonly description = 'Updates your application and its dependencies.';
|
|
public static aliases: string[] = [];
|
|
public readonly scope = CommandScope.everywhere;
|
|
public arguments: string[] = [ 'packages' ];
|
|
public options: Option[] = [
|
|
// Remove the --force flag.
|
|
...this.coreOptions.filter(option => option.name !== 'force'),
|
|
];
|
|
public readonly allowMissingWorkspace = true;
|
|
|
|
private collectionName = '@schematics/update';
|
|
private schematicName = 'update';
|
|
|
|
private initialized = false;
|
|
public async initialize(options: any) {
|
|
if (this.initialized) {
|
|
return;
|
|
}
|
|
await super.initialize(options);
|
|
this.initialized = true;
|
|
|
|
const schematicOptions = await this.getOptions({
|
|
schematicName: this.schematicName,
|
|
collectionName: this.collectionName,
|
|
});
|
|
this.options = this.options.concat(schematicOptions.options);
|
|
this.arguments = this.arguments.concat(schematicOptions.arguments.map(a => a.name));
|
|
}
|
|
|
|
async validate(options: any) {
|
|
if (options._[0] == '@angular/cli'
|
|
&& options.migrateOnly === undefined
|
|
&& options.from === undefined) {
|
|
// Check for a 1.7 angular-cli.json file.
|
|
const oldConfigFileNames = [
|
|
normalize('.angular-cli.json'),
|
|
normalize('angular-cli.json'),
|
|
];
|
|
const oldConfigFilePath =
|
|
findUp(oldConfigFileNames, process.cwd())
|
|
|| findUp(oldConfigFileNames, __dirname);
|
|
|
|
if (oldConfigFilePath) {
|
|
options.migrateOnly = true;
|
|
options.from = '1.0.0';
|
|
}
|
|
}
|
|
|
|
return super.validate(options);
|
|
}
|
|
|
|
|
|
public async run(options: UpdateOptions) {
|
|
return this.runSchematic({
|
|
collectionName: this.collectionName,
|
|
schematicName: this.schematicName,
|
|
schematicOptions: options,
|
|
dryRun: options.dryRun,
|
|
force: false,
|
|
showNothingDone: false,
|
|
});
|
|
}
|
|
}
|