@o/hooks 0.16.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +120 -0
- package/dist/cjs/index.cjs +32 -0
- package/dist/cjs/index.native.js +35 -0
- package/dist/cjs/index.native.js.map +1 -0
- package/dist/cjs/useClickOutside.cjs +52 -0
- package/dist/cjs/useClickOutside.native.js +63 -0
- package/dist/cjs/useClickOutside.native.js.map +1 -0
- package/dist/cjs/useDebouncePrepend.cjs +66 -0
- package/dist/cjs/useDebouncePrepend.native.js +70 -0
- package/dist/cjs/useDebouncePrepend.native.js.map +1 -0
- package/dist/cjs/useDeepMemoizedObject.cjs +207 -0
- package/dist/cjs/useDeepMemoizedObject.native.js +258 -0
- package/dist/cjs/useDeepMemoizedObject.native.js.map +1 -0
- package/dist/cjs/useDeepMemoizedObject.test.cjs +321 -0
- package/dist/cjs/useDeepMemoizedObject.test.native.js +324 -0
- package/dist/cjs/useDeepMemoizedObject.test.native.js.map +1 -0
- package/dist/cjs/useDeferredBoolean.cjs +39 -0
- package/dist/cjs/useDeferredBoolean.native.js +42 -0
- package/dist/cjs/useDeferredBoolean.native.js.map +1 -0
- package/dist/cjs/useEffectOnceGlobally.cjs +45 -0
- package/dist/cjs/useEffectOnceGlobally.native.js +50 -0
- package/dist/cjs/useEffectOnceGlobally.native.js.map +1 -0
- package/dist/cjs/useEvent.cjs +33 -0
- package/dist/cjs/useEvent.native.js +41 -0
- package/dist/cjs/useEvent.native.js.map +1 -0
- package/dist/cjs/useIsMounted.cjs +35 -0
- package/dist/cjs/useIsMounted.native.js +38 -0
- package/dist/cjs/useIsMounted.native.js.map +1 -0
- package/dist/cjs/useLastValue.cjs +31 -0
- package/dist/cjs/useLastValue.native.js +34 -0
- package/dist/cjs/useLastValue.native.js.map +1 -0
- package/dist/cjs/useLastValueIf.cjs +38 -0
- package/dist/cjs/useLastValueIf.native.js +42 -0
- package/dist/cjs/useLastValueIf.native.js.map +1 -0
- package/dist/cjs/useMemoStable.cjs +35 -0
- package/dist/cjs/useMemoStable.native.js +39 -0
- package/dist/cjs/useMemoStable.native.js.map +1 -0
- package/dist/cjs/useMemoizedObjectList.cjs +64 -0
- package/dist/cjs/useMemoizedObjectList.native.js +86 -0
- package/dist/cjs/useMemoizedObjectList.native.js.map +1 -0
- package/dist/cjs/useThrottle.cjs +52 -0
- package/dist/cjs/useThrottle.native.js +59 -0
- package/dist/cjs/useThrottle.native.js.map +1 -0
- package/dist/cjs/useWarnIfDepsChange.cjs +65 -0
- package/dist/cjs/useWarnIfDepsChange.native.js +68 -0
- package/dist/cjs/useWarnIfDepsChange.native.js.map +1 -0
- package/dist/cjs/useWarnIfMemoChangesOften.cjs +43 -0
- package/dist/cjs/useWarnIfMemoChangesOften.native.js +48 -0
- package/dist/cjs/useWarnIfMemoChangesOften.native.js.map +1 -0
- package/dist/esm/index.js +14 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/index.mjs +14 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/index.native.js +14 -0
- package/dist/esm/index.native.js.map +1 -0
- package/dist/esm/useClickOutside.mjs +27 -0
- package/dist/esm/useClickOutside.mjs.map +1 -0
- package/dist/esm/useClickOutside.native.js +35 -0
- package/dist/esm/useClickOutside.native.js.map +1 -0
- package/dist/esm/useDebouncePrepend.mjs +41 -0
- package/dist/esm/useDebouncePrepend.mjs.map +1 -0
- package/dist/esm/useDebouncePrepend.native.js +42 -0
- package/dist/esm/useDebouncePrepend.native.js.map +1 -0
- package/dist/esm/useDeepMemoizedObject.mjs +180 -0
- package/dist/esm/useDeepMemoizedObject.mjs.map +1 -0
- package/dist/esm/useDeepMemoizedObject.native.js +228 -0
- package/dist/esm/useDeepMemoizedObject.native.js.map +1 -0
- package/dist/esm/useDeepMemoizedObject.test.mjs +322 -0
- package/dist/esm/useDeepMemoizedObject.test.mjs.map +1 -0
- package/dist/esm/useDeepMemoizedObject.test.native.js +322 -0
- package/dist/esm/useDeepMemoizedObject.test.native.js.map +1 -0
- package/dist/esm/useDeferredBoolean.mjs +14 -0
- package/dist/esm/useDeferredBoolean.mjs.map +1 -0
- package/dist/esm/useDeferredBoolean.native.js +14 -0
- package/dist/esm/useDeferredBoolean.native.js.map +1 -0
- package/dist/esm/useEffectOnceGlobally.mjs +20 -0
- package/dist/esm/useEffectOnceGlobally.mjs.map +1 -0
- package/dist/esm/useEffectOnceGlobally.native.js +22 -0
- package/dist/esm/useEffectOnceGlobally.native.js.map +1 -0
- package/dist/esm/useEvent.mjs +8 -0
- package/dist/esm/useEvent.mjs.map +1 -0
- package/dist/esm/useEvent.native.js +13 -0
- package/dist/esm/useEvent.native.js.map +1 -0
- package/dist/esm/useIsMounted.mjs +10 -0
- package/dist/esm/useIsMounted.mjs.map +1 -0
- package/dist/esm/useIsMounted.native.js +10 -0
- package/dist/esm/useIsMounted.native.js.map +1 -0
- package/dist/esm/useLastValue.mjs +6 -0
- package/dist/esm/useLastValue.mjs.map +1 -0
- package/dist/esm/useLastValue.native.js +6 -0
- package/dist/esm/useLastValue.native.js.map +1 -0
- package/dist/esm/useLastValueIf.mjs +13 -0
- package/dist/esm/useLastValueIf.mjs.map +1 -0
- package/dist/esm/useLastValueIf.native.js +14 -0
- package/dist/esm/useLastValueIf.native.js.map +1 -0
- package/dist/esm/useMemoStable.mjs +10 -0
- package/dist/esm/useMemoStable.mjs.map +1 -0
- package/dist/esm/useMemoStable.native.js +11 -0
- package/dist/esm/useMemoStable.native.js.map +1 -0
- package/dist/esm/useMemoizedObjectList.mjs +39 -0
- package/dist/esm/useMemoizedObjectList.mjs.map +1 -0
- package/dist/esm/useMemoizedObjectList.native.js +58 -0
- package/dist/esm/useMemoizedObjectList.native.js.map +1 -0
- package/dist/esm/useThrottle.mjs +27 -0
- package/dist/esm/useThrottle.mjs.map +1 -0
- package/dist/esm/useThrottle.native.js +31 -0
- package/dist/esm/useThrottle.native.js.map +1 -0
- package/dist/esm/useWarnIfDepsChange.mjs +40 -0
- package/dist/esm/useWarnIfDepsChange.mjs.map +1 -0
- package/dist/esm/useWarnIfDepsChange.native.js +40 -0
- package/dist/esm/useWarnIfDepsChange.native.js.map +1 -0
- package/dist/esm/useWarnIfMemoChangesOften.mjs +18 -0
- package/dist/esm/useWarnIfMemoChangesOften.mjs.map +1 -0
- package/dist/esm/useWarnIfMemoChangesOften.native.js +20 -0
- package/dist/esm/useWarnIfMemoChangesOften.native.js.map +1 -0
- package/package.json +59 -0
- package/src/index.ts +13 -0
- package/src/useClickOutside.ts +34 -0
- package/src/useDebouncePrepend.ts +63 -0
- package/src/useDeepMemoizedObject.test.ts +344 -0
- package/src/useDeepMemoizedObject.ts +231 -0
- package/src/useDeferredBoolean.tsx +15 -0
- package/src/useEffectOnceGlobally.ts +41 -0
- package/src/useEvent.ts +7 -0
- package/src/useIsMounted.ts +11 -0
- package/src/useLastValue.ts +5 -0
- package/src/useLastValueIf.ts +15 -0
- package/src/useMemoStable.ts +25 -0
- package/src/useMemoizedObjectList.ts +74 -0
- package/src/useThrottle.ts +36 -0
- package/src/useWarnIfDepsChange.ts +61 -0
- package/src/useWarnIfMemoChangesOften.ts +24 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all) __defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: true
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
16
|
+
get: () => from[key],
|
|
17
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
23
|
+
value: true
|
|
24
|
+
}), mod);
|
|
25
|
+
var useWarnIfDepsChange_exports = {};
|
|
26
|
+
__export(useWarnIfDepsChange_exports, {
|
|
27
|
+
useWarnIfDepsChange: () => useWarnIfDepsChange
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(useWarnIfDepsChange_exports);
|
|
30
|
+
var import_helpers = require("@o/helpers");
|
|
31
|
+
var import_react = require("react");
|
|
32
|
+
function useWarnIfDepsChange(deps, options) {
|
|
33
|
+
var {
|
|
34
|
+
maxChanges = 0,
|
|
35
|
+
name,
|
|
36
|
+
ignoreIndexBefore = 0
|
|
37
|
+
} = options;
|
|
38
|
+
var changeCountRef = (0, import_react.useRef)(0);
|
|
39
|
+
var prevDepsRef = (0, import_react.useRef)(void 0);
|
|
40
|
+
var id = (0, import_react.useId)();
|
|
41
|
+
(0, import_react.useEffect)(function () {
|
|
42
|
+
if (process.env.NODE_ENV === "development") {
|
|
43
|
+
if (prevDepsRef.current !== void 0) {
|
|
44
|
+
var changedDeps = [];
|
|
45
|
+
var compareDeps = ignoreIndexBefore ? deps.slice(ignoreIndexBefore) : deps;
|
|
46
|
+
compareDeps.forEach(function (dep, indexIn) {
|
|
47
|
+
var index = indexIn + ignoreIndexBefore;
|
|
48
|
+
if (prevDepsRef.current && prevDepsRef.current[index] !== dep) {
|
|
49
|
+
changedDeps.push({
|
|
50
|
+
index,
|
|
51
|
+
prev: prevDepsRef.current[index],
|
|
52
|
+
next: dep
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
if (changedDeps.length > 0) {
|
|
57
|
+
changeCountRef.current++;
|
|
58
|
+
if (changeCountRef.current > maxChanges) {
|
|
59
|
+
console.info(`\u{1F504} useWarnIfDepsChange "${name}" is changing too often! Changed ${changeCountRef.current} times (max: ${maxChanges})`, changedDeps, `
|
|
60
|
+
id (${id}) at:`, (0, import_helpers.getCurrentComponentStack)("short"));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
prevDepsRef.current = deps;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=useWarnIfDepsChange.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","useWarnIfDepsChange_exports","__export","useWarnIfDepsChange","module","exports","import_helpers","require","import_react","deps","options","maxChanges","name","ignoreIndexBefore","changeCountRef","useRef","prevDepsRef","id","useId","useEffect","process","env","NODE_ENV","current","changedDeps","compareDeps","slice","forEach","dep","indexIn","index","push","prev","next","length","console","info","getCurrentComponentStack"],"sources":["../../src/useWarnIfDepsChange.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,2BAAA;AAAAC,QAAA,CAAAD,2BAAA;EAAAE,mBAAA,EAAAA,CAAA,KAAAA;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAAT,YAAyC,CAAAK,2BAAA;AACzC,IAAAK,cAAA,GAAyCC,OAAA;AAQlC,IAAAC,YAAS,GAAAD,OAAA,QACd,CACA;AAEA,SAAMJ,mBAAkBA,CAAAM,IAAM,EAAAC,OAAA;EAE9B;IAAMC,UAAA;IAAAC,IAAA;IAAiBC,iBAAA,GAAO;EAAC,IAAAH,OAAA;EAC/B,IAAAI,cAAM,OAAcN,YAAA,CAAAO,MAAA,EAAsB;EAC1C,IAAAC,WAAW,OAAAR,YAAA,CAAMO,MAAA;EAEjB,IAAAE,EAAA,OAAAT,YAAA,CAAAU,KAAU,GAAM;EACd,IAAAV,YAAY,CAAAW,SAAI,cAAa;IAC3B,IAAAC,OAAI,CAAAC,GAAA,CAAAC,QAAY,kBAAuB;MACrC,IAAAN,WAAM,CAAAO,OAIA;QAEN,IAAAC,WAAM,KAAc;QAEpB,IAAAC,WAAY,GAAAZ,iBAAc,GAAYJ,IAAA,CAAAiB,KAAA,CAAAb,iBAAA,IAAAJ,IAAA;QACpCgB,WAAM,CAAAE,OAAQ,WAAUC,GAAA,EAAAC,OAAA;UAExB,IAAIC,KAAA,GAAAD,OAAY,GAAAhB,iBAAuB;UACrC,IAAAG,WAAY,CAAAO,OAAK,IAAAP,WAAA,CAAAO,OAAA,CAAAO,KAAA,MAAAF,GAAA;YAAAJ,WACf,CAAAO,IAAA;cACAD,KAAA;cACAE,IAAA,EAAMhB,WAAA,CAAAO,OAAA,CAAAO,KAAA;cACPG,IAAA,EAAAL;YACH;UACD;QAED;QACE,IAAAJ,WAAA,CAAAU,MAAe;UAEfpB,cAAI,CAAAS,OAAe;UAEjB,IAAAT,cAAQ,CAAAS,OAAA,GAAAZ,UAAA;YAAAwB,OACN,CAAAC,IAAA,mCAA+BxB,IAAA,oCAAoCE,cAAsB,CAAAS,OAAA,gBAA0BZ,UAAA,KAAAa,WAAA;AAAA,OAAAP,EAAA,OACnH,MAAAX,cAAA,CAAA+B,wBAAA;UAAA;QACU;MAAE;MACoBrB,WAClC,CAAAO,OAAA,GAAAd,IAAA;IAAA;EACF;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all) __defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
14
|
+
get: () => from[key],
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
21
|
+
value: true
|
|
22
|
+
}), mod);
|
|
23
|
+
var useWarnIfMemoChangesOften_exports = {};
|
|
24
|
+
__export(useWarnIfMemoChangesOften_exports, {
|
|
25
|
+
useWarnIfMemoChangesOften: () => useWarnIfMemoChangesOften
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(useWarnIfMemoChangesOften_exports);
|
|
28
|
+
var import_helpers = require("@o/helpers");
|
|
29
|
+
var import_react = require("react");
|
|
30
|
+
const useWarnIfMemoChangesOften = process.env.NODE_ENV === "production" ? import_helpers.emptyFn : (value, threshold = 5, name) => {
|
|
31
|
+
const countRef = (0, import_react.useRef)(0);
|
|
32
|
+
const prevValueRef = (0, import_react.useRef)(value);
|
|
33
|
+
(0, import_react.useEffect)(() => {
|
|
34
|
+
if (prevValueRef.current !== value) {
|
|
35
|
+
countRef.current++;
|
|
36
|
+
prevValueRef.current = value;
|
|
37
|
+
if (countRef.current > threshold) {
|
|
38
|
+
const warningName = name || "Memoized value";
|
|
39
|
+
console.warn(`\u{1F504} ${warningName} is changing too often! Changed ${countRef.current} times (threshold: ${threshold})`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}, [value, threshold, name]);
|
|
43
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all) __defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: true
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
16
|
+
get: () => from[key],
|
|
17
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
23
|
+
value: true
|
|
24
|
+
}), mod);
|
|
25
|
+
var useWarnIfMemoChangesOften_exports = {};
|
|
26
|
+
__export(useWarnIfMemoChangesOften_exports, {
|
|
27
|
+
useWarnIfMemoChangesOften: () => useWarnIfMemoChangesOften
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(useWarnIfMemoChangesOften_exports);
|
|
30
|
+
var import_helpers = require("@o/helpers");
|
|
31
|
+
var import_react = require("react");
|
|
32
|
+
var useWarnIfMemoChangesOften = process.env.NODE_ENV === "production" ? import_helpers.emptyFn : function (value) {
|
|
33
|
+
var threshold = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 5,
|
|
34
|
+
name = arguments.length > 2 ? arguments[2] : void 0;
|
|
35
|
+
var countRef = (0, import_react.useRef)(0);
|
|
36
|
+
var prevValueRef = (0, import_react.useRef)(value);
|
|
37
|
+
(0, import_react.useEffect)(function () {
|
|
38
|
+
if (prevValueRef.current !== value) {
|
|
39
|
+
countRef.current++;
|
|
40
|
+
prevValueRef.current = value;
|
|
41
|
+
if (countRef.current > threshold) {
|
|
42
|
+
var warningName = name || "Memoized value";
|
|
43
|
+
console.warn(`\u{1F504} ${warningName} is changing too often! Changed ${countRef.current} times (threshold: ${threshold})`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}, [value, threshold, name]);
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=useWarnIfMemoChangesOften.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","useWarnIfMemoChangesOften_exports","__export","useWarnIfMemoChangesOften","module","exports","import_helpers","require","import_react","process","env","NODE_ENV","emptyFn","threshold","arguments","length","name","countRef","useRef","prevValueRef","useEffect","current","warningName","console","warn"],"sources":["../../src/useWarnIfMemoChangesOften.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,iCAAA;AAAAC,QAAA,CAAAD,iCAAA;EAAAE,yBAAA,EAAAA,CAAA,KAAAA;AAAA;AAAAC,MAAA,CAAAC,OAAA,GAAAT,YAAwB,CAAAK,iCAAA;AACxB,IAAAK,cAAA,GAAkCC,OAAA;AAE3B,IAAAC,YAAM,GAAAD,OAAA,QACX;AAGM,IAAAJ,yBAAiB,GAAAM,OAAA,CAAAC,GAAA,CAAOC,QAAC,oBAAAL,cAAA,CAAAM,OAAA,aAAAZ,KAAA;EACzB,IAAAa,SAAM,GAAAC,SAAe,CAAAC,MAAA,QAAAD,SAAU,EAAK,eAAAA,SAAA;IAAAE,IAAA,GAAAF,SAAA,CAAAC,MAAA,OAAAD,SAAA;EAEpC,IAAAG,QAAA,OAAAT,YAAU,CAAAU,MAAM;EACd,IAAAC,YAAI,GAAa,IAAAX,YAAY,CAAAU,MAAO,EAAAlB,KAAA;EAClC,IAAAQ,YAAS,CAAAY,SAAA;IACT,IAAAD,YAAa,CAAAE,OAAA,KAAUrB,KAAA;MAEvBiB,QAAI,CAAAI,OAAS;MACXF,YAAM,CAAAE,OAAA,GAAcrB,KAAA;MACpB,IAAAiB,QAAQ,CAAAI,OAAA,GAAAR,SAAA;QAAA,IACNS,WAAM,GAAAN,IAAA,IAAW;QACnBO,OAAA,CAAAC,IAAA,cAAAF,WAAA,mCAAAL,QAAA,CAAAI,OAAA,sBAAAR,SAAA;MACF;IACF;EACF,GAAG,CACLb,KAAA,E","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from "./useClickOutside.mjs";
|
|
2
|
+
export * from "./useDebouncePrepend.mjs";
|
|
3
|
+
export * from "./useDeepMemoizedObject.mjs";
|
|
4
|
+
export * from "./useDeferredBoolean.mjs";
|
|
5
|
+
export * from "./useEffectOnceGlobally.mjs";
|
|
6
|
+
export * from "./useIsMounted.mjs";
|
|
7
|
+
export * from "./useLastValue.mjs";
|
|
8
|
+
export * from "./useLastValueIf.mjs";
|
|
9
|
+
export * from "./useMemoizedObjectList.mjs";
|
|
10
|
+
export * from "./useMemoStable.mjs";
|
|
11
|
+
export * from "./useThrottle.mjs";
|
|
12
|
+
export * from "./useWarnIfDepsChange.mjs";
|
|
13
|
+
export * from "./useWarnIfMemoChangesOften.mjs";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from "./useClickOutside.mjs";
|
|
2
|
+
export * from "./useDebouncePrepend.mjs";
|
|
3
|
+
export * from "./useDeepMemoizedObject.mjs";
|
|
4
|
+
export * from "./useDeferredBoolean.mjs";
|
|
5
|
+
export * from "./useEffectOnceGlobally.mjs";
|
|
6
|
+
export * from "./useIsMounted.mjs";
|
|
7
|
+
export * from "./useLastValue.mjs";
|
|
8
|
+
export * from "./useLastValueIf.mjs";
|
|
9
|
+
export * from "./useMemoizedObjectList.mjs";
|
|
10
|
+
export * from "./useMemoStable.mjs";
|
|
11
|
+
export * from "./useThrottle.mjs";
|
|
12
|
+
export * from "./useWarnIfDepsChange.mjs";
|
|
13
|
+
export * from "./useWarnIfMemoChangesOften.mjs";
|
|
14
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from "./useClickOutside.native.js";
|
|
2
|
+
export * from "./useDebouncePrepend.native.js";
|
|
3
|
+
export * from "./useDeepMemoizedObject.native.js";
|
|
4
|
+
export * from "./useDeferredBoolean.native.js";
|
|
5
|
+
export * from "./useEffectOnceGlobally.native.js";
|
|
6
|
+
export * from "./useIsMounted.native.js";
|
|
7
|
+
export * from "./useLastValue.native.js";
|
|
8
|
+
export * from "./useLastValueIf.native.js";
|
|
9
|
+
export * from "./useMemoizedObjectList.native.js";
|
|
10
|
+
export * from "./useMemoStable.native.js";
|
|
11
|
+
export * from "./useThrottle.native.js";
|
|
12
|
+
export * from "./useWarnIfDepsChange.native.js";
|
|
13
|
+
export * from "./useWarnIfMemoChangesOften.native.js";
|
|
14
|
+
//# sourceMappingURL=index.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc","ignoreList":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { IS_WEB } from "@o/helpers";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
const useClickOutside = ({
|
|
4
|
+
ref,
|
|
5
|
+
active,
|
|
6
|
+
onClickOutside
|
|
7
|
+
}) => {
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
if (!IS_WEB) return;
|
|
10
|
+
if (!active) return;
|
|
11
|
+
if (!onClickOutside) return;
|
|
12
|
+
const handleClickOutside = e => {
|
|
13
|
+
const node = ref.current;
|
|
14
|
+
if (!node) return;
|
|
15
|
+
if (!(e.target instanceof HTMLElement)) return;
|
|
16
|
+
if (!node.contains(e.target)) {
|
|
17
|
+
onClickOutside();
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
document.addEventListener("click", handleClickOutside);
|
|
21
|
+
return () => {
|
|
22
|
+
document.removeEventListener("click", handleClickOutside);
|
|
23
|
+
};
|
|
24
|
+
}, [ref, active, onClickOutside]);
|
|
25
|
+
};
|
|
26
|
+
export { useClickOutside };
|
|
27
|
+
//# sourceMappingURL=useClickOutside.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["IS_WEB","useEffect","useClickOutside","ref","active","onClickOutside","handleClickOutside","e","node","current","target","HTMLElement","contains","document","addEventListener","removeEventListener"],"sources":["../../src/useClickOutside.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,MAAA,QAAc;AACvB,SAASC,SAAA,QAAiB;AAQnB,MAAMC,eAAA,GAAkBA,CAAC;EAC9BC,GAAA;EACAC,MAAA;EACAC;AACF,MAA4B;EAC1BJ,SAAA,CAAU,MAAM;IACd,IAAI,CAACD,MAAA,EAAQ;IACb,IAAI,CAACI,MAAA,EAAQ;IACb,IAAI,CAACC,cAAA,EAAgB;IAErB,MAAMC,kBAAA,GAAsBC,CAAA,IAAkB;MAC5C,MAAMC,IAAA,GAAOL,GAAA,CAAIM,OAAA;MACjB,IAAI,CAACD,IAAA,EAAM;MACX,IAAI,EAAED,CAAA,CAAEG,MAAA,YAAkBC,WAAA,GAAc;MACxC,IAAI,CAACH,IAAA,CAAKI,QAAA,CAASL,CAAA,CAAEG,MAAM,GAAG;QAC5BL,cAAA,CAAe;MACjB;IACF;IAEAQ,QAAA,CAASC,gBAAA,CAAiB,SAASR,kBAAkB;IACrD,OAAO,MAAM;MACXO,QAAA,CAASE,mBAAA,CAAoB,SAAST,kBAAkB;IAC1D;EACF,GAAG,CAACH,GAAA,EAAKC,MAAA,EAAQC,cAAc,CAAC;AAClC","ignoreList":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { IS_WEB } from "@o/helpers";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
function _instanceof(left, right) {
|
|
4
|
+
"@swc/helpers - instanceof";
|
|
5
|
+
|
|
6
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
7
|
+
return !!right[Symbol.hasInstance](left);
|
|
8
|
+
} else return left instanceof right;
|
|
9
|
+
}
|
|
10
|
+
var useClickOutside = function useClickOutside2(param) {
|
|
11
|
+
var {
|
|
12
|
+
ref,
|
|
13
|
+
active,
|
|
14
|
+
onClickOutside
|
|
15
|
+
} = param;
|
|
16
|
+
useEffect(function () {
|
|
17
|
+
if (!IS_WEB) return;
|
|
18
|
+
if (!active) return;
|
|
19
|
+
if (!onClickOutside) return;
|
|
20
|
+
var handleClickOutside = function handleClickOutside2(e) {
|
|
21
|
+
var node = ref.current;
|
|
22
|
+
if (!node) return;
|
|
23
|
+
if (!_instanceof(e.target, HTMLElement)) return;
|
|
24
|
+
if (!node.contains(e.target)) {
|
|
25
|
+
onClickOutside();
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
document.addEventListener("click", handleClickOutside);
|
|
29
|
+
return function () {
|
|
30
|
+
document.removeEventListener("click", handleClickOutside);
|
|
31
|
+
};
|
|
32
|
+
}, [ref, active, onClickOutside]);
|
|
33
|
+
};
|
|
34
|
+
export { useClickOutside };
|
|
35
|
+
//# sourceMappingURL=useClickOutside.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["IS_WEB","useEffect","_instanceof","left","right","Symbol","hasInstance","useClickOutside","useClickOutside2","param","ref","active","onClickOutside","handleClickOutside","handleClickOutside2","e","node","current","target","HTMLElement","contains","document","addEventListener","removeEventListener"],"sources":["../../src/useClickOutside.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,MAAA,QAAc;AACvB,SAASC,SAAA,QAAiB;AAQnB,SAAMC,YAAAC,IAAmB,EAAAC,KAAA;EAC9B;;EACA,IAAAA,KAAA,mBAAAC,MAAA,oBAAAD,KAAA,CAAAC,MAAA,CAAAC,WAAA;IACA,SAAAF,KAAA,CAAAC,MAAA,CAAAC,WAAA,EAAAH,IAAA;EACF,OAA4B,OAAAA,IAAA,YAAAC,KAAA;AAC1B;AACE,IAAAG,eAAa,YAAAC,iBAAAC,KAAA;EACb;IAAIC,GAAC;IAAAC,MAAQ;IAAAC;EAAA,IAAAH,KAAA;EACbR,SAAK;IAEL,KAAAD,MAAM;IACJ,KAAAW,MAAM;IACN,KAAAC,cAAW;IACX,IAAAC,kBAAQ,YAAkBC,mBAAcA,CAAAC,CAAA;MACxC,IAAIC,IAAC,GAAKN,GAAA,CAAAO,OAAW;MACnB,KAAAD,IAAA;MACF,KAAAd,WAAA,CAAAa,CAAA,CAAAG,MAAA,EAAAC,WAAA;MACF,KAAAH,IAAA,CAAAI,QAAA,CAAAL,CAAA,CAAAG,MAAA;QAEAN,cAAS;MACT;IACE;IACFS,QAAA,CAAAC,gBAAA,UAAAT,kBAAA;IACF,OAAS,YAAQ;MACnBQ,QAAA,CAAAE,mBAAA,UAAAV,kBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { debounce } from "@o/helpers";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
3
|
+
function useDebouncePrepend(list, delay) {
|
|
4
|
+
const [current, setCurrent] = useState(list);
|
|
5
|
+
const [previous, setPrevious] = useState(list);
|
|
6
|
+
const [pendingUpdate, setPendingUpdate] = useState(null);
|
|
7
|
+
const debouncedUpdate = useMemo(() => {
|
|
8
|
+
return debounce(newList => {
|
|
9
|
+
setCurrent(newList);
|
|
10
|
+
setPendingUpdate(null);
|
|
11
|
+
}, delay);
|
|
12
|
+
}, [delay]);
|
|
13
|
+
const updateState = useCallback(newList => {
|
|
14
|
+
setCurrent(prevCurrent => {
|
|
15
|
+
const currentList = pendingUpdate || prevCurrent;
|
|
16
|
+
const isPrepending = newList.length > previous.length && newList[0]?.id !== previous[0]?.id;
|
|
17
|
+
if (isPrepending) {
|
|
18
|
+
debouncedUpdate.cancel();
|
|
19
|
+
setPendingUpdate(newList);
|
|
20
|
+
debouncedUpdate(newList);
|
|
21
|
+
return currentList;
|
|
22
|
+
}
|
|
23
|
+
debouncedUpdate.cancel();
|
|
24
|
+
setPendingUpdate(null);
|
|
25
|
+
return newList;
|
|
26
|
+
});
|
|
27
|
+
}, [previous, pendingUpdate, debouncedUpdate]);
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (list === previous) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
setPrevious(list);
|
|
33
|
+
updateState(list);
|
|
34
|
+
return () => {
|
|
35
|
+
debouncedUpdate.cancel();
|
|
36
|
+
};
|
|
37
|
+
}, [list, previous, updateState, debouncedUpdate]);
|
|
38
|
+
return current;
|
|
39
|
+
}
|
|
40
|
+
export { useDebouncePrepend };
|
|
41
|
+
//# sourceMappingURL=useDebouncePrepend.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["debounce","useCallback","useEffect","useMemo","useState","useDebouncePrepend","list","delay","current","setCurrent","previous","setPrevious","pendingUpdate","setPendingUpdate","debouncedUpdate","newList","updateState","prevCurrent","currentList","isPrepending","length","id","cancel"],"sources":["../../src/useDebouncePrepend.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAA,QAAgB;AACzB,SAASC,WAAA,EAAaC,SAAA,EAAWC,OAAA,EAASC,QAAA,QAAgB;AAEnD,SAASC,mBACdC,IAAA,EACAC,KAAA,EACG;EACH,MAAM,CAACC,OAAA,EAASC,UAAU,IAAIL,QAAA,CAASE,IAAI;EAC3C,MAAM,CAACI,QAAA,EAAUC,WAAW,IAAIP,QAAA,CAASE,IAAI;EAC7C,MAAM,CAACM,aAAA,EAAeC,gBAAgB,IAAIT,QAAA,CAAmB,IAAI;EAEjE,MAAMU,eAAA,GAAkBX,OAAA,CAAQ,MAAM;IACpC,OAAOH,QAAA,CAAUe,OAAA,IAAe;MAC9BN,UAAA,CAAWM,OAAO;MAClBF,gBAAA,CAAiB,IAAI;IACvB,GAAGN,KAAK;EACV,GAAG,CAACA,KAAK,CAAC;EAEV,MAAMS,WAAA,GAAcf,WAAA,CACjBc,OAAA,IAAe;IACdN,UAAA,CAAYQ,WAAA,IAAgB;MAE1B,MAAMC,WAAA,GAAcN,aAAA,IAAiBK,WAAA;MAGrC,MAAME,YAAA,GACJJ,OAAA,CAAQK,MAAA,GAASV,QAAA,CAASU,MAAA,IAAUL,OAAA,CAAQ,CAAC,GAAGM,EAAA,KAAOX,QAAA,CAAS,CAAC,GAAGW,EAAA;MAEtE,IAAIF,YAAA,EAAc;QAEhBL,eAAA,CAAgBQ,MAAA,CAAO;QACvBT,gBAAA,CAAiBE,OAAO;QACxBD,eAAA,CAAgBC,OAAO;QACvB,OAAOG,WAAA;MACT;MAGAJ,eAAA,CAAgBQ,MAAA,CAAO;MACvBT,gBAAA,CAAiB,IAAI;MACrB,OAAOE,OAAA;IACT,CAAC;EACH,GACA,CAACL,QAAA,EAAUE,aAAA,EAAeE,eAAe,CAC3C;EAEAZ,SAAA,CAAU,MAAM;IACd,IAAII,IAAA,KAASI,QAAA,EAAU;MACrB;IACF;IAGAC,WAAA,CAAYL,IAAI;IAGhBU,WAAA,CAAYV,IAAI;IAEhB,OAAO,MAAM;MACXQ,eAAA,CAAgBQ,MAAA,CAAO;IACzB;EACF,GAAG,CAAChB,IAAA,EAAMI,QAAA,EAAUM,WAAA,EAAaF,eAAe,CAAC;EAEjD,OAAON,OAAA;AACT","ignoreList":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { debounce } from "@o/helpers";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
3
|
+
function useDebouncePrepend(list, delay) {
|
|
4
|
+
var [current, setCurrent] = useState(list);
|
|
5
|
+
var [previous, setPrevious] = useState(list);
|
|
6
|
+
var [pendingUpdate, setPendingUpdate] = useState(null);
|
|
7
|
+
var debouncedUpdate = useMemo(function () {
|
|
8
|
+
return debounce(function (newList) {
|
|
9
|
+
setCurrent(newList);
|
|
10
|
+
setPendingUpdate(null);
|
|
11
|
+
}, delay);
|
|
12
|
+
}, [delay]);
|
|
13
|
+
var updateState = useCallback(function (newList) {
|
|
14
|
+
setCurrent(function (prevCurrent) {
|
|
15
|
+
var _newList_, _previous_;
|
|
16
|
+
var currentList = pendingUpdate || prevCurrent;
|
|
17
|
+
var isPrepending = newList.length > previous.length && ((_newList_ = newList[0]) === null || _newList_ === void 0 ? void 0 : _newList_.id) !== ((_previous_ = previous[0]) === null || _previous_ === void 0 ? void 0 : _previous_.id);
|
|
18
|
+
if (isPrepending) {
|
|
19
|
+
debouncedUpdate.cancel();
|
|
20
|
+
setPendingUpdate(newList);
|
|
21
|
+
debouncedUpdate(newList);
|
|
22
|
+
return currentList;
|
|
23
|
+
}
|
|
24
|
+
debouncedUpdate.cancel();
|
|
25
|
+
setPendingUpdate(null);
|
|
26
|
+
return newList;
|
|
27
|
+
});
|
|
28
|
+
}, [previous, pendingUpdate, debouncedUpdate]);
|
|
29
|
+
useEffect(function () {
|
|
30
|
+
if (list === previous) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
setPrevious(list);
|
|
34
|
+
updateState(list);
|
|
35
|
+
return function () {
|
|
36
|
+
debouncedUpdate.cancel();
|
|
37
|
+
};
|
|
38
|
+
}, [list, previous, updateState, debouncedUpdate]);
|
|
39
|
+
return current;
|
|
40
|
+
}
|
|
41
|
+
export { useDebouncePrepend };
|
|
42
|
+
//# sourceMappingURL=useDebouncePrepend.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["debounce","useCallback","useEffect","useMemo","useState","useDebouncePrepend","list","delay","current","setCurrent","previous","setPrevious","pendingUpdate","setPendingUpdate","debouncedUpdate","newList","updateState","prevCurrent","_newList_","_previous_","currentList","isPrepending","length","id","cancel"],"sources":["../../src/useDebouncePrepend.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAA,QAAgB;AACzB,SAASC,WAAA,EAAaC,SAAA,EAAWC,OAAA,EAASC,QAAA,QAAgB;AAEnD,SAASC,mBACdC,IAAA,EACAC,KAAA,EACG;EACH,KAAAC,OAAO,EAAAC,UAAS,IAAUL,QAAI,CAAAE,IAAS;EACvC,KAAAI,QAAO,EAAAC,WAAU,IAAWP,QAAI,CAAAE,IAAS;EACzC,KAAAM,aAAO,EAAAC,gBAAe,IAAgBT,QAAI,KAAmB;EAE7D,IAAAU,eAAM,GAAAX,OAAkB,aAAc;IACpC,OAAOH,QAAA,CAAS,UAACe,OAAe;MAC9BN,UAAA,CAAWM,OAAO;MAClBF,gBAAA,CAAiB,IAAI;IACvB,GAAGN,KAAK;EACV,GAAG,CAEHA,KAAM,CAAc,CAClB;EACE,IAAAS,WAAW,GAACf,WAAA,WAAgBc,OAAA;IAE1BN,UAAM,WAAAQ,WAAc;MAGpB,IAAAC,SAAM,EAAAC,UACJ;MAEF,IAAAC,WAAI,GAAAR,aAAc,IAAAK,WAAA;MAEhB,IAAAI,YAAA,GAAAN,OAAgB,CAAOO,MAAA,GAAAZ,QAAA,CAAAY,MAAA,MAAAJ,SAAA,GAAAH,OAAA,iBAAAG,SAAA,uBAAAA,SAAA,CAAAK,EAAA,QAAAJ,UAAA,GAAAT,QAAA,iBAAAS,UAAA,uBAAAA,UAAA,CAAAI,EAAA;MACvB,IAAAF,YAAA;QACAP,eAAA,CAAAU,MAAgB;QAChBX,gBAAO,CAAAE,OAAA;QACTD,eAAA,CAAAC,OAAA;QAGA,OAAAK,WAAgB;MAChB;MACAN,eAAO,CAAAU,MAAA;MACTX,gBAAC;MACH,OAAAE,OAAA;IACA,CAAC;EACH,IAEAL,QAAU,EACRE,aAAa,EACXE,eAAA,EACF;EAGAZ,SAAA,aAAgB;IAGhB,IAAAI,IAAA,KAAYI,QAAI;MAEhB;IACE;IACFC,WAAA,CAAAL,IAAA;IACFU,WAAU,CAAAV,IAAA;IAEV,OAAO;MACTQ,eAAA,CAAAU,MAAA","ignoreList":[]}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { useRef } from "react";
|
|
2
|
+
function shouldBeImmutable(path, immutableToNestedChanges) {
|
|
3
|
+
if (!immutableToNestedChanges) return false;
|
|
4
|
+
const currentPath = path.join(".");
|
|
5
|
+
for (const pattern in immutableToNestedChanges) {
|
|
6
|
+
if (immutableToNestedChanges[pattern] && currentPath === pattern) {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
function deepMutateInPlace(target, source) {
|
|
13
|
+
if (typeof target !== "object" || target === null || typeof source !== "object" || source === null) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (Array.isArray(target) && Array.isArray(source)) {
|
|
17
|
+
;
|
|
18
|
+
target.length = 0;
|
|
19
|
+
target.push(...source);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
for (const key in source) {
|
|
23
|
+
const targetValue = target[key];
|
|
24
|
+
const sourceValue = source[key];
|
|
25
|
+
if (typeof sourceValue === "object" && sourceValue !== null && typeof targetValue === "object" && targetValue !== null) {
|
|
26
|
+
deepMutateInPlace(targetValue, sourceValue);
|
|
27
|
+
} else {
|
|
28
|
+
;
|
|
29
|
+
target[key] = sourceValue;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function deepMemoizeWithTracking(current, previous, path, immutableToNestedChanges, parentIsImmutable = false) {
|
|
34
|
+
if (current === previous) {
|
|
35
|
+
return {
|
|
36
|
+
value: previous,
|
|
37
|
+
hasChanges: false,
|
|
38
|
+
hasImmutableMutation: false
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
if (typeof current !== "object" || current === null) {
|
|
42
|
+
return {
|
|
43
|
+
value: current,
|
|
44
|
+
hasChanges: true,
|
|
45
|
+
hasImmutableMutation: false
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
if (typeof previous !== "object" || previous === null) {
|
|
49
|
+
return {
|
|
50
|
+
value: current,
|
|
51
|
+
hasChanges: true,
|
|
52
|
+
hasImmutableMutation: false
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const isCurrentImmutable = shouldBeImmutable(path, immutableToNestedChanges);
|
|
56
|
+
const shouldMutateInPlace = isCurrentImmutable || parentIsImmutable;
|
|
57
|
+
if (Array.isArray(current)) {
|
|
58
|
+
if (!Array.isArray(previous)) {
|
|
59
|
+
return {
|
|
60
|
+
value: current,
|
|
61
|
+
hasChanges: true,
|
|
62
|
+
hasImmutableMutation: false
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (current.length !== previous.length) {
|
|
66
|
+
return {
|
|
67
|
+
value: current,
|
|
68
|
+
hasChanges: true,
|
|
69
|
+
hasImmutableMutation: false
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
let hasChanges2 = false;
|
|
73
|
+
let hasImmutableMutation2 = false;
|
|
74
|
+
const memoizedArray = [];
|
|
75
|
+
for (let i = 0; i < current.length; i++) {
|
|
76
|
+
const itemPath = [...path, String(i)];
|
|
77
|
+
const result = deepMemoizeWithTracking(current[i], previous[i], itemPath, immutableToNestedChanges, false);
|
|
78
|
+
memoizedArray[i] = result.value;
|
|
79
|
+
if (result.hasChanges) {
|
|
80
|
+
hasChanges2 = true;
|
|
81
|
+
}
|
|
82
|
+
if (result.hasImmutableMutation) {
|
|
83
|
+
hasImmutableMutation2 = true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (hasChanges2 || hasImmutableMutation2) {
|
|
87
|
+
return {
|
|
88
|
+
value: memoizedArray,
|
|
89
|
+
hasChanges: true,
|
|
90
|
+
hasImmutableMutation: false
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
value: previous,
|
|
95
|
+
hasChanges: false,
|
|
96
|
+
hasImmutableMutation: false
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
const currentKeys = Object.keys(current);
|
|
100
|
+
const previousKeys = Object.keys(previous);
|
|
101
|
+
if (currentKeys.length !== previousKeys.length) {
|
|
102
|
+
return {
|
|
103
|
+
value: current,
|
|
104
|
+
hasChanges: true,
|
|
105
|
+
hasImmutableMutation: false
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
const keysMatch = currentKeys.every(key => key in previous);
|
|
109
|
+
if (!keysMatch) {
|
|
110
|
+
return {
|
|
111
|
+
value: current,
|
|
112
|
+
hasChanges: true,
|
|
113
|
+
hasImmutableMutation: false
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
let hasChanges = false;
|
|
117
|
+
let hasImmutableMutation = false;
|
|
118
|
+
const memoizedObject = {};
|
|
119
|
+
for (const key of currentKeys) {
|
|
120
|
+
const propPath = [...path, key];
|
|
121
|
+
const currentValue = current[key];
|
|
122
|
+
const previousValue = previous[key];
|
|
123
|
+
const result = deepMemoizeWithTracking(currentValue, previousValue, propPath, immutableToNestedChanges, shouldMutateInPlace);
|
|
124
|
+
memoizedObject[key] = result.value;
|
|
125
|
+
if (result.hasChanges) {
|
|
126
|
+
hasChanges = true;
|
|
127
|
+
}
|
|
128
|
+
if (result.hasImmutableMutation) {
|
|
129
|
+
hasImmutableMutation = true;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (shouldMutateInPlace && (hasChanges || hasImmutableMutation)) {
|
|
133
|
+
if (parentIsImmutable) {
|
|
134
|
+
deepMutateInPlace(previous, current);
|
|
135
|
+
} else {
|
|
136
|
+
for (const key of currentKeys) {
|
|
137
|
+
;
|
|
138
|
+
previous[key] = memoizedObject[key];
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
value: previous,
|
|
143
|
+
hasChanges: false,
|
|
144
|
+
hasImmutableMutation: true
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
if (hasChanges || hasImmutableMutation) {
|
|
148
|
+
return {
|
|
149
|
+
value: memoizedObject,
|
|
150
|
+
hasChanges: true,
|
|
151
|
+
hasImmutableMutation: false
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
value: previous,
|
|
156
|
+
hasChanges: false,
|
|
157
|
+
hasImmutableMutation: false
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function deepMemoize(current, previous, path = [], immutableToNestedChanges) {
|
|
161
|
+
const result = deepMemoizeWithTracking(current, previous, path, immutableToNestedChanges, false);
|
|
162
|
+
if (path.length === 0 && result.hasImmutableMutation && !result.hasChanges) {
|
|
163
|
+
if (Array.isArray(result.value)) {
|
|
164
|
+
return [...result.value];
|
|
165
|
+
} else if (typeof result.value === "object" && result.value !== null) {
|
|
166
|
+
return {
|
|
167
|
+
...result.value
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return result.value;
|
|
172
|
+
}
|
|
173
|
+
function useDeepMemoizedObject(value, options) {
|
|
174
|
+
const previousValueRef = useRef(value);
|
|
175
|
+
const memoizedValue = deepMemoize(value, previousValueRef.current, [], options?.immutableToNestedChanges);
|
|
176
|
+
previousValueRef.current = memoizedValue;
|
|
177
|
+
return memoizedValue;
|
|
178
|
+
}
|
|
179
|
+
export { deepMemoize, shouldBeImmutable, useDeepMemoizedObject };
|
|
180
|
+
//# sourceMappingURL=useDeepMemoizedObject.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useRef","shouldBeImmutable","path","immutableToNestedChanges","currentPath","join","pattern","deepMutateInPlace","target","source","Array","isArray","length","push","key","targetValue","sourceValue","deepMemoizeWithTracking","current","previous","parentIsImmutable","value","hasChanges","hasImmutableMutation","isCurrentImmutable","shouldMutateInPlace","memoizedArray","i","itemPath","String","result","hasImmutableMutation2","currentKeys","Object","keys","previousKeys","keysMatch","every","memoizedObject","propPath","currentValue","previousValue","deepMemoize","useDeepMemoizedObject","options","previousValueRef","memoizedValue"],"sources":["../../src/useDeepMemoizedObject.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|