@cloudglab/yapi-cli 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/README.md +7 -3
- package/dist/cli.js +37 -11
- package/dist/cli.js.map +1 -1
- package/dist/core/auth-mode.d.ts +3 -0
- package/dist/core/auth-mode.js +42 -0
- package/dist/core/auth-mode.js.map +1 -0
- package/dist/core/cli-output.d.ts +1 -1
- package/dist/core/cli-output.js +28 -5
- package/dist/core/cli-output.js.map +1 -1
- package/dist/core/completion.d.ts +3 -2
- package/dist/core/completion.js +7 -5
- package/dist/core/completion.js.map +1 -1
- package/dist/core/doctor.js +25 -17
- package/dist/core/doctor.js.map +1 -1
- package/dist/core/manifest.d.ts +15 -0
- package/dist/core/manifest.js +44 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/output.js +33 -0
- package/dist/core/output.js.map +1 -1
- package/dist/core/tool-registry.d.ts +10 -0
- package/dist/core/tool-registry.js +50 -0
- package/dist/core/tool-registry.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/install.d.ts +4 -3
- package/dist/install.js +93 -44
- package/dist/install.js.map +1 -1
- package/dist/manifest.json +560 -0
- package/dist/services/yapi/api.d.ts +8 -12
- package/dist/services/yapi/api.js +39 -20
- package/dist/services/yapi/api.js.map +1 -1
- package/dist/services/yapi/config.d.ts +3 -0
- package/dist/services/yapi/config.js +39 -7
- package/dist/services/yapi/config.js.map +1 -1
- package/dist/services/yapi/index.d.ts +1 -1
- package/dist/services/yapi/index.js +1 -1
- package/dist/services/yapi/index.js.map +1 -1
- package/dist/services/yapi/types.d.ts +7 -11
- package/dist/tools/index.d.ts +1 -2
- package/dist/tools/index.js +1 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/yapi/groups.d.ts +2 -0
- package/dist/tools/yapi/groups.js +2 -0
- package/dist/tools/yapi/groups.js.map +1 -0
- package/dist/tools/yapi/register-auth.js +56 -47
- package/dist/tools/yapi/register-auth.js.map +1 -1
- package/dist/tools/yapi/register-group.js +34 -0
- package/dist/tools/yapi/register-group.js.map +1 -1
- package/dist/tools/yapi/register-interface.js +194 -4
- package/dist/tools/yapi/register-interface.js.map +1 -1
- package/dist/tools/yapi/register-project.js +186 -0
- package/dist/tools/yapi/register-project.js.map +1 -1
- package/dist/tools/yapi/register-util.js +199 -1
- package/dist/tools/yapi/register-util.js.map +1 -1
- package/dist/tools/yapi/register.d.ts +5 -0
- package/dist/tools/yapi/register.js +39 -0
- package/dist/tools/yapi/register.js.map +1 -1
- package/dist/tools/yapi/utils.js +1 -1
- package/dist/tools/yapi/utils.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/index.html +47 -0
- package/package.json +6 -2
- package/skills/yapi-cli/SKILL.md +1 -0
- package/skills/yapi-cli/reference/auth.md +21 -14
- package/skills/yapi-cli/reference/commands.md +3 -3
- package/skills/yapi-cli/reference/install.md +5 -2
- package/skills/yapi-cli/reference/overview.md +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.0.2 - 2026-06-22
|
|
4
|
+
|
|
5
|
+
- 新增按组懒加载与 `manifest` 机制,帮助、补全和命令执行更稳定。
|
|
6
|
+
- `install` 与 `config-init` 现在会引导选择普通登录或 LDAP 登录。
|
|
7
|
+
- 统一了配置、自检和输出文案,补齐了 `docs/index.html` 与覆盖率审计说明。
|
|
8
|
+
|
|
9
|
+
## 0.0.1 - 2026-06-21
|
|
10
|
+
|
|
11
|
+
- 补齐初始 CLI 骨架与基础命令。
|
|
12
|
+
|
|
3
13
|
## 0.0.0 - 2026-06-19
|
|
4
14
|
|
|
5
15
|
- 初始化通用 CLI 骨架。
|
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
- 默认 JSON 输出适合 AI / 脚本消费:统一走 `jsonResult`,并可切到 `pretty` 人类可读模式。
|
|
12
12
|
- 新增内置命令:`doctor`、`changelog`、`completion`,补齐安装 / 更新 / 卸载 / 版本查看链路。
|
|
13
|
-
-
|
|
13
|
+
- 配置文件按 `url/username/password/authMode` 收敛;初始化与安装时会让你选择普通登录还是 LDAP 登录,token 只保存在认证缓存里。
|
|
14
14
|
- 命令层统一使用 `InMemoryCliRegistry + Zod schema + jsonResult`,便于 Agent 稳定调用。
|
|
15
15
|
- 共享了分页、项目 ID、可选文本、布尔值和导出格式等 Zod 片段,减少重复定义。
|
|
16
16
|
- API 客户端加入超时、重试和错误分层,遇到认证 / 网络 / 配置错误时可直接判断。
|
|
@@ -62,9 +62,11 @@ yapi completion bash
|
|
|
62
62
|
```
|
|
63
63
|
|
|
64
64
|
```bash
|
|
65
|
-
yapi config-init --
|
|
65
|
+
yapi config-init --url https://yapi.example.com --username user@example.com --password secret --auth-mode native
|
|
66
|
+
yapi config-init --url https://yapi.example.com --username user@example.com --password secret --auth-mode ldap
|
|
67
|
+
yapi login
|
|
66
68
|
yapi login --token xxx
|
|
67
|
-
yapi login --email user@example.com --password secret
|
|
69
|
+
yapi login --email user@example.com --password secret --ldap true
|
|
68
70
|
yapi whoami
|
|
69
71
|
```
|
|
70
72
|
|
|
@@ -128,4 +130,6 @@ yapi docs-sync --file docs/api.md --project-id 1 --cat-id 2
|
|
|
128
130
|
pnpm typecheck
|
|
129
131
|
pnpm build
|
|
130
132
|
pnpm test
|
|
133
|
+
pnpm check
|
|
134
|
+
pnpm release:smoke-query
|
|
131
135
|
```
|
package/dist/cli.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { CLI_VERSION } from './version.js';
|
|
2
2
|
import { runInstallCommand, runUninstallCommand, runUpdateCommand } from './install.js';
|
|
3
3
|
import { formatCommandResult, printCommandHelp, printHelp } from './core/cli-output.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { parseCommandInput } from './core/cli-registry.js';
|
|
5
|
+
import { buildRegistryForCommand } from './tools/index.js';
|
|
6
6
|
import { runDoctor } from './core/doctor.js';
|
|
7
7
|
import { runChangelog } from './core/changelog.js';
|
|
8
8
|
import { generateCompletionScript } from './core/completion.js';
|
|
9
9
|
import { checkForUpdates, getUpdateSuggestion } from './core/update-probe.js';
|
|
10
10
|
import { handleCliError } from './core/errors.js';
|
|
11
11
|
import { setOutputFormat, getOutputFormatter } from './tools/shared.js';
|
|
12
|
+
import { getAvailableCommandNames, resolveCommandGroup } from './core/manifest.js';
|
|
12
13
|
const BUILTIN_COMMANDS = ['help', 'list', 'version', 'install', 'update', 'uninstall', 'remove', 'doctor', 'changelog', 'completion'];
|
|
13
14
|
function parseTopLevelArgs(rawArgs) {
|
|
14
15
|
const args = [...rawArgs];
|
|
@@ -40,17 +41,38 @@ export async function runCli(rawArgs, appName = 'yapi-cli') {
|
|
|
40
41
|
else {
|
|
41
42
|
setOutputFormat('pretty');
|
|
42
43
|
}
|
|
43
|
-
const registry = new InMemoryCliRegistry();
|
|
44
|
-
registerTools(registry);
|
|
45
44
|
const { commandName, commandArgs } = parseTopLevelArgs(rawArgs);
|
|
45
|
+
const commandNames = getAvailableCommandNames();
|
|
46
46
|
// --- 无参 -> 总帮助 ---
|
|
47
47
|
if (!commandName || commandName === 'help') {
|
|
48
|
-
|
|
48
|
+
if (commandArgs.length === 0) {
|
|
49
|
+
printHelp(appName, commandNames);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const targetName = commandArgs[0];
|
|
53
|
+
if (isBuiltin(targetName)) {
|
|
54
|
+
printBuiltinHelp(appName, targetName);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const helpGroup = resolveCommandGroup(targetName);
|
|
58
|
+
if (!helpGroup) {
|
|
59
|
+
process.stderr.write(`未找到命令: ${targetName}\n运行 \`${appName} help\` 查看可用命令。\n`);
|
|
60
|
+
process.exitCode = 1;
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const helpRegistry = await buildRegistryForCommand({ commandName: targetName, commandGroup: helpGroup });
|
|
64
|
+
const helpCommand = helpRegistry.getCommand(targetName);
|
|
65
|
+
if (!helpCommand) {
|
|
66
|
+
process.stderr.write(`未找到命令: ${targetName}\n运行 \`${appName} help\` 查看可用命令。\n`);
|
|
67
|
+
process.exitCode = 1;
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
printCommandHelp(appName, helpCommand);
|
|
49
71
|
return;
|
|
50
72
|
}
|
|
51
73
|
// --- list ---
|
|
52
74
|
if (commandName === 'list') {
|
|
53
|
-
printHelp(appName,
|
|
75
|
+
printHelp(appName, commandNames);
|
|
54
76
|
return;
|
|
55
77
|
}
|
|
56
78
|
// --- version ---
|
|
@@ -119,11 +141,18 @@ export async function runCli(rawArgs, appName = 'yapi-cli') {
|
|
|
119
141
|
}
|
|
120
142
|
// --- completion ---
|
|
121
143
|
if (commandName === 'completion') {
|
|
122
|
-
const script = generateCompletionScript(
|
|
144
|
+
const script = generateCompletionScript(commandNames, appName, commandArgs[0]);
|
|
123
145
|
process.stdout.write(script);
|
|
124
146
|
return;
|
|
125
147
|
}
|
|
126
148
|
// --- 业务命令 ---
|
|
149
|
+
const commandGroup = resolveCommandGroup(commandName);
|
|
150
|
+
if (!commandGroup) {
|
|
151
|
+
process.stderr.write(`未找到命令: ${commandName}\n运行 \`${appName} help\` 查看可用命令。\n`);
|
|
152
|
+
process.exitCode = 1;
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const registry = await buildRegistryForCommand({ commandName, commandGroup });
|
|
127
156
|
const command = registry.getCommand(commandName);
|
|
128
157
|
if (!command) {
|
|
129
158
|
process.stderr.write(`未找到命令: ${commandName}\n运行 \`${appName} help\` 查看可用命令。\n`);
|
|
@@ -193,11 +222,8 @@ function printBuiltinHelp(appName, name) {
|
|
|
193
222
|
' --skill-only 只刷新 skill,不检查 CLI 更新',
|
|
194
223
|
].join('\n') + '\n');
|
|
195
224
|
}
|
|
196
|
-
else if (name === 'doctor' || name === 'install' || name === 'uninstall' || name === 'version') {
|
|
197
|
-
printHelp(appName, []);
|
|
198
|
-
}
|
|
199
225
|
else {
|
|
200
|
-
printHelp(appName,
|
|
226
|
+
printHelp(appName, getAvailableCommandNames());
|
|
201
227
|
}
|
|
202
228
|
}
|
|
203
229
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { createInterface } from 'node:readline/promises';
|
|
2
|
+
import { stdin, stdout } from 'node:process';
|
|
3
|
+
function isInteractive() {
|
|
4
|
+
return stdin.isTTY && stdout.isTTY && process.env.CI !== 'true';
|
|
5
|
+
}
|
|
6
|
+
function normalizeAuthMode(value) {
|
|
7
|
+
const normalized = value.trim().toLowerCase();
|
|
8
|
+
if (normalized === '' || ['1', 'native', 'normal', '普通', '普通登录', '普通登录方式'].includes(normalized)) {
|
|
9
|
+
return 'native';
|
|
10
|
+
}
|
|
11
|
+
if (['2', 'ldap', 'ldap登录', 'ldap登录方式'].includes(normalized)) {
|
|
12
|
+
return 'ldap';
|
|
13
|
+
}
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
export async function resolveAuthModeSelection(authMode, context) {
|
|
17
|
+
if (authMode)
|
|
18
|
+
return authMode;
|
|
19
|
+
if (!isInteractive()) {
|
|
20
|
+
throw new Error(`${context} 未指定认证方式,请显式传 --auth-mode native 或 --auth-mode ldap`);
|
|
21
|
+
}
|
|
22
|
+
const rl = createInterface({ input: stdin, output: stdout });
|
|
23
|
+
try {
|
|
24
|
+
while (true) {
|
|
25
|
+
stdout.write([
|
|
26
|
+
'',
|
|
27
|
+
`${context} 需要选择登录方式:`,
|
|
28
|
+
' 1) native 普通登录(YApi 原生密码登录)',
|
|
29
|
+
' 2) ldap LDAP 登录(需要 LDAP 账号)',
|
|
30
|
+
].join('\n') + '\n');
|
|
31
|
+
const answer = normalizeAuthMode(await rl.question('请输入 1 或 2(默认 1):'));
|
|
32
|
+
if (answer) {
|
|
33
|
+
return answer;
|
|
34
|
+
}
|
|
35
|
+
stdout.write('输入无效,请重新输入 1 或 2。\n');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
rl.close();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=auth-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-mode.js","sourceRoot":"","sources":["../../src/core/auth-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAK7C,SAAS,aAAa;IACpB,OAAO,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC;AAClE,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE9C,IAAI,UAAU,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAChG,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,QAAkC,EAAE,OAAe;IAChG,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,qDAAqD,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC;gBACX,EAAE;gBACF,GAAG,OAAO,YAAY;gBACtB,gCAAgC;gBAChC,kCAAkC;aACnC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YAErB,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACxE,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
|
|
@@ -8,6 +8,6 @@ export declare function formatCommandResult(result: {
|
|
|
8
8
|
}>;
|
|
9
9
|
}): string;
|
|
10
10
|
/** 打印总帮助 */
|
|
11
|
-
export declare function printHelp(appName: string, commands: CliCommandDefinition
|
|
11
|
+
export declare function printHelp(appName: string, commands: Array<CliCommandDefinition | string>): void;
|
|
12
12
|
/** 打印单个命令帮助 */
|
|
13
13
|
export declare function printCommandHelp(appName: string, command: CliCommandDefinition): void;
|
package/dist/core/cli-output.js
CHANGED
|
@@ -10,14 +10,30 @@ export function formatCommandResult(result) {
|
|
|
10
10
|
}
|
|
11
11
|
/** 打印总帮助 */
|
|
12
12
|
export function printHelp(appName, commands) {
|
|
13
|
+
const commandList = commands.map((command) => {
|
|
14
|
+
if (typeof command === 'string') {
|
|
15
|
+
return { name: command, description: '' };
|
|
16
|
+
}
|
|
17
|
+
return { name: command.name, description: command.description ?? '' };
|
|
18
|
+
});
|
|
19
|
+
const maxCommandWidth = Math.max(...commandList.map((command) => command.name.length), 0, 12) + 2;
|
|
13
20
|
const lines = [
|
|
14
21
|
`${appName} v${CLI_VERSION}`,
|
|
15
22
|
'',
|
|
23
|
+
'适配范围:YApi REST API + 登录接口(native / ldap)',
|
|
24
|
+
'运行要求:Node.js >= 18',
|
|
25
|
+
'',
|
|
16
26
|
'用法:',
|
|
17
27
|
` ${appName} <command> [options]`,
|
|
18
28
|
` ${appName} help <command>`,
|
|
19
29
|
` npx ${appName} <command> [options]`,
|
|
20
30
|
'',
|
|
31
|
+
'快速开始:',
|
|
32
|
+
` ${appName} list 查看全部可用命令(推荐)`,
|
|
33
|
+
` ${appName} help <command> 查看命令参数`,
|
|
34
|
+
` ${appName} whoami 校验当前账号`,
|
|
35
|
+
` ${appName} doctor 自检配置与网络`,
|
|
36
|
+
'',
|
|
21
37
|
'内置命令:',
|
|
22
38
|
' help 显示帮助信息',
|
|
23
39
|
' list 列出所有命令',
|
|
@@ -32,17 +48,22 @@ export function printHelp(appName, commands) {
|
|
|
32
48
|
'',
|
|
33
49
|
'业务命令:',
|
|
34
50
|
];
|
|
35
|
-
if (
|
|
51
|
+
if (commandList.length === 0) {
|
|
36
52
|
lines.push(' (暂无)');
|
|
37
53
|
}
|
|
38
54
|
else {
|
|
39
|
-
for (const command of
|
|
40
|
-
lines.push(` ${command.name.padEnd(
|
|
55
|
+
for (const command of commandList) {
|
|
56
|
+
lines.push(` ${command.name.padEnd(maxCommandWidth)}${command.description}`);
|
|
41
57
|
}
|
|
42
58
|
}
|
|
43
|
-
if (
|
|
59
|
+
if (commandList.length > 0) {
|
|
60
|
+
lines.push('');
|
|
61
|
+
lines.push(`共 ${commandList.length} 个业务命令。使用 \`${appName} help <command>\` 查看参数详情。`);
|
|
44
62
|
lines.push('');
|
|
45
|
-
lines.push(
|
|
63
|
+
lines.push('下一步:');
|
|
64
|
+
lines.push(` - 查看参数:${appName} help <command>`);
|
|
65
|
+
lines.push(` - 校验账号:${appName} whoami`);
|
|
66
|
+
lines.push(` - 初始化配置:${appName} config-init --url <url> --username <username> --password <password>`);
|
|
46
67
|
}
|
|
47
68
|
process.stdout.write(`${lines.join('\n')}\n`);
|
|
48
69
|
}
|
|
@@ -59,6 +80,8 @@ export function printCommandHelp(appName, command) {
|
|
|
59
80
|
'',
|
|
60
81
|
'参数:',
|
|
61
82
|
...(schemaRows.length > 0 ? schemaRows : [' (暂无参数)']),
|
|
83
|
+
'',
|
|
84
|
+
`提示:使用 \`${appName} --json ${command.name} ...\` 可输出 JSON 结果`,
|
|
62
85
|
];
|
|
63
86
|
process.stdout.write(`${lines.join('\n')}\n`);
|
|
64
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-output.js","sourceRoot":"","sources":["../../src/core/cli-output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA6B,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,UAAU,sBAAsB;IACpC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AACtH,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,mBAAmB,CAAC,MAA2D;IAC7F,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IACvC,OAAO,IAAI,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,YAAY;AACZ,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"cli-output.js","sourceRoot":"","sources":["../../src/core/cli-output.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import type { CliCommandDefinition } from './cli-registry.js';
|
|
2
1
|
/** 生成 bash/zsh/fish 补全脚本 */
|
|
3
|
-
export declare function generateCompletionScript(
|
|
2
|
+
export declare function generateCompletionScript(commandNames: Array<string | {
|
|
3
|
+
name: string;
|
|
4
|
+
}>, appName: string, shellArg?: string): string;
|
package/dist/core/completion.js
CHANGED
|
@@ -6,16 +6,18 @@ function detectShellType(shellArg) {
|
|
|
6
6
|
return 'bash';
|
|
7
7
|
}
|
|
8
8
|
/** 生成 bash/zsh/fish 补全脚本 */
|
|
9
|
-
export function generateCompletionScript(
|
|
9
|
+
export function generateCompletionScript(commandNames, appName, shellArg) {
|
|
10
10
|
const shell = detectShellType(shellArg);
|
|
11
|
-
const
|
|
11
|
+
const sortedCommandNames = commandNames
|
|
12
|
+
.map((command) => (typeof command === 'string' ? command : command.name))
|
|
13
|
+
.sort();
|
|
12
14
|
if (shell === 'zsh') {
|
|
13
|
-
return generateZshCompletion(
|
|
15
|
+
return generateZshCompletion(sortedCommandNames, appName);
|
|
14
16
|
}
|
|
15
17
|
if (shell === 'fish') {
|
|
16
|
-
return generateFishCompletion(
|
|
18
|
+
return generateFishCompletion(sortedCommandNames, appName);
|
|
17
19
|
}
|
|
18
|
-
return generateBashCompletion(
|
|
20
|
+
return generateBashCompletion(sortedCommandNames, appName);
|
|
19
21
|
}
|
|
20
22
|
function generateBashCompletion(commandNames, appName) {
|
|
21
23
|
const builtins = ['help', 'list', 'version', 'install', 'update', 'uninstall', 'remove', 'doctor', 'changelog'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/core/completion.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/core/completion.ts"],"names":[],"mappings":"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"}
|
package/dist/core/doctor.js
CHANGED
|
@@ -22,39 +22,42 @@ function collectConfigChecks() {
|
|
|
22
22
|
const checks = [];
|
|
23
23
|
const configDir = join(homedir(), '.yapi');
|
|
24
24
|
if (!existsSync(configDir)) {
|
|
25
|
-
checks.push({ name: '配置目录 ~/.yapi', status: 'fail', message: '不存在', detail: '请运行 `yapi config-init
|
|
25
|
+
checks.push({ name: '配置目录 ~/.yapi', status: 'fail', message: '不存在', detail: '请运行 `yapi config-init --url <url> --username <username> --password <password>` 或 `yapi install --url <url> --username <username> --password <password>`' });
|
|
26
26
|
return checks;
|
|
27
27
|
}
|
|
28
28
|
checks.push({ name: '配置目录 ~/.yapi', status: 'pass', message: '已创建' });
|
|
29
|
-
|
|
29
|
+
let config = null;
|
|
30
|
+
try {
|
|
31
|
+
config = loadConfig();
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
checks.push({
|
|
35
|
+
name: '配置文件 config.json',
|
|
36
|
+
status: 'fail',
|
|
37
|
+
message: '存在但无法直接使用',
|
|
38
|
+
detail: error instanceof Error ? error.message : String(error),
|
|
39
|
+
});
|
|
40
|
+
return checks;
|
|
41
|
+
}
|
|
30
42
|
if (!config) {
|
|
31
43
|
checks.push({ name: '配置文件 config.json', status: 'fail', message: '不存在或无法解析' });
|
|
32
44
|
return checks;
|
|
33
45
|
}
|
|
34
46
|
checks.push({ name: '配置文件 config.json', status: 'pass', message: '已加载' });
|
|
35
|
-
checks.push({ name: '
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
checks.push({ name: 'API Token', status: 'warn', message: '未设置', detail: '部分功能需要 token' });
|
|
41
|
-
}
|
|
42
|
-
if (config.projectId) {
|
|
43
|
-
checks.push({ name: '默认项目 ID', status: 'pass', message: String(config.projectId) });
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
checks.push({ name: '默认项目 ID', status: 'warn', message: '未设置', detail: '可通过 --project-id 参数指定' });
|
|
47
|
-
}
|
|
47
|
+
checks.push({ name: 'YApi 地址', status: 'pass', message: config.url });
|
|
48
|
+
checks.push({ name: '登录用户名', status: config.username ? 'pass' : 'fail', message: config.username || '未设置' });
|
|
49
|
+
checks.push({ name: '登录密码', status: config.password ? 'pass' : 'fail', message: config.password ? '******' : '未设置' });
|
|
50
|
+
checks.push({ name: '认证方式', status: 'pass', message: config.authMode });
|
|
48
51
|
return checks;
|
|
49
52
|
}
|
|
50
53
|
async function collectNetworkChecks() {
|
|
51
54
|
const checks = [];
|
|
52
55
|
const config = loadConfig();
|
|
53
|
-
if (!config?.
|
|
56
|
+
if (!config?.url) {
|
|
54
57
|
checks.push({ name: '网络连通性', status: 'skip', message: '未配置服务器地址' });
|
|
55
58
|
return checks;
|
|
56
59
|
}
|
|
57
|
-
const url = config.
|
|
60
|
+
const url = config.url.replace(/\/+$/, '');
|
|
58
61
|
try {
|
|
59
62
|
const controller = new AbortController();
|
|
60
63
|
const timer = setTimeout(() => controller.abort(), 5000);
|
|
@@ -118,6 +121,11 @@ export async function runDoctor(args) {
|
|
|
118
121
|
lines.push('');
|
|
119
122
|
lines.push('提示: 使用 --verbose 可包含网络连通性检查');
|
|
120
123
|
}
|
|
124
|
+
lines.push('');
|
|
125
|
+
lines.push('下一步:');
|
|
126
|
+
lines.push(' - 校验当前账号:yapi whoami');
|
|
127
|
+
lines.push(' - 查看命令参数:yapi help <command>');
|
|
128
|
+
lines.push(' - 重新写入配置:yapi config-init --url <url> --username <username> --password <password>');
|
|
121
129
|
process.stdout.write(`${lines.join('\n')}\n`);
|
|
122
130
|
return report;
|
|
123
131
|
}
|
package/dist/core/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/core/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAgBxD,SAAS,kBAAkB;IACzB,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,YAAY;IACZ,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,WAAW,SAAS,EAAE,CAAC,CAAC;IACzF,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,WAAW,YAAY,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,gBAAgB;IAChB,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,IAAI,CAAC;IACjE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IAEvE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;IAE3C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/core/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { YApiCommandGroup } from '../tools/yapi/groups.js';
|
|
2
|
+
export interface CliManifestCommand {
|
|
3
|
+
name: string;
|
|
4
|
+
group: YApiCommandGroup;
|
|
5
|
+
}
|
|
6
|
+
export interface CliManifest {
|
|
7
|
+
version: string;
|
|
8
|
+
groups: YApiCommandGroup[];
|
|
9
|
+
commands: CliManifestCommand[];
|
|
10
|
+
commandToGroup: Record<string, YApiCommandGroup>;
|
|
11
|
+
}
|
|
12
|
+
export declare function createManifest(commands: CliManifestCommand[]): CliManifest;
|
|
13
|
+
export declare function loadManifest(): CliManifest;
|
|
14
|
+
export declare function getAvailableCommandNames(): string[];
|
|
15
|
+
export declare function resolveCommandGroup(commandName: string): YApiCommandGroup | undefined;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { CLI_VERSION } from '../version.js';
|
|
5
|
+
import { getYApiCommandGroupEntries } from '../tools/yapi/register.js';
|
|
6
|
+
const DIST_MANIFEST_RELATIVE_PATH = '../manifest.json';
|
|
7
|
+
const ROOT_MANIFEST_RELATIVE_PATH = '../../dist/manifest.json';
|
|
8
|
+
export function createManifest(commands) {
|
|
9
|
+
const dedupedCommands = [...commands].sort((left, right) => left.name.localeCompare(right.name));
|
|
10
|
+
const groups = [...new Set(dedupedCommands.map((command) => command.group))];
|
|
11
|
+
return {
|
|
12
|
+
version: CLI_VERSION,
|
|
13
|
+
groups,
|
|
14
|
+
commands: dedupedCommands,
|
|
15
|
+
commandToGroup: Object.fromEntries(dedupedCommands.map((command) => [command.name, command.group])),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function resolveManifestCandidates() {
|
|
19
|
+
const currentFile = fileURLToPath(import.meta.url);
|
|
20
|
+
const currentDir = path.dirname(currentFile);
|
|
21
|
+
return [
|
|
22
|
+
path.resolve(currentDir, DIST_MANIFEST_RELATIVE_PATH),
|
|
23
|
+
path.resolve(currentDir, ROOT_MANIFEST_RELATIVE_PATH),
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
export function loadManifest() {
|
|
27
|
+
for (const candidate of resolveManifestCandidates()) {
|
|
28
|
+
if (!existsSync(candidate)) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const source = readFileSync(candidate, 'utf-8');
|
|
32
|
+
return JSON.parse(source);
|
|
33
|
+
}
|
|
34
|
+
const entries = getYApiCommandGroupEntries();
|
|
35
|
+
const commands = entries.flatMap((entry) => entry.commands.map((name) => ({ name, group: entry.name })));
|
|
36
|
+
return createManifest(commands);
|
|
37
|
+
}
|
|
38
|
+
export function getAvailableCommandNames() {
|
|
39
|
+
return loadManifest().commands.map((command) => command.name);
|
|
40
|
+
}
|
|
41
|
+
export function resolveCommandGroup(commandName) {
|
|
42
|
+
return loadManifest().commandToGroup[commandName];
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/core/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAcvE,MAAM,2BAA2B,GAAG,kBAAkB,CAAC;AACvD,MAAM,2BAA2B,GAAG,0BAA0B,CAAC;AAE/D,MAAM,UAAU,cAAc,CAAC,QAA8B;IAC3D,MAAM,eAAe,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACjG,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAuB,CAAC;IAEnG,OAAO;QACL,OAAO,EAAE,WAAW;QACpB,MAAM;QACN,QAAQ,EAAE,eAAe;QACzB,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAqC;KACxI,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB;IAChC,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAE7C,OAAO;QACL,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,2BAA2B,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,2BAA2B,CAAC;KACtD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,KAAK,MAAM,SAAS,IAAI,yBAAyB,EAAE,EAAE,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAgB,CAAC;IAC3C,CAAC;IAED,MAAM,OAAO,GAAG,0BAA0B,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzG,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,YAAY,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,OAAO,YAAY,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AACpD,CAAC"}
|
package/dist/core/output.js
CHANGED
|
@@ -48,6 +48,30 @@ export class OutputFormatter {
|
|
|
48
48
|
if (data.success === true && data.message && !data.items && !data.projects && !data.interfaces && !data.categories && !data.users && !data.collections && !data.envs && !data.members && !data.logs && !data.groups && data.constructor === Object && Object.keys(data).length <= 3) {
|
|
49
49
|
return data.message;
|
|
50
50
|
}
|
|
51
|
+
if (looksLikeConfigSummary(data)) {
|
|
52
|
+
return this.renderObject('当前配置', {
|
|
53
|
+
url: data.url,
|
|
54
|
+
username: data.username,
|
|
55
|
+
authMode: data.authMode,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
if (looksLikeLoginSummary(data)) {
|
|
59
|
+
return this.renderObject('登录结果', {
|
|
60
|
+
method: data.method,
|
|
61
|
+
username: data.username ?? '(未返回)',
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
if (looksLikeWhoami(data)) {
|
|
65
|
+
return this.renderObject('当前账号', {
|
|
66
|
+
loggedIn: data.loggedIn,
|
|
67
|
+
configured: data.configured,
|
|
68
|
+
username: data.username ?? '-',
|
|
69
|
+
email: data.email ?? '-',
|
|
70
|
+
server: data.server ?? '-',
|
|
71
|
+
authMode: data.authMode ?? '-',
|
|
72
|
+
message: data.message ?? '-',
|
|
73
|
+
});
|
|
74
|
+
}
|
|
51
75
|
// 错误消息
|
|
52
76
|
if (data.success === false && data.message) {
|
|
53
77
|
return `✗ ${data.message}`;
|
|
@@ -185,6 +209,15 @@ export class OutputFormatter {
|
|
|
185
209
|
function isRecord(value) {
|
|
186
210
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
187
211
|
}
|
|
212
|
+
function looksLikeConfigSummary(data) {
|
|
213
|
+
return 'url' in data && 'username' in data && 'authMode' in data && !('loggedIn' in data) && !('method' in data);
|
|
214
|
+
}
|
|
215
|
+
function looksLikeLoginSummary(data) {
|
|
216
|
+
return 'method' in data && ('username' in data || 'success' in data);
|
|
217
|
+
}
|
|
218
|
+
function looksLikeWhoami(data) {
|
|
219
|
+
return 'loggedIn' in data && 'configured' in data;
|
|
220
|
+
}
|
|
188
221
|
function prettyValue(value) {
|
|
189
222
|
if (value === null || value === undefined)
|
|
190
223
|
return '-';
|