@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.
Files changed (183) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +120 -0
  3. package/dist/cjs/index.cjs +30 -0
  4. package/dist/cjs/index.js +27 -0
  5. package/dist/cjs/index.js.map +6 -0
  6. package/dist/cjs/index.native.js +33 -0
  7. package/dist/cjs/index.native.js.map +1 -0
  8. package/dist/cjs/useClickOutside.cjs +43 -0
  9. package/dist/cjs/useClickOutside.js +37 -0
  10. package/dist/cjs/useClickOutside.js.map +6 -0
  11. package/dist/cjs/useClickOutside.native.js +51 -0
  12. package/dist/cjs/useClickOutside.native.js.map +1 -0
  13. package/dist/cjs/useDebouncePrepend.cjs +46 -0
  14. package/dist/cjs/useDebouncePrepend.js +40 -0
  15. package/dist/cjs/useDebouncePrepend.js.map +6 -0
  16. package/dist/cjs/useDebouncePrepend.native.js +54 -0
  17. package/dist/cjs/useDebouncePrepend.native.js.map +1 -0
  18. package/dist/cjs/useDeepMemoizedObject.cjs +148 -0
  19. package/dist/cjs/useDeepMemoizedObject.js +122 -0
  20. package/dist/cjs/useDeepMemoizedObject.js.map +6 -0
  21. package/dist/cjs/useDeepMemoizedObject.native.js +192 -0
  22. package/dist/cjs/useDeepMemoizedObject.native.js.map +1 -0
  23. package/dist/cjs/useDeepMemoizedObject.test.cjs +251 -0
  24. package/dist/cjs/useDeepMemoizedObject.test.js +187 -0
  25. package/dist/cjs/useDeepMemoizedObject.test.js.map +6 -0
  26. package/dist/cjs/useDeepMemoizedObject.test.native.js +261 -0
  27. package/dist/cjs/useDeepMemoizedObject.test.native.js.map +1 -0
  28. package/dist/cjs/useDeferredBoolean.cjs +34 -0
  29. package/dist/cjs/useDeferredBoolean.js +29 -0
  30. package/dist/cjs/useDeferredBoolean.js.map +6 -0
  31. package/dist/cjs/useDeferredBoolean.native.js +37 -0
  32. package/dist/cjs/useDeferredBoolean.native.js.map +1 -0
  33. package/dist/cjs/useEffectOnceGlobally.cjs +33 -0
  34. package/dist/cjs/useEffectOnceGlobally.js +28 -0
  35. package/dist/cjs/useEffectOnceGlobally.js.map +6 -0
  36. package/dist/cjs/useEffectOnceGlobally.native.js +38 -0
  37. package/dist/cjs/useEffectOnceGlobally.native.js.map +1 -0
  38. package/dist/cjs/useIsMounted.cjs +32 -0
  39. package/dist/cjs/useIsMounted.js +27 -0
  40. package/dist/cjs/useIsMounted.js.map +6 -0
  41. package/dist/cjs/useIsMounted.native.js +35 -0
  42. package/dist/cjs/useIsMounted.native.js.map +1 -0
  43. package/dist/cjs/useLastValue.cjs +29 -0
  44. package/dist/cjs/useLastValue.js +24 -0
  45. package/dist/cjs/useLastValue.js.map +6 -0
  46. package/dist/cjs/useLastValue.native.js +32 -0
  47. package/dist/cjs/useLastValue.native.js.map +1 -0
  48. package/dist/cjs/useLastValueIf.cjs +31 -0
  49. package/dist/cjs/useLastValueIf.js +25 -0
  50. package/dist/cjs/useLastValueIf.js.map +6 -0
  51. package/dist/cjs/useLastValueIf.native.js +35 -0
  52. package/dist/cjs/useLastValueIf.native.js.map +1 -0
  53. package/dist/cjs/useMemoStable.cjs +32 -0
  54. package/dist/cjs/useMemoStable.js +26 -0
  55. package/dist/cjs/useMemoStable.js.map +6 -0
  56. package/dist/cjs/useMemoStable.native.js +36 -0
  57. package/dist/cjs/useMemoStable.native.js.map +1 -0
  58. package/dist/cjs/useMemoizedObjectList.cjs +48 -0
  59. package/dist/cjs/useMemoizedObjectList.js +36 -0
  60. package/dist/cjs/useMemoizedObjectList.js.map +6 -0
  61. package/dist/cjs/useMemoizedObjectList.native.js +65 -0
  62. package/dist/cjs/useMemoizedObjectList.native.js.map +1 -0
  63. package/dist/cjs/useThrottle.cjs +39 -0
  64. package/dist/cjs/useThrottle.js +30 -0
  65. package/dist/cjs/useThrottle.js.map +6 -0
  66. package/dist/cjs/useThrottle.native.js +45 -0
  67. package/dist/cjs/useThrottle.native.js.map +1 -0
  68. package/dist/cjs/useWarnIfDepsChange.cjs +54 -0
  69. package/dist/cjs/useWarnIfDepsChange.js +46 -0
  70. package/dist/cjs/useWarnIfDepsChange.js.map +6 -0
  71. package/dist/cjs/useWarnIfDepsChange.native.js +58 -0
  72. package/dist/cjs/useWarnIfDepsChange.native.js.map +1 -0
  73. package/dist/cjs/useWarnIfMemoChangesOften.cjs +34 -0
  74. package/dist/cjs/useWarnIfMemoChangesOften.js +29 -0
  75. package/dist/cjs/useWarnIfMemoChangesOften.js.map +6 -0
  76. package/dist/cjs/useWarnIfMemoChangesOften.native.js +42 -0
  77. package/dist/cjs/useWarnIfMemoChangesOften.native.js.map +1 -0
  78. package/dist/esm/index.js +14 -0
  79. package/dist/esm/index.js.map +6 -0
  80. package/dist/esm/index.mjs +14 -0
  81. package/dist/esm/index.mjs.map +1 -0
  82. package/dist/esm/index.native.js +14 -0
  83. package/dist/esm/index.native.js.map +1 -0
  84. package/dist/esm/useClickOutside.js +22 -0
  85. package/dist/esm/useClickOutside.js.map +6 -0
  86. package/dist/esm/useClickOutside.mjs +20 -0
  87. package/dist/esm/useClickOutside.mjs.map +1 -0
  88. package/dist/esm/useClickOutside.native.js +25 -0
  89. package/dist/esm/useClickOutside.native.js.map +1 -0
  90. package/dist/esm/useDebouncePrepend.js +25 -0
  91. package/dist/esm/useDebouncePrepend.js.map +6 -0
  92. package/dist/esm/useDebouncePrepend.mjs +23 -0
  93. package/dist/esm/useDebouncePrepend.mjs.map +1 -0
  94. package/dist/esm/useDebouncePrepend.native.js +28 -0
  95. package/dist/esm/useDebouncePrepend.native.js.map +1 -0
  96. package/dist/esm/useDeepMemoizedObject.js +106 -0
  97. package/dist/esm/useDeepMemoizedObject.js.map +6 -0
  98. package/dist/esm/useDeepMemoizedObject.mjs +123 -0
  99. package/dist/esm/useDeepMemoizedObject.mjs.map +1 -0
  100. package/dist/esm/useDeepMemoizedObject.native.js +164 -0
  101. package/dist/esm/useDeepMemoizedObject.native.js.map +1 -0
  102. package/dist/esm/useDeepMemoizedObject.test.js +188 -0
  103. package/dist/esm/useDeepMemoizedObject.test.js.map +6 -0
  104. package/dist/esm/useDeepMemoizedObject.test.mjs +252 -0
  105. package/dist/esm/useDeepMemoizedObject.test.mjs.map +1 -0
  106. package/dist/esm/useDeepMemoizedObject.test.native.js +259 -0
  107. package/dist/esm/useDeepMemoizedObject.test.native.js.map +1 -0
  108. package/dist/esm/useDeferredBoolean.js +13 -0
  109. package/dist/esm/useDeferredBoolean.js.map +6 -0
  110. package/dist/esm/useDeferredBoolean.mjs +11 -0
  111. package/dist/esm/useDeferredBoolean.mjs.map +1 -0
  112. package/dist/esm/useDeferredBoolean.native.js +11 -0
  113. package/dist/esm/useDeferredBoolean.native.js.map +1 -0
  114. package/dist/esm/useEffectOnceGlobally.js +12 -0
  115. package/dist/esm/useEffectOnceGlobally.js.map +6 -0
  116. package/dist/esm/useEffectOnceGlobally.mjs +10 -0
  117. package/dist/esm/useEffectOnceGlobally.mjs.map +1 -0
  118. package/dist/esm/useEffectOnceGlobally.native.js +12 -0
  119. package/dist/esm/useEffectOnceGlobally.native.js.map +1 -0
  120. package/dist/esm/useIsMounted.js +11 -0
  121. package/dist/esm/useIsMounted.js.map +6 -0
  122. package/dist/esm/useIsMounted.mjs +9 -0
  123. package/dist/esm/useIsMounted.mjs.map +1 -0
  124. package/dist/esm/useIsMounted.native.js +9 -0
  125. package/dist/esm/useIsMounted.native.js.map +1 -0
  126. package/dist/esm/useLastValue.js +8 -0
  127. package/dist/esm/useLastValue.js.map +6 -0
  128. package/dist/esm/useLastValue.mjs +6 -0
  129. package/dist/esm/useLastValue.mjs.map +1 -0
  130. package/dist/esm/useLastValue.native.js +6 -0
  131. package/dist/esm/useLastValue.native.js.map +1 -0
  132. package/dist/esm/useLastValueIf.js +9 -0
  133. package/dist/esm/useLastValueIf.js.map +6 -0
  134. package/dist/esm/useLastValueIf.mjs +8 -0
  135. package/dist/esm/useLastValueIf.mjs.map +1 -0
  136. package/dist/esm/useLastValueIf.native.js +9 -0
  137. package/dist/esm/useLastValueIf.native.js.map +1 -0
  138. package/dist/esm/useMemoStable.js +11 -0
  139. package/dist/esm/useMemoStable.js.map +6 -0
  140. package/dist/esm/useMemoStable.mjs +9 -0
  141. package/dist/esm/useMemoStable.mjs.map +1 -0
  142. package/dist/esm/useMemoStable.native.js +10 -0
  143. package/dist/esm/useMemoStable.native.js.map +1 -0
  144. package/dist/esm/useMemoizedObjectList.js +21 -0
  145. package/dist/esm/useMemoizedObjectList.js.map +6 -0
  146. package/dist/esm/useMemoizedObjectList.mjs +25 -0
  147. package/dist/esm/useMemoizedObjectList.mjs.map +1 -0
  148. package/dist/esm/useMemoizedObjectList.native.js +39 -0
  149. package/dist/esm/useMemoizedObjectList.native.js.map +1 -0
  150. package/dist/esm/useThrottle.js +15 -0
  151. package/dist/esm/useThrottle.js.map +6 -0
  152. package/dist/esm/useThrottle.mjs +16 -0
  153. package/dist/esm/useThrottle.mjs.map +1 -0
  154. package/dist/esm/useThrottle.native.js +19 -0
  155. package/dist/esm/useThrottle.native.js.map +1 -0
  156. package/dist/esm/useWarnIfDepsChange.js +31 -0
  157. package/dist/esm/useWarnIfDepsChange.js.map +6 -0
  158. package/dist/esm/useWarnIfDepsChange.mjs +31 -0
  159. package/dist/esm/useWarnIfDepsChange.mjs.map +1 -0
  160. package/dist/esm/useWarnIfDepsChange.native.js +32 -0
  161. package/dist/esm/useWarnIfDepsChange.native.js.map +1 -0
  162. package/dist/esm/useWarnIfMemoChangesOften.js +14 -0
  163. package/dist/esm/useWarnIfMemoChangesOften.js.map +6 -0
  164. package/dist/esm/useWarnIfMemoChangesOften.mjs +11 -0
  165. package/dist/esm/useWarnIfMemoChangesOften.mjs.map +1 -0
  166. package/dist/esm/useWarnIfMemoChangesOften.native.js +16 -0
  167. package/dist/esm/useWarnIfMemoChangesOften.native.js.map +1 -0
  168. package/package.json +54 -0
  169. package/src/index.ts +13 -0
  170. package/src/useClickOutside.ts +34 -0
  171. package/src/useDebouncePrepend.ts +63 -0
  172. package/src/useDeepMemoizedObject.test.ts +343 -0
  173. package/src/useDeepMemoizedObject.ts +231 -0
  174. package/src/useDeferredBoolean.tsx +15 -0
  175. package/src/useEffectOnceGlobally.ts +41 -0
  176. package/src/useIsMounted.ts +11 -0
  177. package/src/useLastValue.ts +5 -0
  178. package/src/useLastValueIf.ts +15 -0
  179. package/src/useMemoStable.ts +24 -0
  180. package/src/useMemoizedObjectList.ts +74 -0
  181. package/src/useThrottle.ts +35 -0
  182. package/src/useWarnIfDepsChange.ts +61 -0
  183. 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":"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","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
+ }