@tronsfey/openapi2cli 1.0.10
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/LICENSE +21 -0
- package/README.md +173 -0
- package/README.zh.md +173 -0
- package/bin/openapi2cli +2 -0
- package/dist/analyzer/schema-analyzer.d.ts +4 -0
- package/dist/analyzer/schema-analyzer.d.ts.map +1 -0
- package/dist/analyzer/schema-analyzer.js +329 -0
- package/dist/analyzer/schema-analyzer.js.map +1 -0
- package/dist/auth/auth-provider.d.ts +22 -0
- package/dist/auth/auth-provider.d.ts.map +1 -0
- package/dist/auth/auth-provider.js +100 -0
- package/dist/auth/auth-provider.js.map +1 -0
- package/dist/generator/command-generator.d.ts +3 -0
- package/dist/generator/command-generator.d.ts.map +1 -0
- package/dist/generator/command-generator.js +96 -0
- package/dist/generator/command-generator.js.map +1 -0
- package/dist/generator/template-engine.d.ts +2 -0
- package/dist/generator/template-engine.d.ts.map +1 -0
- package/dist/generator/template-engine.js +154 -0
- package/dist/generator/template-engine.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +135 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/oas-parser.d.ts +3 -0
- package/dist/parser/oas-parser.d.ts.map +1 -0
- package/dist/parser/oas-parser.js +64 -0
- package/dist/parser/oas-parser.js.map +1 -0
- package/dist/templates/README.md.hbs +197 -0
- package/dist/templates/README.zh.md.hbs +197 -0
- package/dist/templates/SKILL.md.hbs +134 -0
- package/dist/templates/api-client.ts.hbs +217 -0
- package/dist/templates/command.ts.hbs +130 -0
- package/dist/templates/flat-commands.ts.hbs +126 -0
- package/dist/templates/index.ts.hbs +38 -0
- package/dist/templates/package.json.hbs +31 -0
- package/dist/templates/tsconfig.json.hbs +16 -0
- package/dist/types/index.d.ts +104 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.analyzeSchema = analyzeSchema;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const pinyin_pro_1 = require("pinyin-pro");
|
|
9
|
+
const auth_provider_1 = require("../auth/auth-provider");
|
|
10
|
+
const HTTP_METHODS = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options'];
|
|
11
|
+
/** True if the string contains at least one CJK unified ideograph. */
|
|
12
|
+
const CJK_RE = /[\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff]/;
|
|
13
|
+
/**
|
|
14
|
+
* Convert CJK characters in a string to their pinyin romanization.
|
|
15
|
+
* Non-CJK characters are left unchanged. Tone marks are stripped.
|
|
16
|
+
* e.g. "创建用户" → "chuang jian yong hu"
|
|
17
|
+
* "getUserList" → "getUserList" (no-op)
|
|
18
|
+
*/
|
|
19
|
+
function cjkToLatin(s) {
|
|
20
|
+
if (!CJK_RE.test(s))
|
|
21
|
+
return s;
|
|
22
|
+
return (0, pinyin_pro_1.pinyin)(s, { toneType: 'none', separator: ' ' });
|
|
23
|
+
}
|
|
24
|
+
function analyzeSchema(api, cliName) {
|
|
25
|
+
const warnings = [];
|
|
26
|
+
const { groups, flatCommands } = buildGroups(api, warnings);
|
|
27
|
+
const { authConfig, allAuthSchemes } = (0, auth_provider_1.extractAuthConfig)(api, cliName);
|
|
28
|
+
const baseUrl = extractBaseUrl(api);
|
|
29
|
+
return {
|
|
30
|
+
name: cliName,
|
|
31
|
+
description: api.info.description ?? `CLI for ${api.info.title}`,
|
|
32
|
+
version: api.info.version,
|
|
33
|
+
baseUrl,
|
|
34
|
+
groups,
|
|
35
|
+
flatCommands,
|
|
36
|
+
globalOptions: buildGlobalOptions(),
|
|
37
|
+
authConfig,
|
|
38
|
+
allAuthSchemes,
|
|
39
|
+
warnings,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function buildGroups(api, warnings) {
|
|
43
|
+
const groupMap = new Map();
|
|
44
|
+
const flatCommands = [];
|
|
45
|
+
// Seed from top-level tags (preserves defined order and descriptions)
|
|
46
|
+
for (const tag of api.tags ?? []) {
|
|
47
|
+
const converted = cjkToLatin(tag.name);
|
|
48
|
+
if (CJK_RE.test(tag.name)) {
|
|
49
|
+
const kebab = lodash_1.default.kebabCase(converted);
|
|
50
|
+
warnings.push(`[WARN] Tag "${tag.name}" 包含CJK字符,已自动转换为拼音: "${kebab}"`);
|
|
51
|
+
}
|
|
52
|
+
groupMap.set(tag.name, {
|
|
53
|
+
name: lodash_1.default.kebabCase(converted),
|
|
54
|
+
description: tag.description ?? tag.name,
|
|
55
|
+
subcommands: [],
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
// Walk every path and method
|
|
59
|
+
for (const [pathStr, pathItem] of Object.entries(api.paths ?? {})) {
|
|
60
|
+
if (!pathItem)
|
|
61
|
+
continue;
|
|
62
|
+
const pathLevelParams = (pathItem.parameters ?? []);
|
|
63
|
+
for (const method of HTTP_METHODS) {
|
|
64
|
+
const operation = pathItem[method];
|
|
65
|
+
if (!operation)
|
|
66
|
+
continue;
|
|
67
|
+
// x-cli-ignore: true → skip this operation entirely
|
|
68
|
+
if (operation['x-cli-ignore'] === true)
|
|
69
|
+
continue;
|
|
70
|
+
const subcommand = buildSubCommand(method, pathStr, operation, pathLevelParams, warnings);
|
|
71
|
+
const tags = operation.tags && operation.tags.length > 0 ? operation.tags : [];
|
|
72
|
+
if (tags.length === 0) {
|
|
73
|
+
flatCommands.push(subcommand);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
for (const tag of tags) {
|
|
77
|
+
if (!groupMap.has(tag)) {
|
|
78
|
+
const converted = cjkToLatin(tag);
|
|
79
|
+
if (CJK_RE.test(tag)) {
|
|
80
|
+
const kebab = lodash_1.default.kebabCase(converted);
|
|
81
|
+
warnings.push(`[WARN] Tag "${tag}" 包含CJK字符,已自动转换为拼音: "${kebab}"`);
|
|
82
|
+
}
|
|
83
|
+
groupMap.set(tag, {
|
|
84
|
+
name: lodash_1.default.kebabCase(converted),
|
|
85
|
+
description: tag,
|
|
86
|
+
subcommands: [],
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
groupMap.get(tag).subcommands.push(subcommand);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const groups = Array.from(groupMap.values()).filter((g) => g.subcommands.length > 0);
|
|
95
|
+
return { groups, flatCommands };
|
|
96
|
+
}
|
|
97
|
+
function buildSubCommand(method, pathStr, operation, pathLevelParams, warnings) {
|
|
98
|
+
const name = operationToCommandName(operation, method, pathStr, warnings);
|
|
99
|
+
const opParams = (operation.parameters ?? []);
|
|
100
|
+
const mergedParams = mergeParameters(pathLevelParams, opParams);
|
|
101
|
+
const parameters = mergedParams.map(mapParameter);
|
|
102
|
+
const requestBody = operation.requestBody
|
|
103
|
+
? mapRequestBody(operation.requestBody)
|
|
104
|
+
: undefined;
|
|
105
|
+
const options = buildOptions(parameters, requestBody);
|
|
106
|
+
const responses = buildResponses(operation.responses ?? {});
|
|
107
|
+
const securitySchemes = (operation.security ?? []).flatMap((s) => Object.keys(s));
|
|
108
|
+
// x-cli-aliases extension: ["ls", "list"]
|
|
109
|
+
const xAliases = operation['x-cli-aliases'];
|
|
110
|
+
const aliases = Array.isArray(xAliases) ? xAliases.map(String) : [];
|
|
111
|
+
// SSE detection: any 2xx response with text/event-stream content type
|
|
112
|
+
const streaming = detectStreaming(operation.responses ?? {});
|
|
113
|
+
return {
|
|
114
|
+
name,
|
|
115
|
+
description: operation.summary ?? operation.description ?? `${method.toUpperCase()} ${pathStr}`,
|
|
116
|
+
method,
|
|
117
|
+
path: pathStr,
|
|
118
|
+
parameters,
|
|
119
|
+
requestBody,
|
|
120
|
+
responses,
|
|
121
|
+
options,
|
|
122
|
+
securitySchemes,
|
|
123
|
+
aliases,
|
|
124
|
+
streaming,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
function operationToCommandName(operation, method, pathStr, warnings) {
|
|
128
|
+
// x-cli-name extension takes highest priority
|
|
129
|
+
const xCliName = operation['x-cli-name'];
|
|
130
|
+
if (typeof xCliName === 'string' && xCliName) {
|
|
131
|
+
return lodash_1.default.kebabCase(cjkToLatin(xCliName));
|
|
132
|
+
}
|
|
133
|
+
if (operation.operationId) {
|
|
134
|
+
const hasCJK = CJK_RE.test(operation.operationId);
|
|
135
|
+
const converted = cjkToLatin(operation.operationId);
|
|
136
|
+
const name = lodash_1.default.kebabCase(converted);
|
|
137
|
+
if (hasCJK) {
|
|
138
|
+
warnings.push(`[WARN] operationId "${operation.operationId}" 包含CJK字符,已自动转换为拼音: "${name}"`);
|
|
139
|
+
}
|
|
140
|
+
return name;
|
|
141
|
+
}
|
|
142
|
+
// No operationId → path segments + method joined with underscores
|
|
143
|
+
const segments = pathStr
|
|
144
|
+
.split('/')
|
|
145
|
+
.filter((s) => s)
|
|
146
|
+
.map((seg) => {
|
|
147
|
+
const raw = seg.startsWith('{') && seg.endsWith('}') ? seg.slice(1, -1) : seg;
|
|
148
|
+
return lodash_1.default.snakeCase(cjkToLatin(raw));
|
|
149
|
+
});
|
|
150
|
+
const name = [...segments, method].join('_');
|
|
151
|
+
warnings.push(`[WARN] ${method.toUpperCase()} ${pathStr} 缺少 operationId,已使用路径+方法自动生成命令名: "${name}"`);
|
|
152
|
+
return name;
|
|
153
|
+
}
|
|
154
|
+
function mergeParameters(pathLevel, opLevel) {
|
|
155
|
+
const map = new Map();
|
|
156
|
+
for (const p of pathLevel)
|
|
157
|
+
map.set(`${p.in}:${p.name}`, p);
|
|
158
|
+
for (const p of opLevel)
|
|
159
|
+
map.set(`${p.in}:${p.name}`, p); // operation wins
|
|
160
|
+
return Array.from(map.values());
|
|
161
|
+
}
|
|
162
|
+
function mapParameter(p) {
|
|
163
|
+
const schema = (p.schema ?? {});
|
|
164
|
+
return {
|
|
165
|
+
name: p.name,
|
|
166
|
+
in: p.in,
|
|
167
|
+
description: p.description ?? p.name,
|
|
168
|
+
required: p.required ?? false,
|
|
169
|
+
schema: {
|
|
170
|
+
type: schema.type ?? 'string',
|
|
171
|
+
enum: schema.enum,
|
|
172
|
+
default: schema.default,
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
function mapRequestBody(rb) {
|
|
177
|
+
const contentType = Object.keys(rb.content ?? {})[0] ?? 'application/json';
|
|
178
|
+
const schema = rb.content?.[contentType]?.schema ?? {};
|
|
179
|
+
const requiredFields = schema.required ?? [];
|
|
180
|
+
const properties = (schema.properties ?? {});
|
|
181
|
+
const fields = Object.entries(properties).map(([name, prop]) => ({
|
|
182
|
+
name,
|
|
183
|
+
// Commander stores opts as camelCase of the kebab-case flag name
|
|
184
|
+
optKey: lodash_1.default.camelCase(lodash_1.default.kebabCase(name)),
|
|
185
|
+
type: prop.type ?? 'string',
|
|
186
|
+
required: requiredFields.includes(name),
|
|
187
|
+
description: prop.description ?? name,
|
|
188
|
+
enum: prop.enum,
|
|
189
|
+
}));
|
|
190
|
+
return {
|
|
191
|
+
description: rb.description ?? 'Request body',
|
|
192
|
+
required: rb.required ?? false,
|
|
193
|
+
contentType,
|
|
194
|
+
schema: schema,
|
|
195
|
+
fields,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/** Returns 'sse' when any 2xx response declares a text/event-stream content type. */
|
|
199
|
+
function detectStreaming(rawResponses) {
|
|
200
|
+
for (const [code, response] of Object.entries(rawResponses)) {
|
|
201
|
+
if (!code.startsWith('2'))
|
|
202
|
+
continue;
|
|
203
|
+
const r = response;
|
|
204
|
+
if (r.content && 'text/event-stream' in r.content)
|
|
205
|
+
return 'sse';
|
|
206
|
+
}
|
|
207
|
+
return undefined;
|
|
208
|
+
}
|
|
209
|
+
function buildOptions(parameters, requestBody) {
|
|
210
|
+
const options = parameters.map((p) => ({
|
|
211
|
+
name: lodash_1.default.kebabCase(p.name),
|
|
212
|
+
description: `[${p.in}] (${p.schema.type}) ${p.description}`,
|
|
213
|
+
required: p.required,
|
|
214
|
+
type: oasTypeToTS(p.schema.type),
|
|
215
|
+
defaultValue: p.schema.default,
|
|
216
|
+
enum: p.schema.enum,
|
|
217
|
+
}));
|
|
218
|
+
if (requestBody) {
|
|
219
|
+
if (requestBody.fields.length > 0) {
|
|
220
|
+
// Generate one flag per body field for ergonomic UX
|
|
221
|
+
for (const f of requestBody.fields) {
|
|
222
|
+
options.push({
|
|
223
|
+
name: lodash_1.default.kebabCase(f.name),
|
|
224
|
+
description: `[body] (${f.type}) ${f.description}${f.enum ? ` (choices: ${f.enum.join('|')})` : ''}`,
|
|
225
|
+
required: f.required && requestBody.required,
|
|
226
|
+
type: oasTypeToTS(f.type),
|
|
227
|
+
enum: f.enum,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
// Always provide --data as an optional raw-JSON override
|
|
231
|
+
options.push({
|
|
232
|
+
name: 'data',
|
|
233
|
+
description: 'Override entire request body (JSON string or @filename)',
|
|
234
|
+
required: false,
|
|
235
|
+
type: 'string',
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
// No schema fields known — fall back to raw --data
|
|
240
|
+
options.push({
|
|
241
|
+
name: 'data',
|
|
242
|
+
description: `${requestBody.description} (JSON string or @filename)`,
|
|
243
|
+
required: requestBody.required,
|
|
244
|
+
type: 'string',
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return options;
|
|
249
|
+
}
|
|
250
|
+
function oasTypeToTS(oasType) {
|
|
251
|
+
if (oasType === 'integer' || oasType === 'number')
|
|
252
|
+
return 'number';
|
|
253
|
+
if (oasType === 'boolean')
|
|
254
|
+
return 'boolean';
|
|
255
|
+
return 'string';
|
|
256
|
+
}
|
|
257
|
+
function buildResponses(rawResponses) {
|
|
258
|
+
const result = {};
|
|
259
|
+
for (const [code, response] of Object.entries(rawResponses)) {
|
|
260
|
+
const r = response;
|
|
261
|
+
const contentType = r.content ? Object.keys(r.content)[0] : undefined;
|
|
262
|
+
let fields = [];
|
|
263
|
+
if (contentType) {
|
|
264
|
+
const schema = r.content?.[contentType]?.schema;
|
|
265
|
+
if (schema) {
|
|
266
|
+
const target = schema.type === 'array' ? (schema.items ?? {}) : schema;
|
|
267
|
+
const properties = (target.properties ?? {});
|
|
268
|
+
fields = Object.entries(properties).map(([name, prop]) => ({
|
|
269
|
+
name,
|
|
270
|
+
type: prop.type ?? 'string',
|
|
271
|
+
description: prop.description ?? name,
|
|
272
|
+
}));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
result[code] = {
|
|
276
|
+
statusCode: code,
|
|
277
|
+
description: r.description,
|
|
278
|
+
contentType,
|
|
279
|
+
fields,
|
|
280
|
+
isArray: contentType
|
|
281
|
+
? r.content?.[contentType]?.schema?.type === 'array'
|
|
282
|
+
: false,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
return result;
|
|
286
|
+
}
|
|
287
|
+
function extractBaseUrl(api) {
|
|
288
|
+
const server = api.servers?.[0];
|
|
289
|
+
if (!server)
|
|
290
|
+
return 'http://localhost';
|
|
291
|
+
return server.url;
|
|
292
|
+
}
|
|
293
|
+
function buildGlobalOptions() {
|
|
294
|
+
return [
|
|
295
|
+
{
|
|
296
|
+
name: 'endpoint',
|
|
297
|
+
description: 'Override the base API URL',
|
|
298
|
+
required: false,
|
|
299
|
+
type: 'string',
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
name: 'format',
|
|
303
|
+
description: 'Output format',
|
|
304
|
+
required: false,
|
|
305
|
+
type: 'string',
|
|
306
|
+
defaultValue: 'json',
|
|
307
|
+
enum: ['json', 'yaml', 'table'],
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
name: 'query',
|
|
311
|
+
description: 'JMESPath expression to filter the response',
|
|
312
|
+
required: false,
|
|
313
|
+
type: 'string',
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
name: 'all-pages',
|
|
317
|
+
description: 'Auto-follow Link rel="next" headers to collect all pages',
|
|
318
|
+
required: false,
|
|
319
|
+
type: 'boolean',
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
name: 'verbose',
|
|
323
|
+
description: 'Enable verbose request/response logging',
|
|
324
|
+
required: false,
|
|
325
|
+
type: 'boolean',
|
|
326
|
+
},
|
|
327
|
+
];
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=schema-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-analyzer.js","sourceRoot":"","sources":["../../src/analyzer/schema-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { OpenAPIV3 } from 'openapi-types';
|
|
2
|
+
import { AuthConfig } from '../types/index';
|
|
3
|
+
/**
|
|
4
|
+
* Inspects the securitySchemes block and returns the primary auth configuration.
|
|
5
|
+
*
|
|
6
|
+
* Precedence (first match wins):
|
|
7
|
+
* bearer with x-cli-token-url → dynamic (custom token provider)
|
|
8
|
+
* oauth2 clientCredentials → oauth2-cc
|
|
9
|
+
* bearer → bearer
|
|
10
|
+
* apiKey → apiKey
|
|
11
|
+
* basic → basic
|
|
12
|
+
* oauth2 (other flows) → bearer (treat access token as bearer)
|
|
13
|
+
* none → none
|
|
14
|
+
*
|
|
15
|
+
* All env var names are prefixed with the CLI name in SCREAMING_SNAKE_CASE so
|
|
16
|
+
* multiple generated CLIs can coexist in the same shell environment.
|
|
17
|
+
*/
|
|
18
|
+
export declare function extractAuthConfig(api: OpenAPIV3.Document, cliName: string): {
|
|
19
|
+
authConfig: AuthConfig;
|
|
20
|
+
allAuthSchemes: string[];
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=auth-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-provider.d.ts","sourceRoot":"","sources":["../../src/auth/auth-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAe,MAAM,gBAAgB,CAAC;AAWzD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,SAAS,CAAC,QAAQ,EACvB,OAAO,EAAE,MAAM,GACd;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,cAAc,EAAE,MAAM,EAAE,CAAA;CAAE,CAqFtD"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.extractAuthConfig = extractAuthConfig;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
/**
|
|
9
|
+
* Derives an environment variable name from the CLI name and a suffix.
|
|
10
|
+
* e.g. cliName="my-service" + suffix="TOKEN" → "MY_SERVICE_TOKEN"
|
|
11
|
+
* cliName="petstore-v2" + suffix="API_KEY" → "PETSTORE_V2_API_KEY"
|
|
12
|
+
*/
|
|
13
|
+
function makeEnvVar(cliName, suffix) {
|
|
14
|
+
return `${lodash_1.default.snakeCase(cliName).toUpperCase()}_${suffix}`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Inspects the securitySchemes block and returns the primary auth configuration.
|
|
18
|
+
*
|
|
19
|
+
* Precedence (first match wins):
|
|
20
|
+
* bearer with x-cli-token-url → dynamic (custom token provider)
|
|
21
|
+
* oauth2 clientCredentials → oauth2-cc
|
|
22
|
+
* bearer → bearer
|
|
23
|
+
* apiKey → apiKey
|
|
24
|
+
* basic → basic
|
|
25
|
+
* oauth2 (other flows) → bearer (treat access token as bearer)
|
|
26
|
+
* none → none
|
|
27
|
+
*
|
|
28
|
+
* All env var names are prefixed with the CLI name in SCREAMING_SNAKE_CASE so
|
|
29
|
+
* multiple generated CLIs can coexist in the same shell environment.
|
|
30
|
+
*/
|
|
31
|
+
function extractAuthConfig(api, cliName) {
|
|
32
|
+
const schemes = (api.components?.securitySchemes ?? {});
|
|
33
|
+
const allAuthSchemes = Object.keys(schemes);
|
|
34
|
+
let authConfig = { type: 'none', envVar: '' };
|
|
35
|
+
for (const scheme of Object.values(schemes)) {
|
|
36
|
+
const ext = scheme;
|
|
37
|
+
// ── dynamic (bearer + x-cli-token-url extension) ─────────────────────────
|
|
38
|
+
if (scheme.type === 'http' &&
|
|
39
|
+
scheme.scheme === 'bearer' &&
|
|
40
|
+
typeof ext['x-cli-token-url'] === 'string') {
|
|
41
|
+
const rawEnvVars = ext['x-cli-token-env-vars'];
|
|
42
|
+
const tokenEnvVars = Array.isArray(rawEnvVars)
|
|
43
|
+
? rawEnvVars.map((v) => ({
|
|
44
|
+
name: String(v.name),
|
|
45
|
+
env: String(v.env),
|
|
46
|
+
}))
|
|
47
|
+
: [];
|
|
48
|
+
authConfig = {
|
|
49
|
+
type: 'dynamic',
|
|
50
|
+
envVar: '',
|
|
51
|
+
tokenUrl: ext['x-cli-token-url'],
|
|
52
|
+
tokenEnvVars,
|
|
53
|
+
};
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
// ── oauth2 client credentials ─────────────────────────────────────────────
|
|
57
|
+
if (scheme.type === 'oauth2') {
|
|
58
|
+
const oauth2 = scheme;
|
|
59
|
+
const ccFlow = oauth2.flows.clientCredentials;
|
|
60
|
+
if (ccFlow) {
|
|
61
|
+
authConfig = {
|
|
62
|
+
type: 'oauth2-cc',
|
|
63
|
+
envVar: '',
|
|
64
|
+
tokenUrl: ccFlow.tokenUrl,
|
|
65
|
+
clientIdEnvVar: makeEnvVar(cliName, 'CLIENT_ID'),
|
|
66
|
+
clientSecretEnvVar: makeEnvVar(cliName, 'CLIENT_SECRET'),
|
|
67
|
+
scopesEnvVar: makeEnvVar(cliName, 'SCOPES'),
|
|
68
|
+
};
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
// Other OAuth2 flows — treat resulting access token as bearer
|
|
72
|
+
authConfig = { type: 'bearer', envVar: makeEnvVar(cliName, 'TOKEN') };
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
// ── bearer ────────────────────────────────────────────────────────────────
|
|
76
|
+
if (scheme.type === 'http' &&
|
|
77
|
+
scheme.scheme === 'bearer') {
|
|
78
|
+
authConfig = { type: 'bearer', envVar: makeEnvVar(cliName, 'TOKEN') };
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
// ── apiKey ────────────────────────────────────────────────────────────────
|
|
82
|
+
if (scheme.type === 'apiKey') {
|
|
83
|
+
const ks = scheme;
|
|
84
|
+
authConfig = {
|
|
85
|
+
type: 'apiKey',
|
|
86
|
+
headerName: ks.name,
|
|
87
|
+
envVar: makeEnvVar(cliName, 'API_KEY'),
|
|
88
|
+
};
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
// ── basic ─────────────────────────────────────────────────────────────────
|
|
92
|
+
if (scheme.type === 'http' &&
|
|
93
|
+
scheme.scheme === 'basic') {
|
|
94
|
+
authConfig = { type: 'basic', envVar: makeEnvVar(cliName, 'CREDENTIALS') };
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return { authConfig, allAuthSchemes };
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=auth-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-provider.js","sourceRoot":"","sources":["../../src/auth/auth-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-generator.d.ts","sourceRoot":"","sources":["../../src/generator/command-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGjE,wBAAsB,eAAe,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAkE3F"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.generateProject = generateProject;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const template_engine_1 = require("./template-engine");
|
|
39
|
+
async function generateProject(structure) {
|
|
40
|
+
const files = [];
|
|
41
|
+
// 1. package.json for the generated CLI
|
|
42
|
+
files.push({
|
|
43
|
+
relativePath: 'package.json',
|
|
44
|
+
content: await (0, template_engine_1.renderTemplate)('package.json.hbs', { structure }),
|
|
45
|
+
});
|
|
46
|
+
// 2. tsconfig.json
|
|
47
|
+
files.push({
|
|
48
|
+
relativePath: 'tsconfig.json',
|
|
49
|
+
content: await (0, template_engine_1.renderTemplate)('tsconfig.json.hbs', { structure }),
|
|
50
|
+
});
|
|
51
|
+
// 3. Main entry: src/index.ts
|
|
52
|
+
files.push({
|
|
53
|
+
relativePath: path.join('src', 'index.ts'),
|
|
54
|
+
content: await (0, template_engine_1.renderTemplate)('index.ts.hbs', { structure }),
|
|
55
|
+
});
|
|
56
|
+
// 4. One command file per group: src/commands/<group-name>.ts
|
|
57
|
+
for (const group of structure.groups) {
|
|
58
|
+
files.push({
|
|
59
|
+
relativePath: path.join('src', 'commands', `${group.name}.ts`),
|
|
60
|
+
content: await (0, template_engine_1.renderTemplate)('command.ts.hbs', { structure, group }),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
// 4b. Flat commands (untagged operations): src/flat-commands.ts
|
|
64
|
+
if (structure.flatCommands.length > 0) {
|
|
65
|
+
files.push({
|
|
66
|
+
relativePath: path.join('src', 'flat-commands.ts'),
|
|
67
|
+
content: await (0, template_engine_1.renderTemplate)('flat-commands.ts.hbs', { structure, flatCommands: structure.flatCommands }),
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
// 5. Shared API client: src/lib/api-client.ts
|
|
71
|
+
files.push({
|
|
72
|
+
relativePath: path.join('src', 'lib', 'api-client.ts'),
|
|
73
|
+
content: await (0, template_engine_1.renderTemplate)('api-client.ts.hbs', { structure }),
|
|
74
|
+
});
|
|
75
|
+
// 6. README (English default + Chinese)
|
|
76
|
+
files.push({
|
|
77
|
+
relativePath: 'README.md',
|
|
78
|
+
content: await (0, template_engine_1.renderTemplate)('README.md.hbs', { structure }),
|
|
79
|
+
});
|
|
80
|
+
files.push({
|
|
81
|
+
relativePath: 'README.zh.md',
|
|
82
|
+
content: await (0, template_engine_1.renderTemplate)('README.zh.md.hbs', { structure }),
|
|
83
|
+
});
|
|
84
|
+
// 7. SKILL.md — Claude Code skill descriptor
|
|
85
|
+
files.push({
|
|
86
|
+
relativePath: 'SKILL.md',
|
|
87
|
+
content: await (0, template_engine_1.renderTemplate)('SKILL.md.hbs', { structure }),
|
|
88
|
+
});
|
|
89
|
+
// 8. bin shebang wrapper
|
|
90
|
+
files.push({
|
|
91
|
+
relativePath: path.join('bin', structure.name),
|
|
92
|
+
content: `#!/usr/bin/env node\nrequire('../dist/index.js');\n`,
|
|
93
|
+
});
|
|
94
|
+
return files;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=command-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-generator.js","sourceRoot":"","sources":["../../src/generator/command-generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,0CAkEC;AAtED,2CAA6B;AAE7B,uDAAmD;AAE5C,KAAK,UAAU,eAAe,CAAC,SAA2B;IAC/D,MAAM,KAAK,GAAoB,EAAE,CAAC;IAElC,wCAAwC;IACxC,KAAK,CAAC,IAAI,CAAC;QACT,YAAY,EAAE,cAAc;QAC5B,OAAO,EAAE,MAAM,IAAA,gCAAc,EAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,CAAC;KACjE,CAAC,CAAC;IAEH,mBAAmB;IACnB,KAAK,CAAC,IAAI,CAAC;QACT,YAAY,EAAE,eAAe;QAC7B,OAAO,EAAE,MAAM,IAAA,gCAAc,EAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,CAAC;KAClE,CAAC,CAAC;IAEH,8BAA8B;IAC9B,KAAK,CAAC,IAAI,CAAC;QACT,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC;QAC1C,OAAO,EAAE,MAAM,IAAA,gCAAc,EAAC,cAAc,EAAE,EAAE,SAAS,EAAE,CAAC;KAC7D,CAAC,CAAC;IAEH,8DAA8D;IAC9D,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC;YACT,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC;YAC9D,OAAO,EAAE,MAAM,IAAA,gCAAc,EAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;SACtE,CAAC,CAAC;IACL,CAAC;IAED,gEAAgE;IAChE,IAAI,SAAS,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC;YACT,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,kBAAkB,CAAC;YAClD,OAAO,EAAE,MAAM,IAAA,gCAAc,EAAC,sBAAsB,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC;SAC3G,CAAC,CAAC;IACL,CAAC;IAED,8CAA8C;IAC9C,KAAK,CAAC,IAAI,CAAC;QACT,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,CAAC;QACtD,OAAO,EAAE,MAAM,IAAA,gCAAc,EAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,CAAC;KAClE,CAAC,CAAC;IAEH,wCAAwC;IACxC,KAAK,CAAC,IAAI,CAAC;QACT,YAAY,EAAE,WAAW;QACzB,OAAO,EAAE,MAAM,IAAA,gCAAc,EAAC,eAAe,EAAE,EAAE,SAAS,EAAE,CAAC;KAC9D,CAAC,CAAC;IACH,KAAK,CAAC,IAAI,CAAC;QACT,YAAY,EAAE,cAAc;QAC5B,OAAO,EAAE,MAAM,IAAA,gCAAc,EAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,CAAC;KACjE,CAAC,CAAC;IAEH,6CAA6C;IAC7C,KAAK,CAAC,IAAI,CAAC;QACT,YAAY,EAAE,UAAU;QACxB,OAAO,EAAE,MAAM,IAAA,gCAAc,EAAC,cAAc,EAAE,EAAE,SAAS,EAAE,CAAC;KAC7D,CAAC,CAAC;IAEH,yBAAyB;IACzB,KAAK,CAAC,IAAI,CAAC;QACT,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC;QAC9C,OAAO,EAAE,qDAAqD;KAC/D,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-engine.d.ts","sourceRoot":"","sources":["../../src/generator/template-engine.ts"],"names":[],"mappings":"AAYA,wBAAsB,cAAc,CAClC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,MAAM,CAAC,CAKjB"}
|