summaryrefslogtreecommitdiff
path: root/node_modules/semver/internal/lrucache.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/semver/internal/lrucache.js')
-rw-r--r--node_modules/semver/internal/lrucache.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/node_modules/semver/internal/lrucache.js b/node_modules/semver/internal/lrucache.js
new file mode 100644
index 0000000..b8bf526
--- /dev/null
+++ b/node_modules/semver/internal/lrucache.js
@@ -0,0 +1,42 @@
+'use strict'
+
+class LRUCache {
+ constructor () {
+ this.max = 1000
+ this.map = new Map()
+ }
+
+ get (key) {
+ const value = this.map.get(key)
+ if (value === undefined) {
+ return undefined
+ } else {
+ // Remove the key from the map and add it to the end
+ this.map.delete(key)
+ this.map.set(key, value)
+ return value
+ }
+ }
+
+ delete (key) {
+ return this.map.delete(key)
+ }
+
+ set (key, value) {
+ const deleted = this.delete(key)
+
+ if (!deleted && value !== undefined) {
+ // If cache is full, delete the least recently used item
+ if (this.map.size >= this.max) {
+ const firstKey = this.map.keys().next().value
+ this.delete(firstKey)
+ }
+
+ this.map.set(key, value)
+ }
+
+ return this
+ }
+}
+
+module.exports = LRUCache