@ddd-ts-kit/aspects 0.0.0-stage → 0.1.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 (346) hide show
  1. package/README.md +381 -2
  2. package/dist/aspect/advice-factory.d.ts +9 -0
  3. package/dist/aspect/advice-factory.d.ts.map +1 -0
  4. package/dist/aspect/advice-factory.js +2 -0
  5. package/dist/aspect/advice-factory.js.map +1 -0
  6. package/dist/aspect/advice.d.ts +3 -0
  7. package/dist/aspect/advice.d.ts.map +1 -0
  8. package/dist/aspect/advice.js +2 -0
  9. package/dist/aspect/advice.js.map +1 -0
  10. package/dist/aspect/aspect-info.d.ts +12 -0
  11. package/dist/aspect/aspect-info.d.ts.map +1 -0
  12. package/dist/aspect/aspect-info.js +2 -0
  13. package/dist/aspect/aspect-info.js.map +1 -0
  14. package/dist/aspect/aspect-kind.d.ts +4 -0
  15. package/dist/aspect/aspect-kind.d.ts.map +1 -0
  16. package/dist/aspect/aspect-kind.js +2 -0
  17. package/dist/aspect/aspect-kind.js.map +1 -0
  18. package/dist/aspect/aspect-origins.d.ts +10 -0
  19. package/dist/aspect/aspect-origins.d.ts.map +1 -0
  20. package/dist/aspect/aspect-origins.js +3 -0
  21. package/dist/aspect/aspect-origins.js.map +1 -0
  22. package/dist/aspect/aspect.d.ts +9 -0
  23. package/dist/aspect/aspect.d.ts.map +1 -0
  24. package/dist/aspect/aspect.js +2 -0
  25. package/dist/aspect/aspect.js.map +1 -0
  26. package/dist/aspect/compose.d.ts +7 -0
  27. package/dist/aspect/compose.d.ts.map +1 -0
  28. package/dist/aspect/compose.js +11 -0
  29. package/dist/aspect/compose.js.map +1 -0
  30. package/dist/aspect/define-aspect.d.ts +5 -0
  31. package/dist/aspect/define-aspect.d.ts.map +1 -0
  32. package/dist/aspect/define-aspect.js +17 -0
  33. package/dist/aspect/define-aspect.js.map +1 -0
  34. package/dist/aspect/invocation.d.ts +6 -0
  35. package/dist/aspect/invocation.d.ts.map +1 -0
  36. package/dist/aspect/invocation.js +2 -0
  37. package/dist/aspect/invocation.js.map +1 -0
  38. package/dist/aspect/join-point.d.ts +13 -0
  39. package/dist/aspect/join-point.d.ts.map +1 -0
  40. package/dist/aspect/join-point.js +2 -0
  41. package/dist/aspect/join-point.js.map +1 -0
  42. package/dist/aspect/selector.d.ts +3 -0
  43. package/dist/aspect/selector.d.ts.map +1 -0
  44. package/dist/aspect/selector.js +2 -0
  45. package/dist/aspect/selector.js.map +1 -0
  46. package/dist/aspect/selectors.d.ts +14 -0
  47. package/dist/aspect/selectors.d.ts.map +1 -0
  48. package/dist/aspect/selectors.js +32 -0
  49. package/dist/aspect/selectors.js.map +1 -0
  50. package/dist/aspect/when.d.ts +8 -0
  51. package/dist/aspect/when.d.ts.map +1 -0
  52. package/dist/aspect/when.js +21 -0
  53. package/dist/aspect/when.js.map +1 -0
  54. package/dist/bulkhead/bulkhead-options.d.ts +10 -0
  55. package/dist/bulkhead/bulkhead-options.d.ts.map +1 -0
  56. package/dist/bulkhead/bulkhead-options.js +2 -0
  57. package/dist/bulkhead/bulkhead-options.js.map +1 -0
  58. package/dist/bulkhead/bulkhead.d.ts +11 -0
  59. package/dist/bulkhead/bulkhead.d.ts.map +1 -0
  60. package/dist/bulkhead/bulkhead.js +22 -0
  61. package/dist/bulkhead/bulkhead.js.map +1 -0
  62. package/dist/bulkhead/compartment.d.ts +13 -0
  63. package/dist/bulkhead/compartment.d.ts.map +1 -0
  64. package/dist/bulkhead/compartment.js +40 -0
  65. package/dist/bulkhead/compartment.js.map +1 -0
  66. package/dist/cached/cached.d.ts +26 -0
  67. package/dist/cached/cached.d.ts.map +1 -0
  68. package/dist/cached/cached.js +64 -0
  69. package/dist/cached/cached.js.map +1 -0
  70. package/dist/circuit-breaker/circuit-breaker-options.d.ts +20 -0
  71. package/dist/circuit-breaker/circuit-breaker-options.d.ts.map +1 -0
  72. package/dist/circuit-breaker/circuit-breaker-options.js +2 -0
  73. package/dist/circuit-breaker/circuit-breaker-options.js.map +1 -0
  74. package/dist/circuit-breaker/circuit-breaker.d.ts +11 -0
  75. package/dist/circuit-breaker/circuit-breaker.d.ts.map +1 -0
  76. package/dist/circuit-breaker/circuit-breaker.js +27 -0
  77. package/dist/circuit-breaker/circuit-breaker.js.map +1 -0
  78. package/dist/circuit-breaker/circuit-state-change.d.ts +10 -0
  79. package/dist/circuit-breaker/circuit-state-change.d.ts.map +1 -0
  80. package/dist/circuit-breaker/circuit-state-change.js +2 -0
  81. package/dist/circuit-breaker/circuit-state-change.js.map +1 -0
  82. package/dist/circuit-breaker/circuit-state-gauge.d.ts +8 -0
  83. package/dist/circuit-breaker/circuit-state-gauge.d.ts.map +1 -0
  84. package/dist/circuit-breaker/circuit-state-gauge.js +14 -0
  85. package/dist/circuit-breaker/circuit-state-gauge.js.map +1 -0
  86. package/dist/circuit-breaker/circuit-state.d.ts +2 -0
  87. package/dist/circuit-breaker/circuit-state.d.ts.map +1 -0
  88. package/dist/circuit-breaker/circuit-state.js +2 -0
  89. package/dist/circuit-breaker/circuit-state.js.map +1 -0
  90. package/dist/circuit-breaker/circuit.d.ts +22 -0
  91. package/dist/circuit-breaker/circuit.d.ts.map +1 -0
  92. package/dist/circuit-breaker/circuit.js +79 -0
  93. package/dist/circuit-breaker/circuit.js.map +1 -0
  94. package/dist/decorators/async-method-decorator.d.ts +13 -0
  95. package/dist/decorators/async-method-decorator.d.ts.map +1 -0
  96. package/dist/decorators/async-method-decorator.js +2 -0
  97. package/dist/decorators/async-method-decorator.js.map +1 -0
  98. package/dist/decorators/bulkhead.d.ts +5 -0
  99. package/dist/decorators/bulkhead.d.ts.map +1 -0
  100. package/dist/decorators/bulkhead.js +7 -0
  101. package/dist/decorators/bulkhead.js.map +1 -0
  102. package/dist/decorators/cached.d.ts +5 -0
  103. package/dist/decorators/cached.d.ts.map +1 -0
  104. package/dist/decorators/cached.js +7 -0
  105. package/dist/decorators/cached.js.map +1 -0
  106. package/dist/decorators/circuit-breaker.d.ts +5 -0
  107. package/dist/decorators/circuit-breaker.d.ts.map +1 -0
  108. package/dist/decorators/circuit-breaker.js +7 -0
  109. package/dist/decorators/circuit-breaker.js.map +1 -0
  110. package/dist/decorators/decorator-of.d.ts +9 -0
  111. package/dist/decorators/decorator-of.d.ts.map +1 -0
  112. package/dist/decorators/decorator-of.js +43 -0
  113. package/dist/decorators/decorator-of.js.map +1 -0
  114. package/dist/decorators/logged.d.ts +5 -0
  115. package/dist/decorators/logged.d.ts.map +1 -0
  116. package/dist/decorators/logged.js +7 -0
  117. package/dist/decorators/logged.js.map +1 -0
  118. package/dist/decorators/retry.d.ts +5 -0
  119. package/dist/decorators/retry.d.ts.map +1 -0
  120. package/dist/decorators/retry.js +7 -0
  121. package/dist/decorators/retry.js.map +1 -0
  122. package/dist/decorators/timed.d.ts +5 -0
  123. package/dist/decorators/timed.d.ts.map +1 -0
  124. package/dist/decorators/timed.js +7 -0
  125. package/dist/decorators/timed.js.map +1 -0
  126. package/dist/decorators/timeout.d.ts +5 -0
  127. package/dist/decorators/timeout.d.ts.map +1 -0
  128. package/dist/decorators/timeout.js +7 -0
  129. package/dist/decorators/timeout.js.map +1 -0
  130. package/dist/decorators.d.ts +10 -0
  131. package/dist/decorators.d.ts.map +1 -0
  132. package/dist/decorators.js +9 -0
  133. package/dist/decorators.js.map +1 -0
  134. package/dist/di/aspects.d.ts +19 -0
  135. package/dist/di/aspects.d.ts.map +1 -0
  136. package/dist/di/aspects.js +22 -0
  137. package/dist/di/aspects.js.map +1 -0
  138. package/dist/errors/aspect-not-allowed-error.d.ts +6 -0
  139. package/dist/errors/aspect-not-allowed-error.d.ts.map +1 -0
  140. package/dist/errors/aspect-not-allowed-error.js +9 -0
  141. package/dist/errors/aspect-not-allowed-error.js.map +1 -0
  142. package/dist/errors/bulkhead-full-error.d.ts +7 -0
  143. package/dist/errors/bulkhead-full-error.d.ts.map +1 -0
  144. package/dist/errors/bulkhead-full-error.js +10 -0
  145. package/dist/errors/bulkhead-full-error.js.map +1 -0
  146. package/dist/errors/circuit-open-error.d.ts +11 -0
  147. package/dist/errors/circuit-open-error.d.ts.map +1 -0
  148. package/dist/errors/circuit-open-error.js +14 -0
  149. package/dist/errors/circuit-open-error.js.map +1 -0
  150. package/dist/errors/is-business-refusal.d.ts +3 -0
  151. package/dist/errors/is-business-refusal.d.ts.map +1 -0
  152. package/dist/errors/is-business-refusal.js +6 -0
  153. package/dist/errors/is-business-refusal.js.map +1 -0
  154. package/dist/errors/timeout-error.d.ts +8 -0
  155. package/dist/errors/timeout-error.d.ts.map +1 -0
  156. package/dist/errors/timeout-error.js +12 -0
  157. package/dist/errors/timeout-error.js.map +1 -0
  158. package/dist/index.d.ts +46 -0
  159. package/dist/index.d.ts.map +1 -0
  160. package/dist/index.js +30 -0
  161. package/dist/index.js.map +1 -0
  162. package/dist/observability/log-call.d.ts +13 -0
  163. package/dist/observability/log-call.d.ts.map +1 -0
  164. package/dist/observability/log-call.js +22 -0
  165. package/dist/observability/log-call.js.map +1 -0
  166. package/dist/observability/logged.d.ts +22 -0
  167. package/dist/observability/logged.d.ts.map +1 -0
  168. package/dist/observability/logged.js +38 -0
  169. package/dist/observability/logged.js.map +1 -0
  170. package/dist/observability/logging-middleware.d.ts +13 -0
  171. package/dist/observability/logging-middleware.d.ts.map +1 -0
  172. package/dist/observability/logging-middleware.js +16 -0
  173. package/dist/observability/logging-middleware.js.map +1 -0
  174. package/dist/observability/metrics-middleware.d.ts +10 -0
  175. package/dist/observability/metrics-middleware.d.ts.map +1 -0
  176. package/dist/observability/metrics-middleware.js +12 -0
  177. package/dist/observability/metrics-middleware.js.map +1 -0
  178. package/dist/observability/observed.d.ts +14 -0
  179. package/dist/observability/observed.d.ts.map +1 -0
  180. package/dist/observability/observed.js +27 -0
  181. package/dist/observability/observed.js.map +1 -0
  182. package/dist/observability/safely.d.ts +3 -0
  183. package/dist/observability/safely.d.ts.map +1 -0
  184. package/dist/observability/safely.js +10 -0
  185. package/dist/observability/safely.js.map +1 -0
  186. package/dist/observability/stdout-logger.d.ts +45 -0
  187. package/dist/observability/stdout-logger.d.ts.map +1 -0
  188. package/dist/observability/stdout-logger.js +85 -0
  189. package/dist/observability/stdout-logger.js.map +1 -0
  190. package/dist/observability/time-call.d.ts +10 -0
  191. package/dist/observability/time-call.d.ts.map +1 -0
  192. package/dist/observability/time-call.js +11 -0
  193. package/dist/observability/time-call.js.map +1 -0
  194. package/dist/observability/timed.d.ts +19 -0
  195. package/dist/observability/timed.d.ts.map +1 -0
  196. package/dist/observability/timed.js +33 -0
  197. package/dist/observability/timed.js.map +1 -0
  198. package/dist/retry/backoff.d.ts +12 -0
  199. package/dist/retry/backoff.d.ts.map +1 -0
  200. package/dist/retry/backoff.js +2 -0
  201. package/dist/retry/backoff.js.map +1 -0
  202. package/dist/retry/delay-before-retry.d.ts +4 -0
  203. package/dist/retry/delay-before-retry.d.ts.map +1 -0
  204. package/dist/retry/delay-before-retry.js +10 -0
  205. package/dist/retry/delay-before-retry.js.map +1 -0
  206. package/dist/retry/full-jitter.d.ts +7 -0
  207. package/dist/retry/full-jitter.d.ts.map +1 -0
  208. package/dist/retry/full-jitter.js +8 -0
  209. package/dist/retry/full-jitter.js.map +1 -0
  210. package/dist/retry/is-transient.d.ts +6 -0
  211. package/dist/retry/is-transient.d.ts.map +1 -0
  212. package/dist/retry/is-transient.js +11 -0
  213. package/dist/retry/is-transient.js.map +1 -0
  214. package/dist/retry/jitter.d.ts +3 -0
  215. package/dist/retry/jitter.d.ts.map +1 -0
  216. package/dist/retry/jitter.js +2 -0
  217. package/dist/retry/jitter.js.map +1 -0
  218. package/dist/retry/no-jitter.d.ts +3 -0
  219. package/dist/retry/no-jitter.d.ts.map +1 -0
  220. package/dist/retry/no-jitter.js +2 -0
  221. package/dist/retry/no-jitter.js.map +1 -0
  222. package/dist/retry/retry.d.ts +20 -0
  223. package/dist/retry/retry.d.ts.map +1 -0
  224. package/dist/retry/retry.js +38 -0
  225. package/dist/retry/retry.js.map +1 -0
  226. package/dist/runtime/aspect-runtime-error.d.ts +6 -0
  227. package/dist/runtime/aspect-runtime-error.d.ts.map +1 -0
  228. package/dist/runtime/aspect-runtime-error.js +9 -0
  229. package/dist/runtime/aspect-runtime-error.js.map +1 -0
  230. package/dist/runtime/aspect-runtime.d.ts +15 -0
  231. package/dist/runtime/aspect-runtime.d.ts.map +1 -0
  232. package/dist/runtime/aspect-runtime.js +2 -0
  233. package/dist/runtime/aspect-runtime.js.map +1 -0
  234. package/dist/runtime/cache-or.d.ts +3 -0
  235. package/dist/runtime/cache-or.d.ts.map +1 -0
  236. package/dist/runtime/cache-or.js +6 -0
  237. package/dist/runtime/cache-or.js.map +1 -0
  238. package/dist/runtime/clock-or.d.ts +3 -0
  239. package/dist/runtime/clock-or.d.ts.map +1 -0
  240. package/dist/runtime/clock-or.js +7 -0
  241. package/dist/runtime/clock-or.js.map +1 -0
  242. package/dist/runtime/installed-runtime.d.ts +8 -0
  243. package/dist/runtime/installed-runtime.d.ts.map +1 -0
  244. package/dist/runtime/installed-runtime.js +16 -0
  245. package/dist/runtime/installed-runtime.js.map +1 -0
  246. package/dist/runtime/logger-or.d.ts +3 -0
  247. package/dist/runtime/logger-or.d.ts.map +1 -0
  248. package/dist/runtime/logger-or.js +6 -0
  249. package/dist/runtime/logger-or.js.map +1 -0
  250. package/dist/runtime/metrics-or.d.ts +3 -0
  251. package/dist/runtime/metrics-or.d.ts.map +1 -0
  252. package/dist/runtime/metrics-or.js +6 -0
  253. package/dist/runtime/metrics-or.js.map +1 -0
  254. package/dist/runtime/missing-collaborator.d.ts +2 -0
  255. package/dist/runtime/missing-collaborator.d.ts.map +1 -0
  256. package/dist/runtime/missing-collaborator.js +5 -0
  257. package/dist/runtime/missing-collaborator.js.map +1 -0
  258. package/dist/runtime/scheduler-or.d.ts +3 -0
  259. package/dist/runtime/scheduler-or.d.ts.map +1 -0
  260. package/dist/runtime/scheduler-or.js +6 -0
  261. package/dist/runtime/scheduler-or.js.map +1 -0
  262. package/dist/runtime/scheduler.d.ts +7 -0
  263. package/dist/runtime/scheduler.d.ts.map +1 -0
  264. package/dist/runtime/scheduler.js +5 -0
  265. package/dist/runtime/scheduler.js.map +1 -0
  266. package/dist/runtime/system-scheduler.d.ts +3 -0
  267. package/dist/runtime/system-scheduler.d.ts.map +1 -0
  268. package/dist/runtime/system-scheduler.js +9 -0
  269. package/dist/runtime/system-scheduler.js.map +1 -0
  270. package/dist/state/state-for.d.ts +5 -0
  271. package/dist/state/state-for.d.ts.map +1 -0
  272. package/dist/state/state-for.js +17 -0
  273. package/dist/state/state-for.js.map +1 -0
  274. package/dist/state/state-scope.d.ts +3 -0
  275. package/dist/state/state-scope.d.ts.map +1 -0
  276. package/dist/state/state-scope.js +2 -0
  277. package/dist/state/state-scope.js.map +1 -0
  278. package/dist/testing/create-aspect-fakes.d.ts +13 -0
  279. package/dist/testing/create-aspect-fakes.d.ts.map +1 -0
  280. package/dist/testing/create-aspect-fakes.js +15 -0
  281. package/dist/testing/create-aspect-fakes.js.map +1 -0
  282. package/dist/testing/manual-scheduler.d.ts +14 -0
  283. package/dist/testing/manual-scheduler.d.ts.map +1 -0
  284. package/dist/testing/manual-scheduler.js +30 -0
  285. package/dist/testing/manual-scheduler.js.map +1 -0
  286. package/dist/testing/with-aspect-runtime.d.ts +8 -0
  287. package/dist/testing/with-aspect-runtime.d.ts.map +1 -0
  288. package/dist/testing/with-aspect-runtime.js +10 -0
  289. package/dist/testing/with-aspect-runtime.js.map +1 -0
  290. package/dist/testing.d.ts +4 -0
  291. package/dist/testing.d.ts.map +1 -0
  292. package/dist/testing.js +4 -0
  293. package/dist/testing.js.map +1 -0
  294. package/dist/timeout/timeout.d.ts +21 -0
  295. package/dist/timeout/timeout.d.ts.map +1 -0
  296. package/dist/timeout/timeout.js +42 -0
  297. package/dist/timeout/timeout.js.map +1 -0
  298. package/dist/weaving/advise-method.d.ts +7 -0
  299. package/dist/weaving/advise-method.d.ts.map +1 -0
  300. package/dist/weaving/advise-method.js +19 -0
  301. package/dist/weaving/advise-method.js.map +1 -0
  302. package/dist/weaving/advise-methods.d.ts +13 -0
  303. package/dist/weaving/advise-methods.d.ts.map +1 -0
  304. package/dist/weaving/advise-methods.js +119 -0
  305. package/dist/weaving/advise-methods.js.map +1 -0
  306. package/dist/weaving/advise-prototype-method.d.ts +8 -0
  307. package/dist/weaving/advise-prototype-method.d.ts.map +1 -0
  308. package/dist/weaving/advise-prototype-method.js +30 -0
  309. package/dist/weaving/advise-prototype-method.js.map +1 -0
  310. package/dist/weaving/advised.d.ts +6 -0
  311. package/dist/weaving/advised.d.ts.map +1 -0
  312. package/dist/weaving/advised.js +19 -0
  313. package/dist/weaving/advised.js.map +1 -0
  314. package/dist/weaving/from-outside.d.ts +10 -0
  315. package/dist/weaving/from-outside.d.ts.map +1 -0
  316. package/dist/weaving/from-outside.js +29 -0
  317. package/dist/weaving/from-outside.js.map +1 -0
  318. package/dist/weaving/is-wrappable.d.ts +3 -0
  319. package/dist/weaving/is-wrappable.d.ts.map +1 -0
  320. package/dist/weaving/is-wrappable.js +7 -0
  321. package/dist/weaving/is-wrappable.js.map +1 -0
  322. package/dist/weaving/known-async.d.ts +4 -0
  323. package/dist/weaving/known-async.d.ts.map +1 -0
  324. package/dist/weaving/known-async.js +3 -0
  325. package/dist/weaving/known-async.js.map +1 -0
  326. package/dist/weaving/lifecycle-hooks.d.ts +3 -0
  327. package/dist/weaving/lifecycle-hooks.d.ts.map +1 -0
  328. package/dist/weaving/lifecycle-hooks.js +9 -0
  329. package/dist/weaving/lifecycle-hooks.js.map +1 -0
  330. package/dist/weaving/method.d.ts +2 -0
  331. package/dist/weaving/method.d.ts.map +1 -0
  332. package/dist/weaving/method.js +2 -0
  333. package/dist/weaving/method.js.map +1 -0
  334. package/dist/weaving/named.d.ts +4 -0
  335. package/dist/weaving/named.d.ts.map +1 -0
  336. package/dist/weaving/named.js +7 -0
  337. package/dist/weaving/named.js.map +1 -0
  338. package/dist/weaving/shadowed.d.ts +4 -0
  339. package/dist/weaving/shadowed.d.ts.map +1 -0
  340. package/dist/weaving/shadowed.js +14 -0
  341. package/dist/weaving/shadowed.js.map +1 -0
  342. package/dist/weaving/site-of.d.ts +5 -0
  343. package/dist/weaving/site-of.d.ts.map +1 -0
  344. package/dist/weaving/site-of.js +15 -0
  345. package/dist/weaving/site-of.js.map +1 -0
  346. package/package.json +40 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jitter.js","sourceRoot":"","sources":["../../src/retry/jitter.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { Jitter } from './jitter.js';
