@take-out/helpers 0.1.27 → 0.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/async/useAsyncEffect.cjs +13 -5
- package/dist/cjs/async/useAsyncEffect.js +24 -7
- package/dist/cjs/async/useAsyncEffect.js.map +1 -1
- package/dist/cjs/async/useAsyncEffect.native.js +25 -7
- package/dist/cjs/async/useAsyncEffect.native.js.map +1 -1
- package/dist/esm/async/useAsyncEffect.js +24 -6
- package/dist/esm/async/useAsyncEffect.js.map +1 -1
- package/dist/esm/async/useAsyncEffect.mjs +13 -5
- package/dist/esm/async/useAsyncEffect.mjs.map +1 -1
- package/dist/esm/async/useAsyncEffect.native.js +25 -7
- package/dist/esm/async/useAsyncEffect.native.js.map +1 -1
- package/package.json +3 -3
- package/src/async/useAsyncEffect.ts +36 -2
|
@@ -26,6 +26,7 @@ __export(useAsyncEffect_exports, {
|
|
|
26
26
|
module.exports = __toCommonJS(useAsyncEffect_exports);
|
|
27
27
|
var import_react = require("react"),
|
|
28
28
|
import_constants = require("../constants.cjs"),
|
|
29
|
+
import_getCurrentComponentStack = require("../react/getCurrentComponentStack.cjs"),
|
|
29
30
|
import_abortable = require("./abortable.cjs");
|
|
30
31
|
function useAsyncEffect(cb, deps = [], options) {
|
|
31
32
|
useAsyncEffectImpl(!1, cb, deps, options);
|
|
@@ -37,7 +38,7 @@ function useAsyncEffectImpl(isLayoutEffect, cb, deps = [], options = import_cons
|
|
|
37
38
|
const effectHook = isLayoutEffect ? import_react.useLayoutEffect : import_react.useEffect,
|
|
38
39
|
effectId = process.env.NODE_ENV === "development" ? (0, import_react.useId)() : "";
|
|
39
40
|
effectHook(() => {
|
|
40
|
-
checkEffectLoop(effectId, options.circuitBreakAfter, options.circuitBreakPeriod);
|
|
41
|
+
checkEffectLoop(effectId, cb, deps, options.circuitBreakAfter, options.circuitBreakPeriod);
|
|
41
42
|
const controller = new AbortController(),
|
|
42
43
|
signal = controller.signal;
|
|
43
44
|
try {
|
|
@@ -57,7 +58,14 @@ function useAsyncEffectImpl(isLayoutEffect, cb, deps = [], options = import_cons
|
|
|
57
58
|
}, deps);
|
|
58
59
|
}
|
|
59
60
|
let effectRunCounts, checkEffectLoop;
|
|
60
|
-
|
|
61
|
+
function formatDeps(deps) {
|
|
62
|
+
try {
|
|
63
|
+
return JSON.stringify(deps, (_, v) => typeof v == "function" ? `[Function: ${v.name || "anonymous"}]` : typeof v == "symbol" ? v.toString() : v instanceof Error ? `[Error: ${v.message}]` : v, 2);
|
|
64
|
+
} catch {
|
|
65
|
+
return `[${deps.length} deps - not serializable]`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */new Map(), checkEffectLoop = (effectId, cb, deps, circuitBreakAfter = 20, circuitBreakPeriod = 1e3) => {
|
|
61
69
|
const now = Date.now(),
|
|
62
70
|
runs = effectRunCounts.get(effectId) || [];
|
|
63
71
|
runs.push(now);
|
|
@@ -67,8 +75,8 @@ process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */new M
|
|
|
67
75
|
if (runCount > circuitBreakAfter) {
|
|
68
76
|
const message = `\u{1F6A8} useAsyncEffect infinite loop detected! Effect ran ${runCount} times in <${circuitBreakPeriod}ms`;
|
|
69
77
|
if (process.env.NODE_ENV === "development") {
|
|
70
|
-
console.error(message);
|
|
78
|
+
console.error(message), console.error("Effect function:", cb.toString().slice(0, 500)), console.error("Dependencies:", formatDeps(deps)), console.error("Stack:", (0, import_getCurrentComponentStack.getCurrentComponentStack)());
|
|
71
79
|
debugger;
|
|
72
80
|
} else throw alert(message), new Error(message);
|
|
73
|
-
} else runCount > circuitBreakAfter / 2 && console.warn(`\u26A0\uFE0F useAsyncEffect potential loop: Effect ran ${runCount} times in <${circuitBreakPeriod}ms`);
|
|
74
|
-
}) : checkEffectLoop = () => {};
|
|
81
|
+
} else runCount > circuitBreakAfter / 2 && (console.warn(`\u26A0\uFE0F useAsyncEffect potential loop: Effect ran ${runCount} times in <${circuitBreakPeriod}ms`), console.warn("Effect function:", cb.toString().slice(0, 500)), console.warn("Dependencies:", formatDeps(deps)), console.warn("Stack:", (0, import_getCurrentComponentStack.getCurrentComponentStack)()));
|
|
82
|
+
}) : checkEffectLoop = (_id, _cb, _deps, _after, _period) => {};
|
|
@@ -18,7 +18,7 @@ __export(useAsyncEffect_exports, {
|
|
|
18
18
|
useAsyncLayoutEffect: () => useAsyncLayoutEffect
|
|
19
19
|
});
|
|
20
20
|
module.exports = __toCommonJS(useAsyncEffect_exports);
|
|
21
|
-
var import_react = require("react"), import_constants = require("../constants"), import_abortable = require("./abortable");
|
|
21
|
+
var import_react = require("react"), import_constants = require("../constants"), import_getCurrentComponentStack = require("../react/getCurrentComponentStack"), import_abortable = require("./abortable");
|
|
22
22
|
function useAsyncEffect(cb, deps = [], options) {
|
|
23
23
|
useAsyncEffectImpl(!1, cb, deps, options);
|
|
24
24
|
}
|
|
@@ -28,7 +28,13 @@ function useAsyncLayoutEffect(cb, deps = [], options) {
|
|
|
28
28
|
function useAsyncEffectImpl(isLayoutEffect, cb, deps = [], options = import_constants.EMPTY_OBJECT) {
|
|
29
29
|
const effectHook = isLayoutEffect ? import_react.useLayoutEffect : import_react.useEffect, effectId = process.env.NODE_ENV === "development" ? (0, import_react.useId)() : "";
|
|
30
30
|
effectHook(() => {
|
|
31
|
-
checkEffectLoop(
|
|
31
|
+
checkEffectLoop(
|
|
32
|
+
effectId,
|
|
33
|
+
cb,
|
|
34
|
+
deps,
|
|
35
|
+
options.circuitBreakAfter,
|
|
36
|
+
options.circuitBreakPeriod
|
|
37
|
+
);
|
|
32
38
|
const controller = new AbortController(), signal = controller.signal;
|
|
33
39
|
try {
|
|
34
40
|
const value = cb(signal, ...deps);
|
|
@@ -47,7 +53,18 @@ function useAsyncEffectImpl(isLayoutEffect, cb, deps = [], options = import_cons
|
|
|
47
53
|
}, deps);
|
|
48
54
|
}
|
|
49
55
|
let effectRunCounts, checkEffectLoop;
|
|
50
|
-
|
|
56
|
+
function formatDeps(deps) {
|
|
57
|
+
try {
|
|
58
|
+
return JSON.stringify(
|
|
59
|
+
deps,
|
|
60
|
+
(_, v) => typeof v == "function" ? `[Function: ${v.name || "anonymous"}]` : typeof v == "symbol" ? v.toString() : v instanceof Error ? `[Error: ${v.message}]` : v,
|
|
61
|
+
2
|
|
62
|
+
);
|
|
63
|
+
} catch {
|
|
64
|
+
return `[${deps.length} deps - not serializable]`;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */ new Map(), checkEffectLoop = (effectId, cb, deps, circuitBreakAfter = 20, circuitBreakPeriod = 1e3) => {
|
|
51
68
|
const now = Date.now(), runs = effectRunCounts.get(effectId) || [];
|
|
52
69
|
runs.push(now);
|
|
53
70
|
const recentRuns = runs.filter((time) => now - time < circuitBreakPeriod);
|
|
@@ -56,13 +73,13 @@ process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */ new
|
|
|
56
73
|
if (runCount > circuitBreakAfter) {
|
|
57
74
|
const message = `\u{1F6A8} useAsyncEffect infinite loop detected! Effect ran ${runCount} times in <${circuitBreakPeriod}ms`;
|
|
58
75
|
if (process.env.NODE_ENV === "development") {
|
|
59
|
-
console.error(message);
|
|
76
|
+
console.error(message), console.error("Effect function:", cb.toString().slice(0, 500)), console.error("Dependencies:", formatDeps(deps)), console.error("Stack:", (0, import_getCurrentComponentStack.getCurrentComponentStack)());
|
|
60
77
|
debugger;
|
|
61
78
|
} else
|
|
62
79
|
throw alert(message), new Error(message);
|
|
63
|
-
} else runCount > circuitBreakAfter / 2 && console.warn(
|
|
80
|
+
} else runCount > circuitBreakAfter / 2 && (console.warn(
|
|
64
81
|
`\u26A0\uFE0F useAsyncEffect potential loop: Effect ran ${runCount} times in <${circuitBreakPeriod}ms`
|
|
65
|
-
);
|
|
66
|
-
}) : checkEffectLoop = () => {
|
|
82
|
+
), console.warn("Effect function:", cb.toString().slice(0, 500)), console.warn("Dependencies:", formatDeps(deps)), console.warn("Stack:", (0, import_getCurrentComponentStack.getCurrentComponentStack)()));
|
|
83
|
+
}) : checkEffectLoop = (_id, _cb, _deps, _after, _period) => {
|
|
67
84
|
};
|
|
68
85
|
//# sourceMappingURL=useAsyncEffect.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/async/useAsyncEffect.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAkD,kBAElD,mBAA6B,yBAC7B,mBAAiC;AAe1B,SAAS,eACd,IACA,OAAc,CAAC,GACf,SACM;AACN,qBAAmB,IAAO,IAAI,MAAM,OAAO;AAC7C;AAEO,SAAS,qBACd,IACA,OAAc,CAAC,GACf,SACM;AACN,qBAAmB,IAAM,IAAI,MAAM,OAAO;AAC5C;AAEA,SAAS,mBACP,gBACA,IACA,OAAc,CAAC,GACf,UAA8B,+BACxB;AACN,QAAM,aAAa,iBAAiB,+BAAkB,wBAEhD,WAAW,QAAQ,IAAI,aAAa,oBAAgB,oBAAM,IAAI;AAEpE,aAAW,MAAM;AAEf,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -28,7 +28,16 @@ __export(useAsyncEffect_exports, {
|
|
|
28
28
|
module.exports = __toCommonJS(useAsyncEffect_exports);
|
|
29
29
|
var import_react = require("react"),
|
|
30
30
|
import_constants = require("../constants.native.js"),
|
|
31
|
+
import_getCurrentComponentStack = require("../react/getCurrentComponentStack.native.js"),
|
|
31
32
|
import_abortable = require("./abortable.native.js");
|
|
33
|
+
function _instanceof(left, right) {
|
|
34
|
+
return right != null && typeof Symbol < "u" && right[Symbol.hasInstance] ? !!right[Symbol.hasInstance](left) : left instanceof right;
|
|
35
|
+
}
|
|
36
|
+
function _type_of(obj) {
|
|
37
|
+
"@swc/helpers - typeof";
|
|
38
|
+
|
|
39
|
+
return obj && typeof Symbol < "u" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
40
|
+
}
|
|
32
41
|
function useAsyncEffect(cb) {
|
|
33
42
|
var deps = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [],
|
|
34
43
|
options = arguments.length > 2 ? arguments[2] : void 0;
|
|
@@ -45,7 +54,7 @@ function useAsyncEffectImpl(isLayoutEffect, cb) {
|
|
|
45
54
|
effectHook = isLayoutEffect ? import_react.useLayoutEffect : import_react.useEffect,
|
|
46
55
|
effectId = process.env.NODE_ENV === "development" ? (0, import_react.useId)() : "";
|
|
47
56
|
effectHook(function () {
|
|
48
|
-
checkEffectLoop(effectId, options.circuitBreakAfter, options.circuitBreakPeriod);
|
|
57
|
+
checkEffectLoop(effectId, cb, deps, options.circuitBreakAfter, options.circuitBreakPeriod);
|
|
49
58
|
var controller = new AbortController(),
|
|
50
59
|
signal = controller.signal;
|
|
51
60
|
try {
|
|
@@ -65,9 +74,18 @@ function useAsyncEffectImpl(isLayoutEffect, cb) {
|
|
|
65
74
|
}, deps);
|
|
66
75
|
}
|
|
67
76
|
var effectRunCounts, checkEffectLoop;
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
77
|
+
function formatDeps(deps) {
|
|
78
|
+
try {
|
|
79
|
+
return JSON.stringify(deps, function (_, v) {
|
|
80
|
+
return typeof v == "function" ? `[Function: ${v.name || "anonymous"}]` : (typeof v > "u" ? "undefined" : _type_of(v)) === "symbol" ? v.toString() : _instanceof(v, Error) ? `[Error: ${v.message}]` : v;
|
|
81
|
+
}, 2);
|
|
82
|
+
} catch {
|
|
83
|
+
return `[${deps.length} deps - not serializable]`;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */new Map(), checkEffectLoop = function (effectId, cb, deps) {
|
|
87
|
+
var circuitBreakAfter = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 20,
|
|
88
|
+
circuitBreakPeriod = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : 1e3,
|
|
71
89
|
now = Date.now(),
|
|
72
90
|
runs = effectRunCounts.get(effectId) || [];
|
|
73
91
|
runs.push(now);
|
|
@@ -79,9 +97,9 @@ process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */new M
|
|
|
79
97
|
if (runCount > circuitBreakAfter) {
|
|
80
98
|
var message = `\u{1F6A8} useAsyncEffect infinite loop detected! Effect ran ${runCount} times in <${circuitBreakPeriod}ms`;
|
|
81
99
|
if (process.env.NODE_ENV === "development") {
|
|
82
|
-
console.error(message);
|
|
100
|
+
console.error(message), console.error("Effect function:", cb.toString().slice(0, 500)), console.error("Dependencies:", formatDeps(deps)), console.error("Stack:", (0, import_getCurrentComponentStack.getCurrentComponentStack)());
|
|
83
101
|
debugger;
|
|
84
102
|
} else throw alert(message), new Error(message);
|
|
85
|
-
} else runCount > circuitBreakAfter / 2 && console.warn(`\u26A0\uFE0F useAsyncEffect potential loop: Effect ran ${runCount} times in <${circuitBreakPeriod}ms`);
|
|
86
|
-
}) : checkEffectLoop = function () {};
|
|
103
|
+
} else runCount > circuitBreakAfter / 2 && (console.warn(`\u26A0\uFE0F useAsyncEffect potential loop: Effect ran ${runCount} times in <${circuitBreakPeriod}ms`), console.warn("Effect function:", cb.toString().slice(0, 500)), console.warn("Dependencies:", formatDeps(deps)), console.warn("Stack:", (0, import_getCurrentComponentStack.getCurrentComponentStack)()));
|
|
104
|
+
}) : checkEffectLoop = function (_id, _cb, _deps, _after, _period) {};
|
|
87
105
|
//# sourceMappingURL=useAsyncEffect.native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","useAsyncEffect_exports","__export","useAsyncEffect","useAsyncLayoutEffect","module","exports","import_react","require","import_constants","import_abortable","cb","deps","arguments","length","options","useAsyncEffectImpl","isLayoutEffect","EMPTY_OBJECT","effectHook","useLayoutEffect","useEffect","effectId","process","env","NODE_ENV","useId","checkEffectLoop","circuitBreakAfter","circuitBreakPeriod","controller","AbortController","signal","Promise","resolve","then","res","aborted","addEventListener","catch","handleAbortError","error","debug","abort","effectRunCounts","Map","now","Date","runs","get","push","recentRuns","filter","time","set","runCount","
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","useAsyncEffect_exports","__export","useAsyncEffect","useAsyncLayoutEffect","module","exports","import_react","require","import_constants","import_getCurrentComponentStack","import_abortable","_instanceof","left","right","Symbol","hasInstance","_type_of","obj","constructor","cb","deps","arguments","length","options","useAsyncEffectImpl","isLayoutEffect","EMPTY_OBJECT","effectHook","useLayoutEffect","useEffect","effectId","process","env","NODE_ENV","useId","checkEffectLoop","circuitBreakAfter","circuitBreakPeriod","controller","AbortController","signal","Promise","resolve","then","res","aborted","addEventListener","catch","handleAbortError","error","debug","abort","effectRunCounts","formatDeps","JSON","stringify","_","v","name","toString","Error","message","Map","now","Date","runs","get","push","recentRuns","filter","time","set","runCount","console","slice","getCurrentComponentStack","alert","warn"],"sources":["../../../src/async/useAsyncEffect.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useEffect, useId, useLayoutEffect } from "react";
|
|
2
2
|
import { EMPTY_OBJECT } from "../constants";
|
|
3
|
+
import { getCurrentComponentStack } from "../react/getCurrentComponentStack";
|
|
3
4
|
import { handleAbortError } from "./abortable";
|
|
4
5
|
function useAsyncEffect(cb, deps = [], options) {
|
|
5
6
|
useAsyncEffectImpl(!1, cb, deps, options);
|
|
@@ -10,7 +11,13 @@ function useAsyncLayoutEffect(cb, deps = [], options) {
|
|
|
10
11
|
function useAsyncEffectImpl(isLayoutEffect, cb, deps = [], options = EMPTY_OBJECT) {
|
|
11
12
|
const effectHook = isLayoutEffect ? useLayoutEffect : useEffect, effectId = process.env.NODE_ENV === "development" ? useId() : "";
|
|
12
13
|
effectHook(() => {
|
|
13
|
-
checkEffectLoop(
|
|
14
|
+
checkEffectLoop(
|
|
15
|
+
effectId,
|
|
16
|
+
cb,
|
|
17
|
+
deps,
|
|
18
|
+
options.circuitBreakAfter,
|
|
19
|
+
options.circuitBreakPeriod
|
|
20
|
+
);
|
|
14
21
|
const controller = new AbortController(), signal = controller.signal;
|
|
15
22
|
try {
|
|
16
23
|
const value = cb(signal, ...deps);
|
|
@@ -29,7 +36,18 @@ function useAsyncEffectImpl(isLayoutEffect, cb, deps = [], options = EMPTY_OBJEC
|
|
|
29
36
|
}, deps);
|
|
30
37
|
}
|
|
31
38
|
let effectRunCounts, checkEffectLoop;
|
|
32
|
-
|
|
39
|
+
function formatDeps(deps) {
|
|
40
|
+
try {
|
|
41
|
+
return JSON.stringify(
|
|
42
|
+
deps,
|
|
43
|
+
(_, v) => typeof v == "function" ? `[Function: ${v.name || "anonymous"}]` : typeof v == "symbol" ? v.toString() : v instanceof Error ? `[Error: ${v.message}]` : v,
|
|
44
|
+
2
|
|
45
|
+
);
|
|
46
|
+
} catch {
|
|
47
|
+
return `[${deps.length} deps - not serializable]`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */ new Map(), checkEffectLoop = (effectId, cb, deps, circuitBreakAfter = 20, circuitBreakPeriod = 1e3) => {
|
|
33
51
|
const now = Date.now(), runs = effectRunCounts.get(effectId) || [];
|
|
34
52
|
runs.push(now);
|
|
35
53
|
const recentRuns = runs.filter((time) => now - time < circuitBreakPeriod);
|
|
@@ -38,14 +56,14 @@ process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */ new
|
|
|
38
56
|
if (runCount > circuitBreakAfter) {
|
|
39
57
|
const message = `\u{1F6A8} useAsyncEffect infinite loop detected! Effect ran ${runCount} times in <${circuitBreakPeriod}ms`;
|
|
40
58
|
if (process.env.NODE_ENV === "development") {
|
|
41
|
-
console.error(message);
|
|
59
|
+
console.error(message), console.error("Effect function:", cb.toString().slice(0, 500)), console.error("Dependencies:", formatDeps(deps)), console.error("Stack:", getCurrentComponentStack());
|
|
42
60
|
debugger;
|
|
43
61
|
} else
|
|
44
62
|
throw alert(message), new Error(message);
|
|
45
|
-
} else runCount > circuitBreakAfter / 2 && console.warn(
|
|
63
|
+
} else runCount > circuitBreakAfter / 2 && (console.warn(
|
|
46
64
|
`\u26A0\uFE0F useAsyncEffect potential loop: Effect ran ${runCount} times in <${circuitBreakPeriod}ms`
|
|
47
|
-
);
|
|
48
|
-
}) : checkEffectLoop = () => {
|
|
65
|
+
), console.warn("Effect function:", cb.toString().slice(0, 500)), console.warn("Dependencies:", formatDeps(deps)), console.warn("Stack:", getCurrentComponentStack()));
|
|
66
|
+
}) : checkEffectLoop = (_id, _cb, _deps, _after, _period) => {
|
|
49
67
|
};
|
|
50
68
|
export {
|
|
51
69
|
useAsyncEffect,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/async/useAsyncEffect.ts"],
|
|
4
|
-
"mappings": "AAEA,SAAS,WAAW,OAAO,uBAAuB;AAElD,SAAS,oBAAoB;AAC7B,SAAS,wBAAwB;AAe1B,SAAS,eACd,IACA,OAAc,CAAC,GACf,SACM;AACN,qBAAmB,IAAO,IAAI,MAAM,OAAO;AAC7C;AAEO,SAAS,qBACd,IACA,OAAc,CAAC,GACf,SACM;AACN,qBAAmB,IAAM,IAAI,MAAM,OAAO;AAC5C;AAEA,SAAS,mBACP,gBACA,IACA,OAAc,CAAC,GACf,UAA8B,cACxB;AACN,QAAM,aAAa,iBAAiB,kBAAkB,WAEhD,WAAW,QAAQ,IAAI,aAAa,gBAAgB,MAAM,IAAI;AAEpE,aAAW,MAAM;AAEf,
|
|
4
|
+
"mappings": "AAEA,SAAS,WAAW,OAAO,uBAAuB;AAElD,SAAS,oBAAoB;AAC7B,SAAS,gCAAgC;AACzC,SAAS,wBAAwB;AAe1B,SAAS,eACd,IACA,OAAc,CAAC,GACf,SACM;AACN,qBAAmB,IAAO,IAAI,MAAM,OAAO;AAC7C;AAEO,SAAS,qBACd,IACA,OAAc,CAAC,GACf,SACM;AACN,qBAAmB,IAAM,IAAI,MAAM,OAAO;AAC5C;AAEA,SAAS,mBACP,gBACA,IACA,OAAc,CAAC,GACf,UAA8B,cACxB;AACN,QAAM,aAAa,iBAAiB,kBAAkB,WAEhD,WAAW,QAAQ,IAAI,aAAa,gBAAgB,MAAM,IAAI;AAEpE,aAAW,MAAM;AAEf;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AACA,UAAM,aAAa,IAAI,gBAAgB,GACjC,SAAS,WAAW;AAG1B,QAAI;AACF,YAAM,QAAQ,GAAG,QAAQ,GAAG,IAAI;AAEhC,cAAQ,QAAQ,KAAK,EAClB,KAAK,OAAO,QAAQ;AACnB,YAAI,OAAO,OAAO,OAAQ,YAAY;AACpC,cAAI,OAAO,QAAS,QAAO,IAAI;AAC/B,iBAAO,iBAAiB,SAAS,GAAG;AAAA,QACtC;AAAA,MACF,CAAC,EACA,MAAM,gBAAgB;AAAA,IAC3B,SAAS,OAAO;AACd,uBAAiB,OAAO,QAAQ,KAAK;AAAA,IACvC;AAEA,WAAO,MAAM;AACX,MAAI,OAAO,WACX,WAAW,MAAM;AAAA,IACnB;AAAA,EACF,GAAG,IAAI;AACT;AAGA,IAAI,iBACA;AAQJ,SAAS,WAAW,MAAqB;AACvC,MAAI;AACF,WAAO,KAAK;AAAA,MACV;AAAA,MACA,CAAC,GAAG,MACE,OAAO,KAAM,aAAmB,cAAc,EAAE,QAAQ,WAAW,MACnE,OAAO,KAAM,WAAiB,EAAE,SAAS,IACzC,aAAa,QAAc,WAAW,EAAE,OAAO,MAC5C;AAAA,MAET;AAAA,IACF;AAAA,EACF,QAAQ;AACN,WAAO,IAAI,KAAK,MAAM;AAAA,EACxB;AACF;AAEI,QAAQ,IAAI,aAAa,iBAC3B,kBAAkB,oBAAI,IAAsB,GAE5C,kBAAkB,CAChB,UACA,IACA,MACA,oBAA4B,IAC5B,qBAA6B,QAC1B;AACH,QAAM,MAAM,KAAK,IAAI,GACf,OAAO,gBAAgB,IAAI,QAAQ,KAAK,CAAC;AAE/C,OAAK,KAAK,GAAG;AAGb,QAAM,aAAa,KAAK,OAAO,CAAC,SAAS,MAAM,OAAO,kBAAkB;AACxE,kBAAgB,IAAI,UAAU,UAAU;AAExC,QAAM,WAAW,WAAW;AAE5B,MAAI,WAAW,mBAAmB;AAChC,UAAM,UAAU,+DAAwD,QAAQ,cAAc,kBAAkB;AAChH,QAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,cAAQ,MAAM,OAAO,GACrB,QAAQ,MAAM,oBAAoB,GAAG,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC,GAC7D,QAAQ,MAAM,iBAAiB,WAAW,IAAI,CAAC,GAC/C,QAAQ,MAAM,UAAU,yBAAyB,CAAC;AAElD;AAAA,IACF;AACE,kBAAM,OAAO,GACP,IAAI,MAAM,OAAO;AAAA,EAE3B,MAAO,CAAI,WAAW,oBAAoB,MACxC,QAAQ;AAAA,IACN,0DAAgD,QAAQ,cAAc,kBAAkB;AAAA,EAC1F,GACA,QAAQ,KAAK,oBAAoB,GAAG,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC,GAC5D,QAAQ,KAAK,iBAAiB,WAAW,IAAI,CAAC,GAC9C,QAAQ,KAAK,UAAU,yBAAyB,CAAC;AAErD,KAEA,kBAAkB,CAAC,KAAK,KAAK,OAAO,QAAQ,YAAY;AAAC;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useEffect, useId, useLayoutEffect } from "react";
|
|
2
2
|
import { EMPTY_OBJECT } from "../constants.mjs";
|
|
3
|
+
import { getCurrentComponentStack } from "../react/getCurrentComponentStack.mjs";
|
|
3
4
|
import { handleAbortError } from "./abortable.mjs";
|
|
4
5
|
function useAsyncEffect(cb, deps = [], options) {
|
|
5
6
|
useAsyncEffectImpl(!1, cb, deps, options);
|
|
@@ -11,7 +12,7 @@ function useAsyncEffectImpl(isLayoutEffect, cb, deps = [], options = EMPTY_OBJEC
|
|
|
11
12
|
const effectHook = isLayoutEffect ? useLayoutEffect : useEffect,
|
|
12
13
|
effectId = process.env.NODE_ENV === "development" ? useId() : "";
|
|
13
14
|
effectHook(() => {
|
|
14
|
-
checkEffectLoop(effectId, options.circuitBreakAfter, options.circuitBreakPeriod);
|
|
15
|
+
checkEffectLoop(effectId, cb, deps, options.circuitBreakAfter, options.circuitBreakPeriod);
|
|
15
16
|
const controller = new AbortController(),
|
|
16
17
|
signal = controller.signal;
|
|
17
18
|
try {
|
|
@@ -31,7 +32,14 @@ function useAsyncEffectImpl(isLayoutEffect, cb, deps = [], options = EMPTY_OBJEC
|
|
|
31
32
|
}, deps);
|
|
32
33
|
}
|
|
33
34
|
let effectRunCounts, checkEffectLoop;
|
|
34
|
-
|
|
35
|
+
function formatDeps(deps) {
|
|
36
|
+
try {
|
|
37
|
+
return JSON.stringify(deps, (_, v) => typeof v == "function" ? `[Function: ${v.name || "anonymous"}]` : typeof v == "symbol" ? v.toString() : v instanceof Error ? `[Error: ${v.message}]` : v, 2);
|
|
38
|
+
} catch {
|
|
39
|
+
return `[${deps.length} deps - not serializable]`;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */new Map(), checkEffectLoop = (effectId, cb, deps, circuitBreakAfter = 20, circuitBreakPeriod = 1e3) => {
|
|
35
43
|
const now = Date.now(),
|
|
36
44
|
runs = effectRunCounts.get(effectId) || [];
|
|
37
45
|
runs.push(now);
|
|
@@ -41,10 +49,10 @@ process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */new M
|
|
|
41
49
|
if (runCount > circuitBreakAfter) {
|
|
42
50
|
const message = `\u{1F6A8} useAsyncEffect infinite loop detected! Effect ran ${runCount} times in <${circuitBreakPeriod}ms`;
|
|
43
51
|
if (process.env.NODE_ENV === "development") {
|
|
44
|
-
console.error(message);
|
|
52
|
+
console.error(message), console.error("Effect function:", cb.toString().slice(0, 500)), console.error("Dependencies:", formatDeps(deps)), console.error("Stack:", getCurrentComponentStack());
|
|
45
53
|
debugger;
|
|
46
54
|
} else throw alert(message), new Error(message);
|
|
47
|
-
} else runCount > circuitBreakAfter / 2 && console.warn(`\u26A0\uFE0F useAsyncEffect potential loop: Effect ran ${runCount} times in <${circuitBreakPeriod}ms`);
|
|
48
|
-
}) : checkEffectLoop = () => {};
|
|
55
|
+
} else runCount > circuitBreakAfter / 2 && (console.warn(`\u26A0\uFE0F useAsyncEffect potential loop: Effect ran ${runCount} times in <${circuitBreakPeriod}ms`), console.warn("Effect function:", cb.toString().slice(0, 500)), console.warn("Dependencies:", formatDeps(deps)), console.warn("Stack:", getCurrentComponentStack()));
|
|
56
|
+
}) : checkEffectLoop = (_id, _cb, _deps, _after, _period) => {};
|
|
49
57
|
export { useAsyncEffect, useAsyncLayoutEffect };
|
|
50
58
|
//# sourceMappingURL=useAsyncEffect.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useId","useLayoutEffect","EMPTY_OBJECT","handleAbortError","useAsyncEffect","cb","deps","options","useAsyncEffectImpl","useAsyncLayoutEffect","isLayoutEffect","effectHook","effectId","process","env","NODE_ENV","checkEffectLoop","circuitBreakAfter","circuitBreakPeriod","controller","AbortController","signal","value","Promise","resolve","then","res","aborted","addEventListener","catch","error","debug","abort","effectRunCounts","Map","now","Date","runs","get","push","recentRuns","filter","time","set","runCount","
|
|
1
|
+
{"version":3,"names":["useEffect","useId","useLayoutEffect","EMPTY_OBJECT","getCurrentComponentStack","handleAbortError","useAsyncEffect","cb","deps","options","useAsyncEffectImpl","useAsyncLayoutEffect","isLayoutEffect","effectHook","effectId","process","env","NODE_ENV","checkEffectLoop","circuitBreakAfter","circuitBreakPeriod","controller","AbortController","signal","value","Promise","resolve","then","res","aborted","addEventListener","catch","error","debug","abort","effectRunCounts","formatDeps","JSON","stringify","_","v","name","toString","Error","message","length","Map","now","Date","runs","get","push","recentRuns","filter","time","set","runCount","console","slice","alert","warn","_id","_cb","_deps","_after","_period"],"sources":["../../../src/async/useAsyncEffect.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { useEffect, useId, useLayoutEffect } from "react";
|
|
2
2
|
import { EMPTY_OBJECT } from "../constants.native.js";
|
|
3
|
+
import { getCurrentComponentStack } from "../react/getCurrentComponentStack.native.js";
|
|
3
4
|
import { handleAbortError } from "./abortable.native.js";
|
|
5
|
+
function _instanceof(left, right) {
|
|
6
|
+
return right != null && typeof Symbol < "u" && right[Symbol.hasInstance] ? !!right[Symbol.hasInstance](left) : left instanceof right;
|
|
7
|
+
}
|
|
8
|
+
function _type_of(obj) {
|
|
9
|
+
"@swc/helpers - typeof";
|
|
10
|
+
|
|
11
|
+
return obj && typeof Symbol < "u" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
12
|
+
}
|
|
4
13
|
function useAsyncEffect(cb) {
|
|
5
14
|
var deps = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [],
|
|
6
15
|
options = arguments.length > 2 ? arguments[2] : void 0;
|
|
@@ -17,7 +26,7 @@ function useAsyncEffectImpl(isLayoutEffect, cb) {
|
|
|
17
26
|
effectHook = isLayoutEffect ? useLayoutEffect : useEffect,
|
|
18
27
|
effectId = process.env.NODE_ENV === "development" ? useId() : "";
|
|
19
28
|
effectHook(function () {
|
|
20
|
-
checkEffectLoop(effectId, options.circuitBreakAfter, options.circuitBreakPeriod);
|
|
29
|
+
checkEffectLoop(effectId, cb, deps, options.circuitBreakAfter, options.circuitBreakPeriod);
|
|
21
30
|
var controller = new AbortController(),
|
|
22
31
|
signal = controller.signal;
|
|
23
32
|
try {
|
|
@@ -37,9 +46,18 @@ function useAsyncEffectImpl(isLayoutEffect, cb) {
|
|
|
37
46
|
}, deps);
|
|
38
47
|
}
|
|
39
48
|
var effectRunCounts, checkEffectLoop;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
49
|
+
function formatDeps(deps) {
|
|
50
|
+
try {
|
|
51
|
+
return JSON.stringify(deps, function (_, v) {
|
|
52
|
+
return typeof v == "function" ? `[Function: ${v.name || "anonymous"}]` : (typeof v > "u" ? "undefined" : _type_of(v)) === "symbol" ? v.toString() : _instanceof(v, Error) ? `[Error: ${v.message}]` : v;
|
|
53
|
+
}, 2);
|
|
54
|
+
} catch {
|
|
55
|
+
return `[${deps.length} deps - not serializable]`;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */new Map(), checkEffectLoop = function (effectId, cb, deps) {
|
|
59
|
+
var circuitBreakAfter = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 20,
|
|
60
|
+
circuitBreakPeriod = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : 1e3,
|
|
43
61
|
now = Date.now(),
|
|
44
62
|
runs = effectRunCounts.get(effectId) || [];
|
|
45
63
|
runs.push(now);
|
|
@@ -51,10 +69,10 @@ process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */new M
|
|
|
51
69
|
if (runCount > circuitBreakAfter) {
|
|
52
70
|
var message = `\u{1F6A8} useAsyncEffect infinite loop detected! Effect ran ${runCount} times in <${circuitBreakPeriod}ms`;
|
|
53
71
|
if (process.env.NODE_ENV === "development") {
|
|
54
|
-
console.error(message);
|
|
72
|
+
console.error(message), console.error("Effect function:", cb.toString().slice(0, 500)), console.error("Dependencies:", formatDeps(deps)), console.error("Stack:", getCurrentComponentStack());
|
|
55
73
|
debugger;
|
|
56
74
|
} else throw alert(message), new Error(message);
|
|
57
|
-
} else runCount > circuitBreakAfter / 2 && console.warn(`\u26A0\uFE0F useAsyncEffect potential loop: Effect ran ${runCount} times in <${circuitBreakPeriod}ms`);
|
|
58
|
-
}) : checkEffectLoop = function () {};
|
|
75
|
+
} else runCount > circuitBreakAfter / 2 && (console.warn(`\u26A0\uFE0F useAsyncEffect potential loop: Effect ran ${runCount} times in <${circuitBreakPeriod}ms`), console.warn("Effect function:", cb.toString().slice(0, 500)), console.warn("Dependencies:", formatDeps(deps)), console.warn("Stack:", getCurrentComponentStack()));
|
|
76
|
+
}) : checkEffectLoop = function (_id, _cb, _deps, _after, _period) {};
|
|
59
77
|
export { useAsyncEffect, useAsyncLayoutEffect };
|
|
60
78
|
//# sourceMappingURL=useAsyncEffect.native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useId","useLayoutEffect","EMPTY_OBJECT","handleAbortError","useAsyncEffect","cb","deps","arguments","length","options","useAsyncEffectImpl","useAsyncLayoutEffect","isLayoutEffect","effectHook","effectId","process","env","NODE_ENV","checkEffectLoop","circuitBreakAfter","circuitBreakPeriod","controller","AbortController","signal","value","Promise","resolve","then","res","aborted","addEventListener","catch","error","debug","abort","effectRunCounts","Map","now","Date","runs","get","push","recentRuns","filter","time","set","runCount","
|
|
1
|
+
{"version":3,"names":["useEffect","useId","useLayoutEffect","EMPTY_OBJECT","getCurrentComponentStack","handleAbortError","_instanceof","left","right","Symbol","hasInstance","_type_of","obj","constructor","useAsyncEffect","cb","deps","arguments","length","options","useAsyncEffectImpl","useAsyncLayoutEffect","isLayoutEffect","effectHook","effectId","process","env","NODE_ENV","checkEffectLoop","circuitBreakAfter","circuitBreakPeriod","controller","AbortController","signal","value","Promise","resolve","then","res","aborted","addEventListener","catch","error","debug","abort","effectRunCounts","formatDeps","JSON","stringify","_","v","name","toString","Error","message","Map","now","Date","runs","get","push","recentRuns","filter","time","set","runCount","console","slice","alert","warn","_id","_cb","_deps","_after","_period"],"sources":["../../../src/async/useAsyncEffect.ts"],"sourcesContent":[null],"mappings":"AAEA,SAASA,SAAA,EAAWC,KAAA,EAAOC,eAAA,QAAuB;AAElD,SAASC,YAAA,QAAoB;AAC7B,SAASC,wBAAA,QAAgC;AACzC,SAASC,gBAAA,QAAwB;AAe1B,SAASC,YAAAC,IACd,EAAAC,KACA;EAGA,OAAAA,KAAA,QAAmB,IAAO,OAAIC,MAAM,GAAO,OAAAD,KAAA,CAAAC,MAAA,CAAAC,WAAA,MAAAF,KAAA,CAAAC,MAAA,CAAAC,WAAA,EAAAH,IAAA,IAAAA,IAAA,YAAAC,KAAA;AAC7C;AAEO,SAASG,SAAAC,GAAA;EAKd,uBAAyB;;EAC3B,OAAAA,GAAA,WAAAH,MAAA,UAAAG,GAAA,CAAAC,WAAA,KAAAJ,MAAA,qBAAAG,GAAA;AAEA;AAME,SAAME,cAAaA,CAAAC,EAAA;EAInB,IAAAC,IAAA,GAAWC,SAAM,CAAAC,MAAA,QAAAD,SAAA,iBAAAA,SAAA;IAAAE,OAAA,GAAAF,SAAA,CAAAC,MAAA,OAAAD,SAAA;EAEfG,kBAAA,KAAAL,EAAA,EAAAC,IAAA,EAAAG,OAAA;AAAA;AACE,SACAE,qBAAAN,EAAA;EAAA,IACAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,iBAAAA,SAAA;IAAAE,OAAA,GAAAF,SAAA,CAAAC,MAAA,OAAAD,SAAA;EAAAG,kBACQ,KAAAL,EAAA,EAAAC,IAAA,EAAAG,OAAA;AAAA;AACA,SACVC,mBAAAE,cAAA,EAAAP,EAAA;EACA,IAAAC,IAAM,GAAAC,SAAA,CAAaC,MAAI,QAAAD,SACjB,aAAS,IAAAA,SAAW;IAAAE,OAAA,GAAAF,SAAA,CAAAC,MAAA,QAAAD,SAAA,iBAAAA,SAAA,MAAAd,YAAA;IAAAoB,UAAA,GAAAD,cAAA,GAAApB,eAAA,GAAAF,SAAA;IAAAwB,QAAA,GAAAC,OAAA,CAAAC,GAAA,CAAAC,QAAA,qBAAA1B,KAAA;EAG1BsB,UAAI;IACFK,eAAM,CAAQJ,QAAG,EAAAT,EAAQ,EAAGC,IAAI,EAAAG,OAAA,CAAAU,iBAAA,EAAAV,OAAA,CAAAW,kBAAA;IAEhC,IAAAC,UAAQ,OAAQC,eACR,CAAO;MAAAC,MAAQ,GAAAF,UAAA,CAAAE,MAAA;IACnB;MACE,IAAAC,KAAI,GAAAnB,EAAA,CAAOkB,MAAA,EAAS,GAAAjB,IAAA,CAAO;MAC3BmB,OAAA,CAAAC,OAAO,CAAAF,KAAA,EAAAG,IAAA,CAAiB,gBAAYC,GAAA;QACtC,IAAAA,GAAA,WAAAA,GAAA;UAED,IAAAL,MAAM,CAAAM,OAAA,SAAgBD,GAAA;UAC3BL,MAAS,CAAAO,gBAAO,UAAAF,GAAA;QACd;MACF,GAAAG,KAAA,CAAApC,gBAAA;IAEA,SAAOqC,KAAM;MACPrC,gBAAO,CAAAqC,KACX,EAAAvB,OAAW,CAAAwB,KAAM;IACnB;IACF,OAAO;MACTV,MAAA,CAAAM,OAAA,IAAAR,UAAA,CAAAa,KAAA;IAGI;EASJ,GAAA5B,IAAS;AACP;AACE,IAAA6B,eAAY,EAAAjB,eAAA;AAAA,SACVkB,WAAA9B,IAAA;EAAA,IACA;IAIS,OAET+B,IAAA,CAAAC,SAAA,CAAAhC,IAAA,YAAAiC,CAAA,EAAAC,CAAA;MACF,cAAAA,CAAA,+BAAAA,CAAA,CAAAC,IAAA,6BAAAD,CAAA,uBAAAvC,QAAA,CAAAuC,CAAA,kBAAAA,CAAA,CAAAE,QAAA,KAAA9C,WAAA,CAAA4C,CAAA,EAAAG,KAAA,eAAAH,CAAA,CAAAI,OAAA,MAAAJ,CAAA;IACF;EACE;IACF,WAAAlC,IAAA,CAAAE,MAAA;EACF;AAEI;AAUAO,OAAA,CAAMC,GAAA,CAAAC,QAAW,KAAI,aACR,IAAAkB,eAAoB,kBAAc,IAAAU,GAAA,IAAA3B,eAAA,YAAAA,CAAAJ,QAAA,EAAAT,EAAA,EAAAC,IAAA;EAE/C,IAAAa,iBAAa,GAAAZ,SAAA,CAAAC,MAAA,QAAAD,SAAA,iBAAAA,SAAA;IAAAa,kBAAA,GAAAb,SAAA,CAAAC,MAAA,QAAAD,SAAA,iBAAAA,SAAA;IAAAuC,GAAA,GAAAC,IAAA,CAAAD,GAAA;IAAAE,IAAA,GAAAb,eAAA,CAAAc,GAAA,CAAAnC,QAAA;EAGbkC,IAAA,CAAAE,IAAM,CAAAJ,GAAA;EACN,IAAAK,UAAA,GAAgBH,IAAI,CAAAI,MAAA,WAAUC,IAAU;IAExC,OAAMP,GAAA,GAAAO,IAAW,GAAAjC,kBAAW;EAE5B;EACEe,eAAM,CAAAmB,GAAU,CAAAxC,QAAA,EAAAqC,UAAA;EAChB,IAAAI,QAAI,GAAQJ,UAAI,CAAA3C,MAAa;EAC3B,IAAA+C,QAAQ,GAAApC,iBACR;IAIA,IAAAyB,OAAA,kEAAAW,QAAA,cAAAnC,kBAAA;IACF,IAAAL,OAAA,CAAAC,GAAA,CAAAC,QAAA;MACEuC,OAAA,CAAAxB,KAAM,CAAAY,OAAO,CACP,EAAAY,OAAI,CAAMxB,KAAA,mBAAO,EAAA3B,EAAA,CAAAqC,QAAA,GAAAe,KAAA,WAAAD,OAAA,CAAAxB,KAAA,kBAAAI,UAAA,CAAA9B,IAAA,IAAAkD,OAAA,CAAAxB,KAAA,WAAAtC,wBAAA;MAE3B;IAEI,OAEF,MAAAgE,KAAQ,CAAKd,OAAA,OAAAD,KAAA,CAAoBC,OAAG;EAIxC,OAEAW,QAAA,GAAApC,iBAA6B,IAAO,KAAAqC,OAAQ,CAAAG,IAAA,2DAAYJ,QAAA,cAAAnC,kBAAA,OAAAoC,OAAA,CAAAG,IAAA,qBAAAtD,EAAA,CAAAqC,QAAA,GAAAe,KAAA,WAAAD,OAAA,CAAAG,IAAA,kBAAAvB,UAAA,CAAA9B,IAAA,IAAAkD,OAAA,CAAAG,IAAA,WAAAjE,wBAAA;AAAC,KAAAwB,eAAA,YAAAA,CAAA0C,GAAA,EAAAC,GAAA,EAAAC,KAAA,EAAAC,MAAA,EAAAC,OAAA,G","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@take-out/helpers",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.28",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"source": "src/index.ts",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
}
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@tamagui/constants": "2.0.0-rc.
|
|
57
|
+
"@tamagui/constants": "2.0.0-rc.15",
|
|
58
58
|
"dequal": "^2.0.3"
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
}
|
|
78
78
|
},
|
|
79
79
|
"devDependencies": {
|
|
80
|
-
"@tamagui/build": "2.0.0-rc.
|
|
80
|
+
"@tamagui/build": "2.0.0-rc.15",
|
|
81
81
|
"@types/node": "24.0.3",
|
|
82
82
|
"@types/react": "^19.0.8",
|
|
83
83
|
"oxfmt": "^0.16.0",
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { useEffect, useId, useLayoutEffect } from 'react'
|
|
4
4
|
|
|
5
5
|
import { EMPTY_OBJECT } from '../constants'
|
|
6
|
+
import { getCurrentComponentStack } from '../react/getCurrentComponentStack'
|
|
6
7
|
import { handleAbortError } from './abortable'
|
|
7
8
|
|
|
8
9
|
type Cleanup = () => void
|
|
@@ -46,7 +47,13 @@ function useAsyncEffectImpl(
|
|
|
46
47
|
|
|
47
48
|
effectHook(() => {
|
|
48
49
|
// Generate a unique ID for this effect instance for loop detection
|
|
49
|
-
checkEffectLoop(
|
|
50
|
+
checkEffectLoop(
|
|
51
|
+
effectId,
|
|
52
|
+
cb,
|
|
53
|
+
deps,
|
|
54
|
+
options.circuitBreakAfter,
|
|
55
|
+
options.circuitBreakPeriod
|
|
56
|
+
)
|
|
50
57
|
const controller = new AbortController()
|
|
51
58
|
const signal = controller.signal
|
|
52
59
|
|
|
@@ -77,15 +84,36 @@ function useAsyncEffectImpl(
|
|
|
77
84
|
let effectRunCounts: Map<string, number[]>
|
|
78
85
|
let checkEffectLoop: (
|
|
79
86
|
effectId: string,
|
|
87
|
+
cb: AsyncEffectCallback,
|
|
88
|
+
deps: any[],
|
|
80
89
|
circuitBreakAfter?: number,
|
|
81
90
|
circuitBreakPeriod?: number
|
|
82
91
|
) => void
|
|
83
92
|
|
|
93
|
+
function formatDeps(deps: any[]): string {
|
|
94
|
+
try {
|
|
95
|
+
return JSON.stringify(
|
|
96
|
+
deps,
|
|
97
|
+
(_, v) => {
|
|
98
|
+
if (typeof v === 'function') return `[Function: ${v.name || 'anonymous'}]`
|
|
99
|
+
if (typeof v === 'symbol') return v.toString()
|
|
100
|
+
if (v instanceof Error) return `[Error: ${v.message}]`
|
|
101
|
+
return v
|
|
102
|
+
},
|
|
103
|
+
2
|
|
104
|
+
)
|
|
105
|
+
} catch {
|
|
106
|
+
return `[${deps.length} deps - not serializable]`
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
84
110
|
if (process.env.NODE_ENV === 'development') {
|
|
85
111
|
effectRunCounts = new Map<string, number[]>()
|
|
86
112
|
|
|
87
113
|
checkEffectLoop = (
|
|
88
114
|
effectId: string,
|
|
115
|
+
cb: AsyncEffectCallback,
|
|
116
|
+
deps: any[],
|
|
89
117
|
circuitBreakAfter: number = 20,
|
|
90
118
|
circuitBreakPeriod: number = 1000
|
|
91
119
|
) => {
|
|
@@ -104,6 +132,9 @@ if (process.env.NODE_ENV === 'development') {
|
|
|
104
132
|
const message = `🚨 useAsyncEffect infinite loop detected! Effect ran ${runCount} times in <${circuitBreakPeriod}ms`
|
|
105
133
|
if (process.env.NODE_ENV === 'development') {
|
|
106
134
|
console.error(message)
|
|
135
|
+
console.error('Effect function:', cb.toString().slice(0, 500))
|
|
136
|
+
console.error('Dependencies:', formatDeps(deps))
|
|
137
|
+
console.error('Stack:', getCurrentComponentStack())
|
|
107
138
|
// eslint-disable-next-line no-debugger
|
|
108
139
|
debugger
|
|
109
140
|
} else {
|
|
@@ -114,8 +145,11 @@ if (process.env.NODE_ENV === 'development') {
|
|
|
114
145
|
console.warn(
|
|
115
146
|
`⚠️ useAsyncEffect potential loop: Effect ran ${runCount} times in <${circuitBreakPeriod}ms`
|
|
116
147
|
)
|
|
148
|
+
console.warn('Effect function:', cb.toString().slice(0, 500))
|
|
149
|
+
console.warn('Dependencies:', formatDeps(deps))
|
|
150
|
+
console.warn('Stack:', getCurrentComponentStack())
|
|
117
151
|
}
|
|
118
152
|
}
|
|
119
153
|
} else {
|
|
120
|
-
checkEffectLoop = () => {}
|
|
154
|
+
checkEffectLoop = (_id, _cb, _deps, _after, _period) => {}
|
|
121
155
|
}
|