@take-out/hooks 0.2.10 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/esm/index.js +13 -13
  2. package/dist/esm/index.js.map +1 -6
  3. package/package.json +3 -3
  4. package/src/useDebouncePrepend.ts +2 -2
  5. package/src/useDeepMemoizedObject.test.ts +13 -13
  6. package/src/useDeepMemoizedObject.ts +7 -7
  7. package/src/useEffectOnceGlobally.ts +1 -1
  8. package/src/useMemoStable.ts +1 -1
  9. package/src/useWarnIfDepsChange.ts +2 -2
  10. package/src/useWarnIfMemoChangesOften.ts +1 -1
  11. package/dist/cjs/index.js +0 -27
  12. package/dist/cjs/index.js.map +0 -6
  13. package/dist/cjs/useClickOutside.js +0 -37
  14. package/dist/cjs/useClickOutside.js.map +0 -6
  15. package/dist/cjs/useDebouncePrepend.js +0 -40
  16. package/dist/cjs/useDebouncePrepend.js.map +0 -6
  17. package/dist/cjs/useDeepMemoizedObject.js +0 -122
  18. package/dist/cjs/useDeepMemoizedObject.js.map +0 -6
  19. package/dist/cjs/useDeepMemoizedObject.test.js +0 -187
  20. package/dist/cjs/useDeepMemoizedObject.test.js.map +0 -6
  21. package/dist/cjs/useDeferredBoolean.js +0 -29
  22. package/dist/cjs/useDeferredBoolean.js.map +0 -6
  23. package/dist/cjs/useEffectOnceGlobally.js +0 -28
  24. package/dist/cjs/useEffectOnceGlobally.js.map +0 -6
  25. package/dist/cjs/useEvent.js +0 -25
  26. package/dist/cjs/useEvent.js.map +0 -6
  27. package/dist/cjs/useIsMounted.js +0 -27
  28. package/dist/cjs/useIsMounted.js.map +0 -6
  29. package/dist/cjs/useLastValue.js +0 -24
  30. package/dist/cjs/useLastValue.js.map +0 -6
  31. package/dist/cjs/useLastValueIf.js +0 -25
  32. package/dist/cjs/useLastValueIf.js.map +0 -6
  33. package/dist/cjs/useMemoStable.js +0 -26
  34. package/dist/cjs/useMemoStable.js.map +0 -6
  35. package/dist/cjs/useMemoizedObjectList.js +0 -36
  36. package/dist/cjs/useMemoizedObjectList.js.map +0 -6
  37. package/dist/cjs/useThrottle.js +0 -30
  38. package/dist/cjs/useThrottle.js.map +0 -6
  39. package/dist/cjs/useWarnIfDepsChange.js +0 -46
  40. package/dist/cjs/useWarnIfDepsChange.js.map +0 -6
  41. package/dist/cjs/useWarnIfMemoChangesOften.js +0 -29
  42. package/dist/cjs/useWarnIfMemoChangesOften.js.map +0 -6
  43. package/dist/esm/useClickOutside.js +0 -22
  44. package/dist/esm/useClickOutside.js.map +0 -6
  45. package/dist/esm/useDebouncePrepend.js +0 -25
  46. package/dist/esm/useDebouncePrepend.js.map +0 -6
  47. package/dist/esm/useDeepMemoizedObject.js +0 -106
  48. package/dist/esm/useDeepMemoizedObject.js.map +0 -6
  49. package/dist/esm/useDeepMemoizedObject.test.js +0 -188
  50. package/dist/esm/useDeepMemoizedObject.test.js.map +0 -6
  51. package/dist/esm/useDeferredBoolean.js +0 -13
  52. package/dist/esm/useDeferredBoolean.js.map +0 -6
  53. package/dist/esm/useEffectOnceGlobally.js +0 -12
  54. package/dist/esm/useEffectOnceGlobally.js.map +0 -6
  55. package/dist/esm/useEvent.js +0 -9
  56. package/dist/esm/useEvent.js.map +0 -6
  57. package/dist/esm/useIsMounted.js +0 -11
  58. package/dist/esm/useIsMounted.js.map +0 -6
  59. package/dist/esm/useLastValue.js +0 -8
  60. package/dist/esm/useLastValue.js.map +0 -6
  61. package/dist/esm/useLastValueIf.js +0 -9
  62. package/dist/esm/useLastValueIf.js.map +0 -6
  63. package/dist/esm/useMemoStable.js +0 -11
  64. package/dist/esm/useMemoStable.js.map +0 -6
  65. package/dist/esm/useMemoizedObjectList.js +0 -21
  66. package/dist/esm/useMemoizedObjectList.js.map +0 -6
  67. package/dist/esm/useThrottle.js +0 -15
  68. package/dist/esm/useThrottle.js.map +0 -6
  69. package/dist/esm/useWarnIfDepsChange.js +0 -31
  70. package/dist/esm/useWarnIfDepsChange.js.map +0 -6
  71. package/dist/esm/useWarnIfMemoChangesOften.js +0 -14
  72. package/dist/esm/useWarnIfMemoChangesOften.js.map +0 -6
