1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | exports.parseRawFlags = parseRawFlags
|
14 | function 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 |
|
32 | exports.aggressiveJSONParse = aggressiveJSONParse
|
33 | function 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 | }
|