mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-18 03:23:57 +08:00
The new routing APIs don't support `browser` builder, but calling `ng add @angular/ssr` with a `browser` builder would still prompt the user to add them. If the user said "Yes", it would actually ignore that answer and not enable the new APIs. With this change, `ng add @angular/ssr` when using `browser` builder does not show the prompt and assumes the answer is "No". It also throws an error if the user runs `ng add @angular/ssr --server-routing`. I'm not aware of a built-in prompting mechanism in schematics beyond `x-prompt`, which can't be used here, so instead I just called Inquirer directly. Unfortunately testing the prompt is a little awkward, as Inquirier does not provide useful APIs in this space. I evaluated `@inquirer/testing`, but ultimately decided that was more intended for testing custom Inquirer prompts, not mocking usage of standard prompts. Schematics APIs do not provide a useful way to inject additional data like a mock, so instead I had to do this through a `setPrompterForTestOnly` function. I'm not a huge fan of it, but I don't see a more straightforward way of solving the problem.
23 lines
674 B
TypeScript
23 lines
674 B
TypeScript
/**
|
|
* @license
|
|
* Copyright Google LLC 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.dev/license
|
|
*/
|
|
|
|
function _isTruthy(value: undefined | string): boolean {
|
|
// Returns true if value is a string that is anything but 0 or false.
|
|
return value !== undefined && value !== '0' && value.toUpperCase() !== 'FALSE';
|
|
}
|
|
|
|
export function isTTY(): boolean {
|
|
// If we force TTY, we always return true.
|
|
const force = process.env['NG_FORCE_TTY'];
|
|
if (force !== undefined) {
|
|
return _isTruthy(force);
|
|
}
|
|
|
|
return !!process.stdout.isTTY && !_isTruthy(process.env['CI']);
|
|
}
|