Skip to content

Commit 665eee4

Browse files
committed
perf: freeze parse options to avoid object allocation
1 parent 8a20c28 commit 665eee4

File tree

1 file changed

+33
-9
lines changed

1 file changed

+33
-9
lines changed

internal/parse-options.js

+33-9
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,41 @@
1+
const var1 = Object.freeze({ includePrerelease: true, loose: true, rtl: true });
2+
const var2 = Object.freeze({ includePrerelease: true, loose: true });
3+
const var3 = Object.freeze({ includePrerelease: true, rtl: true });
4+
const var4 = Object.freeze({ includePrerelease: true });
5+
const var5 = Object.freeze({ loose: true, rtl: true });
6+
const var6 = Object.freeze({ loose: true });
7+
const var7 = Object.freeze({ rtl: true });
8+
const emptyOpts = Object.freeze({});
9+
110
const parseOptions = options => {
2-
if (!options) return {};
11+
if (!options) return emptyOpts;
12+
13+
if (typeof options !== 'object') return var6;
314

4-
if (typeof options !== 'object') return { loose: true };
15+
if (options.includePrerelease) {
16+
if (options.loose && options.rtl) {
17+
return var1;
18+
}
519

6-
const parsedOptions = {};
20+
if (options.loose) {
21+
return var2;
22+
}
723

8-
// parse out just the options we care about so we always get a consistent
9-
// obj with keys in a consistent order.
24+
if (options.rtl) {
25+
return var3;
26+
}
1027

11-
if (options.includePrerelease) parsedOptions.includePrerelease = true;
12-
if (options.loose) parsedOptions.loose = true;
13-
if (options.rtl) parsedOptions.rtl = true;
28+
return var4;
29+
} else if (options.loose) {
30+
if (options.rtl) {
31+
return var5;
32+
}
1433

15-
return parsedOptions;
34+
return var6;
35+
} else if (options.rtl) {
36+
return var7;
37+
} else {
38+
return emptyOpts;
39+
}
1640
};
1741
module.exports = parseOptions;

0 commit comments

Comments
 (0)