-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdemo.citty.ts
128 lines (119 loc) · 2.77 KB
/
demo.citty.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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import { defineCommand, createMain, CommandDef, ArgsDef } from 'citty';
import tab from './src/citty';
const main = defineCommand({
meta: {
name: 'vite',
description: 'Vite CLI tool',
},
args: {
config: {
type: 'string',
description: 'Use specified config file',
alias: 'c',
},
mode: { type: 'string', description: 'Set env mode', alias: 'm' },
logLevel: {
type: 'string',
description: 'info | warn | error | silent',
alias: 'l',
},
},
run(_ctx) {},
});
const devCommand = defineCommand({
meta: {
name: 'dev',
description: 'Start dev server',
},
args: {
host: { type: 'string', description: 'Specify hostname' },
port: { type: 'string', description: 'Specify port' },
},
run(ctx) {},
});
devCommand.subCommands = {
build: defineCommand({
meta: {
name: 'build',
description: 'Build project',
},
run({ args }) {},
}),
};
const lintCommand = defineCommand({
meta: {
name: 'lint',
description: 'Lint project',
},
args: {
files: { type: 'positional', description: 'Files to lint' },
},
run(ctx) {},
});
main.subCommands = {
dev: devCommand,
lint: lintCommand,
} as Record<string, CommandDef<ArgsDef>>;
const completion = await tab(main, {
subCommands: {
lint: {
handler() {
return [
{ value: 'main.ts', description: 'Main file' },
{ value: 'index.ts', description: 'Index file' },
];
},
},
dev: {
options: {
port: {
handler() {
return [
{ value: '3000', description: 'Development server port' },
{ value: '8080', description: 'Alternative port' },
];
},
},
host: {
handler() {
return [
{ value: 'localhost', description: 'Localhost' },
{ value: '0.0.0.0', description: 'All interfaces' },
];
},
},
},
},
},
options: {
config: {
handler() {
return [
{ value: 'vite.config.ts', description: 'Vite config file' },
{ value: 'vite.config.js', description: 'Vite config file' },
];
},
},
mode: {
handler() {
return [
{ value: 'development', description: 'Development mode' },
{ value: 'production', description: 'Production mode' },
];
},
},
logLevel: {
handler() {
return [
{ value: 'info', description: 'Info level' },
{ value: 'warn', description: 'Warn level' },
{ value: 'error', description: 'Error level' },
{ value: 'silent', description: 'Silent level' },
];
},
},
},
});
void completion;
const cli = createMain(main);
cli();