2
+ export declare const noJitter: Jitter;
3
+ //# sourceMappingURL=no-jitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-jitter.d.ts","sourceRoot":"","sources":["../../src/retry/no-jitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,eAAO,MAAM,QAAQ,EAAE,MAA6B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const noJitter = (delayMs) => delayMs;
2
+ //# sourceMappingURL=no-jitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-jitter.js","sourceRoot":"","sources":["../../src/retry/no-jitter.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAW,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { AdviceFactory } from '../aspect/advice-factory.js';
2
+ import type { Aspect } from '../aspect/aspect.js';
3
+ import type { Backoff } from './backoff.js';
4
+ export interface RetryOptions {
5
+ /** Calls made in total, the first one included. */
6
+ readonly attempts: number;
7
+ /** Default: 100 ms doubling up to 30 seconds, with full jitter. */
8
+ readonly backoff?: Backoff;
9
+ /** Default `isTransient`. */
10
+ readonly retryOn?: (error: unknown) => boolean;
11
+ /** Waits between attempts. Defaults to the scheduler of the aspect runtime. */
12
+ readonly sleep?: (delayMs: number) => Promise<void>;
13
+ }
14
+ /**
15
+ * Calls again after a failure that may not happen twice. Never after a `DomainError`: a
16
+ * business refusal is not transient. Only for calls that are safe to repeat.
17
+ */
18
+ export declare function retry(options: RetryOptions): Aspect;
19
+ export declare function retryAdvice(options: RetryOptions): AdviceFactory;
20
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/retry/retry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,mEAAmE;IACnE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IAC/C,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrD;AAID;;;GAGG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAEnD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAsBhE"}
@@ -0,0 +1,38 @@
1
+ import { defineAspect } from '../aspect/define-aspect.js';
2
+ import { schedulerOr } from '../runtime/scheduler-or.js';
3
+ import { delayBeforeRetry } from './delay-before-retry.js';
4
+ import { isTransient } from './is-transient.js';
5
+ const DEFAULT_BACKOFF = { baseMs: 100 };
6
+ /**
7
+ * Calls again after a failure that may not happen twice. Never after a `DomainError`: a
8
+ * business refusal is not transient. Only for calls that are safe to repeat.
9
+ */
10
+ export function retry(options) {
11
+ return defineAspect(retryAdvice(options));
12
+ }
13
+ export function retryAdvice(options) {
14
+ if (!Number.isSafeInteger(options.attempts) || options.attempts < 1) {
15
+ throw new RangeError('retry: attempts is an integer of at least 1');
16
+ }
17
+ const retryOn = options.retryOn ?? isTransient;
18
+ const backoff = options.backoff ?? DEFAULT_BACKOFF;
19
+ return () => async ({ proceed }) => {
20
+ for (let attempt = 1;; attempt += 1) {
21
+ try {
22
+ return await proceed();
23
+ }
24
+ catch (error) {
25
+ if (attempt >= options.attempts || !retryOn(error)) {
26
+ throw error;
27
+ }
28
+ await (options.sleep ?? scheduledSleep)(delayBeforeRetry(attempt, backoff));
29
+ }
30
+ }
31
+ };
32
+ }
33
+ function scheduledSleep(delayMs) {
34
+ return new Promise((resolve) => {
35
+ schedulerOr(undefined).schedule(resolve, delayMs);
36
+ });
37
+ }
38
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/retry/retry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAahD,MAAM,eAAe,GAAY,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAEjD;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,OAAqB;IACzC,OAAO,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAqB;IAC/C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,UAAU,CAAC,6CAA6C,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC;IAEnD,OAAO,GAAG,EAAE,CACV,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,IAAI,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,OAAO,MAAM,OAAO,EAAE,CAAC;YACzB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACnD,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACN,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,WAAW,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ /** An aspect needs a collaborator that neither its options nor the runtime provide. */
2
+ export declare class AspectRuntimeError extends Error {
3
+ readonly code = "ASPECT_RUNTIME_MISSING";
4
+ constructor(collaborator: string);
5
+ }
6
+ //# sourceMappingURL=aspect-runtime-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aspect-runtime-error.d.ts","sourceRoot":"","sources":["../../src/runtime/aspect-runtime-error.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,4BAA4B;IAEzC,YAAY,YAAY,EAAE,MAAM,EAM/B;CACF"}
@@ -0,0 +1,9 @@
1
+ /** An aspect needs a collaborator that neither its options nor the runtime provide. */
2
+ export class AspectRuntimeError extends Error {
3
+ code = 'ASPECT_RUNTIME_MISSING';
4
+ constructor(collaborator) {
5
+ super(`No ${collaborator} for aspects: call installAspectRuntime({ ${collaborator} }) in the composition root, or pass it in the options of the aspect`);
6
+ this.name = 'AspectRuntimeError';
7
+ }
8
+ }
9
+ //# sourceMappingURL=aspect-runtime-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aspect-runtime-error.js","sourceRoot":"","sources":["../../src/runtime/aspect-runtime-error.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,GAAG,wBAAwB,CAAC;IAEzC,YAAY,YAAoB;QAC9B,KAAK,CACH,MAAM,YAAY,6CAA6C,YAAY,sEAAsE,CAClJ,CAAC;QAEF,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { Cache, Clock, Logger, Metrics } from '@ddd-ts-kit/kernel';
2
+ import type { Scheduler } from './scheduler.js';
3
+ /**
4
+ * The collaborators aspects resolve when a call is made, not when a class is decorated or an
5
+ * instance wrapped. Install what the aspects in use need: `logged` a logger, `timed` metrics,
6
+ * `cached` a cache. The clock and the scheduler default to the system ones.
7
+ */
8
+ export interface AspectRuntime {
9
+ readonly logger?: Logger;
10
+ readonly metrics?: Metrics;
11
+ readonly cache?: Cache;
12
+ readonly clock?: Clock;
13
+ readonly scheduler?: Scheduler;
14
+ }
15
+ //# sourceMappingURL=aspect-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aspect-runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/aspect-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=aspect-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aspect-runtime.js","sourceRoot":"","sources":["../../src/runtime/aspect-runtime.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { Cache } from '@ddd-ts-kit/kernel';
2
+ export declare function cacheOr(given: Cache | undefined): Cache;
3
+ //# sourceMappingURL=cache-or.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-or.d.ts","sourceRoot":"","sources":["../../src/runtime/cache-or.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,CAEvD"}
@@ -0,0 +1,6 @@
1
+ import { currentRuntime } from './installed-runtime.js';
2
+ import { missingCollaborator } from './missing-collaborator.js';
3
+ export function cacheOr(given) {
4
+ return given ?? currentRuntime().cache ?? missingCollaborator('cache');
5
+ }
6
+ //# sourceMappingURL=cache-or.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-or.js","sourceRoot":"","sources":["../../src/runtime/cache-or.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,UAAU,OAAO,CAAC,KAAwB;IAC9C,OAAO,KAAK,IAAI,cAAc,EAAE,CAAC,KAAK,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Clock } from '@ddd-ts-kit/kernel';
2
+ export declare function clockOr(given: Clock | undefined): Clock;
3
+ //# sourceMappingURL=clock-or.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock-or.d.ts","sourceRoot":"","sources":["../../src/runtime/clock-or.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAK7D,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,CAEvD"}
@@ -0,0 +1,7 @@
1
+ import { SystemClock } from '@ddd-ts-kit/kernel';
2
+ import { currentRuntime } from './installed-runtime.js';
3
+ const systemClock = new SystemClock();
4
+ export function clockOr(given) {
5
+ return given ?? currentRuntime().clock ?? systemClock;
6
+ }
7
+ //# sourceMappingURL=clock-or.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock-or.js","sourceRoot":"","sources":["../../src/runtime/clock-or.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAc,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC,MAAM,UAAU,OAAO,CAAC,KAAwB;IAC9C,OAAO,KAAK,IAAI,cAAc,EAAE,CAAC,KAAK,IAAI,WAAW,CAAC;AACxD,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AspectRuntime } from './aspect-runtime.js';
2
+ /** Called once by the composition root. A later call replaces the runtime as a whole. */
3
+ export declare function installAspectRuntime(runtime: AspectRuntime): void;
4
+ /** The runtime for the duration of the work and of what it awaits. For tests: see `./testing`. */
5
+ export declare function runWithAspectRuntime<T>(runtime: AspectRuntime, work: () => T): T;
6
+ /** The runtime of the work in progress, otherwise the installed one. */
7
+ export declare function currentRuntime(): AspectRuntime;
8
+ //# sourceMappingURL=installed-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installed-runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/installed-runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKzD,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAEjE;AAED,kGAAkG;AAClG,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAEhF;AAED,wEAAwE;AACxE,wBAAgB,cAAc,IAAI,aAAa,CAE9C"}
@@ -0,0 +1,16 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ let installed = {};
3
+ const scoped = new AsyncLocalStorage();
4
+ /** Called once by the composition root. A later call replaces the runtime as a whole. */
5
+ export function installAspectRuntime(runtime) {
6
+ installed = runtime;
7
+ }
8
+ /** The runtime for the duration of the work and of what it awaits. For tests: see `./testing`. */
9
+ export function runWithAspectRuntime(runtime, work) {
10
+ return scoped.run(runtime, work);
11
+ }
12
+ /** The runtime of the work in progress, otherwise the installed one. */
13
+ export function currentRuntime() {
14
+ return scoped.getStore() ?? installed;
15
+ }
16
+ //# sourceMappingURL=installed-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installed-runtime.js","sourceRoot":"","sources":["../../src/runtime/installed-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,IAAI,SAAS,GAAkB,EAAE,CAAC;AAClC,MAAM,MAAM,GAAG,IAAI,iBAAiB,EAAiB,CAAC;AAEtD,yFAAyF;AACzF,MAAM,UAAU,oBAAoB,CAAC,OAAsB;IACzD,SAAS,GAAG,OAAO,CAAC;AACtB,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,oBAAoB,CAAI,OAAsB,EAAE,IAAa;IAC3E,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,cAAc;IAC5B,OAAO,MAAM,CAAC,QAAQ,EAAE,IAAI,SAAS,CAAC;AACxC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Logger } from '@ddd-ts-kit/kernel';
2
+ export declare function loggerOr(given: Logger | undefined): Logger;
3
+ //# sourceMappingURL=logger-or.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-or.d.ts","sourceRoot":"","sources":["../../src/runtime/logger-or.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAIjD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE1D"}
@@ -0,0 +1,6 @@
1
+ import { currentRuntime } from './installed-runtime.js';
2
+ import { missingCollaborator } from './missing-collaborator.js';
3
+ export function loggerOr(given) {
4
+ return given ?? currentRuntime().logger ?? missingCollaborator('logger');
5
+ }
6
+ //# sourceMappingURL=logger-or.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-or.js","sourceRoot":"","sources":["../../src/runtime/logger-or.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,UAAU,QAAQ,CAAC,KAAyB;IAChD,OAAO,KAAK,IAAI,cAAc,EAAE,CAAC,MAAM,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Metrics } from '@ddd-ts-kit/kernel';
2
+ export declare function metricsOr(given: Metrics | undefined): Metrics;
3
+ //# sourceMappingURL=metrics-or.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics-or.d.ts","sourceRoot":"","sources":["../../src/runtime/metrics-or.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAIlD,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAE7D"}
@@ -0,0 +1,6 @@
1
+ import { currentRuntime } from './installed-runtime.js';
2
+ import { missingCollaborator } from './missing-collaborator.js';
3
+ export function metricsOr(given) {
4
+ return given ?? currentRuntime().metrics ?? missingCollaborator('metrics');
5
+ }
6
+ //# sourceMappingURL=metrics-or.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics-or.js","sourceRoot":"","sources":["../../src/runtime/metrics-or.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,UAAU,SAAS,CAAC,KAA0B;IAClD,OAAO,KAAK,IAAI,cAAc,EAAE,CAAC,OAAO,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function missingCollaborator(collaborator: string): never;
2
+ //# sourceMappingURL=missing-collaborator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missing-collaborator.d.ts","sourceRoot":"","sources":["../../src/runtime/missing-collaborator.ts"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,KAAK,CAE/D"}
@@ -0,0 +1,5 @@
1
+ import { AspectRuntimeError } from './aspect-runtime-error.js';
2
+ export function missingCollaborator(collaborator) {
3
+ throw new AspectRuntimeError(collaborator);
4
+ }
5
+ //# sourceMappingURL=missing-collaborator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missing-collaborator.js","sourceRoot":"","sources":["../../src/runtime/missing-collaborator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,UAAU,mBAAmB,CAAC,YAAoB;IACtD,MAAM,IAAI,kBAAkB,CAAC,YAAY,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Scheduler } from './scheduler.js';
2
+ export declare function schedulerOr(given: Scheduler | undefined): Scheduler;
3
+ //# sourceMappingURL=scheduler-or.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler-or.d.ts","sourceRoot":"","sources":["../../src/runtime/scheduler-or.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAEnE"}
@@ -0,0 +1,6 @@
1
+ import { currentRuntime } from './installed-runtime.js';
2
+ import { systemScheduler } from './system-scheduler.js';
3
+ export function schedulerOr(given) {
4
+ return given ?? currentRuntime().scheduler ?? systemScheduler;
5
+ }
6
+ //# sourceMappingURL=scheduler-or.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler-or.js","sourceRoot":"","sources":["../../src/runtime/scheduler-or.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,UAAU,WAAW,CAAC,KAA4B;IACtD,OAAO,KAAK,IAAI,cAAc,EAAE,CAAC,SAAS,IAAI,eAAe,CAAC;AAChE,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** Runs work later. Injected so that a test advances time instead of waiting for it. */
2
+ export declare abstract class Scheduler {
3
+ static readonly tokenKey = "aspects.Scheduler";
4
+ /** Answers the function that cancels the work. */
5
+ abstract schedule(work: () => void, delayMs: number): () => void;
6
+ }
7
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/runtime/scheduler.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,8BAAsB,SAAS;IAC7B,MAAM,CAAC,QAAQ,CAAC,QAAQ,uBAAuB;IAE/C,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;CAClE"}
@@ -0,0 +1,5 @@
1
+ /** Runs work later. Injected so that a test advances time instead of waiting for it. */
2
+ export class Scheduler {
3
+ static tokenKey = 'aspects.Scheduler';
4
+ }
5
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/runtime/scheduler.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,MAAM,OAAgB,SAAS;IAC7B,MAAM,CAAU,QAAQ,GAAG,mBAAmB,CAAC;CAIhD"}
@@ -0,0 +1,3 @@
1
+ import type { Scheduler } from './scheduler.js';
2
+ export declare const systemScheduler: Scheduler;
3
+ //# sourceMappingURL=system-scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-scheduler.d.ts","sourceRoot":"","sources":["../../src/runtime/system-scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,eAAO,MAAM,eAAe,EAAE,SAQ5B,CAAC"}
@@ -0,0 +1,9 @@
1
+ export const systemScheduler = Object.freeze({
2
+ schedule(work, delayMs) {
3
+ const timer = setTimeout(work, delayMs);
4
+ return () => {
5
+ clearTimeout(timer);
6
+ };
7
+ },
8
+ });
9
+ //# sourceMappingURL=system-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-scheduler.js","sourceRoot":"","sources":["../../src/runtime/system-scheduler.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAc,MAAM,CAAC,MAAM,CAAC;IACtD,QAAQ,CAAC,IAAgB,EAAE,OAAe;QACxC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAExC,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { JoinPoint } from '../aspect/join-point.js';
2
+ import type { StateScope } from './state-scope.js';
3
+ /** Answers the state of a join point: a new one per method, or the one of its instance. */
4
+ export declare function stateFor<State>(scope: StateScope | undefined, create: (joinPoint: JoinPoint) => State): (joinPoint: JoinPoint) => State;
5
+ //# sourceMappingURL=state-for.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-for.d.ts","sourceRoot":"","sources":["../../src/state/state-for.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,2FAA2F;AAC3F,wBAAgB,QAAQ,CAAC,KAAK,EAC5B,KAAK,EAAE,UAAU,GAAG,SAAS,EAC7B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,KAAK,GACtC,CAAC,SAAS,EAAE,SAAS,KAAK,KAAK,CAoBjC"}
@@ -0,0 +1,17 @@
1
+ /** Answers the state of a join point: a new one per method, or the one of its instance. */
2
+ export function stateFor(scope, create) {
3
+ if (scope !== 'instance') {
4
+ return create;
5
+ }
6
+ const states = new WeakMap();
7
+ return (joinPoint) => {
8
+ const existing = states.get(joinPoint.instance);
9
+ if (existing !== undefined) {
10
+ return existing;
11
+ }
12
+ const state = create(joinPoint);
13
+ states.set(joinPoint.instance, state);
14
+ return state;
15
+ };
16
+ }
17
+ //# sourceMappingURL=state-for.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-for.js","sourceRoot":"","sources":["../../src/state/state-for.ts"],"names":[],"mappings":"AAGA,2FAA2F;AAC3F,MAAM,UAAU,QAAQ,CACtB,KAA6B,EAC7B,MAAuC;IAEvC,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,OAAO,EAAiB,CAAC;IAE5C,OAAO,CAAC,SAAS,EAAE,EAAE;QACnB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAEhC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEtC,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Whether a stateful aspect keeps one state per method (the default) or one per instance. */
2
+ export type StateScope = 'method' | 'instance';
3
+ //# sourceMappingURL=state-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-scope.d.ts","sourceRoot":"","sources":["../../src/state/state-scope.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=state-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-scope.js","sourceRoot":"","sources":["../../src/state/state-scope.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { FixedClock, InMemoryCache, InMemoryLogger, InMemoryMetrics } from '@ddd-ts-kit/kernel';
2
+ import { ManualScheduler } from './manual-scheduler.js';
3
+ export interface AspectFakes {
4
+ readonly logger: InMemoryLogger;
5
+ readonly metrics: InMemoryMetrics;
6
+ readonly cache: InMemoryCache;
7
+ readonly clock: FixedClock;
8
+ /** Advancing it advances the clock too. */
9
+ readonly scheduler: ManualScheduler;
10
+ }
11
+ /** The in-memory fakes of the kernel, on one clock, ready for `withAspectRuntime`. */
12
+ export declare function createAspectFakes(now?: Date): AspectFakes;
13
+ //# sourceMappingURL=create-aspect-fakes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-aspect-fakes.d.ts","sourceRoot":"","sources":["../../src/testing/create-aspect-fakes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,2CAA2C;IAC3C,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;CACrC;AAID,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,IAAkB,GAAG,WAAW,CAUtE"}
@@ -0,0 +1,15 @@
1
+ import { FixedClock, InMemoryCache, InMemoryLogger, InMemoryMetrics } from '@ddd-ts-kit/kernel';
2
+ import { ManualScheduler } from './manual-scheduler.js';
3
+ const DEFAULT_NOW = new Date('2026-01-01T00:00:00.000Z');
4
+ /** The in-memory fakes of the kernel, on one clock, ready for `withAspectRuntime`. */
5
+ export function createAspectFakes(now = DEFAULT_NOW) {
6
+ const clock = new FixedClock(now);
7
+ return {
8
+ logger: new InMemoryLogger(),
9
+ metrics: new InMemoryMetrics(),
10
+ cache: new InMemoryCache(clock),
11
+ clock,
12
+ scheduler: new ManualScheduler(clock),
13
+ };
14
+ }
15
+ //# sourceMappingURL=create-aspect-fakes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-aspect-fakes.js","sourceRoot":"","sources":["../../src/testing/create-aspect-fakes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAWxD,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;AAEzD,sFAAsF;AACtF,MAAM,UAAU,iBAAiB,CAAC,GAAG,GAAS,WAAW;IACvD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAElC,OAAO;QACL,MAAM,EAAE,IAAI,cAAc,EAAE;QAC5B,OAAO,EAAE,IAAI,eAAe,EAAE;QAC9B,KAAK,EAAE,IAAI,aAAa,CAAC,KAAK,CAAC;QAC/B,KAAK;QACL,SAAS,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC;KACtC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { FixedClock } from '@ddd-ts-kit/kernel';
2
+ import type { Scheduler } from '../runtime/scheduler.js';
3
+ /** Time that only moves when a test says so: `advance(ms)` runs what became due, in order. */
4
+ export declare class ManualScheduler implements Scheduler {
5
+ private readonly clock?;
6
+ private elapsed;
7
+ private scheduled;
8
+ constructor(clock?: FixedClock | undefined);
9
+ /** Work scheduled and neither run nor cancelled. */
10
+ get pending(): number;
11
+ schedule(work: () => void, delayMs: number): () => void;
12
+ advance(durationMs: number): void;
13
+ }
14
+ //# sourceMappingURL=manual-scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manual-scheduler.d.ts","sourceRoot":"","sources":["../../src/testing/manual-scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAOzD,8FAA8F;AAC9F,qBAAa,eAAgB,YAAW,SAAS;IAKnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAJnC,OAAO,CAAC,OAAO,CAAK;IAEpB,OAAO,CAAC,SAAS,CAAuB;IAExC,YAA6B,KAAK,CAAC,EAAE,UAAU,YAAA,EAAI;IAEnD,oDAAoD;IACpD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,IAAI,CAQtD;IAED,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAWhC;CACF"}
@@ -0,0 +1,30 @@
1
+ /** Time that only moves when a test says so: `advance(ms)` runs what became due, in order. */
2
+ export class ManualScheduler {
3
+ clock;
4
+ elapsed = 0;
5
+ scheduled = [];
6
+ constructor(clock) {
7
+ this.clock = clock;
8
+ }
9
+ /** Work scheduled and neither run nor cancelled. */
10
+ get pending() {
11
+ return this.scheduled.length;
12
+ }
13
+ schedule(work, delayMs) {
14
+ const scheduled = { dueAt: this.elapsed + delayMs, work };
15
+ this.scheduled.push(scheduled);
16
+ return () => {
17
+ this.scheduled = this.scheduled.filter((other) => other !== scheduled);
18
+ };
19
+ }
20
+ advance(durationMs) {
21
+ this.elapsed += durationMs;
22
+ this.clock?.advance(durationMs);
23
+ const due = this.scheduled.filter((scheduled) => scheduled.dueAt <= this.elapsed);
24
+ this.scheduled = this.scheduled.filter((scheduled) => scheduled.dueAt > this.elapsed);
25
+ for (const { work } of due.sort((first, second) => first.dueAt - second.dueAt)) {
26
+ work();
27
+ }
28
+ }
29
+ }
30
+ //# sourceMappingURL=manual-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manual-scheduler.js","sourceRoot":"","sources":["../../src/testing/manual-scheduler.ts"],"names":[],"mappings":"AAQA,8FAA8F;AAC9F,MAAM,OAAO,eAAe;IAKG,KAAK;IAJ1B,OAAO,GAAG,CAAC,CAAC;IAEZ,SAAS,GAAoB,EAAE,CAAC;IAExC,YAA6B,KAAkB;qBAAlB,KAAK;IAAgB,CAAC;IAEnD,oDAAoD;IACpD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,QAAQ,CAAC,IAAgB,EAAE,OAAe;QACxC,MAAM,SAAS,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC;QAE1D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE/B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;QACzE,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,UAAkB;QACxB,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;QAElF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAEtF,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/E,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import type { AspectRuntime } from '../runtime/aspect-runtime.js';
2
+ /**
3
+ * Runs the work, and everything it awaits, with these collaborators in place of the installed
4
+ * runtime: a decorated adapter is tested without any constructor parameter for them.
5
+ * Concurrent tests do not see each other's runtime.
6
+ */
7
+ export declare function withAspectRuntime<T>(runtime: AspectRuntime, work: () => T): T;
8
+ //# sourceMappingURL=with-aspect-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-aspect-runtime.d.ts","sourceRoot":"","sources":["../../src/testing/with-aspect-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAE7E"}
@@ -0,0 +1,10 @@
1
+ import { runWithAspectRuntime } from '../runtime/installed-runtime.js';
2
+ /**
3
+ * Runs the work, and everything it awaits, with these collaborators in place of the installed
4
+ * runtime: a decorated adapter is tested without any constructor parameter for them.
5
+ * Concurrent tests do not see each other's runtime.
6
+ */
7
+ export function withAspectRuntime(runtime, work) {
8
+ return runWithAspectRuntime(runtime, work);
9
+ }
10
+ //# sourceMappingURL=with-aspect-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-aspect-runtime.js","sourceRoot":"","sources":["../../src/testing/with-aspect-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAI,OAAsB,EAAE,IAAa;IACxE,OAAO,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { createAspectFakes, type AspectFakes } from './testing/create-aspect-fakes.js';
2
+ export { ManualScheduler } from './testing/manual-scheduler.js';
3
+ export { withAspectRuntime } from './testing/with-aspect-runtime.js';
4
+ //# sourceMappingURL=testing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { createAspectFakes } from './testing/create-aspect-fakes.js';
2
+ export { ManualScheduler } from './testing/manual-scheduler.js';
3
+ export { withAspectRuntime } from './testing/with-aspect-runtime.js';
4
+ //# sourceMappingURL=testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAoB,MAAM,kCAAkC,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { AdviceFactory } from '../aspect/advice-factory.js';
2
+ import type { Aspect } from '../aspect/aspect.js';
3
+ import type { Scheduler } from '../runtime/scheduler.js';
4
+ export interface TimeoutOptions {
5
+ /**
6
+ * Hands the method an `AbortSignal` as its last declared parameter, aborted when the time is
7
+ * up, so that the underlying call is really cancelled. The method declares
8
+ * `signal?: AbortSignal` last, without default value. A signal the caller passed there is
9
+ * kept: either one aborts. Default false.
10
+ */
11
+ readonly signal?: boolean;
12
+ /** Defaults to the scheduler of the aspect runtime. */
13
+ readonly scheduler?: Scheduler;
14
+ }
15
+ /**
16
+ * Rejects with a `TimeoutError` when the call has not answered in time. Without `signal` the
17
+ * underlying call keeps running and its late outcome is dropped.
18
+ */
19
+ export declare function timeout(timeoutMs: number, options?: TimeoutOptions): Aspect;
20
+ export declare function timeoutAdvice(timeoutMs: number, options?: TimeoutOptions): AdviceFactory;
21
+ //# sourceMappingURL=timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/timeout/timeout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAMlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,uDAAuD;IACvD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM,CAE/E;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,aAAa,CAoB5F"}