wjx-cli 0.1.6 → 0.1.7
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/README.md +41 -8
- package/dist/commands/completion.d.ts +2 -0
- package/dist/commands/completion.js +119 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/survey.js +7 -1
- package/dist/commands/survey.js.map +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/command-helpers.d.ts +12 -1
- package/dist/lib/command-helpers.js +49 -3
- package/dist/lib/command-helpers.js.map +1 -1
- package/dist/lib/completions.d.ts +6 -0
- package/dist/lib/completions.js +49 -0
- package/dist/lib/completions.js.map +1 -0
- package/dist/lib/stdin.js +1 -1
- package/dist/lib/stdin.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
[](https://nodejs.org/)
|
|
7
7
|
[](https://www.npmjs.com/package/wjx-cli)
|
|
8
|
-
[](__tests__/cli.test.mjs)
|
|
9
9
|
|
|
10
10
|
wjx-cli 是 [`wjx-ai-kit`](../) monorepo 的命令行入口,将 [wjx-api-sdk](../wjx-api-sdk/) 的 50+ 函数直接暴露为终端命令。设计目标:**让 AI Agent 和人类开发者都能用一行命令操作问卷星 OpenAPI**。
|
|
11
11
|
|
|
@@ -50,6 +50,8 @@ wjx-cli 是 [`wjx-ai-kit`](../) monorepo 的命令行入口,将 [wjx-api-sdk](
|
|
|
50
50
|
- **表格输出** — `--table` 切换为人类可读的 `console.table` 格式
|
|
51
51
|
- **56 个子命令** — 覆盖问卷、答卷、通讯录、部门、管理员、标签、用户体系、子账号、SSO、数据分析
|
|
52
52
|
- **9 个本地命令** — SSO URL 生成和 analytics 计算无需 API Key,离线可用
|
|
53
|
+
- **Shell 补全** — `wjx completion bash/zsh/fish` 生成自动补全脚本
|
|
54
|
+
- **Dry-run 预览** — `--dry-run` 预览 API 请求(URL/Headers/Body)不实��发送
|
|
53
55
|
- **基于 wjx-api-sdk** — 直接调用 SDK 函数,类型安全,行为与 API 一致
|
|
54
56
|
|
|
55
57
|
---
|
|
@@ -125,8 +127,9 @@ wjx-ai-kit/ # monorepo root
|
|
|
125
127
|
└── wjx-cli/ # ← 本项目
|
|
126
128
|
├── src/
|
|
127
129
|
│ ├── index.ts # Commander 入口 + 全局 preAction hook
|
|
128
|
-
│ ├── commands/ #
|
|
130
|
+
│ ├── commands/ # 13 个命令模块(每模块 1 个 register 函数)
|
|
129
131
|
│ │ ├── init.ts # wjx init 交互式配置向导
|
|
132
|
+
│ │ ├── completion.ts # wjx completion bash/zsh/fish
|
|
130
133
|
│ │ ├── survey.ts # 14 subcommands
|
|
131
134
|
│ │ ├── response.ts # 11 subcommands
|
|
132
135
|
│ │ ├── contacts.ts # 3 subcommands
|
|
@@ -140,13 +143,14 @@ wjx-ai-kit/ # monorepo root
|
|
|
140
143
|
│ │ └── diagnostics.ts # 2 subcommands(whoami + doctor)
|
|
141
144
|
│ └── lib/
|
|
142
145
|
│ ├── config.ts # ~/.wjxrc 配置文件读写 + applyConfigToEnv
|
|
143
|
-
│ ├── command-helpers.ts # executeCommand + strictInt + requireField
|
|
146
|
+
│ ├── command-helpers.ts # executeCommand + strictInt + requireField + dry-run
|
|
144
147
|
│ ├── auth.ts # API Key 获取(--api-key > env > config)
|
|
145
148
|
│ ├── output.ts # JSON / table 格式化
|
|
146
149
|
│ ├── errors.ts # CliError + exit code 路由
|
|
147
|
-
│
|
|
150
|
+
│ ├── stdin.ts # stdin JSON 读取 + source-aware merge
|
|
151
|
+
│ └── completions.ts # Shell 补全候选项生成
|
|
148
152
|
└── __tests__/
|
|
149
|
-
└── cli.test.mjs #
|
|
153
|
+
└── cli.test.mjs # 96 个端到端测试
|
|
150
154
|
```
|
|
151
155
|
|
|
152
156
|
**数据流:** `CLI args / stdin` → `Commander parse` → `executeCommand()` → `wjx-api-sdk function` → `stdout JSON / stderr error`
|
|
@@ -160,8 +164,8 @@ wjx-ai-kit/ # monorepo root
|
|
|
160
164
|
| `--api-key <apiKey>` | WJX API Key(或设置 `WJX_API_KEY` 环境变量) |
|
|
161
165
|
| `--json` | JSON 输出(默认) |
|
|
162
166
|
| `--table` | 表格输出(`console.table` 格式) |
|
|
163
|
-
| `--verbose` | 详细输出 |
|
|
164
167
|
| `--stdin` | 从 stdin 读取 JSON 参数(见 [stdin 管道输入](#stdin-管道输入)) |
|
|
168
|
+
| `--dry-run` | 预览 API 请求(不实际发送,输出到 stderr) |
|
|
165
169
|
| `--version` | 显示版本号 |
|
|
166
170
|
| `--help` | 显示帮助信息 |
|
|
167
171
|
|
|
@@ -550,6 +554,34 @@ wjx whoami # 验证 API Key 并显示账号信息
|
|
|
550
554
|
wjx doctor # 环境诊断(配置文件、Node 版本、API Key、API 连接、SDK 版本)
|
|
551
555
|
```
|
|
552
556
|
|
|
557
|
+
### Shell 补全
|
|
558
|
+
|
|
559
|
+
```bash
|
|
560
|
+
wjx completion bash # 输出 Bash 补全脚本
|
|
561
|
+
wjx completion zsh # 输出 Zsh 补全脚本
|
|
562
|
+
wjx completion fish # 输出 Fish 补全脚本
|
|
563
|
+
wjx completion install # 自动安装到 Shell 配置文件
|
|
564
|
+
|
|
565
|
+
# 手动安装示例(Bash)
|
|
566
|
+
eval "$(wjx completion bash)"
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
### Dry-run 预览
|
|
570
|
+
|
|
571
|
+
```bash
|
|
572
|
+
wjx survey list --dry-run --api-key your_key
|
|
573
|
+
# 输出到 stderr:
|
|
574
|
+
# {
|
|
575
|
+
# "dry_run": true,
|
|
576
|
+
# "request": {
|
|
577
|
+
# "method": "POST",
|
|
578
|
+
# "url": "https://www.wjx.cn/openapi/...",
|
|
579
|
+
# "headers": { "Authorization": "Bearer your****_key" },
|
|
580
|
+
# "body": "{...}"
|
|
581
|
+
# }
|
|
582
|
+
# }
|
|
583
|
+
```
|
|
584
|
+
|
|
553
585
|
---
|
|
554
586
|
|
|
555
587
|
## stdin 管道输入
|
|
@@ -774,11 +806,12 @@ WJX_API_KEY=xxx node dist/index.js survey list
|
|
|
774
806
|
```
|
|
775
807
|
src/
|
|
776
808
|
├── index.ts # 入口 + Commander program
|
|
777
|
-
├── commands/ #
|
|
809
|
+
├── commands/ # 13 个命令模块
|
|
778
810
|
│ └── *.ts # 每个文件导出 register*Commands(program)
|
|
779
811
|
└── lib/
|
|
780
812
|
├── config.ts # ~/.wjxrc 配置文件读写
|
|
781
|
-
├── command-helpers.ts # executeCommand / strictInt / requireField
|
|
813
|
+
├── command-helpers.ts # executeCommand / strictInt / requireField / dry-run
|
|
814
|
+
├── completions.ts # Shell 补全候选项生成
|
|
782
815
|
├── auth.ts # API Key 获取(--api-key > env > config)
|
|
783
816
|
├── output.ts # JSON / table 输出
|
|
784
817
|
├── errors.ts # CliError + 退出码路由
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { writeFileSync, readFileSync, existsSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { CliError, handleError } from "../lib/errors.js";
|
|
5
|
+
const BASH_SCRIPT = `
|
|
6
|
+
_wjx_completions() {
|
|
7
|
+
local cur_word="\${COMP_WORDS[COMP_CWORD]}"
|
|
8
|
+
local line="\${COMP_LINE}"
|
|
9
|
+
local point="\${COMP_POINT}"
|
|
10
|
+
|
|
11
|
+
local candidates
|
|
12
|
+
candidates=$(wjx --get-completions "$point" "$line" 2>/dev/null)
|
|
13
|
+
|
|
14
|
+
COMPREPLY=($(compgen -W "$candidates" -- "$cur_word"))
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
complete -F _wjx_completions wjx
|
|
18
|
+
`.trim();
|
|
19
|
+
const ZSH_SCRIPT = `
|
|
20
|
+
_wjx_completions() {
|
|
21
|
+
local line="\${words[*]}"
|
|
22
|
+
local point="\${CURSOR}"
|
|
23
|
+
|
|
24
|
+
local candidates
|
|
25
|
+
candidates=("\${(@f)$(wjx --get-completions "$point" "$line" 2>/dev/null)}")
|
|
26
|
+
|
|
27
|
+
local -a completions
|
|
28
|
+
for c in "\${candidates[@]}"; do
|
|
29
|
+
[[ -n "$c" ]] && completions+=("$c")
|
|
30
|
+
done
|
|
31
|
+
_describe 'wjx' completions
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
compdef _wjx_completions wjx
|
|
35
|
+
`.trim();
|
|
36
|
+
const FISH_SCRIPT = `
|
|
37
|
+
complete -c wjx -f -a '(wjx --get-completions (commandline -C) (commandline) 2>/dev/null)'
|
|
38
|
+
`.trim();
|
|
39
|
+
const PROFILE_FILES = {
|
|
40
|
+
bash: ".bashrc",
|
|
41
|
+
zsh: ".zshrc",
|
|
42
|
+
fish: join(".config", "fish", "config.fish"),
|
|
43
|
+
};
|
|
44
|
+
const EVAL_LINES = {
|
|
45
|
+
bash: 'eval "$(wjx completion bash)"',
|
|
46
|
+
zsh: 'eval "$(wjx completion zsh)"',
|
|
47
|
+
fish: "wjx completion fish | source",
|
|
48
|
+
};
|
|
49
|
+
function detectShell() {
|
|
50
|
+
const shell = process.env.SHELL || "";
|
|
51
|
+
if (shell.includes("zsh"))
|
|
52
|
+
return "zsh";
|
|
53
|
+
if (shell.includes("bash"))
|
|
54
|
+
return "bash";
|
|
55
|
+
if (shell.includes("fish"))
|
|
56
|
+
return "fish";
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
export function registerCompletionCommands(program) {
|
|
60
|
+
const completion = program
|
|
61
|
+
.command("completion")
|
|
62
|
+
.description("生成 Shell 自动补全脚本");
|
|
63
|
+
completion
|
|
64
|
+
.command("bash")
|
|
65
|
+
.description("输出 Bash 补全脚本")
|
|
66
|
+
.action(() => {
|
|
67
|
+
console.log(BASH_SCRIPT);
|
|
68
|
+
});
|
|
69
|
+
completion
|
|
70
|
+
.command("zsh")
|
|
71
|
+
.description("输出 Zsh 补全脚本")
|
|
72
|
+
.action(() => {
|
|
73
|
+
console.log(ZSH_SCRIPT);
|
|
74
|
+
});
|
|
75
|
+
completion
|
|
76
|
+
.command("fish")
|
|
77
|
+
.description("输出 Fish 补全脚本")
|
|
78
|
+
.action(() => {
|
|
79
|
+
console.log(FISH_SCRIPT);
|
|
80
|
+
});
|
|
81
|
+
completion
|
|
82
|
+
.command("install")
|
|
83
|
+
.description("自动安装补全脚本到 Shell 配置文件")
|
|
84
|
+
.action(() => {
|
|
85
|
+
try {
|
|
86
|
+
const shell = detectShell();
|
|
87
|
+
if (!shell) {
|
|
88
|
+
throw new CliError("INPUT_ERROR", "无法检测 Shell 类型。请手动运行:\n" +
|
|
89
|
+
" Bash: eval \"$(wjx completion bash)\"\n" +
|
|
90
|
+
" Zsh: eval \"$(wjx completion zsh)\"\n" +
|
|
91
|
+
" Fish: wjx completion fish | source");
|
|
92
|
+
}
|
|
93
|
+
const profilePath = join(homedir(), PROFILE_FILES[shell]);
|
|
94
|
+
const evalLine = EVAL_LINES[shell];
|
|
95
|
+
const marker = "# wjx shell completions";
|
|
96
|
+
// Check for existing installation
|
|
97
|
+
try {
|
|
98
|
+
if (existsSync(profilePath)) {
|
|
99
|
+
const content = readFileSync(profilePath, "utf8");
|
|
100
|
+
if (content.includes(evalLine) || content.includes("wjx completion")) {
|
|
101
|
+
process.stderr.write(`补全脚本已安装在 ${profilePath}\n`);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Profile unreadable — proceed to append
|
|
108
|
+
}
|
|
109
|
+
const snippet = `\n${marker}\n${evalLine}\n`;
|
|
110
|
+
writeFileSync(profilePath, snippet, { flag: "a" });
|
|
111
|
+
process.stderr.write(`已添加到 ${profilePath}\n`);
|
|
112
|
+
process.stderr.write(`运行以下命令立即生效:\n source ${profilePath}\n`);
|
|
113
|
+
}
|
|
114
|
+
catch (e) {
|
|
115
|
+
handleError(e);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/survey.js
CHANGED
|
@@ -2,7 +2,7 @@ import { createSurvey, getSurvey, listSurveys, updateSurveyStatus, getSurveySett
|
|
|
2
2
|
import { CliError, handleError } from "../lib/errors.js";
|
|
3
3
|
import { mergeStdinWithOpts } from "../lib/stdin.js";
|
|
4
4
|
import { getCredentials } from "../lib/auth.js";
|
|
5
|
-
import { executeCommand, strictInt, requireField } from "../lib/command-helpers.js";
|
|
5
|
+
import { executeCommand, strictInt, requireField, createCapturingFetch, printDryRunPreview } from "../lib/command-helpers.js";
|
|
6
6
|
export function registerSurveyCommands(program) {
|
|
7
7
|
const survey = program.command("survey").description("问卷管理");
|
|
8
8
|
// --- list ---
|
|
@@ -187,6 +187,12 @@ export function registerSurveyCommands(program) {
|
|
|
187
187
|
}
|
|
188
188
|
requireField(merged, "vid");
|
|
189
189
|
const creds = getCredentials(program.opts());
|
|
190
|
+
if (program.opts().dryRun) {
|
|
191
|
+
const { fetchImpl, getCapturedRequest } = createCapturingFetch();
|
|
192
|
+
await getSurvey({ vid: merged.vid }, creds, fetchImpl);
|
|
193
|
+
printDryRunPreview(getCapturedRequest());
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
190
196
|
const result = await getSurvey({ vid: merged.vid }, creds);
|
|
191
197
|
if (result.result === false) {
|
|
192
198
|
throw new CliError("API_ERROR", result.errormsg || "API request failed");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"survey.js","sourceRoot":"","sources":["../../src/commands/survey.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,eAAe,EACf,UAAU,EACV,cAAc,EACd,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"survey.js","sourceRoot":"","sources":["../../src/commands/survey.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -13,9 +13,11 @@ import { registerAccountCommands } from "./commands/account.js";
|
|
|
13
13
|
import { registerSsoCommands } from "./commands/sso.js";
|
|
14
14
|
import { registerAnalyticsCommands } from "./commands/analytics.js";
|
|
15
15
|
import { registerInitCommands } from "./commands/init.js";
|
|
16
|
+
import { registerCompletionCommands } from "./commands/completion.js";
|
|
16
17
|
import { readStdin } from "./lib/stdin.js";
|
|
17
18
|
import { handleError } from "./lib/errors.js";
|
|
18
19
|
import { applyConfigToEnv } from "./lib/config.js";
|
|
20
|
+
import { getCompletions } from "./lib/completions.js";
|
|
19
21
|
// Load ~/.wjxrc config into process.env (env vars take precedence)
|
|
20
22
|
applyConfigToEnv();
|
|
21
23
|
const require = createRequire(import.meta.url);
|
|
@@ -28,7 +30,8 @@ program
|
|
|
28
30
|
.option("--api-key <apiKey>", "WJX API Key(或设置 WJX_API_KEY 环境变量)")
|
|
29
31
|
.option("--json", "JSON 输出(默认)")
|
|
30
32
|
.option("--table", "表格输出")
|
|
31
|
-
.option("--stdin", "从 stdin 读取 JSON 参数")
|
|
33
|
+
.option("--stdin", "从 stdin 读取 JSON 参数")
|
|
34
|
+
.option("--dry-run", "预览 API 请求(不实际发送)");
|
|
32
35
|
// Prevent Commander from calling process.exit on errors — we handle it ourselves
|
|
33
36
|
program.exitOverride();
|
|
34
37
|
// Global preAction hook: read stdin and merge with command opts
|
|
@@ -54,8 +57,21 @@ registerAccountCommands(program);
|
|
|
54
57
|
registerSsoCommands(program);
|
|
55
58
|
registerAnalyticsCommands(program);
|
|
56
59
|
registerInitCommands(program);
|
|
60
|
+
registerCompletionCommands(program);
|
|
57
61
|
(async () => {
|
|
58
62
|
try {
|
|
63
|
+
// Hidden completion hook: --get-completions <point> <line...>
|
|
64
|
+
const rawArgs = process.argv.slice(2);
|
|
65
|
+
const gcIdx = rawArgs.indexOf("--get-completions");
|
|
66
|
+
if (gcIdx !== -1 && rawArgs[gcIdx + 1] !== undefined) {
|
|
67
|
+
const point = parseInt(rawArgs[gcIdx + 1], 10);
|
|
68
|
+
const line = rawArgs.slice(gcIdx + 2).join(" ");
|
|
69
|
+
const results = getCompletions(program, point, line);
|
|
70
|
+
if (results.length > 0) {
|
|
71
|
+
process.stdout.write(results.join("\n") + "\n");
|
|
72
|
+
}
|
|
73
|
+
process.exit(0);
|
|
74
|
+
}
|
|
59
75
|
await program.parseAsync();
|
|
60
76
|
}
|
|
61
77
|
catch (err) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAsB,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import type { WjxApiResponse } from "wjx-api-sdk";
|
|
2
|
+
import type { WjxApiResponse, FetchLike } from "wjx-api-sdk";
|
|
3
3
|
/**
|
|
4
4
|
* Strict integer parser. Rejects garbage like "123abc".
|
|
5
5
|
*/
|
|
@@ -11,6 +11,17 @@ export declare function requireField(merged: Record<string, unknown>, field: str
|
|
|
11
11
|
interface ExecuteOpts {
|
|
12
12
|
noAuth?: boolean;
|
|
13
13
|
}
|
|
14
|
+
export interface CapturedRequest {
|
|
15
|
+
method: string;
|
|
16
|
+
url: string;
|
|
17
|
+
headers: Record<string, string>;
|
|
18
|
+
body: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function createCapturingFetch(): {
|
|
21
|
+
fetchImpl: FetchLike;
|
|
22
|
+
getCapturedRequest: () => CapturedRequest | null;
|
|
23
|
+
};
|
|
24
|
+
export declare function printDryRunPreview(request: CapturedRequest | null): void;
|
|
14
25
|
type SdkFunction = (input: any, creds: any, ...rest: any[]) => Promise<WjxApiResponse<any>>;
|
|
15
26
|
/**
|
|
16
27
|
* Central command executor.
|
|
@@ -23,6 +23,37 @@ export function requireField(merged, field, label) {
|
|
|
23
23
|
throw new CliError("INPUT_ERROR", `Missing required option: --${label || field}`);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
+
// "Bearer " prefix is 7 chars; preserve prefix + first 4 key chars, mask middle, keep last 4
|
|
27
|
+
function maskAuthHeader(value) {
|
|
28
|
+
if (value.length <= 12)
|
|
29
|
+
return "****";
|
|
30
|
+
return value.slice(0, 11) + "****" + value.slice(-4);
|
|
31
|
+
}
|
|
32
|
+
export function createCapturingFetch() {
|
|
33
|
+
let captured = null;
|
|
34
|
+
const fetchImpl = async (url, init) => {
|
|
35
|
+
const headers = {};
|
|
36
|
+
if (init?.headers) {
|
|
37
|
+
for (const [k, v] of Object.entries(init.headers)) {
|
|
38
|
+
headers[k] = k.toLowerCase() === "authorization" ? maskAuthHeader(String(v)) : String(v);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
captured = {
|
|
42
|
+
method: init?.method ?? "GET",
|
|
43
|
+
url: String(url),
|
|
44
|
+
headers,
|
|
45
|
+
body: init?.body ? String(init.body) : "",
|
|
46
|
+
};
|
|
47
|
+
return new Response(JSON.stringify({ result: true, data: {} }), {
|
|
48
|
+
status: 200,
|
|
49
|
+
headers: { "Content-Type": "application/json" },
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
return { fetchImpl, getCapturedRequest: () => captured };
|
|
53
|
+
}
|
|
54
|
+
export function printDryRunPreview(request) {
|
|
55
|
+
process.stderr.write(JSON.stringify({ dry_run: true, request }, null, 2) + "\n");
|
|
56
|
+
}
|
|
26
57
|
/**
|
|
27
58
|
* Central command executor.
|
|
28
59
|
* - Merges stdin data with CLI opts (source-aware)
|
|
@@ -45,20 +76,35 @@ export async function executeCommand(program, actionCommand, sdkFn, buildInput,
|
|
|
45
76
|
merged = { ...commandOpts };
|
|
46
77
|
}
|
|
47
78
|
const input = buildInput(merged);
|
|
79
|
+
const globalOpts = program.opts();
|
|
48
80
|
if (opts.noAuth) {
|
|
81
|
+
if (globalOpts.dryRun) {
|
|
82
|
+
process.stderr.write(JSON.stringify({
|
|
83
|
+
dry_run: true,
|
|
84
|
+
note: "本地命令,不会发送 API 请求",
|
|
85
|
+
input,
|
|
86
|
+
}, null, 2) + "\n");
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
49
89
|
// Local commands (e.g. buildSurveyUrl) — call with input only
|
|
50
90
|
const localFn = sdkFn;
|
|
51
91
|
const result = localFn(input);
|
|
52
|
-
formatOutput(result,
|
|
92
|
+
formatOutput(result, globalOpts);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const creds = getCredentials(globalOpts);
|
|
96
|
+
if (globalOpts.dryRun) {
|
|
97
|
+
const { fetchImpl, getCapturedRequest } = createCapturingFetch();
|
|
98
|
+
await sdkFn(input, creds, fetchImpl);
|
|
99
|
+
printDryRunPreview(getCapturedRequest());
|
|
53
100
|
return;
|
|
54
101
|
}
|
|
55
|
-
const creds = getCredentials(program.opts());
|
|
56
102
|
const result = await sdkFn(input, creds);
|
|
57
103
|
// P0 fix: detect SDK API failure response
|
|
58
104
|
if (result.result === false) {
|
|
59
105
|
throw new CliError("API_ERROR", result.errormsg || "API request failed");
|
|
60
106
|
}
|
|
61
|
-
formatOutput(result,
|
|
107
|
+
formatOutput(result, globalOpts);
|
|
62
108
|
}
|
|
63
109
|
catch (e) {
|
|
64
110
|
handleError(e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-helpers.js","sourceRoot":"","sources":["../../src/lib/command-helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAA+B,EAAE,KAAa,EAAE,KAAc;IACzF,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QAC1D,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,8BAA8B,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;IACpF,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"command-helpers.js","sourceRoot":"","sources":["../../src/lib/command-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
/**
|
|
3
|
+
* Walk the Commander command tree and return completion candidates
|
|
4
|
+
* for the given input line and cursor position.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getCompletions(program: Command, point: number, line: string): string[];
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Walk the Commander command tree and return completion candidates
|
|
3
|
+
* for the given input line and cursor position.
|
|
4
|
+
*/
|
|
5
|
+
export function getCompletions(program, point, line) {
|
|
6
|
+
const partial = line.slice(0, point);
|
|
7
|
+
const tokens = partial.trim().split(/\s+/).slice(1); // drop "wjx"
|
|
8
|
+
// If line ends with space, user wants next token; otherwise last token is partial
|
|
9
|
+
const endsWithSpace = partial.endsWith(" ");
|
|
10
|
+
const partialWord = endsWithSpace ? "" : (tokens.pop() ?? "");
|
|
11
|
+
let currentCmd = program;
|
|
12
|
+
for (const tok of tokens) {
|
|
13
|
+
const sub = currentCmd.commands.find((c) => c.name() === tok);
|
|
14
|
+
if (sub) {
|
|
15
|
+
currentCmd = sub;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const candidates = [];
|
|
22
|
+
if (partialWord.startsWith("-")) {
|
|
23
|
+
// Complete options
|
|
24
|
+
for (const opt of currentCmd.options) {
|
|
25
|
+
if (opt.long)
|
|
26
|
+
candidates.push(opt.long);
|
|
27
|
+
else if (opt.short)
|
|
28
|
+
candidates.push(opt.short);
|
|
29
|
+
}
|
|
30
|
+
// Walk the full parent chain to include global options
|
|
31
|
+
let p = currentCmd.parent;
|
|
32
|
+
while (p) {
|
|
33
|
+
for (const opt of p.options) {
|
|
34
|
+
if (opt.long)
|
|
35
|
+
candidates.push(opt.long);
|
|
36
|
+
}
|
|
37
|
+
p = p.parent;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// Complete subcommand names
|
|
42
|
+
for (const sub of currentCmd.commands) {
|
|
43
|
+
candidates.push(sub.name());
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Filter by prefix
|
|
47
|
+
return candidates.filter((c) => c.startsWith(partialWord));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=completions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completions.js","sourceRoot":"","sources":["../../src/lib/completions.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB,EAAE,KAAa,EAAE,IAAY;IAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;IAElE,kFAAkF;IAClF,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9D,IAAI,UAAU,GAAY,OAAO,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC;QACvE,IAAI,GAAG,EAAE,CAAC;YACR,UAAU,GAAG,GAAG,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,mBAAmB;QACnB,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACrC,IAAI,GAAG,CAAC,IAAI;gBAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;iBACnC,IAAI,GAAG,CAAC,KAAK;gBAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QACD,uDAAuD;QACvD,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;QAC1B,OAAO,CAAC,EAAE,CAAC;YACT,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC5B,IAAI,GAAG,CAAC,IAAI;oBAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC1C,CAAC;YACD,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QACf,CAAC;IACH,CAAC;SAAM,CAAC;QACN,4BAA4B;QAC5B,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACtC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;AAC7D,CAAC"}
|
package/dist/lib/stdin.js
CHANGED
|
@@ -40,7 +40,7 @@ export function mergeStdinWithOpts(stdinData, command) {
|
|
|
40
40
|
const merged = { ...stdinData };
|
|
41
41
|
for (const key of Object.keys(opts)) {
|
|
42
42
|
// Skip internal flags
|
|
43
|
-
if (key === "stdin" || key === "apiKey" || key === "json" || key === "table") {
|
|
43
|
+
if (key === "stdin" || key === "apiKey" || key === "json" || key === "table" || key === "dryRun") {
|
|
44
44
|
continue;
|
|
45
45
|
}
|
|
46
46
|
const source = command.getOptionValueSource(key);
|
package/dist/lib/stdin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdin.js","sourceRoot":"","sources":["../../src/lib/stdin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,4CAA4C;IAC5C,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAE1D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,yCAAyC,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClD,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,oCAAoC,GAAG,OAAO,MAAM,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,MAAiC,CAAC;IAC3C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,QAAQ;YAAE,MAAM,CAAC,CAAC;QACnC,MAAM,IAAI,QAAQ,CAChB,aAAa,EACb,2BAA2B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACxE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAkC,EAClC,OAAgB;IAEhB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,MAAM,GAA4B,EAAE,GAAG,SAAS,EAAE,CAAC;IAEzD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,sBAAsB;QACtB,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"stdin.js","sourceRoot":"","sources":["../../src/lib/stdin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,4CAA4C;IAC5C,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAE1D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,yCAAyC,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClD,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,oCAAoC,GAAG,OAAO,MAAM,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,MAAiC,CAAC;IAC3C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,QAAQ;YAAE,MAAM,CAAC,CAAC;QACnC,MAAM,IAAI,QAAQ,CAChB,aAAa,EACb,2BAA2B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACxE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAkC,EAClC,OAAgB;IAEhB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,MAAM,GAA4B,EAAE,GAAG,SAAS,EAAE,CAAC;IAEzD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,sBAAsB;QACtB,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACjG,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACjD,wEAAwE;QACxE,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|