@keyvhq/memoize 2.2.4 → 2.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +3 -3
  2. package/src/index.js +16 -12
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@keyvhq/memoize",
3
3
  "description": "Memoize any function using Keyv as storage backend.",
4
4
  "homepage": "https://keyvhq.js.org",
5
- "version": "2.2.4",
5
+ "version": "2.2.7",
6
6
  "types": "./src/index.d.ts",
7
7
  "main": "src/index.js",
8
8
  "author": {
@@ -29,7 +29,7 @@
29
29
  "value"
30
30
  ],
31
31
  "dependencies": {
32
- "@keyvhq/core": "2.1.15",
32
+ "@keyvhq/core": "2.2.7",
33
33
  "mimic-fn": "~3.1.0",
34
34
  "null-prototype-object": "~1.2.5"
35
35
  },
@@ -49,5 +49,5 @@
49
49
  "publishConfig": {
50
50
  "access": "public"
51
51
  },
52
- "gitHead": "86ed5d141b95406553408f9a2bb7f808be728d62"
52
+ "gitHead": "520b1a21789d33f975b989f08bfeef683aeca018"
53
53
  }
package/src/index.js CHANGED
@@ -56,10 +56,11 @@ function memoize (
56
56
  function memoized (...args) {
57
57
  const rawKey = getKey(...args)
58
58
  const [key, forceExpiration] = Array.isArray(rawKey) ? rawKey : [rawKey]
59
+ const pendingKey = `${key}:${forceExpiration === true}`
59
60
 
60
- if (pending[key] !== undefined) return pending[key]
61
+ if (pending[pendingKey] !== undefined) return pending[pendingKey]
61
62
 
62
- pending[key] = getRaw(key).then(async data => {
63
+ pending[pendingKey] = getRaw(key).then(async data => {
63
64
  const hasValue = data ? data.value !== undefined : false
64
65
  const hasExpires = hasValue && typeof data.expires === 'number'
65
66
  const ttlValue = hasExpires ? data.expires - Date.now() : undefined
@@ -74,35 +75,38 @@ function memoize (
74
75
  const done = value => (objectMode ? [value, info] : value)
75
76
 
76
77
  if (hasValue && !isExpired && !isStale) {
77
- pending[key] = undefined
78
+ pending[pendingKey] = undefined
78
79
  return done(data.value)
79
80
  }
80
81
 
81
- const promise = Promise.resolve(fn(...args)).then(value =>
82
- updateStoredValue(key, value)
83
- )
82
+ const promise = Promise.resolve()
83
+ .then(() => fn(...args))
84
+ .then(value => updateStoredValue(key, value))
84
85
 
85
86
  if (isStale && !isExpired) {
86
87
  promise
87
- .then(() => (pending[key] = undefined))
88
- .catch(error => (info.staleError = error))
88
+ .then(() => (pending[pendingKey] = undefined))
89
+ .catch(error => {
90
+ pending[pendingKey] = undefined
91
+ info.staleError = error
92
+ })
89
93
  return done(data.value)
90
94
  }
91
95
 
92
96
  try {
93
97
  const value = await promise
94
- pending[key] = undefined
98
+ pending[pendingKey] = undefined
95
99
  return done(value)
96
100
  } catch (error) {
97
- pending[key] = undefined
101
+ pending[pendingKey] = undefined
98
102
  throw error
99
103
  }
100
104
  }).catch(error => {
101
- pending[key] = undefined
105
+ pending[pendingKey] = undefined
102
106
  throw error
103
107
  })
104
108
 
105
- return pending[key]
109
+ return pending[pendingKey]
106
110
  }
107
111
 
108
112
  mimicFn(memoized, fn)