@daiso-tech/core 0.33.0 → 0.35.0

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 (365) hide show
  1. package/README.md +66 -45
  2. package/dist/async/_module-exports.d.ts +1 -1
  3. package/dist/async/_module-exports.js +1 -1
  4. package/dist/async/_module-exports.js.map +1 -1
  5. package/dist/async/async.errors.d.ts +27 -19
  6. package/dist/async/async.errors.js +33 -20
  7. package/dist/async/async.errors.js.map +1 -1
  8. package/dist/async/backof-policies/_shared.d.ts +6 -2
  9. package/dist/async/backof-policies/_shared.js +1 -0
  10. package/dist/async/backof-policies/_shared.js.map +1 -1
  11. package/dist/async/backof-policies/constant-backoff-policy/constant-backoff-policy.d.ts +2 -2
  12. package/dist/async/backof-policies/constant-backoff-policy/constant-backoff-policy.js +1 -1
  13. package/dist/async/backof-policies/exponential-backoff-policy/exponential-backoff-policy.d.ts +2 -2
  14. package/dist/async/backof-policies/exponential-backoff-policy/exponential-backoff-policy.js +1 -1
  15. package/dist/async/backof-policies/linear-backoff-policy/linear-backoff-policy.d.ts +2 -2
  16. package/dist/async/backof-policies/linear-backoff-policy/linear-backoff-policy.js +1 -1
  17. package/dist/async/backof-policies/polynomial-backoff-policy/polynomial-backoff-policy.d.ts +2 -2
  18. package/dist/async/backof-policies/polynomial-backoff-policy/polynomial-backoff-policy.js +1 -1
  19. package/dist/async/middlewares/_module.d.ts +8 -0
  20. package/dist/async/middlewares/_module.js +9 -0
  21. package/dist/async/middlewares/_module.js.map +1 -0
  22. package/dist/async/middlewares/_shared.d.ts +10 -0
  23. package/dist/async/middlewares/_shared.js +5 -0
  24. package/dist/async/middlewares/_shared.js.map +1 -0
  25. package/dist/async/middlewares/bulkhead/_module.d.ts +1 -0
  26. package/dist/async/middlewares/bulkhead/_module.js +2 -0
  27. package/dist/async/middlewares/bulkhead/_module.js.map +1 -0
  28. package/dist/async/middlewares/bulkhead/bulkhead.middleware.d.ts +80 -0
  29. package/dist/async/middlewares/bulkhead/bulkhead.middleware.js +46 -0
  30. package/dist/async/middlewares/bulkhead/bulkhead.middleware.js.map +1 -0
  31. package/dist/async/middlewares/dynamic/_module.d.ts +1 -0
  32. package/dist/async/middlewares/dynamic/_module.js +2 -0
  33. package/dist/async/middlewares/dynamic/_module.js.map +1 -0
  34. package/dist/async/middlewares/dynamic/dynamic.middleware.d.ts +34 -0
  35. package/dist/async/middlewares/dynamic/dynamic.middleware.js +36 -0
  36. package/dist/async/middlewares/dynamic/dynamic.middleware.js.map +1 -0
  37. package/dist/async/middlewares/fallback/_module.d.ts +1 -0
  38. package/dist/async/middlewares/fallback/_module.js +2 -0
  39. package/dist/async/middlewares/fallback/_module.js.map +1 -0
  40. package/dist/async/middlewares/fallback/fallback.middleware.d.ts +78 -0
  41. package/dist/async/middlewares/fallback/fallback.middleware.js +52 -0
  42. package/dist/async/middlewares/fallback/fallback.middleware.js.map +1 -0
  43. package/dist/async/middlewares/hedging/_module.d.ts +2 -0
  44. package/dist/async/middlewares/hedging/_module.js +3 -0
  45. package/dist/async/middlewares/hedging/_module.js.map +1 -0
  46. package/dist/async/middlewares/hedging/_shared.d.ts +93 -0
  47. package/dist/async/middlewares/hedging/_shared.js +5 -0
  48. package/dist/async/middlewares/hedging/_shared.js.map +1 -0
  49. package/dist/async/middlewares/hedging/concurrent-hedging/_module.d.ts +1 -0
  50. package/dist/async/middlewares/hedging/concurrent-hedging/_module.js +2 -0
  51. package/dist/async/middlewares/hedging/concurrent-hedging/_module.js.map +1 -0
  52. package/dist/async/middlewares/hedging/concurrent-hedging/concurrent-hedging.middleware.d.ts +51 -0
  53. package/dist/async/middlewares/hedging/concurrent-hedging/concurrent-hedging.middleware.js +138 -0
  54. package/dist/async/middlewares/hedging/concurrent-hedging/concurrent-hedging.middleware.js.map +1 -0
  55. package/dist/async/middlewares/hedging/sequential-hedging/_module.d.ts +1 -0
  56. package/dist/async/middlewares/hedging/sequential-hedging/_module.js +2 -0
  57. package/dist/async/middlewares/hedging/sequential-hedging/_module.js.map +1 -0
  58. package/dist/async/middlewares/hedging/sequential-hedging/sequential-hedging.middleware.d.ts +51 -0
  59. package/dist/async/middlewares/hedging/sequential-hedging/sequential-hedging.middleware.js +104 -0
  60. package/dist/async/middlewares/hedging/sequential-hedging/sequential-hedging.middleware.js.map +1 -0
  61. package/dist/async/middlewares/observe/_module.d.ts +1 -0
  62. package/dist/async/middlewares/observe/_module.js +2 -0
  63. package/dist/async/middlewares/observe/_module.js.map +1 -0
  64. package/dist/async/middlewares/observe/observe.middleware.d.ts +130 -0
  65. package/dist/async/middlewares/observe/observe.middleware.js +80 -0
  66. package/dist/async/middlewares/observe/observe.middleware.js.map +1 -0
  67. package/dist/async/middlewares/retry/_module.d.ts +1 -0
  68. package/dist/async/middlewares/retry/_module.js +2 -0
  69. package/dist/async/middlewares/retry/_module.js.map +1 -0
  70. package/dist/async/middlewares/retry/retry.middleware.d.ts +117 -0
  71. package/dist/async/middlewares/retry/retry.middleware.js +82 -0
  72. package/dist/async/middlewares/retry/retry.middleware.js.map +1 -0
  73. package/dist/async/middlewares/timeout/_module.d.ts +1 -0
  74. package/dist/async/middlewares/timeout/_module.js +2 -0
  75. package/dist/async/middlewares/timeout/_module.js.map +1 -0
  76. package/dist/async/middlewares/timeout/timeout.middleware.d.ts +83 -0
  77. package/dist/async/middlewares/timeout/timeout.middleware.js +60 -0
  78. package/dist/async/middlewares/timeout/timeout.middleware.js.map +1 -0
  79. package/dist/async/utilities/_module.d.ts +3 -4
  80. package/dist/async/utilities/_module.js +3 -4
  81. package/dist/async/utilities/_module.js.map +1 -1
  82. package/dist/async/utilities/abort-and-fail/_module.d.ts +1 -0
  83. package/dist/async/utilities/abort-and-fail/_module.js +2 -0
  84. package/dist/async/utilities/abort-and-fail/_module.js.map +1 -0
  85. package/dist/async/utilities/abort-and-fail/abort-and-fail.d.ts +7 -0
  86. package/dist/async/utilities/{abort → abort-and-fail}/abort-and-fail.js +6 -6
  87. package/dist/async/utilities/abort-and-fail/abort-and-fail.js.map +1 -0
  88. package/dist/async/utilities/lazy-promise/lazy-promise.d.ts +37 -194
  89. package/dist/async/utilities/lazy-promise/lazy-promise.js +62 -359
  90. package/dist/async/utilities/lazy-promise/lazy-promise.js.map +1 -1
  91. package/dist/async/utilities/promise-queue/_module.d.ts +1 -0
  92. package/dist/async/utilities/promise-queue/_module.js +2 -0
  93. package/dist/async/utilities/promise-queue/_module.js.map +1 -0
  94. package/dist/async/utilities/promise-queue/promise-queue.d.ts +32 -0
  95. package/dist/async/utilities/promise-queue/promise-queue.js +107 -0
  96. package/dist/async/utilities/promise-queue/promise-queue.js.map +1 -0
  97. package/dist/async/utilities/timeout-and-fail/_module.d.ts +1 -0
  98. package/dist/async/utilities/timeout-and-fail/_module.js +2 -0
  99. package/dist/async/utilities/timeout-and-fail/_module.js.map +1 -0
  100. package/dist/async/utilities/timeout-and-fail/timeout-and-fail.d.ts +7 -0
  101. package/dist/async/utilities/timeout-and-fail/timeout-and-fail.js +19 -0
  102. package/dist/async/utilities/timeout-and-fail/timeout-and-fail.js.map +1 -0
  103. package/dist/cache/contracts/cache-adapter.contract.d.ts +14 -14
  104. package/dist/cache/contracts/cache-factory.contract.d.ts +3 -3
  105. package/dist/cache/contracts/cache.contract.d.ts +73 -73
  106. package/dist/cache/contracts/cache.errors.d.ts +7 -7
  107. package/dist/cache/contracts/cache.errors.js +7 -7
  108. package/dist/cache/contracts/cache.events.d.ts +54 -58
  109. package/dist/cache/contracts/cache.events.js +6 -104
  110. package/dist/cache/contracts/cache.events.js.map +1 -1
  111. package/dist/cache/contracts/database-cache-adapter.contract.d.ts +16 -16
  112. package/dist/cache/implementations/adapters/libsql-cache-adapter/libsql-cache-adapter.d.ts +3 -3
  113. package/dist/cache/implementations/adapters/libsql-cache-adapter/libsql-cache-adapter.js +2 -2
  114. package/dist/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.d.ts +3 -9
  115. package/dist/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.js +3 -9
  116. package/dist/cache/implementations/adapters/memory-cache-adapter/memory-cache-adapter.js.map +1 -1
  117. package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.d.ts +4 -4
  118. package/dist/cache/implementations/adapters/mongodb-cache-adapter/mongodb-cache-adapter.js +3 -3
  119. package/dist/cache/implementations/adapters/no-op-cache-adapter/no-op-cache-adapter.d.ts +2 -2
  120. package/dist/cache/implementations/adapters/no-op-cache-adapter/no-op-cache-adapter.js +2 -2
  121. package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.d.ts +3 -3
  122. package/dist/cache/implementations/adapters/redis-cache-adapter/redis-cache-adapter.js +2 -2
  123. package/dist/cache/implementations/adapters/sqlite-cache-adapter/sqlite-cache-adapter.d.ts +3 -3
  124. package/dist/cache/implementations/adapters/sqlite-cache-adapter/sqlite-cache-adapter.js +2 -2
  125. package/dist/cache/implementations/derivables/cache/cache.d.ts +26 -27
  126. package/dist/cache/implementations/derivables/cache/cache.js +102 -91
  127. package/dist/cache/implementations/derivables/cache/cache.js.map +1 -1
  128. package/dist/cache/implementations/derivables/cache-factory/cache-factory.d.ts +5 -4
  129. package/dist/cache/implementations/derivables/cache-factory/cache-factory.js +2 -1
  130. package/dist/cache/implementations/derivables/cache-factory/cache-factory.js.map +1 -1
  131. package/dist/cache/implementations/test-utilities/cache-adapter.test-suite.d.ts +3 -3
  132. package/dist/cache/implementations/test-utilities/cache-adapter.test-suite.js +2 -2
  133. package/dist/cache/implementations/test-utilities/cache.test-suite.d.ts +3 -3
  134. package/dist/cache/implementations/test-utilities/cache.test-suite.js +140 -149
  135. package/dist/cache/implementations/test-utilities/cache.test-suite.js.map +1 -1
  136. package/dist/cache/implementations/test-utilities/database-cache-dapter.test-suite.d.ts +3 -3
  137. package/dist/cache/implementations/test-utilities/database-cache-dapter.test-suite.js +2 -2
  138. package/dist/collection/contracts/_shared/compartor.type.d.ts +1 -1
  139. package/dist/collection/contracts/_shared/cross-join-result.type.d.ts +1 -1
  140. package/dist/collection/contracts/_shared/ensure-map.type.d.ts +1 -1
  141. package/dist/collection/contracts/_shared/ensure-record.type.d.ts +1 -1
  142. package/dist/collection/contracts/_shared/foreach.type.d.ts +2 -2
  143. package/dist/collection/contracts/_shared/map.type.d.ts +2 -2
  144. package/dist/collection/contracts/_shared/modifier.type.d.ts +2 -2
  145. package/dist/collection/contracts/_shared/predicate.type.d.ts +7 -7
  146. package/dist/collection/contracts/_shared/reduce.type.d.ts +2 -2
  147. package/dist/collection/contracts/_shared/tap.type.d.ts +2 -2
  148. package/dist/collection/contracts/_shared/transform.type.d.ts +2 -2
  149. package/dist/collection/contracts/async-collection.contract.d.ts +109 -198
  150. package/dist/collection/contracts/collection.contract.d.ts +103 -103
  151. package/dist/collection/contracts/collection.errors.d.ts +11 -11
  152. package/dist/collection/contracts/collection.errors.js +11 -11
  153. package/dist/collection/implementations/_shared.d.ts +8 -8
  154. package/dist/collection/implementations/_shared.js +8 -8
  155. package/dist/collection/implementations/async-iterable-collection/_shared/_module.d.ts +0 -4
  156. package/dist/collection/implementations/async-iterable-collection/_shared/_module.js +0 -4
  157. package/dist/collection/implementations/async-iterable-collection/_shared/_module.js.map +1 -1
  158. package/dist/collection/implementations/async-iterable-collection/_shared/async-cross-join-iterable.js +21 -19
  159. package/dist/collection/implementations/async-iterable-collection/_shared/async-cross-join-iterable.js.map +1 -1
  160. package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.d.ts +15 -19
  161. package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.js +15 -30
  162. package/dist/collection/implementations/async-iterable-collection/async-iterable-collection.js.map +1 -1
  163. package/dist/collection/implementations/iterable-collection/_shared/cross-join-iterable.d.ts +3 -3
  164. package/dist/collection/implementations/iterable-collection/_shared/cross-join-iterable.js +18 -20
  165. package/dist/collection/implementations/iterable-collection/_shared/cross-join-iterable.js.map +1 -1
  166. package/dist/collection/implementations/iterable-collection/iterable-collection.d.ts +11 -12
  167. package/dist/collection/implementations/iterable-collection/iterable-collection.js +11 -12
  168. package/dist/collection/implementations/iterable-collection/iterable-collection.js.map +1 -1
  169. package/dist/collection/implementations/list-collection/list-collection.d.ts +11 -11
  170. package/dist/collection/implementations/list-collection/list-collection.js +24 -30
  171. package/dist/collection/implementations/list-collection/list-collection.js.map +1 -1
  172. package/dist/event-bus/contracts/_module-exports.d.ts +0 -1
  173. package/dist/event-bus/contracts/_module-exports.js +0 -1
  174. package/dist/event-bus/contracts/_module-exports.js.map +1 -1
  175. package/dist/event-bus/contracts/event-bus-adapter.contract.d.ts +13 -8
  176. package/dist/event-bus/contracts/event-bus-factory.contract.d.ts +6 -7
  177. package/dist/event-bus/contracts/event-bus-factory.contract.js.map +1 -1
  178. package/dist/event-bus/contracts/event-bus.contract.d.ts +30 -41
  179. package/dist/event-bus/contracts/event-bus.errors.d.ts +8 -8
  180. package/dist/event-bus/contracts/event-bus.errors.js +8 -8
  181. package/dist/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.d.ts +3 -3
  182. package/dist/event-bus/implementations/adapters/memory-event-bus-adapter/memory-event-bus-adapter.js +3 -3
  183. package/dist/event-bus/implementations/adapters/no-op-event-bus-adapter/no-op-event-bus-adapter.d.ts +2 -2
  184. package/dist/event-bus/implementations/adapters/no-op-event-bus-adapter/no-op-event-bus-adapter.js +2 -2
  185. package/dist/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.d.ts +3 -3
  186. package/dist/event-bus/implementations/adapters/redis-pub-sub-event-bus-adapter/redis-pub-sub-event-bus-adapter.js +2 -2
  187. package/dist/event-bus/implementations/derivables/event-bus/event-bus.d.ts +15 -15
  188. package/dist/event-bus/implementations/derivables/event-bus/event-bus.js +32 -32
  189. package/dist/event-bus/implementations/derivables/event-bus/event-bus.js.map +1 -1
  190. package/dist/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.d.ts +17 -10
  191. package/dist/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.js +13 -6
  192. package/dist/event-bus/implementations/derivables/event-bus-factory/event-bus-factory.js.map +1 -1
  193. package/dist/event-bus/implementations/test-utilities/event-bus-adapter.test-suite.d.ts +3 -5
  194. package/dist/event-bus/implementations/test-utilities/event-bus-adapter.test-suite.js +15 -22
  195. package/dist/event-bus/implementations/test-utilities/event-bus-adapter.test-suite.js.map +1 -1
  196. package/dist/event-bus/implementations/test-utilities/event-bus.test-suite.d.ts +3 -5
  197. package/dist/event-bus/implementations/test-utilities/event-bus.test-suite.js +189 -209
  198. package/dist/event-bus/implementations/test-utilities/event-bus.test-suite.js.map +1 -1
  199. package/dist/lock/contracts/database-lock-adapter.contract.d.ts +9 -9
  200. package/dist/lock/contracts/lock-adapter.contract.d.ts +7 -7
  201. package/dist/lock/contracts/lock-provider-factory.contract.d.ts +4 -4
  202. package/dist/lock/contracts/lock-provider.contract.d.ts +14 -14
  203. package/dist/lock/contracts/lock.contract.d.ts +22 -22
  204. package/dist/lock/contracts/lock.errors.d.ts +10 -10
  205. package/dist/lock/contracts/lock.errors.js +10 -10
  206. package/dist/lock/contracts/lock.events.d.ts +45 -54
  207. package/dist/lock/contracts/lock.events.js +9 -91
  208. package/dist/lock/contracts/lock.events.js.map +1 -1
  209. package/dist/lock/implementations/adapters/libsql-lock-adapter/libsql-lock-adapter.d.ts +5 -5
  210. package/dist/lock/implementations/adapters/libsql-lock-adapter/libsql-lock-adapter.js +4 -4
  211. package/dist/lock/implementations/adapters/memory-lock-adapter/memory-lock-adapter.d.ts +3 -3
  212. package/dist/lock/implementations/adapters/memory-lock-adapter/memory-lock-adapter.js +3 -3
  213. package/dist/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.d.ts +5 -5
  214. package/dist/lock/implementations/adapters/mongodb-lock-adapter/mongodb-lock-adapter.js +4 -4
  215. package/dist/lock/implementations/adapters/no-op-lock-adapter/no-op-lock-adapter.d.ts +2 -2
  216. package/dist/lock/implementations/adapters/no-op-lock-adapter/no-op-lock-adapter.js +2 -2
  217. package/dist/lock/implementations/adapters/redis-lock-adapter/redis-lock-adapter.d.ts +3 -3
  218. package/dist/lock/implementations/adapters/redis-lock-adapter/redis-lock-adapter.js +3 -3
  219. package/dist/lock/implementations/adapters/sqlite-lock-adapter/sqlite-lock-adapter.d.ts +5 -5
  220. package/dist/lock/implementations/adapters/sqlite-lock-adapter/sqlite-lock-adapter.js +4 -4
  221. package/dist/lock/implementations/derivables/lock-provider/lock-provider.d.ts +33 -33
  222. package/dist/lock/implementations/derivables/lock-provider/lock-provider.js +30 -30
  223. package/dist/lock/implementations/derivables/lock-provider/lock-provider.js.map +1 -1
  224. package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.d.ts +2 -2
  225. package/dist/lock/implementations/derivables/lock-provider/lock-serde-transformer.js.map +1 -1
  226. package/dist/lock/implementations/derivables/lock-provider/lock.d.ts +3 -3
  227. package/dist/lock/implementations/derivables/lock-provider/lock.js +77 -58
  228. package/dist/lock/implementations/derivables/lock-provider/lock.js.map +1 -1
  229. package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.d.ts +5 -4
  230. package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js +2 -1
  231. package/dist/lock/implementations/derivables/lock-provider-factory/lock-provider-factory.js.map +1 -1
  232. package/dist/lock/implementations/test-utilities/database-lock-adapter.test-suite.d.ts +3 -3
  233. package/dist/lock/implementations/test-utilities/database-lock-adapter.test-suite.js +2 -2
  234. package/dist/lock/implementations/test-utilities/lock-adapter.test-suite.d.ts +3 -3
  235. package/dist/lock/implementations/test-utilities/lock-adapter.test-suite.js +2 -2
  236. package/dist/lock/implementations/test-utilities/lock-provider.test-suite.d.ts +3 -3
  237. package/dist/lock/implementations/test-utilities/lock-provider.test-suite.js +214 -214
  238. package/dist/lock/implementations/test-utilities/lock-provider.test-suite.js.map +1 -1
  239. package/dist/serde/contracts/deserializer.contract.d.ts +2 -2
  240. package/dist/serde/contracts/flexible-serde-adapter.contract.d.ts +4 -4
  241. package/dist/serde/contracts/flexible-serde.contract.d.ts +8 -19
  242. package/dist/serde/contracts/serde.contract.d.ts +2 -2
  243. package/dist/serde/contracts/serde.errors.d.ts +4 -4
  244. package/dist/serde/contracts/serde.errors.js +4 -4
  245. package/dist/serde/contracts/serializable.contract.d.ts +2 -2
  246. package/dist/serde/contracts/serializer.contract.d.ts +2 -2
  247. package/dist/serde/implementations/adapters/no-op-serde-adapter/no-op-serde-adapter.d.ts +2 -2
  248. package/dist/serde/implementations/adapters/no-op-serde-adapter/no-op-serde-adapter.js +2 -2
  249. package/dist/serde/implementations/adapters/super-json-serde-adapter/super-json-serde-adapter.d.ts +1 -1
  250. package/dist/serde/implementations/adapters/super-json-serde-adapter/super-json-serde-adapter.js +1 -1
  251. package/dist/serde/implementations/derivables/serde.d.ts +4 -35
  252. package/dist/serde/implementations/derivables/serde.js +2 -47
  253. package/dist/serde/implementations/derivables/serde.js.map +1 -1
  254. package/dist/serde/implementations/test-utilities/flexible-serde-adapter.test-suite.d.ts +3 -3
  255. package/dist/serde/implementations/test-utilities/flexible-serde-adapter.test-suite.js +2 -2
  256. package/dist/serde/implementations/test-utilities/flexible-serde.test-suite.d.ts +3 -3
  257. package/dist/serde/implementations/test-utilities/flexible-serde.test-suite.js +2 -2
  258. package/dist/utilities/classes/_module.d.ts +1 -1
  259. package/dist/utilities/classes/_module.js +1 -1
  260. package/dist/utilities/classes/_module.js.map +1 -1
  261. package/dist/utilities/classes/hooks/_module.d.ts +3 -0
  262. package/dist/utilities/classes/hooks/_module.js +4 -0
  263. package/dist/utilities/classes/hooks/_module.js.map +1 -0
  264. package/dist/utilities/classes/hooks/async-hooks.d.ts +209 -0
  265. package/dist/utilities/classes/hooks/async-hooks.js +145 -0
  266. package/dist/utilities/classes/hooks/async-hooks.js.map +1 -0
  267. package/dist/utilities/classes/hooks/hooks.d.ts +139 -0
  268. package/dist/utilities/classes/hooks/hooks.js +116 -0
  269. package/dist/utilities/classes/hooks/hooks.js.map +1 -0
  270. package/dist/utilities/classes/hooks/types.d.ts +9 -0
  271. package/dist/utilities/classes/hooks/types.js +5 -0
  272. package/dist/utilities/classes/hooks/types.js.map +1 -0
  273. package/dist/utilities/classes/key-prefixer/key-prefixer.d.ts +3 -3
  274. package/dist/utilities/classes/key-prefixer/key-prefixer.js +4 -4
  275. package/dist/utilities/classes/key-prefixer/key-prefixer.js.map +1 -1
  276. package/dist/utilities/classes/time-span/time-span.d.ts +5 -5
  277. package/dist/utilities/classes/time-span/time-span.js +5 -5
  278. package/dist/utilities/contracts/_module.d.ts +0 -1
  279. package/dist/utilities/contracts/_module.js +0 -1
  280. package/dist/utilities/contracts/_module.js.map +1 -1
  281. package/dist/utilities/contracts/deinitizable.contract.d.ts +1 -1
  282. package/dist/utilities/contracts/initizable.contract.d.ts +1 -1
  283. package/dist/utilities/contracts/prunable.contract.d.ts +1 -1
  284. package/dist/utilities/contracts/serialized-error.contract.d.ts +1 -1
  285. package/dist/utilities/contracts/sqlite-database.contract.d.ts +2 -2
  286. package/dist/utilities/errors.d.ts +5 -5
  287. package/dist/utilities/errors.js +5 -5
  288. package/dist/utilities/functions/factory.js +3 -3
  289. package/dist/utilities/functions/factory.js.map +1 -1
  290. package/dist/utilities/functions/invokable.d.ts +9 -5
  291. package/dist/utilities/functions/invokable.js +12 -2
  292. package/dist/utilities/functions/invokable.js.map +1 -1
  293. package/dist/utilities/functions/lazy.d.ts +5 -0
  294. package/dist/utilities/functions/lazy.js +12 -3
  295. package/dist/utilities/functions/lazy.js.map +1 -1
  296. package/dist/utilities/types/async-iterable-value.type.d.ts +1 -1
  297. package/dist/utilities/types/at-least-one.type.d.ts +1 -1
  298. package/dist/utilities/types/factory.type.d.ts +8 -8
  299. package/dist/utilities/types/invokable.type.d.ts +3 -3
  300. package/dist/utilities/types/items.type.d.ts +1 -1
  301. package/dist/utilities/types/lazy.type.d.ts +5 -5
  302. package/dist/utilities/types/none-func.type.d.ts +1 -1
  303. package/dist/utilities/types/one-or-more.type.d.ts +1 -1
  304. package/dist/utilities/types/promiseable.type.d.ts +1 -1
  305. package/dist/utilities/types/result.type.d.ts +1 -1
  306. package/package.json +22 -2
  307. package/dist/async/async.events.d.ts +0 -105
  308. package/dist/async/async.events.js +0 -82
  309. package/dist/async/async.events.js.map +0 -1
  310. package/dist/async/utilities/abort/_module.d.ts +0 -2
  311. package/dist/async/utilities/abort/_module.js +0 -3
  312. package/dist/async/utilities/abort/_module.js.map +0 -1
  313. package/dist/async/utilities/abort/abort-and-fail.d.ts +0 -4
  314. package/dist/async/utilities/abort/abort-and-fail.js.map +0 -1
  315. package/dist/async/utilities/abort/abort.d.ts +0 -9
  316. package/dist/async/utilities/abort/abort.js +0 -18
  317. package/dist/async/utilities/abort/abort.js.map +0 -1
  318. package/dist/async/utilities/delay/_module.d.ts +0 -1
  319. package/dist/async/utilities/delay/_module.js +0 -2
  320. package/dist/async/utilities/delay/_module.js.map +0 -1
  321. package/dist/async/utilities/delay/delay.d.ts +0 -10
  322. package/dist/async/utilities/delay/delay.js +0 -34
  323. package/dist/async/utilities/delay/delay.js.map +0 -1
  324. package/dist/async/utilities/retry/_module.d.ts +0 -2
  325. package/dist/async/utilities/retry/_module.js +0 -3
  326. package/dist/async/utilities/retry/_module.js.map +0 -1
  327. package/dist/async/utilities/retry/retry-or-fail.d.ts +0 -29
  328. package/dist/async/utilities/retry/retry-or-fail.js +0 -39
  329. package/dist/async/utilities/retry/retry-or-fail.js.map +0 -1
  330. package/dist/async/utilities/retry/retry.d.ts +0 -10
  331. package/dist/async/utilities/retry/retry.js +0 -21
  332. package/dist/async/utilities/retry/retry.js.map +0 -1
  333. package/dist/async/utilities/timeout/_module.d.ts +0 -2
  334. package/dist/async/utilities/timeout/_module.js +0 -3
  335. package/dist/async/utilities/timeout/_module.js.map +0 -1
  336. package/dist/async/utilities/timeout/timeout-and-fail.d.ts +0 -5
  337. package/dist/async/utilities/timeout/timeout-and-fail.js +0 -28
  338. package/dist/async/utilities/timeout/timeout-and-fail.js.map +0 -1
  339. package/dist/async/utilities/timeout/timeout.d.ts +0 -10
  340. package/dist/async/utilities/timeout/timeout.js +0 -21
  341. package/dist/async/utilities/timeout/timeout.js.map +0 -1
  342. package/dist/collection/implementations/async-iterable-collection/_shared/async-delay-iterable.d.ts +0 -13
  343. package/dist/collection/implementations/async-iterable-collection/_shared/async-delay-iterable.js +0 -30
  344. package/dist/collection/implementations/async-iterable-collection/_shared/async-delay-iterable.js.map +0 -1
  345. package/dist/collection/implementations/async-iterable-collection/_shared/async-retry-iterable.d.ts +0 -13
  346. package/dist/collection/implementations/async-iterable-collection/_shared/async-retry-iterable.js +0 -36
  347. package/dist/collection/implementations/async-iterable-collection/_shared/async-retry-iterable.js.map +0 -1
  348. package/dist/collection/implementations/async-iterable-collection/_shared/async-take-until-abort-iterable.d.ts +0 -9
  349. package/dist/collection/implementations/async-iterable-collection/_shared/async-take-until-abort-iterable.js +0 -39
  350. package/dist/collection/implementations/async-iterable-collection/_shared/async-take-until-abort-iterable.js.map +0 -1
  351. package/dist/collection/implementations/async-iterable-collection/_shared/async-take-until-timeout-iterable.d.ts +0 -13
  352. package/dist/collection/implementations/async-iterable-collection/_shared/async-take-until-timeout-iterable.js +0 -52
  353. package/dist/collection/implementations/async-iterable-collection/_shared/async-take-until-timeout-iterable.js.map +0 -1
  354. package/dist/event-bus/contracts/_shared.d.ts +0 -12
  355. package/dist/event-bus/contracts/_shared.js +0 -15
  356. package/dist/event-bus/contracts/_shared.js.map +0 -1
  357. package/dist/utilities/classes/sync-event-bus/_module.d.ts +0 -1
  358. package/dist/utilities/classes/sync-event-bus/_module.js +0 -2
  359. package/dist/utilities/classes/sync-event-bus/_module.js.map +0 -1
  360. package/dist/utilities/classes/sync-event-bus/sync-event-bus.d.ts +0 -16
  361. package/dist/utilities/classes/sync-event-bus/sync-event-bus.js +0 -53
  362. package/dist/utilities/classes/sync-event-bus/sync-event-bus.js.map +0 -1
  363. package/dist/utilities/contracts/sync-event-bus-listenable.d.ts +0 -13
  364. package/dist/utilities/contracts/sync-event-bus-listenable.js +0 -5
  365. package/dist/utilities/contracts/sync-event-bus-listenable.js.map +0 -1
