@@ -31,7 +31,7 @@ class Range {
31
31
this . set = range
32
32
. split ( '||' )
33
33
// map the range to a 2d array of comparators
34
- . map ( r => this . parseRange ( r . trim ( ) ) )
34
+ . map ( r => this . parseRange ( r ) )
35
35
// throw out any comparator lists that are empty
36
36
// this generally means that it was not a valid range, which is allowed
37
37
// in loose mode, but will still throw if the WHOLE range is invalid.
@@ -81,8 +81,8 @@ class Range {
81
81
82
82
// memoize range parsing for performance.
83
83
// this is a very hot path, and fully deterministic.
84
- const memoOpts = Object . keys ( this . options ) . join ( ',' )
85
- const memoKey = `parseRange: ${ memoOpts } : ${ range } `
84
+ const memoOpts = buildMemoKeyFromOptions ( this . options )
85
+ const memoKey = memoOpts + range
86
86
const cached = cache . get ( memoKey )
87
87
if ( cached ) {
88
88
return cached
@@ -190,6 +190,44 @@ class Range {
190
190
return false
191
191
}
192
192
}
193
+
194
+ const memoKeyAllOpts = '1' ;
195
+ const memoKeyPreReleaseAndLooseOpts = '2' ;
196
+ const memoKeyPreReleaseAndRtlOpts = '3' ;
197
+ const memoKeyPreReleaseOpts = '4' ;
198
+ const memoKeyLooseAndRtlOpts = '5' ;
199
+ const memoKeyLooseOpts = '6' ;
200
+ const memoKeyRtlOpts = '7' ;
201
+ const memoKeyEmptyOpts = '8' ;
202
+
203
+ function buildMemoKeyFromOptions ( options ) {
204
+ if ( options . includePrerelease === true ) {
205
+ if ( options . loose === true && options . rtl === true ) {
206
+ return memoKeyAllOpts ;
207
+ }
208
+
209
+ if ( options . loose === true ) {
210
+ return memoKeyPreReleaseAndLooseOpts ;
211
+ }
212
+
213
+ if ( options . rtl === true ) {
214
+ return memoKeyPreReleaseAndRtlOpts ;
215
+ }
216
+
217
+ return memoKeyPreReleaseOpts ;
218
+ } else if ( options . loose === true ) {
219
+ if ( options . rtl === true ) {
220
+ return memoKeyLooseAndRtlOpts ;
221
+ }
222
+
223
+ return memoKeyLooseOpts ;
224
+ } else if ( options . rtl === true ) {
225
+ return memoKeyRtlOpts ;
226
+ } else {
227
+ return memoKeyEmptyOpts ;
228
+ }
229
+ }
230
+
193
231
module . exports = Range
194
232
195
233
const LRU = require ( 'lru-cache' )
0 commit comments