katanakit-js 2.2.1 → 2.12.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +72 -437
  2. package/dist/adapters/astro/astro.service.d.ts +103 -15
  3. package/dist/adapters/astro/astro.service.d.ts.map +1 -1
  4. package/dist/adapters/astro/astro.service.js +145 -75
  5. package/dist/adapters/astro/astro.service.js.map +1 -1
  6. package/dist/adapters/astro/index.d.ts +1 -1
  7. package/dist/adapters/astro/index.d.ts.map +1 -1
  8. package/dist/adapters/astro/index.js +1 -1
  9. package/dist/adapters/astro/index.js.map +1 -1
  10. package/dist/adapters/astro/rss.service.d.ts +85 -105
  11. package/dist/adapters/astro/rss.service.d.ts.map +1 -1
  12. package/dist/adapters/astro/rss.service.js +172 -168
  13. package/dist/adapters/astro/rss.service.js.map +1 -1
  14. package/dist/adapters/astro/seo.service.d.ts +10 -0
  15. package/dist/adapters/astro/seo.service.d.ts.map +1 -0
  16. package/dist/adapters/astro/seo.service.js +3 -0
  17. package/dist/adapters/astro/seo.service.js.map +1 -0
  18. package/dist/adapters/express/app.d.ts +30 -1
  19. package/dist/adapters/express/app.d.ts.map +1 -1
  20. package/dist/adapters/express/app.js +31 -3
  21. package/dist/adapters/express/app.js.map +1 -1
  22. package/dist/adapters/express/index.d.ts +2 -2
  23. package/dist/adapters/express/index.d.ts.map +1 -1
  24. package/dist/adapters/express/index.js +2 -2
  25. package/dist/adapters/express/index.js.map +1 -1
  26. package/dist/adapters/express/main.js +2 -2
  27. package/dist/adapters/express/main.js.map +1 -1
  28. package/dist/adapters/express/products.controller.d.ts +67 -8
  29. package/dist/adapters/express/products.controller.d.ts.map +1 -1
  30. package/dist/adapters/express/products.controller.js +105 -49
  31. package/dist/adapters/express/products.controller.js.map +1 -1
  32. package/dist/adapters/express/server.d.ts +37 -13
  33. package/dist/adapters/express/server.d.ts.map +1 -1
  34. package/dist/adapters/express/server.js +118 -53
  35. package/dist/adapters/express/server.js.map +1 -1
  36. package/dist/adapters/nuxt/nuxt.service.d.ts +8 -6
  37. package/dist/adapters/nuxt/nuxt.service.d.ts.map +1 -1
  38. package/dist/adapters/nuxt/nuxt.service.js +34 -10
  39. package/dist/adapters/nuxt/nuxt.service.js.map +1 -1
  40. package/dist/adapters/vue/vue.service.d.ts +5 -2
  41. package/dist/adapters/vue/vue.service.d.ts.map +1 -1
  42. package/dist/adapters/vue/vue.service.js +41 -7
  43. package/dist/adapters/vue/vue.service.js.map +1 -1
  44. package/dist/config/index.d.ts +2 -1
  45. package/dist/config/index.d.ts.map +1 -1
  46. package/dist/config/index.js +1 -1
  47. package/dist/config/index.js.map +1 -1
  48. package/dist/config/seo-meta.types.d.ts +177 -0
  49. package/dist/config/seo-meta.types.d.ts.map +1 -0
  50. package/dist/config/seo-meta.types.js +11 -0
  51. package/dist/config/seo-meta.types.js.map +1 -0
  52. package/dist/config/seo.service.d.ts +41 -58
  53. package/dist/config/seo.service.d.ts.map +1 -1
  54. package/dist/config/seo.service.js +468 -136
  55. package/dist/config/seo.service.js.map +1 -1
  56. package/dist/config/site.config.d.ts +10 -50
  57. package/dist/config/site.config.d.ts.map +1 -1
  58. package/dist/config/site.config.js +8 -36
  59. package/dist/config/site.config.js.map +1 -1
  60. package/dist/core/index.d.ts +1 -3
  61. package/dist/core/index.d.ts.map +1 -1
  62. package/dist/core/index.js +1 -3
  63. package/dist/core/index.js.map +1 -1
  64. package/dist/core/services/dates.service.d.ts +149 -22
  65. package/dist/core/services/dates.service.d.ts.map +1 -1
  66. package/dist/core/services/dates.service.js +201 -54
  67. package/dist/core/services/dates.service.js.map +1 -1
  68. package/dist/core/services/error.service.d.ts +32 -20
  69. package/dist/core/services/error.service.d.ts.map +1 -1
  70. package/dist/core/services/error.service.js +44 -32
  71. package/dist/core/services/error.service.js.map +1 -1
  72. package/dist/core/services/formatter.service.d.ts +245 -35
  73. package/dist/core/services/formatter.service.d.ts.map +1 -1
  74. package/dist/core/services/formatter.service.js +281 -57
  75. package/dist/core/services/formatter.service.js.map +1 -1
  76. package/dist/core/services/generator.service.d.ts +115 -26
  77. package/dist/core/services/generator.service.d.ts.map +1 -1
  78. package/dist/core/services/generator.service.js +191 -56
  79. package/dist/core/services/generator.service.js.map +1 -1
  80. package/dist/core/services/geometry.service.d.ts +369 -39
  81. package/dist/core/services/geometry.service.d.ts.map +1 -1
  82. package/dist/core/services/geometry.service.js +424 -66
  83. package/dist/core/services/geometry.service.js.map +1 -1
  84. package/dist/core/services/http.service.d.ts +244 -21
  85. package/dist/core/services/http.service.d.ts.map +1 -1
  86. package/dist/core/services/http.service.js +419 -98
  87. package/dist/core/services/http.service.js.map +1 -1
  88. package/dist/core/services/logger.service.d.ts +95 -29
  89. package/dist/core/services/logger.service.d.ts.map +1 -1
  90. package/dist/core/services/logger.service.js +167 -41
  91. package/dist/core/services/logger.service.js.map +1 -1
  92. package/dist/core/services/reactive.service.d.ts +146 -19
  93. package/dist/core/services/reactive.service.d.ts.map +1 -1
  94. package/dist/core/services/reactive.service.js +278 -137
  95. package/dist/core/services/reactive.service.js.map +1 -1
  96. package/dist/core/services/timing.service.d.ts +142 -20
  97. package/dist/core/services/timing.service.d.ts.map +1 -1
  98. package/dist/core/services/timing.service.js +324 -185
  99. package/dist/core/services/timing.service.js.map +1 -1
  100. package/dist/core/services/utils.service.d.ts +228 -43
  101. package/dist/core/services/utils.service.d.ts.map +1 -1
  102. package/dist/core/services/utils.service.js +305 -125
  103. package/dist/core/services/utils.service.js.map +1 -1
  104. package/dist/infrastructure/dom/dom.service.d.ts +307 -44
  105. package/dist/infrastructure/dom/dom.service.d.ts.map +1 -1
  106. package/dist/infrastructure/dom/dom.service.js +408 -129
  107. package/dist/infrastructure/dom/dom.service.js.map +1 -1
  108. package/dist/infrastructure/index.d.ts +0 -3
  109. package/dist/infrastructure/index.d.ts.map +1 -1
  110. package/dist/infrastructure/index.js +0 -3
  111. package/dist/infrastructure/index.js.map +1 -1
  112. package/dist/infrastructure/observer/observer.service.d.ts +124 -31
  113. package/dist/infrastructure/observer/observer.service.d.ts.map +1 -1
  114. package/dist/infrastructure/observer/observer.service.js +227 -131
  115. package/dist/infrastructure/observer/observer.service.js.map +1 -1
  116. package/dist/infrastructure/sensors/sensors.service.d.ts +154 -22
  117. package/dist/infrastructure/sensors/sensors.service.d.ts.map +1 -1
  118. package/dist/infrastructure/sensors/sensors.service.js +264 -112
  119. package/dist/infrastructure/sensors/sensors.service.js.map +1 -1
  120. package/dist/infrastructure/storage/storage.service.d.ts +123 -45
  121. package/dist/infrastructure/storage/storage.service.d.ts.map +1 -1
  122. package/dist/infrastructure/storage/storage.service.js +236 -66
  123. package/dist/infrastructure/storage/storage.service.js.map +1 -1
  124. package/dist/infrastructure/theme/theme.service.d.ts +93 -29
  125. package/dist/infrastructure/theme/theme.service.d.ts.map +1 -1
  126. package/dist/infrastructure/theme/theme.service.js +198 -96
  127. package/dist/infrastructure/theme/theme.service.js.map +1 -1
  128. package/dist/infrastructure/viewport/viewport.service.d.ts +233 -35
  129. package/dist/infrastructure/viewport/viewport.service.d.ts.map +1 -1
  130. package/dist/infrastructure/viewport/viewport.service.js +358 -139
  131. package/dist/infrastructure/viewport/viewport.service.js.map +1 -1
  132. package/dist/infrastructure/worker/worker.service.d.ts +84 -38
  133. package/dist/infrastructure/worker/worker.service.d.ts.map +1 -1
  134. package/dist/infrastructure/worker/worker.service.js +234 -133
  135. package/dist/infrastructure/worker/worker.service.js.map +1 -1
  136. package/dist/prisma/index.d.ts +2 -0
  137. package/dist/prisma/index.d.ts.map +1 -0
  138. package/dist/prisma/index.js +2 -0
  139. package/dist/prisma/index.js.map +1 -0
  140. package/dist/prisma/schema.json +11 -33
  141. package/dist/prisma/use-prisma.d.ts +68 -0
  142. package/dist/prisma/use-prisma.d.ts.map +1 -0
  143. package/dist/prisma/use-prisma.js +82 -0
  144. package/dist/prisma/use-prisma.js.map +1 -0
  145. package/dist/types/index.d.ts +20 -12
  146. package/dist/types/index.d.ts.map +1 -1
  147. package/package.json +124 -125
  148. package/CHANGELOG.md +0 -101
