@cloudglab/yapi-cli 0.0.1 → 0.0.3
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 +16 -0
- package/README.md +14 -6
- package/dist/cli.js +37 -11
- package/dist/cli.js.map +1 -1
- package/dist/core/auth-mode.d.ts +10 -0
- package/dist/core/auth-mode.js +65 -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 +1 -3
- package/dist/install.js +142 -71
- 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 +72 -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 +6 -8
- package/skills/yapi-cli/reference/overview.md +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.0.3 - 2026-06-22
|
|
4
|
+
|
|
5
|
+
- 安装与初始化链路改为对齐 `zentao-cli` 的统一配置校验流程,避免 `npx -y @cloudglab/yapi-cli@latest install` 先装 skill 再因缺少 `--url` 直接失败。
|
|
6
|
+
- `install` 与 `config-init` 在交互终端下会统一引导输入 YApi 地址、登录用户名、登录密码和认证方式;非交互环境下会给出一致的显式传参提示。
|
|
7
|
+
- 同步修正文档中的安装示例与说明,去掉已经不再适用的旧参数写法。
|
|
8
|
+
|
|
9
|
+
## 0.0.2 - 2026-06-22
|
|
10
|
+
|
|
11
|
+
- 新增按组懒加载与 `manifest` 机制,帮助、补全和命令执行更稳定。
|
|
12
|
+
- `install` 与 `config-init` 现在会引导选择普通登录或 LDAP 登录。
|
|
13
|
+
- 统一了配置、自检和输出文案,补齐了 `docs/index.html` 与覆盖率审计说明。
|
|
14
|
+
|
|
15
|
+
## 0.0.1 - 2026-06-21
|
|
16
|
+
|
|
17
|
+
- 补齐初始 CLI 骨架与基础命令。
|
|
18
|
+
|
|
3
19
|
## 0.0.0 - 2026-06-19
|
|
4
20
|
|
|
5
21
|
- 初始化通用 CLI 骨架。
|
package/README.md
CHANGED
|
@@ -10,14 +10,14 @@
|
|
|
10
10
|
|
|
11
11
|
- 默认 JSON 输出适合 AI / 脚本消费:统一走 `jsonResult`,并可切到 `pretty` 人类可读模式。
|
|
12
12
|
- 新增内置命令:`doctor`、`changelog`、`completion`,补齐安装 / 更新 / 卸载 / 版本查看链路。
|
|
13
|
-
-
|
|
13
|
+
- 配置文件按 `url/username/password/authMode` 收敛;`install` / `config-init` 现在统一走配置校验流程:交互终端会逐步提示填写,非交互环境会明确要求显式传参,token 只保存在认证缓存里。
|
|
14
14
|
- 命令层统一使用 `InMemoryCliRegistry + Zod schema + jsonResult`,便于 Agent 稳定调用。
|
|
15
15
|
- 共享了分页、项目 ID、可选文本、布尔值和导出格式等 Zod 片段,减少重复定义。
|
|
16
16
|
- API 客户端加入超时、重试和错误分层,遇到认证 / 网络 / 配置错误时可直接判断。
|
|
17
17
|
|
|
18
18
|
## 典型变化
|
|
19
19
|
|
|
20
|
-
- **输出模式**:`yapi --json
|
|
20
|
+
- **输出模式**:`yapi <command> --json` 会返回 JSON 结果;默认模式在终端输出更适合人工阅读的文本。
|
|
21
21
|
- **自检**:`yapi doctor --verbose` 可检查 Node 版本、配置、网络连通性和认证状态。
|
|
22
22
|
- **版本记录**:`yapi changelog --limit 5`、`--version`、`--since`、`--raw` 都可用。
|
|
23
23
|
- **补全**:`yapi completion bash|zsh|fish` 会生成对应 shell 的补全脚本。
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
### 推荐:一键安装 CLI + Skill
|
|
34
34
|
|
|
35
35
|
```bash
|
|
36
|
-
npx -y yapi-cli@latest install
|
|
36
|
+
npx -y @cloudglab/yapi-cli@latest install
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
该命令会安装全局 CLI 和内置 Skill
|
|
39
|
+
该命令会安装全局 CLI 和内置 Skill。首次安装时,会先检查本机是否已有可用配置;如果没有,会在交互终端里逐步提示你输入 YApi 地址、登录用户名、登录密码和认证方式。
|
|
40
40
|
|
|
41
41
|
如果需要重新安装 skill,可直接运行:
|
|
42
42
|
|
|
@@ -55,6 +55,7 @@ yapi update
|
|
|
55
55
|
```bash
|
|
56
56
|
yapi help
|
|
57
57
|
yapi list
|
|
58
|
+
yapi install
|
|
58
59
|
yapi version --verbose
|
|
59
60
|
yapi doctor
|
|
60
61
|
yapi changelog --limit 5
|
|
@@ -62,12 +63,17 @@ yapi completion bash
|
|
|
62
63
|
```
|
|
63
64
|
|
|
64
65
|
```bash
|
|
65
|
-
yapi config-init
|
|
66
|
+
yapi config-init
|
|
67
|
+
yapi config-init --url https://yapi.example.com --username user@example.com --password secret --auth-mode native
|
|
68
|
+
yapi config-init --url https://yapi.example.com --username user@example.com --password secret --auth-mode ldap
|
|
69
|
+
yapi login
|
|
66
70
|
yapi login --token xxx
|
|
67
|
-
yapi login --email user@example.com --password secret
|
|
71
|
+
yapi login --email user@example.com --password secret --ldap true
|
|
68
72
|
yapi whoami
|
|
69
73
|
```
|
|
70
74
|
|
|
75
|
+
如果在 CI 或其他非交互环境中初始化配置,请显式传入 `--url`、`--username`、`--password`、`--auth-mode`。
|
|
76
|
+
|
|
71
77
|
```bash
|
|
72
78
|
yapi group-list
|
|
73
79
|
yapi project-list --project-id 1
|
|
@@ -128,4 +134,6 @@ yapi docs-sync --file docs/api.md --project-id 1 --cat-id 2
|
|
|
128
134
|
pnpm typecheck
|
|
129
135
|
pnpm build
|
|
130
136
|
pnpm test
|
|
137
|
+
pnpm check
|
|
138
|
+
pnpm release:smoke-query
|
|
131
139
|
```
|
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,10 @@
|
|
|
1
|
+
import type { YApiConfig } from '../services/yapi/types.js';
|
|
2
|
+
export type YApiAuthMode = YApiConfig['authMode'];
|
|
3
|
+
export declare function isInteractive(): boolean;
|
|
4
|
+
export declare function resolveRequiredTextInput(value: string | undefined, options: {
|
|
5
|
+
context: string;
|
|
6
|
+
flag: string;
|
|
7
|
+
prompt: string;
|
|
8
|
+
normalize?: (input: string) => string;
|
|
9
|
+
}): Promise<string>;
|
|
10
|
+
export declare function resolveAuthModeSelection(authMode: YApiAuthMode | undefined, context: string): Promise<YApiAuthMode>;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { createInterface } from 'node:readline/promises';
|
|
2
|
+
import { stdin, stdout } from 'node:process';
|
|
3
|
+
export function isInteractive() {
|
|
4
|
+
return stdin.isTTY && stdout.isTTY && process.env.CI !== 'true';
|
|
5
|
+
}
|
|
6
|
+
export async function resolveRequiredTextInput(value, options) {
|
|
7
|
+
const normalize = options.normalize ?? ((input) => input.trim());
|
|
8
|
+
const currentValue = value?.trim();
|
|
9
|
+
if (currentValue) {
|
|
10
|
+
return normalize(currentValue);
|
|
11
|
+
}
|
|
12
|
+
if (!isInteractive()) {
|
|
13
|
+
throw new Error(`${options.context} 未提供 ${options.flag},请显式传 ${options.flag}`);
|
|
14
|
+
}
|
|
15
|
+
const rl = createInterface({ input: stdin, output: stdout });
|
|
16
|
+
try {
|
|
17
|
+
while (true) {
|
|
18
|
+
const answer = normalize(await rl.question(`${options.prompt}:`));
|
|
19
|
+
if (answer) {
|
|
20
|
+
return answer;
|
|
21
|
+
}
|
|
22
|
+
stdout.write(`${options.prompt} 不能为空,请重新输入。\n`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
rl.close();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function normalizeAuthMode(value) {
|
|
30
|
+
const normalized = value.trim().toLowerCase();
|
|
31
|
+
if (normalized === '' || ['1', 'native', 'normal', '普通', '普通登录', '普通登录方式'].includes(normalized)) {
|
|
32
|
+
return 'native';
|
|
33
|
+
}
|
|
34
|
+
if (['2', 'ldap', 'ldap登录', 'ldap登录方式'].includes(normalized)) {
|
|
35
|
+
return 'ldap';
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
export async function resolveAuthModeSelection(authMode, context) {
|
|
40
|
+
if (authMode)
|
|
41
|
+
return authMode;
|
|
42
|
+
if (!isInteractive()) {
|
|
43
|
+
throw new Error(`${context} 未指定认证方式,请显式传 --auth-mode native 或 --auth-mode ldap`);
|
|
44
|
+
}
|
|
45
|
+
const rl = createInterface({ input: stdin, output: stdout });
|
|
46
|
+
try {
|
|
47
|
+
while (true) {
|
|
48
|
+
stdout.write([
|
|
49
|
+
'',
|
|
50
|
+
`${context} 需要选择登录方式:`,
|
|
51
|
+
' 1) native 普通登录(YApi 原生密码登录)',
|
|
52
|
+
' 2) ldap LDAP 登录(需要 LDAP 账号)',
|
|
53
|
+
].join('\n') + '\n');
|
|
54
|
+
const answer = normalizeAuthMode(await rl.question('请输入 1 或 2(默认 1):'));
|
|
55
|
+
if (answer) {
|
|
56
|
+
return answer;
|
|
57
|
+
}
|
|
58
|
+
stdout.write('输入无效,请重新输入 1 或 2。\n');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
rl.close();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=auth-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-mode.js","sourceRoot":"","sources":["../../src/core/auth-mode.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|