From a4a72a07489c6325250ddd43701326986ac072c8 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 7 Aug 2026 15:41:28 -0400 Subject: [PATCH] refactor(@angular/cli): use Node.js styleText for color helpers Replaces listr2 re-exports in the CLI color helper with Node.js built-in `styleText` utilities from `node:util`. Previously, importing colors from `utilities/color.ts` eagerly pulled in `listr2` along with its transitive dependencies (`wrap-ansi`, `string-width`, `get-east-asian-width`), introducing synchronous ESM module evaluation and ANSI formatting overhead during early CLI startup. --- .../src/commands/update/utilities/migration.ts | 2 +- packages/angular/cli/src/utilities/color.ts | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/angular/cli/src/commands/update/utilities/migration.ts b/packages/angular/cli/src/commands/update/utilities/migration.ts index 21331364bc2f..0b52091159b4 100644 --- a/packages/angular/cli/src/commands/update/utilities/migration.ts +++ b/packages/angular/cli/src/commands/update/utilities/migration.ts @@ -13,10 +13,10 @@ import { FileSystemSchematicDescription, NodeWorkflow, } from '@angular-devkit/schematics/tools'; +import { color as colors, figures } from 'listr2'; import { SpawnSyncReturns } from 'node:child_process'; import * as semver from 'semver'; import { subscribeToWorkflow } from '../../../command-builder/utilities/schematic-workflow'; -import { colors, figures } from '../../../utilities/color'; import { assertIsError } from '../../../utilities/error'; import { writeErrorToLogFile } from '../../../utilities/log-file'; import { formatFiles } from '../../../utilities/prettier'; diff --git a/packages/angular/cli/src/utilities/color.ts b/packages/angular/cli/src/utilities/color.ts index 3915d99ce248..13333dbc4b57 100644 --- a/packages/angular/cli/src/utilities/color.ts +++ b/packages/angular/cli/src/utilities/color.ts @@ -7,8 +7,23 @@ */ import { WriteStream } from 'node:tty'; +import { styleText } from 'node:util'; -export { color as colors, figures } from 'listr2'; +export const colors = Object.freeze({ + black: (text: string) => styleText('black', text), + blue: (text: string) => styleText('blue', text), + bold: (text: string) => styleText('bold', text), + cyan: (text: string) => styleText('cyan', text), + dim: (text: string) => styleText('dim', text), + gray: (text: string) => styleText('gray', text), + green: (text: string) => styleText('green', text), + italic: (text: string) => styleText('italic', text), + magenta: (text: string) => styleText('magenta', text), + red: (text: string) => styleText('red', text), + underline: (text: string) => styleText('underline', text), + white: (text: string) => styleText('white', text), + yellow: (text: string) => styleText('yellow', text), +}); export function supportColor(stream: NodeJS.WritableStream = process.stdout): boolean { if (stream instanceof WriteStream) {