diff options
| author | 2023-04-28 01:36:44 +0800 | |
|---|---|---|
| committer | 2023-04-28 01:36:44 +0800 | |
| commit | dd84b9d64fb98746a230cd24233ff50a562c39c9 (patch) | |
| tree | b583261ef00b3afe72ec4d6dacb31e57779a6faf /packages/turbo-workspaces/src/commands/convert | |
| parent | 0b46fcd72ac34382387b2bcf9095233efbcc52f4 (diff) | |
| download | HydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.tar.gz HydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.zip | |
Diffstat (limited to 'packages/turbo-workspaces/src/commands/convert')
| -rw-r--r-- | packages/turbo-workspaces/src/commands/convert/index.ts | 109 | ||||
| -rw-r--r-- | packages/turbo-workspaces/src/commands/convert/types.ts | 6 |
2 files changed, 115 insertions, 0 deletions
diff --git a/packages/turbo-workspaces/src/commands/convert/index.ts b/packages/turbo-workspaces/src/commands/convert/index.ts new file mode 100644 index 0000000..6cc82fc --- /dev/null +++ b/packages/turbo-workspaces/src/commands/convert/index.ts @@ -0,0 +1,109 @@ +import { ConvertCommandArgument, ConvertCommandOptions } from "./types"; +import inquirer from "inquirer"; +import { Logger } from "../../logger"; +import chalk from "chalk"; +import { getAvailablePackageManagers } from "@turbo/utils"; +import { directoryInfo } from "../../utils"; +import getWorkspaceDetails from "../../getWorkspaceDetails"; +import { PackageManager } from "../../types"; +import { convertProject } from "../../convert"; + +function isPackageManagerDisabled({ + packageManager, + currentWorkspaceManger, + availablePackageManagers, +}: { + packageManager: PackageManager; + currentWorkspaceManger: PackageManager; + availablePackageManagers: Record<PackageManager, { available: boolean }>; +}) { + if (currentWorkspaceManger === packageManager) { + return "already in use"; + } + + if (!availablePackageManagers[packageManager].available) { + return "not installed"; + } + + return false; +} + +export default async function convertCommand( + directory: ConvertCommandArgument, + packageManager: ConvertCommandArgument, + options: ConvertCommandOptions +) { + const logger = new Logger(options); + + logger.hero(); + logger.header("Welcome, let's convert your project."); + logger.blankLine(); + + const directoryAnswer = await inquirer.prompt<{ + directoryInput: string; + }>({ + type: "input", + name: "directoryInput", + message: "Where is the root of your repo?", + when: !directory, + default: ".", + validate: (directory: string) => { + const { exists, absolute } = directoryInfo({ directory }); + if (exists) { + return true; + } else { + return `Directory ${chalk.dim(`(${absolute})`)} does not exist`; + } + }, + filter: (directory: string) => directory.trim(), + }); + + const { directoryInput: selectedDirectory = directory } = directoryAnswer; + const { exists, absolute: root } = directoryInfo({ + directory: selectedDirectory, + }); + if (!exists) { + console.error(`Directory ${chalk.dim(`(${root})`)} does not exist`); + return process.exit(1); + } + + const [project, availablePackageManagers] = await Promise.all([ + getWorkspaceDetails({ root }), + getAvailablePackageManagers(), + ]); + + const packageManagerAnswer = await inquirer.prompt<{ + packageManagerInput?: PackageManager; + }>({ + name: "packageManagerInput", + type: "list", + message: `Convert from ${project.packageManager} workspaces to:`, + when: + !packageManager || + !Object.keys(availablePackageManagers).includes(packageManager), + choices: ["npm", "pnpm", "yarn"].map((p) => ({ + name: `${p} workspaces`, + value: p, + disabled: isPackageManagerDisabled({ + packageManager: p as PackageManager, + currentWorkspaceManger: project.packageManager, + availablePackageManagers, + }), + })), + }); + const { + packageManagerInput: + selectedPackageManager = packageManager as PackageManager, + } = packageManagerAnswer; + + await convertProject({ + project, + to: { + name: selectedPackageManager, + version: availablePackageManagers[selectedPackageManager] + .version as string, + }, + logger, + options, + }); +} diff --git a/packages/turbo-workspaces/src/commands/convert/types.ts b/packages/turbo-workspaces/src/commands/convert/types.ts new file mode 100644 index 0000000..a7b9deb --- /dev/null +++ b/packages/turbo-workspaces/src/commands/convert/types.ts @@ -0,0 +1,6 @@ +export type ConvertCommandArgument = string; +export type ConvertCommandOptions = { + dry: boolean; + force: boolean; + skipInstall: boolean; +}; |
