Skip to content

Commit 2bc0f82

Browse files
committed
fix: faster cache key factory for range
1 parent da08e01 commit 2bc0f82

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

classes/range.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ class Range {
8181

8282
// memoize range parsing for performance.
8383
// 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
8686
const cached = cache.get(memoKey)
8787
if (cached) {
8888
return cached
@@ -190,6 +190,15 @@ class Range {
190190
return false
191191
}
192192
}
193+
194+
function buildMemoKeyFromOptions (options) {
195+
return (
196+
(options.includePrerelease ? FLAG_INCLUDE_PRERELEASE : 0)
197+
| (options.loose ? FLAG_LOOSE : 0)
198+
| (options.rtl ? FLAG_RTL : 0)
199+
) + ''
200+
}
201+
193202
module.exports = Range
194203

195204
const LRU = require('lru-cache')
@@ -206,6 +215,7 @@ const {
206215
tildeTrimReplace,
207216
caretTrimReplace,
208217
} = require('../internal/re')
218+
const { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE, FLAG_RTL } = require('../internal/constants')
209219

210220
const isNullSet = c => c.value === '<0.0.0-0'
211221
const isAny = c => c.value === ''

internal/constants.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,7 @@ module.exports = {
1414
MAX_LENGTH,
1515
MAX_SAFE_INTEGER,
1616
MAX_SAFE_COMPONENT_LENGTH,
17+
FLAG_INCLUDE_PRERELEASE: 1 << 1,
18+
FLAG_LOOSE: 1 << 2,
19+
FLAG_RTL: 1 << 3,
1720
}

0 commit comments

Comments
 (0)