@cloudglab/yapi-cli 0.0.4 → 0.0.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/CHANGELOG.md +19 -0
- package/README.md +22 -4
- package/dist/cli.js +121 -23
- package/dist/cli.js.map +1 -1
- package/dist/core/cli-output.d.ts +1 -1
- package/dist/core/cli-output.js +114 -25
- package/dist/core/cli-output.js.map +1 -1
- package/dist/core/errors.js +36 -3
- package/dist/core/errors.js.map +1 -1
- package/dist/core/http-metrics.d.ts +31 -0
- package/dist/core/http-metrics.js +35 -0
- package/dist/core/http-metrics.js.map +1 -0
- package/dist/core/output.d.ts +18 -4
- package/dist/core/output.js +105 -22
- package/dist/core/output.js.map +1 -1
- package/dist/core/update-probe.d.ts +4 -1
- package/dist/core/update-probe.js +43 -2
- package/dist/core/update-probe.js.map +1 -1
- package/dist/core/url-parser.d.ts +20 -0
- package/dist/core/url-parser.js +237 -0
- package/dist/core/url-parser.js.map +1 -0
- package/dist/install.js +334 -108
- package/dist/install.js.map +1 -1
- package/dist/manifest.json +22 -2
- package/dist/services/yapi/api.d.ts +12 -1
- package/dist/services/yapi/api.js +96 -10
- package/dist/services/yapi/api.js.map +1 -1
- package/dist/tools/shared.d.ts +2 -2
- package/dist/tools/shared.js.map +1 -1
- package/dist/tools/yapi/register-auth.js +12 -12
- package/dist/tools/yapi/register-auth.js.map +1 -1
- package/dist/tools/yapi/register-group.js +16 -16
- package/dist/tools/yapi/register-group.js.map +1 -1
- package/dist/tools/yapi/register-interface.js +123 -55
- package/dist/tools/yapi/register-interface.js.map +1 -1
- package/dist/tools/yapi/register-project.js +92 -31
- package/dist/tools/yapi/register-project.js.map +1 -1
- package/dist/tools/yapi/register-test.js +11 -11
- package/dist/tools/yapi/register-test.js.map +1 -1
- package/dist/tools/yapi/register-util.js +124 -34
- package/dist/tools/yapi/register-util.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/ai-cli-optimization-plan.md +412 -0
- package/package.json +1 -1
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
export function looksLikeHttpUrl(value) {
|
|
2
|
+
try {
|
|
3
|
+
const url = new URL(value);
|
|
4
|
+
return url.protocol === 'http:' || url.protocol === 'https:';
|
|
5
|
+
}
|
|
6
|
+
catch {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export function parseYApiPageUrl(rawUrl, configuredBaseUrl) {
|
|
11
|
+
const pageUrl = new URL(rawUrl);
|
|
12
|
+
const configured = parseConfiguredBaseUrl(configuredBaseUrl);
|
|
13
|
+
const matchedServer = Boolean(configured && pageUrl.origin === configured.origin);
|
|
14
|
+
const normalizedPath = stripBasePath(pageUrl.pathname, configured?.basePath);
|
|
15
|
+
const parsed = resolveRoute(rawUrl, normalizedPath, configuredBaseUrl ?? null, matchedServer);
|
|
16
|
+
if (!matchedServer && configuredBaseUrl) {
|
|
17
|
+
parsed.note = mergeNote(parsed.note, `URL 主机与当前配置不一致:当前配置是 ${configuredBaseUrl}`);
|
|
18
|
+
}
|
|
19
|
+
return parsed;
|
|
20
|
+
}
|
|
21
|
+
export function resolveParsedYApiUrlCommand(parsed) {
|
|
22
|
+
const withArgs = (commandName, commandArgs) => ({
|
|
23
|
+
commandName,
|
|
24
|
+
commandArgs,
|
|
25
|
+
displayCommand: `yapi ${commandName}${commandArgs.length > 0 ? ` ${commandArgs.join(' ')}` : ''}`,
|
|
26
|
+
});
|
|
27
|
+
switch (parsed.routeKind) {
|
|
28
|
+
case 'home':
|
|
29
|
+
return withArgs('workspace-snapshot', []);
|
|
30
|
+
case 'group-list':
|
|
31
|
+
return withArgs('group-list', []);
|
|
32
|
+
case 'group-detail':
|
|
33
|
+
return typeof parsed.params.groupId === 'number'
|
|
34
|
+
? withArgs('group-get', ['--groupId', String(parsed.params.groupId)])
|
|
35
|
+
: null;
|
|
36
|
+
case 'project-detail':
|
|
37
|
+
case 'project-activity':
|
|
38
|
+
case 'project-setting':
|
|
39
|
+
case 'project-wiki':
|
|
40
|
+
return typeof parsed.params.projectId === 'number'
|
|
41
|
+
? withArgs('project-get', ['--projectId', String(parsed.params.projectId)])
|
|
42
|
+
: null;
|
|
43
|
+
case 'project-data':
|
|
44
|
+
return typeof parsed.params.projectId === 'number'
|
|
45
|
+
? withArgs('env', ['--projectId', String(parsed.params.projectId)])
|
|
46
|
+
: null;
|
|
47
|
+
case 'project-members':
|
|
48
|
+
return typeof parsed.params.projectId === 'number'
|
|
49
|
+
? withArgs('member', ['--projectId', String(parsed.params.projectId)])
|
|
50
|
+
: null;
|
|
51
|
+
case 'interface-list':
|
|
52
|
+
return typeof parsed.params.projectId === 'number'
|
|
53
|
+
? withArgs('interface-list', ['--projectId', String(parsed.params.projectId)])
|
|
54
|
+
: null;
|
|
55
|
+
case 'interface-detail':
|
|
56
|
+
return typeof parsed.params.interfaceId === 'number'
|
|
57
|
+
? withArgs('interface-get', ['--interfaceId', String(parsed.params.interfaceId)])
|
|
58
|
+
: null;
|
|
59
|
+
case 'category-detail':
|
|
60
|
+
return typeof parsed.params.catId === 'number'
|
|
61
|
+
? withArgs('category-get', ['--catId', String(parsed.params.catId)])
|
|
62
|
+
: null;
|
|
63
|
+
case 'collection-detail':
|
|
64
|
+
return typeof parsed.params.projectId === 'number' && typeof parsed.params.colId === 'number'
|
|
65
|
+
? withArgs('col-cases', ['--projectId', String(parsed.params.projectId), '--colId', String(parsed.params.colId)])
|
|
66
|
+
: null;
|
|
67
|
+
case 'case-detail':
|
|
68
|
+
return typeof parsed.params.caseId === 'number'
|
|
69
|
+
? withArgs('case-get', ['--caseId', String(parsed.params.caseId)])
|
|
70
|
+
: null;
|
|
71
|
+
case 'user-list':
|
|
72
|
+
return withArgs('user-list', []);
|
|
73
|
+
case 'user-profile':
|
|
74
|
+
return typeof parsed.params.uid === 'number'
|
|
75
|
+
? withArgs('user-get', ['--uid', String(parsed.params.uid)])
|
|
76
|
+
: null;
|
|
77
|
+
case 'follow':
|
|
78
|
+
return withArgs('follow', []);
|
|
79
|
+
default:
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function parseConfiguredBaseUrl(configuredBaseUrl) {
|
|
84
|
+
if (!configuredBaseUrl) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
const url = new URL(configuredBaseUrl);
|
|
89
|
+
return {
|
|
90
|
+
origin: url.origin,
|
|
91
|
+
basePath: normalizeBasePath(url.pathname),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function normalizeBasePath(pathname) {
|
|
99
|
+
if (!pathname || pathname === '/') {
|
|
100
|
+
return '/';
|
|
101
|
+
}
|
|
102
|
+
return pathname.replace(/\/+$/, '') || '/';
|
|
103
|
+
}
|
|
104
|
+
function stripBasePath(pathname, basePath = '/') {
|
|
105
|
+
const normalizedBasePath = normalizeBasePath(basePath);
|
|
106
|
+
if (normalizedBasePath === '/') {
|
|
107
|
+
return pathname || '/';
|
|
108
|
+
}
|
|
109
|
+
if (pathname === normalizedBasePath) {
|
|
110
|
+
return '/';
|
|
111
|
+
}
|
|
112
|
+
if (pathname.startsWith(`${normalizedBasePath}/`)) {
|
|
113
|
+
const stripped = pathname.slice(normalizedBasePath.length);
|
|
114
|
+
return stripped.startsWith('/') ? stripped : `/${stripped}`;
|
|
115
|
+
}
|
|
116
|
+
return pathname || '/';
|
|
117
|
+
}
|
|
118
|
+
function resolveRoute(rawUrl, normalizedPath, configuredBaseUrl, matchedServer) {
|
|
119
|
+
const build = (routeKind, params, primaryCommand, suggestedCommands, note) => ({
|
|
120
|
+
url: rawUrl,
|
|
121
|
+
matchedServer,
|
|
122
|
+
configuredBaseUrl,
|
|
123
|
+
normalizedPath,
|
|
124
|
+
routeKind,
|
|
125
|
+
params,
|
|
126
|
+
primaryCommand,
|
|
127
|
+
suggestedCommands,
|
|
128
|
+
note,
|
|
129
|
+
});
|
|
130
|
+
if (normalizedPath === '/') {
|
|
131
|
+
return build('home', {}, 'yapi workspace-snapshot', ['yapi workspace-snapshot', 'yapi project-list']);
|
|
132
|
+
}
|
|
133
|
+
if (normalizedPath === '/login') {
|
|
134
|
+
return build('login', {}, 'yapi login', ['yapi login', 'yapi config-init']);
|
|
135
|
+
}
|
|
136
|
+
if (normalizedPath === '/group') {
|
|
137
|
+
return build('group-list', {}, 'yapi group-list', ['yapi group-list', 'yapi project-list']);
|
|
138
|
+
}
|
|
139
|
+
if (normalizedPath === '/follow') {
|
|
140
|
+
return build('follow', {}, 'yapi follow', ['yapi follow', 'yapi workspace-snapshot']);
|
|
141
|
+
}
|
|
142
|
+
if (normalizedPath === '/add-project') {
|
|
143
|
+
return build('add-project', {}, 'yapi project-create --help', ['yapi project-create --help', 'yapi group-list']);
|
|
144
|
+
}
|
|
145
|
+
if (normalizedPath === '/user/list') {
|
|
146
|
+
return build('user-list', {}, 'yapi user-list', ['yapi user-list', 'yapi user-search --query <关键词>']);
|
|
147
|
+
}
|
|
148
|
+
if (normalizedPath === '/statistic') {
|
|
149
|
+
return build('statistic', {}, null, ['yapi workspace-snapshot'], '当前 CLI 还没有 statistic 对应命令。');
|
|
150
|
+
}
|
|
151
|
+
let match = normalizedPath.match(/^\/group\/(\d+)$/);
|
|
152
|
+
if (match) {
|
|
153
|
+
const groupId = Number(match[1]);
|
|
154
|
+
return build('group-detail', { groupId }, `yapi group-get --groupId ${groupId}`, [`yapi group-get --groupId ${groupId}`, `yapi project-list --groupId ${groupId}`]);
|
|
155
|
+
}
|
|
156
|
+
match = normalizedPath.match(/^\/user\/profile\/(\d+)$/);
|
|
157
|
+
if (match) {
|
|
158
|
+
const uid = Number(match[1]);
|
|
159
|
+
return build('user-profile', { uid }, `yapi user-get --uid ${uid}`, [`yapi user-get --uid ${uid}`, 'yapi user-list']);
|
|
160
|
+
}
|
|
161
|
+
match = normalizedPath.match(/^\/project\/(\d+)$/);
|
|
162
|
+
if (match) {
|
|
163
|
+
const projectId = Number(match[1]);
|
|
164
|
+
return build('project-detail', { projectId }, `yapi project-get --projectId ${projectId}`, [`yapi project-get --projectId ${projectId}`, `yapi project-snapshot --projectId ${projectId}`]);
|
|
165
|
+
}
|
|
166
|
+
match = normalizedPath.match(/^\/project\/(\d+)\/activity$/);
|
|
167
|
+
if (match) {
|
|
168
|
+
const projectId = Number(match[1]);
|
|
169
|
+
return build('project-activity', { projectId }, `yapi project-get --projectId ${projectId}`, [`yapi project-get --projectId ${projectId}`, `yapi project-snapshot --projectId ${projectId}`], '当前 CLI 还没有 project activity 对应命令,先用 project-get / project-snapshot 补上下文。');
|
|
170
|
+
}
|
|
171
|
+
match = normalizedPath.match(/^\/project\/(\d+)\/data$/);
|
|
172
|
+
if (match) {
|
|
173
|
+
const projectId = Number(match[1]);
|
|
174
|
+
return build('project-data', { projectId }, `yapi env --projectId ${projectId}`, [`yapi env --projectId ${projectId}`, `yapi project-get --projectId ${projectId}`], '当前 CLI 未完整覆盖 data 页,只能先映射到环境与项目信息。');
|
|
175
|
+
}
|
|
176
|
+
match = normalizedPath.match(/^\/project\/(\d+)\/members$/);
|
|
177
|
+
if (match) {
|
|
178
|
+
const projectId = Number(match[1]);
|
|
179
|
+
return build('project-members', { projectId }, `yapi member --projectId ${projectId}`, [`yapi member --projectId ${projectId}`, `yapi project-get --projectId ${projectId}`]);
|
|
180
|
+
}
|
|
181
|
+
match = normalizedPath.match(/^\/project\/(\d+)\/setting$/);
|
|
182
|
+
if (match) {
|
|
183
|
+
const projectId = Number(match[1]);
|
|
184
|
+
return build('project-setting', { projectId }, `yapi project-get --projectId ${projectId}`, [`yapi project-get --projectId ${projectId}`, `yapi project-snapshot --projectId ${projectId}`]);
|
|
185
|
+
}
|
|
186
|
+
match = normalizedPath.match(/^\/project\/(\d+)\/wiki$/);
|
|
187
|
+
if (match) {
|
|
188
|
+
const projectId = Number(match[1]);
|
|
189
|
+
return build('project-wiki', { projectId }, `yapi project-get --projectId ${projectId}`, [`yapi project-get --projectId ${projectId}`, `yapi project-snapshot --projectId ${projectId}`], '当前 CLI 还没有 wiki 对应命令。');
|
|
190
|
+
}
|
|
191
|
+
match = normalizedPath.match(/^\/project\/(\d+)\/interface\/api$/);
|
|
192
|
+
if (match) {
|
|
193
|
+
const projectId = Number(match[1]);
|
|
194
|
+
return build('interface-list', { projectId }, `yapi interface-list --projectId ${projectId}`, [`yapi interface-list --projectId ${projectId}`, `yapi project-snapshot --projectId ${projectId}`]);
|
|
195
|
+
}
|
|
196
|
+
match = normalizedPath.match(/^\/project\/(\d+)\/interface\/api\/([^/]+)$/);
|
|
197
|
+
if (match) {
|
|
198
|
+
const projectId = Number(match[1]);
|
|
199
|
+
const actionId = match[2];
|
|
200
|
+
if (/^cat_(\d+)$/.test(actionId)) {
|
|
201
|
+
const catId = Number(actionId.slice(4));
|
|
202
|
+
return build('category-detail', { projectId, catId }, `yapi category-get --catId ${catId}`, [
|
|
203
|
+
`yapi category-get --catId ${catId}`,
|
|
204
|
+
`yapi interface-list-by-cat --catId ${catId}`,
|
|
205
|
+
`yapi project-get --projectId ${projectId}`,
|
|
206
|
+
]);
|
|
207
|
+
}
|
|
208
|
+
if (/^\d+$/.test(actionId)) {
|
|
209
|
+
const interfaceId = Number(actionId);
|
|
210
|
+
return build('interface-detail', { projectId, interfaceId }, `yapi interface-get --interfaceId ${interfaceId}`, [
|
|
211
|
+
`yapi interface-get --interfaceId ${interfaceId}`,
|
|
212
|
+
`yapi interface-snapshot --interfaceId ${interfaceId}`,
|
|
213
|
+
`yapi project-get --projectId ${projectId}`,
|
|
214
|
+
]);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
match = normalizedPath.match(/^\/project\/(\d+)\/interface\/col\/(\d+)$/);
|
|
218
|
+
if (match) {
|
|
219
|
+
const projectId = Number(match[1]);
|
|
220
|
+
const colId = Number(match[2]);
|
|
221
|
+
return build('collection-detail', { projectId, colId }, `yapi col-cases --projectId ${projectId} --colId ${colId}`, [`yapi col-cases --projectId ${projectId} --colId ${colId}`, `yapi col-list --projectId ${projectId}`], '当前 CLI 还没有独立的 collection detail 命令,先映射到 col-cases。');
|
|
222
|
+
}
|
|
223
|
+
match = normalizedPath.match(/^\/project\/(\d+)\/interface\/case\/(\d+)$/);
|
|
224
|
+
if (match) {
|
|
225
|
+
const projectId = Number(match[1]);
|
|
226
|
+
const caseId = Number(match[2]);
|
|
227
|
+
return build('case-detail', { projectId, caseId }, `yapi case-get --caseId ${caseId}`, [`yapi case-get --caseId ${caseId}`, `yapi col-list --projectId ${projectId}`]);
|
|
228
|
+
}
|
|
229
|
+
return build('unknown', {}, null, ['yapi workspace-snapshot'], '未识别到可映射的 YApi 前端路由。');
|
|
230
|
+
}
|
|
231
|
+
function mergeNote(left, right) {
|
|
232
|
+
if (left && right) {
|
|
233
|
+
return `${left} ${right}`;
|
|
234
|
+
}
|
|
235
|
+
return left ?? right;
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=url-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-parser.js","sourceRoot":"","sources":["../../src/core/url-parser.ts"],"names":[],"mappings":"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"}
|