aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/packages/turbo-workspaces/src/commands/summary
diff options
context:
space:
mode:
author简律纯 <hsiangnianian@outlook.com>2023-04-28 01:36:44 +0800
committer简律纯 <hsiangnianian@outlook.com>2023-04-28 01:36:44 +0800
commitdd84b9d64fb98746a230cd24233ff50a562c39c9 (patch)
treeb583261ef00b3afe72ec4d6dacb31e57779a6faf /packages/turbo-workspaces/src/commands/summary
parent0b46fcd72ac34382387b2bcf9095233efbcc52f4 (diff)
downloadHydroRoll-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.ts98
-rw-r--r--packages/turbo-workspaces/src/commands/summary/types.ts1
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;