Skip to content

Commit da4e439

Browse files
SamVerschuerensindresorhus
authored andcommitted
Automatically release memory when an item expires - fixes #14 (#19)
1 parent a90ebb8 commit da4e439

File tree

4 files changed

+14
-7
lines changed

4 files changed

+14
-7
lines changed

index.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22
const mimicFn = require('mimic-fn');
33
const isPromise = require('p-is-promise');
4+
const mapAgeCleaner = require('map-age-cleaner');
45

56
const cacheStore = new WeakMap();
67

@@ -30,8 +31,11 @@ module.exports = (fn, options) => {
3031
cachePromiseRejection: false
3132
}, options);
3233

34+
if (typeof options.maxAge === 'number') {
35+
mapAgeCleaner(options.cache);
36+
}
37+
3338
const {cache} = options;
34-
const noMaxAge = typeof options.maxAge !== 'number';
3539
options.maxAge = options.maxAge || 0;
3640

3741
const setData = (key, data) => {
@@ -47,11 +51,7 @@ module.exports = (fn, options) => {
4751
if (cache.has(key)) {
4852
const c = cache.get(key);
4953

50-
if (noMaxAge || Date.now() < c.maxAge) {
51-
return c.data;
52-
}
53-
54-
cache.delete(key);
54+
return c.data;
5555
}
5656

5757
const ret = fn.call(this, ...args);

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
"promise"
3333
],
3434
"dependencies": {
35+
"map-age-cleaner": "^0.1.1",
3536
"mimic-fn": "^1.0.0",
3637
"p-is-promise": "^1.1.0"
3738
},

readme.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
> [Memoize](https://en.wikipedia.org/wiki/Memoization) functions - An optimization used to speed up consecutive function calls by caching the result of calls with identical input
44
5+
Memory is automatically released when an item expires.
6+
57

68
## Install
79

test.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,11 @@ test('maxAge option deletes old items', async t => {
4545
const f = () => i++;
4646
const cache = new Map();
4747
const deleted = [];
48-
cache.delete = item => deleted.push(item);
48+
const remove = cache.delete.bind(cache);
49+
cache.delete = item => {
50+
deleted.push(item);
51+
return remove(item);
52+
};
4953
const memoized = m(f, {maxAge: 100, cache});
5054
t.is(memoized(1), 0);
5155
t.is(memoized(1), 0);

0 commit comments

Comments
 (0)