@blumintinc/typescript-memoize 1.3.0 → 1.4.0
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.
|
@@ -1,4 +1,46 @@
|
|
|
1
1
|
import equal from '@blumintinc/fast-deep-equal';
|
|
2
|
+
function isOpaqueClassInstance(obj) {
|
|
3
|
+
if (obj == null || typeof obj !== 'object' || Array.isArray(obj))
|
|
4
|
+
return false;
|
|
5
|
+
const proto = Object.getPrototypeOf(obj);
|
|
6
|
+
if (proto === null || proto === Object.prototype)
|
|
7
|
+
return false;
|
|
8
|
+
if (proto.constructor === Object)
|
|
9
|
+
return false;
|
|
10
|
+
if (obj instanceof Date || obj instanceof RegExp ||
|
|
11
|
+
obj instanceof Map || obj instanceof Set)
|
|
12
|
+
return false;
|
|
13
|
+
return Object.keys(obj).length === 0;
|
|
14
|
+
}
|
|
15
|
+
function containsOpaqueValue(obj) {
|
|
16
|
+
if (typeof obj !== 'object' || obj === null)
|
|
17
|
+
return false;
|
|
18
|
+
return Object.values(obj).some(isOpaqueClassInstance);
|
|
19
|
+
}
|
|
20
|
+
function memoizeEqual(a, b) {
|
|
21
|
+
if (a === b)
|
|
22
|
+
return true;
|
|
23
|
+
if (a == null || b == null)
|
|
24
|
+
return false;
|
|
25
|
+
if (typeof a !== 'object' || typeof b !== 'object')
|
|
26
|
+
return equal(a, b);
|
|
27
|
+
if (isOpaqueClassInstance(a) || isOpaqueClassInstance(b))
|
|
28
|
+
return false;
|
|
29
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
30
|
+
if (a.length !== b.length)
|
|
31
|
+
return false;
|
|
32
|
+
return a.every((el, i) => memoizeEqual(el, b[i]));
|
|
33
|
+
}
|
|
34
|
+
if (!containsOpaqueValue(a) && !containsOpaqueValue(b)) {
|
|
35
|
+
return equal(a, b);
|
|
36
|
+
}
|
|
37
|
+
const keysA = Object.keys(a);
|
|
38
|
+
const keysB = Object.keys(b);
|
|
39
|
+
if (keysA.length !== keysB.length)
|
|
40
|
+
return false;
|
|
41
|
+
return keysA.every(key => key in b &&
|
|
42
|
+
memoizeEqual(a[key], b[key]));
|
|
43
|
+
}
|
|
2
44
|
export function Memoize(args) {
|
|
3
45
|
var _a;
|
|
4
46
|
let hashFunction;
|
|
@@ -55,7 +97,7 @@ class DeepEqualMap {
|
|
|
55
97
|
has(key) {
|
|
56
98
|
const entries = Array.from(this.map.values());
|
|
57
99
|
for (const entry of entries) {
|
|
58
|
-
if (
|
|
100
|
+
if (memoizeEqual(entry.key, key)) {
|
|
59
101
|
return true;
|
|
60
102
|
}
|
|
61
103
|
}
|
|
@@ -64,7 +106,7 @@ class DeepEqualMap {
|
|
|
64
106
|
get(key) {
|
|
65
107
|
const entries = Array.from(this.map.values());
|
|
66
108
|
for (const entry of entries) {
|
|
67
|
-
if (
|
|
109
|
+
if (memoizeEqual(entry.key, key)) {
|
|
68
110
|
return entry.value;
|
|
69
111
|
}
|
|
70
112
|
}
|
|
@@ -73,7 +115,7 @@ class DeepEqualMap {
|
|
|
73
115
|
set(key, value) {
|
|
74
116
|
const entries = Array.from(this.map.entries());
|
|
75
117
|
for (const [serializedKey, entry] of entries) {
|
|
76
|
-
if (
|
|
118
|
+
if (memoizeEqual(entry.key, key)) {
|
|
77
119
|
this.map.delete(serializedKey);
|
|
78
120
|
break;
|
|
79
121
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memoize-decorator.js","sourceRoot":"","sources":["../../src/memoize-decorator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"memoize-decorator.js","sourceRoot":"","sources":["../../src/memoize-decorator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,6BAA6B,CAAC;AAMhD,SAAS,qBAAqB,CAAC,GAAY;IAC1C,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAEzC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAE/D,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAE/C,IAAI,GAAG,YAAY,IAAI,IAAI,GAAG,YAAY,MAAM;QAC/C,GAAG,YAAY,GAAG,IAAI,GAAG,YAAY,GAAG;QAAE,OAAO,KAAK,CAAC;IACxD,OAAO,MAAM,CAAC,IAAI,CAAC,GAA8B,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAY;IACxC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1D,OAAO,MAAM,CAAC,MAAM,CAAC,GAA8B,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAClF,CAAC;AAKD,SAAS,YAAY,CAAC,CAAU,EAAE,CAAU;IAC3C,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAGvE,IAAI,qBAAqB,CAAC,CAAC,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAGvE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACzC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACxC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAG,CAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACjE;IAGD,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE;QACvD,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACnB;IAGD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,KAAK,CAAC,KAAK,CACjB,GAAG,CAAC,EAAE,CAAC,GAAG,IAAK,CAA6B;QAC3C,YAAY,CACV,CAA6B,CAAC,GAAG,CAAC,EAClC,CAA6B,CAAC,GAAG,CAAC,CACnC,CACF,CAAC;AACH,CAAC;AAUD,MAAM,UAAU,OAAO,CAAC,IAAgD;;IACvE,IAAI,YAAyC,CAAC;IAC9C,IAAI,QAAiC,CAAC;IACtC,IAAI,IAAyB,CAAC;IAC9B,IAAI,YAAY,GAAgC,IAAI,CAAC;IAErD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC7B,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACjC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QACzB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACjB,YAAY,SAAG,IAAI,CAAC,YAAY,mCAAI,IAAI,CAAC;KACzC;SAAM;QACN,YAAY,GAAG,IAAI,CAAC;KACpB;IAED,OAAO,CAAC,MAAc,EAAE,WAAmB,EAAE,UAAwC,EAAE,EAAE;QACxF,IAAI,UAAU,CAAC,KAAK,IAAI,IAAI,EAAE;YAC7B,UAAU,CAAC,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;SAChG;aAAM,IAAI,UAAU,CAAC,GAAG,IAAI,IAAI,EAAE;YAClC,UAAU,CAAC,GAAG,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;SAC5F;aAAM;YACN,MAAM,6DAA6D,CAAC;SACpE;IACF,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,YAA0C;IAC3F,OAAO,OAAO,CAAC;QACd,QAAQ;QACR,YAAY;KACZ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,iBAAiB,GAAiC,IAAI,GAAG,EAAE,CAAC;AAElE,MAAM,UAAU,KAAK,CAAE,IAAc;IACpC,MAAM,OAAO,GAAuB,IAAI,GAAG,EAAE,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACvB,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,IAAI,EAAE;YACT,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE;gBACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBACrB,EAAE,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iBAChB;aACD;SACD;KACD;IACD,OAAO,OAAO,CAAC,IAAI,CAAC;AACrB,CAAC;AAGD,MAAM,YAAY;IAAlB;QACS,QAAG,GAAG,IAAI,GAAG,EAAgC,CAAC;IAuCvD,CAAC;IArCA,GAAG,CAAC,GAAM;QACT,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;YAC5B,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;gBACjC,OAAO,IAAI,CAAC;aACZ;SACD;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,GAAG,CAAC,GAAM;QACT,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;YAC5B,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;gBACjC,OAAO,KAAK,CAAC,KAAK,CAAC;aACnB;SACD;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,GAAG,CAAC,GAAM,EAAE,KAAQ;QACnB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/C,KAAK,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE;YAC7C,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;gBACjC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC/B,MAAM;aACN;SACD;QAED,MAAM,aAAa,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACb,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACD;AAED,SAAS,cAAc,CACtB,cAA0B,EAC1B,YAA0C,EAC1C,WAAmB,CAAC,EACpB,IAA0B,EAC1B,eAAwB,IAAI;IAE5B,MAAM,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC/C,MAAM,eAAe,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAGxD,OAAO,UAAU,GAAG,IAAW;QAC9B,IAAI,aAAkB,CAAC;QAGvB,IAAI,YAAY,EAAE;YACjB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE;gBAC1C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE;oBAC5C,YAAY,EAAE,KAAK;oBACnB,UAAU,EAAE,KAAK;oBACjB,QAAQ,EAAE,KAAK;oBACf,KAAK,EAAE,IAAI,YAAY,EAAY;iBACnC,CAAC,CAAC;aACH;YACD,IAAI,KAAK,GAA2B,IAAI,CAAC,eAAe,CAAC,CAAC;YAE1D,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACxB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;oBAGvB,MAAM,UAAU,GAAG;wBAClB,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE;qBACnB,CAAC;oBAET,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;wBAC/B,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;qBAC5C;yBAAM;wBACN,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;qBACzC;iBACD;aACD;YAED,IAAI,OAAY,CAAC;YAGjB,IAAI,YAAY,KAAK,IAAI,EAAE;gBAC1B,OAAO,GAAG,IAAI,CAAC;aACf;iBAAM,IAAI,YAAY,EAAE;gBACxB,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aACzC;iBAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC3B,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;aAC7C;iBAAM;gBACN,OAAO,GAAG,IAAI,CAAC;aACf;YAGD,MAAM,YAAY,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;YACzD,IAAI,SAAS,GAAY,KAAK,CAAC;YAE/B,IAAI,QAAQ,GAAG,CAAC,EAAE;gBACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;oBAC7B,SAAS,GAAG,IAAI,CAAC;iBACjB;qBAAM;oBACN,IAAI,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBACxC,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,QAAQ,CAAC;iBAChD;aACD;YAED,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;gBACrC,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;aACnC;iBAAM;gBACN,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACjD,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBAClC,IAAI,QAAQ,GAAG,CAAC,EAAE;oBACjB,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;iBACpC;aACD;SACD;aAAM;YAEN,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;gBACtC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE;oBACxC,YAAY,EAAE,KAAK;oBACnB,UAAU,EAAE,KAAK;oBACjB,QAAQ,EAAE,KAAK;oBACf,KAAK,EAAE,IAAI,GAAG,EAAY;iBAC1B,CAAC,CAAC;aACH;YACD,IAAI,KAAK,GAAkB,IAAI,CAAC,WAAW,CAAC,CAAC;YAE7C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACxB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;oBACvB,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;wBAC/B,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACvC;yBAAM;wBACN,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;qBACpC;iBACD;aACD;YAED,IAAI,YAAY,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;gBACpD,IAAI,OAAY,CAAC;gBAGjB,IAAI,YAAY,KAAK,IAAI,EAAE;oBAC1B,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBAChD;qBAAM,IAAI,YAAY,EAAE;oBACxB,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBACzC;qBAAM;oBACN,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;iBAClB;gBAED,MAAM,YAAY,GAAG,GAAG,OAAO,aAAa,CAAC;gBAC7C,IAAI,SAAS,GAAY,KAAK,CAAC;gBAC/B,IAAI,QAAQ,GAAG,CAAC,EAAE;oBACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;wBAE7B,SAAS,GAAG,IAAI,CAAC;qBACjB;yBAAM;wBACN,IAAI,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;wBACxC,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,QAAQ,CAAC;qBAChD;iBACD;gBAED,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;oBACrC,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;iBACnC;qBAAM;oBACN,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACjD,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;oBAClC,IAAI,QAAQ,GAAG,CAAC,EAAE;wBACjB,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;qBACpC;iBACD;aAED;iBAAM;gBACN,MAAM,OAAO,GAAG,IAAI,CAAC;gBACrB,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;oBACvB,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;iBACnC;qBAAM;oBACN,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACjD,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;iBAClC;aACD;SACD;QAED,OAAO,aAAa,CAAC;IACtB,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -12,6 +12,48 @@
|
|
|
12
12
|
exports.clear = exports.MemoizeExpiring = exports.Memoize = void 0;
|
|
13
13
|
var tslib_1 = require("tslib");
|
|
14
14
|
var fast_deep_equal_1 = tslib_1.__importDefault(require("@blumintinc/fast-deep-equal"));
|
|
15
|
+
function isOpaqueClassInstance(obj) {
|
|
16
|
+
if (obj == null || typeof obj !== 'object' || Array.isArray(obj))
|
|
17
|
+
return false;
|
|
18
|
+
var proto = Object.getPrototypeOf(obj);
|
|
19
|
+
if (proto === null || proto === Object.prototype)
|
|
20
|
+
return false;
|
|
21
|
+
if (proto.constructor === Object)
|
|
22
|
+
return false;
|
|
23
|
+
if (obj instanceof Date || obj instanceof RegExp ||
|
|
24
|
+
obj instanceof Map || obj instanceof Set)
|
|
25
|
+
return false;
|
|
26
|
+
return Object.keys(obj).length === 0;
|
|
27
|
+
}
|
|
28
|
+
function containsOpaqueValue(obj) {
|
|
29
|
+
if (typeof obj !== 'object' || obj === null)
|
|
30
|
+
return false;
|
|
31
|
+
return Object.values(obj).some(isOpaqueClassInstance);
|
|
32
|
+
}
|
|
33
|
+
function memoizeEqual(a, b) {
|
|
34
|
+
if (a === b)
|
|
35
|
+
return true;
|
|
36
|
+
if (a == null || b == null)
|
|
37
|
+
return false;
|
|
38
|
+
if (typeof a !== 'object' || typeof b !== 'object')
|
|
39
|
+
return fast_deep_equal_1.default(a, b);
|
|
40
|
+
if (isOpaqueClassInstance(a) || isOpaqueClassInstance(b))
|
|
41
|
+
return false;
|
|
42
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
43
|
+
if (a.length !== b.length)
|
|
44
|
+
return false;
|
|
45
|
+
return a.every(function (el, i) { return memoizeEqual(el, b[i]); });
|
|
46
|
+
}
|
|
47
|
+
if (!containsOpaqueValue(a) && !containsOpaqueValue(b)) {
|
|
48
|
+
return fast_deep_equal_1.default(a, b);
|
|
49
|
+
}
|
|
50
|
+
var keysA = Object.keys(a);
|
|
51
|
+
var keysB = Object.keys(b);
|
|
52
|
+
if (keysA.length !== keysB.length)
|
|
53
|
+
return false;
|
|
54
|
+
return keysA.every(function (key) { return key in b &&
|
|
55
|
+
memoizeEqual(a[key], b[key]); });
|
|
56
|
+
}
|
|
15
57
|
function Memoize(args) {
|
|
16
58
|
var _a;
|
|
17
59
|
var hashFunction;
|
|
@@ -74,7 +116,7 @@
|
|
|
74
116
|
var entries = Array.from(this.map.values());
|
|
75
117
|
for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
|
|
76
118
|
var entry = entries_1[_i];
|
|
77
|
-
if (
|
|
119
|
+
if (memoizeEqual(entry.key, key)) {
|
|
78
120
|
return true;
|
|
79
121
|
}
|
|
80
122
|
}
|
|
@@ -84,7 +126,7 @@
|
|
|
84
126
|
var entries = Array.from(this.map.values());
|
|
85
127
|
for (var _i = 0, entries_2 = entries; _i < entries_2.length; _i++) {
|
|
86
128
|
var entry = entries_2[_i];
|
|
87
|
-
if (
|
|
129
|
+
if (memoizeEqual(entry.key, key)) {
|
|
88
130
|
return entry.value;
|
|
89
131
|
}
|
|
90
132
|
}
|
|
@@ -94,7 +136,7 @@
|
|
|
94
136
|
var entries = Array.from(this.map.entries());
|
|
95
137
|
for (var _i = 0, entries_3 = entries; _i < entries_3.length; _i++) {
|
|
96
138
|
var _a = entries_3[_i], serializedKey_1 = _a[0], entry = _a[1];
|
|
97
|
-
if (
|
|
139
|
+
if (memoizeEqual(entry.key, key)) {
|
|
98
140
|
this.map.delete(serializedKey_1);
|
|
99
141
|
break;
|
|
100
142
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memoize-decorator.js","sourceRoot":"","sources":["../src/memoize-decorator.ts"],"names":[],"mappings":";;;;;;;;;;;;;IAAA,wFAAgD;
|
|
1
|
+
{"version":3,"file":"memoize-decorator.js","sourceRoot":"","sources":["../src/memoize-decorator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/memoize-decorator.ts
CHANGED
|
@@ -1,5 +1,62 @@
|
|
|
1
1
|
import equal from '@blumintinc/fast-deep-equal';
|
|
2
2
|
|
|
3
|
+
// Detects class instances with no enumerable properties (e.g., Firestore Transaction,
|
|
4
|
+
// WriteBatch). Deep equality cannot meaningfully compare these — it always returns true
|
|
5
|
+
// because there are no enumerable keys to diff. Reference equality is strictly more
|
|
6
|
+
// correct: "same reference" is a valid identity check, while "always equal" is not.
|
|
7
|
+
function isOpaqueClassInstance(obj: unknown): boolean {
|
|
8
|
+
if (obj == null || typeof obj !== 'object' || Array.isArray(obj)) return false;
|
|
9
|
+
const proto = Object.getPrototypeOf(obj);
|
|
10
|
+
// Plain objects ({}) and null-prototype objects (Object.create(null))
|
|
11
|
+
if (proto === null || proto === Object.prototype) return false;
|
|
12
|
+
// Objects whose prototype was created via Object.create({}) — still plain-like
|
|
13
|
+
if (proto.constructor === Object) return false;
|
|
14
|
+
// Known value types that fast-deep-equal handles correctly
|
|
15
|
+
if (obj instanceof Date || obj instanceof RegExp ||
|
|
16
|
+
obj instanceof Map || obj instanceof Set) return false;
|
|
17
|
+
return Object.keys(obj as Record<string, unknown>).length === 0;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function containsOpaqueValue(obj: unknown): boolean {
|
|
21
|
+
if (typeof obj !== 'object' || obj === null) return false;
|
|
22
|
+
return Object.values(obj as Record<string, unknown>).some(isOpaqueClassInstance);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Uses reference equality for opaque class instances while preserving deep equality
|
|
26
|
+
// for everything else. When no opaque values are present, delegates entirely to
|
|
27
|
+
// fast-deep-equal for full edge-case handling (TypedArrays, circular refs, etc.).
|
|
28
|
+
function memoizeEqual(a: unknown, b: unknown): boolean {
|
|
29
|
+
if (a === b) return true;
|
|
30
|
+
if (a == null || b == null) return false;
|
|
31
|
+
if (typeof a !== 'object' || typeof b !== 'object') return equal(a, b);
|
|
32
|
+
|
|
33
|
+
// Opaque class instances: reference equality (already checked a === b above)
|
|
34
|
+
if (isOpaqueClassInstance(a) || isOpaqueClassInstance(b)) return false;
|
|
35
|
+
|
|
36
|
+
// Arrays: element-wise with opaque awareness
|
|
37
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
38
|
+
if (a.length !== b.length) return false;
|
|
39
|
+
return a.every((el, i) => memoizeEqual(el, (b as unknown[])[i]));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Objects: if no value is opaque, delegate to fast-deep-equal
|
|
43
|
+
if (!containsOpaqueValue(a) && !containsOpaqueValue(b)) {
|
|
44
|
+
return equal(a, b);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Recursive property comparison with opaque awareness
|
|
48
|
+
const keysA = Object.keys(a);
|
|
49
|
+
const keysB = Object.keys(b);
|
|
50
|
+
if (keysA.length !== keysB.length) return false;
|
|
51
|
+
return keysA.every(
|
|
52
|
+
key => key in (b as Record<string, unknown>) &&
|
|
53
|
+
memoizeEqual(
|
|
54
|
+
(a as Record<string, unknown>)[key],
|
|
55
|
+
(b as Record<string, unknown>)[key],
|
|
56
|
+
),
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
3
60
|
interface MemoizeArgs {
|
|
4
61
|
expiring?: number;
|
|
5
62
|
hashFunction?: boolean | ((...args: any[]) => any);
|
|
@@ -66,7 +123,7 @@ class DeepEqualMap<K, V> {
|
|
|
66
123
|
has(key: K): boolean {
|
|
67
124
|
const entries = Array.from(this.map.values());
|
|
68
125
|
for (const entry of entries) {
|
|
69
|
-
if (
|
|
126
|
+
if (memoizeEqual(entry.key, key)) {
|
|
70
127
|
return true;
|
|
71
128
|
}
|
|
72
129
|
}
|
|
@@ -76,7 +133,7 @@ class DeepEqualMap<K, V> {
|
|
|
76
133
|
get(key: K): V | undefined {
|
|
77
134
|
const entries = Array.from(this.map.values());
|
|
78
135
|
for (const entry of entries) {
|
|
79
|
-
if (
|
|
136
|
+
if (memoizeEqual(entry.key, key)) {
|
|
80
137
|
return entry.value;
|
|
81
138
|
}
|
|
82
139
|
}
|
|
@@ -86,7 +143,7 @@ class DeepEqualMap<K, V> {
|
|
|
86
143
|
set(key: K, value: V): this {
|
|
87
144
|
const entries = Array.from(this.map.entries());
|
|
88
145
|
for (const [serializedKey, entry] of entries) {
|
|
89
|
-
if (
|
|
146
|
+
if (memoizeEqual(entry.key, key)) {
|
|
90
147
|
this.map.delete(serializedKey);
|
|
91
148
|
break;
|
|
92
149
|
}
|