1 | "use strict";
|
2 | var __rest = (this && this.__rest) || function (s, e) {
|
3 | var t = {};
|
4 | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
5 | t[p] = s[p];
|
6 | if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
7 | for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
|
8 | t[p[i]] = s[p[i]];
|
9 | return t;
|
10 | };
|
11 | Object.defineProperty(exports, "__esModule", { value: true });
|
12 | const ts_types_1 = require("@salesforce/ts-types");
|
13 | const ts_types_2 = require("@salesforce/ts-types");
|
14 | const ts_types_3 = require("@salesforce/ts-types");
|
15 | const sfdxFlags_1 = require("./sfdxFlags");
|
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 | class DocOpts {
|
75 | constructor(cmd) {
|
76 | this.cmd = cmd;
|
77 |
|
78 | this.flags = {};
|
79 | this.flagList = ts_types_2.definiteEntriesOf(this.cmd.flags)
|
80 | .filter(([k, v]) => !v.hidden)
|
81 | .map(([k, v]) => {
|
82 | const { description } = v, rest = __rest(v, ["description"]);
|
83 | const flag = Object.assign({ description: ts_types_1.ensure(description) }, rest, { name: k });
|
84 | this.flags[k] = flag;
|
85 | return flag;
|
86 | });
|
87 | }
|
88 | static generate(cmdDef) {
|
89 | return new DocOpts(cmdDef).toString();
|
90 | }
|
91 | toString() {
|
92 | try {
|
93 | const groups = Object.values(this.groupFlagElements());
|
94 |
|
95 | const varargs = this.cmd.getVarArgsConfig();
|
96 | let varargsElement = '';
|
97 | if (varargs) {
|
98 | varargsElement = 'name=value...';
|
99 | const isRequired = ts_types_1.isPlainObject(varargs) && varargs.required;
|
100 | if (!isRequired) {
|
101 | varargsElement = `[${varargsElement}]`;
|
102 | }
|
103 | varargsElement = `${varargsElement} `;
|
104 | }
|
105 | return `<%= command.id %> ${varargsElement}${groups.join(' ')}`;
|
106 | }
|
107 | catch (e) {
|
108 |
|
109 | return '';
|
110 | }
|
111 | }
|
112 | |
113 |
|
114 |
|
115 | groupFlagElements() {
|
116 | const groups = this.categorizeFlags();
|
117 | const elementMap = {};
|
118 |
|
119 | this.generateElements(elementMap, groups.requiredFlags);
|
120 | this.generateElements(elementMap, groups.optionalFlags);
|
121 | this.generateElements(elementMap, groups.sometimesBuiltinFlags);
|
122 | this.generateElements(elementMap, groups.alwaysBuiltinFlags);
|
123 | for (const flag of this.flagList) {
|
124 | if (ts_types_1.isArray(flag.dependsOn)) {
|
125 | this.combineElementsToFlag(elementMap, flag.name, flag.dependsOn, ' ');
|
126 | }
|
127 | if (ts_types_1.isArray(flag.exclusive)) {
|
128 | this.combineElementsToFlag(elementMap, flag.name, flag.exclusive, ' | ');
|
129 | }
|
130 | }
|
131 |
|
132 |
|
133 | for (const remainingFlagName of Object.keys(this.flags)) {
|
134 | const remainingFlag = ts_types_1.ensure(this.flags[remainingFlagName]);
|
135 | if (!remainingFlag.required) {
|
136 | elementMap[remainingFlag.name] = `[${elementMap[remainingFlag.name]}]`;
|
137 | }
|
138 | }
|
139 | return elementMap;
|
140 | }
|
141 | |
142 |
|
143 |
|
144 |
|
145 |
|
146 |
|
147 |
|
148 |
|
149 |
|
150 |
|
151 |
|
152 |
|
153 |
|
154 | combineElementsToFlag(elementMap, flagName, flagNames, unionString) {
|
155 | if (!this.flags[flagName]) {
|
156 | return;
|
157 | }
|
158 | let isRequired = ts_types_1.ensure(this.flags[flagName]).required;
|
159 | if (!ts_types_1.isBoolean(isRequired) || !isRequired) {
|
160 | isRequired = flagNames.reduce((required, toCombine) => required || (this.cmd.flags[toCombine].required || false), false);
|
161 | }
|
162 | for (const toCombine of flagNames) {
|
163 | elementMap[flagName] = `${elementMap[flagName]}${unionString}${elementMap[toCombine]}`;
|
164 |
|
165 | delete elementMap[toCombine];
|
166 | delete this.flags[toCombine];
|
167 | }
|
168 | if (isRequired) {
|
169 | elementMap[flagName] = `(${elementMap[flagName]})`;
|
170 | }
|
171 | else {
|
172 | elementMap[flagName] = `[${elementMap[flagName]}]`;
|
173 | }
|
174 |
|
175 | delete this.flags[flagName];
|
176 | }
|
177 | |
178 |
|
179 |
|
180 |
|
181 |
|
182 |
|
183 |
|
184 | categorizeFlags() {
|
185 | const alwaysBuiltinFlags = [];
|
186 | const alwaysBuiltinFlagKeys = Object.keys(sfdxFlags_1.requiredBuiltinFlags);
|
187 | const sometimesBuiltinFlags = [];
|
188 | const sometimesBuiltinFlagKeys = Object.keys(sfdxFlags_1.optionalBuiltinFlags);
|
189 | const requiredFlags = [];
|
190 | const optionalFlags = [];
|
191 |
|
192 | for (const flag of this.flagList) {
|
193 | if (alwaysBuiltinFlagKeys.find(key => key === flag.name)) {
|
194 | alwaysBuiltinFlags.push(flag);
|
195 | }
|
196 | else if (sometimesBuiltinFlagKeys.find(key => key === flag.name)) {
|
197 | sometimesBuiltinFlags.push(flag);
|
198 | }
|
199 | else if (flag.required) {
|
200 | requiredFlags.push(flag);
|
201 | }
|
202 | else {
|
203 | optionalFlags.push(flag);
|
204 | }
|
205 | }
|
206 | return {
|
207 | requiredFlags,
|
208 | optionalFlags,
|
209 | sometimesBuiltinFlags,
|
210 | alwaysBuiltinFlags
|
211 | };
|
212 | }
|
213 | |
214 |
|
215 |
|
216 |
|
217 |
|
218 | generateElements(elementMap = {}, flagGroups) {
|
219 | const elementStrs = [];
|
220 | for (const flag of flagGroups) {
|
221 | const kind = ts_types_1.ensure(ts_types_1.getString(flag, 'kind'));
|
222 |
|
223 | const flagName = flag.char ? `-${flag.char}` : `--${flag.name}`;
|
224 | let type = '';
|
225 | if (kind !== 'boolean') {
|
226 | if (kind === 'enum') {
|
227 | const options = ts_types_1.ensureArray(ts_types_3.get(flag, 'options'));
|
228 | type = ` ${options.join('|')}`;
|
229 | }
|
230 | else {
|
231 | type = ` <${kind || 'string'}>`;
|
232 | }
|
233 | }
|
234 | const element = `${flagName}${type}`;
|
235 | elementMap[flag.name] = element;
|
236 | elementStrs.push(element);
|
237 | }
|
238 | return elementStrs;
|
239 | }
|
240 | }
|
241 | exports.DocOpts = DocOpts;
|
242 |
|
\ | No newline at end of file |