From 0f7fea3dd2ce7d01b7d614eab8c7c09b272b4259 Mon Sep 17 00:00:00 2001 From: Ryan Bahan Date: Fri, 3 Apr 2026 16:16:35 -0600 Subject: [PATCH 1/2] Remove ansi-colors, inline ANSI escape codes at call sites Replace the 3 call sites with inline ANSI escape sequences: - bin/create-homebrew-pr.js: green + bold - workspace/src/lint.js: green.bold, red.bold, bold, dim - workspace/src/utils/log.js: green.bold, gray Co-Authored-By: Claude Opus 4.6 (1M context) --- bin/create-homebrew-pr.js | 2 +- package.json | 1 - pnpm-lock.yaml | 3 --- workspace/src/lint.js | 20 +++++++++++--------- workspace/src/utils/log.js | 9 ++------- 5 files changed, 14 insertions(+), 21 deletions(-) diff --git a/bin/create-homebrew-pr.js b/bin/create-homebrew-pr.js index 435e44f77fc..6f672cee5f0 100755 --- a/bin/create-homebrew-pr.js +++ b/bin/create-homebrew-pr.js @@ -15,7 +15,7 @@ import {Liquid} from 'liquidjs' const require = createRequire(import.meta.url) const {readFile, mkdir, lstat, copy, outputFile, pathExists, rm} = require('fs-extra') const {program} = require('commander') -const colors = require('ansi-colors') +const colors = {green: (s) => `\x1b[32m${s}\x1b[39m`, bold: (s) => `\x1b[1m${s}\x1b[22m`} import {withOctokit} from './github-utils.js' const packagingDirectory = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../packaging") diff --git a/package.json b/package.json index e8054b4b73f..1257493edd8 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,6 @@ "@types/node": "18.19.70", "@typescript-eslint/parser": "8.56.1", "@vitest/coverage-istanbul": "^3.1.4", - "ansi-colors": "^4.1.3", "bugsnag-build-reporter": "^2.0.0", "commander": "^9.4.0", "esbuild": "0.27.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4e47b801477..9567a9bad9a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,9 +64,6 @@ importers: '@vitest/coverage-istanbul': specifier: ^3.1.4 version: 3.2.4(vitest@3.2.4(@types/node@18.19.70)(jiti@2.6.1)(jsdom@28.1.0)(msw@2.12.10(@types/node@18.19.70)(typescript@5.9.3))(sass@1.97.3)(yaml@2.8.3)) - ansi-colors: - specifier: ^4.1.3 - version: 4.1.3 bugsnag-build-reporter: specifier: ^2.0.0 version: 2.0.0 diff --git a/workspace/src/lint.js b/workspace/src/lint.js index e7f5e59a6cf..3dfbfa92cc7 100644 --- a/workspace/src/lint.js +++ b/workspace/src/lint.js @@ -4,10 +4,12 @@ import * as path from 'pathe' import fg from 'fast-glob' import * as url from 'url' import {promises as fs} from 'fs' -import {createRequire} from 'module' - -const require = createRequire(import.meta.url) -const colors = require('ansi-colors') +const ansi = { + bold: (s) => `\x1b[1m${s}\x1b[22m`, + dim: (s) => `\x1b[2m${s}\x1b[22m`, + green: Object.assign((s) => `\x1b[32m${s}\x1b[39m`, {bold: (s) => `\x1b[1m\x1b[32m${s}\x1b[39m\x1b[22m`}), + red: Object.assign((s) => `\x1b[31m${s}\x1b[39m`, {bold: (s) => `\x1b[1m\x1b[31m${s}\x1b[39m\x1b[22m`}), +} const rootDirectory = path.join(url.fileURLToPath(new URL('.', import.meta.url)), '../..') let exitCode = 0 @@ -21,7 +23,7 @@ let exitCode = 0 * often in the Javascript ecosystem than in others due to the deep nature of dependency graphs and the * lack of automated testing in projects. */ -console.info(colors.green.bold(`Linting that packages have strict version requirements`)) +console.info(ansi.green.bold(`Linting that packages have strict version requirements`)) const packageJsonPaths = await fg(path.join(rootDirectory, 'packages/*/package.json'), {type: 'file'}) const dependenciesWithLooseVersionRequirement = [] const internalPackages = ['@shopify/ui-extensions-dev-console-app'] @@ -40,13 +42,13 @@ for (const packageJsonPath of packageJsonPaths) { if (dependenciesWithLooseVersionRequirement.length !== 0) { exitCode = 1 - console.error(colors.red.bold(`The following dependencies have dependencies with loose version requirements:`)) - console.error(colors.dim(`Loose version requirements might result in broken installations on the user end`)) + console.error(ansi.red.bold(`The following dependencies have dependencies with loose version requirements:`)) + console.error(ansi.dim(`Loose version requirements might result in broken installations on the user end`)) for (const dependency of dependenciesWithLooseVersionRequirement) { console.error( - ` - ${colors.bold('Package')}: ${dependency.pkg} | ${colors.bold('Dependency')}: ${ + ` - ${ansi.bold('Package')}: ${dependency.pkg} | ${ansi.bold('Dependency')}: ${ dependency.dependency - } | ${colors.bold('Version')}: ${dependency.version}`, + } | ${ansi.bold('Version')}: ${dependency.version}`, ) } } diff --git a/workspace/src/utils/log.js b/workspace/src/utils/log.js index a1844a04bac..ffb8e59c3bb 100644 --- a/workspace/src/utils/log.js +++ b/workspace/src/utils/log.js @@ -1,12 +1,7 @@ -import {createRequire} from 'module' - -const require = createRequire(import.meta.url) -const colors = require('ansi-colors') - export function logSection(title) { - console.info(colors.green.bold(title)) + console.info(`\x1b[1m\x1b[32m${title}\x1b[39m\x1b[22m`) } export function logMessage(message) { - console.info(colors.gray(` ${message}`)) + console.info(`\x1b[90m ${message}\x1b[39m`) } From 0cbbf25f4ec8f8e7d7df7673aef6480ed756d032 Mon Sep 17 00:00:00 2001 From: Ryan Bahan Date: Mon, 6 Apr 2026 15:55:47 -0600 Subject: [PATCH 2/2] Address review feedback: rename to colors, extract constants in log.js Co-Authored-By: Claude Opus 4.6 (1M context) --- workspace/src/lint.js | 30 +++++++++++++++++------------- workspace/src/utils/log.js | 9 +++++++-- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/workspace/src/lint.js b/workspace/src/lint.js index 3dfbfa92cc7..b152bf62cf5 100644 --- a/workspace/src/lint.js +++ b/workspace/src/lint.js @@ -1,14 +1,18 @@ -#!/usr/bin/env node +import * as url from 'url' +import {promises as fs} from 'fs' import * as path from 'pathe' import fg from 'fast-glob' -import * as url from 'url' -import {promises as fs} from 'fs' -const ansi = { - bold: (s) => `\x1b[1m${s}\x1b[22m`, - dim: (s) => `\x1b[2m${s}\x1b[22m`, - green: Object.assign((s) => `\x1b[32m${s}\x1b[39m`, {bold: (s) => `\x1b[1m\x1b[32m${s}\x1b[39m\x1b[22m`}), - red: Object.assign((s) => `\x1b[31m${s}\x1b[39m`, {bold: (s) => `\x1b[1m\x1b[31m${s}\x1b[39m\x1b[22m`}), + +const colors = { + bold: (string) => `\x1b[1m${string}\x1b[22m`, + dim: (string) => `\x1b[2m${string}\x1b[22m`, + green: Object.assign((string) => `\x1b[32m${string}\x1b[39m`, { + bold: (string) => `\x1b[1m\x1b[32m${string}\x1b[39m\x1b[22m`, + }), + red: Object.assign((string) => `\x1b[31m${string}\x1b[39m`, { + bold: (string) => `\x1b[1m\x1b[31m${string}\x1b[39m\x1b[22m`, + }), } const rootDirectory = path.join(url.fileURLToPath(new URL('.', import.meta.url)), '../..') @@ -23,7 +27,7 @@ let exitCode = 0 * often in the Javascript ecosystem than in others due to the deep nature of dependency graphs and the * lack of automated testing in projects. */ -console.info(ansi.green.bold(`Linting that packages have strict version requirements`)) +console.info(colors.green.bold(`Linting that packages have strict version requirements`)) const packageJsonPaths = await fg(path.join(rootDirectory, 'packages/*/package.json'), {type: 'file'}) const dependenciesWithLooseVersionRequirement = [] const internalPackages = ['@shopify/ui-extensions-dev-console-app'] @@ -42,13 +46,13 @@ for (const packageJsonPath of packageJsonPaths) { if (dependenciesWithLooseVersionRequirement.length !== 0) { exitCode = 1 - console.error(ansi.red.bold(`The following dependencies have dependencies with loose version requirements:`)) - console.error(ansi.dim(`Loose version requirements might result in broken installations on the user end`)) + console.error(colors.red.bold(`The following dependencies have dependencies with loose version requirements:`)) + console.error(colors.dim(`Loose version requirements might result in broken installations on the user end`)) for (const dependency of dependenciesWithLooseVersionRequirement) { console.error( - ` - ${ansi.bold('Package')}: ${dependency.pkg} | ${ansi.bold('Dependency')}: ${ + ` - ${colors.bold('Package')}: ${dependency.pkg} | ${colors.bold('Dependency')}: ${ dependency.dependency - } | ${ansi.bold('Version')}: ${dependency.version}`, + } | ${colors.bold('Version')}: ${dependency.version}`, ) } } diff --git a/workspace/src/utils/log.js b/workspace/src/utils/log.js index ffb8e59c3bb..5eadfee38e2 100644 --- a/workspace/src/utils/log.js +++ b/workspace/src/utils/log.js @@ -1,7 +1,12 @@ +const colors = { + green: {bold: (string) => `\x1b[1m\x1b[32m${string}\x1b[39m\x1b[22m`}, + gray: (string) => `\x1b[90m${string}\x1b[39m`, +} + export function logSection(title) { - console.info(`\x1b[1m\x1b[32m${title}\x1b[39m\x1b[22m`) + console.info(colors.green.bold(title)) } export function logMessage(message) { - console.info(`\x1b[90m ${message}\x1b[39m`) + console.info(colors.gray(` ${message}`)) }