/** * @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.io/license */ import {error, info, promptConfirm, red} from '../utils/console'; import {runFormatterInParallel} from './run-commands-parallel'; /** * Format provided files in place. */ export async function formatFiles(files: string[]) { // Whether any files failed to format. let failures = await runFormatterInParallel(files, 'format'); if (failures === false) { info('No files matched for formatting.'); process.exit(0); } // The process should exit as a failure if any of the files failed to format. if (failures.length !== 0) { error(red(`The following files could not be formatted:`)); failures.forEach(({filePath, message}) => { info(` • ${filePath}: ${message}`); }); error(red(`Formatting failed, see errors above for more information.`)); process.exit(1); } info(`√ Formatting complete.`); process.exit(0); } /** * Check provided files for formatting correctness. */ export async function checkFiles(files: string[]) { // Files which are currently not formatted correctly. const failures = await runFormatterInParallel(files, 'check'); if (failures === false) { info('No files matched for formatting check.'); process.exit(0); } if (failures.length) { // Provide output expressing which files are failing formatting. info.group('\nThe following files are out of format:'); for (const {filePath} of failures) { info(` • ${filePath}`); } info.groupEnd(); info(); // If the command is run in a non-CI environment, prompt to format the files immediately. let runFormatter = false; if (!process.env['CI']) { runFormatter = await promptConfirm('Format the files now?', true); } if (runFormatter) { // Format the failing files as requested. await formatFiles(failures.map(f => f.filePath)); process.exit(0); } else { // Inform user how to format files in the future. info(); info(`To format the failing file run the following command:`); info(` yarn ng-dev format files ${failures.map(f => f.filePath).join(' ')}`); process.exit(1); } } else { info('√ All files correctly formatted.'); process.exit(0); } }