diff --git a/packages/create-turbo/__tests__/index.test.ts b/packages/create-turbo/__tests__/index.test.ts index 262e953240ae1..ff33e849754f1 100644 --- a/packages/create-turbo/__tests__/index.test.ts +++ b/packages/create-turbo/__tests__/index.test.ts @@ -1,6 +1,6 @@ import path from "node:path"; import childProcess from "node:child_process"; -import { bold, cyan, green, red } from "picocolors"; +import picocolors from "picocolors"; import { setupTestFixtures, spyConsole, spyExit } from "@turbo/test-utils"; import { logger } from "@turbo/utils"; import type { PackageManager } from "@turbo/utils"; @@ -50,7 +50,7 @@ describe("create-turbo", () => { ])( "outputs expected console messages when using $packageManager (option)", async ({ packageManager }) => { - const { root } = useFixture({ fixture: `create-turbo` }); + const { root } = useFixture({ fixture: "create-turbo" }); const availableScripts = ["build", "test", "dev"]; @@ -93,16 +93,20 @@ describe("create-turbo", () => { telemetry, }); - const expected = `${bold( + const expected = `${picocolors.bold( logger.turboGradient(">>> Success!") - )} Created your Turborepo at ${green( + )} Created your Turborepo at ${picocolors.green( path.relative(process.cwd(), root) )}`; expect(mockConsole.log).toHaveBeenCalledWith(expected); expect(mockConsole.log).toHaveBeenCalledWith(); - expect(mockConsole.log).toHaveBeenCalledWith(bold("To get started:")); + expect(mockConsole.log).toHaveBeenCalledWith( + picocolors.bold("To get started:") + ); - expect(mockConsole.log).toHaveBeenCalledWith(cyan("Library packages")); + expect(mockConsole.log).toHaveBeenCalledWith( + picocolors.cyan("Library packages") + ); expect(mockConsole.log).toHaveBeenCalledWith( "- Run commands with Turborepo:" @@ -110,7 +114,9 @@ describe("create-turbo", () => { availableScripts.forEach((script) => { expect(mockConsole.log).toHaveBeenCalledWith( - expect.stringContaining(cyan(`${packageManager} run ${script}`)) + expect.stringContaining( + picocolors.cyan(`${packageManager} run ${script}`) + ) ); }); @@ -133,7 +139,7 @@ describe("create-turbo", () => { ])( "outputs expected console messages when using $packageManager (arg)", async ({ packageManager }) => { - const { root } = useFixture({ fixture: `create-turbo` }); + const { root } = useFixture({ fixture: "create-turbo" }); const availableScripts = ["build", "test", "dev"]; @@ -176,16 +182,20 @@ describe("create-turbo", () => { telemetry, }); - const expected = `${bold( + const expected = `${picocolors.bold( logger.turboGradient(">>> Success!") - )} Created your Turborepo at ${green( + )} Created your Turborepo at ${picocolors.green( path.relative(process.cwd(), root) )}`; expect(mockConsole.log).toHaveBeenCalledWith(expected); expect(mockConsole.log).toHaveBeenCalledWith(); - expect(mockConsole.log).toHaveBeenCalledWith(bold("To get started:")); + expect(mockConsole.log).toHaveBeenCalledWith( + picocolors.bold("To get started:") + ); - expect(mockConsole.log).toHaveBeenCalledWith(cyan("Library packages")); + expect(mockConsole.log).toHaveBeenCalledWith( + picocolors.cyan("Library packages") + ); expect(mockConsole.log).toHaveBeenCalledWith( "- Run commands with Turborepo:" @@ -193,7 +203,9 @@ describe("create-turbo", () => { availableScripts.forEach((script) => { expect(mockConsole.log).toHaveBeenCalledWith( - expect.stringContaining(cyan(`${packageManager} run ${script}`)) + expect.stringContaining( + picocolors.cyan(`${packageManager} run ${script}`) + ) ); }); @@ -208,7 +220,7 @@ describe("create-turbo", () => { ); it("throws correct error message when a download error is encountered", async () => { - const { root } = useFixture({ fixture: `create-turbo` }); + const { root } = useFixture({ fixture: "create-turbo" }); const packageManager = "pnpm"; const mockAvailablePackageManagers = jest .spyOn(turboUtils, "getAvailablePackageManagers") @@ -248,13 +260,13 @@ describe("create-turbo", () => { expect(mockConsole.error).toHaveBeenCalledTimes(2); expect(mockConsole.error).toHaveBeenNthCalledWith( 1, - logger.turboRed(bold(">>>")), - red("Unable to download template from GitHub") + logger.turboRed(picocolors.bold(">>>")), + picocolors.red("Unable to download template from GitHub") ); expect(mockConsole.error).toHaveBeenNthCalledWith( 2, - logger.turboRed(bold(">>>")), - red("Could not connect") + logger.turboRed(picocolors.bold(">>>")), + picocolors.red("Could not connect") ); expect(mockExit.exit).toHaveBeenCalledWith(1); diff --git a/packages/create-turbo/src/cli.ts b/packages/create-turbo/src/cli.ts index 1bc6c61614bb6..e8abc4a91244b 100644 --- a/packages/create-turbo/src/cli.ts +++ b/packages/create-turbo/src/cli.ts @@ -2,7 +2,7 @@ import http from "node:http"; import https from "node:https"; -import { bold } from "picocolors"; +import picocolors from "picocolors"; import { Command, Option } from "commander"; import { logger } from "@turbo/utils"; import { @@ -27,9 +27,9 @@ const createTurboCli = new Command(); // create createTurboCli - .name(bold(logger.turboGradient("create-turbo"))) + .name(picocolors.bold(logger.turboGradient("create-turbo"))) .description("Create a new Turborepo") - .usage(`${bold("")} [options]`) + .usage(`${picocolors.bold("")} [options]`) .hook("preAction", async (_, thisAction) => { const { telemetry } = await initTelemetry<"create-turbo">({ packageInfo: { diff --git a/packages/create-turbo/src/commands/create/index.ts b/packages/create-turbo/src/commands/create/index.ts index b1a1afab6ea13..442f08b9d7cb2 100644 --- a/packages/create-turbo/src/commands/create/index.ts +++ b/packages/create-turbo/src/commands/create/index.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { bold, red, cyan, green, dim } from "picocolors"; +import picocolors from "picocolors"; import type { Project } from "@turbo/workspaces"; import { getWorkspaceDetails, @@ -39,18 +39,18 @@ function handleErrors( telemetry?.trackCommandStatus({ command: "create", status: "error" }); // handle errors from ../../transforms if (err instanceof TransformError) { - error(bold(err.transform), red(err.message)); + error(picocolors.bold(err.transform), picocolors.red(err.message)); if (err.fatal) { process.exit(1); } // handle errors from @turbo/workspaces } else if (err instanceof ConvertError && err.type !== "unknown") { - error(red(err.message)); + error(picocolors.red(err.message)); process.exit(1); // handle download errors from @turbo/utils } else if (err instanceof DownloadError) { - error(red("Unable to download template from GitHub")); - error(red(err.message)); + error(picocolors.red("Unable to download template from GitHub")); + error(picocolors.red(err.message)); process.exit(1); } @@ -209,14 +209,16 @@ export async function create( let lastGroup: string | undefined; workspacesForDisplay.forEach(({ group, title, description }, idx) => { if (idx === 0 || group !== lastGroup) { - logger.log(cyan(group)); + logger.log(picocolors.cyan(group)); } - logger.log(` - ${bold(title)}${description ? `: ${description}` : ""}`); + logger.log( + ` - ${picocolors.bold(title)}${description ? `: ${description}` : ""}` + ); lastGroup = group; }); } else { - logger.log(cyan("apps")); - logger.log(` - ${bold(projectName)}`); + logger.log(picocolors.cyan("apps")); + logger.log(` - ${picocolors.bold(projectName)}`); } // run install @@ -252,20 +254,22 @@ export async function create( if (projectDirIsCurrentDir) { logger.log( - `${bold(turboGradient(">>> Success!"))} Your new Turborepo is ready.` + `${picocolors.bold( + turboGradient(">>> Success!") + )} Your new Turborepo is ready.` ); } else { logger.log( - `${bold(turboGradient(">>> Success!"))} Created your Turborepo at ${green( - relativeProjectDir - )}` + `${picocolors.bold( + turboGradient(">>> Success!") + )} Created your Turborepo at ${picocolors.green(relativeProjectDir)}` ); } if (!isMaintainedByCoreTeam) { logger.log(); logger.log( - dim( + picocolors.dim( "Note: This is a community-maintained example. If you experience a problem, please submit a pull request with a fix. GitHub Issues will be closed." ) ); @@ -275,27 +279,29 @@ export async function create( const packageManagerMeta = getPackageManagerMeta(projectPackageManager); if (packageManagerMeta && hasPackageJson) { logger.log(); - logger.log(bold("To get started:")); + logger.log(picocolors.bold("To get started:")); if (!projectDirIsCurrentDir) { logger.log( - `- Change to the directory: ${cyan(`cd ${relativeProjectDir}`)}` + `- Change to the directory: ${picocolors.cyan( + `cd ${relativeProjectDir}` + )}` ); } logger.log( - `- Enable Remote Caching (recommended): ${cyan( + `- Enable Remote Caching (recommended): ${picocolors.cyan( `${packageManagerMeta.executable} turbo login` )}` ); - logger.log(` - Learn more: https://turbo.build/repo/remote-cache`); + logger.log(" - Learn more: https://turbo.build/repo/remote-cache"); logger.log(); logger.log("- Run commands with Turborepo:"); availableScripts .filter((script) => SCRIPTS_TO_DISPLAY[script]) .forEach((script) => { logger.log( - ` - ${cyan(`${packageManagerMeta.command} run ${script}`)}: ${ - SCRIPTS_TO_DISPLAY[script] - } all apps and packages` + ` - ${picocolors.cyan( + `${packageManagerMeta.command} run ${script}` + )}: ${SCRIPTS_TO_DISPLAY[script]} all apps and packages` ); }); logger.log("- Run a command twice to hit cache"); diff --git a/packages/create-turbo/src/utils/notifyUpdate.ts b/packages/create-turbo/src/utils/notifyUpdate.ts index 397e19c04c0ed..e010dae80f924 100644 --- a/packages/create-turbo/src/utils/notifyUpdate.ts +++ b/packages/create-turbo/src/utils/notifyUpdate.ts @@ -1,4 +1,4 @@ -import { yellow, bold } from "picocolors"; +import picocolors from "picocolors"; import checkForUpdate from "update-check"; import { logger } from "@turbo/utils"; import cliPkgJson from "../../package.json"; @@ -10,7 +10,11 @@ export async function notifyUpdate(): Promise { const res = await update; if (res?.latest) { logger.log(); - logger.log(yellow(bold("A new version of `create-turbo` is available!"))); + logger.log( + picocolors.yellow( + picocolors.bold("A new version of `create-turbo` is available!") + ) + ); logger.log(); } process.exit(); diff --git a/packages/turbo-codemod/src/cli.ts b/packages/turbo-codemod/src/cli.ts index 717cf652cfe35..9ae2ec759bec2 100644 --- a/packages/turbo-codemod/src/cli.ts +++ b/packages/turbo-codemod/src/cli.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import { red } from "picocolors"; +import picocolors from "picocolors"; import { logger } from "@turbo/utils"; import { Command } from "commander"; import cliPkg from "../package.json"; @@ -69,7 +69,7 @@ codemodCli .then(notifyUpdate) .catch(async (reason) => { logger.log(); - logger.log(red("Unexpected error. Please report it as a bug:")); + logger.log(picocolors.red("Unexpected error. Please report it as a bug:")); logger.log(reason); logger.log(); diff --git a/packages/turbo-codemod/src/commands/migrate/index.ts b/packages/turbo-codemod/src/commands/migrate/index.ts index a2076f63be5e4..26d0741ce252e 100644 --- a/packages/turbo-codemod/src/commands/migrate/index.ts +++ b/packages/turbo-codemod/src/commands/migrate/index.ts @@ -1,6 +1,6 @@ import os from "node:os"; import { execSync } from "node:child_process"; -import { green, red, dim, bold } from "picocolors"; +import picocolors from "picocolors"; import { prompt } from "inquirer"; import { getWorkspaceDetails, type Project } from "@turbo/workspaces"; import { logger } from "@turbo/utils"; @@ -24,14 +24,14 @@ function endMigration({ success: boolean; }) { if (success) { - logger.bold(green("Migration completed")); + logger.bold(picocolors.green("Migration completed")); if (message) { logger.log(message); } return process.exit(0); } - logger.bold(red("Migration failed")); + logger.bold(picocolors.red("Migration failed")); if (message) { logger.log(message); } @@ -71,7 +71,7 @@ export async function migrate( if (exists) { return true; } - return `Directory ${dim(`(${absolute})`)} does not exist`; + return `Directory ${picocolors.dim(`(${absolute})`)} does not exist`; }, filter: (d: string) => d.trim(), }, @@ -85,14 +85,16 @@ export async function migrate( if (!exists) { return endMigration({ success: false, - message: `Directory ${dim(`(${root})`)} does not exist`, + message: `Directory ${picocolors.dim(`(${root})`)} does not exist`, }); } if (!looksLikeRepo({ directory: root })) { return endMigration({ success: false, - message: `Directory (${dim(root)}) does not appear to be a repository`, + message: `Directory (${picocolors.dim( + root + )}) does not appear to be a repository`, }); } @@ -102,7 +104,7 @@ export async function migrate( } catch (err) { return endMigration({ success: false, - message: `Unable to read determine package manager details from ${dim( + message: `Unable to read determine package manager details from ${picocolors.dim( root )}`, }); @@ -135,16 +137,16 @@ export async function migrate( if (!toVersion) { return endMigration({ success: false, - message: `Unable to fetch the latest version of turbo`, + message: "Unable to fetch the latest version of turbo", }); } if (fromVersion === toVersion) { return endMigration({ success: true, - message: `Nothing to do, current version (${bold( + message: `Nothing to do, current version (${picocolors.bold( fromVersion - )}) is the same as the requested version (${bold(toVersion)})`, + )}) is the same as the requested version (${picocolors.bold(toVersion)})`, }); } @@ -165,7 +167,9 @@ export async function migrate( // step 4 logger.log( - `Upgrading turbo from ${bold(fromVersion)} to ${bold(toVersion)} (${ + `Upgrading turbo from ${picocolors.bold(fromVersion)} to ${picocolors.bold( + toVersion + )} (${ codemods.length === 0 ? "no codemods required" : `${codemods.length} required codemod${ @@ -178,7 +182,9 @@ export async function migrate( const results: Array = []; for (const [idx, codemod] of codemods.entries()) { logger.log( - `(${idx + 1}/${codemods.length}) ${bold(`Running ${codemod.name}`)}` + `(${idx + 1}/${codemods.length}) ${picocolors.bold( + `Running ${codemod.name}` + )}` ); // eslint-disable-next-line no-await-in-loop -- transforms have to run serially to avoid conflicts @@ -199,7 +205,8 @@ export async function migrate( if (hasTransformError) { return endMigration({ success: false, - message: `Could not complete migration due to codemod errors. Please fix the errors and try again.`, + message: + "Could not complete migration due to codemod errors. Please fix the errors and try again.", }); } @@ -222,11 +229,16 @@ export async function migrate( if (options.install) { if (options.dryRun) { logger.log( - `Upgrading turbo with ${bold(upgradeCommand)} ${dim("(dry run)")}`, + `Upgrading turbo with ${picocolors.bold( + upgradeCommand + )} ${picocolors.dim("(dry run)")}`, os.EOL ); } else { - logger.log(`Upgrading turbo with ${bold(upgradeCommand)}`, os.EOL); + logger.log( + `Upgrading turbo with ${picocolors.bold(upgradeCommand)}`, + os.EOL + ); try { execSync(upgradeCommand, { stdio: "pipe", cwd: project.paths.root }); } catch (err: unknown) { @@ -237,7 +249,7 @@ export async function migrate( } } } else { - logger.log(`Upgrade turbo with ${bold(upgradeCommand)}`, os.EOL); + logger.log(`Upgrade turbo with ${picocolors.bold(upgradeCommand)}`, os.EOL); } endMigration({ success: true }); diff --git a/packages/turbo-codemod/src/commands/transform/index.ts b/packages/turbo-codemod/src/commands/transform/index.ts index ca61ad3a3f678..5634b4afe67f4 100644 --- a/packages/turbo-codemod/src/commands/transform/index.ts +++ b/packages/turbo-codemod/src/commands/transform/index.ts @@ -1,4 +1,4 @@ -import { bold, cyan, dim, gray } from "picocolors"; +import picocolors from "picocolors"; import { prompt } from "inquirer"; import { logger } from "@turbo/utils"; import { loadTransformers } from "../../utils/loadTransformers"; @@ -17,7 +17,9 @@ export async function transform( ) { const transforms = loadTransformers(); if (options.list) { - logger.log(transforms.map((t) => `- ${cyan(t.name)}`).join("\n")); + logger.log( + transforms.map((t) => `- ${picocolors.cyan(t.name)}`).join("\n") + ); return process.exit(0); } @@ -41,7 +43,7 @@ export async function transform( if (exists) { return true; } - return `Directory ${dim(`(${absolute})`)} does not exist`; + return `Directory ${picocolors.dim(`(${absolute})`)} does not exist`; }, filter: (d: string) => d.trim(), }, @@ -52,9 +54,9 @@ export async function transform( when: !transformName, pageSize: transforms.length, choices: transforms.map((t) => ({ - name: `${bold(t.name)} - ${gray(t.description)} ${gray( - `(${t.introducedIn})` - )}`, + name: `${picocolors.bold(t.name)} - ${picocolors.gray( + t.description + )} ${picocolors.gray(`(${t.introducedIn})`)}`, value: t.name, })), }, @@ -69,7 +71,7 @@ export async function transform( directory: selectedDirectory, }); if (!exists) { - logger.error(`Directory ${dim(`(${root})`)} does not exist`); + logger.error(`Directory ${picocolors.dim(`(${root})`)} does not exist`); return process.exit(1); } @@ -79,7 +81,9 @@ export async function transform( // validate transforms if (!transformData) { logger.error( - `Invalid transform choice ${dim(`(${transformName})`)}, pick one of:` + `Invalid transform choice ${picocolors.dim( + `(${transformName})` + )}, pick one of:` ); logger.error(transformKeys.map((key) => `- ${key}`).join("\n")); return process.exit(1); diff --git a/packages/turbo-codemod/src/runner/FileTransform.ts b/packages/turbo-codemod/src/runner/FileTransform.ts index e2cf3751bc119..8c519ef699ea4 100644 --- a/packages/turbo-codemod/src/runner/FileTransform.ts +++ b/packages/turbo-codemod/src/runner/FileTransform.ts @@ -1,7 +1,7 @@ import os from "node:os"; import path from "node:path"; import { logger } from "@turbo/utils"; -import { dim, green, red } from "picocolors"; +import picocolors from "picocolors"; import type { Change } from "diff"; import { diffLines, diffJson } from "diff"; import { @@ -85,11 +85,11 @@ export class FileTransform { if (args.diff) { this.changes.forEach((part) => { if (part.added) { - process.stdout.write(green(part.value)); + process.stdout.write(picocolors.green(part.value)); } else if (part.removed) { - process.stdout.write(red(part.value)); + process.stdout.write(picocolors.red(part.value)); } else { - process.stdout.write(dim(part.value)); + process.stdout.write(picocolors.dim(part.value)); } }); logger.log(os.EOL); diff --git a/packages/turbo-codemod/src/runner/Runner.ts b/packages/turbo-codemod/src/runner/Runner.ts index 95d0033515464..9c8ff42eceaed 100644 --- a/packages/turbo-codemod/src/runner/Runner.ts +++ b/packages/turbo-codemod/src/runner/Runner.ts @@ -1,4 +1,4 @@ -import { bold, dim } from "picocolors"; +import picocolors from "picocolors"; import { logger } from "@turbo/utils"; import { Logger } from "../utils/logger"; import type { UtilityArgs } from "../types"; @@ -57,12 +57,12 @@ export class Runner { if (mod.hasChanges()) { if (this.dry) { result.action = "skipped"; - this.logger.skipped(dim(mod.fileName())); + this.logger.skipped(picocolors.dim(mod.fileName())); } else { try { mod.write(); result.action = "modified"; - this.logger.modified(bold(mod.fileName())); + this.logger.modified(picocolors.bold(mod.fileName())); } catch (err) { let message = "Unknown error"; if (err instanceof Error) { @@ -78,7 +78,7 @@ export class Runner { mod.log({ diff: true }); } } else { - this.logger.unchanged(dim(mod.fileName())); + this.logger.unchanged(picocolors.dim(mod.fileName())); } results.changes[mod.fileName()] = result; @@ -102,7 +102,7 @@ export class Runner { const changedFiles = Object.keys(results.changes); logger.log(); if (changedFiles.length > 0) { - logger.bold(`Results:`); + logger.bold("Results:"); const table: Record< string, { diff --git a/packages/turbo-codemod/src/utils/checkGitStatus.ts b/packages/turbo-codemod/src/utils/checkGitStatus.ts index ef68915b59487..5dcb87647c2d0 100644 --- a/packages/turbo-codemod/src/utils/checkGitStatus.ts +++ b/packages/turbo-codemod/src/utils/checkGitStatus.ts @@ -1,4 +1,4 @@ -import { yellow } from "picocolors"; +import picocolors from "picocolors"; import isGitClean from "is-git-clean"; import { logger } from "@turbo/utils"; @@ -24,12 +24,14 @@ export function checkGitStatus({ if (!clean) { if (force) { logger.log( - `${yellow("WARNING")}: ${errorMessage}. Forcibly continuing...` + `${picocolors.yellow( + "WARNING" + )}: ${errorMessage}. Forcibly continuing...` ); } else { logger.log("Thank you for using @turbo/codemod!"); logger.log( - yellow( + picocolors.yellow( "\nBut before we continue, please stash or commit your git changes." ) ); diff --git a/packages/turbo-codemod/src/utils/logger.ts b/packages/turbo-codemod/src/utils/logger.ts index 152977df6eda2..3dc105897fd7d 100644 --- a/packages/turbo-codemod/src/utils/logger.ts +++ b/packages/turbo-codemod/src/utils/logger.ts @@ -1,4 +1,4 @@ -import { green, dim, bold, red, yellow, gray } from "picocolors"; +import picocolors from "picocolors"; import type { UtilityArgs } from "../types"; export class Logger { @@ -16,18 +16,38 @@ export class Logger { } modified(...args: Array) { - this._log(green(` MODIFIED `), ...args, this.dry ? dim(`(dry run)`) : ""); + this._log( + picocolors.green(" MODIFIED "), + ...args, + this.dry ? picocolors.dim("(dry run)") : "" + ); } unchanged(...args: Array) { - this._log(gray(` UNCHANGED `), ...args, this.dry ? dim(`(dry run)`) : ""); + this._log( + picocolors.gray(" UNCHANGED "), + ...args, + this.dry ? picocolors.dim("(dry run)") : "" + ); } skipped(...args: Array) { - this._log(yellow(` SKIPPED `), ...args, this.dry ? dim(`(dry run)`) : ""); + this._log( + picocolors.yellow(" SKIPPED "), + ...args, + this.dry ? picocolors.dim("(dry run)") : "" + ); } error(...args: Array) { - this._log(red(` ERROR `), ...args, this.dry ? dim(`(dry run)`) : ""); + this._log( + picocolors.red(" ERROR "), + ...args, + this.dry ? picocolors.dim("(dry run)") : "" + ); } info(...args: Array) { - this._log(bold(` INFO `), ...args, this.dry ? dim(`(dry run)`) : ""); + this._log( + picocolors.bold(" INFO "), + ...args, + this.dry ? picocolors.dim("(dry run)") : "" + ); } } diff --git a/packages/turbo-codemod/src/utils/notifyUpdate.ts b/packages/turbo-codemod/src/utils/notifyUpdate.ts index 8085cbf7fc6d1..aecb50cfe933d 100644 --- a/packages/turbo-codemod/src/utils/notifyUpdate.ts +++ b/packages/turbo-codemod/src/utils/notifyUpdate.ts @@ -1,4 +1,4 @@ -import { cyan, bold, yellow } from "picocolors"; +import picocolors from "picocolors"; import checkForUpdate from "update-check"; import { logger } from "@turbo/utils"; import { getWorkspaceDetails } from "@turbo/workspaces"; @@ -23,9 +23,13 @@ export async function notifyUpdate(): Promise { logger.log(); logger.log( - yellow(bold("A new version of `@turbo/codemod` is available!")) + picocolors.yellow( + picocolors.bold("A new version of `@turbo/codemod` is available!") + ) + ); + logger.log( + `You can update by running: ${picocolors.cyan(upgradeCommand)}` ); - logger.log(`You can update by running: ${cyan(upgradeCommand)}`); logger.log(); } process.exit(); diff --git a/packages/turbo-gen/src/cli.ts b/packages/turbo-gen/src/cli.ts index 0dc8f33b9d396..2e83ef8052eba 100644 --- a/packages/turbo-gen/src/cli.ts +++ b/packages/turbo-gen/src/cli.ts @@ -2,7 +2,7 @@ import http from "node:http"; import https from "node:https"; -import { bold } from "picocolors"; +import picocolors from "picocolors"; import { Argument, Command, Option } from "commander"; import { logger } from "@turbo/utils"; import { ProxyAgent } from "proxy-agent"; @@ -19,7 +19,7 @@ https.globalAgent = agent; const turboGenCli = new Command(); turboGenCli - .name(bold(logger.turboGradient("@turbo/gen"))) + .name(picocolors.bold(logger.turboGradient("@turbo/gen"))) .description("Extend your Turborepo") .version(cliPkg.version, "-v, --version", "Output the current version") .helpOption("-h, --help", "Display help for command") diff --git a/packages/turbo-gen/src/generators/copy.ts b/packages/turbo-gen/src/generators/copy.ts index 813a69f15074b..31d25a1490ca0 100644 --- a/packages/turbo-gen/src/generators/copy.ts +++ b/packages/turbo-gen/src/generators/copy.ts @@ -1,7 +1,7 @@ import path from "node:path"; import type { CopyFilterAsync } from "fs-extra"; import fs from "fs-extra"; -import { bold } from "picocolors"; +import picocolors from "picocolors"; import { createProject, logger, @@ -92,8 +92,8 @@ export async function generate({ project, opts }: TurboGeneratorArguments) { logger.log(); logger.log( - `${bold(logger.turboGradient(">>> Success!"))} Created ${name} at "${ - location.relative - }"` + `${picocolors.bold( + logger.turboGradient(">>> Success!") + )} Created ${name} at "${location.relative}"` ); } diff --git a/packages/turbo-gen/src/generators/empty.ts b/packages/turbo-gen/src/generators/empty.ts index 3f0072e7592fa..228e5db47dd9c 100644 --- a/packages/turbo-gen/src/generators/empty.ts +++ b/packages/turbo-gen/src/generators/empty.ts @@ -1,6 +1,6 @@ import path from "node:path"; import fs from "fs-extra"; -import { bold } from "picocolors"; +import picocolors from "picocolors"; import { logger, type PackageJson, type DependencyGroups } from "@turbo/utils"; import { gatherAddRequirements } from "../utils/gatherAddRequirements"; import type { TurboGeneratorArguments } from "./types"; @@ -45,8 +45,8 @@ export async function generate({ project, opts }: TurboGeneratorArguments) { logger.log(); logger.log( - `${bold(logger.turboGradient(">>> Success!"))} Created ${name} at "${ - location.relative - }"` + `${picocolors.bold( + logger.turboGradient(">>> Success!") + )} Created ${name} at "${location.relative}"` ); } diff --git a/packages/turbo-gen/src/utils/notifyUpdate.ts b/packages/turbo-gen/src/utils/notifyUpdate.ts index 47efc72ab20e4..16463d8679a6e 100644 --- a/packages/turbo-gen/src/utils/notifyUpdate.ts +++ b/packages/turbo-gen/src/utils/notifyUpdate.ts @@ -1,4 +1,4 @@ -import { yellow, bold } from "picocolors"; +import picocolors from "picocolors"; import checkForUpdate from "update-check"; import { logger } from "@turbo/utils"; import cliPkgJson from "../../package.json"; @@ -11,7 +11,11 @@ export async function notifyUpdate(): Promise { if (res?.latest) { logger.log(); logger.log( - yellow(bold(`A new version of \`${cliPkgJson.name}\` is available!`)) + picocolors.yellow( + picocolors.bold( + `A new version of \`${cliPkgJson.name}\` is available!` + ) + ) ); logger.log(); } diff --git a/packages/turbo-telemetry/src/cli.ts b/packages/turbo-telemetry/src/cli.ts index dc95feb7856bb..1d9877d648e18 100644 --- a/packages/turbo-telemetry/src/cli.ts +++ b/packages/turbo-telemetry/src/cli.ts @@ -1,7 +1,7 @@ -import { bold, green, red } from "picocolors"; +import picocolors from "picocolors"; import { logger } from "@turbo/utils"; import { type Command, Argument } from "commander"; -import { type TelemetryClient } from "./client"; +import type { TelemetryClient } from "./client"; const DEFAULT_CHOICE = "status" as const; const CHOICES = ["enable", "disable", DEFAULT_CHOICE] as const; @@ -14,7 +14,11 @@ interface TelemetryCLIOptions { function status(options: TelemetryCLIOptions) { const isEnabled = options.telemetry?.config.isEnabled(); logger.log( - `Status: ${isEnabled ? bold(green("Enabled")) : bold(red("Disabled"))}` + `Status: ${ + isEnabled + ? picocolors.bold(picocolors.green("Enabled")) + : picocolors.bold(picocolors.red("Disabled")) + }` ); logger.log(); if (isEnabled) { diff --git a/packages/turbo-telemetry/src/config.ts b/packages/turbo-telemetry/src/config.ts index e30f5f1a36f75..522b4e5657129 100644 --- a/packages/turbo-telemetry/src/config.ts +++ b/packages/turbo-telemetry/src/config.ts @@ -1,7 +1,7 @@ import { readFileSync, writeFileSync, rmSync } from "node:fs"; import { randomUUID } from "node:crypto"; import { logger } from "@turbo/utils"; -import { gray } from "picocolors"; +import picocolors from "picocolors"; import { z } from "zod"; import utils from "./utils"; @@ -167,7 +167,9 @@ export class TelemetryConfig { logger.grey( "You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:" ); - logger.underline(gray("https://turbo.build/repo/docs/telemetry")); + logger.underline( + picocolors.gray("https://turbo.build/repo/docs/telemetry") + ); } this.alertShown(); diff --git a/packages/turbo-utils/src/createProject.ts b/packages/turbo-utils/src/createProject.ts index 2b514165fabe0..fb8ec1ddb3f0e 100644 --- a/packages/turbo-utils/src/createProject.ts +++ b/packages/turbo-utils/src/createProject.ts @@ -1,6 +1,6 @@ import path from "node:path"; import retry from "async-retry"; -import { dim, red } from "picocolors"; +import picocolors from "picocolors"; import fs from "fs-extra"; import * as logger from "./logger"; import { @@ -65,7 +65,7 @@ export async function createProject({ if (repoUrl) { if (repoUrl.origin !== "https://github.com") { logger.error( - `Invalid URL: ${red( + `Invalid URL: ${picocolors.red( `"${example}"` )}. Only GitHub repositories are supported. Please use a GitHub URL and try again.` ); @@ -76,7 +76,7 @@ export async function createProject({ if (!repoInfo) { logger.error( - `Unable to fetch repository information from: ${red( + `Unable to fetch repository information from: ${picocolors.red( `"${example}"` )}. Please fix the URL and try again.` ); @@ -87,7 +87,7 @@ export async function createProject({ if (!found) { logger.error( - `Could not locate the repository for ${red( + `Could not locate the repository for ${picocolors.red( `"${example}"` )}. Please check that the repository exists and try again.` ); @@ -98,10 +98,10 @@ export async function createProject({ if (!found) { logger.error( - `Could not locate an example named ${red( + `Could not locate an example named ${picocolors.red( `"${example}"` )}. It could be due to the following:\n`, - `1. Your spelling of example ${red( + `1. Your spelling of example ${picocolors.red( `"${example}"` )} might be incorrect.\n`, "2. You might not be connected to the internet or you are behind a proxy." @@ -134,7 +134,7 @@ export async function createProject({ const { isEmpty, conflicts } = isFolderEmpty(root); if (!isEmpty) { logger.error( - `${dim(root)} has ${conflicts.length} conflicting ${ + `${picocolors.dim(root)} has ${conflicts.length} conflicting ${ conflicts.length === 1 ? "file" : "files" } - please try a different location` ); diff --git a/packages/turbo-utils/src/validateDirectory.ts b/packages/turbo-utils/src/validateDirectory.ts index bdf5429742e91..14e446676ec87 100644 --- a/packages/turbo-utils/src/validateDirectory.ts +++ b/packages/turbo-utils/src/validateDirectory.ts @@ -1,6 +1,6 @@ import path from "node:path"; import fs from "fs-extra"; -import { dim } from "picocolors"; +import picocolors from "picocolors"; import { isFolderEmpty } from "./isFolderEmpty"; export function validateDirectory(directory: string): { @@ -19,7 +19,7 @@ export function validateDirectory(directory: string): { valid: false, root, projectName, - error: `${dim( + error: `${picocolors.dim( projectName )} is not a directory - please try a different location`, }; @@ -32,7 +32,7 @@ export function validateDirectory(directory: string): { valid: false, root, projectName, - error: `${dim(projectName)} (${root}) has ${ + error: `${picocolors.dim(projectName)} (${root}) has ${ conflicts.length } conflicting ${ conflicts.length === 1 ? "file" : "files" diff --git a/packages/turbo-workspaces/src/cli.ts b/packages/turbo-workspaces/src/cli.ts index 964fc9637f9fe..f4b45dcd239d3 100644 --- a/packages/turbo-workspaces/src/cli.ts +++ b/packages/turbo-workspaces/src/cli.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import { red } from "picocolors"; +import picocolors from "picocolors"; import { Command } from "commander"; import { logger } from "@turbo/utils"; import cliPkg from "../package.json"; @@ -48,9 +48,9 @@ workspacesCli workspacesCli.parseAsync().catch((error) => { logger.log(); if (error instanceof ConvertError) { - logger.log(red(error.message)); + logger.log(picocolors.red(error.message)); } else { - logger.log(red("Unexpected error. Please report it as a bug:")); + logger.log(picocolors.red("Unexpected error. Please report it as a bug:")); logger.log(error); } logger.log(); diff --git a/packages/turbo-workspaces/src/commands/convert/index.ts b/packages/turbo-workspaces/src/commands/convert/index.ts index 8d13bf6b1fcd2..a4b6bcdbc71f9 100644 --- a/packages/turbo-workspaces/src/commands/convert/index.ts +++ b/packages/turbo-workspaces/src/commands/convert/index.ts @@ -1,5 +1,5 @@ import inquirer from "inquirer"; -import { dim } from "picocolors"; +import picocolors from "picocolors"; import { getAvailablePackageManagers, type PackageManager } from "@turbo/utils"; import { Logger } from "../../logger"; import { directoryInfo } from "../../utils"; @@ -51,7 +51,7 @@ export async function convertCommand( if (exists) { return true; } - return `Directory ${dim(`(${absolute})`)} does not exist`; + return `Directory ${picocolors.dim(`(${absolute})`)} does not exist`; }, filter: (d: string) => d.trim(), }); @@ -61,7 +61,7 @@ export async function convertCommand( directory: selectedDirectory, }); if (!exists) { - logger.error(`Directory ${dim(`(${root})`)} does not exist`); + logger.error(`Directory ${picocolors.dim(`(${root})`)} does not exist`); return process.exit(1); } diff --git a/packages/turbo-workspaces/src/commands/summary/index.ts b/packages/turbo-workspaces/src/commands/summary/index.ts index e6810c84343a1..131b99eae8289 100644 --- a/packages/turbo-workspaces/src/commands/summary/index.ts +++ b/packages/turbo-workspaces/src/commands/summary/index.ts @@ -1,6 +1,6 @@ import path from "node:path"; import inquirer from "inquirer"; -import { bold, dim, italic, underline } from "picocolors"; +import picocolors from "picocolors"; import { Logger } from "../../logger"; import { directoryInfo } from "../../utils"; import { getWorkspaceDetails } from "../../getWorkspaceDetails"; @@ -24,7 +24,7 @@ export async function summaryCommand(directory: SummaryCommandArgument) { if (exists) { return true; } - return `Directory ${dim(`(${absolute})`)} does not exist`; + return `Directory ${picocolors.dim(`(${absolute})`)} does not exist`; }, filter: (d: string) => d.trim(), }); @@ -34,7 +34,7 @@ export async function summaryCommand(directory: SummaryCommandArgument) { directory: selectedDirectory, }); if (!exists) { - logger.error(`Directory ${dim(`(${root})`)} does not exist`); + logger.error(`Directory ${picocolors.dim(`(${root})`)} does not exist`); return process.exit(1); } @@ -54,7 +54,9 @@ export async function summaryCommand(directory: SummaryCommandArgument) { }); const renderWorkspace = (w: Workspace) => { - return `${w.name} (${italic(`./${path.relative(root, w.paths.root)}`)})`; + return `${w.name} (${picocolors.italic( + `./${path.relative(root, w.paths.root)}` + )})`; }; const renderDirectory = ({ @@ -66,23 +68,28 @@ export async function summaryCommand(directory: SummaryCommandArgument) { dir: string; workspaces: Array; }) => { - logger.indented(2, `${number}. ${bold(dir)}`); + logger.indented(2, `${number}. ${picocolors.bold(dir)}`); workspaces.forEach((workspace, idx) => { logger.indented(3, `${idx + 1}. ${renderWorkspace(workspace)}`); }); }; // repo header - logger.header(`Repository Summary`); - logger.indented(1, `${underline(project.name)}:`); + logger.header("Repository Summary"); + logger.indented(1, `${picocolors.underline(project.name)}:`); // workspace manager header logger.indented( 1, - `Package Manager: ${bold(italic(project.packageManager))}` + `Package Manager: ${picocolors.bold( + picocolors.italic(project.packageManager) + )}` ); if (hasWorkspaces) { // workspaces header - logger.indented(1, `Workspaces (${bold(numWorkspaces.toString())}):`); + logger.indented( + 1, + `Workspaces (${picocolors.bold(numWorkspaces.toString())}):` + ); Object.keys(workspacesByDirectory).forEach((dir, idx) => { renderDirectory({ number: idx + 1, diff --git a/packages/turbo-workspaces/src/convert.ts b/packages/turbo-workspaces/src/convert.ts index 6e43cb48d99e6..399b72bacde75 100644 --- a/packages/turbo-workspaces/src/convert.ts +++ b/packages/turbo-workspaces/src/convert.ts @@ -1,4 +1,4 @@ -import { yellow } from "picocolors"; +import picocolors from "picocolors"; import { MANAGERS } from "./managers"; import type { Project, @@ -73,7 +73,7 @@ export async function convertProject({ await MANAGERS[to.name].convertLock({ project, to, logger, options }); await install({ project, to, logger, options }); } else { - logger.subStep(yellow("Skipping install")); + logger.subStep(picocolors.yellow("Skipping install")); } logger.mainStep(`Cleaning up ${project.packageManager} workspaces`); diff --git a/packages/turbo-workspaces/src/logger.ts b/packages/turbo-workspaces/src/logger.ts index 4405bfe6fb711..8afacbc9b8a19 100644 --- a/packages/turbo-workspaces/src/logger.ts +++ b/packages/turbo-workspaces/src/logger.ts @@ -1,4 +1,4 @@ -import { bold, green, red, underline, yellow } from "picocolors"; +import picocolors from "picocolors"; import gradient from "gradient-string"; const INDENTATION = 2; @@ -30,12 +30,12 @@ export class Logger { header(title: string) { this.blankLine(); - this.logger(bold(title)); + this.logger(picocolors.bold(title)); } installerFrames() { const prefix = `${" ".repeat(INDENTATION)} - ${ - this.dry ? yellow("SKIPPED | ") : green("OK | ") + this.dry ? picocolors.yellow("SKIPPED | ") : picocolors.green("OK | ") }`; return [`${prefix} `, `${prefix}> `, `${prefix}>> `, `${prefix}>>>`]; } @@ -46,7 +46,7 @@ export class Logger { } hero() { - this.logger(bold(this.gradient(`\n>>> TURBOREPO\n`))); + this.logger(picocolors.bold(this.gradient("\n>>> TURBOREPO\n"))); } info(...args: Array) { @@ -55,21 +55,26 @@ export class Logger { mainStep(title: string) { this.blankLine(); - this.logger(`${this.step}. ${underline(title)}`); + this.logger(`${this.step}. ${picocolors.underline(title)}`); this.step += 1; } subStep(...args: Array) { this.logger( " ".repeat(INDENTATION), - `-`, - this.dry ? yellow("SKIPPED |") : green("OK |"), + "-", + this.dry ? picocolors.yellow("SKIPPED |") : picocolors.green("OK |"), ...args ); } subStepFailure(...args: Array) { - this.logger(" ".repeat(INDENTATION), `-`, red("ERROR |"), ...args); + this.logger( + " ".repeat(INDENTATION), + "-", + picocolors.red("ERROR |"), + ...args + ); } rootHeader() { @@ -80,8 +85,8 @@ export class Logger { rootStep(...args: Array) { this.logger( " ".repeat(INDENTATION * 3), - `-`, - this.dry ? yellow("SKIPPED |") : green("OK |"), + "-", + this.dry ? picocolors.yellow("SKIPPED |") : picocolors.green("OK |"), ...args ); } @@ -94,8 +99,8 @@ export class Logger { workspaceStep(...args: Array) { this.logger( " ".repeat(INDENTATION * 3), - `-`, - this.dry ? yellow("SKIPPED |") : green("OK |"), + "-", + this.dry ? picocolors.yellow("SKIPPED |") : picocolors.green("OK |"), ...args ); } diff --git a/packages/turbo-workspaces/src/updateDependencies.ts b/packages/turbo-workspaces/src/updateDependencies.ts index 12d85383673b1..f425a98621ef3 100644 --- a/packages/turbo-workspaces/src/updateDependencies.ts +++ b/packages/turbo-workspaces/src/updateDependencies.ts @@ -1,6 +1,6 @@ import path from "node:path"; import fs from "fs-extra"; -import { green } from "picocolors"; +import picocolors from "picocolors"; import type { DependencyList, DependencyGroups } from "@turbo/utils"; import type { Project, @@ -99,7 +99,7 @@ export function updateDependencies({ const toLog = (key: keyof DependencyGroups) => { const total = stats[key].length; if (total > 0) { - return `${green(total.toString())} ${key}`; + return `${picocolors.green(total.toString())} ${key}`; } return undefined; };