-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
/
Copy pathprojj.ts
112 lines (109 loc) · 2.56 KB
/
projj.ts
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
const repoGenerator: Fig.Generator = {
custom: async (_, executeCommand, context) => {
const { stdout } = await executeCommand({
command: "cat",
// eslint-disable-next-line @withfig/fig-linter/no-useless-arrays
args: [`${context.environmentVariables["HOME"]}/.projj/cache.json`],
});
const cache = JSON.parse(stdout);
return Object.keys(cache).map((key) => ({
name: key.split("/").pop(),
description: cache[key].repo,
}));
},
};
const hookGenerator: Fig.Generator = {
custom: async (_, executeCommand, context) => {
const { stdout } = await executeCommand({
command: "cat",
// eslint-disable-next-line @withfig/fig-linter/no-useless-arrays
args: [`${context.environmentVariables["HOME"]}/.projj/config.json`],
});
const cache = JSON.parse(stdout);
const hooks = cache.hooks;
return Object.keys(hooks).map((key) => ({
name: key,
description: hooks[key],
}));
},
};
const completionSpec: Fig.Spec = {
name: "projj",
description: "Manage repository easily",
subcommands: [
{
name: "completion",
description: "Generate completion script",
},
{
name: "add",
description: "Add repository",
args: {
name: "repository url",
},
},
{
name: "find",
description: "Find repository",
args: {
name: "repository name",
generators: repoGenerator,
},
},
{
name: "import",
description: "Import repositories from existing directory",
args: {
name: "directory",
template: "folders",
},
},
{
name: "init",
description: "Initialize configuration",
},
{
name: "remove",
description: "Remove repository",
args: {
name: "repository name",
generators: repoGenerator,
},
},
{
name: "run",
description: "Run hook in current directory",
args: {
name: "hook name",
generators: hookGenerator,
},
},
{
name: "runall",
description: "Run hook in every repository",
args: {
name: "hook name",
generators: hookGenerator,
},
},
{
name: "sync",
description: "Sync data from directory",
args: {
name: "directory",
template: "folders",
},
},
],
options: [
{
name: ["--help", "-h"],
description: "Show help for projj",
},
{
name: ["--version", "-v"],
description: "Show version number",
},
],
};
export default completionSpec;