-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Expand file tree
/
Copy pathparseEnvFlags.ts
More file actions
39 lines (30 loc) · 866 Bytes
/
parseEnvFlags.ts
File metadata and controls
39 lines (30 loc) · 866 Bytes
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
import type { IWebpackEnv } from '..';
const ENV_FLAG_RE = /--env\.(\w+)(?:=(.+))?/;
export function parseEnvFlags(flags: string[]): IWebpackEnv {
const envFlags = flags.filter((flag) => flag.includes('--env.'));
const env = {};
envFlags.map((flag) => {
let [_, name, v] = ENV_FLAG_RE.exec(flag);
let value: any = v;
// convert --env.foo to --env.foo=true
if (value === undefined) {
value = true;
}
// convert true/false to boolean
if (value === 'true' || value === 'false') {
value = value === 'true';
}
// convert numbers
if (!isNaN(value) && !isNaN(parseFloat(value))) {
value = +value;
}
// duplicate key/name - convert to array
if (name in env && value) {
const orig = Array.isArray(env[name]) ? env[name] : [env[name]];
env[name] = [...orig, value];
} else {
env[name] = value;
}
});
return env;
}