@@ -1,217 +1,356 @@
1
- import { useLog } from "./logger.service.js";
1
+ import { useLogger } from "./logger.service.js";
2
2
  /**
3
- * Timing utilities: delays, debouncing, throttling and timeouts.
4
- * Implemented as a Singleton facade with factory methods.
3
+ * Executes a callback after `ms` milliseconds, returning a cancellable
4
+ * promise that resolves with the callback's result.
5
+ *
6
+ * @typeParam T - The callback's return type.
7
+ * @param callback - Function to execute after the delay.
8
+ * @param ms - Delay in milliseconds.
9
+ * @returns A `TimeoutControl` with `promise` and `cancel()`.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const { promise, cancel } = useSetTimeout(() => 42, 1000);
14
+ * cancel(); // rejects the promise with "Timeout cancelled"
15
+ * ```
5
16
  */
6
- export default class TimingService {
7
- static instance;
8
- constructor() { }
9
- static getInstance() {
10
- if (!TimingService.instance) {
11
- TimingService.instance = new TimingService();
12
- }
13
- return TimingService.instance;
14
- }
15
- useDelay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
16
- /** Alias for delay, more semantic for sleep operations. */
17
- useSleep = (ms) => this.useDelay(ms);
18
- useSetTimeout = (callback, ms) => {
19
- let timerId;
20
- let isCancelled = false;
21
- const promise = new Promise((resolve, reject) => {
22
- timerId = setTimeout(async () => {
23
- if (isCancelled)
24
- return;
25
- try {
26
- const result = await callback();
27
- resolve(result);
28
- }
29
- catch (error) {
30
- reject(error);
31
- }
32
- }, ms);
33
- });
34
- const cancel = () => {
35
- isCancelled = true;
36
- clearTimeout(timerId);
37
- };
38
- return { promise, cancel };
39
- };
40
- useInterval = (callback, ms, immediate = false) => {
41
- let timerId = null;
42
- let isPaused = false;
43
- let isStopped = false;
44
- let isExecuting = false;
45
- const execute = async () => {
46
- if (isPaused || isStopped || isExecuting)
17
+ export function useSetTimeout(callback, ms) {
18
+ let timerId;
19
+ let isCancelled = false;
20
+ let rejectFn;
21
+ const promise = new Promise((resolve, reject) => {
22
+ rejectFn = reject;
23
+ timerId = setTimeout(async () => {
24
+ if (isCancelled)
47
25
  return;
48
- isExecuting = true;
49
26
  try {
50
- await callback();
27
+ const result = await callback();
28
+ resolve(result);
51
29
  }
52
30
  catch (error) {
53
- useLog("error", "[interval] Callback error:", error);
31
+ reject(error);
54
32
  }
55
- finally {
56
- isExecuting = false;
57
- }
58
- };
59
- const scheduleNext = () => {
60
- if (isStopped || isPaused)
61
- return;
62
- timerId = setTimeout(async () => {
63
- await execute();
64
- scheduleNext();
65
- }, ms);
66
- };
67
- const stop = () => {
68
- isStopped = true;
69
- isPaused = false;
70
- if (timerId) {
71
- clearTimeout(timerId);
72
- timerId = null;
73
- }
74
- };
75
- const pause = () => {
76
- if (isStopped)
77
- return;
78
- isPaused = true;
79
- if (timerId) {
80
- clearTimeout(timerId);
81
- timerId = null;
82
- }
83
- };
84
- const resume = () => {
85
- if (isStopped || !isPaused)
86
- return;
87
- isPaused = false;
88
- scheduleNext();
89
- };
90
- const isRunning = () => !isStopped && !isPaused;
91
- if (immediate) {
92
- execute().then(() => scheduleNext());
33
+ }, ms);
34
+ });
35
+ const cancel = () => {
36
+ if (isCancelled)
37
+ return;
38
+ isCancelled = true;
39
+ if (timerId !== undefined) {
40
+ clearTimeout(timerId);
93
41
  }
94
- else {
42
+ rejectFn?.(new Error("Timeout cancelled"));
43
+ };
44
+ return { promise, cancel };
45
+ }
46
+ /**
47
+ * Repeatedly executes a callback at `ms` intervals with pause/resume/stop
48
+ * controls. Uses recursive `setTimeout` internally to avoid overlap.
49
+ *
50
+ * @param callback - Function executed on each tick.
51
+ * @param ms - Interval in milliseconds.
52
+ * @param immediate - If `true`, fires the callback immediately before the
53
+ * first interval (defaults to `false`).
54
+ * @returns An `IntervalControl` with `pause`, `resume`, `stop`, and
55
+ * `isRunning`.
56
+ *
57
+ * @example
58
+ * ```ts
59
+ * const timer = useInterval(() => console.log("tick"), 1000);
60
+ * setTimeout(() => timer.pause(), 3000);
61
+ * setTimeout(() => timer.resume(), 5000);
62
+ * setTimeout(() => timer.stop(), 10000);
63
+ * ```
64
+ */
65
+ export function useInterval(callback, ms, immediate = false) {
66
+ let timerId = null;
67
+ let isPaused = false;
68
+ let isStopped = false;
69
+ let isExecuting = false;
70
+ const execute = async () => {
71
+ if (isPaused || isStopped || isExecuting)
72
+ return;
73
+ isExecuting = true;
74
+ try {
75
+ await callback();
76
+ }
77
+ catch (error) {
78
+ useLogger("error", "[interval] Callback error:", error);
79
+ }
80
+ finally {
81
+ isExecuting = false;
82
+ }
83
+ };
84
+ const scheduleNext = () => {
85
+ if (isStopped || isPaused)
86
+ return;
87
+ timerId = setTimeout(async () => {
88
+ await execute();
95
89
  scheduleNext();
90
+ }, ms);
91
+ };
92
+ const stop = () => {
93
+ isStopped = true;
94
+ isPaused = false;
95
+ if (timerId) {
96
+ clearTimeout(timerId);
97
+ timerId = null;
96
98
  }
97
- return { pause, resume, stop, isRunning };
98
99
  };
99
- useDebounce = (func, delayMs) => {
100
- let timeoutId;
101
- return (...args) => {
102
- if (timeoutId !== undefined) {
103
- clearTimeout(timeoutId);
104
- }
105
- timeoutId = setTimeout(() => {
106
- try {
107
- func(...args);
108
- }
109
- catch (error) {
110
- useLog("error", "[debounce] Callback error:", error);
111
- }
112
- timeoutId = undefined;
113
- }, delayMs);
114
- };
100
+ const pause = () => {
101
+ if (isStopped)
102
+ return;
103
+ isPaused = true;
104
+ if (timerId) {
105
+ clearTimeout(timerId);
106
+ timerId = null;
107
+ }
115
108
  };
116
- useDebounceImmediate = (func, delayMs) => {
117
- let timeoutId;
118
- let lastCallTime;
119
- return (...args) => {
120
- const now = Date.now();
121
- const isFirstCall = lastCallTime === undefined;
122
- lastCallTime = now;
123
- if (isFirstCall) {
124
- try {
125
- func(...args);
126
- }
127
- catch (error) {
128
- useLog("error", "[debounceImmediate] Callback error:", error);
129
- }
109
+ const resume = () => {
110
+ if (isStopped || !isPaused)
111
+ return;
112
+ isPaused = false;
113
+ scheduleNext();
114
+ };
115
+ const isRunning = () => !isStopped && !isPaused;
116
+ if (immediate) {
117
+ execute().then(() => scheduleNext());
118
+ }
119
+ else {
120
+ scheduleNext();
121
+ }
122
+ return { pause, resume, stop, isRunning };
123
+ }
124
+ /**
125
+ * Returns a debounced version of `func` that delays invocation until
126
+ * `delayMs` milliseconds of quiet.
127
+ *
128
+ * @typeParam T - The wrapped function type.
129
+ * @param func - Function to debounce.
130
+ * @param delayMs - Debounce delay in milliseconds.
131
+ * @returns A debounced function with the same signature.
132
+ *
133
+ * @example
134
+ * ```ts
135
+ * const debouncedSearch = useDebounce(fetchResults, 300);
136
+ * input.addEventListener("input", () => debouncedSearch(input.value));
137
+ * ```
138
+ */
139
+ export function useDebounce(func, delayMs) {
140
+ let timeoutId;
141
+ return (...args) => {
142
+ if (timeoutId !== undefined) {
143
+ clearTimeout(timeoutId);
144
+ }
145
+ timeoutId = setTimeout(() => {
146
+ try {
147
+ func(...args);
130
148
  }
131
- if (timeoutId !== undefined) {
132
- clearTimeout(timeoutId);
149
+ catch (error) {
150
+ useLogger("error", "[debounce] Callback error:", error);
133
151
  }
134
- timeoutId = setTimeout(() => {
135
- if (Date.now() - Number(lastCallTime) >= delayMs) {
136
- try {
137
- func(...args);
138
- }
139
- catch (error) {
140
- useLog("error", "[debounceImmediate] Callback error:", error);
141
- }
142
- }
143
- timeoutId = undefined;
144
- lastCallTime = undefined;
145
- }, delayMs);
146
- };
152
+ timeoutId = undefined;
153
+ }, delayMs);
147
154
  };
148
- useThrottle = (func, limitMs) => {
149
- let inThrottle = false;
150
- return (...args) => {
151
- if (!inThrottle) {
155
+ }
156
+ /**
157
+ * Leading-edge debounce: fires immediately on the first call, then ignores
158
+ * calls until `delayMs` of quiet. Additional calls during the wait window
159
+ * schedule a single trailing invocation with the latest arguments.
160
+ *
161
+ * @typeParam T - The wrapped function type.
162
+ * @param func - Function to debounce.
163
+ * @param delayMs - Debounce delay in milliseconds.
164
+ * @returns A debounced function with the same signature.
165
+ *
166
+ * @example
167
+ * ```ts
168
+ * const save = useDebounceImmediate(submitForm, 500);
169
+ * save("a"); // fires immediately
170
+ * save("b"); // queued
171
+ * save("c"); // queued (replaces "b")
172
+ * // after 500ms of quiet: fires with "c"
173
+ * ```
174
+ */
175
+ export function useDebounceImmediate(func, delayMs) {
176
+ let timeoutId;
177
+ let invoked = false;
178
+ let lastArgs = null;
179
+ return (...args) => {
180
+ lastArgs = args;
181
+ if (!invoked) {
182
+ invoked = true;
183
+ lastArgs = null;
184
+ try {
185
+ func(...args);
186
+ }
187
+ catch (error) {
188
+ useLogger("error", "[debounceImmediate] Callback error:", error);
189
+ }
190
+ }
191
+ if (timeoutId !== undefined) {
192
+ clearTimeout(timeoutId);
193
+ }
194
+ timeoutId = setTimeout(() => {
195
+ if (lastArgs) {
152
196
  try {
153
- func(...args);
197
+ func(...lastArgs);
154
198
  }
155
199
  catch (error) {
156
- useLog("error", "[throttle] Callback error:", error);
200
+ useLogger("error", "[debounceImmediate] Callback error:", error);
157
201
  }
158
- inThrottle = true;
159
- setTimeout(() => {
160
- inThrottle = false;
161
- }, limitMs);
162
202
  }
163
- };
203
+ invoked = false;
204
+ lastArgs = null;
205
+ timeoutId = undefined;
206
+ }, delayMs);
164
207
  };
165
- useThrottleTrailing = (func, limitMs) => {
166
- let inThrottle = false;
167
- let lastArgs = null;
168
- return (...args) => {
169
- if (!inThrottle) {
170
- try {
171
- func(...args);
172
- }
173
- catch (error) {
174
- useLog("error", "[throttleTrailing] Callback error:", error);
175
- }
176
- inThrottle = true;
177
- lastArgs = null;
178
- setTimeout(() => {
179
- inThrottle = false;
180
- if (lastArgs) {
181
- try {
182
- func(...lastArgs);
183
- }
184
- catch (error) {
185
- useLog("error", "[throttleTrailing] Callback error:", error);
186
- }
187
- }
188
- }, limitMs);
208
+ }
209
+ /**
210
+ * Returns a throttled version of `func` that fires at most once per
211
+ * `limitMs` milliseconds (leading edge).
212
+ *
213
+ * @typeParam T - The wrapped function type.
214
+ * @param func - Function to throttle.
215
+ * @param limitMs - Minimum interval between invocations in milliseconds.
216
+ * @returns A throttled function with the same signature.
217
+ *
218
+ * @example
219
+ * ```ts
220
+ * const throttledScroll = useThrottle(onScroll, 100);
221
+ * window.addEventListener("scroll", throttledScroll);
222
+ * ```
223
+ */
224
+ export function useThrottle(func, limitMs) {
225
+ let inThrottle = false;
226
+ return (...args) => {
227
+ if (!inThrottle) {
228
+ try {
229
+ func(...args);
189
230
  }
190
- else {
191
- lastArgs = args;
231
+ catch (error) {
232
+ useLogger("error", "[throttle] Callback error:", error);
192
233
  }
193
- };
234
+ inThrottle = true;
235
+ setTimeout(() => {
236
+ inThrottle = false;
237
+ }, limitMs);
238
+ }
194
239
  };
195
- useRepeat = async (callback, iterations, delayMs = 0) => {
196
- for (let i = 0; i < iterations; i++) {
240
+ }
241
+ /**
242
+ * Throttle with trailing invocation: fires on the leading edge and also
243
+ * fires once at the end of the throttle window with the latest arguments.
244
+ *
245
+ * @typeParam T - The wrapped function type.
246
+ * @param func - Function to throttle.
247
+ * @param limitMs - Minimum interval between invocations in milliseconds.
248
+ * @returns A throttled function with the same signature.
249
+ *
250
+ * @example
251
+ * ```ts
252
+ * const throttledResize = useThrottleTrailing(onResize, 200);
253
+ * window.addEventListener("resize", throttledResize);
254
+ * ```
255
+ */
256
+ export function useThrottleTrailing(func, limitMs) {
257
+ let inThrottle = false;
258
+ let lastArgs = null;
259
+ return (...args) => {
260
+ if (!inThrottle) {
197
261
  try {
198
- await callback(i);
262
+ func(...args);
199
263
  }
200
264
  catch (error) {
201
- useLog("error", "[repeat] Callback error:", error);
202
- }
203
- if (i < iterations - 1 && delayMs > 0) {
204
- await this.useDelay(delayMs);
265
+ useLogger("error", "[throttleTrailing] Callback error:", error);
205
266
  }
267
+ inThrottle = true;
268
+ lastArgs = null;
269
+ setTimeout(() => {
270
+ inThrottle = false;
271
+ if (lastArgs) {
272
+ try {
273
+ func(...lastArgs);
274
+ }
275
+ catch (error) {
276
+ useLogger("error", "[throttleTrailing] Callback error:", error);
277
+ }
278
+ }
279
+ }, limitMs);
280
+ }
281
+ else {
282
+ lastArgs = args;
206
283
  }
207
284
  };
208
- useRace = async (promise, timeoutMs, errorMessage = "Operation timed out") => {
209
- const timeoutPromise = new Promise((_, reject) => {
210
- setTimeout(() => reject(new Error(errorMessage)), timeoutMs);
211
- });
212
- return Promise.race([promise, timeoutPromise]);
213
- };
214
285
  }
215
- // Singleton instance and destructured exports.
216
- export const { useDelay, useSetTimeout, useInterval, useDebounce, useDebounceImmediate, useThrottle, useThrottleTrailing, useRepeat, useRace, } = TimingService.getInstance();
286
+ /**
287
+ * Executes a callback `iterations` times with an optional delay between
288
+ * each iteration.
289
+ *
290
+ * @param callback - Function called on each iteration with the current
291
+ * index (0-based).
292
+ * @param iterations - Number of times to repeat.
293
+ * @param delayMs - Delay between iterations in milliseconds (defaults to
294
+ * `0`).
295
+ *
296
+ * @example
297
+ * ```ts
298
+ * await useRepeat((i) => console.log(`Attempt ${i + 1}`), 3, 1000);
299
+ * // Attempt 1 ... (1s) ... Attempt 2 ... (1s) ... Attempt 3
300
+ * ```
301
+ */
302
+ export async function useRepeat(callback, iterations, delayMs = 0) {
303
+ for (let i = 0; i < iterations; i++) {
304
+ try {
305
+ await callback(i);
306
+ }
307
+ catch (error) {
308
+ useLogger("error", "[repeat] Callback error:", error);
309
+ }
310
+ if (i < iterations - 1 && delayMs > 0) {
311
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
312
+ }
313
+ }
314
+ }
315
+ /**
316
+ * Races a promise against a timeout. Clears the timer when the promise
317
+ * wins so the timeout rejection cannot become an unhandled rejection.
318
+ *
319
+ * @typeParam T - The promise's resolved type.
320
+ * @param promise - The promise to race.
321
+ * @param timeoutMs - Timeout in milliseconds.
322
+ * @param errorMessage - Error message on timeout (defaults to
323
+ * `"Operation timed out"`).
324
+ * @returns The resolved value of the promise.
325
+ * @throws {Error} If the timeout fires first.
326
+ *
327
+ * @example
328
+ * ```ts
329
+ * try {
330
+ * const data = await useRace(fetch("/api"), 5000);
331
+ * } catch (e) {
332
+ * console.error(e); // "Operation timed out"
333
+ * }
334
+ * ```
335
+ */
336
+ export async function useRace(promise, timeoutMs, errorMessage = "Operation timed out") {
337
+ let timeoutId;
338
+ let settled = false;
339
+ const timeoutPromise = new Promise((_, reject) => {
340
+ timeoutId = setTimeout(() => {
341
+ if (!settled) {
342
+ reject(new Error(errorMessage));
343
+ }
344
+ }, timeoutMs);
345
+ });
346
+ try {
347
+ return await Promise.race([promise, timeoutPromise]);
348
+ }
349
+ finally {
350
+ settled = true;
351
+ if (timeoutId !== undefined) {
352
+ clearTimeout(timeoutId);
353
+ }
354
+ }
355
+ }
217
356
  //# sourceMappingURL=timing.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"timing.service.js","sourceRoot":"","sources":["../../../src/core/services/timing.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAI7C;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IACzB,MAAM,CAAC,QAAQ,CAAgB;IAEvC,gBAAuB,CAAC;IAEjB,MAAM,CAAC,WAAW;QACxB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC7B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QAC9C,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAEM,QAAQ,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAEnG,2DAA2D;IACpD,QAAQ,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAE5D,aAAa,GAAG,CAAI,QAA8B,EAAE,EAAU,EAAqB,EAAE;QAC3F,IAAI,OAAgB,CAAC;QACrB,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAClD,OAAO,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;gBAC/B,IAAI,WAAW;oBAAE,OAAO;gBAExB,IAAI,CAAC;oBACJ,MAAM,MAAM,GAAG,MAAM,QAAQ,EAAE,CAAC;oBAChC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACjB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,CAAC,KAAK,CAAC,CAAC;gBACf,CAAC;YACF,CAAC,EAAE,EAAE,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,GAAG,EAAE;YACnB,WAAW,GAAG,IAAI,CAAC;YACnB,YAAY,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC,CAAC;QAEF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC,CAAC;IAEK,WAAW,GAAG,CACpB,QAAoC,EACpC,EAAU,EACV,SAAS,GAAG,KAAK,EACC,EAAE;QACpB,IAAI,OAAO,GAAmB,IAAI,CAAC;QACnC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YAC1B,IAAI,QAAQ,IAAI,SAAS,IAAI,WAAW;gBAAE,OAAO;YAEjD,WAAW,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC;gBACJ,MAAM,QAAQ,EAAE,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,CAAC,OAAO,EAAE,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACtD,CAAC;oBAAS,CAAC;gBACV,WAAW,GAAG,KAAK,CAAC;YACrB,CAAC;QACF,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,GAAG,EAAE;YACzB,IAAI,SAAS,IAAI,QAAQ;gBAAE,OAAO;YAClC,OAAO,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;gBAC/B,MAAM,OAAO,EAAE,CAAC;gBAChB,YAAY,EAAE,CAAC;YAChB,CAAC,EAAE,EAAE,CAAC,CAAC;QACR,CAAC,CAAC;QAEF,MAAM,IAAI,GAAG,GAAG,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,QAAQ,GAAG,KAAK,CAAC;YACjB,IAAI,OAAO,EAAE,CAAC;gBACb,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,OAAO,GAAG,IAAI,CAAC;YAChB,CAAC;QACF,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,GAAG,EAAE;YAClB,IAAI,SAAS;gBAAE,OAAO;YACtB,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,OAAO,EAAE,CAAC;gBACb,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,OAAO,GAAG,IAAI,CAAC;YAChB,CAAC;QACF,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,GAAG,EAAE;YACnB,IAAI,SAAS,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACnC,QAAQ,GAAG,KAAK,CAAC;YACjB,YAAY,EAAE,CAAC;QAChB,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC;QAEhD,IAAI,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACP,YAAY,EAAE,CAAC;QAChB,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC3C,CAAC,CAAC;IAEK,WAAW,GAAG,CACpB,IAAO,EACP,OAAe,EACsB,EAAE;QACvC,IAAI,SAA8B,CAAC;QAEnC,OAAO,CAAC,GAAG,IAAmB,EAAE,EAAE;YACjC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC7B,YAAY,CAAC,SAAS,CAAC,CAAC;YACzB,CAAC;YAED,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC3B,IAAI,CAAC;oBACJ,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBACf,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,CAAC,OAAO,EAAE,4BAA4B,EAAE,KAAK,CAAC,CAAC;gBACtD,CAAC;gBACD,SAAS,GAAG,SAAS,CAAC;YACvB,CAAC,EAAE,OAAO,CAAC,CAAC;QACb,CAAC,CAAC;IACH,CAAC,CAAC;IAEK,oBAAoB,GAAG,CAC7B,IAAO,EACP,OAAe,EACsB,EAAE;QACvC,IAAI,SAA8B,CAAC;QACnC,IAAI,YAAgC,CAAC;QAErC,OAAO,CAAC,GAAG,IAAmB,EAAE,EAAE;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,WAAW,GAAG,YAAY,KAAK,SAAS,CAAC;YAE/C,YAAY,GAAG,GAAG,CAAC;YAEnB,IAAI,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACJ,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBACf,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,CAAC,OAAO,EAAE,qCAAqC,EAAE,KAAK,CAAC,CAAC;gBAC/D,CAAC;YACF,CAAC;YAED,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC7B,YAAY,CAAC,SAAS,CAAC,CAAC;YACzB,CAAC;YAED,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC3B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,EAAE,CAAC;oBAClD,IAAI,CAAC;wBACJ,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;oBACf,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBAChB,MAAM,CAAC,OAAO,EAAE,qCAAqC,EAAE,KAAK,CAAC,CAAC;oBAC/D,CAAC;gBACF,CAAC;gBACD,SAAS,GAAG,SAAS,CAAC;gBACtB,YAAY,GAAG,SAAS,CAAC;YAC1B,CAAC,EAAE,OAAO,CAAC,CAAC;QACb,CAAC,CAAC;IACH,CAAC,CAAC;IAEK,WAAW,GAAG,CACpB,IAAO,EACP,OAAe,EACsB,EAAE;QACvC,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,OAAO,CAAC,GAAG,IAAmB,EAAE,EAAE;YACjC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACJ,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBACf,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,CAAC,OAAO,EAAE,4BAA4B,EAAE,KAAK,CAAC,CAAC;gBACtD,CAAC;gBACD,UAAU,GAAG,IAAI,CAAC;gBAClB,UAAU,CAAC,GAAG,EAAE;oBACf,UAAU,GAAG,KAAK,CAAC;gBACpB,CAAC,EAAE,OAAO,CAAC,CAAC;YACb,CAAC;QACF,CAAC,CAAC;IACH,CAAC,CAAC;IAEK,mBAAmB,GAAG,CAC5B,IAAO,EACP,OAAe,EACsB,EAAE;QACvC,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,QAAQ,GAAyB,IAAI,CAAC;QAE1C,OAAO,CAAC,GAAG,IAAmB,EAAE,EAAE;YACjC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACJ,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBACf,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,CAAC,OAAO,EAAE,oCAAoC,EAAE,KAAK,CAAC,CAAC;gBAC9D,CAAC;gBACD,UAAU,GAAG,IAAI,CAAC;gBAClB,QAAQ,GAAG,IAAI,CAAC;gBAEhB,UAAU,CAAC,GAAG,EAAE;oBACf,UAAU,GAAG,KAAK,CAAC;oBACnB,IAAI,QAAQ,EAAE,CAAC;wBACd,IAAI,CAAC;4BACJ,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;wBACnB,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BAChB,MAAM,CAAC,OAAO,EAAE,oCAAoC,EAAE,KAAK,CAAC,CAAC;wBAC9D,CAAC;oBACF,CAAC;gBACF,CAAC,EAAE,OAAO,CAAC,CAAC;YACb,CAAC;iBAAM,CAAC;gBACP,QAAQ,GAAG,IAAI,CAAC;YACjB,CAAC;QACF,CAAC,CAAC;IACH,CAAC,CAAC;IAEK,SAAS,GAAG,KAAK,EACvB,QAAqD,EACrD,UAAkB,EAClB,OAAO,GAAG,CAAC,EACK,EAAE;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC;gBACJ,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,CAAC,OAAO,EAAE,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;YAED,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBACvC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;QACF,CAAC;IACF,CAAC,CAAC;IAEK,OAAO,GAAG,KAAK,EACrB,OAAmB,EACnB,SAAiB,EACjB,YAAY,GAAG,qBAAqB,EACvB,EAAE;QACf,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACvD,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC;CACF;AAED,+CAA+C;AAC/C,MAAM,CAAC,MAAM,EACZ,QAAQ,EACR,aAAa,EACb,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,OAAO,GACP,GAAkB,aAAa,CAAC,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"timing.service.js","sourceRoot":"","sources":["../../../src/core/services/timing.service.ts"],"names":[],"mappings":"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"}