UNPKG

1.13 kBJavaScriptView Raw
1/* Get flags from `raw` data
2
3Needed for commands using Command.strict = false
4*/
5
6/** Usage:
7const { flags, raw } = this.parse(addonsCreateCommand)
8// flags = {}
9const rawFlags = parseRawFlags(raw)
10// rawFlags = {stuff: yay!}
11*/
12
13exports.parseRawFlags = parseRawFlags
14function parseRawFlags(raw) {
15 const rawFlags = raw.reduce((acc, curr, index, array) => {
16 if (curr.input.match(/^-{1,2}/)) {
17 const key = curr.input.replace(/^-{1,2}/, '')
18 const next = array[index + 1]
19 if (!next) {
20 acc[key] = true
21 } else if (next && next.input && next.input.match(/^-{1,2}/)) {
22 acc[key] = true
23 } else {
24 acc[key] = next ? aggressiveJSONParse(next.input) : true
25 }
26 }
27 return acc
28 }, {})
29 return rawFlags
30}
31
32exports.aggressiveJSONParse = aggressiveJSONParse
33function aggressiveJSONParse(value) {
34 if (value === 'true') {
35 return true
36 }
37 if (value === 'false') {
38 return false
39 }
40 let parsed
41 try {
42 parsed = JSON.parse(value)
43 } catch (e) {
44 try {
45 parsed = JSON.parse(`"${value}"`)
46 } catch (e) {
47 parsed = value
48 }
49 }
50 return parsed
51}