-
Notifications
You must be signed in to change notification settings - Fork 80
/
cliParts.js
96 lines (87 loc) · 2.87 KB
/
cliParts.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/**
* Parse command-line options
*
* Latest version: https://github.com/oasis-tcs/odata-openapi/blob/main/lib/cliOptions.js
*/
const util = require("node:util");
module.exports = { parseArguments };
function parseArguments(argv) {
const usage = `Usage: odata-openapi3 <options> <source file>
Options:
--basePath base path (default: /service-root)
--description default description if none is annotated
-d, --diagram include YUML diagram
-h, --help show this info
--host host (default: localhost)
-k, --keep root resource to keep (can be specified multiple times with one name each)
--levels maximum number of path segments
-o, --openapi-version 3.0.0 to 3.0.3 or 3.1.0 (default: 3.0.2)
-p, --pretty pretty-print JSON result
--scheme scheme (default: http)
--skipBatchPath skips the generation of the $batch path, (default: false)
-t, --target target file (default: source file basename + .openapi3.json)
--title default title if none is annotated`;
let parsed;
try {
parsed = util.parseArgs({
args: argv,
options: {
basePath: { type: "string" },
description: { type: "string" },
diagram: { type: "boolean", short: "d" },
help: { type: "boolean", short: "h" },
host: { type: "string" },
keep: { type: "string", short: "k", multiple: true },
levels: { type: "string" },
"openapi-version": { type: "string", short: "o" },
pretty: { type: "boolean", short: "p" },
scheme: { type: "string" },
skipBatchPath: { type: "boolean" },
target: { type: "string", short: "t" },
title: { type: "string" },
},
allowPositionals: true,
});
} catch (e) {
return { unknown: e.message, usage };
}
if (parsed.values.help || parsed.positionals.length !== 1) return { usage };
const source = parsed.positionals[0];
const target =
parsed.values.target ||
(source.lastIndexOf(".") > 0
? source.substring(0, source.lastIndexOf("."))
: source) + ".openapi3.json";
const options = {};
for (const [name, value] of Object.entries(parsed.values)) {
switch (name) {
case "description":
options.defaultDescription = value;
break;
case "keep":
options.rootResourcesToKeep = value;
break;
case "levels": {
const l = Number(value);
if (!isNaN(l)) options.maxLevels = l;
break;
}
case "openapi-version":
options.openapiVersion = value;
break;
case "target":
break;
case "title":
options.defaultTitle = value;
break;
default:
options[name] = value;
break;
}
}
return {
source,
target,
options,
};
}