@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.
- package/dist/esm/index.js +13 -13
- package/dist/esm/index.js.map +1 -6
- package/package.json +3 -3
- package/src/useDebouncePrepend.ts +2 -2
- package/src/useDeepMemoizedObject.test.ts +13 -13
- package/src/useDeepMemoizedObject.ts +7 -7
- package/src/useEffectOnceGlobally.ts +1 -1
- package/src/useMemoStable.ts +1 -1
- package/src/useWarnIfDepsChange.ts +2 -2
- package/src/useWarnIfMemoChangesOften.ts +1 -1
- package/dist/cjs/index.js +0 -27
- package/dist/cjs/index.js.map +0 -6
- package/dist/cjs/useClickOutside.js +0 -37
- package/dist/cjs/useClickOutside.js.map +0 -6
- package/dist/cjs/useDebouncePrepend.js +0 -40
- package/dist/cjs/useDebouncePrepend.js.map +0 -6
- package/dist/cjs/useDeepMemoizedObject.js +0 -122
- package/dist/cjs/useDeepMemoizedObject.js.map +0 -6
- package/dist/cjs/useDeepMemoizedObject.test.js +0 -187
- package/dist/cjs/useDeepMemoizedObject.test.js.map +0 -6
- package/dist/cjs/useDeferredBoolean.js +0 -29
- package/dist/cjs/useDeferredBoolean.js.map +0 -6
- package/dist/cjs/useEffectOnceGlobally.js +0 -28
- package/dist/cjs/useEffectOnceGlobally.js.map +0 -6
- package/dist/cjs/useEvent.js +0 -25
- package/dist/cjs/useEvent.js.map +0 -6
- package/dist/cjs/useIsMounted.js +0 -27
- package/dist/cjs/useIsMounted.js.map +0 -6
- package/dist/cjs/useLastValue.js +0 -24
- package/dist/cjs/useLastValue.js.map +0 -6
- package/dist/cjs/useLastValueIf.js +0 -25
- package/dist/cjs/useLastValueIf.js.map +0 -6
- package/dist/cjs/useMemoStable.js +0 -26
- package/dist/cjs/useMemoStable.js.map +0 -6
- package/dist/cjs/useMemoizedObjectList.js +0 -36
- package/dist/cjs/useMemoizedObjectList.js.map +0 -6
- package/dist/cjs/useThrottle.js +0 -30
- package/dist/cjs/useThrottle.js.map +0 -6
- package/dist/cjs/useWarnIfDepsChange.js +0 -46
- package/dist/cjs/useWarnIfDepsChange.js.map +0 -6
- package/dist/cjs/useWarnIfMemoChangesOften.js +0 -29
- package/dist/cjs/useWarnIfMemoChangesOften.js.map +0 -6
- package/dist/esm/useClickOutside.js +0 -22
- package/dist/esm/useClickOutside.js.map +0 -6
- package/dist/esm/useDebouncePrepend.js +0 -25
- package/dist/esm/useDebouncePrepend.js.map +0 -6
- package/dist/esm/useDeepMemoizedObject.js +0 -106
- package/dist/esm/useDeepMemoizedObject.js.map +0 -6
- package/dist/esm/useDeepMemoizedObject.test.js +0 -188
- package/dist/esm/useDeepMemoizedObject.test.js.map +0 -6
- package/dist/esm/useDeferredBoolean.js +0 -13
- package/dist/esm/useDeferredBoolean.js.map +0 -6
- package/dist/esm/useEffectOnceGlobally.js +0 -12
- package/dist/esm/useEffectOnceGlobally.js.map +0 -6
- package/dist/esm/useEvent.js +0 -9
- package/dist/esm/useEvent.js.map +0 -6
- package/dist/esm/useIsMounted.js +0 -11
- package/dist/esm/useIsMounted.js.map +0 -6
- package/dist/esm/useLastValue.js +0 -8
- package/dist/esm/useLastValue.js.map +0 -6
- package/dist/esm/useLastValueIf.js +0 -9
- package/dist/esm/useLastValueIf.js.map +0 -6
- package/dist/esm/useMemoStable.js +0 -11
- package/dist/esm/useMemoStable.js.map +0 -6
- package/dist/esm/useMemoizedObjectList.js +0 -21
- package/dist/esm/useMemoizedObjectList.js.map +0 -6
- package/dist/esm/useThrottle.js +0 -15
- package/dist/esm/useThrottle.js.map +0 -6
- package/dist/esm/useWarnIfDepsChange.js +0 -31
- package/dist/esm/useWarnIfDepsChange.js.map +0 -6
- package/dist/esm/useWarnIfMemoChangesOften.js +0 -14
- 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": "AAAA,SAAS,UAAU,QAAQ,UAAU;AAErC,SAAS,mBAAiC;AAE1C,SAAS,gBACP,cACA,SAC4C;AAC5C,MAAI,gBAAgB;AAEpB,SAAO;AAAA,IACL,IAAI,UAAU;AACZ,aAAO;AAAA,IACT;AAAA,IACA,OAAO,OAAU;AACf,sBAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACA,CAAC;AAAA,QACD,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,yBAAyB,MAAM;AACtC,KAAG,qDAAqD,MAAM;AAC5D,UAAM,OAAO,gBAAgB,EAAE,GACzB,cAAc,KAAK;AACzB,SAAK,OAAO,EAAE,GACd,OAAO,KAAK,OAAO,EAAE,KAAK,WAAW;AAAA,EACvC,CAAC,GAED,GAAG,kDAAkD,MAAM;AAEzD,UAAM,OAAO,gBADD,EAAE,GAAG,GAAG,GAAG,EAAE,CACO,GAC1B,cAAc,KAAK;AACzB,SAAK,OAAO,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,GAC1B,OAAO,KAAK,OAAO,EAAE,KAAK,WAAW;AAAA,EACvC,CAAC,GAED,GAAG,iDAAiD,MAAM;AAExD,UAAM,OAAO,gBADD,CAAC,GAAG,GAAG,CAAC,CACY,GAC1B,cAAc,KAAK;AACzB,SAAK,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,GACrB,OAAO,KAAK,OAAO,EAAE,KAAK,WAAW;AAAA,EACvC,CAAC,GAED,GAAG,iDAAiD,MAAM;AAYxD,UAAM,OAAO,gBAXG;AAAA,MACd,QAAQ;AAAA,QACN,IAAI;AAAA,QACJ,UAAU;AAAA,UACR,EAAE,IAAI,GAAG,MAAM,UAAU;AAAA,UACzB,EAAE,IAAI,GAAG,MAAM,SAAS;AAAA,UACxB,EAAE,IAAI,GAAG,MAAM,OAAO;AAAA,QACxB;AAAA,MACF;AAAA,IACF,CAEoC,GAC9B,cAAc,KAAK,SAEnB,UAAU;AAAA,MACd,QAAQ;AAAA,QACN,IAAI;AAAA,QACJ,UAAU;AAAA,UACR,EAAE,IAAI,GAAG,MAAM,kBAAkB;AAAA,UACjC,EAAE,IAAI,GAAG,MAAM,SAAS;AAAA,UACxB,EAAE,IAAI,GAAG,MAAM,OAAO;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAEA,SAAK,OAAO,OAAO;AACnB,UAAM,eAAe,KAAK;AAE1B,WAAO,YAAY,EAAE,IAAI,KAAK,WAAW,GACzC,OAAO,aAAa,MAAM,EAAE,IAAI,KAAK,YAAY,MAAM,GACvD,OAAO,aAAa,OAAO,QAAQ,EAAE,IAAI,KAAK,YAAY,OAAO,QAAQ,GACzE,OAAO,aAAa,OAAO,SAAS,CAAC,CAAC,EAAE,IAAI,KAAK,YAAY,OAAO,SAAS,CAAC,CAAC,GAC/E,OAAO,aAAa,OAAO,SAAS,CAAC,CAAC,EAAE,KAAK,YAAY,OAAO,SAAS,CAAC,CAAC,GAC3E,OAAO,aAAa,OAAO,SAAS,CAAC,CAAC,EAAE,KAAK,YAAY,OAAO,SAAS,CAAC,CAAC;AAAA,EAC7E,CAAC,GAED,GAAG,+CAA+C,MAAM;AACtD,UAAM,UAAU;AAAA,MACd,QAAQ;AAAA,QACN,UAAU;AAAA,UACR;AAAA,YACE,IAAI;AAAA,YACJ,UAAU;AAAA,cACR,EAAE,IAAI,GAAG,MAAM,KAAK;AAAA,cACpB,EAAE,IAAI,GAAG,MAAM,QAAQ;AAAA,cACvB;AAAA,gBACE,IAAI;AAAA,gBACJ,MAAM;AAAA,gBACN,WAAW;AAAA,kBACT,EAAE,OAAO,aAAM,OAAO,EAAE;AAAA,kBACxB,EAAE,OAAO,gBAAM,OAAO,EAAE;AAAA,kBACxB,EAAE,OAAO,aAAM,OAAO,GAAG,WAAW,aAAa;AAAA,kBACjD,EAAE,OAAO,aAAM,OAAO,EAAE;AAAA,gBAC1B;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,GAEM,OAAO,gBAAgB,OAAO,GAC9B,cAAc,KAAK,SAEnB,UAAU,KAAK,MAAM,KAAK,UAAU,OAAO,CAAC;AAClD,YAAQ,OAAO,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,UAAU,CAAC,EAAE,YAAY,cAEhE,KAAK,OAAO,OAAO;AACnB,UAAM,eAAe,KAAK;AAE1B,WAAO,YAAY,EAAE,IAAI,KAAK,WAAW,GACzC,OAAO,aAAa,MAAM,EAAE,IAAI,KAAK,YAAY,MAAM,GACvD,OAAO,aAAa,OAAO,QAAQ,EAAE,IAAI,KAAK,YAAY,OAAO,QAAQ,GACzE,OAAO,aAAa,OAAO,SAAS,CAAC,CAAC,EAAE,IAAI,KAAK,YAAY,OAAO,SAAS,CAAC,CAAC,GAC/E,OAAO,aAAa,OAAO,SAAS,CAAC,EAAG,QAAQ,EAAE,IAAI;AAAA,MACpD,YAAY,OAAO,SAAS,CAAC,EAAG;AAAA,IAClC,GAEA,OAAO,aAAa,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,CAAC,EAAE;AAAA,MACnD,YAAY,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC;AAAA,IAC5C,GACA,OAAO,aAAa,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,CAAC,EAAE;AAAA,MACnD,YAAY,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC;AAAA,IAC5C,GACA,OAAO,aAAa,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,CAAC,EAAE,IAAI;AAAA,MACvD,YAAY,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC;AAAA,IAC5C,GAEA,OAAO,aAAa,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,EAAG,SAAS,EAAE,IAAI;AAAA,MAClE,YAAY,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,EAAG;AAAA,IAC/C,GACA,OAAO,aAAa,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,EAAG,UAAW,CAAC,CAAC,EAAE;AAAA,MAClE,YAAY,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,EAAG,UAAW,CAAC;AAAA,IAC3D,GACA,OAAO,aAAa,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,EAAG,UAAW,CAAC,CAAC,EAAE;AAAA,MAClE,YAAY,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,EAAG,UAAW,CAAC;AAAA,IAC3D,GACA,OAAO,aAAa,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,EAAG,UAAW,CAAC,CAAC,EAAE,IAAI;AAAA,MACtE,YAAY,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,EAAG,UAAW,CAAC;AAAA,IAC3D,GACA,OAAO,aAAa,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,EAAG,UAAW,CAAC,CAAC,EAAE;AAAA,MAClE,YAAY,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,EAAG,UAAW,CAAC;AAAA,IAC3D;AAAA,EACF,CAAC,GAED,GAAG,kDAAkD,MAAM;AACzD,UAAM,UAAU;AAAA,MACd,QAAQ;AAAA,QACN,IAAI;AAAA,QACJ,UAAU;AAAA,UACR;AAAA,YACE,IAAI;AAAA,YACJ,UAAU;AAAA,cACR,EAAE,IAAI,GAAG,MAAM,KAAK;AAAA,cACpB,EAAE,IAAI,GAAG,MAAM,QAAQ;AAAA,cACvB,EAAE,IAAI,GAAG,MAAM,QAAQ;AAAA,cACvB,EAAE,IAAI,GAAG,MAAM,MAAM;AAAA,cACrB,EAAE,IAAI,GAAG,MAAM,MAAM;AAAA,cACrB;AAAA,gBACE,IAAI;AAAA,gBACJ,MAAM;AAAA,gBACN,WAAW;AAAA,kBACT,EAAE,OAAO,aAAM,OAAO,EAAE;AAAA,kBACxB,EAAE,OAAO,gBAAM,OAAO,EAAE;AAAA,kBACxB,EAAE,OAAO,aAAM,OAAO,GAAG,WAAW,aAAa;AAAA,gBACnD;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,GAEM,OAAO,gBAAgB,SAAS;AAAA,MACpC,0BAA0B;AAAA,QACxB,QAAQ;AAAA,QACR,qBAAqB;AAAA,MACvB;AAAA,IACF,CAAC,GAEK,cAAc,KAAK,SAEnB,mBAAmB,YAAY,OAAO,UACtC,mBAAmB,YAAY,OAAO,SAAS,CAAC,GAChD,mBAAmB,YAAY,OAAO,SAAS,CAAC,EAAG,UACnD,mBAAmB,YAAY,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,GAC7D,oBAAoB,YAAY,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,EAAG,WAEjE,UAAU,KAAK,MAAM,KAAK,UAAU,OAAO,CAAC;AAClD,YAAQ,OAAO,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,UAAU,CAAC,EAAE,YAAY,cAEhE,KAAK,OAAO,OAAO;AACnB,UAAM,eAAe,KAAK;AAE1B,WAAO,YAAY,EAAE,IAAI,KAAK,WAAW,GAEzC,OAAO,aAAa,MAAM,EAAE,KAAK,YAAY,MAAM,GAEnD,OAAO,aAAa,OAAO,QAAQ,EAAE,IAAI,KAAK,gBAAgB,GAE9D,OAAO,aAAa,OAAO,SAAS,CAAC,CAAC,EAAE,KAAK,gBAAgB,GAE7D,OAAO,aAAa,OAAO,SAAS,CAAC,EAAG,QAAQ,EAAE,IAAI,KAAK,gBAAgB,GAC3E,OAAO,aAAa,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,CAAC,EAAE,IAAI,KAAK,gBAAgB,GAC9E,OAAO,aAAa,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,EAAG,SAAS,EAAE,IAAI;AAAA,MAClE;AAAA,IACF,GAEA,OAAO,aAAa,OAAO,SAAS,CAAC,EAAG,SAAS,CAAC,EAAG,UAAW,CAAC,EAAG,SAAS,EAAE;AAAA,MAC7E;AAAA,IACF;AAAA,EACF,CAAC,GAED,GAAG,kDAAkD,MAAM;AAEzD,UAAM,OAAO,gBADG,EAAE,GAAG,GAAG,GAAG,EAAE,CACO,GAC9B,cAAc,KAAK,SACnB,UAAU,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAEnC,SAAK,OAAO,OAAO,GACnB,OAAO,KAAK,OAAO,EAAE,IAAI,KAAK,WAAW,GACzC,OAAO,KAAK,OAAO,EAAE,QAAQ,OAAO;AAAA,EACtC,CAAC,GAED,GAAG,sCAAsC,MAAM;AAE7C,UAAM,OAAO,gBADG,CAAC,GAAG,GAAG,CAAC,CACY,GAC9B,cAAc,KAAK;AACzB,SAAK,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GACxB,OAAO,KAAK,OAAO,EAAE,IAAI,KAAK,WAAW,GACzC,OAAO,KAAK,OAAO,EAAE,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,EAC3C,CAAC,GAED,GAAG,2CAA2C,MAAM;AAClD,UAAM,WAAW,gBAAgB,IAAW;AAC5C,WAAO,SAAS,OAAO,EAAE,KAAK,IAAI,GAElC,SAAS,OAAO,MAAgB,GAChC,OAAO,SAAS,OAAO,EAAE,KAAK,MAAS,GAEvC,SAAS,OAAO,EAAE,GAAG,MAAM,GAAG,OAAU,CAAC;AACzC,UAAM,YAAY,SAAS;AAC3B,WAAO,UAAU,CAAC,EAAE,KAAK,IAAI,GAC7B,OAAO,UAAU,CAAC,EAAE,KAAK,MAAS;AAAA,EACpC,CAAC,GAED,GAAG,qDAAqD,MAAM;AAO5D,UAAM,OAAO,gBANG;AAAA,MACd,EAAE,IAAI,GAAG,MAAM,QAAQ;AAAA,MACvB,EAAE,IAAI,GAAG,MAAM,MAAM;AAAA,MACrB,EAAE,IAAI,GAAG,MAAM,UAAU;AAAA,IAC3B,CAEoC,GAC9B,cAAc,KAAK,SAEnB,UAAU;AAAA,MACd,EAAE,IAAI,GAAG,MAAM,QAAQ;AAAA,MACvB,EAAE,IAAI,GAAG,MAAM,QAAQ;AAAA,MACvB,EAAE,IAAI,GAAG,MAAM,UAAU;AAAA,IAC3B;AAEA,SAAK,OAAO,OAAO;AACnB,UAAM,eAAe,KAAK;AAE1B,WAAO,YAAY,EAAE,IAAI,KAAK,WAAW,GACzC,OAAO,aAAa,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC,GAC3C,OAAO,aAAa,CAAC,CAAC,EAAE,IAAI,KAAK,YAAY,CAAC,CAAC,GAC/C,OAAO,aAAa,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC;AAAA,EAC7C,CAAC,GAED,GAAG,2DAA2D,MAAM;AAClE,UAAM,UAAU;AAAA,MACd,KAAK;AAAA,QACH,UAAU;AAAA,UACR,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,YACN,MAAM;AAAA,cACJ,OAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,GAEM,OAAO,gBAAgB,SAAS;AAAA,MACpC,0BAA0B;AAAA,QACxB,gBAAgB;AAAA,MAClB;AAAA,IACF,CAAC,GAEK,cAAc,KAAK,SACnB,mBAAmB,YAAY,IAAI,UACnC,iBAAiB,YAAY,IAAI,SAAS,QAC1C,eAAe,YAAY,IAAI,SAAS,OAAO,MAE/C,UAAU,KAAK,MAAM,KAAK,UAAU,OAAO,CAAC;AAClD,YAAQ,IAAI,SAAS,OAAO,KAAK,QAAQ,GAEzC,KAAK,OAAO,OAAO;AACnB,UAAM,eAAe,KAAK;AAE1B,WAAO,YAAY,EAAE,IAAI,KAAK,WAAW,GACzC,OAAO,aAAa,GAAG,EAAE,IAAI,KAAK,YAAY,GAAG,GAEjD,OAAO,aAAa,IAAI,QAAQ,EAAE,KAAK,gBAAgB,GAEvD,OAAO,aAAa,IAAI,SAAS,MAAM,EAAE,KAAK,cAAc,GAC5D,OAAO,aAAa,IAAI,SAAS,OAAO,IAAI,EAAE,KAAK,YAAY,GAE/D,OAAO,aAAa,IAAI,SAAS,OAAO,KAAK,KAAK,EAAE,KAAK,CAAC;AAAA,EAC5D,CAAC,GAED,GAAG,0DAA0D,MAAM;AAGjE,UAAM,OAAO,gBAFG,CAAC,GAAG,UAAU,EAAE,IAAI,GAAG,MAAM,SAAS,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,MAAS,CAE/C,GAC9B,cAAc,KAAK,SAEnB,UAAU,CAAC,GAAG,UAAU,EAAE,IAAI,GAAG,MAAM,UAAU,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,MAAS;AAEpF,SAAK,OAAO,OAAO;AACnB,UAAM,eAAe,KAAK;AAE1B,WAAO,YAAY,EAAE,IAAI,KAAK,WAAW,GACzC,OAAO,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,GAC9B,OAAO,aAAa,CAAC,CAAC,EAAE,KAAK,QAAQ,GACrC,OAAO,aAAa,CAAC,CAAC,EAAE,IAAI,KAAK,YAAY,CAAC,CAAC,GAC/C,OAAO,aAAa,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC,GAC3C,OAAO,aAAa,CAAC,CAAC,EAAE,KAAK,IAAI,GACjC,OAAO,aAAa,CAAC,CAAC,EAAE,KAAK,MAAS;AAAA,EACxC,CAAC;AACH,CAAC;",
|
|
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
|
-
}
|
package/dist/esm/useEvent.js
DELETED
package/dist/esm/useEvent.js.map
DELETED
package/dist/esm/useIsMounted.js
DELETED
package/dist/esm/useLastValue.js
DELETED
|
@@ -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,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
|
-
}
|
package/dist/esm/useThrottle.js
DELETED
|
@@ -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
|
-
}
|