@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,251 @@
1
+ var import_vitest = require("vitest"),
2
+ import_useDeepMemoizedObject = require("./useDeepMemoizedObject.cjs");
3
+ function testMemoization(initialValue, options) {
4
+ let previousValue = initialValue;
5
+ return {
6
+ get current() {
7
+ return previousValue;
8
+ },
9
+ update(value) {
10
+ previousValue = (0, import_useDeepMemoizedObject.deepMemoize)(value, previousValue, [], options?.immutableToNestedChanges);
11
+ }
12
+ };
13
+ }
14
+ (0, import_vitest.describe)("useDeepMemoizedObject", () => {
15
+ (0, import_vitest.it)("should preserve identity for unchanged primitives", () => {
16
+ const hook = testMemoization(42),
17
+ firstResult = hook.current;
18
+ hook.update(42), (0, import_vitest.expect)(hook.current).toBe(firstResult);
19
+ }), (0, import_vitest.it)("should preserve identity for unchanged objects", () => {
20
+ const hook = testMemoization({
21
+ a: 1,
22
+ b: 2
23
+ }),
24
+ firstResult = hook.current;
25
+ hook.update({
26
+ a: 1,
27
+ b: 2
28
+ }), (0, import_vitest.expect)(hook.current).toBe(firstResult);
29
+ }), (0, import_vitest.it)("should preserve identity for unchanged arrays", () => {
30
+ const hook = testMemoization([1, 2, 3]),
31
+ firstResult = hook.current;
32
+ hook.update([1, 2, 3]), (0, import_vitest.expect)(hook.current).toBe(firstResult);
33
+ }), (0, import_vitest.it)("should handle nested object changes correctly", () => {
34
+ const hook = testMemoization({
35
+ server: {
36
+ id: 1,
37
+ channels: [{
38
+ id: 1,
39
+ name: "general"
40
+ }, {
41
+ id: 2,
42
+ name: "random"
43
+ }, {
44
+ id: 3,
45
+ name: "tech"
46
+ }]
47
+ }
48
+ }),
49
+ firstResult = hook.current,
50
+ updated = {
51
+ server: {
52
+ id: 1,
53
+ channels: [{
54
+ id: 1,
55
+ name: "general-updated"
56
+ }, {
57
+ id: 2,
58
+ name: "random"
59
+ }, {
60
+ id: 3,
61
+ name: "tech"
62
+ }]
63
+ }
64
+ };
65
+ hook.update(updated);
66
+ const secondResult = hook.current;
67
+ (0, import_vitest.expect)(secondResult).not.toBe(firstResult), (0, import_vitest.expect)(secondResult.server).not.toBe(firstResult.server), (0, import_vitest.expect)(secondResult.server.channels).not.toBe(firstResult.server.channels), (0, import_vitest.expect)(secondResult.server.channels[0]).not.toBe(firstResult.server.channels[0]), (0, import_vitest.expect)(secondResult.server.channels[1]).toBe(firstResult.server.channels[1]), (0, import_vitest.expect)(secondResult.server.channels[2]).toBe(firstResult.server.channels[2]);
68
+ }), (0, import_vitest.it)("should handle deep nested changes in arrays", () => {
69
+ const initial = {
70
+ server: {
71
+ channels: [{
72
+ id: 1,
73
+ messages: [{
74
+ id: 1,
75
+ text: "hi"
76
+ }, {
77
+ id: 2,
78
+ text: "hello"
79
+ }, {
80
+ id: 3,
81
+ text: "world",
82
+ reactions: [{
83
+ emoji: "\u{1F44D}",
84
+ count: 1
85
+ }, {
86
+ emoji: "\u2764\uFE0F",
87
+ count: 2
88
+ }, {
89
+ emoji: "\u{1F602}",
90
+ count: 3,
91
+ updatedAt: "2024-01-01"
92
+ }, {
93
+ emoji: "\u{1F389}",
94
+ count: 4
95
+ }]
96
+ }]
97
+ }]
98
+ }
99
+ },
100
+ hook = testMemoization(initial),
101
+ firstResult = hook.current,
102
+ updated = JSON.parse(JSON.stringify(initial));
103
+ updated.server.channels[0].messages[2].reactions[2].updatedAt = "2024-01-02", hook.update(updated);
104
+ const secondResult = hook.current;
105
+ (0, import_vitest.expect)(secondResult).not.toBe(firstResult), (0, import_vitest.expect)(secondResult.server).not.toBe(firstResult.server), (0, import_vitest.expect)(secondResult.server.channels).not.toBe(firstResult.server.channels), (0, import_vitest.expect)(secondResult.server.channels[0]).not.toBe(firstResult.server.channels[0]), (0, import_vitest.expect)(secondResult.server.channels[0].messages).not.toBe(firstResult.server.channels[0].messages), (0, import_vitest.expect)(secondResult.server.channels[0].messages[0]).toBe(firstResult.server.channels[0].messages[0]), (0, import_vitest.expect)(secondResult.server.channels[0].messages[1]).toBe(firstResult.server.channels[0].messages[1]), (0, import_vitest.expect)(secondResult.server.channels[0].messages[2]).not.toBe(firstResult.server.channels[0].messages[2]), (0, import_vitest.expect)(secondResult.server.channels[0].messages[2].reactions).not.toBe(firstResult.server.channels[0].messages[2].reactions), (0, import_vitest.expect)(secondResult.server.channels[0].messages[2].reactions[0]).toBe(firstResult.server.channels[0].messages[2].reactions[0]), (0, import_vitest.expect)(secondResult.server.channels[0].messages[2].reactions[1]).toBe(firstResult.server.channels[0].messages[2].reactions[1]), (0, import_vitest.expect)(secondResult.server.channels[0].messages[2].reactions[2]).not.toBe(firstResult.server.channels[0].messages[2].reactions[2]), (0, import_vitest.expect)(secondResult.server.channels[0].messages[2].reactions[3]).toBe(firstResult.server.channels[0].messages[2].reactions[3]);
106
+ }), (0, import_vitest.it)("should respect immutableToNestedChanges option", () => {
107
+ const initial = {
108
+ server: {
109
+ id: 1,
110
+ channels: [{
111
+ id: 1,
112
+ messages: [{
113
+ id: 1,
114
+ text: "hi"
115
+ }, {
116
+ id: 2,
117
+ text: "hello"
118
+ }, {
119
+ id: 3,
120
+ text: "world"
121
+ }, {
122
+ id: 4,
123
+ text: "foo"
124
+ }, {
125
+ id: 5,
126
+ text: "bar"
127
+ }, {
128
+ id: 6,
129
+ text: "baz",
130
+ reactions: [{
131
+ emoji: "\u{1F44D}",
132
+ count: 1
133
+ }, {
134
+ emoji: "\u2764\uFE0F",
135
+ count: 2
136
+ }, {
137
+ emoji: "\u{1F602}",
138
+ count: 3,
139
+ updatedAt: "2024-01-01"
140
+ }]
141
+ }]
142
+ }]
143
+ }
144
+ },
145
+ hook = testMemoization(initial, {
146
+ immutableToNestedChanges: {
147
+ server: !0,
148
+ "server.channels.0": !0
149
+ }
150
+ }),
151
+ firstResult = hook.current,
152
+ originalChannels = firstResult.server.channels,
153
+ originalChannel0 = firstResult.server.channels[0],
154
+ originalMessages = firstResult.server.channels[0].messages,
155
+ originalMessage5 = firstResult.server.channels[0].messages[5],
156
+ originalReactions = firstResult.server.channels[0].messages[5].reactions,
157
+ updated = JSON.parse(JSON.stringify(initial));
158
+ updated.server.channels[0].messages[5].reactions[2].updatedAt = "2024-01-02", hook.update(updated);
159
+ const secondResult = hook.current;
160
+ (0, import_vitest.expect)(secondResult).not.toBe(firstResult), (0, import_vitest.expect)(secondResult.server).toBe(firstResult.server), (0, import_vitest.expect)(secondResult.server.channels).not.toBe(originalChannels), (0, import_vitest.expect)(secondResult.server.channels[0]).toBe(originalChannel0), (0, import_vitest.expect)(secondResult.server.channels[0].messages).not.toBe(originalMessages), (0, import_vitest.expect)(secondResult.server.channels[0].messages[5]).not.toBe(originalMessage5), (0, import_vitest.expect)(secondResult.server.channels[0].messages[5].reactions).not.toBe(originalReactions), (0, import_vitest.expect)(secondResult.server.channels[0].messages[5].reactions[2].updatedAt).toBe("2024-01-02");
161
+ }), (0, import_vitest.it)("should handle adding new properties to objects", () => {
162
+ const hook = testMemoization({
163
+ a: 1,
164
+ b: 2
165
+ }),
166
+ firstResult = hook.current,
167
+ updated = {
168
+ a: 1,
169
+ b: 2,
170
+ c: 3
171
+ };
172
+ hook.update(updated), (0, import_vitest.expect)(hook.current).not.toBe(firstResult), (0, import_vitest.expect)(hook.current).toEqual(updated);
173
+ }), (0, import_vitest.it)("should handle array length changes", () => {
174
+ const hook = testMemoization([1, 2, 3]),
175
+ firstResult = hook.current;
176
+ hook.update([1, 2, 3, 4]), (0, import_vitest.expect)(hook.current).not.toBe(firstResult), (0, import_vitest.expect)(hook.current).toEqual([1, 2, 3, 4]);
177
+ }), (0, import_vitest.it)("should handle null and undefined values", () => {
178
+ const nullHook = testMemoization(null);
179
+ (0, import_vitest.expect)(nullHook.current).toBe(null), nullHook.update(void 0), (0, import_vitest.expect)(nullHook.current).toBe(void 0), nullHook.update({
180
+ a: null,
181
+ b: void 0
182
+ });
183
+ const objResult = nullHook.current;
184
+ (0, import_vitest.expect)(objResult.a).toBe(null), (0, import_vitest.expect)(objResult.b).toBe(void 0);
185
+ }), (0, import_vitest.it)("should preserve array items when only one changes", () => {
186
+ const hook = testMemoization([{
187
+ id: 1,
188
+ name: "Alice"
189
+ }, {
190
+ id: 2,
191
+ name: "Bob"
192
+ }, {
193
+ id: 3,
194
+ name: "Charlie"
195
+ }]),
196
+ firstResult = hook.current,
197
+ updated = [{
198
+ id: 1,
199
+ name: "Alice"
200
+ }, {
201
+ id: 2,
202
+ name: "Bobby"
203
+ }, {
204
+ id: 3,
205
+ name: "Charlie"
206
+ }];
207
+ hook.update(updated);
208
+ const secondResult = hook.current;
209
+ (0, import_vitest.expect)(secondResult).not.toBe(firstResult), (0, import_vitest.expect)(secondResult[0]).toBe(firstResult[0]), (0, import_vitest.expect)(secondResult[1]).not.toBe(firstResult[1]), (0, import_vitest.expect)(secondResult[2]).toBe(firstResult[2]);
210
+ }), (0, import_vitest.it)("should handle complex immutableToNestedChanges patterns", () => {
211
+ const initial = {
212
+ app: {
213
+ settings: {
214
+ theme: "dark",
215
+ language: "en",
216
+ nested: {
217
+ deep: {
218
+ value: 1
219
+ }
220
+ }
221
+ }
222
+ }
223
+ },
224
+ hook = testMemoization(initial, {
225
+ immutableToNestedChanges: {
226
+ "app.settings": !0
227
+ }
228
+ }),
229
+ firstResult = hook.current,
230
+ originalSettings = firstResult.app.settings,
231
+ originalNested = firstResult.app.settings.nested,
232
+ originalDeep = firstResult.app.settings.nested.deep,
233
+ updated = JSON.parse(JSON.stringify(initial));
234
+ updated.app.settings.nested.deep.value = 2, hook.update(updated);
235
+ const secondResult = hook.current;
236
+ (0, import_vitest.expect)(secondResult).not.toBe(firstResult), (0, import_vitest.expect)(secondResult.app).not.toBe(firstResult.app), (0, import_vitest.expect)(secondResult.app.settings).toBe(originalSettings), (0, import_vitest.expect)(secondResult.app.settings.nested).toBe(originalNested), (0, import_vitest.expect)(secondResult.app.settings.nested.deep).toBe(originalDeep), (0, import_vitest.expect)(secondResult.app.settings.nested.deep.value).toBe(2);
237
+ }), (0, import_vitest.it)("should handle mixed arrays with objects and primitives", () => {
238
+ const hook = testMemoization([1, "string", {
239
+ id: 1,
240
+ name: "object"
241
+ }, [1, 2, 3], null, void 0]),
242
+ firstResult = hook.current,
243
+ updated = [1, "string", {
244
+ id: 1,
245
+ name: "updated"
246
+ }, [1, 2, 3], null, void 0];
247
+ hook.update(updated);
248
+ const secondResult = hook.current;
249
+ (0, import_vitest.expect)(secondResult).not.toBe(firstResult), (0, import_vitest.expect)(secondResult[0]).toBe(1), (0, import_vitest.expect)(secondResult[1]).toBe("string"), (0, import_vitest.expect)(secondResult[2]).not.toBe(firstResult[2]), (0, import_vitest.expect)(secondResult[3]).toBe(firstResult[3]), (0, import_vitest.expect)(secondResult[4]).toBe(null), (0, import_vitest.expect)(secondResult[5]).toBe(void 0);
250
+ });
251
+ });
@@ -0,0 +1,187 @@
1
+ var import_vitest = require("vitest"), import_useDeepMemoizedObject = require("./useDeepMemoizedObject");
2
+ function testMemoization(initialValue, options) {
3
+ let previousValue = initialValue;
4
+ return {
5
+ get current() {
6
+ return previousValue;
7
+ },
8
+ update(value) {
9
+ previousValue = (0, import_useDeepMemoizedObject.deepMemoize)(
10
+ value,
11
+ previousValue,
12
+ [],
13
+ options?.immutableToNestedChanges
14
+ );
15
+ }
16
+ };
17
+ }
18
+ (0, import_vitest.describe)("useDeepMemoizedObject", () => {
19
+ (0, import_vitest.it)("should preserve identity for unchanged primitives", () => {
20
+ const hook = testMemoization(42), firstResult = hook.current;
21
+ hook.update(42), (0, import_vitest.expect)(hook.current).toBe(firstResult);
22
+ }), (0, import_vitest.it)("should preserve identity for unchanged objects", () => {
23
+ const hook = testMemoization({ a: 1, b: 2 }), firstResult = hook.current;
24
+ hook.update({ a: 1, b: 2 }), (0, import_vitest.expect)(hook.current).toBe(firstResult);
25
+ }), (0, import_vitest.it)("should preserve identity for unchanged arrays", () => {
26
+ const hook = testMemoization([1, 2, 3]), firstResult = hook.current;
27
+ hook.update([1, 2, 3]), (0, import_vitest.expect)(hook.current).toBe(firstResult);
28
+ }), (0, import_vitest.it)("should handle nested object changes correctly", () => {
29
+ const hook = testMemoization({
30
+ server: {
31
+ id: 1,
32
+ channels: [
33
+ { id: 1, name: "general" },
34
+ { id: 2, name: "random" },
35
+ { id: 3, name: "tech" }
36
+ ]
37
+ }
38
+ }), firstResult = hook.current, updated = {
39
+ server: {
40
+ id: 1,
41
+ channels: [
42
+ { id: 1, name: "general-updated" },
43
+ { id: 2, name: "random" },
44
+ { id: 3, name: "tech" }
45
+ ]
46
+ }
47
+ };
48
+ hook.update(updated);
49
+ const secondResult = hook.current;
50
+ (0, import_vitest.expect)(secondResult).not.toBe(firstResult), (0, import_vitest.expect)(secondResult.server).not.toBe(firstResult.server), (0, import_vitest.expect)(secondResult.server.channels).not.toBe(firstResult.server.channels), (0, import_vitest.expect)(secondResult.server.channels[0]).not.toBe(firstResult.server.channels[0]), (0, import_vitest.expect)(secondResult.server.channels[1]).toBe(firstResult.server.channels[1]), (0, import_vitest.expect)(secondResult.server.channels[2]).toBe(firstResult.server.channels[2]);
51
+ }), (0, import_vitest.it)("should handle deep nested changes in arrays", () => {
52
+ const initial = {
53
+ server: {
54
+ channels: [
55
+ {
56
+ id: 1,
57
+ messages: [
58
+ { id: 1, text: "hi" },
59
+ { id: 2, text: "hello" },
60
+ {
61
+ id: 3,
62
+ text: "world",
63
+ reactions: [
64
+ { emoji: "\u{1F44D}", count: 1 },
65
+ { emoji: "\u2764\uFE0F", count: 2 },
66
+ { emoji: "\u{1F602}", count: 3, updatedAt: "2024-01-01" },
67
+ { emoji: "\u{1F389}", count: 4 }
68
+ ]
69
+ }
70
+ ]
71
+ }
72
+ ]
73
+ }
74
+ }, hook = testMemoization(initial), firstResult = hook.current, updated = JSON.parse(JSON.stringify(initial));
75
+ updated.server.channels[0].messages[2].reactions[2].updatedAt = "2024-01-02", hook.update(updated);
76
+ const secondResult = hook.current;
77
+ (0, import_vitest.expect)(secondResult).not.toBe(firstResult), (0, import_vitest.expect)(secondResult.server).not.toBe(firstResult.server), (0, import_vitest.expect)(secondResult.server.channels).not.toBe(firstResult.server.channels), (0, import_vitest.expect)(secondResult.server.channels[0]).not.toBe(firstResult.server.channels[0]), (0, import_vitest.expect)(secondResult.server.channels[0].messages).not.toBe(
78
+ firstResult.server.channels[0].messages
79
+ ), (0, import_vitest.expect)(secondResult.server.channels[0].messages[0]).toBe(
80
+ firstResult.server.channels[0].messages[0]
81
+ ), (0, import_vitest.expect)(secondResult.server.channels[0].messages[1]).toBe(
82
+ firstResult.server.channels[0].messages[1]
83
+ ), (0, import_vitest.expect)(secondResult.server.channels[0].messages[2]).not.toBe(
84
+ firstResult.server.channels[0].messages[2]
85
+ ), (0, import_vitest.expect)(secondResult.server.channels[0].messages[2].reactions).not.toBe(
86
+ firstResult.server.channels[0].messages[2].reactions
87
+ ), (0, import_vitest.expect)(secondResult.server.channels[0].messages[2].reactions[0]).toBe(
88
+ firstResult.server.channels[0].messages[2].reactions[0]
89
+ ), (0, import_vitest.expect)(secondResult.server.channels[0].messages[2].reactions[1]).toBe(
90
+ firstResult.server.channels[0].messages[2].reactions[1]
91
+ ), (0, import_vitest.expect)(secondResult.server.channels[0].messages[2].reactions[2]).not.toBe(
92
+ firstResult.server.channels[0].messages[2].reactions[2]
93
+ ), (0, import_vitest.expect)(secondResult.server.channels[0].messages[2].reactions[3]).toBe(
94
+ firstResult.server.channels[0].messages[2].reactions[3]
95
+ );
96
+ }), (0, import_vitest.it)("should respect immutableToNestedChanges option", () => {
97
+ const initial = {
98
+ server: {
99
+ id: 1,
100
+ channels: [
101
+ {
102
+ id: 1,
103
+ messages: [
104
+ { id: 1, text: "hi" },
105
+ { id: 2, text: "hello" },
106
+ { id: 3, text: "world" },
107
+ { id: 4, text: "foo" },
108
+ { id: 5, text: "bar" },
109
+ {
110
+ id: 6,
111
+ text: "baz",
112
+ reactions: [
113
+ { emoji: "\u{1F44D}", count: 1 },
114
+ { emoji: "\u2764\uFE0F", count: 2 },
115
+ { emoji: "\u{1F602}", count: 3, updatedAt: "2024-01-01" }
116
+ ]
117
+ }
118
+ ]
119
+ }
120
+ ]
121
+ }
122
+ }, hook = testMemoization(initial, {
123
+ immutableToNestedChanges: {
124
+ server: !0,
125
+ "server.channels.0": !0
126
+ }
127
+ }), 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));
128
+ updated.server.channels[0].messages[5].reactions[2].updatedAt = "2024-01-02", hook.update(updated);
129
+ const secondResult = hook.current;
130
+ (0, import_vitest.expect)(secondResult).not.toBe(firstResult), (0, import_vitest.expect)(secondResult.server).toBe(firstResult.server), (0, import_vitest.expect)(secondResult.server.channels).not.toBe(originalChannels), (0, import_vitest.expect)(secondResult.server.channels[0]).toBe(originalChannel0), (0, import_vitest.expect)(secondResult.server.channels[0].messages).not.toBe(originalMessages), (0, import_vitest.expect)(secondResult.server.channels[0].messages[5]).not.toBe(originalMessage5), (0, import_vitest.expect)(secondResult.server.channels[0].messages[5].reactions).not.toBe(
131
+ originalReactions
132
+ ), (0, import_vitest.expect)(secondResult.server.channels[0].messages[5].reactions[2].updatedAt).toBe(
133
+ "2024-01-02"
134
+ );
135
+ }), (0, import_vitest.it)("should handle adding new properties to objects", () => {
136
+ const hook = testMemoization({ a: 1, b: 2 }), firstResult = hook.current, updated = { a: 1, b: 2, c: 3 };
137
+ hook.update(updated), (0, import_vitest.expect)(hook.current).not.toBe(firstResult), (0, import_vitest.expect)(hook.current).toEqual(updated);
138
+ }), (0, import_vitest.it)("should handle array length changes", () => {
139
+ const hook = testMemoization([1, 2, 3]), firstResult = hook.current;
140
+ hook.update([1, 2, 3, 4]), (0, import_vitest.expect)(hook.current).not.toBe(firstResult), (0, import_vitest.expect)(hook.current).toEqual([1, 2, 3, 4]);
141
+ }), (0, import_vitest.it)("should handle null and undefined values", () => {
142
+ const nullHook = testMemoization(null);
143
+ (0, import_vitest.expect)(nullHook.current).toBe(null), nullHook.update(void 0), (0, import_vitest.expect)(nullHook.current).toBe(void 0), nullHook.update({ a: null, b: void 0 });
144
+ const objResult = nullHook.current;
145
+ (0, import_vitest.expect)(objResult.a).toBe(null), (0, import_vitest.expect)(objResult.b).toBe(void 0);
146
+ }), (0, import_vitest.it)("should preserve array items when only one changes", () => {
147
+ const hook = testMemoization([
148
+ { id: 1, name: "Alice" },
149
+ { id: 2, name: "Bob" },
150
+ { id: 3, name: "Charlie" }
151
+ ]), firstResult = hook.current, updated = [
152
+ { id: 1, name: "Alice" },
153
+ { id: 2, name: "Bobby" },
154
+ { id: 3, name: "Charlie" }
155
+ ];
156
+ hook.update(updated);
157
+ const secondResult = hook.current;
158
+ (0, import_vitest.expect)(secondResult).not.toBe(firstResult), (0, import_vitest.expect)(secondResult[0]).toBe(firstResult[0]), (0, import_vitest.expect)(secondResult[1]).not.toBe(firstResult[1]), (0, import_vitest.expect)(secondResult[2]).toBe(firstResult[2]);
159
+ }), (0, import_vitest.it)("should handle complex immutableToNestedChanges patterns", () => {
160
+ const initial = {
161
+ app: {
162
+ settings: {
163
+ theme: "dark",
164
+ language: "en",
165
+ nested: {
166
+ deep: {
167
+ value: 1
168
+ }
169
+ }
170
+ }
171
+ }
172
+ }, hook = testMemoization(initial, {
173
+ immutableToNestedChanges: {
174
+ "app.settings": !0
175
+ }
176
+ }), firstResult = hook.current, originalSettings = firstResult.app.settings, originalNested = firstResult.app.settings.nested, originalDeep = firstResult.app.settings.nested.deep, updated = JSON.parse(JSON.stringify(initial));
177
+ updated.app.settings.nested.deep.value = 2, hook.update(updated);
178
+ const secondResult = hook.current;
179
+ (0, import_vitest.expect)(secondResult).not.toBe(firstResult), (0, import_vitest.expect)(secondResult.app).not.toBe(firstResult.app), (0, import_vitest.expect)(secondResult.app.settings).toBe(originalSettings), (0, import_vitest.expect)(secondResult.app.settings.nested).toBe(originalNested), (0, import_vitest.expect)(secondResult.app.settings.nested.deep).toBe(originalDeep), (0, import_vitest.expect)(secondResult.app.settings.nested.deep.value).toBe(2);
180
+ }), (0, import_vitest.it)("should handle mixed arrays with objects and primitives", () => {
181
+ 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];
182
+ hook.update(updated);
183
+ const secondResult = hook.current;
184
+ (0, import_vitest.expect)(secondResult).not.toBe(firstResult), (0, import_vitest.expect)(secondResult[0]).toBe(1), (0, import_vitest.expect)(secondResult[1]).toBe("string"), (0, import_vitest.expect)(secondResult[2]).not.toBe(firstResult[2]), (0, import_vitest.expect)(secondResult[3]).toBe(firstResult[3]), (0, import_vitest.expect)(secondResult[4]).toBe(null), (0, import_vitest.expect)(secondResult[5]).toBe(void 0);
185
+ });
186
+ });
187
+ //# 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
+ }