@adviser/cement 0.4.62 → 0.4.63

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 (354) hide show
  1. package/cjs/app-context.cjs.map +1 -1
  2. package/cjs/app-context.d.ts.map +1 -1
  3. package/cjs/base-sys-abstraction.cjs.map +1 -1
  4. package/cjs/base-sys-abstraction.d.ts.map +1 -1
  5. package/cjs/bin2text.cjs.map +1 -1
  6. package/cjs/bin2text.d.ts.map +1 -1
  7. package/cjs/coerce-binary.cjs.map +1 -1
  8. package/cjs/coerce-binary.d.ts.map +1 -1
  9. package/cjs/crypto.cjs.map +1 -1
  10. package/cjs/crypto.d.ts.map +1 -1
  11. package/cjs/future.cjs.map +1 -1
  12. package/cjs/future.d.ts.map +1 -1
  13. package/cjs/http_header.cjs.map +1 -1
  14. package/cjs/http_header.d.ts.map +1 -1
  15. package/cjs/is-json.cjs.map +1 -1
  16. package/cjs/is-json.d.ts.map +1 -1
  17. package/cjs/is-promise.cjs.map +1 -1
  18. package/cjs/is-promise.d.ts.map +1 -1
  19. package/cjs/lru-map-set.cjs.map +1 -1
  20. package/cjs/lru-map-set.d.ts.map +1 -1
  21. package/cjs/on-func.cjs.map +1 -1
  22. package/cjs/on-func.d.ts.map +1 -1
  23. package/cjs/option.cjs.map +1 -1
  24. package/cjs/option.d.ts.map +1 -1
  25. package/cjs/poller.cjs +8 -3
  26. package/cjs/poller.cjs.map +1 -1
  27. package/cjs/poller.d.ts +9 -2
  28. package/cjs/poller.d.ts.map +1 -1
  29. package/cjs/promise-sleep.cjs.map +1 -1
  30. package/cjs/promise-sleep.d.ts.map +1 -1
  31. package/cjs/resolve-once.cjs +84 -6
  32. package/cjs/resolve-once.cjs.map +1 -1
  33. package/cjs/resolve-once.d.ts +36 -3
  34. package/cjs/resolve-once.d.ts.map +1 -1
  35. package/cjs/result.cjs.map +1 -1
  36. package/cjs/result.d.ts.map +1 -1
  37. package/cjs/runtime.cjs.map +1 -1
  38. package/cjs/runtime.d.ts.map +1 -1
  39. package/cjs/sys-env.cjs.map +1 -1
  40. package/cjs/sys-env.d.ts.map +1 -1
  41. package/cjs/timeouted.cjs.map +1 -1
  42. package/cjs/timeouted.d.ts.map +1 -1
  43. package/cjs/tracer.cjs.map +1 -1
  44. package/cjs/tracer.d.ts.map +1 -1
  45. package/cjs/txt-en-decoder.cjs +2 -5
  46. package/cjs/txt-en-decoder.cjs.map +1 -1
  47. package/cjs/txt-en-decoder.d.ts +1 -1
  48. package/cjs/txt-en-decoder.d.ts.map +1 -1
  49. package/cjs/uri.cjs.map +1 -1
  50. package/cjs/uri.d.ts.map +1 -1
  51. package/cjs/utils/coerce-uint8.cjs.map +1 -1
  52. package/cjs/utils/coerce-uint8.d.ts.map +1 -1
  53. package/cjs/utils/console-write-stream.cjs.map +1 -1
  54. package/cjs/utils/console-write-stream.d.ts.map +1 -1
  55. package/cjs/utils/consume.cjs.map +1 -1
  56. package/cjs/utils/consume.d.ts.map +1 -1
  57. package/cjs/utils/fanout-write-stream.cjs.map +1 -1
  58. package/cjs/utils/fanout-write-stream.d.ts.map +1 -1
  59. package/cjs/utils/get-params-result.cjs.map +1 -1
  60. package/cjs/utils/get-params-result.d.ts.map +1 -1
  61. package/cjs/utils/rebuffer.cjs.map +1 -1
  62. package/cjs/utils/rebuffer.d.ts.map +1 -1
  63. package/cjs/utils/relative-path.cjs.map +1 -1
  64. package/cjs/utils/relative-path.d.ts.map +1 -1
  65. package/cjs/utils/sorted-object.cjs.map +1 -1
  66. package/cjs/utils/sorted-object.d.ts.map +1 -1
  67. package/cjs/utils/stream-map.cjs.map +1 -1
  68. package/cjs/utils/stream-map.d.ts.map +1 -1
  69. package/cjs/utils/stream2string.cjs.map +1 -1
  70. package/cjs/utils/stream2string.d.ts.map +1 -1
  71. package/cjs/utils/string2stream.cjs.map +1 -1
  72. package/cjs/utils/string2stream.d.ts.map +1 -1
  73. package/cjs/utils/stripper.cjs.map +1 -1
  74. package/cjs/utils/stripper.d.ts.map +1 -1
  75. package/cjs/utils/to-sorted.cjs.map +1 -1
  76. package/cjs/utils/to-sorted.d.ts.map +1 -1
  77. package/cjs/utils/uint8array-equal.cjs.map +1 -1
  78. package/cjs/utils/uint8array-equal.d.ts.map +1 -1
  79. package/cjs/version.cjs +1 -1
  80. package/deno.json +1 -1
  81. package/esm/app-context.d.ts.map +1 -1
  82. package/esm/app-context.js.map +1 -1
  83. package/esm/base-sys-abstraction.d.ts.map +1 -1
  84. package/esm/base-sys-abstraction.js.map +1 -1
  85. package/esm/bin2text.d.ts.map +1 -1
  86. package/esm/bin2text.js.map +1 -1
  87. package/esm/coerce-binary.d.ts.map +1 -1
  88. package/esm/coerce-binary.js.map +1 -1
  89. package/esm/crypto.d.ts.map +1 -1
  90. package/esm/crypto.js.map +1 -1
  91. package/esm/future.d.ts.map +1 -1
  92. package/esm/future.js.map +1 -1
  93. package/esm/http_header.d.ts.map +1 -1
  94. package/esm/http_header.js.map +1 -1
  95. package/esm/is-json.d.ts.map +1 -1
  96. package/esm/is-json.js.map +1 -1
  97. package/esm/is-promise.d.ts.map +1 -1
  98. package/esm/is-promise.js.map +1 -1
  99. package/esm/lru-map-set.d.ts.map +1 -1
  100. package/esm/lru-map-set.js.map +1 -1
  101. package/esm/on-func.d.ts.map +1 -1
  102. package/esm/on-func.js.map +1 -1
  103. package/esm/option.d.ts.map +1 -1
  104. package/esm/option.js.map +1 -1
  105. package/esm/poller.d.ts +9 -2
  106. package/esm/poller.d.ts.map +1 -1
  107. package/esm/poller.js +8 -3
  108. package/esm/poller.js.map +1 -1
  109. package/esm/promise-sleep.d.ts.map +1 -1
  110. package/esm/promise-sleep.js.map +1 -1
  111. package/esm/resolve-once.d.ts +36 -3
  112. package/esm/resolve-once.d.ts.map +1 -1
  113. package/esm/resolve-once.js +84 -6
  114. package/esm/resolve-once.js.map +1 -1
  115. package/esm/result.d.ts.map +1 -1
  116. package/esm/result.js.map +1 -1
  117. package/esm/runtime.d.ts.map +1 -1
  118. package/esm/runtime.js.map +1 -1
  119. package/esm/sys-env.d.ts.map +1 -1
  120. package/esm/sys-env.js.map +1 -1
  121. package/esm/timeouted.d.ts.map +1 -1
  122. package/esm/timeouted.js.map +1 -1
  123. package/esm/tracer.d.ts.map +1 -1
  124. package/esm/tracer.js.map +1 -1
  125. package/esm/txt-en-decoder.d.ts +1 -1
  126. package/esm/txt-en-decoder.d.ts.map +1 -1
  127. package/esm/txt-en-decoder.js +2 -5
  128. package/esm/txt-en-decoder.js.map +1 -1
  129. package/esm/uri.d.ts.map +1 -1
  130. package/esm/uri.js.map +1 -1
  131. package/esm/utils/coerce-uint8.d.ts.map +1 -1
  132. package/esm/utils/coerce-uint8.js.map +1 -1
  133. package/esm/utils/console-write-stream.d.ts.map +1 -1
  134. package/esm/utils/console-write-stream.js.map +1 -1
  135. package/esm/utils/consume.d.ts.map +1 -1
  136. package/esm/utils/consume.js.map +1 -1
  137. package/esm/utils/fanout-write-stream.d.ts.map +1 -1
  138. package/esm/utils/fanout-write-stream.js.map +1 -1
  139. package/esm/utils/get-params-result.d.ts.map +1 -1
  140. package/esm/utils/get-params-result.js.map +1 -1
  141. package/esm/utils/rebuffer.d.ts.map +1 -1
  142. package/esm/utils/rebuffer.js.map +1 -1
  143. package/esm/utils/relative-path.d.ts.map +1 -1
  144. package/esm/utils/relative-path.js.map +1 -1
  145. package/esm/utils/sorted-object.d.ts.map +1 -1
  146. package/esm/utils/sorted-object.js.map +1 -1
  147. package/esm/utils/stream-map.d.ts.map +1 -1
  148. package/esm/utils/stream-map.js.map +1 -1
  149. package/esm/utils/stream2string.d.ts.map +1 -1
  150. package/esm/utils/stream2string.js.map +1 -1
  151. package/esm/utils/string2stream.d.ts.map +1 -1
  152. package/esm/utils/string2stream.js.map +1 -1
  153. package/esm/utils/stripper.d.ts.map +1 -1
  154. package/esm/utils/stripper.js.map +1 -1
  155. package/esm/utils/to-sorted.d.ts.map +1 -1
  156. package/esm/utils/to-sorted.js.map +1 -1
  157. package/esm/utils/uint8array-equal.d.ts.map +1 -1
  158. package/esm/utils/uint8array-equal.js.map +1 -1
  159. package/esm/version.js +1 -1
  160. package/package.json +5 -2
  161. package/src/app-context.ts +111 -5
  162. package/src/base-sys-abstraction.ts +244 -0
  163. package/src/bin2text.ts +37 -0
  164. package/src/coerce-binary.ts +41 -0
  165. package/src/crypto.ts +35 -0
  166. package/src/future.ts +45 -1
  167. package/src/http_header.ts +277 -1
  168. package/src/is-json.ts +21 -0
  169. package/src/is-promise.ts +26 -0
  170. package/src/lru-map-set.ts +46 -0
  171. package/src/on-func.ts +38 -0
  172. package/src/option.ts +27 -0
  173. package/src/poller.ts +65 -17
  174. package/src/promise-sleep.ts +32 -4
  175. package/src/resolve-once.ts +588 -42
  176. package/src/result.ts +50 -0
  177. package/src/runtime.ts +75 -2
  178. package/src/sys-env.ts +57 -0
  179. package/src/timeouted.ts +92 -0
  180. package/src/tracer.ts +41 -0
  181. package/src/txt-en-decoder.ts +2 -5
  182. package/src/uri.ts +76 -4
  183. package/src/utils/coerce-uint8.ts +60 -0
  184. package/src/utils/console-write-stream.ts +34 -0
  185. package/src/utils/consume.ts +106 -0
  186. package/src/utils/fanout-write-stream.ts +45 -0
  187. package/src/utils/get-params-result.ts +37 -0
  188. package/src/utils/rebuffer.ts +42 -0
  189. package/src/utils/relative-path.ts +108 -0
  190. package/src/utils/sorted-object.ts +50 -0
  191. package/src/utils/stream-map.ts +90 -0
  192. package/src/utils/stream2string.ts +35 -0
  193. package/src/utils/string2stream.ts +30 -0
  194. package/src/utils/stripper.ts +34 -0
  195. package/src/utils/to-sorted.ts +34 -0
  196. package/src/utils/uint8array-equal.ts +20 -0
  197. package/ts/cjs/app-context.d.ts.map +1 -1
  198. package/ts/cjs/app-context.js.map +1 -1
  199. package/ts/cjs/base-sys-abstraction.d.ts.map +1 -1
  200. package/ts/cjs/base-sys-abstraction.js.map +1 -1
  201. package/ts/cjs/bin2text.d.ts.map +1 -1
  202. package/ts/cjs/bin2text.js.map +1 -1
  203. package/ts/cjs/coerce-binary.d.ts.map +1 -1
  204. package/ts/cjs/coerce-binary.js.map +1 -1
  205. package/ts/cjs/crypto.d.ts.map +1 -1
  206. package/ts/cjs/crypto.js.map +1 -1
  207. package/ts/cjs/future.d.ts.map +1 -1
  208. package/ts/cjs/future.js.map +1 -1
  209. package/ts/cjs/http_header.d.ts.map +1 -1
  210. package/ts/cjs/http_header.js.map +1 -1
  211. package/ts/cjs/is-json.d.ts.map +1 -1
  212. package/ts/cjs/is-json.js.map +1 -1
  213. package/ts/cjs/is-promise.d.ts.map +1 -1
  214. package/ts/cjs/is-promise.js.map +1 -1
  215. package/ts/cjs/lru-map-set.d.ts.map +1 -1
  216. package/ts/cjs/lru-map-set.js.map +1 -1
  217. package/ts/cjs/on-func.d.ts.map +1 -1
  218. package/ts/cjs/on-func.js.map +1 -1
  219. package/ts/cjs/option.d.ts.map +1 -1
  220. package/ts/cjs/option.js.map +1 -1
  221. package/ts/cjs/poller.d.ts +9 -2
  222. package/ts/cjs/poller.d.ts.map +1 -1
  223. package/ts/cjs/poller.js +8 -3
  224. package/ts/cjs/poller.js.map +1 -1
  225. package/ts/cjs/promise-sleep.d.ts.map +1 -1
  226. package/ts/cjs/promise-sleep.js.map +1 -1
  227. package/ts/cjs/resolve-once.d.ts +36 -3
  228. package/ts/cjs/resolve-once.d.ts.map +1 -1
  229. package/ts/cjs/resolve-once.js +84 -6
  230. package/ts/cjs/resolve-once.js.map +1 -1
  231. package/ts/cjs/result.d.ts.map +1 -1
  232. package/ts/cjs/result.js.map +1 -1
  233. package/ts/cjs/runtime.d.ts.map +1 -1
  234. package/ts/cjs/runtime.js.map +1 -1
  235. package/ts/cjs/sys-env.d.ts.map +1 -1
  236. package/ts/cjs/sys-env.js.map +1 -1
  237. package/ts/cjs/timeouted.d.ts.map +1 -1
  238. package/ts/cjs/timeouted.js.map +1 -1
  239. package/ts/cjs/tracer.d.ts.map +1 -1
  240. package/ts/cjs/tracer.js.map +1 -1
  241. package/ts/cjs/txt-en-decoder.d.ts +1 -1
  242. package/ts/cjs/txt-en-decoder.d.ts.map +1 -1
  243. package/ts/cjs/txt-en-decoder.js +2 -5
  244. package/ts/cjs/txt-en-decoder.js.map +1 -1
  245. package/ts/cjs/uri.d.ts.map +1 -1
  246. package/ts/cjs/uri.js.map +1 -1
  247. package/ts/cjs/utils/coerce-uint8.d.ts.map +1 -1
  248. package/ts/cjs/utils/coerce-uint8.js.map +1 -1
  249. package/ts/cjs/utils/console-write-stream.d.ts.map +1 -1
  250. package/ts/cjs/utils/console-write-stream.js.map +1 -1
  251. package/ts/cjs/utils/consume.d.ts.map +1 -1
  252. package/ts/cjs/utils/consume.js.map +1 -1
  253. package/ts/cjs/utils/fanout-write-stream.d.ts.map +1 -1
  254. package/ts/cjs/utils/fanout-write-stream.js.map +1 -1
  255. package/ts/cjs/utils/get-params-result.d.ts.map +1 -1
  256. package/ts/cjs/utils/get-params-result.js.map +1 -1
  257. package/ts/cjs/utils/rebuffer.d.ts.map +1 -1
  258. package/ts/cjs/utils/rebuffer.js.map +1 -1
  259. package/ts/cjs/utils/relative-path.d.ts.map +1 -1
  260. package/ts/cjs/utils/relative-path.js.map +1 -1
  261. package/ts/cjs/utils/sorted-object.d.ts.map +1 -1
  262. package/ts/cjs/utils/sorted-object.js.map +1 -1
  263. package/ts/cjs/utils/stream-map.d.ts.map +1 -1
  264. package/ts/cjs/utils/stream-map.js.map +1 -1
  265. package/ts/cjs/utils/stream2string.d.ts.map +1 -1
  266. package/ts/cjs/utils/stream2string.js.map +1 -1
  267. package/ts/cjs/utils/string2stream.d.ts.map +1 -1
  268. package/ts/cjs/utils/string2stream.js.map +1 -1
  269. package/ts/cjs/utils/stripper.d.ts.map +1 -1
  270. package/ts/cjs/utils/stripper.js.map +1 -1
  271. package/ts/cjs/utils/to-sorted.d.ts.map +1 -1
  272. package/ts/cjs/utils/to-sorted.js.map +1 -1
  273. package/ts/cjs/utils/uint8array-equal.d.ts.map +1 -1
  274. package/ts/cjs/utils/uint8array-equal.js.map +1 -1
  275. package/ts/cjs/version.js +1 -1
  276. package/ts/esm/app-context.d.ts.map +1 -1
  277. package/ts/esm/app-context.js.map +1 -1
  278. package/ts/esm/base-sys-abstraction.d.ts.map +1 -1
  279. package/ts/esm/base-sys-abstraction.js.map +1 -1
  280. package/ts/esm/bin2text.d.ts.map +1 -1
  281. package/ts/esm/bin2text.js.map +1 -1
  282. package/ts/esm/coerce-binary.d.ts.map +1 -1
  283. package/ts/esm/coerce-binary.js.map +1 -1
  284. package/ts/esm/crypto.d.ts.map +1 -1
  285. package/ts/esm/crypto.js.map +1 -1
  286. package/ts/esm/future.d.ts.map +1 -1
  287. package/ts/esm/future.js.map +1 -1
  288. package/ts/esm/http_header.d.ts.map +1 -1
  289. package/ts/esm/http_header.js.map +1 -1
  290. package/ts/esm/is-json.d.ts.map +1 -1
  291. package/ts/esm/is-json.js.map +1 -1
  292. package/ts/esm/is-promise.d.ts.map +1 -1
  293. package/ts/esm/is-promise.js.map +1 -1
  294. package/ts/esm/lru-map-set.d.ts.map +1 -1
  295. package/ts/esm/lru-map-set.js.map +1 -1
  296. package/ts/esm/on-func.d.ts.map +1 -1
  297. package/ts/esm/on-func.js.map +1 -1
  298. package/ts/esm/option.d.ts.map +1 -1
  299. package/ts/esm/option.js.map +1 -1
  300. package/ts/esm/poller.d.ts +9 -2
  301. package/ts/esm/poller.d.ts.map +1 -1
  302. package/ts/esm/poller.js +8 -3
  303. package/ts/esm/poller.js.map +1 -1
  304. package/ts/esm/promise-sleep.d.ts.map +1 -1
  305. package/ts/esm/promise-sleep.js.map +1 -1
  306. package/ts/esm/resolve-once.d.ts +36 -3
  307. package/ts/esm/resolve-once.d.ts.map +1 -1
  308. package/ts/esm/resolve-once.js +84 -6
  309. package/ts/esm/resolve-once.js.map +1 -1
  310. package/ts/esm/result.d.ts.map +1 -1
  311. package/ts/esm/result.js.map +1 -1
  312. package/ts/esm/runtime.d.ts.map +1 -1
  313. package/ts/esm/runtime.js.map +1 -1
  314. package/ts/esm/sys-env.d.ts.map +1 -1
  315. package/ts/esm/sys-env.js.map +1 -1
  316. package/ts/esm/timeouted.d.ts.map +1 -1
  317. package/ts/esm/timeouted.js.map +1 -1
  318. package/ts/esm/tracer.d.ts.map +1 -1
  319. package/ts/esm/tracer.js.map +1 -1
  320. package/ts/esm/txt-en-decoder.d.ts +1 -1
  321. package/ts/esm/txt-en-decoder.d.ts.map +1 -1
  322. package/ts/esm/txt-en-decoder.js +2 -5
  323. package/ts/esm/txt-en-decoder.js.map +1 -1
  324. package/ts/esm/uri.d.ts.map +1 -1
  325. package/ts/esm/uri.js.map +1 -1
  326. package/ts/esm/utils/coerce-uint8.d.ts.map +1 -1
  327. package/ts/esm/utils/coerce-uint8.js.map +1 -1
  328. package/ts/esm/utils/console-write-stream.d.ts.map +1 -1
  329. package/ts/esm/utils/console-write-stream.js.map +1 -1
  330. package/ts/esm/utils/consume.d.ts.map +1 -1
  331. package/ts/esm/utils/consume.js.map +1 -1
  332. package/ts/esm/utils/fanout-write-stream.d.ts.map +1 -1
  333. package/ts/esm/utils/fanout-write-stream.js.map +1 -1
  334. package/ts/esm/utils/get-params-result.d.ts.map +1 -1
  335. package/ts/esm/utils/get-params-result.js.map +1 -1
  336. package/ts/esm/utils/rebuffer.d.ts.map +1 -1
  337. package/ts/esm/utils/rebuffer.js.map +1 -1
  338. package/ts/esm/utils/relative-path.d.ts.map +1 -1
  339. package/ts/esm/utils/relative-path.js.map +1 -1
  340. package/ts/esm/utils/sorted-object.d.ts.map +1 -1
  341. package/ts/esm/utils/sorted-object.js.map +1 -1
  342. package/ts/esm/utils/stream-map.d.ts.map +1 -1
  343. package/ts/esm/utils/stream-map.js.map +1 -1
  344. package/ts/esm/utils/stream2string.d.ts.map +1 -1
  345. package/ts/esm/utils/stream2string.js.map +1 -1
  346. package/ts/esm/utils/string2stream.d.ts.map +1 -1
  347. package/ts/esm/utils/string2stream.js.map +1 -1
  348. package/ts/esm/utils/stripper.d.ts.map +1 -1
  349. package/ts/esm/utils/stripper.js.map +1 -1
  350. package/ts/esm/utils/to-sorted.d.ts.map +1 -1
  351. package/ts/esm/utils/to-sorted.js.map +1 -1
  352. package/ts/esm/utils/uint8array-equal.d.ts.map +1 -1
  353. package/ts/esm/utils/uint8array-equal.js.map +1 -1
  354. package/ts/esm/version.js +1 -1
