123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import type { CAC } from 'cac';
- import { join, relative } from 'node:path';
- import {
- colors,
- consola,
- findMonorepoRoot,
- fs,
- getPackages,
- gitAdd,
- prettierFormat,
- toPosixPath,
- } from '@vben/node-utils';
- const CODE_WORKSPACE_FILE = join('vben-admin.code-workspace');
- interface CodeWorkspaceCommandOptions {
- autoCommit?: boolean;
- spaces?: number;
- }
- async function createCodeWorkspace({
- autoCommit = false,
- spaces = 2,
- }: CodeWorkspaceCommandOptions) {
- const { packages, rootDir } = await getPackages();
- let folders = packages.map((pkg) => {
- const { dir, packageJson } = pkg;
- return {
- name: packageJson.name,
- path: toPosixPath(relative(rootDir, dir)),
- };
- });
- folders = folders.filter(Boolean);
- const monorepoRoot = findMonorepoRoot();
- const outputPath = join(monorepoRoot, CODE_WORKSPACE_FILE);
- await fs.outputJSON(outputPath, { folders }, { encoding: 'utf8', spaces });
- await prettierFormat(outputPath);
- if (autoCommit) {
- await gitAdd(CODE_WORKSPACE_FILE, monorepoRoot);
- }
- }
- async function runCodeWorkspace({
- autoCommit,
- spaces,
- }: CodeWorkspaceCommandOptions) {
- await createCodeWorkspace({
- autoCommit,
- spaces,
- });
- if (autoCommit) {
- return;
- }
- consola.log('');
- consola.success(colors.green(`${CODE_WORKSPACE_FILE} is updated!`));
- consola.log('');
- }
- function defineCodeWorkspaceCommand(cac: CAC) {
- cac
- .command('code-workspace')
- .usage('Update the `.code-workspace` file')
- .option('--spaces [number]', '.code-workspace JSON file spaces.', {
- default: 2,
- })
- .option('--auto-commit', 'auto commit .code-workspace JSON file.', {
- default: false,
- })
- .action(runCodeWorkspace);
- }
- export { defineCodeWorkspaceCommand };
|