@catbee/utils 0.0.8-rc.0 → 0.0.8-rc.2

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 (281) hide show
  1. package/README.md +25 -1
  2. package/build/esm/config.d.ts +0 -1
  3. package/build/esm/config.js +6 -7
  4. package/build/esm/index.d.ts +0 -1
  5. package/build/esm/index.js +0 -1
  6. package/build/esm/servers/server.builder.d.ts +0 -1
  7. package/build/esm/servers/server.builder.js +99 -147
  8. package/build/esm/servers/server.d.ts +0 -1
  9. package/build/esm/servers/server.js +591 -876
  10. package/build/esm/types/api-response.d.ts +0 -1
  11. package/build/esm/types/api-response.js +0 -1
  12. package/build/esm/types/index.d.ts +0 -1
  13. package/build/esm/types/index.js +0 -1
  14. package/build/esm/types/server.d.ts +0 -1
  15. package/build/esm/types/server.js +0 -1
  16. package/build/esm/utils/array.utils.d.ts +0 -1
  17. package/build/esm/utils/array.utils.js +48 -86
  18. package/build/esm/utils/async.utils.d.ts +0 -1
  19. package/build/esm/utils/async.utils.js +247 -524
  20. package/build/esm/utils/cache.utils.d.ts +0 -1
  21. package/build/esm/utils/cache.utils.js +96 -301
  22. package/build/esm/utils/context-store.utils.d.ts +0 -1
  23. package/build/esm/utils/context-store.utils.js +62 -79
  24. package/build/esm/utils/crypto.utils.d.ts +0 -1
  25. package/build/esm/utils/crypto.utils.js +78 -175
  26. package/build/esm/utils/date.utils.d.ts +0 -1
  27. package/build/esm/utils/date.utils.js +47 -53
  28. package/build/esm/utils/decorators.utils.d.ts +201 -5
  29. package/build/esm/utils/decorators.utils.js +632 -285
  30. package/build/esm/utils/dir.utils.d.ts +0 -1
  31. package/build/esm/utils/dir.utils.js +264 -786
  32. package/build/esm/utils/env.utils.d.ts +0 -1
  33. package/build/esm/utils/env.utils.js +180 -271
  34. package/build/esm/utils/exception.utils.d.ts +0 -1
  35. package/build/esm/utils/exception.utils.js +112 -289
  36. package/build/esm/utils/fs.utils.d.ts +0 -1
  37. package/build/esm/utils/fs.utils.js +169 -401
  38. package/build/esm/utils/http-status-codes.d.ts +0 -1
  39. package/build/esm/utils/http-status-codes.js +0 -1
  40. package/build/esm/utils/id.utils.d.ts +0 -1
  41. package/build/esm/utils/id.utils.js +5 -9
  42. package/build/esm/utils/logger.utils.d.ts +0 -1
  43. package/build/esm/utils/logger.utils.js +34 -71
  44. package/build/esm/utils/middleware.utils.d.ts +0 -1
  45. package/build/esm/utils/middleware.utils.js +65 -155
  46. package/build/esm/utils/obj.utils.d.ts +0 -1
  47. package/build/esm/utils/obj.utils.js +69 -176
  48. package/build/esm/utils/performance.utils.d.ts +0 -1
  49. package/build/esm/utils/performance.utils.js +92 -195
  50. package/build/esm/utils/request.utils.d.ts +0 -1
  51. package/build/esm/utils/request.utils.js +41 -74
  52. package/build/esm/utils/response.utils.d.ts +0 -1
  53. package/build/esm/utils/response.utils.js +84 -107
  54. package/build/esm/utils/stream.utils.d.ts +0 -1
  55. package/build/esm/utils/stream.utils.js +38 -113
  56. package/build/esm/utils/string.utils.d.ts +0 -1
  57. package/build/esm/utils/string.utils.js +6 -11
  58. package/build/esm/utils/type.utils.d.ts +0 -1
  59. package/build/esm/utils/type.utils.js +8 -12
  60. package/build/esm/utils/url.utils.d.ts +0 -1
  61. package/build/esm/utils/url.utils.js +49 -127
  62. package/build/esm/utils/validate.utils.d.ts +0 -1
  63. package/build/esm/utils/validate.utils.js +23 -40
  64. package/package.json +3 -33
  65. package/build/esm/config.js.map +0 -1
  66. package/build/esm/index.js.map +0 -1
  67. package/build/esm/servers/server.builder.js.map +0 -1
  68. package/build/esm/servers/server.js.map +0 -1
  69. package/build/esm/types/api-response.js.map +0 -1
  70. package/build/esm/types/index.js.map +0 -1
  71. package/build/esm/types/server.js.map +0 -1
  72. package/build/esm/utils/array.utils.js.map +0 -1
  73. package/build/esm/utils/async.utils.js.map +0 -1
  74. package/build/esm/utils/cache.utils.js.map +0 -1
  75. package/build/esm/utils/context-store.utils.js.map +0 -1
  76. package/build/esm/utils/crypto.utils.js.map +0 -1
  77. package/build/esm/utils/date.utils.js.map +0 -1
  78. package/build/esm/utils/decorators.utils.js.map +0 -1
  79. package/build/esm/utils/dir.utils.js.map +0 -1
  80. package/build/esm/utils/env.utils.js.map +0 -1
  81. package/build/esm/utils/exception.utils.js.map +0 -1
  82. package/build/esm/utils/fs.utils.js.map +0 -1
  83. package/build/esm/utils/http-status-codes.js.map +0 -1
  84. package/build/esm/utils/id.utils.js.map +0 -1
  85. package/build/esm/utils/logger.utils.js.map +0 -1
  86. package/build/esm/utils/middleware.utils.js.map +0 -1
  87. package/build/esm/utils/obj.utils.js.map +0 -1
  88. package/build/esm/utils/performance.utils.js.map +0 -1
  89. package/build/esm/utils/request.utils.js.map +0 -1
  90. package/build/esm/utils/response.utils.js.map +0 -1
  91. package/build/esm/utils/stream.utils.js.map +0 -1
  92. package/build/esm/utils/string.utils.js.map +0 -1
  93. package/build/esm/utils/type.utils.js.map +0 -1
  94. package/build/esm/utils/url.utils.js.map +0 -1
  95. package/build/esm/utils/validate.utils.js.map +0 -1
  96. package/build/esnext/config.d.ts +0 -122
  97. package/build/esnext/config.js +0 -133
  98. package/build/esnext/config.js.map +0 -1
  99. package/build/esnext/index.d.ts +0 -27
  100. package/build/esnext/index.js +0 -50
  101. package/build/esnext/index.js.map +0 -1
  102. package/build/esnext/servers/server.builder.d.ts +0 -508
  103. package/build/esnext/servers/server.builder.js +0 -657
  104. package/build/esnext/servers/server.builder.js.map +0 -1
  105. package/build/esnext/servers/server.d.ts +0 -256
  106. package/build/esnext/servers/server.js +0 -955
  107. package/build/esnext/servers/server.js.map +0 -1
  108. package/build/esnext/types/api-response.d.ts +0 -152
  109. package/build/esnext/types/api-response.js +0 -34
  110. package/build/esnext/types/api-response.js.map +0 -1
  111. package/build/esnext/types/index.d.ts +0 -125
  112. package/build/esnext/types/index.js +0 -25
  113. package/build/esnext/types/index.js.map +0 -1
  114. package/build/esnext/types/server.d.ts +0 -268
  115. package/build/esnext/types/server.js +0 -25
  116. package/build/esnext/types/server.js.map +0 -1
  117. package/build/esnext/utils/array.utils.d.ts +0 -168
  118. package/build/esnext/utils/array.utils.js +0 -345
  119. package/build/esnext/utils/array.utils.js.map +0 -1
  120. package/build/esnext/utils/async.utils.d.ts +0 -265
  121. package/build/esnext/utils/async.utils.js +0 -620
  122. package/build/esnext/utils/async.utils.js.map +0 -1
  123. package/build/esnext/utils/cache.utils.d.ts +0 -153
  124. package/build/esnext/utils/cache.utils.js +0 -293
  125. package/build/esnext/utils/cache.utils.js.map +0 -1
  126. package/build/esnext/utils/context-store.utils.d.ts +0 -189
  127. package/build/esnext/utils/context-store.utils.js +0 -289
  128. package/build/esnext/utils/context-store.utils.js.map +0 -1
  129. package/build/esnext/utils/crypto.utils.d.ts +0 -160
  130. package/build/esnext/utils/crypto.utils.js +0 -276
  131. package/build/esnext/utils/crypto.utils.js.map +0 -1
  132. package/build/esnext/utils/date.utils.d.ts +0 -159
  133. package/build/esnext/utils/date.utils.js +0 -384
  134. package/build/esnext/utils/date.utils.js.map +0 -1
  135. package/build/esnext/utils/decorators.utils.d.ts +0 -315
  136. package/build/esnext/utils/decorators.utils.js +0 -504
  137. package/build/esnext/utils/decorators.utils.js.map +0 -1
  138. package/build/esnext/utils/dir.utils.d.ts +0 -196
  139. package/build/esnext/utils/dir.utils.js +0 -477
  140. package/build/esnext/utils/dir.utils.js.map +0 -1
  141. package/build/esnext/utils/env.utils.d.ts +0 -377
  142. package/build/esnext/utils/env.utils.js +0 -785
  143. package/build/esnext/utils/env.utils.js.map +0 -1
  144. package/build/esnext/utils/exception.utils.d.ts +0 -230
  145. package/build/esnext/utils/exception.utils.js +0 -381
  146. package/build/esnext/utils/exception.utils.js.map +0 -1
  147. package/build/esnext/utils/fs.utils.d.ts +0 -164
  148. package/build/esnext/utils/fs.utils.js +0 -349
  149. package/build/esnext/utils/fs.utils.js.map +0 -1
  150. package/build/esnext/utils/http-status-codes.d.ts +0 -266
  151. package/build/esnext/utils/http-status-codes.js +0 -295
  152. package/build/esnext/utils/http-status-codes.js.map +0 -1
  153. package/build/esnext/utils/id.utils.d.ts +0 -36
  154. package/build/esnext/utils/id.utils.js +0 -84
  155. package/build/esnext/utils/id.utils.js.map +0 -1
  156. package/build/esnext/utils/logger.utils.d.ts +0 -160
  157. package/build/esnext/utils/logger.utils.js +0 -300
  158. package/build/esnext/utils/logger.utils.js.map +0 -1
  159. package/build/esnext/utils/middleware.utils.d.ts +0 -100
  160. package/build/esnext/utils/middleware.utils.js +0 -236
  161. package/build/esnext/utils/middleware.utils.js.map +0 -1
  162. package/build/esnext/utils/obj.utils.d.ts +0 -124
  163. package/build/esnext/utils/obj.utils.js +0 -413
  164. package/build/esnext/utils/obj.utils.js.map +0 -1
  165. package/build/esnext/utils/performance.utils.d.ts +0 -136
  166. package/build/esnext/utils/performance.utils.js +0 -271
  167. package/build/esnext/utils/performance.utils.js.map +0 -1
  168. package/build/esnext/utils/request.utils.d.ts +0 -86
  169. package/build/esnext/utils/request.utils.js +0 -186
  170. package/build/esnext/utils/request.utils.js.map +0 -1
  171. package/build/esnext/utils/response.utils.d.ts +0 -163
  172. package/build/esnext/utils/response.utils.js +0 -247
  173. package/build/esnext/utils/response.utils.js.map +0 -1
  174. package/build/esnext/utils/stream.utils.d.ts +0 -88
  175. package/build/esnext/utils/stream.utils.js +0 -210
  176. package/build/esnext/utils/stream.utils.js.map +0 -1
  177. package/build/esnext/utils/string.utils.d.ts +0 -93
  178. package/build/esnext/utils/string.utils.js +0 -165
  179. package/build/esnext/utils/string.utils.js.map +0 -1
  180. package/build/esnext/utils/type.utils.d.ts +0 -90
  181. package/build/esnext/utils/type.utils.js +0 -187
  182. package/build/esnext/utils/type.utils.js.map +0 -1
  183. package/build/esnext/utils/url.utils.d.ts +0 -141
  184. package/build/esnext/utils/url.utils.js +0 -304
  185. package/build/esnext/utils/url.utils.js.map +0 -1
  186. package/build/esnext/utils/validate.utils.d.ts +0 -177
  187. package/build/esnext/utils/validate.utils.js +0 -320
  188. package/build/esnext/utils/validate.utils.js.map +0 -1
  189. package/build/src/config.d.ts +0 -122
  190. package/build/src/config.js +0 -138
  191. package/build/src/config.js.map +0 -1
  192. package/build/src/index.d.ts +0 -27
  193. package/build/src/index.js +0 -69
  194. package/build/src/index.js.map +0 -1
  195. package/build/src/servers/server.builder.d.ts +0 -508
  196. package/build/src/servers/server.builder.js +0 -661
  197. package/build/src/servers/server.builder.js.map +0 -1
  198. package/build/src/servers/server.d.ts +0 -256
  199. package/build/src/servers/server.js +0 -962
  200. package/build/src/servers/server.js.map +0 -1
  201. package/build/src/types/api-response.d.ts +0 -152
  202. package/build/src/types/api-response.js +0 -37
  203. package/build/src/types/api-response.js.map +0 -1
  204. package/build/src/types/index.d.ts +0 -125
  205. package/build/src/types/index.js +0 -26
  206. package/build/src/types/index.js.map +0 -1
  207. package/build/src/types/server.d.ts +0 -268
  208. package/build/src/types/server.js +0 -26
  209. package/build/src/types/server.js.map +0 -1
  210. package/build/src/utils/array.utils.d.ts +0 -168
  211. package/build/src/utils/array.utils.js +0 -364
  212. package/build/src/utils/array.utils.js.map +0 -1
  213. package/build/src/utils/async.utils.d.ts +0 -265
  214. package/build/src/utils/async.utils.js +0 -641
  215. package/build/src/utils/async.utils.js.map +0 -1
  216. package/build/src/utils/cache.utils.d.ts +0 -153
  217. package/build/src/utils/cache.utils.js +0 -297
  218. package/build/src/utils/cache.utils.js.map +0 -1
  219. package/build/src/utils/context-store.utils.d.ts +0 -189
  220. package/build/src/utils/context-store.utils.js +0 -296
  221. package/build/src/utils/context-store.utils.js.map +0 -1
  222. package/build/src/utils/crypto.utils.d.ts +0 -160
  223. package/build/src/utils/crypto.utils.js +0 -293
  224. package/build/src/utils/crypto.utils.js.map +0 -1
  225. package/build/src/utils/date.utils.d.ts +0 -159
  226. package/build/src/utils/date.utils.js +0 -396
  227. package/build/src/utils/date.utils.js.map +0 -1
  228. package/build/src/utils/decorators.utils.d.ts +0 -315
  229. package/build/src/utils/decorators.utils.js +0 -516
  230. package/build/src/utils/decorators.utils.js.map +0 -1
  231. package/build/src/utils/dir.utils.d.ts +0 -196
  232. package/build/src/utils/dir.utils.js +0 -501
  233. package/build/src/utils/dir.utils.js.map +0 -1
  234. package/build/src/utils/env.utils.d.ts +0 -377
  235. package/build/src/utils/env.utils.js +0 -789
  236. package/build/src/utils/env.utils.js.map +0 -1
  237. package/build/src/utils/exception.utils.d.ts +0 -230
  238. package/build/src/utils/exception.utils.js +0 -407
  239. package/build/src/utils/exception.utils.js.map +0 -1
  240. package/build/src/utils/fs.utils.d.ts +0 -164
  241. package/build/src/utils/fs.utils.js +0 -372
  242. package/build/src/utils/fs.utils.js.map +0 -1
  243. package/build/src/utils/http-status-codes.d.ts +0 -266
  244. package/build/src/utils/http-status-codes.js +0 -298
  245. package/build/src/utils/http-status-codes.js.map +0 -1
  246. package/build/src/utils/id.utils.d.ts +0 -36
  247. package/build/src/utils/id.utils.js +0 -91
  248. package/build/src/utils/id.utils.js.map +0 -1
  249. package/build/src/utils/logger.utils.d.ts +0 -160
  250. package/build/src/utils/logger.utils.js +0 -346
  251. package/build/src/utils/logger.utils.js.map +0 -1
  252. package/build/src/utils/middleware.utils.d.ts +0 -100
  253. package/build/src/utils/middleware.utils.js +0 -244
  254. package/build/src/utils/middleware.utils.js.map +0 -1
  255. package/build/src/utils/obj.utils.d.ts +0 -124
  256. package/build/src/utils/obj.utils.js +0 -429
  257. package/build/src/utils/obj.utils.js.map +0 -1
  258. package/build/src/utils/performance.utils.d.ts +0 -136
  259. package/build/src/utils/performance.utils.js +0 -278
  260. package/build/src/utils/performance.utils.js.map +0 -1
  261. package/build/src/utils/request.utils.d.ts +0 -86
  262. package/build/src/utils/request.utils.js +0 -195
  263. package/build/src/utils/request.utils.js.map +0 -1
  264. package/build/src/utils/response.utils.d.ts +0 -163
  265. package/build/src/utils/response.utils.js +0 -260
  266. package/build/src/utils/response.utils.js.map +0 -1
  267. package/build/src/utils/stream.utils.d.ts +0 -88
  268. package/build/src/utils/stream.utils.js +0 -218
  269. package/build/src/utils/stream.utils.js.map +0 -1
  270. package/build/src/utils/string.utils.d.ts +0 -93
  271. package/build/src/utils/string.utils.js +0 -179
  272. package/build/src/utils/string.utils.js.map +0 -1
  273. package/build/src/utils/type.utils.d.ts +0 -90
  274. package/build/src/utils/type.utils.js +0 -196
  275. package/build/src/utils/type.utils.js.map +0 -1
  276. package/build/src/utils/url.utils.d.ts +0 -141
  277. package/build/src/utils/url.utils.js +0 -317
  278. package/build/src/utils/url.utils.js.map +0 -1
  279. package/build/src/utils/validate.utils.d.ts +0 -177
  280. package/build/src/utils/validate.utils.js +0 -345
  281. package/build/src/utils/validate.utils.js.map +0 -1
