(flags: string[])
| 3 | const ENV_FLAG_RE = /--env\.(\w+)(?:=(.+))?/; |
| 4 | |
| 5 | export function parseEnvFlags(flags: string[]): IWebpackEnv { |
| 6 | const envFlags = flags.filter((flag) => flag.includes('--env.')); |
| 7 | |
| 8 | const env = {}; |
| 9 | |
| 10 | envFlags.map((flag) => { |
| 11 | let [_, name, v] = ENV_FLAG_RE.exec(flag); |
| 12 | let value: any = v; |
| 13 | |
| 14 | // convert --env.foo to --env.foo=true |
| 15 | if (value === undefined) { |
| 16 | value = true; |
| 17 | } |
| 18 | |
| 19 | // convert true/false to boolean |
| 20 | if (value === 'true' || value === 'false') { |
| 21 | value = value === 'true'; |
| 22 | } |
| 23 | |
| 24 | // convert numbers |
| 25 | if (!isNaN(value) && !isNaN(parseFloat(value))) { |
| 26 | value = +value; |
| 27 | } |
| 28 | |
| 29 | // duplicate key/name - convert to array |
| 30 | if (name in env && value) { |
| 31 | const orig = Array.isArray(env[name]) ? env[name] : [env[name]]; |
| 32 | env[name] = [...orig, value]; |
| 33 | } else { |
| 34 | env[name] = value; |
| 35 | } |
| 36 | }); |
| 37 | |
| 38 | return env; |
| 39 | } |
no test coverage detected