diff --git a/packages/cli-kit/src/public/node/output.test.ts b/packages/cli-kit/src/public/node/output.test.ts index bdcef55a73..405ae925c4 100644 --- a/packages/cli-kit/src/public/node/output.test.ts +++ b/packages/cli-kit/src/public/node/output.test.ts @@ -7,6 +7,7 @@ import { outputToken, shouldDisplayColors, formatPackageManagerCommand, + unstyled, } from './output.js' import {currentProcessIsGlobal} from './is-global.js' @@ -176,3 +177,27 @@ describe('formatPackageManagerCommand', () => { expect(result).toEqual('shopify app dev --reset') }) }) + +describe('unstyled', () => { + test('strips ANSI escape codes from a string', () => { + // Given + const message = '\u001b[31mError:\u001b[39m something went wrong' + + // When + const result = unstyled(message) + + // Then + expect(result).toEqual('Error: something went wrong') + }) + + test('returns the same string if it does not contain ANSI escape codes', () => { + // Given + const message = 'Just a plain message' + + // When + const result = unstyled(message) + + // Then + expect(result).toEqual(message) + }) +}) diff --git a/packages/cli-kit/src/public/node/output.ts b/packages/cli-kit/src/public/node/output.ts index 73670baa22..87f9bbc47e 100644 --- a/packages/cli-kit/src/public/node/output.ts +++ b/packages/cli-kit/src/public/node/output.ts @@ -402,6 +402,7 @@ export function outputWhereAppropriate(logLevel: LogLevel, logger: Logger, messa * @returns The message without styles. */ export function unstyled(message: string): string { + if (!message.includes('\u001b')) return message return stripAnsi(message) }