@@ -21,93 +21,6 @@
21
21
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
22
  * SOFTWARE.
23
23
  */
24
- var __extends = (this && this.__extends) || (function () {
25
- var extendStatics = function (d, b) {
26
- extendStatics = Object.setPrototypeOf ||
27
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
28
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
29
- return extendStatics(d, b);
30
- };
31
- return function (d, b) {
32
- if (typeof b !== "function" && b !== null)
33
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
34
- extendStatics(d, b);
35
- function __() { this.constructor = d; }
36
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
37
- };
38
- })();
39
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
40
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
41
- return new (P || (P = Promise))(function (resolve, reject) {
42
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
43
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
44
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
45
- step((generator = generator.apply(thisArg, _arguments || [])).next());
46
- });
47
- };
48
- var __generator = (this && this.__generator) || function (thisArg, body) {
49
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
50
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
51
- function verb(n) { return function (v) { return step([n, v]); }; }
52
- function step(op) {
53
- if (f) throw new TypeError("Generator is already executing.");
54
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
55
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
56
- if (y = 0, t) op = [op[0] & 2, t.value];
57
- switch (op[0]) {
58
- case 0: case 1: t = op; break;
59
- case 4: _.label++; return { value: op[1], done: false };
60
- case 5: _.label++; y = op[1]; op = [0]; continue;
61
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
62
- default:
63
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
64
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
65
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
66
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
67
- if (t[2]) _.ops.pop();
68
- _.trys.pop(); continue;
69
- }
70
- op = body.call(thisArg, _);
71
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
72
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
73
- }
74
- };
75
- var __read = (this && this.__read) || function (o, n) {
76
- var m = typeof Symbol === "function" && o[Symbol.iterator];
77
- if (!m) return o;
78
- var i = m.call(o), r, ar = [], e;
79
- try {
80
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
81
- }
82
- catch (error) { e = { error: error }; }
83
- finally {
84
- try {
85
- if (r && !r.done && (m = i["return"])) m.call(i);
86
- }
87
- finally { if (e) throw e.error; }
88
- }
89
- return ar;
90
- };
91
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
92
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
93
- if (ar || !(i in from)) {
94
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
95
- ar[i] = from[i];
96
- }
97
- }
98
- return to.concat(ar || Array.prototype.slice.call(from));
99
- };
100
- var __values = (this && this.__values) || function(o) {
101
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
102
- if (m) return m.call(o);
103
- if (o && typeof o.length === "number") return {
104
- next: function () {
105
- if (o && i >= o.length) o = void 0;
106
- return { value: o && o[i++], done: !o };
107
- }
108
- };
109
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
110
- };
111
24
  import { getLogger } from './logger.utils';