package/src/poller.ts CHANGED
@@ -52,15 +52,23 @@ export type PollActionResult<T> =
52
52
  | PurPollAbortActionResult;
53
53
 
54
54
  export const FOREVER = 2147483647; // Maximum setTimeout delay
55
- export interface PollerOptions {
55
+ export interface PollerOptions<CTX> {
56
56
  readonly intervalMs: number;
57
57
  readonly actionTimeoutMs: number; // not -1 it means if a timeout occures the action is retried in the next interval
58
58
  readonly timeoutMs: number;
59
59
  readonly exponentialBackoff: boolean;
60
60
  readonly abortSignal?: AbortSignal;
61
+ readonly ctx: CTX;
61
62
  }
62
63
 
63
64
  export type PollerResult<T> = PollSuccessActionResult<T> | PollErrorActionResult | PollTimeoutActionResult | PollAbortActionResult;
65
+ export interface PollerCtx<CTX> {
66
+ readonly ctx: CTX;
67
+ readonly stats: PollerStats;
68
+ readonly abortSignal: AbortSignal;
69
+ }
70
+
71
+ export type PollerFunc<T, CTX> = (state: PollerCtx<CTX>) => Promise<PollActionResult<T>>;
64
72
 
65
73
  function doneStats(stats: Writable<PollerStats> & { startTime: number }): PollerStats {
66
74
  stats.totalElapsedMs = Date.now() - stats.startTime;
@@ -71,12 +79,12 @@ function doneStats(stats: Writable<PollerStats> & { startTime: number }): Poller
71
79
  };
72
80
  }
