From d33af710e2bcf1b5b4970a8350b80b815405fcd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Louren=C3=A7o?= Date: Thu, 6 Apr 2023 00:04:24 -0300 Subject: [PATCH] fix: faster cache key factory for range --- classes/range.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/classes/range.js b/classes/range.js index a791d912..988c6b7c 100644 --- a/classes/range.js +++ b/classes/range.js @@ -81,8 +81,8 @@ class Range { // memoize range parsing for performance. // this is a very hot path, and fully deterministic. - const memoOpts = Object.keys(this.options).join(',') - const memoKey = `parseRange:${memoOpts}:${range}` + const memoOpts = buildMemoKeyFromOptions(this.options) + const memoKey = memoOpts + ':' + range const cached = cache.get(memoKey) if (cached) { return cached @@ -190,6 +190,15 @@ class Range { return false } } + +function buildMemoKeyFromOptions (options) { + return ( + (options.loose ? 1 << 1 : 0) + | (options.includePrerelease ? 1 << 2 : 0) + | (options.rtl ? 1 << 3 : 0) + ) + '' +} + module.exports = Range const LRU = require('lru-cache')