112
25
  /**
113
26
  * Delays execution for a specified number of milliseconds.
@@ -116,7 +29,7 @@ import { getLogger } from './logger.utils';
116
29
  * @returns {Promise<void>} A Promise that resolves after the given time.
117
30
  */
118
31
  export function sleep(ms) {
119
- return new Promise(function (resolve) { return setTimeout(resolve, ms); });
32
+ return new Promise(resolve => setTimeout(resolve, ms));
120
33
  }
121
34
  /**
122
35
  * Creates a debounced version of a function that delays its execution.
@@ -128,31 +41,27 @@ export function sleep(ms) {
128
41
  * @returns {T & { cancel: () => void; flush: () => void }} A debounced function.
129
42
  */
130
43
  export function debounce(fn, delay) {
131
- var timer = null;
132
- var pendingArgs = null;
133
- function debounced() {
134
- var args = [];
135
- for (var _i = 0; _i < arguments.length; _i++) {
136
- args[_i] = arguments[_i];
137
- }
44
+ let timer = null;
45
+ let pendingArgs = null;
46
+ function debounced(...args) {
138
47
  pendingArgs = args;
139
48
  if (timer)
140
49
  clearTimeout(timer);
141
- timer = setTimeout(function () {
142
- fn.apply(void 0, __spreadArray([], __read(pendingArgs), false));
50
+ timer = setTimeout(() => {
51
+ fn(...pendingArgs);
143
52
  timer = null;
144
53
  }, delay);
145
54
  }
146
- debounced.cancel = function () {
55
+ debounced.cancel = () => {
147
56
  if (timer)
148
57
  clearTimeout(timer);
149
58
  timer = null;
150
59
  pendingArgs = null;
151
60
  };
152
- debounced.flush = function () {
61
+ debounced.flush = () => {
153
62
  if (timer) {
154
63
  clearTimeout(timer);
155
- fn.apply(void 0, __spreadArray([], __read(pendingArgs), false));
64
+ fn(...pendingArgs);
156
65
  timer = null;
157
66
  pendingArgs = null;
158
67
  }
@@ -169,40 +78,35 @@ export function debounce(fn, delay) {
169
78
  * @param {{ leading?: boolean, trailing?: boolean }} [opts] - Options for leading/trailing edge throttling.
170
79
  * @returns {(...args: Parameters<T>) => void} A throttled function.
171
80
  */
172
- export function throttle(fn, limit, opts) {
173
- if (opts === void 0) { opts = {
174
- leading: true,
175
- trailing: false
176
- }; }
177
- var lastCall = 0;
178
- var timer = null;
179
- var savedArgs = null;
180
- return function () {
181
- var args = [];
182
- for (var _i = 0; _i < arguments.length; _i++) {
183
- args[_i] = arguments[_i];
184
- }
185
- var now = Date.now();
186
- var _a = opts.leading, leading = _a === void 0 ? true : _a, _b = opts.trailing, trailing = _b === void 0 ? false : _b;
81
+ export function throttle(fn, limit, opts = {
82
+ leading: true,
83
+ trailing: false
84
+ }) {
85
+ let lastCall = 0;
86
+ let timer = null;
87
+ let savedArgs = null;
88
+ return function (...args) {
89
+ const now = Date.now();
90
+ const { leading = true, trailing = false } = opts;
187
91
  if (!lastCall && !leading)
188
92
  lastCall = now;
189
- var remaining = limit - (now - lastCall);
93
+ const remaining = limit - (now - lastCall);
190
94
  if (remaining <= 0) {
191
95
  if (timer) {
192
96
  clearTimeout(timer);
193
97
  timer = null;
194
98
  }
195
99
  lastCall = now;
196
- fn.apply(void 0, __spreadArray([], __read(args), false));
100
+ fn(...args);
197
101
  }
198
102
  else if (trailing) {
199
103
  savedArgs = args;
200
104
  if (!timer) {
201
- timer = setTimeout(function () {
105
+ timer = setTimeout(() => {
202
106
  lastCall = leading ? Date.now() : 0;
203
107
  timer = null;
204
108
  if (savedArgs)
205
- fn.apply(void 0, __spreadArray([], __read(savedArgs), false));
109
+ fn(...savedArgs);
206
110
  }, remaining);
207
111
  }
208
112
  }
@@ -220,41 +124,20 @@ export function throttle(fn, limit, opts) {
220
124
  * @returns {Promise<T>} The result of the async function if successful.
221
125
  * @throws {*} The last encountered error if all retries fail.
222
126
  */
223
- export function retry(fn_1) {
224
- return __awaiter(this, arguments, void 0, function (fn, retries, delay, backoff, onRetry) {
225
- var i, e_1;
226
- if (retries === void 0) { retries = 3; }
227
- if (delay === void 0) { delay = 500; }
228
- if (backoff === void 0) { backoff = false; }
229
- return __generator(this, function (_a) {
230
- switch (_a.label) {
231
- case 0:
232
- i = 0;
233
- _a.label = 1;
234
- case 1:
235
- if (!(i < retries)) return [3 /*break*/, 7];
236
- _a.label = 2;
237
- case 2:
238
- _a.trys.push([2, 4, , 6]);
239
- return [4 /*yield*/, fn()];
240
- case 3: return [2 /*return*/, _a.sent()];
241
- case 4:
242
- e_1 = _a.sent();
243
- if (i === retries - 1)
244
- throw e_1;
245
- if (onRetry)
246
- onRetry(e_1, i + 1);
247
- return [4 /*yield*/, sleep(backoff ? delay * Math.pow(2, i) : delay)];
248
- case 5:
249
- _a.sent();
250
- return [3 /*break*/, 6];
251
- case 6:
252
- i++;
253
- return [3 /*break*/, 1];
254
- case 7: throw new Error('Retry failed'); // should never reach here
255
- }
256
- });
257
- });
127
+ export async function retry(fn, retries = 3, delay = 500, backoff = false, onRetry) {
128
+ for (let i = 0; i < retries; i++) {
129
+ try {
130
+ return await fn();
131
+ }
132
+ catch (e) {
133
+ if (i === retries - 1)
134
+ throw e;
135
+ if (onRetry)
136
+ onRetry(e, i + 1);
137
+ await sleep(backoff ? delay * Math.pow(2, i) : delay);
138
+ }
139
+ }
140
+ throw new Error('Retry failed'); // should never reach here
258
141
  }
259
142
  /**
260
143
  * Wraps a promise and rejects it if it doesn't resolve within the specified timeout.
@@ -265,16 +148,15 @@ export function retry(fn_1) {
265
148
  * @param {string} [message="Operation timed out"] - Optional timeout message.
266
149
  * @returns {Promise<T>} A promise that resolves or rejects within the timeout.
267
150
  */
268
- export function withTimeout(promise, ms, message) {
269
- if (message === void 0) { message = 'Operation timed out'; }
270
- return new Promise(function (resolve, reject) {
271
- var timeoutHandle = setTimeout(function () { return reject(new Error(message)); }, ms);
151
+ export function withTimeout(promise, ms, message = 'Operation timed out') {
152
+ return new Promise((resolve, reject) => {
153
+ const timeoutHandle = setTimeout(() => reject(new Error(message)), ms);
272
154
  promise
273
- .then(function (result) {
155
+ .then(result => {
274
156
  clearTimeout(timeoutHandle);
275
157
  resolve(result);
276
158
  })
277
- .catch(function (err) {
159
+ .catch(err => {
278
160
  clearTimeout(timeoutHandle);
279
161
  reject(err);
280
162
  });
@@ -291,30 +173,14 @@ export function withTimeout(promise, ms, message) {
291
173
  * @param {number} limit - Number of tasks to run in parallel per batch.
292
174
  * @returns {Promise<T[]>} A promise that resolves to an array of resolved values.
293
175
  */
294
- export function runInBatches(tasks, limit) {
295
- return __awaiter(this, void 0, void 0, function () {
296
- var results, i, batch, batchResults;
297
- return __generator(this, function (_a) {
298
- switch (_a.label) {
299
- case 0:
300
- results = [];
301
- i = 0;
302
- _a.label = 1;
303
- case 1:
304
- if (!(i < tasks.length)) return [3 /*break*/, 4];
305
- batch = tasks.slice(i, i + limit);
306
- return [4 /*yield*/, Promise.all(batch.map(function (fn) { return fn(); }))];
307
- case 2:
308
- batchResults = _a.sent();
309
- results.push.apply(results, __spreadArray([], __read(batchResults), false));
310
- _a.label = 3;
311
- case 3:
312
- i += limit;
313
- return [3 /*break*/, 1];
314
- case 4: return [2 /*return*/, results];
315
- }
316
- });
317
- });
176
+ export async function runInBatches(tasks, limit) {
177
+ const results = [];
178
+ for (let i = 0; i < tasks.length; i += limit) {
179
+ const batch = tasks.slice(i, i + limit);
180
+ const batchResults = await Promise.all(batch.map(fn => fn()));
181
+ results.push(...batchResults);
182
+ }
183
+ return results;
318
184
  }
319
185
  /**
320
186
  * Wraps a function and ensures it is only called once at a time.
@@ -327,28 +193,18 @@ export function runInBatches(tasks, limit) {
327
193
  * @param {boolean} [drop=false] - If true, new calls while one is pending are rejected.
328
194
  * @returns {(...args: TArgs) => Promise<TResult>} A wrapped function with singleton behavior.
329
195
  */
330
- export function singletonAsync(fn, drop) {
331
- var _this = this;
332
- if (drop === void 0) { drop = false; }
333
- var promise = null;
334
- return function () {
335
- var args = [];
336
- for (var _i = 0; _i < arguments.length; _i++) {
337
- args[_i] = arguments[_i];
338
- }
339
- return __awaiter(_this, void 0, void 0, function () {
340
- return __generator(this, function (_a) {
341
- if (!promise) {
342
- promise = fn.apply(void 0, __spreadArray([], __read(args), false)).finally(function () {
343
- promise = null;
344
- });
345
- }
346
- else if (drop) {
347
- return [2 /*return*/, Promise.reject(new Error('Busy: function already running'))];
348
- }
349
- return [2 /*return*/, promise];
196
+ export function singletonAsync(fn, drop = false) {
197
+ let promise = null;
198
+ return async (...args) => {
199
+ if (!promise) {
200
+ promise = fn(...args).finally(() => {
201
+ promise = null;
350
202
  });
351
- });
203
+ }
204
+ else if (drop) {
205
+ return Promise.reject(new Error('Busy: function already running'));
206
+ }
207
+ return promise;
352
208
  };
353
209
  }
354
210
  /**
@@ -358,12 +214,8 @@ export function singletonAsync(fn, drop) {
358
214
  * @param {Array<() => Promise<T>>} tasks - Array of promise-returning functions.
359
215
  * @returns {Promise<PromiseSettledResult<T>[]>} Results including status and value/reason.
360
216
  */
361
- export function settleAll(tasks) {
362
- return __awaiter(this, void 0, void 0, function () {
363
- return __generator(this, function (_a) {
364
- return [2 /*return*/, Promise.allSettled(tasks.map(function (task) { return task(); }))];
365
- });
366
- });
217
+ export async function settleAll(tasks) {
218
+ return Promise.allSettled(tasks.map(task => task()));
367
219
  }
368
220
  /**
369
221
  * A simple task queue that executes async tasks with a concurrency limit.
@@ -374,20 +226,20 @@ export function settleAll(tasks) {
374
226
  * Enqueue function plus queue controls.
375
227
  */
376
228
  export function createTaskQueue(limit) {
377
- var queue = [];
378
- var activeCount = 0;
379
- var paused = false;
380
- var state = {
229
+ const queue = [];
230
+ let activeCount = 0;
231
+ let paused = false;
232
+ const state = {
381
233
  /**
382
234
  * Pause task processing.
383
235
  */
384
- pause: function () {
236
+ pause() {
385
237
  paused = true;
386
238
  },
387
239
  /**
388
240
  * Resume task processing.
389
241
  */
390
- resume: function () {
242
+ resume() {
391
243
  paused = false;
392
244
  next();
393
245
  },
@@ -406,12 +258,12 @@ export function createTaskQueue(limit) {
406
258
  return paused;
407
259
  }
408
260
  };
409
- var next = function () {
261
+ const next = () => {
410
262
  if (paused || queue.length === 0 || activeCount >= limit)
411
263
  return;
412
- var task = queue.shift();
264
+ const task = queue.shift();
413
265
  activeCount++;
414
- task().finally(function () {
266
+ task().finally(() => {
415
267
  activeCount--;
416
268
  next();
417
269
  });
@@ -423,42 +275,27 @@ export function createTaskQueue(limit) {
423
275
  * @param {() => Promise<T>} taskFn - The async task function.
424
276
  * @returns {Promise<T>} Promise resolving when task completes.
425
277
  */
426
- var enqueue = function (taskFn) {
427
- return __awaiter(this, void 0, void 0, function () {
428
- var _this = this;
429
- return __generator(this, function (_a) {
430
- return [2 /*return*/, new Promise(function (resolve, reject) {
431
- queue.push(function () { return __awaiter(_this, void 0, void 0, function () {
432
- var result, err_1;
433
- return __generator(this, function (_a) {
434
- switch (_a.label) {
435
- case 0:
436
- _a.trys.push([0, 2, , 3]);
437
- return [4 /*yield*/, taskFn()];
438
- case 1:
439
- result = _a.sent();
440
- resolve(result);
441
- return [3 /*break*/, 3];
442
- case 2:
443
- err_1 = _a.sent();
444
- reject(err_1);
445
- return [3 /*break*/, 3];
446
- case 3: return [2 /*return*/];
447
- }
448
- });
449
- }); });
450
- next();
451
- })];
278
+ const enqueue = async function (taskFn) {
279
+ return new Promise((resolve, reject) => {
280
+ queue.push(async () => {
281
+ try {
282
+ const result = await taskFn();
283
+ resolve(result);
284
+ }
285
+ catch (err) {
286
+ reject(err);
287
+ }
452
288
  });
289
+ next();
453
290
  });
454
291
  };
455
292
  enqueue.pause = state.pause;
456
293
  enqueue.resume = state.resume;
457
294
  Object.defineProperty(enqueue, 'length', {
458
- get: function () { return queue.length; }
295
+ get: () => queue.length
459
296
  });
460
297
  Object.defineProperty(enqueue, 'isPaused', {
461
- get: function () { return paused; }
298
+ get: () => paused
462
299
  });
463
300
  return enqueue;
464
301
  }
@@ -470,45 +307,12 @@ export function createTaskQueue(limit) {
470
307
  * @param {Array<() => Promise<T>>} tasks - Array of promise-returning functions.
471
308
  * @returns {Promise<T[]>} Array of resolved values.
472
309
  */
473
- export function runInSeries(tasks) {
474
- return __awaiter(this, void 0, void 0, function () {
475
- var results, tasks_1, tasks_1_1, task, _a, _b, e_2_1;
476
- var e_2, _c;
477
- return __generator(this, function (_d) {
478
- switch (_d.label) {
479
- case 0:
480
- results = [];
481
- _d.label = 1;
482
- case 1:
483
- _d.trys.push([1, 6, 7, 8]);
484
- tasks_1 = __values(tasks), tasks_1_1 = tasks_1.next();
485
- _d.label = 2;
486
- case 2:
487
- if (!!tasks_1_1.done) return [3 /*break*/, 5];
488
- task = tasks_1_1.value;
489
- _b = (_a = results).push;
490
- return [4 /*yield*/, task()];
491
- case 3:
492
- _b.apply(_a, [_d.sent()]);
493
- _d.label = 4;
494
- case 4:
495
- tasks_1_1 = tasks_1.next();
496
- return [3 /*break*/, 2];
497
- case 5: return [3 /*break*/, 8];
498
- case 6:
499
- e_2_1 = _d.sent();
500
- e_2 = { error: e_2_1 };
501
- return [3 /*break*/, 8];
502
- case 7:
503
- try {
504
- if (tasks_1_1 && !tasks_1_1.done && (_c = tasks_1.return)) _c.call(tasks_1);
505
- }
506
- finally { if (e_2) throw e_2.error; }
507
- return [7 /*endfinally*/];
508
- case 8: return [2 /*return*/, results];
509
- }
510
- });
511
- });
310
+ export async function runInSeries(tasks) {
311
+ const results = [];
312
+ for (const task of tasks) {
313
+ results.push(await task());
314
+ }
315
+ return results;
512
316
  }
513
317
  /**
514
318
  * Memoizes an async function, caching results for repeated calls with identical arguments.
@@ -522,36 +326,21 @@ export function runInSeries(tasks) {
522
326
  * @param {(args: Args) => string} [options.keyFn] - Custom key generator function
523
327
  * @returns {(...args: Args) => Promise<T>} Memoized function
524
328
  */
525
- export function memoizeAsync(fn, options) {
526
- if (options === void 0) { options = {}; }
527
- var cache = new Map();
528
- var ttl = options.ttl, _a = options.keyFn, keyFn = _a === void 0 ? JSON.stringify : _a;
529
- return function () {
530
- var args = [];
531
- for (var _i = 0; _i < arguments.length; _i++) {
532
- args[_i] = arguments[_i];
329
+ export function memoizeAsync(fn, options = {}) {
330
+ const cache = new Map();
331
+ const { ttl, keyFn = JSON.stringify } = options;
332
+ return async function (...args) {
333
+ const key = keyFn(args);
334
+ const cached = cache.get(key);
335
+ if (cached && (!ttl || Date.now() < cached.expires)) {
336
+ return cached.value;
533
337
  }
534
- return __awaiter(this, void 0, void 0, function () {
535
- var key, cached, result;
536
- return __generator(this, function (_a) {
537
- switch (_a.label) {
538
- case 0:
539
- key = keyFn(args);
540
- cached = cache.get(key);
541
- if (cached && (!ttl || Date.now() < cached.expires)) {
542
- return [2 /*return*/, cached.value];
543
- }
544
- return [4 /*yield*/, fn.apply(void 0, __spreadArray([], __read(args), false))];
545
- case 1:
546
- result = _a.sent();
547
- cache.set(key, {
548
- value: result,
549
- expires: ttl ? Date.now() + ttl : Infinity
550
- });
551
- return [2 /*return*/, result];
552
- }
553
- });
338
+ const result = await fn(...args);
339
+ cache.set(key, {
340
+ value: result,
341
+ expires: ttl ? Date.now() + ttl : Infinity
554
342
  });
343
+ return result;
555
344
  };
556
345
  }
557
346
  /**
@@ -563,17 +352,16 @@ export function memoizeAsync(fn, options) {
563
352
  * @param {any} [abortValue] - Value to use when rejecting on abort
564
353
  * @returns {Promise<T>} Promise that rejects if the signal is aborted
565
354
  */
566
- export function abortable(promise, signal, abortValue) {
567
- if (abortValue === void 0) { abortValue = new Error('Operation aborted'); }
355
+ export function abortable(promise, signal, abortValue = new Error('Operation aborted')) {
568
356
  if (signal.aborted) {
569
357
  return Promise.reject(abortValue);
570
358
  }
571
359
  return Promise.race([
572
360
  promise,
573
- new Promise(function (_, reject) {
574
- var abort = function () { return reject(abortValue); };
361
+ new Promise((_, reject) => {
362
+ const abort = () => reject(abortValue);
575
363
  signal.addEventListener('abort', abort, { once: true });
576
- promise.finally(function () { return signal.removeEventListener('abort', abort); });
364
+ promise.finally(() => signal.removeEventListener('abort', abort));
577
365
  })
578
366
  ]);
579
367
  }
@@ -586,9 +374,9 @@ export function abortable(promise, signal, abortValue) {
586
374
  * Tuple of [promise, resolve, reject]
587
375
  */
588
376
  export function createDeferred() {
589
- var resolve;
590
- var reject;
591
- var promise = new Promise(function (res, rej) {
377
+ let resolve;
378
+ let reject;
379
+ const promise = new Promise((res, rej) => {
592
380
  resolve = res;
593
381
  reject = rej;
594
382
  });
@@ -603,20 +391,9 @@ export function createDeferred() {
603
391
  * @returns {(input: any) => Promise<T>} Composed function
604
392
  */
605
393
  export function waterfall(fns) {
606
- var _this = this;
607
- return function (initialValue) { return __awaiter(_this, void 0, void 0, function () {
608
- var _this = this;
609
- return __generator(this, function (_a) {
610
- return [2 /*return*/, fns.reduce(function (acc, fn) { return __awaiter(_this, void 0, void 0, function () { var _a; return __generator(this, function (_b) {
611
- switch (_b.label) {
612
- case 0:
613
- _a = fn;
614
- return [4 /*yield*/, acc];
615
- case 1: return [2 /*return*/, _a.apply(void 0, [_b.sent()])];
616
- }
617
- }); }); }, Promise.resolve(initialValue))];
618
- });
619
- }); };
394
+ return async (initialValue) => {
395
+ return fns.reduce(async (acc, fn) => fn(await acc), Promise.resolve(initialValue));
396
+ };
620
397
  }
621
398
  /**
622
399
  * Creates a rate limiter that ensures functions aren't called more than
@@ -629,40 +406,26 @@ export function waterfall(fns) {
629
406
  * @returns {(...args: any[]) => Promise<T>} Rate limited function
630
407
  */
631
408
  export function rateLimit(fn, maxCalls, interval) {
632
- var calls = [];
633
- return function () {
634
- var args = [];
635
- for (var _i = 0; _i < arguments.length; _i++) {
636
- args[_i] = arguments[_i];
409
+ const calls = [];
410
+ return async function (...args) {
411
+ const now = Date.now();
412
+ calls.splice(0, calls.length, ...calls.filter(time => now - time < interval));
413
+ if (calls.length >= maxCalls) {
414
+ const oldestCall = calls[0];
415
+ const delay = interval - (now - oldestCall);
416
+ await sleep(Math.max(1, delay));
417
+ // Remove potentially stale entries after sleep
418
+ const currentTime = Date.now();
419
+ calls.splice(0, calls.length, ...calls.filter(time => currentTime - time < interval));
420
+ // If still at limit after sleep, wait for another cycle
421
+ if (calls.length >= maxCalls) {
422
+ const nextDelay = interval - (currentTime - calls[0]);
423
+ await sleep(Math.max(1, nextDelay));
424
+ calls.splice(0, calls.length, ...calls.filter(time => Date.now() - time < interval));
425
+ }
637
426
  }
638
- return __awaiter(this, void 0, void 0, function () {
639
- var now, oldestCall, delay, currentTime_1, nextDelay;
640
- return __generator(this, function (_a) {
641
- switch (_a.label) {
642
- case 0:
643
- now = Date.now();
644
- calls.splice.apply(calls, __spreadArray([0, calls.length], __read(calls.filter(function (time) { return now - time < interval; })), false));
645
- if (!(calls.length >= maxCalls)) return [3 /*break*/, 3];
646
- oldestCall = calls[0];
647
- delay = interval - (now - oldestCall);
648
- return [4 /*yield*/, sleep(Math.max(1, delay))];
649
- case 1:
650
- _a.sent();
651
- currentTime_1 = Date.now();
652
- calls.splice.apply(calls, __spreadArray([0, calls.length], __read(calls.filter(function (time) { return currentTime_1 - time < interval; })), false));
653
- if (!(calls.length >= maxCalls)) return [3 /*break*/, 3];
654
- nextDelay = interval - (currentTime_1 - calls[0]);
655
- return [4 /*yield*/, sleep(Math.max(1, nextDelay))];
656
- case 2:
657
- _a.sent();
658
- calls.splice.apply(calls, __spreadArray([0, calls.length], __read(calls.filter(function (time) { return Date.now() - time < interval; })), false));
659
- _a.label = 3;
660
- case 3:
661
- calls.push(Date.now());
662
- return [2 /*return*/, fn.apply(void 0, __spreadArray([], __read(args), false))];
663
- }
664
- });
665
- });
427
+ calls.push(Date.now());
428
+ return fn(...args);
666
429
  };
667
430
  }
668
431
  /**
@@ -699,17 +462,12 @@ export function rateLimit(fn, maxCalls, interval) {
699
462
  * }
700
463
  * ```
701
464
  */
702
- var CircuitBreakerOpenError = /** @class */ (function (_super) {
703
- __extends(CircuitBreakerOpenError, _super);
704
- function CircuitBreakerOpenError(message) {
705
- if (message === void 0) { message = 'Circuit breaker is open'; }
706
- var _this = _super.call(this, message) || this;
707
- _this.name = 'CircuitBreakerOpenError';
708
- return _this;
465
+ export class CircuitBreakerOpenError extends Error {
466
+ constructor(message = 'Circuit breaker is open') {
467
+ super(message);
468
+ this.name = 'CircuitBreakerOpenError';
709
469
  }
710
- return CircuitBreakerOpenError;
711
- }(Error));
712
- export { CircuitBreakerOpenError };
470
+ }
713
471
  /**
714
472
  * Circuit breaker states
715
473
  */
@@ -719,71 +477,54 @@ export var CircuitBreakerState;
719
477
  CircuitBreakerState["OPEN"] = "OPEN";
720
478
  CircuitBreakerState["HALF_OPEN"] = "HALF_OPEN";
721
479
  })(CircuitBreakerState || (CircuitBreakerState = {}));
722
- export function circuitBreaker(fn, options) {
723
- if (options === void 0) { options = {}; }
724
- var _a = options.failureThreshold, failureThreshold = _a === void 0 ? 5 : _a, _b = options.resetTimeout, resetTimeout = _b === void 0 ? 10000 : _b, _c = options.successThreshold, successThreshold = _c === void 0 ? 1 : _c, onOpen = options.onOpen, onClose = options.onClose, onHalfOpen = options.onHalfOpen;
725
- var state = CircuitBreakerState.CLOSED;
726
- var failureCount = 0;
727
- var successCount = 0;
728
- var nextAttempt = Date.now();
729
- return function () {
730
- var args = [];
731
- for (var _i = 0; _i < arguments.length; _i++) {
732
- args[_i] = arguments[_i];
480
+ export function circuitBreaker(fn, options = {}) {
481
+ const { failureThreshold = 5, resetTimeout = 10000, successThreshold = 1, onOpen, onClose, onHalfOpen } = options;
482
+ let state = CircuitBreakerState.CLOSED;
483
+ let failureCount = 0;
484
+ let successCount = 0;
485
+ let nextAttempt = Date.now();
486
+ return async function (...args) {
487
+ if (state === CircuitBreakerState.OPEN) {
488
+ if (Date.now() < nextAttempt) {
489
+ throw new CircuitBreakerOpenError();
490
+ }
491
+ // Move to half-open state
492
+ state = CircuitBreakerState.HALF_OPEN;
493
+ if (onHalfOpen)
494
+ onHalfOpen();
733
495
  }
734
- return __awaiter(this, void 0, void 0, function () {
735
- var result, error_1;
736
- return __generator(this, function (_a) {
737
- switch (_a.label) {
738
- case 0:
739
- if (state === CircuitBreakerState.OPEN) {
740
- if (Date.now() < nextAttempt) {
741
- throw new CircuitBreakerOpenError();
742
- }
743
- // Move to half-open state
744
- state = CircuitBreakerState.HALF_OPEN;
745
- if (onHalfOpen)
746
- onHalfOpen();
747
- }
748
- _a.label = 1;
749
- case 1:
750
- _a.trys.push([1, 3, , 4]);
751
- return [4 /*yield*/, fn.apply(void 0, __spreadArray([], __read(args), false))];
752
- case 2:
753
- result = _a.sent();
754
- // On success in half-open state
755
- if (state === CircuitBreakerState.HALF_OPEN) {
756
- successCount++;
757
- if (successCount >= successThreshold) {
758
- successCount = 0;
759
- failureCount = 0;
760
- state = CircuitBreakerState.CLOSED;
761
- if (onClose)
762
- onClose();
763
- }
764
- }
765
- else {
766
- // Reset failure count on success in closed state
767
- failureCount = 0;
768
- }
769
- return [2 /*return*/, result];
770
- case 3:
771
- error_1 = _a.sent();
772
- // Track failures
773
- failureCount++;
774
- // Check if we need to open the circuit
775
- if ((state === CircuitBreakerState.CLOSED || state === CircuitBreakerState.HALF_OPEN) &&
776
- failureCount >= failureThreshold) {
777
- state = CircuitBreakerState.OPEN;
778
- nextAttempt = Date.now() + resetTimeout;
779
- if (onOpen)
780
- onOpen();
781
- }
782
- throw error_1;
783
- case 4: return [2 /*return*/];
496
+ try {
497
+ const result = await fn(...args);
498
+ // On success in half-open state
499
+ if (state === CircuitBreakerState.HALF_OPEN) {
500
+ successCount++;
501
+ if (successCount >= successThreshold) {
502
+ successCount = 0;
503
+ failureCount = 0;
504
+ state = CircuitBreakerState.CLOSED;
505
+ if (onClose)
506
+ onClose();
784
507
  }
785
- });
786
- });
508
+ }
509
+ else {
510
+ // Reset failure count on success in closed state
511
+ failureCount = 0;
512
+ }
513
+ return result;
514
+ }
515
+ catch (error) {
516
+ // Track failures
517
+ failureCount++;
518
+ // Check if we need to open the circuit
519
+ if ((state === CircuitBreakerState.CLOSED || state === CircuitBreakerState.HALF_OPEN) &&
520
+ failureCount >= failureThreshold) {
521
+ state = CircuitBreakerState.OPEN;
522
+ nextAttempt = Date.now() + resetTimeout;
523
+ if (onOpen)
524
+ onOpen();
525
+ }
526
+ throw error;
527
+ }
787
528
  };
788
529
  }
789
530
  /**
@@ -809,88 +550,70 @@ export function circuitBreaker(fn, options) {
809
550
  * );
810
551
  * ```
811
552
  */
812
- export function runWithConcurrency(tasks_2) {
813
- return __awaiter(this, arguments, void 0, function (tasks, options) {
814
- var _a, concurrency, onProgress, signal, results, totalTasks, completed;
815
- var _this = this;
816
- if (options === void 0) { options = {}; }
817
- return __generator(this, function (_b) {
818
- _a = options.concurrency, concurrency = _a === void 0 ? 3 : _a, onProgress = options.onProgress, signal = options.signal;
819
- results = [];
820
- totalTasks = tasks.length;
821
- completed = 0;
822
- // If no tasks, return empty array
823
- if (totalTasks === 0)
824
- return [2 /*return*/, results];
825
- // Check if execution is already aborted
826
- if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
827
- throw new Error('Aborted');
828
- }
829
- return [2 /*return*/, new Promise(function (resolve, reject) {
830
- var taskIndex = 0;
831
- // Process next task function
832
- var processNext = function () { return __awaiter(_this, void 0, void 0, function () {
833
- var currentTaskIndex, result, error_2;
834
- return __generator(this, function (_a) {
835
- switch (_a.label) {
836
- case 0:
837
- currentTaskIndex = taskIndex++;
838
- // Skip if we've processed all tasks
839
- if (currentTaskIndex >= totalTasks)
840
- return [2 /*return*/];
841
- _a.label = 1;
842
- case 1:
843
- _a.trys.push([1, 3, , 4]);
844
- return [4 /*yield*/, tasks[currentTaskIndex]()];
845
- case 2:
846
- result = _a.sent();
847
- // Check if aborted during task execution
848
- if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
849
- reject(new Error('Aborted'));
850
- return [2 /*return*/];
851
- }
852
- // Store result and update counters
853
- results[currentTaskIndex] = result;
854
- completed++;
855
- // Call progress callback if provided
856
- if (onProgress) {
857
- try {
858
- onProgress(completed, totalTasks);
859
- }
860
- catch (err) {
861
- getLogger().error({ err: err }, 'Error in onProgress callback');
862
- }
863
- }
864
- return [3 /*break*/, 4];
865
- case 3:
866
- error_2 = _a.sent();
867
- reject(error_2);
868
- return [2 /*return*/];
869
- case 4:
870
- // Check if all tasks are completed
871
- if (completed === totalTasks) {
872
- resolve(results);
873
- return [2 /*return*/];
874
- }
875
- // Process next task
876
- processNext();
877
- return [2 /*return*/];
878
- }
879
- });
880
- }); };
881
- // Start initial batch of tasks
882
- var initialBatch = Math.min(concurrency, totalTasks);
883
- for (var i = 0; i < initialBatch; i++) {
884
- processNext();
553
+ export async function runWithConcurrency(tasks, options = {}) {
554
+ const { concurrency = 3, onProgress, signal } = options;
555
+ const results = [];
556
+ const totalTasks = tasks.length;
557
+ let completed = 0;
558
+ // If no tasks, return empty array
559
+ if (totalTasks === 0)
560
+ return results;
561
+ // Check if execution is already aborted
562
+ if (signal?.aborted) {
563
+ throw new Error('Aborted');
564
+ }
565
+ return new Promise((resolve, reject) => {
566
+ let taskIndex = 0;
567
+ // Process next task function
568
+ const processNext = async () => {
569
+ // Get current task index and increment
570
+ const currentTaskIndex = taskIndex++;
571
+ // Skip if we've processed all tasks
572
+ if (currentTaskIndex >= totalTasks)
573
+ return;
574
+ try {
575
+ // Run the task
576
+ const result = await tasks[currentTaskIndex]();
577
+ // Check if aborted during task execution
578
+ if (signal?.aborted) {
579
+ reject(new Error('Aborted'));
580
+ return;
581
+ }
582
+ // Store result and update counters
583
+ results[currentTaskIndex] = result;
584
+ completed++;
585
+ // Call progress callback if provided
586
+ if (onProgress) {
587
+ try {
588
+ onProgress(completed, totalTasks);
885
589
  }
886
- // Set up abort handler
887
- if (signal) {
888
- signal.addEventListener('abort', function () {
889
- reject(new Error('Aborted'));
890
- }, { once: true });
590
+ catch (err) {
591
+ getLogger().error({ err }, 'Error in onProgress callback');
891
592
  }
892
- })];
893
- });
593
+ }
594
+ }
595
+ catch (error) {
596
+ reject(error);
597
+ return;
598
+ }
599
+ // Check if all tasks are completed
600
+ if (completed === totalTasks) {
601
+ resolve(results);
602
+ return;
603
+ }
604
+ // Process next task
605
+ processNext();
606
+ };
607
+ // Start initial batch of tasks
608
+ const initialBatch = Math.min(concurrency, totalTasks);
609
+ for (let i = 0; i < initialBatch; i++) {
610
+ processNext();
611
+ }
612
+ // Set up abort handler
613
+ if (signal) {
614
+ signal.addEventListener('abort', () => {
615
+ reject(new Error('Aborted'));
616
+ }, { once: true });
617
+ }
894
618
  });
895
619
  }
896
- //# sourceMappingURL=async.utils.js.map