@@ -0,0 +1,51 @@
1
+ /**
2
+ * @module Async
3
+ */
4
+ import { type AsyncMiddlewareFn, type HookContext } from "../../../../utilities/_module-exports.js";
5
+ import type { HedgingSettings } from "../../../../async/middlewares/hedging/_shared.js";
6
+ /**
7
+ * The `sequentialHedging` middleware executes the primary function and all fallback functions sequentially.
8
+ * It returns the result of the first successful function and automatically cancels all remaining functions.
9
+ * If all function fail than error is thrown.
10
+ *
11
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
12
+ * @group Middleware
13
+ * @throws {HedgingAsyncError} {@link HedgingAsyncError}
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * import { sequentialHedging } from "@daiso-tech/core/async";
18
+ * import { AsyncHooks } from "@daiso-tech/core/utilities";
19
+ *
20
+ * async function fn1(signal?: AbortSignal): Promise<unknown> {
21
+ * const response = await fetch("ENDPOINT-1", { signal });
22
+ * return await response.json();
23
+ * }
24
+ * async function fn2(signal?: AbortSignal): Promise<unknown> {
25
+ * const response = await fetch("ENDPOINT-2", { signal });
26
+ * return await response.json();
27
+ * }
28
+ * async function fn3(signal?: AbortSignal): Promise<unknown> {
29
+ * const response = await fetch("ENDPOINT-3", { signal });
30
+ * return await response.json();
31
+ * }
32
+ * const fetchData = new AsyncHooks(fn1, [
33
+ * sequentialHedging({
34
+ * fallbacks: [
35
+ * fn2,
36
+ * fn3
37
+ * ]
38
+ * })
39
+ * ], {
40
+ * signalBinder: {
41
+ * getSignal: (args) => args[0],
42
+ * forwardSignal: (args, signal) => {
43
+ * args[0] = signal;
44
+ * }
45
+ * }
46
+ * });
47
+ *
48
+ * console.log(await fetchData.invoke());
49
+ * ```
50
+ */
51
+ export declare function sequentialHedging<TParameters extends unknown[], TReturn, TContext extends HookContext>(settings: NoInfer<HedgingSettings<TParameters, TReturn, TContext>>): AsyncMiddlewareFn<TParameters, TReturn, TContext>;
@@ -0,0 +1,104 @@
1
+ /**
2
+ * @module Async
3
+ */
4
+ import { callInvokable, isInvokable, resolveOneOrMore, TimeSpan, } from "../../../../utilities/_module-exports.js";
5
+ import { HedgingAsyncError } from "../../../../async/async.errors.js";
6
+ import { timeoutAndFail } from "../../../../async/utilities/_module.js";
7
+ /**
8
+ * The `sequentialHedging` middleware executes the primary function and all fallback functions sequentially.
9
+ * It returns the result of the first successful function and automatically cancels all remaining functions.
10
+ * If all function fail than error is thrown.
11
+ *
12
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
13
+ * @group Middleware
14
+ * @throws {HedgingAsyncError} {@link HedgingAsyncError}
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { sequentialHedging } from "@daiso-tech/core/async";
19
+ * import { AsyncHooks } from "@daiso-tech/core/utilities";
20
+ *
21
+ * async function fn1(signal?: AbortSignal): Promise<unknown> {
22
+ * const response = await fetch("ENDPOINT-1", { signal });
23
+ * return await response.json();
24
+ * }
25
+ * async function fn2(signal?: AbortSignal): Promise<unknown> {
26
+ * const response = await fetch("ENDPOINT-2", { signal });
27
+ * return await response.json();
28
+ * }
29
+ * async function fn3(signal?: AbortSignal): Promise<unknown> {
30
+ * const response = await fetch("ENDPOINT-3", { signal });
31
+ * return await response.json();
32
+ * }
33
+ * const fetchData = new AsyncHooks(fn1, [
34
+ * sequentialHedging({
35
+ * fallbacks: [
36
+ * fn2,
37
+ * fn3
38
+ * ]
39
+ * })
40
+ * ], {
41
+ * signalBinder: {
42
+ * getSignal: (args) => args[0],
43
+ * forwardSignal: (args, signal) => {
44
+ * args[0] = signal;
45
+ * }
46
+ * }
47
+ * });
48
+ *
49
+ * console.log(await fetchData.invoke());
50
+ * ```
51
+ */
52
+ export function sequentialHedging(settings) {
53
+ const { waitTime = TimeSpan.fromSeconds(2), fallbacks, onHedgeAttempt = () => { }, onHedgeError = () => { }, } = settings;
54
+ const resolvedFallbacks = resolveOneOrMore(fallbacks).map((fallback, index) => {
55
+ if (isInvokable(fallback)) {
56
+ return {
57
+ name: `fallback-${String(index + 1)}`,
58
+ func: fallback,
59
+ };
60
+ }
61
+ return fallback;
62
+ });
63
+ return async (args, next, { context, signal, abort }) => {
64
+ const errors = [];
65
+ const funcs = [
66
+ {
67
+ name: "__initial",
68
+ func: next,
69
+ },
70
+ ...resolvedFallbacks,
71
+ ];
72
+ for (const { name, func } of funcs) {
73
+ try {
74
+ callInvokable(onHedgeAttempt, {
75
+ args,
76
+ context,
77
+ name,
78
+ });
79
+ return await timeoutAndFail((async () => callInvokable(func, ...args))(), waitTime, (error) => {
80
+ abort(error);
81
+ }, signal);
82
+ }
83
+ catch (error) {
84
+ if (signal.aborted) {
85
+ break;
86
+ }
87
+ callInvokable(onHedgeError, {
88
+ args,
89
+ context,
90
+ error,
91
+ name,
92
+ });
93
+ errors.push(error);
94
+ }
95
+ }
96
+ // If all promiseResults are rejected we will throw an error
97
+ const funcNames = funcs
98
+ .slice(1)
99
+ .map(({ name }) => `"${name}"`)
100
+ .join(", ");
101
+ throw new HedgingAsyncError(`The original function and fallback functions failed: ${funcNames}`, errors);
102
+ };
103
+ }
104
+ //# sourceMappingURL=sequential-hedging.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequential-hedging.middleware.js","sourceRoot":"","sources":["../../../../../src/async/middlewares/hedging/sequential-hedging/sequential-hedging.middleware.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,QAAQ,GAGX,MAAM,gCAAgC,CAAC;AAKxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,UAAU,iBAAiB,CAK7B,QAAkE;IAElE,MAAM,EACF,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAClC,SAAS,EACT,cAAc,GAAG,GAAG,EAAE,GAAE,CAAC,EACzB,YAAY,GAAG,GAAG,EAAE,GAAE,CAAC,GAC1B,GAAG,QAAQ,CAAC;IAEb,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,GAAG,CAEvD,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;QAClB,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,OAAO;gBACH,IAAI,EAAE,YAAY,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;gBACrC,IAAI,EAAE,QAAQ;aACjB,CAAC;QACN,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QACpD,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG;YACV;gBACI,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,IAAI;aACb;YACD,GAAG,iBAAiB;SACvB,CAAC;QACF,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC;gBACD,aAAa,CAAC,cAAc,EAAE;oBAC1B,IAAI;oBACJ,OAAO;oBACP,IAAI;iBACP,CAAC,CAAC;gBACH,OAAO,MAAM,cAAc,CACvB,CAAC,KAAK,IAAI,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,EAC5C,QAAQ,EACR,CAAC,KAAc,EAAE,EAAE;oBACf,KAAK,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC,EACD,MAAM,CACT,CAAC;YACN,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACtB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjB,MAAM;gBACV,CAAC;gBACD,aAAa,CAAC,YAAY,EAAE;oBACxB,IAAI;oBACJ,OAAO;oBACP,KAAK;oBACL,IAAI;iBACP,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACL,CAAC;QAED,4DAA4D;QAC5D,MAAM,SAAS,GAAG,KAAK;aAClB,KAAK,CAAC,CAAC,CAAC;aACR,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG,CAAC;aAC9B,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM,IAAI,iBAAiB,CACvB,wDAAwD,SAAS,EAAE,EACnE,MAAM,CACT,CAAC;IACN,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1 @@
1
+ export * from "../../../async/middlewares/observe/observe.middleware.js";
@@ -0,0 +1,2 @@
1
+ export * from "../../../async/middlewares/observe/observe.middleware.js";
2
+ //# sourceMappingURL=_module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_module.js","sourceRoot":"","sources":["../../../../src/async/middlewares/observe/_module.ts"],"names":[],"mappings":"AAAA,cAAc,mDAAmD,CAAC"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * @module Async
3
+ */
4
+ import { TimeSpan, type HookContext } from "../../../utilities/_module-exports.js";
5
+ import { type AsyncMiddlewareFn, type Invokable } from "../../../utilities/_module-exports.js";
6
+ /**
7
+ *
8
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
9
+ * @group Middleware
10
+ */
11
+ export type OnObserveStartData<TParameters extends unknown[] = unknown[], TContext extends HookContext = HookContext> = {
12
+ args: TParameters;
13
+ context: TContext;
14
+ };
15
+ /**
16
+ *
17
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
18
+ * @group Middleware
19
+ */
20
+ export type OnObserveStart<TParameters extends unknown[] = unknown[], TContext extends HookContext = HookContext> = Invokable<[data: OnObserveStartData<TParameters, TContext>]>;
21
+ /**
22
+ *
23
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
24
+ * @group Middleware
25
+ */
26
+ export type OnObserveSuccessData<TParameters extends unknown[] = unknown[], TReturn = unknown, TContext extends HookContext = HookContext> = {
27
+ returnValue: TReturn;
28
+ args: TParameters;
29
+ context: TContext;
30
+ };
31
+ /**
32
+ *
33
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
34
+ * @group Middleware
35
+ */
36
+ export type OnObserveSuccess<TParameters extends unknown[] = unknown[], TReturn = unknown, TContext extends HookContext = HookContext> = Invokable<[data: OnObserveSuccessData<TParameters, TReturn, TContext>]>;
37
+ /**
38
+ *
39
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
40
+ * @group Middleware
41
+ */
42
+ export type OnObserveErrorData<TParameters extends unknown[] = unknown[], TContext extends HookContext = HookContext> = {
43
+ error: unknown;
44
+ args: TParameters;
45
+ context: TContext;
46
+ };
47
+ /**
48
+ *
49
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
50
+ * @group Middleware
51
+ */
52
+ export type OnObserveFinallyData<TContext extends HookContext = HookContext> = {
53
+ executionTime: TimeSpan;
54
+ context: TContext;
55
+ };
56
+ /**
57
+ *
58
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
59
+ * @group Middleware
60
+ */
61
+ export type OnObserveError<TParameters extends unknown[] = unknown[], TContext extends HookContext = HookContext> = Invokable<[data: OnObserveErrorData<TParameters, TContext>]>;
62
+ /**
63
+ *
64
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
65
+ * @group Middleware
66
+ */
67
+ export type OnObserveFinally<TContext extends HookContext = HookContext> = Invokable<[data: OnObserveFinallyData<TContext>]>;
68
+ /**
69
+ *
70
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
71
+ * @group Middleware
72
+ */
73
+ export type ObserveCallbacks<TParameters extends unknown[] = unknown[], TReturn = unknown, TContext extends HookContext = HookContext> = {
74
+ /**
75
+ * Callback function that will be called when before the underlying {@link Invokable | `Invokable`} is called.
76
+ */
77
+ onStart?: OnObserveStart<TParameters, TContext>;
78
+ /**
79
+ * Callback function that will be called when the underlying {@link Invokable | `Invokable`} is successfully called.
80
+ */
81
+ onSuccess?: OnObserveSuccess<TParameters, TReturn, TContext>;
82
+ /**
83
+ * Callback function that will be called when the underlying {@link Invokable | `Invokable`} throws an error.
84
+ */
85
+ onError?: OnObserveError<TParameters, TContext>;
86
+ /**
87
+ * Callback function that will be called when the underlying {@link Invokable | `Invokable`} throws an error or is successfully called.
88
+ */
89
+ onFinally?: OnObserveFinally<TContext>;
90
+ };
91
+ /**
92
+ * The `observe` middleware tracks an async function's state and runs callbacks when it fails with an error or succeeds.
93
+ *
94
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
95
+ * @group Middleware
96
+ *
97
+ * @example
98
+ * ```ts
99
+ * import { observe, LazyPromise } from "@daiso-tech/core/async";
100
+ * import { AsyncHooks, TimeSpan } from "@daiso-tech/core/utilities";
101
+ *
102
+ * await new AsyncHooks(
103
+ * // Lets pretend this function can throw and takes time to execute.
104
+ * async (a: number, b: number): Promise<number> => {
105
+ * const shouldThrow1 = Math.round(Math.random() * 100);
106
+ * if (shouldThrow1 > 50) {
107
+ * throw new Error("Unexpected error occured");
108
+ * }
109
+ * await LazyPromise.delay(TimeSpan.fromMilliseconds(Math.random() * 1000));
110
+ * const shouldThrow2 = Math.round(Math.random() * 100);
111
+ * if (shouldThrow2 > 50) {
112
+ * throw new Error("Unexpected error occured");
113
+ * }
114
+ * return a / b;
115
+ * },
116
+ * observe({
117
+ * onStart: (data) => console.log("START:", data),
118
+ * onSuccess: (data) => console.log("SUCCESS:", data),
119
+ * onError: (data) => console.error("ERROR:", data),
120
+ * onFinally: (data) => console.log("FINALLY:", data),
121
+ * })
122
+ * )
123
+ * .invoke(20, 10);
124
+ * // Will log when the function execution has started and the arguments.
125
+ * // Will log if the function succeded, the arguments and the return value.
126
+ * // Will log if the function errored, arguments and the error.
127
+ * // Will log the execution time and arguments
128
+ * ```
129
+ */
130
+ export declare function observe<TParameters extends unknown[], TReturn, TContext extends HookContext>(settings: NoInfer<ObserveCallbacks<TParameters, TReturn, TContext>>): AsyncMiddlewareFn<TParameters, TReturn, TContext>;
@@ -0,0 +1,80 @@
1
+ /**
2
+ * @module Async
3
+ */
4
+ import { TimeSpan } from "../../../utilities/_module-exports.js";
5
+ import { callInvokable, } from "../../../utilities/_module-exports.js";
6
+ /**
7
+ * The `observe` middleware tracks an async function's state and runs callbacks when it fails with an error or succeeds.
8
+ *
9
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
10
+ * @group Middleware
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * import { observe, LazyPromise } from "@daiso-tech/core/async";
15
+ * import { AsyncHooks, TimeSpan } from "@daiso-tech/core/utilities";
16
+ *
17
+ * await new AsyncHooks(
18
+ * // Lets pretend this function can throw and takes time to execute.
19
+ * async (a: number, b: number): Promise<number> => {
20
+ * const shouldThrow1 = Math.round(Math.random() * 100);
21
+ * if (shouldThrow1 > 50) {
22
+ * throw new Error("Unexpected error occured");
23
+ * }
24
+ * await LazyPromise.delay(TimeSpan.fromMilliseconds(Math.random() * 1000));
25
+ * const shouldThrow2 = Math.round(Math.random() * 100);
26
+ * if (shouldThrow2 > 50) {
27
+ * throw new Error("Unexpected error occured");
28
+ * }
29
+ * return a / b;
30
+ * },
31
+ * observe({
32
+ * onStart: (data) => console.log("START:", data),
33
+ * onSuccess: (data) => console.log("SUCCESS:", data),
34
+ * onError: (data) => console.error("ERROR:", data),
35
+ * onFinally: (data) => console.log("FINALLY:", data),
36
+ * })
37
+ * )
38
+ * .invoke(20, 10);
39
+ * // Will log when the function execution has started and the arguments.
40
+ * // Will log if the function succeded, the arguments and the return value.
41
+ * // Will log if the function errored, arguments and the error.
42
+ * // Will log the execution time and arguments
43
+ * ```
44
+ */
45
+ export function observe(settings) {
46
+ const { onStart = () => { }, onSuccess = () => { }, onError = () => { }, onFinally = () => { }, } = settings;
47
+ return async (args, next, { context }) => {
48
+ const start = performance.now();
49
+ try {
50
+ callInvokable(onStart, {
51
+ args,
52
+ context,
53
+ });
54
+ const returnValue = await next(...args);
55
+ callInvokable(onSuccess, {
56
+ args,
57
+ context,
58
+ returnValue,
59
+ });
60
+ return returnValue;
61
+ }
62
+ catch (error) {
63
+ callInvokable(onError, {
64
+ args,
65
+ context,
66
+ error,
67
+ });
68
+ throw error;
69
+ }
70
+ finally {
71
+ const end = performance.now();
72
+ const time = end - start;
73
+ callInvokable(onFinally, {
74
+ context,
75
+ executionTime: TimeSpan.fromMilliseconds(time),
76
+ });
77
+ }
78
+ };
79
+ }
80
+ //# sourceMappingURL=observe.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observe.middleware.js","sourceRoot":"","sources":["../../../../src/async/middlewares/observe/observe.middleware.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAoB,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EACH,aAAa,GAGhB,MAAM,gCAAgC,CAAC;AA4HxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,UAAU,OAAO,CAKnB,QAAmE;IAEnE,MAAM,EACF,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,EAClB,SAAS,GAAG,GAAG,EAAE,GAAE,CAAC,EACpB,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,EAClB,SAAS,GAAG,GAAG,EAAE,GAAE,CAAC,GACvB,GAAG,QAAQ,CAAC;IACb,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC;YACD,aAAa,CAAC,OAAO,EAAE;gBACnB,IAAI;gBACJ,OAAO;aACV,CAAC,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACxC,aAAa,CAAC,SAAS,EAAE;gBACrB,IAAI;gBACJ,OAAO;gBACP,WAAW;aACd,CAAC,CAAC;YACH,OAAO,WAAW,CAAC;QACvB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACtB,aAAa,CAAC,OAAO,EAAE;gBACnB,IAAI;gBACJ,OAAO;gBACP,KAAK;aACR,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QAChB,CAAC;gBAAS,CAAC;YACP,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC;YACzB,aAAa,CAAC,SAAS,EAAE;gBACrB,OAAO;gBACP,aAAa,EAAE,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC;aACjD,CAAC,CAAC;QACP,CAAC;IACL,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1 @@
1
+ export * from "../../../async/middlewares/retry/retry.middleware.js";
@@ -0,0 +1,2 @@
1
+ export * from "../../../async/middlewares/retry/retry.middleware.js";
2
+ //# sourceMappingURL=_module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_module.js","sourceRoot":"","sources":["../../../../src/async/middlewares/retry/_module.ts"],"names":[],"mappings":"AAAA,cAAc,+CAA+C,CAAC"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * @module Async
3
+ */
4
+ import { TimeSpan, type Invokable, type HookContext, type AsyncMiddlewareFn } from "../../../utilities/_module-exports.js";
5
+ import { type BackoffPolicy } from "../../../async/backof-policies/_module.js";
6
+ import { type ErrorPolicy } from "../../../async/middlewares/_shared.js";
7
+ /**
8
+ *
9
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
10
+ * @group Middlewares
11
+ */
12
+ export type OnRetryAttemptData<TParameters extends unknown[] = unknown[], TContext extends HookContext = HookContext> = {
13
+ attempt: number;
14
+ args: TParameters;
15
+ context: TContext;
16
+ };
17
+ /**
18
+ *
19
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
20
+ * @group Middlewares
21
+ */
22
+ export type OnRetryAttempt<TParameters extends unknown[] = unknown[], TContext extends HookContext = HookContext> = Invokable<[data: OnRetryAttemptData<TParameters, TContext>]>;
23
+ /**
24
+ *
25
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
26
+ * @group Middlewares
27
+ */
28
+ export type OnRetryDelayData<TParameters extends unknown[] = unknown[], TContext extends HookContext = HookContext> = {
29
+ error: unknown;
30
+ attempt: number;
31
+ waitTime: TimeSpan;
32
+ args: TParameters;
33
+ context: TContext;
34
+ };
35
+ /**
36
+ *
37
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
38
+ * @group Middlewares
39
+ */
40
+ export type OnRetryDelay<TParameters extends unknown[] = unknown[], TContext extends HookContext = HookContext> = Invokable<[data: OnRetryDelayData<TParameters, TContext>]>;
41
+ /**
42
+ *
43
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
44
+ * @group Middlewares
45
+ */
46
+ export type RetryCallbacks<TParameters extends unknown[] = unknown[], TContext extends HookContext = HookContext> = {
47
+ /**
48
+ * Callback function that will be called before execution attempt.
49
+ */
50
+ onExecutionAttempt?: OnRetryAttempt<TParameters, TContext>;
51
+ /**
52
+ * Callback function that will be called when the retry delay starts.
53
+ */
54
+ onRetryDelay?: OnRetryDelay<TParameters, TContext>;
55
+ };
56
+ /**
57
+ *
58
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
59
+ * @group Middlewares
60
+ */
61
+ export type RetrySettings<TParameters extends unknown[] = unknown[], TContext extends HookContext = HookContext> = RetryCallbacks<TParameters, TContext> & {
62
+ /**
63
+ * You can decide maximal times you can retry.
64
+ * @default {4}
65
+ */
66
+ maxAttempts?: number;
67
+ /**
68
+ * @default
69
+ * ```ts
70
+ * import { exponentialBackoffPolicy } from "@daiso-tech/core/async";
71
+ *
72
+ * exponentialBackoffPolicy();
73
+ * ```
74
+ */
75
+ backoffPolicy?: BackoffPolicy;
76
+ /**
77
+ * You can choose what errors you want to retry. By default all erros will be retried.
78
+ *
79
+ * @default
80
+ * ```ts
81
+ * (_error: unknown) => true
82
+ * ```
83
+ */
84
+ retryPolicy?: ErrorPolicy;
85
+ };
86
+ /**
87
+ * The `retry` middleware enables automatic retries for all errors or specific errors, with configurable backoff policies.
88
+ * An error will be thrown when all retry attempts fail.
89
+ *
90
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
91
+ * @group Middleware
92
+ * @throws {RetryAsyncError} {@link RetryAsyncError}
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * import { retry } from "@daiso-tech/core/async";
97
+ * import { AsyncHooks, TimeSpan } from "@daiso-tech/core/utilities";
98
+ *
99
+ * const data = await new AsyncHooks(
100
+ * async (url: string, signal?: AbortSignal): Promise<unknown> => {
101
+ * const response = await fetch(url, { signal });
102
+ * return await response.json();
103
+ * },
104
+ * [retry()],
105
+ * {
106
+ * signalBinder: {
107
+ * getSignal: (args) => args[1],
108
+ * forwardSignal: (args, signal) => {
109
+ * args[1] = signal;
110
+ * }
111
+ * }
112
+ * }
113
+ * )
114
+ * .invoke("URL");
115
+ * ```
116
+ */
117
+ export declare function retry<TParameters extends unknown[], TReturn, TContext extends HookContext>(settings?: NoInfer<RetrySettings<TParameters, TContext>>): AsyncMiddlewareFn<TParameters, TReturn, TContext>;
@@ -0,0 +1,82 @@
1
+ /**
2
+ * @module Async
3
+ */
4
+ import { callInvokable, TimeSpan, } from "../../../utilities/_module-exports.js";
5
+ import { exponentialBackoffPolicy, } from "../../../async/backof-policies/_module.js";
6
+ import { RetryAsyncError } from "../../../async/async.errors.js";
7
+ import { LazyPromise } from "../../../async/utilities/_module.js";
8
+ import {} from "../../../async/middlewares/_shared.js";
9
+ /**
10
+ * The `retry` middleware enables automatic retries for all errors or specific errors, with configurable backoff policies.
11
+ * An error will be thrown when all retry attempts fail.
12
+ *
13
+ * IMPORT_PATH: `"@daiso-tech/core/async"`
14
+ * @group Middleware
15
+ * @throws {RetryAsyncError} {@link RetryAsyncError}
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * import { retry } from "@daiso-tech/core/async";
20
+ * import { AsyncHooks, TimeSpan } from "@daiso-tech/core/utilities";
21
+ *
22
+ * const data = await new AsyncHooks(
23
+ * async (url: string, signal?: AbortSignal): Promise<unknown> => {
24
+ * const response = await fetch(url, { signal });
25
+ * return await response.json();
26
+ * },
27
+ * [retry()],
28
+ * {
29
+ * signalBinder: {
30
+ * getSignal: (args) => args[1],
31
+ * forwardSignal: (args, signal) => {
32
+ * args[1] = signal;
33
+ * }
34
+ * }
35
+ * }
36
+ * )
37
+ * .invoke("URL");
38
+ * ```
39
+ */
40
+ export function retry(settings = {}) {
41
+ const { maxAttempts = 4, backoffPolicy = exponentialBackoffPolicy(), retryPolicy = () => true, onRetryDelay = () => { }, onExecutionAttempt = () => { }, } = settings;
42
+ return async (args, next, { context, signal }) => {
43
+ const errors = [];
44
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
45
+ try {
46
+ callInvokable(onExecutionAttempt, { attempt, args, context });
47
+ return await next(...args);
48
+ }
49
+ catch (error) {
50
+ if (signal.aborted) {
51
+ break;
52
+ }
53
+ const waitTime = TimeSpan.fromMilliseconds(callInvokable(backoffPolicy, attempt, error));
54
+ callInvokable(onRetryDelay, {
55
+ error,
56
+ waitTime,
57
+ attempt,
58
+ args,
59
+ context,
60
+ });
61
+ if (callInvokable(retryPolicy, error)) {
62
+ errors.push(error);
63
+ }
64
+ else {
65
+ throw error;
66
+ }
67
+ await LazyPromise.delay(waitTime, signal);
68
+ }
69
+ }
70
+ let errorMessage = `Promise was failed after retried ${String(maxAttempts)} times`;
71
+ const lastError = errors[errors.length - 1];
72
+ if (lastError) {
73
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
74
+ errorMessage = `${errorMessage} and last thrown error was "${String(lastError)}"`;
75
+ }
76
+ throw new RetryAsyncError(errorMessage, {
77
+ errors,
78
+ maxAttempts,
79
+ });
80
+ };
81
+ }
82
+ //# sourceMappingURL=retry.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.middleware.js","sourceRoot":"","sources":["../../../../src/async/middlewares/retry/retry.middleware.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,aAAa,EACb,QAAQ,GAIX,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACH,wBAAwB,GAE3B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAoB,MAAM,gCAAgC,CAAC;AA4GlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,KAAK,CAKjB,WAA0D,EAAE;IAE5D,MAAM,EACF,WAAW,GAAG,CAAC,EACf,aAAa,GAAG,wBAAwB,EAAE,EAC1C,WAAW,GAAG,GAAG,EAAE,CAAC,IAAI,EACxB,YAAY,GAAG,GAAG,EAAE,GAAE,CAAC,EACvB,kBAAkB,GAAG,GAAG,EAAE,GAAE,CAAC,GAChC,GAAG,QAAQ,CAAC;IACb,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QAC7C,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACtD,IAAI,CAAC;gBACD,aAAa,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC9D,OAAO,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACtB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjB,MAAM;gBACV,CAAC;gBACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CACtC,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,CAC/C,CAAC;gBACF,aAAa,CAAC,YAAY,EAAE;oBACxB,KAAK;oBACL,QAAQ;oBACR,OAAO;oBACP,IAAI;oBACJ,OAAO;iBACV,CAAC,CAAC;gBAEH,IAAI,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;oBACpC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACJ,MAAM,KAAK,CAAC;gBAChB,CAAC;gBACD,MAAM,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9C,CAAC;QACL,CAAC;QAED,IAAI,YAAY,GAAG,oCAAoC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;QACnF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5C,IAAI,SAAS,EAAE,CAAC;YACZ,gEAAgE;YAChE,YAAY,GAAG,GAAG,YAAY,+BAA+B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;QACtF,CAAC;QACD,MAAM,IAAI,eAAe,CAAC,YAAY,EAAE;YACpC,MAAM;YACN,WAAW;SACd,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1 @@
1
+ export * from "../../../async/middlewares/timeout/timeout.middleware.js";
@@ -0,0 +1,2 @@
1
+ export * from "../../../async/middlewares/timeout/timeout.middleware.js";
2
+ //# sourceMappingURL=_module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_module.js","sourceRoot":"","sources":["../../../../src/async/middlewares/timeout/_module.ts"],"names":[],"mappings":"AAAA,cAAc,mDAAmD,CAAC"}