@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.
@@ -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
- process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */new Map(), checkEffectLoop = (effectId, circuitBreakAfter = 20, circuitBreakPeriod = 1e3) => {
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(effectId, options.circuitBreakAfter, options.circuitBreakPeriod);
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
- process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */ new Map(), checkEffectLoop = (effectId, circuitBreakAfter = 20, circuitBreakPeriod = 1e3) => {
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,oBAAgB,UAAU,QAAQ,mBAAmB,QAAQ,kBAAkB;AAC/E,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,iCAAgB;AAAA,IAC3B,SAAS,OAAO;AACd,6CAAiB,OAAO,QAAQ,KAAK;AAAA,IACvC;AAEA,WAAO,MAAM;AACX,MAAI,OAAO,WACX,WAAW,MAAM;AAAA,IACnB;AAAA,EACF,GAAG,IAAI;AACT;AAGA,IAAI,iBACA;AAMA,QAAQ,IAAI,aAAa,iBAC3B,kBAAkB,oBAAI,IAAsB,GAE5C,kBAAkB,CAChB,UACA,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;AAErB;AAAA,IACF;AACE,kBAAM,OAAO,GACP,IAAI,MAAM,OAAO;AAAA,EAE3B,MAAO,CAAI,WAAW,oBAAoB,KACxC,QAAQ;AAAA,IACN,0DAAgD,QAAQ,cAAc,kBAAkB;AAAA,EAC1F;AAEJ,KAEA,kBAAkB,MAAM;AAAC;",
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
- process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */new Map(), checkEffectLoop = function (effectId) {
69
- var circuitBreakAfter = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 20,
70
- circuitBreakPeriod = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 1e3,
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","message","console","alert","Error"],"sources":["../../../src/async/useAsyncEffect.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
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(effectId, options.circuitBreakAfter, options.circuitBreakPeriod);
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
- process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */ new Map(), checkEffectLoop = (effectId, circuitBreakAfter = 20, circuitBreakPeriod = 1e3) => {
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,oBAAgB,UAAU,QAAQ,mBAAmB,QAAQ,kBAAkB;AAC/E,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;AAMA,QAAQ,IAAI,aAAa,iBAC3B,kBAAkB,oBAAI,IAAsB,GAE5C,kBAAkB,CAChB,UACA,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;AAErB;AAAA,IACF;AACE,kBAAM,OAAO,GACP,IAAI,MAAM,OAAO;AAAA,EAE3B,MAAO,CAAI,WAAW,oBAAoB,KACxC,QAAQ;AAAA,IACN,0DAAgD,QAAQ,cAAc,kBAAkB;AAAA,EAC1F;AAEJ,KAEA,kBAAkB,MAAM;AAAC;",
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
- process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */new Map(), checkEffectLoop = (effectId, circuitBreakAfter = 20, circuitBreakPeriod = 1e3) => {
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","length","message","console","alert","Error","warn"],"sources":["../../../src/async/useAsyncEffect.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
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
- process.env.NODE_ENV === "development" ? (effectRunCounts = /* @__PURE__ */new Map(), checkEffectLoop = function (effectId) {
41
- var circuitBreakAfter = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 20,
42
- circuitBreakPeriod = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 1e3,
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","message","console","alert","Error","warn"],"sources":["../../../src/async/useAsyncEffect.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
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":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@take-out/helpers",
3
- "version": "0.1.27",
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.11",
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.11",
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(effectId, options.circuitBreakAfter, options.circuitBreakPeriod)
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
  }