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/summary | |
| parent | 0b46fcd72ac34382387b2bcf9095233efbcc52f4 (diff) | |
| download | HydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.tar.gz HydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.zip | |
Diffstat (limited to 'packages/turbo-workspaces/src/commands/summary')
| -rw-r--r-- | packages/turbo-workspaces/src/commands/summary/index.ts | 98 | ||||
| -rw-r--r-- | packages/turbo-workspaces/src/commands/summary/types.ts | 1 |
2 files changed, 99 insertions, 0 deletions
diff --git a/packages/turbo-workspaces/src/commands/summary/index.ts b/packages/turbo-workspaces/src/commands/summary/index.ts new file mode 100644 index 0000000..9696a14 --- /dev/null +++ b/packages/turbo-workspaces/src/commands/summary/index.ts @@ -0,0 +1,98 @@ +import inquirer from "inquirer"; +import path from "path"; +import { Logger } from "../../logger"; +import chalk from "chalk"; +import { SummaryCommandArgument } from "./types"; +import { directoryInfo } from "../../utils"; +import getWorkspaceDetails from "../../getWorkspaceDetails"; +import { Workspace } from "../../types"; + +export default async function summary(directory: SummaryCommandArgument) { + const logger = new Logger(); + logger.hero(); + + const answer = await inquirer.prompt<{ + directoryInput?: string; + }>({ + type: "input", + name: "directoryInput", + message: "Where is the root of the 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 as string } = answer; + const { exists, absolute: root } = directoryInfo({ + directory: selectedDirectory, + }); + if (!exists) { + console.error(`Directory ${chalk.dim(`(${root})`)} does not exist`); + return process.exit(1); + } + + const project = await getWorkspaceDetails({ root }); + + const numWorkspaces = project.workspaceData.workspaces.length; + const hasWorkspaces = numWorkspaces > 0; + // group workspaces + const workspacesByDirectory: Record<string, Array<Workspace>> = {}; + project.workspaceData.workspaces.forEach((workspace) => { + const workspacePath = path.relative(root, workspace.paths.root); + const rootDirectory = workspacePath.split(path.sep)[0]; + if (!workspacesByDirectory[rootDirectory]) { + workspacesByDirectory[rootDirectory] = []; + } + workspacesByDirectory[rootDirectory].push(workspace); + }); + + const renderWorkspace = (w: Workspace) => { + return `${w.name} (${chalk.italic( + `./${path.relative(root, w.paths.root)}` + )})`; + }; + + const renderDirectory = ({ + number, + directory, + workspaces, + }: { + number: number; + directory: string; + workspaces: Array<Workspace>; + }) => { + logger.indented(2, `${number}. ${chalk.bold(directory)}`); + workspaces.forEach((workspace, idx) => { + logger.indented(3, `${idx + 1}. ${renderWorkspace(workspace)}`); + }); + }; + + // repo header + logger.header(`Repository Summary`); + logger.indented(1, `${chalk.underline(project.name)}:`); + // workspace manager header + logger.indented( + 1, + `Package Manager: ${chalk.bold(chalk.italic(project.packageManager))}` + ); + if (hasWorkspaces) { + // workspaces header + logger.indented(1, `Workspaces (${chalk.bold(numWorkspaces.toString())}):`); + Object.keys(workspacesByDirectory).forEach((directory, idx) => { + renderDirectory({ + number: idx + 1, + directory, + workspaces: workspacesByDirectory[directory], + }); + }); + logger.blankLine(); + } +} diff --git a/packages/turbo-workspaces/src/commands/summary/types.ts b/packages/turbo-workspaces/src/commands/summary/types.ts new file mode 100644 index 0000000..0cc5830 --- /dev/null +++ b/packages/turbo-workspaces/src/commands/summary/types.ts @@ -0,0 +1 @@ +export type SummaryCommandArgument = string; |