73
81
 
74
- async function interPoller<T>(
75
- fn: (abortSignal?: AbortSignal) => Promise<PollActionResult<T>>,
76
- options: Writable<Omit<PollerOptions, "abortSignal">>,
82
+ async function interPoller<R, CTX>(
83
+ fn: PollerFunc<R, CTX>,
84
+ options: Writable<Omit<PollerOptions<CTX>, "abortSignal">>,
77
85
  stats: Writable<PollerStats> & { readonly startTime: number },
78
86
  abortController: AbortController,
79
- ): Promise<PollerResult<T>> {
87
+ ): Promise<PollerResult<R>> {
80
88
  do {
81
89
  // let result: PollActionResult<T>;
82
90
  try {
@@ -92,19 +100,23 @@ async function interPoller<T>(
92
100
  const fnAbortController = new AbortController();
93
101
  fnAbortController.signal.addEventListener("abort", onAbort, { once: true });
94
102
 
95
- const races = [
96
- fn(fnAbortController.signal).finally(() => {
103
+ const races: Promise<PollActionResult<R>>[] = [
104
+ fn({
105
+ ctx: options.ctx,
106
+ stats,
107
+ abortSignal: fnAbortController.signal,
108
+ }).finally(() => {
97
109
  // abort all other waits
98
- fnAbortController.abort();
110
+ fnAbortController.abort("action: kill other waits");
99
111
  }),
100
112
  abortCheck.asPromise().finally(() => {
101
113
  // abort all other waits
102
- fnAbortController.abort();
114
+ fnAbortController.abort("abortcheck: kill other waits");
103
115
  }),
104
116
  ];
105
117
  if (options.actionTimeoutMs > 0) {
106
118
  races.push(
107
- sleep(options.actionTimeoutMs, fnAbortController.signal).then((res): PollActionResult<T> => {
119
+ sleep(options.actionTimeoutMs, fnAbortController.signal).then((res): PollActionResult<R> => {
108
120
  // abort all other waits
109
121
  fnAbortController.abort(new Error("poller action timeout"));
110
122
  switch (res.state) {
@@ -120,7 +132,7 @@ async function interPoller<T>(
120
132
  }),
121
133
  );
122
134
  }
123
- const result = await Promise.race<PollActionResult<T>>(races).finally(() => {
135
+ const result = await Promise.race<PollActionResult<R>>(races).finally(() => {
124
136
  fnAbortController.signal.removeEventListener("abort", onAbort);
125
137
  });
126
138
  switch (result.state) {
@@ -173,14 +185,50 @@ async function interPoller<T>(
173
185
  } while (true);
174
186
  }
175
187
 
176
- export async function poller<T>(
177
- fn: () => Promise<PollActionResult<T>>,
178
- ioptions: Partial<PollerOptions> = {},
179
- ): Promise<PollerResult<T>> {
180
- const options = {
188
+ /**
189
+ * Repeatedly polls an asynchronous function until a terminal state is reached.
190
+ *
191
+ * The poller executes the provided function at regular intervals and supports:
192
+ * - Exponential backoff for retry intervals
193
+ * - Timeouts for individual actions and overall polling
194
+ * - Abort signal for cancellation
195
+ * - Detailed statistics tracking (attempts, intervals, elapsed time)
196
+ *
197
+ * @template R - The type of the successful result value
198
+ * @param fn - Function to poll that returns a PollActionResult indicating whether to continue waiting, succeed, error, timeout, or abort
199
+ * @param ioptions - Optional configuration:
200
+ * - intervalMs: Time between poll attempts in milliseconds (default: 1000)
201
+ * - timeoutMs: Total timeout in milliseconds, -1 for forever (default: 30000)
202
+ * - actionTimeoutMs: Timeout for each individual action attempt, -1 for forever (default: -1)
203
+ * - exponentialBackoff: Whether to double the interval after each attempt (default: auto-enabled if timeoutMs is FOREVER)
204
+ * - abortSignal: Optional AbortSignal to cancel polling
205
+ *
206
+ * @returns Promise resolving to a PollerResult with state, statistics, and result/error/reason depending on the outcome
207
+ *
208
+ * @example
209
+ * ```typescript
210
+ * const result = await poller(async () => {
211
+ * const status = await checkStatus();
212
+ * if (status.ready) {
213
+ * return { state: 'success', result: status.data };
214
+ * }
215
+ * return { state: 'waiting' };
216
+ * }, { intervalMs: 2000, timeoutMs: 60000 });
217
+ *
218
+ * if (result.state === 'success') {
219
+ * console.log('Got result:', result.result);
220
+ * }
221
+ * ```
222
+ */
223
+ export async function poller<R, CTX = void>(
224
+ fn: PollerFunc<R, CTX>,
225
+ ioptions: Partial<PollerOptions<CTX>> = {},
226
+ ): Promise<PollerResult<R>> {
227
+ const options: PollerOptions<CTX> = {
181
228
  intervalMs: 1000,
182
229
  timeoutMs: 30000, // -1 means forever
183
230
  actionTimeoutMs: -1, // forever
231
+ ctx: undefined as unknown as CTX,
184
232
  ...ioptions,
185
233
  exponentialBackoff:
186
234
  typeof ioptions.exponentialBackoff === "boolean" ? ioptions.exponentialBackoff : ioptions.timeoutMs === FOREVER,
@@ -206,7 +254,7 @@ export async function poller<T>(
206
254
  options.abortSignal.addEventListener("abort", dispatchAbort, { once: true });
207
255
  }
208
256
  }
209
- const races = [interPoller(fn, options, stats, abortController)];
257
+ const races = [interPoller<R, CTX>(fn, options, stats, abortController)];
210
258
  if (options.timeoutMs > 0) {
211
259
  races.push(
212
260
  sleep(options.timeoutMs, abortController.signal)
@@ -33,12 +33,40 @@ export interface SleepAbort extends SleepBase {
33
33
  export type SleepResult = SleepOk | SleepErr | SleepAbort;
34
34
 
35
35
  /**
36
- * Pause execution for the given number of milliseconds.
36
+ * Pauses execution for a specified duration with optional abort support.
37
37
  *
38
- * Example:
39
- * await sleep(500);
38
+ * Returns a SleepResult discriminated union indicating success, error, or abort.
39
+ * Unlike a plain setTimeout promise, this provides detailed state information
40
+ * through the result object. Negative durations resolve immediately as success.
41
+ * When aborted via AbortSignal, cleans up the timer and returns abort state.
40
42
  *
41
- * Optionally accepts an AbortSignal to cancel the sleep (will resolve with Result.Err on abort).
43
+ * @param ms - Duration to sleep in milliseconds (negative values resolve immediately)
44
+ * @param signal - Optional AbortSignal to cancel the sleep early
45
+ * @returns Promise resolving to SleepResult with state information
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * // Basic sleep
50
+ * const result = await sleep(500);
51
+ * if (result.isOk) {
52
+ * console.log('Slept for 500ms');
53
+ * }
54
+ *
55
+ * // With abort signal
56
+ * const controller = new AbortController();
57
+ * setTimeout(() => controller.abort(), 100);
58
+ *
59
+ * const result = await sleep(1000, controller.signal);
60
+ * if (result.isAborted) {
61
+ * console.log('Sleep was aborted:', result.reason);
62
+ * }
63
+ *
64
+ * // Check if already aborted
65
+ * const aborted = new AbortController();
66
+ * aborted.abort();
67
+ * const result = await sleep(1000, aborted.signal);
68
+ * // Immediately returns with isAborted: true
69
+ * ```
42
70
  */
43
71
  export async function sleep(ms: number, signal?: AbortSignal): Promise<SleepResult> {
44
72
  if (ms < 0) {