Blame view

Yi.Vben5.Vue3/scripts/vsh/src/code-workspace/index.ts 1.7 KB
515fceeb   “wangming”   框架初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
  import type { CAC } from 'cac';
  
  import { join, relative } from 'node:path';
  
  import {
    colors,
    consola,
    findMonorepoRoot,
    getPackages,
    gitAdd,
    outputJSON,
    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 outputJSON(outputPath, { folders }, 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 };