@take-out/hooks 0.0.28
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.
- package/LICENSE +21 -0
- package/README.md +120 -0
- package/dist/cjs/index.cjs +30 -0
- package/dist/cjs/index.js +27 -0
- package/dist/cjs/index.js.map +6 -0
- package/dist/cjs/index.native.js +33 -0
- package/dist/cjs/index.native.js.map +1 -0
- package/dist/cjs/useClickOutside.cjs +43 -0
- package/dist/cjs/useClickOutside.js +37 -0
- package/dist/cjs/useClickOutside.js.map +6 -0
- package/dist/cjs/useClickOutside.native.js +51 -0
- package/dist/cjs/useClickOutside.native.js.map +1 -0
- package/dist/cjs/useDebouncePrepend.cjs +46 -0
- package/dist/cjs/useDebouncePrepend.js +40 -0
- package/dist/cjs/useDebouncePrepend.js.map +6 -0
- package/dist/cjs/useDebouncePrepend.native.js +54 -0
- package/dist/cjs/useDebouncePrepend.native.js.map +1 -0
- package/dist/cjs/useDeepMemoizedObject.cjs +148 -0
- package/dist/cjs/useDeepMemoizedObject.js +122 -0
- package/dist/cjs/useDeepMemoizedObject.js.map +6 -0
- package/dist/cjs/useDeepMemoizedObject.native.js +192 -0
- package/dist/cjs/useDeepMemoizedObject.native.js.map +1 -0
- package/dist/cjs/useDeepMemoizedObject.test.cjs +251 -0
- package/dist/cjs/useDeepMemoizedObject.test.js +187 -0
- package/dist/cjs/useDeepMemoizedObject.test.js.map +6 -0
- package/dist/cjs/useDeepMemoizedObject.test.native.js +261 -0
- package/dist/cjs/useDeepMemoizedObject.test.native.js.map +1 -0
- package/dist/cjs/useDeferredBoolean.cjs +34 -0
- package/dist/cjs/useDeferredBoolean.js +29 -0
- package/dist/cjs/useDeferredBoolean.js.map +6 -0
- package/dist/cjs/useDeferredBoolean.native.js +37 -0
- package/dist/cjs/useDeferredBoolean.native.js.map +1 -0
- package/dist/cjs/useEffectOnceGlobally.cjs +33 -0
- package/dist/cjs/useEffectOnceGlobally.js +28 -0
- package/dist/cjs/useEffectOnceGlobally.js.map +6 -0
- package/dist/cjs/useEffectOnceGlobally.native.js +38 -0
- package/dist/cjs/useEffectOnceGlobally.native.js.map +1 -0
- package/dist/cjs/useIsMounted.cjs +32 -0
- package/dist/cjs/useIsMounted.js +27 -0
- package/dist/cjs/useIsMounted.js.map +6 -0
- package/dist/cjs/useIsMounted.native.js +35 -0
- package/dist/cjs/useIsMounted.native.js.map +1 -0
- package/dist/cjs/useLastValue.cjs +29 -0
- package/dist/cjs/useLastValue.js +24 -0
- package/dist/cjs/useLastValue.js.map +6 -0
- package/dist/cjs/useLastValue.native.js +32 -0
- package/dist/cjs/useLastValue.native.js.map +1 -0
- package/dist/cjs/useLastValueIf.cjs +31 -0
- package/dist/cjs/useLastValueIf.js +25 -0
- package/dist/cjs/useLastValueIf.js.map +6 -0
- package/dist/cjs/useLastValueIf.native.js +35 -0
- package/dist/cjs/useLastValueIf.native.js.map +1 -0
- package/dist/cjs/useMemoStable.cjs +32 -0
- package/dist/cjs/useMemoStable.js +26 -0
- package/dist/cjs/useMemoStable.js.map +6 -0
- package/dist/cjs/useMemoStable.native.js +36 -0
- package/dist/cjs/useMemoStable.native.js.map +1 -0
- package/dist/cjs/useMemoizedObjectList.cjs +48 -0
- package/dist/cjs/useMemoizedObjectList.js +36 -0
- package/dist/cjs/useMemoizedObjectList.js.map +6 -0
- package/dist/cjs/useMemoizedObjectList.native.js +65 -0
- package/dist/cjs/useMemoizedObjectList.native.js.map +1 -0
- package/dist/cjs/useThrottle.cjs +39 -0
- package/dist/cjs/useThrottle.js +30 -0
- package/dist/cjs/useThrottle.js.map +6 -0
- package/dist/cjs/useThrottle.native.js +45 -0
- package/dist/cjs/useThrottle.native.js.map +1 -0
- package/dist/cjs/useWarnIfDepsChange.cjs +54 -0
- package/dist/cjs/useWarnIfDepsChange.js +46 -0
- package/dist/cjs/useWarnIfDepsChange.js.map +6 -0
- package/dist/cjs/useWarnIfDepsChange.native.js +58 -0
- package/dist/cjs/useWarnIfDepsChange.native.js.map +1 -0
- package/dist/cjs/useWarnIfMemoChangesOften.cjs +34 -0
- package/dist/cjs/useWarnIfMemoChangesOften.js +29 -0
- package/dist/cjs/useWarnIfMemoChangesOften.js.map +6 -0
- package/dist/cjs/useWarnIfMemoChangesOften.native.js +42 -0
- package/dist/cjs/useWarnIfMemoChangesOften.native.js.map +1 -0
- package/dist/esm/index.js +14 -0
- package/dist/esm/index.js.map +6 -0
- package/dist/esm/index.mjs +14 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/index.native.js +14 -0
- package/dist/esm/index.native.js.map +1 -0
- package/dist/esm/useClickOutside.js +22 -0
- package/dist/esm/useClickOutside.js.map +6 -0
- package/dist/esm/useClickOutside.mjs +20 -0
- package/dist/esm/useClickOutside.mjs.map +1 -0
- package/dist/esm/useClickOutside.native.js +25 -0
- package/dist/esm/useClickOutside.native.js.map +1 -0
- package/dist/esm/useDebouncePrepend.js +25 -0
- package/dist/esm/useDebouncePrepend.js.map +6 -0
- package/dist/esm/useDebouncePrepend.mjs +23 -0
- package/dist/esm/useDebouncePrepend.mjs.map +1 -0
- package/dist/esm/useDebouncePrepend.native.js +28 -0
- package/dist/esm/useDebouncePrepend.native.js.map +1 -0
- package/dist/esm/useDeepMemoizedObject.js +106 -0
- package/dist/esm/useDeepMemoizedObject.js.map +6 -0
- package/dist/esm/useDeepMemoizedObject.mjs +123 -0
- package/dist/esm/useDeepMemoizedObject.mjs.map +1 -0
- package/dist/esm/useDeepMemoizedObject.native.js +164 -0
- package/dist/esm/useDeepMemoizedObject.native.js.map +1 -0
- package/dist/esm/useDeepMemoizedObject.test.js +188 -0
- package/dist/esm/useDeepMemoizedObject.test.js.map +6 -0
- package/dist/esm/useDeepMemoizedObject.test.mjs +252 -0
- package/dist/esm/useDeepMemoizedObject.test.mjs.map +1 -0
- package/dist/esm/useDeepMemoizedObject.test.native.js +259 -0
- package/dist/esm/useDeepMemoizedObject.test.native.js.map +1 -0
- package/dist/esm/useDeferredBoolean.js +13 -0
- package/dist/esm/useDeferredBoolean.js.map +6 -0
- package/dist/esm/useDeferredBoolean.mjs +11 -0
- package/dist/esm/useDeferredBoolean.mjs.map +1 -0
- package/dist/esm/useDeferredBoolean.native.js +11 -0
- package/dist/esm/useDeferredBoolean.native.js.map +1 -0
- package/dist/esm/useEffectOnceGlobally.js +12 -0
- package/dist/esm/useEffectOnceGlobally.js.map +6 -0
- package/dist/esm/useEffectOnceGlobally.mjs +10 -0
- package/dist/esm/useEffectOnceGlobally.mjs.map +1 -0
- package/dist/esm/useEffectOnceGlobally.native.js +12 -0
- package/dist/esm/useEffectOnceGlobally.native.js.map +1 -0
- package/dist/esm/useIsMounted.js +11 -0
- package/dist/esm/useIsMounted.js.map +6 -0
- package/dist/esm/useIsMounted.mjs +9 -0
- package/dist/esm/useIsMounted.mjs.map +1 -0
- package/dist/esm/useIsMounted.native.js +9 -0
- package/dist/esm/useIsMounted.native.js.map +1 -0
- package/dist/esm/useLastValue.js +8 -0
- package/dist/esm/useLastValue.js.map +6 -0
- package/dist/esm/useLastValue.mjs +6 -0
- package/dist/esm/useLastValue.mjs.map +1 -0
- package/dist/esm/useLastValue.native.js +6 -0
- package/dist/esm/useLastValue.native.js.map +1 -0
- package/dist/esm/useLastValueIf.js +9 -0
- package/dist/esm/useLastValueIf.js.map +6 -0
- package/dist/esm/useLastValueIf.mjs +8 -0
- package/dist/esm/useLastValueIf.mjs.map +1 -0
- package/dist/esm/useLastValueIf.native.js +9 -0
- package/dist/esm/useLastValueIf.native.js.map +1 -0
- package/dist/esm/useMemoStable.js +11 -0
- package/dist/esm/useMemoStable.js.map +6 -0
- package/dist/esm/useMemoStable.mjs +9 -0
- package/dist/esm/useMemoStable.mjs.map +1 -0
- package/dist/esm/useMemoStable.native.js +10 -0
- package/dist/esm/useMemoStable.native.js.map +1 -0
- package/dist/esm/useMemoizedObjectList.js +21 -0
- package/dist/esm/useMemoizedObjectList.js.map +6 -0
- package/dist/esm/useMemoizedObjectList.mjs +25 -0
- package/dist/esm/useMemoizedObjectList.mjs.map +1 -0
- package/dist/esm/useMemoizedObjectList.native.js +39 -0
- package/dist/esm/useMemoizedObjectList.native.js.map +1 -0
- package/dist/esm/useThrottle.js +15 -0
- package/dist/esm/useThrottle.js.map +6 -0
- package/dist/esm/useThrottle.mjs +16 -0
- package/dist/esm/useThrottle.mjs.map +1 -0
- package/dist/esm/useThrottle.native.js +19 -0
- package/dist/esm/useThrottle.native.js.map +1 -0
- package/dist/esm/useWarnIfDepsChange.js +31 -0
- package/dist/esm/useWarnIfDepsChange.js.map +6 -0
- package/dist/esm/useWarnIfDepsChange.mjs +31 -0
- package/dist/esm/useWarnIfDepsChange.mjs.map +1 -0
- package/dist/esm/useWarnIfDepsChange.native.js +32 -0
- package/dist/esm/useWarnIfDepsChange.native.js.map +1 -0
- package/dist/esm/useWarnIfMemoChangesOften.js +14 -0
- package/dist/esm/useWarnIfMemoChangesOften.js.map +6 -0
- package/dist/esm/useWarnIfMemoChangesOften.mjs +11 -0
- package/dist/esm/useWarnIfMemoChangesOften.mjs.map +1 -0
- package/dist/esm/useWarnIfMemoChangesOften.native.js +16 -0
- package/dist/esm/useWarnIfMemoChangesOften.native.js.map +1 -0
- package/package.json +54 -0
- package/src/index.ts +13 -0
- package/src/useClickOutside.ts +34 -0
- package/src/useDebouncePrepend.ts +63 -0
- package/src/useDeepMemoizedObject.test.ts +343 -0
- package/src/useDeepMemoizedObject.ts +231 -0
- package/src/useDeferredBoolean.tsx +15 -0
- package/src/useEffectOnceGlobally.ts +41 -0
- package/src/useIsMounted.ts +11 -0
- package/src/useLastValue.ts +5 -0
- package/src/useLastValueIf.ts +15 -0
- package/src/useMemoStable.ts +24 -0
- package/src/useMemoizedObjectList.ts +74 -0
- package/src/useThrottle.ts +35 -0
- package/src/useWarnIfDepsChange.ts +61 -0
- package/src/useWarnIfMemoChangesOften.ts +24 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { useRef } from "react";
|
|
2
|
+
function shouldBeImmutable(path, immutableToNestedChanges) {
|
|
3
|
+
if (!immutableToNestedChanges) return !1;
|
|
4
|
+
const currentPath = path.join(".");
|
|
5
|
+
for (const pattern in immutableToNestedChanges) if (immutableToNestedChanges[pattern] && currentPath === pattern) return !0;
|
|
6
|
+
return !1;
|
|
7
|
+
}
|
|
8
|
+
function deepMutateInPlace(target, source) {
|
|
9
|
+
if (!(typeof target != "object" || target === null || typeof source != "object" || source === null)) {
|
|
10
|
+
if (Array.isArray(target) && Array.isArray(source)) {
|
|
11
|
+
target.length = 0, target.push(...source);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
for (const key in source) {
|
|
15
|
+
const targetValue = target[key],
|
|
16
|
+
sourceValue = source[key];
|
|
17
|
+
typeof sourceValue == "object" && sourceValue !== null && typeof targetValue == "object" && targetValue !== null ? deepMutateInPlace(targetValue, sourceValue) : target[key] = sourceValue;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function deepMemoizeWithTracking(current, previous, path, immutableToNestedChanges, parentIsImmutable = !1) {
|
|
22
|
+
if (current === previous) return {
|
|
23
|
+
value: previous,
|
|
24
|
+
hasChanges: !1,
|
|
25
|
+
hasImmutableMutation: !1
|
|
26
|
+
};
|
|
27
|
+
if (typeof current != "object" || current === null) return {
|
|
28
|
+
value: current,
|
|
29
|
+
hasChanges: !0,
|
|
30
|
+
hasImmutableMutation: !1
|
|
31
|
+
};
|
|
32
|
+
if (typeof previous != "object" || previous === null) return {
|
|
33
|
+
value: current,
|
|
34
|
+
hasChanges: !0,
|
|
35
|
+
hasImmutableMutation: !1
|
|
36
|
+
};
|
|
37
|
+
const shouldMutateInPlace = shouldBeImmutable(path, immutableToNestedChanges) || parentIsImmutable;
|
|
38
|
+
if (Array.isArray(current)) {
|
|
39
|
+
if (!Array.isArray(previous)) return {
|
|
40
|
+
value: current,
|
|
41
|
+
hasChanges: !0,
|
|
42
|
+
hasImmutableMutation: !1
|
|
43
|
+
};
|
|
44
|
+
if (current.length !== previous.length) return {
|
|
45
|
+
value: current,
|
|
46
|
+
hasChanges: !0,
|
|
47
|
+
hasImmutableMutation: !1
|
|
48
|
+
};
|
|
49
|
+
let hasChanges2 = !1,
|
|
50
|
+
hasImmutableMutation2 = !1;
|
|
51
|
+
const memoizedArray = [];
|
|
52
|
+
for (let i = 0; i < current.length; i++) {
|
|
53
|
+
const itemPath = [...path, String(i)],
|
|
54
|
+
result = deepMemoizeWithTracking(current[i], previous[i], itemPath, immutableToNestedChanges, !1);
|
|
55
|
+
memoizedArray[i] = result.value, result.hasChanges && (hasChanges2 = !0), result.hasImmutableMutation && (hasImmutableMutation2 = !0);
|
|
56
|
+
}
|
|
57
|
+
return hasChanges2 || hasImmutableMutation2 ? {
|
|
58
|
+
value: memoizedArray,
|
|
59
|
+
hasChanges: !0,
|
|
60
|
+
hasImmutableMutation: !1
|
|
61
|
+
} : {
|
|
62
|
+
value: previous,
|
|
63
|
+
hasChanges: !1,
|
|
64
|
+
hasImmutableMutation: !1
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const currentKeys = Object.keys(current),
|
|
68
|
+
previousKeys = Object.keys(previous);
|
|
69
|
+
if (currentKeys.length !== previousKeys.length) return {
|
|
70
|
+
value: current,
|
|
71
|
+
hasChanges: !0,
|
|
72
|
+
hasImmutableMutation: !1
|
|
73
|
+
};
|
|
74
|
+
if (!currentKeys.every(key => key in previous)) return {
|
|
75
|
+
value: current,
|
|
76
|
+
hasChanges: !0,
|
|
77
|
+
hasImmutableMutation: !1
|
|
78
|
+
};
|
|
79
|
+
let hasChanges = !1,
|
|
80
|
+
hasImmutableMutation = !1;
|
|
81
|
+
const memoizedObject = {};
|
|
82
|
+
for (const key of currentKeys) {
|
|
83
|
+
const propPath = [...path, key],
|
|
84
|
+
currentValue = current[key],
|
|
85
|
+
previousValue = previous[key],
|
|
86
|
+
result = deepMemoizeWithTracking(currentValue, previousValue, propPath, immutableToNestedChanges, shouldMutateInPlace);
|
|
87
|
+
memoizedObject[key] = result.value, result.hasChanges && (hasChanges = !0), result.hasImmutableMutation && (hasImmutableMutation = !0);
|
|
88
|
+
}
|
|
89
|
+
if (shouldMutateInPlace && (hasChanges || hasImmutableMutation)) {
|
|
90
|
+
if (parentIsImmutable) deepMutateInPlace(previous, current);else for (const key of currentKeys) previous[key] = memoizedObject[key];
|
|
91
|
+
return {
|
|
92
|
+
value: previous,
|
|
93
|
+
hasChanges: !1,
|
|
94
|
+
hasImmutableMutation: !0
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return hasChanges || hasImmutableMutation ? {
|
|
98
|
+
value: memoizedObject,
|
|
99
|
+
hasChanges: !0,
|
|
100
|
+
hasImmutableMutation: !1
|
|
101
|
+
} : {
|
|
102
|
+
value: previous,
|
|
103
|
+
hasChanges: !1,
|
|
104
|
+
hasImmutableMutation: !1
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function deepMemoize(current, previous, path = [], immutableToNestedChanges) {
|
|
108
|
+
const result = deepMemoizeWithTracking(current, previous, path, immutableToNestedChanges, !1);
|
|
109
|
+
if (path.length === 0 && result.hasImmutableMutation && !result.hasChanges) {
|
|
110
|
+
if (Array.isArray(result.value)) return [...result.value];
|
|
111
|
+
if (typeof result.value == "object" && result.value !== null) return {
|
|
112
|
+
...result.value
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return result.value;
|
|
116
|
+
}
|
|
117
|
+
function useDeepMemoizedObject(value, options) {
|
|
118
|
+
const previousValueRef = useRef(value),
|
|
119
|
+
memoizedValue = deepMemoize(value, previousValueRef.current, [], options?.immutableToNestedChanges);
|
|
120
|
+
return previousValueRef.current = memoizedValue, memoizedValue;
|
|
121
|
+
}
|
|
122
|
+
export { deepMemoize, shouldBeImmutable, useDeepMemoizedObject };
|
|
123
|
+
//# sourceMappingURL=useDeepMemoizedObject.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useRef","shouldBeImmutable","path","immutableToNestedChanges","currentPath","join","pattern","deepMutateInPlace","target","source","Array","isArray","length","push","key","targetValue","sourceValue","deepMemoizeWithTracking","current","previous","parentIsImmutable","value","hasChanges","hasImmutableMutation","shouldMutateInPlace","hasChanges2","hasImmutableMutation2","memoizedArray","i","itemPath","String","result","currentKeys","Object","keys","previousKeys","every","memoizedObject","propPath","currentValue","previousValue","deepMemoize","useDeepMemoizedObject","options","previousValueRef","memoizedValue"],"sources":["../../src/useDeepMemoizedObject.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,MAAA,QAAc;AAQhB,SAASC,kBACdC,IAAA,EACAC,wBAAA,EACS;EACT,IAAI,CAACA,wBAAA,EAA0B,OAAO;EAEtC,MAAMC,WAAA,GAAcF,IAAA,CAAKG,IAAA,CAAK,GAAG;EACjC,WAAWC,OAAA,IAAWH,wBAAA,EACpB,IAAIA,wBAAA,CAAyBG,OAAO,KAAKF,WAAA,KAAgBE,OAAA,EACvD,OAAO;EAGX,OAAO;AACT;AAQA,SAASC,kBAAqBC,MAAA,EAAWC,MAAA,EAAiB;EACxD,IACE,SAAOD,MAAA,IAAW,YAClBA,MAAA,KAAW,QACX,OAAOC,MAAA,IAAW,YAClBA,MAAA,KAAW,OAKb;IAAA,IAAIC,KAAA,CAAMC,OAAA,CAAQH,MAAM,KAAKE,KAAA,CAAMC,OAAA,CAAQF,MAAM,GAAG;MAEhDD,MAAA,CAAiBI,MAAA,GAAS,GAC1BJ,MAAA,CAAiBK,IAAA,CAAK,GAAIJ,MAAgB;MAC5C;IACF;IAGA,WAAWK,GAAA,IAAOL,MAAA,EAAe;MAC/B,MAAMM,WAAA,GAAeP,MAAA,CAAeM,GAAG;QACjCE,WAAA,GAAeP,MAAA,CAAeK,GAAG;MAGrC,OAAOE,WAAA,IAAgB,YACvBA,WAAA,KAAgB,QAChB,OAAOD,WAAA,IAAgB,YACvBA,WAAA,KAAgB,OAGhBR,iBAAA,CAAkBQ,WAAA,EAAaC,WAAW,IAGxCR,MAAA,CAAeM,GAAG,IAAIE,WAAA;IAE5B;EAAA;AACF;AAEA,SAASC,wBACPC,OAAA,EACAC,QAAA,EACAjB,IAAA,EACAC,wBAAA,EACAiB,iBAAA,GAA6B,IACd;EACf,IAAIF,OAAA,KAAYC,QAAA,EACd,OAAO;IAAEE,KAAA,EAAOF,QAAA;IAAUG,UAAA,EAAY;IAAOC,oBAAA,EAAsB;EAAM;EAG3E,IAAI,OAAOL,OAAA,IAAY,YAAYA,OAAA,KAAY,MAC7C,OAAO;IAAEG,KAAA,EAAOH,OAAA;IAASI,UAAA,EAAY;IAAMC,oBAAA,EAAsB;EAAM;EAGzE,IAAI,OAAOJ,QAAA,IAAa,YAAYA,QAAA,KAAa,MAC/C,OAAO;IAAEE,KAAA,EAAOH,OAAA;IAASI,UAAA,EAAY;IAAMC,oBAAA,EAAsB;EAAM;EAIzE,MAAMC,mBAAA,GADqBvB,iBAAA,CAAkBC,IAAA,EAAMC,wBAAwB,KACzBiB,iBAAA;EAElD,IAAIV,KAAA,CAAMC,OAAA,CAAQO,OAAO,GAAG;IAC1B,IAAI,CAACR,KAAA,CAAMC,OAAA,CAAQQ,QAAQ,GACzB,OAAO;MAAEE,KAAA,EAAOH,OAAA;MAASI,UAAA,EAAY;MAAMC,oBAAA,EAAsB;IAAM;IAEzE,IAAIL,OAAA,CAAQN,MAAA,KAAWO,QAAA,CAASP,MAAA,EAC9B,OAAO;MAAES,KAAA,EAAOH,OAAA;MAASI,UAAA,EAAY;MAAMC,oBAAA,EAAsB;IAAM;IAGzE,IAAIE,WAAA,GAAa;MACbC,qBAAA,GAAuB;IAC3B,MAAMC,aAAA,GAAuB,EAAC;IAE9B,SAASC,CAAA,GAAI,GAAGA,CAAA,GAAIV,OAAA,CAAQN,MAAA,EAAQgB,CAAA,IAAK;MACvC,MAAMC,QAAA,GAAW,CAAC,GAAG3B,IAAA,EAAM4B,MAAA,CAAOF,CAAC,CAAC;QAG9BG,MAAA,GAASd,uBAAA,CACbC,OAAA,CAAQU,CAAC,GACTT,QAAA,CAASS,CAAC,GACVC,QAAA,EACA1B,wBAAA,EACA,EACF;MACAwB,aAAA,CAAcC,CAAC,IAAIG,MAAA,CAAOV,KAAA,EACtBU,MAAA,CAAOT,UAAA,KACTG,WAAA,GAAa,KAEXM,MAAA,CAAOR,oBAAA,KACTG,qBAAA,GAAuB;IAE3B;IAGA,OAAID,WAAA,IAAcC,qBAAA,GACT;MAAEL,KAAA,EAAOM,aAAA;MAAoBL,UAAA,EAAY;MAAMC,oBAAA,EAAsB;IAAM,IAE7E;MAAEF,KAAA,EAAOF,QAAA;MAAUG,UAAA,EAAY;MAAOC,oBAAA,EAAsB;IAAM;EAC3E;EAEA,MAAMS,WAAA,GAAcC,MAAA,CAAOC,IAAA,CAAKhB,OAAO;IACjCiB,YAAA,GAAeF,MAAA,CAAOC,IAAA,CAAKf,QAAQ;EAEzC,IAAIa,WAAA,CAAYpB,MAAA,KAAWuB,YAAA,CAAavB,MAAA,EACtC,OAAO;IAAES,KAAA,EAAOH,OAAA;IAASI,UAAA,EAAY;IAAMC,oBAAA,EAAsB;EAAM;EAIzE,IAAI,CADcS,WAAA,CAAYI,KAAA,CAAOtB,GAAA,IAAQA,GAAA,IAAOK,QAAQ,GAE1D,OAAO;IAAEE,KAAA,EAAOH,OAAA;IAASI,UAAA,EAAY;IAAMC,oBAAA,EAAsB;EAAM;EAGzE,IAAID,UAAA,GAAa;IACbC,oBAAA,GAAuB;EAC3B,MAAMc,cAAA,GAAsB,CAAC;EAE7B,WAAWvB,GAAA,IAAOkB,WAAA,EAAa;IAC7B,MAAMM,QAAA,GAAW,CAAC,GAAGpC,IAAA,EAAMY,GAAG;MACxByB,YAAA,GAAgBrB,OAAA,CAAgBJ,GAAG;MACnC0B,aAAA,GAAiBrB,QAAA,CAAiBL,GAAG;MAGrCiB,MAAA,GAASd,uBAAA,CACbsB,YAAA,EACAC,aAAA,EACAF,QAAA,EACAnC,wBAAA,EACAqB,mBACF;IAEAa,cAAA,CAAevB,GAAG,IAAIiB,MAAA,CAAOV,KAAA,EACzBU,MAAA,CAAOT,UAAA,KACTA,UAAA,GAAa,KAEXS,MAAA,CAAOR,oBAAA,KACTA,oBAAA,GAAuB;EAE3B;EAEA,IAAIC,mBAAA,KAAwBF,UAAA,IAAcC,oBAAA,GAAuB;IAG/D,IAAIH,iBAAA,EAEFb,iBAAA,CAAkBY,QAAA,EAAUD,OAAO,OAGnC,WAAWJ,GAAA,IAAOkB,WAAA,EACdb,QAAA,CAAiBL,GAAG,IAAIuB,cAAA,CAAevB,GAAG;IAIhD,OAAO;MAAEO,KAAA,EAAOF,QAAA;MAAUG,UAAA,EAAY;MAAOC,oBAAA,EAAsB;IAAK;EAC1E;EAEA,OAAID,UAAA,IAAcC,oBAAA,GACT;IAAEF,KAAA,EAAOgB,cAAA;IAAgBf,UAAA,EAAY;IAAMC,oBAAA,EAAsB;EAAM,IAGzE;IAAEF,KAAA,EAAOF,QAAA;IAAUG,UAAA,EAAY;IAAOC,oBAAA,EAAsB;EAAM;AAC3E;AAEO,SAASkB,YACdvB,OAAA,EACAC,QAAA,EACAjB,IAAA,GAAiB,EAAC,EAClBC,wBAAA,EACG;EACH,MAAM4B,MAAA,GAASd,uBAAA,CACbC,OAAA,EACAC,QAAA,EACAjB,IAAA,EACAC,wBAAA,EACA,EACF;EAGA,IAAID,IAAA,CAAKU,MAAA,KAAW,KAAKmB,MAAA,CAAOR,oBAAA,IAAwB,CAACQ,MAAA,CAAOT,UAAA,EAAY;IAG1E,IAAIZ,KAAA,CAAMC,OAAA,CAAQoB,MAAA,CAAOV,KAAK,GAC5B,OAAO,CAAC,GAAGU,MAAA,CAAOV,KAAK;IAClB,IAAI,OAAOU,MAAA,CAAOV,KAAA,IAAU,YAAYU,MAAA,CAAOV,KAAA,KAAU,MAC9D,OAAO;MAAE,GAAGU,MAAA,CAAOV;IAAM;EAE7B;EAEA,OAAOU,MAAA,CAAOV,KAAA;AAChB;AAEO,SAASqB,sBAAyBrB,KAAA,EAAUsB,OAAA,EAAsB;EACvE,MAAMC,gBAAA,GAAmB5C,MAAA,CAAUqB,KAAK;IAElCwB,aAAA,GAAgBJ,WAAA,CACpBpB,KAAA,EACAuB,gBAAA,CAAiB1B,OAAA,EACjB,EAAC,EACDyB,OAAA,EAASxC,wBACX;EAEA,OAAAyC,gBAAA,CAAiB1B,OAAA,GAAU2B,aAAA,EAEpBA,aAAA;AACT","ignoreList":[]}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { useRef } from "react";
|
|
2
|
+
function _type_of(obj) {
|
|
3
|
+
"@swc/helpers - typeof";
|
|
4
|
+
|
|
5
|
+
return obj && typeof Symbol < "u" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
6
|
+
}
|
|
7
|
+
function shouldBeImmutable(path, immutableToNestedChanges) {
|
|
8
|
+
if (!immutableToNestedChanges) return !1;
|
|
9
|
+
var currentPath = path.join(".");
|
|
10
|
+
for (var pattern in immutableToNestedChanges) if (immutableToNestedChanges[pattern] && currentPath === pattern) return !0;
|
|
11
|
+
return !1;
|
|
12
|
+
}
|
|
13
|
+
function deepMutateInPlace(target, source) {
|
|
14
|
+
if (!((typeof target > "u" ? "undefined" : _type_of(target)) !== "object" || target === null || (typeof source > "u" ? "undefined" : _type_of(source)) !== "object" || source === null)) {
|
|
15
|
+
if (Array.isArray(target) && Array.isArray(source)) {
|
|
16
|
+
target.length = 0, target.push(...source);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
for (var key in source) {
|
|
20
|
+
var targetValue = target[key],
|
|
21
|
+
sourceValue = source[key];
|
|
22
|
+
(typeof sourceValue > "u" ? "undefined" : _type_of(sourceValue)) === "object" && sourceValue !== null && (typeof targetValue > "u" ? "undefined" : _type_of(targetValue)) === "object" && targetValue !== null ? deepMutateInPlace(targetValue, sourceValue) : target[key] = sourceValue;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function deepMemoizeWithTracking(current, previous, path, immutableToNestedChanges) {
|
|
27
|
+
var parentIsImmutable = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : !1;
|
|
28
|
+
if (current === previous) return {
|
|
29
|
+
value: previous,
|
|
30
|
+
hasChanges: !1,
|
|
31
|
+
hasImmutableMutation: !1
|
|
32
|
+
};
|
|
33
|
+
if ((typeof current > "u" ? "undefined" : _type_of(current)) !== "object" || current === null) return {
|
|
34
|
+
value: current,
|
|
35
|
+
hasChanges: !0,
|
|
36
|
+
hasImmutableMutation: !1
|
|
37
|
+
};
|
|
38
|
+
if ((typeof previous > "u" ? "undefined" : _type_of(previous)) !== "object" || previous === null) return {
|
|
39
|
+
value: current,
|
|
40
|
+
hasChanges: !0,
|
|
41
|
+
hasImmutableMutation: !1
|
|
42
|
+
};
|
|
43
|
+
var isCurrentImmutable = shouldBeImmutable(path, immutableToNestedChanges),
|
|
44
|
+
shouldMutateInPlace = isCurrentImmutable || parentIsImmutable;
|
|
45
|
+
if (Array.isArray(current)) {
|
|
46
|
+
if (!Array.isArray(previous)) return {
|
|
47
|
+
value: current,
|
|
48
|
+
hasChanges: !0,
|
|
49
|
+
hasImmutableMutation: !1
|
|
50
|
+
};
|
|
51
|
+
if (current.length !== previous.length) return {
|
|
52
|
+
value: current,
|
|
53
|
+
hasChanges: !0,
|
|
54
|
+
hasImmutableMutation: !1
|
|
55
|
+
};
|
|
56
|
+
for (var hasChanges = !1, hasImmutableMutation = !1, memoizedArray = [], i = 0; i < current.length; i++) {
|
|
57
|
+
var itemPath = [...path, String(i)],
|
|
58
|
+
result = deepMemoizeWithTracking(current[i], previous[i], itemPath, immutableToNestedChanges, !1);
|
|
59
|
+
memoizedArray[i] = result.value, result.hasChanges && (hasChanges = !0), result.hasImmutableMutation && (hasImmutableMutation = !0);
|
|
60
|
+
}
|
|
61
|
+
return hasChanges || hasImmutableMutation ? {
|
|
62
|
+
value: memoizedArray,
|
|
63
|
+
hasChanges: !0,
|
|
64
|
+
hasImmutableMutation: !1
|
|
65
|
+
} : {
|
|
66
|
+
value: previous,
|
|
67
|
+
hasChanges: !1,
|
|
68
|
+
hasImmutableMutation: !1
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
var currentKeys = Object.keys(current),
|
|
72
|
+
previousKeys = Object.keys(previous);
|
|
73
|
+
if (currentKeys.length !== previousKeys.length) return {
|
|
74
|
+
value: current,
|
|
75
|
+
hasChanges: !0,
|
|
76
|
+
hasImmutableMutation: !1
|
|
77
|
+
};
|
|
78
|
+
var keysMatch = currentKeys.every(function (key2) {
|
|
79
|
+
return key2 in previous;
|
|
80
|
+
});
|
|
81
|
+
if (!keysMatch) return {
|
|
82
|
+
value: current,
|
|
83
|
+
hasChanges: !0,
|
|
84
|
+
hasImmutableMutation: !1
|
|
85
|
+
};
|
|
86
|
+
var hasChanges1 = !1,
|
|
87
|
+
hasImmutableMutation1 = !1,
|
|
88
|
+
memoizedObject = {},
|
|
89
|
+
_iteratorNormalCompletion = !0,
|
|
90
|
+
_didIteratorError = !1,
|
|
91
|
+
_iteratorError = void 0;
|
|
92
|
+
try {
|
|
93
|
+
for (var _iterator = currentKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
|
|
94
|
+
var key = _step.value,
|
|
95
|
+
propPath = [...path, key],
|
|
96
|
+
currentValue = current[key],
|
|
97
|
+
previousValue = previous[key],
|
|
98
|
+
result1 = deepMemoizeWithTracking(currentValue, previousValue, propPath, immutableToNestedChanges, shouldMutateInPlace);
|
|
99
|
+
memoizedObject[key] = result1.value, result1.hasChanges && (hasChanges1 = !0), result1.hasImmutableMutation && (hasImmutableMutation1 = !0);
|
|
100
|
+
}
|
|
101
|
+
} catch (err) {
|
|
102
|
+
_didIteratorError = !0, _iteratorError = err;
|
|
103
|
+
} finally {
|
|
104
|
+
try {
|
|
105
|
+
!_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
|
|
106
|
+
} finally {
|
|
107
|
+
if (_didIteratorError) throw _iteratorError;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (shouldMutateInPlace && (hasChanges1 || hasImmutableMutation1)) {
|
|
111
|
+
if (parentIsImmutable) deepMutateInPlace(previous, current);else {
|
|
112
|
+
var _iteratorNormalCompletion1 = !0,
|
|
113
|
+
_didIteratorError1 = !1,
|
|
114
|
+
_iteratorError1 = void 0;
|
|
115
|
+
try {
|
|
116
|
+
for (var _iterator1 = currentKeys[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = !0) {
|
|
117
|
+
var key1 = _step1.value;
|
|
118
|
+
previous[key1] = memoizedObject[key1];
|
|
119
|
+
}
|
|
120
|
+
} catch (err) {
|
|
121
|
+
_didIteratorError1 = !0, _iteratorError1 = err;
|
|
122
|
+
} finally {
|
|
123
|
+
try {
|
|
124
|
+
!_iteratorNormalCompletion1 && _iterator1.return != null && _iterator1.return();
|
|
125
|
+
} finally {
|
|
126
|
+
if (_didIteratorError1) throw _iteratorError1;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
value: previous,
|
|
132
|
+
hasChanges: !1,
|
|
133
|
+
hasImmutableMutation: !0
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
return hasChanges1 || hasImmutableMutation1 ? {
|
|
137
|
+
value: memoizedObject,
|
|
138
|
+
hasChanges: !0,
|
|
139
|
+
hasImmutableMutation: !1
|
|
140
|
+
} : {
|
|
141
|
+
value: previous,
|
|
142
|
+
hasChanges: !1,
|
|
143
|
+
hasImmutableMutation: !1
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function deepMemoize(current, previous) {
|
|
147
|
+
var path = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [],
|
|
148
|
+
immutableToNestedChanges = arguments.length > 3 ? arguments[3] : void 0,
|
|
149
|
+
result = deepMemoizeWithTracking(current, previous, path, immutableToNestedChanges, !1);
|
|
150
|
+
if (path.length === 0 && result.hasImmutableMutation && !result.hasChanges) {
|
|
151
|
+
if (Array.isArray(result.value)) return [...result.value];
|
|
152
|
+
if (_type_of(result.value) === "object" && result.value !== null) return {
|
|
153
|
+
...result.value
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
return result.value;
|
|
157
|
+
}
|
|
158
|
+
function useDeepMemoizedObject(value, options) {
|
|
159
|
+
var previousValueRef = useRef(value),
|
|
160
|
+
memoizedValue = deepMemoize(value, previousValueRef.current, [], options?.immutableToNestedChanges);
|
|
161
|
+
return previousValueRef.current = memoizedValue, memoizedValue;
|
|
162
|
+
}
|
|
163
|
+
export { deepMemoize, shouldBeImmutable, useDeepMemoizedObject };
|
|
164
|
+
//# sourceMappingURL=useDeepMemoizedObject.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useRef","_type_of","obj","Symbol","constructor","shouldBeImmutable","path","immutableToNestedChanges","currentPath","join","pattern","deepMutateInPlace","target","source","Array","isArray","length","push","key","targetValue","sourceValue","deepMemoizeWithTracking","current","previous","parentIsImmutable","arguments","value","hasChanges","hasImmutableMutation","isCurrentImmutable","shouldMutateInPlace","memoizedArray","i","itemPath","String","result","currentKeys","Object","keys","previousKeys","keysMatch","every","key2","hasChanges1","hasImmutableMutation1","memoizedObject","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","iterator","_step","next","done","propPath","currentValue","previousValue","result1"],"sources":["../../src/useDeepMemoizedObject.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { deepMemoize } from "./useDeepMemoizedObject";
|
|
3
|
+
function testMemoization(initialValue, options) {
|
|
4
|
+
let previousValue = initialValue;
|
|
5
|
+
return {
|
|
6
|
+
get current() {
|
|
7
|
+
return previousValue;
|
|
8
|
+
},
|
|
9
|
+
update(value) {
|
|
10
|
+
previousValue = deepMemoize(
|
|
11
|
+
value,
|
|
12
|
+
previousValue,
|
|
13
|
+
[],
|
|
14
|
+
options?.immutableToNestedChanges
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
describe("useDeepMemoizedObject", () => {
|
|
20
|
+
it("should preserve identity for unchanged primitives", () => {
|
|
21
|
+
const hook = testMemoization(42), firstResult = hook.current;
|
|
22
|
+
hook.update(42), expect(hook.current).toBe(firstResult);
|
|
23
|
+
}), it("should preserve identity for unchanged objects", () => {
|
|
24
|
+
const hook = testMemoization({ a: 1, b: 2 }), firstResult = hook.current;
|
|
25
|
+
hook.update({ a: 1, b: 2 }), expect(hook.current).toBe(firstResult);
|
|
26
|
+
}), it("should preserve identity for unchanged arrays", () => {
|
|
27
|
+
const hook = testMemoization([1, 2, 3]), firstResult = hook.current;
|
|
28
|
+
hook.update([1, 2, 3]), expect(hook.current).toBe(firstResult);
|
|
29
|
+
}), it("should handle nested object changes correctly", () => {
|
|
30
|
+
const hook = testMemoization({
|
|
31
|
+
server: {
|
|
32
|
+
id: 1,
|
|
33
|
+
channels: [
|
|
34
|
+
{ id: 1, name: "general" },
|
|
35
|
+
{ id: 2, name: "random" },
|
|
36
|
+
{ id: 3, name: "tech" }
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
}), firstResult = hook.current, updated = {
|
|
40
|
+
server: {
|
|
41
|
+
id: 1,
|
|
42
|
+
channels: [
|
|
43
|
+
{ id: 1, name: "general-updated" },
|
|
44
|
+
{ id: 2, name: "random" },
|
|
45
|
+
{ id: 3, name: "tech" }
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
hook.update(updated);
|
|
50
|
+
const secondResult = hook.current;
|
|
51
|
+
expect(secondResult).not.toBe(firstResult), expect(secondResult.server).not.toBe(firstResult.server), expect(secondResult.server.channels).not.toBe(firstResult.server.channels), expect(secondResult.server.channels[0]).not.toBe(firstResult.server.channels[0]), expect(secondResult.server.channels[1]).toBe(firstResult.server.channels[1]), expect(secondResult.server.channels[2]).toBe(firstResult.server.channels[2]);
|
|
52
|
+
}), it("should handle deep nested changes in arrays", () => {
|
|
53
|
+
const initial = {
|
|
54
|
+
server: {
|
|
55
|
+
channels: [
|
|
56
|
+
{
|
|
57
|
+
id: 1,
|
|
58
|
+
messages: [
|
|
59
|
+
{ id: 1, text: "hi" },
|
|
60
|
+
{ id: 2, text: "hello" },
|
|
61
|
+
{
|
|
62
|
+
id: 3,
|
|
63
|
+
text: "world",
|
|
64
|
+
reactions: [
|
|
65
|
+
{ emoji: "\u{1F44D}", count: 1 },
|
|
66
|
+
{ emoji: "\u2764\uFE0F", count: 2 },
|
|
67
|
+
{ emoji: "\u{1F602}", count: 3, updatedAt: "2024-01-01" },
|
|
68
|
+
{ emoji: "\u{1F389}", count: 4 }
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
}
|
|
75
|
+
}, hook = testMemoization(initial), firstResult = hook.current, updated = JSON.parse(JSON.stringify(initial));
|
|
76
|
+
updated.server.channels[0].messages[2].reactions[2].updatedAt = "2024-01-02", hook.update(updated);
|
|
77
|
+
const secondResult = hook.current;
|
|
78
|
+
expect(secondResult).not.toBe(firstResult), expect(secondResult.server).not.toBe(firstResult.server), expect(secondResult.server.channels).not.toBe(firstResult.server.channels), expect(secondResult.server.channels[0]).not.toBe(firstResult.server.channels[0]), expect(secondResult.server.channels[0].messages).not.toBe(
|
|
79
|
+
firstResult.server.channels[0].messages
|
|
80
|
+
), expect(secondResult.server.channels[0].messages[0]).toBe(
|
|
81
|
+
firstResult.server.channels[0].messages[0]
|
|
82
|
+
), expect(secondResult.server.channels[0].messages[1]).toBe(
|
|
83
|
+
firstResult.server.channels[0].messages[1]
|
|
84
|
+
), expect(secondResult.server.channels[0].messages[2]).not.toBe(
|
|
85
|
+
firstResult.server.channels[0].messages[2]
|
|
86
|
+
), expect(secondResult.server.channels[0].messages[2].reactions).not.toBe(
|
|
87
|
+
firstResult.server.channels[0].messages[2].reactions
|
|
88
|
+
), expect(secondResult.server.channels[0].messages[2].reactions[0]).toBe(
|
|
89
|
+
firstResult.server.channels[0].messages[2].reactions[0]
|
|
90
|
+
), expect(secondResult.server.channels[0].messages[2].reactions[1]).toBe(
|
|
91
|
+
firstResult.server.channels[0].messages[2].reactions[1]
|
|
92
|
+
), expect(secondResult.server.channels[0].messages[2].reactions[2]).not.toBe(
|
|
93
|
+
firstResult.server.channels[0].messages[2].reactions[2]
|
|
94
|
+
), expect(secondResult.server.channels[0].messages[2].reactions[3]).toBe(
|
|
95
|
+
firstResult.server.channels[0].messages[2].reactions[3]
|
|
96
|
+
);
|
|
97
|
+
}), it("should respect immutableToNestedChanges option", () => {
|
|
98
|
+
const initial = {
|
|
99
|
+
server: {
|
|
100
|
+
id: 1,
|
|
101
|
+
channels: [
|
|
102
|
+
{
|
|
103
|
+
id: 1,
|
|
104
|
+
messages: [
|
|
105
|
+
{ id: 1, text: "hi" },
|
|
106
|
+
{ id: 2, text: "hello" },
|
|
107
|
+
{ id: 3, text: "world" },
|
|
108
|
+
{ id: 4, text: "foo" },
|
|
109
|
+
{ id: 5, text: "bar" },
|
|
110
|
+
{
|
|
111
|
+
id: 6,
|
|
112
|
+
text: "baz",
|
|
113
|
+
reactions: [
|
|
114
|
+
{ emoji: "\u{1F44D}", count: 1 },
|
|
115
|
+
{ emoji: "\u2764\uFE0F", count: 2 },
|
|
116
|
+
{ emoji: "\u{1F602}", count: 3, updatedAt: "2024-01-01" }
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
}, hook = testMemoization(initial, {
|
|
124
|
+
immutableToNestedChanges: {
|
|
125
|
+
server: !0,
|
|
126
|
+
"server.channels.0": !0
|
|
127
|
+
}
|
|
128
|
+
}), firstResult = hook.current, originalChannels = firstResult.server.channels, originalChannel0 = firstResult.server.channels[0], originalMessages = firstResult.server.channels[0].messages, originalMessage5 = firstResult.server.channels[0].messages[5], originalReactions = firstResult.server.channels[0].messages[5].reactions, updated = JSON.parse(JSON.stringify(initial));
|
|
129
|
+
updated.server.channels[0].messages[5].reactions[2].updatedAt = "2024-01-02", hook.update(updated);
|
|
130
|
+
const secondResult = hook.current;
|
|
131
|
+
expect(secondResult).not.toBe(firstResult), expect(secondResult.server).toBe(firstResult.server), expect(secondResult.server.channels).not.toBe(originalChannels), expect(secondResult.server.channels[0]).toBe(originalChannel0), expect(secondResult.server.channels[0].messages).not.toBe(originalMessages), expect(secondResult.server.channels[0].messages[5]).not.toBe(originalMessage5), expect(secondResult.server.channels[0].messages[5].reactions).not.toBe(
|
|
132
|
+
originalReactions
|
|
133
|
+
), expect(secondResult.server.channels[0].messages[5].reactions[2].updatedAt).toBe(
|
|
134
|
+
"2024-01-02"
|
|
135
|
+
);
|
|
136
|
+
}), it("should handle adding new properties to objects", () => {
|
|
137
|
+
const hook = testMemoization({ a: 1, b: 2 }), firstResult = hook.current, updated = { a: 1, b: 2, c: 3 };
|
|
138
|
+
hook.update(updated), expect(hook.current).not.toBe(firstResult), expect(hook.current).toEqual(updated);
|
|
139
|
+
}), it("should handle array length changes", () => {
|
|
140
|
+
const hook = testMemoization([1, 2, 3]), firstResult = hook.current;
|
|
141
|
+
hook.update([1, 2, 3, 4]), expect(hook.current).not.toBe(firstResult), expect(hook.current).toEqual([1, 2, 3, 4]);
|
|
142
|
+
}), it("should handle null and undefined values", () => {
|
|
143
|
+
const nullHook = testMemoization(null);
|
|
144
|
+
expect(nullHook.current).toBe(null), nullHook.update(void 0), expect(nullHook.current).toBe(void 0), nullHook.update({ a: null, b: void 0 });
|
|
145
|
+
const objResult = nullHook.current;
|
|
146
|
+
expect(objResult.a).toBe(null), expect(objResult.b).toBe(void 0);
|
|
147
|
+
}), it("should preserve array items when only one changes", () => {
|
|
148
|
+
const hook = testMemoization([
|
|
149
|
+
{ id: 1, name: "Alice" },
|
|
150
|
+
{ id: 2, name: "Bob" },
|
|
151
|
+
{ id: 3, name: "Charlie" }
|
|
152
|
+
]), firstResult = hook.current, updated = [
|
|
153
|
+
{ id: 1, name: "Alice" },
|
|
154
|
+
{ id: 2, name: "Bobby" },
|
|
155
|
+
{ id: 3, name: "Charlie" }
|
|
156
|
+
];
|
|
157
|
+
hook.update(updated);
|
|
158
|
+
const secondResult = hook.current;
|
|
159
|
+
expect(secondResult).not.toBe(firstResult), expect(secondResult[0]).toBe(firstResult[0]), expect(secondResult[1]).not.toBe(firstResult[1]), expect(secondResult[2]).toBe(firstResult[2]);
|
|
160
|
+
}), it("should handle complex immutableToNestedChanges patterns", () => {
|
|
161
|
+
const initial = {
|
|
162
|
+
app: {
|
|
163
|
+
settings: {
|
|
164
|
+
theme: "dark",
|
|
165
|
+
language: "en",
|
|
166
|
+
nested: {
|
|
167
|
+
deep: {
|
|
168
|
+
value: 1
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}, hook = testMemoization(initial, {
|
|
174
|
+
immutableToNestedChanges: {
|
|
175
|
+
"app.settings": !0
|
|
176
|
+
}
|
|
177
|
+
}), firstResult = hook.current, originalSettings = firstResult.app.settings, originalNested = firstResult.app.settings.nested, originalDeep = firstResult.app.settings.nested.deep, updated = JSON.parse(JSON.stringify(initial));
|
|
178
|
+
updated.app.settings.nested.deep.value = 2, hook.update(updated);
|
|
179
|
+
const secondResult = hook.current;
|
|
180
|
+
expect(secondResult).not.toBe(firstResult), expect(secondResult.app).not.toBe(firstResult.app), expect(secondResult.app.settings).toBe(originalSettings), expect(secondResult.app.settings.nested).toBe(originalNested), expect(secondResult.app.settings.nested.deep).toBe(originalDeep), expect(secondResult.app.settings.nested.deep.value).toBe(2);
|
|
181
|
+
}), it("should handle mixed arrays with objects and primitives", () => {
|
|
182
|
+
const hook = testMemoization([1, "string", { id: 1, name: "object" }, [1, 2, 3], null, void 0]), firstResult = hook.current, updated = [1, "string", { id: 1, name: "updated" }, [1, 2, 3], null, void 0];
|
|
183
|
+
hook.update(updated);
|
|
184
|
+
const secondResult = hook.current;
|
|
185
|
+
expect(secondResult).not.toBe(firstResult), expect(secondResult[0]).toBe(1), expect(secondResult[1]).toBe("string"), expect(secondResult[2]).not.toBe(firstResult[2]), expect(secondResult[3]).toBe(firstResult[3]), expect(secondResult[4]).toBe(null), expect(secondResult[5]).toBe(void 0);
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
//# sourceMappingURL=useDeepMemoizedObject.test.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/useDeepMemoizedObject.test.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|