@@ -1,22 +0,0 @@
1
- import { isWeb } from "@take-out/helpers";
2
- import { useEffect } from "react";
3
- const useClickOutside = ({
4
- ref,
5
- active,
6
- onClickOutside
7
- }) => {
8
- useEffect(() => {
9
- if (!isWeb || !active || !onClickOutside) return;
10
- const handleClickOutside = (e) => {
11
- const node = ref.current;
12
- node && e.target instanceof HTMLElement && (node.contains(e.target) || onClickOutside());
13
- };
14
- return document.addEventListener("click", handleClickOutside), () => {
15
- document.removeEventListener("click", handleClickOutside);
16
- };
17
- }, [ref, active, onClickOutside]);
18
- };
19
- export {
20
- useClickOutside
21
- };
22
- //# sourceMappingURL=useClickOutside.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/useClickOutside.ts"],
4
- "mappings": "AAAA,SAAS,aAAa;AACtB,SAAS,iBAAiB;AAQnB,MAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AACF,MAA4B;AAC1B,YAAU,MAAM;AAGd,QAFI,CAAC,SACD,CAAC,UACD,CAAC,eAAgB;AAErB,UAAM,qBAAqB,CAAC,MAAkB;AAC5C,YAAM,OAAO,IAAI;AACjB,MAAK,QACC,EAAE,kBAAkB,gBACrB,KAAK,SAAS,EAAE,MAAM,KACzB,eAAe;AAAA,IAEnB;AAEA,oBAAS,iBAAiB,SAAS,kBAAkB,GAC9C,MAAM;AACX,eAAS,oBAAoB,SAAS,kBAAkB;AAAA,IAC1D;AAAA,EACF,GAAG,CAAC,KAAK,QAAQ,cAAc,CAAC;AAClC;",
5
- "names": []
6
- }
@@ -1,25 +0,0 @@
1
- import { debounce } from "@take-out/helpers";
2
- import { useCallback, useEffect, useMemo, useState } from "react";
3
- function useDebouncePrepend(list, delay) {
4
- const [current, setCurrent] = useState(list), [previous, setPrevious] = useState(list), [pendingUpdate, setPendingUpdate] = useState(null), debouncedUpdate = useMemo(() => debounce((newList) => {
5
- setCurrent(newList), setPendingUpdate(null);
6
- }, delay), [delay]), updateState = useCallback(
7
- (newList) => {
8
- setCurrent((prevCurrent) => {
9
- const currentList = pendingUpdate || prevCurrent;
10
- return newList.length > previous.length && newList[0]?.id !== previous[0]?.id ? (debouncedUpdate.cancel(), setPendingUpdate(newList), debouncedUpdate(newList), currentList) : (debouncedUpdate.cancel(), setPendingUpdate(null), newList);
11
- });
12
- },
13
- [previous, pendingUpdate, debouncedUpdate]
14
- );
15
- return useEffect(() => {
16
- if (list !== previous)
17
- return setPrevious(list), updateState(list), () => {
18
- debouncedUpdate.cancel();
19
- };
20
- }, [list, previous, updateState, debouncedUpdate]), current;
21
- }
22
- export {
23
- useDebouncePrepend
24
- };
25
- //# sourceMappingURL=useDebouncePrepend.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/useDebouncePrepend.ts"],
4
- "mappings": "AAAA,SAAS,gBAAgB;AACzB,SAAS,aAAa,WAAW,SAAS,gBAAgB;AAEnD,SAAS,mBACd,MACA,OACG;AACH,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,IAAI,GACrC,CAAC,UAAU,WAAW,IAAI,SAAS,IAAI,GACvC,CAAC,eAAe,gBAAgB,IAAI,SAAmB,IAAI,GAE3D,kBAAkB,QAAQ,MACvB,SAAS,CAAC,YAAe;AAC9B,eAAW,OAAO,GAClB,iBAAiB,IAAI;AAAA,EACvB,GAAG,KAAK,GACP,CAAC,KAAK,CAAC,GAEJ,cAAc;AAAA,IAClB,CAAC,YAAe;AACd,iBAAW,CAAC,gBAAgB;AAE1B,cAAM,cAAc,iBAAiB;AAMrC,eAFE,QAAQ,SAAS,SAAS,UAAU,QAAQ,CAAC,GAAG,OAAO,SAAS,CAAC,GAAG,MAIpE,gBAAgB,OAAO,GACvB,iBAAiB,OAAO,GACxB,gBAAgB,OAAO,GAChB,gBAIT,gBAAgB,OAAO,GACvB,iBAAiB,IAAI,GACd;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,CAAC,UAAU,eAAe,eAAe;AAAA,EAC3C;AAEA,mBAAU,MAAM;AACd,QAAI,SAAS;AAKb,yBAAY,IAAI,GAGhB,YAAY,IAAI,GAET,MAAM;AACX,wBAAgB,OAAO;AAAA,MACzB;AAAA,EACF,GAAG,CAAC,MAAM,UAAU,aAAa,eAAe,CAAC,GAE1C;AACT;",
5
- "names": []
6
- }
@@ -1,106 +0,0 @@
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)
6
- if (immutableToNestedChanges[pattern] && currentPath === pattern)
7
- return !0;
8
- return !1;
9
- }
10
- function deepMutateInPlace(target, source) {
11
- if (!(typeof target != "object" || target === null || typeof source != "object" || source === null)) {
12
- if (Array.isArray(target) && Array.isArray(source)) {
13
- target.length = 0, target.push(...source);
14
- return;
15
- }
16
- for (const key in source) {
17
- const targetValue = target[key], sourceValue = source[key];
18
- typeof sourceValue == "object" && sourceValue !== null && typeof targetValue == "object" && targetValue !== null ? deepMutateInPlace(targetValue, sourceValue) : target[key] = sourceValue;
19
- }
20
- }
21
- }
22
- function deepMemoizeWithTracking(current, previous, path, immutableToNestedChanges, parentIsImmutable = !1) {
23
- if (current === previous)
24
- return { value: previous, hasChanges: !1, hasImmutableMutation: !1 };
25
- if (typeof current != "object" || current === null)
26
- return { value: current, hasChanges: !0, hasImmutableMutation: !1 };
27
- if (typeof previous != "object" || previous === null)
28
- return { value: current, hasChanges: !0, hasImmutableMutation: !1 };
29
- const shouldMutateInPlace = shouldBeImmutable(path, immutableToNestedChanges) || parentIsImmutable;
30
- if (Array.isArray(current)) {
31
- if (!Array.isArray(previous))
32
- return { value: current, hasChanges: !0, hasImmutableMutation: !1 };
33
- if (current.length !== previous.length)
34
- return { value: current, hasChanges: !0, hasImmutableMutation: !1 };
35
- let hasChanges2 = !1, hasImmutableMutation2 = !1;
36
- const memoizedArray = [];
37
- for (let i = 0; i < current.length; i++) {
38
- const itemPath = [...path, String(i)], result = deepMemoizeWithTracking(
39
- current[i],
40
- previous[i],
41
- itemPath,
42
- immutableToNestedChanges,
43
- !1
44
- );
45
- memoizedArray[i] = result.value, result.hasChanges && (hasChanges2 = !0), result.hasImmutableMutation && (hasImmutableMutation2 = !0);
46
- }
47
- return hasChanges2 || hasImmutableMutation2 ? { value: memoizedArray, hasChanges: !0, hasImmutableMutation: !1 } : { value: previous, hasChanges: !1, hasImmutableMutation: !1 };
48
- }
49
- const currentKeys = Object.keys(current), previousKeys = Object.keys(previous);
50
- if (currentKeys.length !== previousKeys.length)
51
- return { value: current, hasChanges: !0, hasImmutableMutation: !1 };
52
- if (!currentKeys.every((key) => key in previous))
53
- return { value: current, hasChanges: !0, hasImmutableMutation: !1 };
54
- let hasChanges = !1, hasImmutableMutation = !1;
55
- const memoizedObject = {};
56
- for (const key of currentKeys) {
57
- const propPath = [...path, key], currentValue = current[key], previousValue = previous[key], result = deepMemoizeWithTracking(
58
- currentValue,
59
- previousValue,
60
- propPath,
61
- immutableToNestedChanges,
62
- shouldMutateInPlace
63
- );
64
- memoizedObject[key] = result.value, result.hasChanges && (hasChanges = !0), result.hasImmutableMutation && (hasImmutableMutation = !0);
65
- }
66
- if (shouldMutateInPlace && (hasChanges || hasImmutableMutation)) {
67
- if (parentIsImmutable)
68
- deepMutateInPlace(previous, current);
69
- else
70
- for (const key of currentKeys)
71
- previous[key] = memoizedObject[key];
72
- return { value: previous, hasChanges: !1, hasImmutableMutation: !0 };
73
- }
74
- return hasChanges || hasImmutableMutation ? { value: memoizedObject, hasChanges: !0, hasImmutableMutation: !1 } : { value: previous, hasChanges: !1, hasImmutableMutation: !1 };
75
- }
76
- function deepMemoize(current, previous, path = [], immutableToNestedChanges) {
77
- const result = deepMemoizeWithTracking(
78
- current,
79
- previous,
80
- path,
81
- immutableToNestedChanges,
82
- !1
83
- );
84
- if (path.length === 0 && result.hasImmutableMutation && !result.hasChanges) {
85
- if (Array.isArray(result.value))
86
- return [...result.value];
87
- if (typeof result.value == "object" && result.value !== null)
88
- return { ...result.value };
89
- }
90
- return result.value;
91
- }
92
- function useDeepMemoizedObject(value, options) {
93
- const previousValueRef = useRef(value), memoizedValue = deepMemoize(
94
- value,
95
- previousValueRef.current,
96
- [],
97
- options?.immutableToNestedChanges
98
- );
99
- return previousValueRef.current = memoizedValue, memoizedValue;
100
- }
101
- export {
102
- deepMemoize,
103
- shouldBeImmutable,
104
- useDeepMemoizedObject
105
- };
106
- //# sourceMappingURL=useDeepMemoizedObject.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/useDeepMemoizedObject.ts"],
4
- "mappings": "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",
5
- "names": ["hasChanges", "hasImmutableMutation"]
6
- }
@@ -1,188 +0,0 @@
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
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/useDeepMemoizedObject.test.ts"],
4
- "mappings": "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",
5
- "names": []
6
- }
@@ -1,13 +0,0 @@
1
- import { useState, startTransition, useEffect } from "react";
2
- const useDeferredBoolean = (inVal) => {
3
- const [val, setVal] = useState(inVal);
4
- return useEffect(() => {
5
- val !== inVal && startTransition(() => {
6
- setVal(inVal);
7
- });
8
- }, [inVal, val]), val;
9
- };
10
- export {
11
- useDeferredBoolean
12
- };
13
- //# sourceMappingURL=useDeferredBoolean.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/useDeferredBoolean.tsx"],
4
- "mappings": "AAAA,SAAS,UAAU,iBAAiB,iBAAiB;AAE9C,MAAM,qBAAqB,CAAC,UAA4B;AAC7D,QAAM,CAAC,KAAK,MAAM,IAAI,SAAS,KAAK;AAEpC,mBAAU,MAAM;AACd,IAAI,QAAQ,SACV,gBAAgB,MAAM;AACpB,aAAO,KAAK;AAAA,IACd,CAAC;AAAA,EAEL,GAAG,CAAC,OAAO,GAAG,CAAC,GAER;AACT;",
5
- "names": []
6
- }
@@ -1,12 +0,0 @@
1
- import { useEffect } from "react";
2
- const executedKeys = /* @__PURE__ */ new Set();
3
- function useEffectOnceGlobally(key, callback) {
4
- const keyString = key ? typeof key == "string" ? key : Array.isArray(key) ? typeof key[0] == "string" ? key.sort().join("") : key.map((item) => item.id).sort().join("") : key.id : void 0;
5
- useEffect(() => {
6
- !keyString || executedKeys.has(keyString) || (executedKeys.add(keyString), key !== void 0 ? callback(key) : callback());
7
- }, [keyString, callback, key]);
8
- }
9
- export {
10
- useEffectOnceGlobally
11
- };
12
- //# sourceMappingURL=useEffectOnceGlobally.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/useEffectOnceGlobally.ts"],
4
- "mappings": "AAAA,SAAS,iBAAiB;AAE1B,MAAM,eAAe,oBAAI,IAAY;AAU9B,SAAS,sBACd,KACA,UACA;AACA,QAAM,YAAa,MAEf,OAAO,OAAQ,WACb,MACA,MAAM,QAAQ,GAAG,IACf,OAAO,IAAI,CAAC,KAAM,WACf,IAAiB,KAAK,EAAE,KAAK,EAAE,IAC/B,IACE,IAAI,CAAC,SAAS,KAAK,EAAE,EACrB,KAAK,EACL,KAAK,EAAE,IACX,IAAe,KAVpB;AAYJ,YAAU,MAAM;AACd,IAAI,CAAC,aAAa,aAAa,IAAI,SAAS,MAG5C,aAAa,IAAI,SAAS,GACtB,QAAQ,SACR,SAA6C,GAAqB,IAElE,SAAwB;AAAA,EAE9B,GAAG,CAAC,WAAW,UAAU,GAAG,CAAC;AAC/B;",
5
- "names": []
6
- }
@@ -1,9 +0,0 @@
1
- import { useCallback, useRef } from "react";
2
- function useEvent(fn) {
3
- const ref = useRef(fn);
4
- return ref.current = fn, useCallback((...args) => ref.current(...args), []);
5
- }
6
- export {
7
- useEvent
8
- };
9
- //# sourceMappingURL=useEvent.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/useEvent.ts"],
4
- "mappings": "AAAA,SAAS,aAAa,cAAc;AAE7B,SAAS,SAA4C,IAAU;AACpE,QAAM,MAAM,OAAO,EAAE;AACrB,aAAI,UAAU,IACP,YAAY,IAAI,SAAwB,IAAI,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC;AACzE;",
5
- "names": []
6
- }
@@ -1,11 +0,0 @@
1
- import { useEffect, useState } from "react";
2
- const useIsMounted = () => {
3
- const [state, setState] = useState(!1);
4
- return useEffect(() => {
5
- setState(!0);
6
- }, []), state;
7
- };
8
- export {
9
- useIsMounted
10
- };
11
- //# sourceMappingURL=useIsMounted.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/useIsMounted.ts"],
4
- "mappings": "AAAA,SAAS,WAAW,gBAAgB;AAE7B,MAAM,eAAe,MAAM;AAChC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAK;AAExC,mBAAU,MAAM;AACd,aAAS,EAAI;AAAA,EACf,GAAG,CAAC,CAAC,GAEE;AACT;",
5
- "names": []
6
- }
@@ -1,8 +0,0 @@
1
- import { useLastValueIf } from "./useLastValueIf";
2
- function useLastValue(value) {
3
- return useLastValueIf(value, !0);
4
- }
5
- export {
6
- useLastValue
7
- };
8
- //# sourceMappingURL=useLastValue.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/useLastValue.ts"],
4
- "mappings": "AAAA,SAAS,sBAAsB;AAExB,SAAS,aAAgB,OAAyB;AACvD,SAAO,eAAe,OAAO,EAAI;AACnC;",
5
- "names": []
6
- }
@@ -1,9 +0,0 @@
1
- import { useRef } from "react";
2
- function useLastValueIf(value, keepLast = !0) {
3
- const lastTwoValuesRef = useRef([]), [latest] = lastTwoValuesRef.current;
4
- return keepLast && latest !== value && (lastTwoValuesRef.current = [value, latest]), lastTwoValuesRef.current[1];
5
- }
6
- export {
7
- useLastValueIf
8
- };
9
- //# sourceMappingURL=useLastValueIf.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/useLastValueIf.ts"],
4
- "mappings": "AAAA,SAAS,cAAc;AAEhB,SAAS,eAAkB,OAAU,WAAW,IAAqB;AAE1E,QAAM,mBAAmB,OAA0B,CAAC,CAAC,GAE/C,CAAC,MAAM,IAAI,iBAAiB;AAClC,SAAI,YACE,WAAW,UACb,iBAAiB,UAAU,CAAC,OAAO,MAAM,IAItC,iBAAiB,QAAQ,CAAC;AACnC;",
5
- "names": []
6
- }
@@ -1,11 +0,0 @@
1
- import { useMemo } from "react";
2
- import { useWarnIfDepsChange } from "./useWarnIfDepsChange";
3
- function useMemoStable(getValue, deps, options = {
4
- name: "(untitled)"
5
- }) {
6
- return useWarnIfDepsChange(deps, options), useMemo(getValue, deps);
7
- }
8
- export {
9
- useMemoStable
10
- };
11
- //# sourceMappingURL=useMemoStable.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/useMemoStable.ts"],
4
- "mappings": "AAAA,SAAS,eAAe;AAExB,SAAS,2BAA2B;AAW7B,SAAS,cACd,UACA,MACA,UAAgC;AAAA,EAC9B,MAAM;AACR,GACO;AACP,6BAAoB,MAAM,OAAO,GAG1B,QAAQ,UAAU,IAAI;AAC/B;",
5
- "names": []
6
- }
@@ -1,21 +0,0 @@
1
- import { isEqualDeepLite } from "@take-out/helpers";
2
- import { useEffect, useMemo, useRef } from "react";
3
- function useMemoizedObjectList(list, identityKey) {
4
- const memoizedItems = useRef({}), memoizedList = useRef(list), val = useMemo(() => {
5
- let res = list, didFindChange = !1;
6
- const next = [], lastItems = memoizedItems.current;
7
- list.length !== memoizedList.current.length && (didFindChange = !0);
8
- for (const item_ of list) {
9
- const item = item_, id = item[identityKey], last = lastItems[id];
10
- !last || !isEqualDeepLite(last, item) ? (didFindChange = !0, lastItems[id] = item, next.push(item)) : next.push(last);
11
- }
12
- return didFindChange ? res = next : res = memoizedList.current, res;
13
- }, [identityKey, list]);
14
- return useEffect(() => {
15
- memoizedList.current = val;
16
- }, [val]), val;
17
- }
18
- export {
19
- useMemoizedObjectList
20
- };
21
- //# sourceMappingURL=useMemoizedObjectList.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/useMemoizedObjectList.ts"],
4
- "mappings": "AAAA,SAAS,uBAAuB;AAChC,SAAS,WAAW,SAAS,cAAc;AAapC,SAAS,sBAId,MAAa,aAA6B;AAC1C,QAAM,gBAAgB,OAA4B,CAAC,CAAC,GAC9C,eAAe,OAAc,IAAI,GAEjC,MAAM,QAAQ,MAAM;AACxB,QAAI,MAAM,MACN,gBAAgB;AACpB,UAAM,OAAe,CAAC,GAChB,YAAY,cAAc;AAGhC,IAAI,KAAK,WAAW,aAAa,QAAQ,WACvC,gBAAgB;AAGlB,eAAW,SAAS,MAAM;AACxB,YAAM,OAAO,OACP,KAAK,KAAK,WAAW,GACrB,OAAO,UAAU,EAAE;AAGzB,MAAI,CAAC,QAAQ,CAAC,gBAAgB,MAAM,IAAI,KACtC,gBAAgB,IAWhB,UAAU,EAAE,IAAI,MAChB,KAAK,KAAK,IAAI,KAEd,KAAK,KAAK,IAAI;AAAA,IAElB;AAGA,WAAI,gBACF,MAAM,OAEN,MAAM,aAAa,SAGd;AAAA,EACT,GAAG,CAAC,aAAa,IAAI,CAAC;AAEtB,mBAAU,MAAM;AACd,iBAAa,UAAU;AAAA,EACzB,GAAG,CAAC,GAAG,CAAC,GAED;AACT;",
5
- "names": []
6
- }
@@ -1,15 +0,0 @@
1
- import { useRef } from "react";
2
- import { useEvent } from "./useEvent";
3
- const useThrottle = (fn, delay = 100) => {
4
- const lastCallTime = useRef(0), timeoutRef = useRef(null), stableFn = useEvent(fn);
5
- return useEvent((...args) => {
6
- const now = Date.now(), timeSinceLastCall = now - lastCallTime.current;
7
- timeSinceLastCall >= delay ? (lastCallTime.current = now, stableFn(...args)) : (timeoutRef.current && clearTimeout(timeoutRef.current), timeoutRef.current = setTimeout(() => {
8
- lastCallTime.current = Date.now(), stableFn(...args), timeoutRef.current = null;
9
- }, delay - timeSinceLastCall));
10
- });
11
- };
12
- export {
13
- useThrottle
14
- };
15
- //# sourceMappingURL=useThrottle.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/useThrottle.ts"],
4
- "mappings": "AAAA,SAAS,cAAc;AAEvB,SAAS,gBAAgB;AAIlB,MAAM,cAAc,CAAoC,IAAO,QAAQ,QAAW;AACvF,QAAM,eAAe,OAAe,CAAC,GAC/B,aAAa,OAAqB,IAAI,GAEtC,WAAW,SAAS,EAAE;AAwB5B,SAtBoB,SAAS,IAAI,SAAwB;AACvD,UAAM,MAAM,KAAK,IAAI,GACf,oBAAoB,MAAM,aAAa;AAE7C,IAAI,qBAAqB,SAEvB,aAAa,UAAU,KACvB,SAAS,GAAG,IAAI,MAGZ,WAAW,WACb,aAAa,WAAW,OAAO,GAGjC,WAAW,UAAU,WAAW,MAAM;AACpC,mBAAa,UAAU,KAAK,IAAI,GAChC,SAAS,GAAG,IAAI,GAChB,WAAW,UAAU;AAAA,IACvB,GAAG,QAAQ,iBAAiB;AAAA,EAEhC,CAAC;AAGH;",
5
- "names": []
6
- }
@@ -1,31 +0,0 @@
1
- import { getCurrentComponentStack } from "@take-out/helpers";
2
- import { useEffect, useId, useRef } from "react";
3
- function useWarnIfDepsChange(deps, options) {
4
- const { maxChanges = 0, name, ignoreIndexBefore = 0 } = options, changeCountRef = useRef(0), prevDepsRef = useRef(void 0), id = useId();
5
- useEffect(() => {
6
- if (process.env.NODE_ENV === "development") {
7
- if (prevDepsRef.current !== void 0) {
8
- const changedDeps = [];
9
- (ignoreIndexBefore ? deps.slice(ignoreIndexBefore) : deps).forEach((dep, indexIn) => {
10
- const index = indexIn + ignoreIndexBefore;
11
- prevDepsRef.current && prevDepsRef.current[index] !== dep && changedDeps.push({
12
- index,
13
- prev: prevDepsRef.current[index],
14
- next: dep
15
- });
16
- }), changedDeps.length > 0 && (changeCountRef.current++, changeCountRef.current > maxChanges && console.info(
17
- `\u{1F504} useWarnIfDepsChange "${name}" is changing too often! Changed ${changeCountRef.current} times (max: ${maxChanges})`,
18
- changedDeps,
19
- `
20
- id (${id}) at:`,
21
- getCurrentComponentStack("short")
22
- ));
23
- }
24
- prevDepsRef.current = deps;
25
- }
26
- });
27
- }
28
- export {
29
- useWarnIfDepsChange
30
- };
31
- //# sourceMappingURL=useWarnIfDepsChange.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/useWarnIfDepsChange.ts"],
4
- "mappings": "AAAA,SAAS,gCAAgC;AACzC,SAAS,WAAW,OAAO,cAAc;AAQlC,SAAS,oBACd,MACA,SACM;AACN,QAAM,EAAE,aAAa,GAAG,MAAM,oBAAoB,EAAE,IAAI,SAElD,iBAAiB,OAAO,CAAC,GACzB,cAAc,OAAsB,MAAS,GAC7C,KAAK,MAAM;AAEjB,YAAU,MAAM;AACd,QAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,UAAI,YAAY,YAAY,QAAW;AACrC,cAAM,cAID,CAAC;AAIN,SAFoB,oBAAoB,KAAK,MAAM,iBAAiB,IAAI,MAE5D,QAAQ,CAAC,KAAK,YAAY;AACpC,gBAAM,QAAQ,UAAU;AAExB,UAAI,YAAY,WAAW,YAAY,QAAQ,KAAK,MAAM,OACxD,YAAY,KAAK;AAAA,YACf;AAAA,YACA,MAAM,YAAY,QAAQ,KAAK;AAAA,YAC/B,MAAM;AAAA,UACR,CAAC;AAAA,QAEL,CAAC,GAEG,YAAY,SAAS,MACvB,eAAe,WAEX,eAAe,UAAU,cAE3B,QAAQ;AAAA,UACN,kCAA2B,IAAI,oCAAoC,eAAe,OAAO,gBAAgB,UAAU;AAAA,UACnH;AAAA,UACA;AAAA,OAAU,EAAE;AAAA,UACZ,yBAAyB,OAAO;AAAA,QAClC;AAAA,MAGN;AAEA,kBAAY,UAAU;AAAA,IACxB;AAAA,EACF,CAAC;AACH;",
5
- "names": []
6
- }