Skip to content

Commit e2bc676

Browse files
committed
perf: don't use regex
1 parent 8b3245f commit e2bc676

File tree

1 file changed

+33
-27
lines changed

1 file changed

+33
-27
lines changed

src/node.ts

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -23,33 +23,39 @@ const colors: number[] =
2323

2424
const inspectOpts: InspectOptions = Object.keys(process.env)
2525
.filter((key) => /^debug_/i.test(key))
26-
.reduce(
27-
(obj, key) => {
28-
// Camel-case
29-
const prop = key
30-
.slice(6)
31-
.toLowerCase()
32-
.replace(/_([a-z])/g, (_, k) => k.toUpperCase())
33-
34-
// Coerce string value into JS value
35-
let value: any = process.env[key]
36-
if (value === 'null') {
37-
value = null
38-
// TODO perf: don't use regex
39-
} else if (/^yes|on|true|enabled$/i.test(value)) {
40-
value = true
41-
// TODO perf: don't use regex
42-
} else if (/^no|off|false|disabled$/i.test(value)) {
43-
value = false
44-
} else {
45-
value = Number(value)
46-
}
47-
48-
obj[prop] = value
49-
return obj
50-
},
51-
{} as Record<string, any>,
52-
)
26+
.reduce<Record<string, any>>((obj, key) => {
27+
// Camel-case
28+
const prop = key
29+
.slice(6)
30+
.toLowerCase()
31+
.replace(/_([a-z])/g, (_, k) => k.toUpperCase())
32+
33+
// Coerce string value into JS value
34+
let value: any = process.env[key]
35+
const lowerCase = typeof value === 'string' && value.toLowerCase()
36+
if (value === 'null') {
37+
value = null
38+
} else if (
39+
lowerCase === 'yes' ||
40+
lowerCase === 'on' ||
41+
lowerCase === 'true' ||
42+
lowerCase === 'enabled'
43+
) {
44+
value = true
45+
} else if (
46+
lowerCase === 'no' ||
47+
lowerCase === 'off' ||
48+
lowerCase === 'false' ||
49+
lowerCase === 'disabled'
50+
) {
51+
value = false
52+
} else {
53+
value = Number(value)
54+
}
55+
56+
obj[prop] = value
57+
return obj
58+
}, {})
5359

5460
/**
5561
* Is stdout a TTY? Colored output is enabled when `true`.

0 commit comments

Comments
 (0)