awaitly 1.34.0 → 2.0.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 (241) hide show
  1. package/dist/{duration.d.ts → di-BDlT7InM.d.cts} +15 -1
  2. package/dist/{duration.d.cts → di-BbFFfO8y.d.ts} +15 -1
  3. package/dist/errors-DtXvrCiO.d.cts +708 -0
  4. package/dist/errors-DtXvrCiO.d.ts +708 -0
  5. package/dist/index.cjs +4594 -1
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.d.cts +1970 -141
  8. package/dist/index.d.ts +1970 -141
  9. package/dist/index.js +4398 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/result.cjs +641 -1
  12. package/dist/result.cjs.map +1 -1
  13. package/dist/result.d.cts +35 -5
  14. package/dist/result.d.ts +35 -5
  15. package/dist/result.js +561 -1
  16. package/dist/result.js.map +1 -1
  17. package/dist/testing.cjs +4202 -8
  18. package/dist/testing.cjs.map +1 -1
  19. package/dist/testing.d.cts +2 -6
  20. package/dist/testing.d.ts +2 -6
  21. package/dist/testing.js +4154 -8
  22. package/dist/testing.js.map +1 -1
  23. package/dist/{run-entry-D2MmJFj9.d.cts → types-B8NfNRGX.d.ts} +1152 -1499
  24. package/dist/{run-entry-Dduz-is2.d.ts → types-BZ2f4MRR.d.cts} +1152 -1499
  25. package/dist/workflow.cjs +7096 -6
  26. package/dist/workflow.cjs.map +1 -1
  27. package/dist/workflow.d.cts +3346 -22
  28. package/dist/workflow.d.ts +3346 -22
  29. package/dist/workflow.js +6929 -6
  30. package/dist/workflow.js.map +1 -1
  31. package/package.json +13 -178
  32. package/dist/adapters.cjs +0 -7
  33. package/dist/adapters.cjs.map +0 -1
  34. package/dist/adapters.d.cts +0 -179
  35. package/dist/adapters.d.ts +0 -179
  36. package/dist/adapters.js +0 -7
  37. package/dist/adapters.js.map +0 -1
  38. package/dist/batch.cjs +0 -7
  39. package/dist/batch.cjs.map +0 -1
  40. package/dist/batch.d.cts +0 -200
  41. package/dist/batch.d.ts +0 -200
  42. package/dist/batch.js +0 -7
  43. package/dist/batch.js.map +0 -1
  44. package/dist/bind-deps.cjs +0 -2
  45. package/dist/bind-deps.cjs.map +0 -1
  46. package/dist/bind-deps.d.cts +0 -28
  47. package/dist/bind-deps.d.ts +0 -28
  48. package/dist/bind-deps.js +0 -2
  49. package/dist/bind-deps.js.map +0 -1
  50. package/dist/cache.cjs +0 -2
  51. package/dist/cache.cjs.map +0 -1
  52. package/dist/cache.d.cts +0 -269
  53. package/dist/cache.d.ts +0 -269
  54. package/dist/cache.js +0 -2
  55. package/dist/cache.js.map +0 -1
  56. package/dist/circuit-breaker.cjs +0 -7
  57. package/dist/circuit-breaker.cjs.map +0 -1
  58. package/dist/circuit-breaker.d.cts +0 -211
  59. package/dist/circuit-breaker.d.ts +0 -211
  60. package/dist/circuit-breaker.js +0 -7
  61. package/dist/circuit-breaker.js.map +0 -1
  62. package/dist/conditional.cjs +0 -2
  63. package/dist/conditional.cjs.map +0 -1
  64. package/dist/conditional.d.cts +0 -252
  65. package/dist/conditional.d.ts +0 -252
  66. package/dist/conditional.js +0 -2
  67. package/dist/conditional.js.map +0 -1
  68. package/dist/core.cjs +0 -7
  69. package/dist/core.cjs.map +0 -1
  70. package/dist/core.d.cts +0 -5
  71. package/dist/core.d.ts +0 -5
  72. package/dist/core.js +0 -7
  73. package/dist/core.js.map +0 -1
  74. package/dist/di-COl5oFnR.d.cts +0 -15
  75. package/dist/di-CyDj_JyZ.d.ts +0 -15
  76. package/dist/diagnostics.cjs +0 -8
  77. package/dist/diagnostics.cjs.map +0 -1
  78. package/dist/diagnostics.d.cts +0 -68
  79. package/dist/diagnostics.d.ts +0 -68
  80. package/dist/diagnostics.js +0 -8
  81. package/dist/diagnostics.js.map +0 -1
  82. package/dist/durable.cjs +0 -11
  83. package/dist/durable.cjs.map +0 -1
  84. package/dist/durable.d.cts +0 -9
  85. package/dist/durable.d.ts +0 -9
  86. package/dist/durable.js +0 -11
  87. package/dist/durable.js.map +0 -1
  88. package/dist/duration.cjs +0 -2
  89. package/dist/duration.cjs.map +0 -1
  90. package/dist/duration.js +0 -2
  91. package/dist/duration.js.map +0 -1
  92. package/dist/engine.cjs +0 -11
  93. package/dist/engine.cjs.map +0 -1
  94. package/dist/engine.d.cts +0 -115
  95. package/dist/engine.d.ts +0 -115
  96. package/dist/engine.js +0 -11
  97. package/dist/engine.js.map +0 -1
  98. package/dist/errors.cjs +0 -2
  99. package/dist/errors.cjs.map +0 -1
  100. package/dist/errors.d.cts +0 -361
  101. package/dist/errors.d.ts +0 -361
  102. package/dist/errors.js +0 -2
  103. package/dist/errors.js.map +0 -1
  104. package/dist/fetch.cjs +0 -7
  105. package/dist/fetch.cjs.map +0 -1
  106. package/dist/fetch.d.cts +0 -86
  107. package/dist/fetch.d.ts +0 -86
  108. package/dist/fetch.js +0 -7
  109. package/dist/fetch.js.map +0 -1
  110. package/dist/flow.cjs +0 -7
  111. package/dist/flow.cjs.map +0 -1
  112. package/dist/flow.d.cts +0 -163
  113. package/dist/flow.d.ts +0 -163
  114. package/dist/flow.js +0 -7
  115. package/dist/flow.js.map +0 -1
  116. package/dist/functional.cjs +0 -2
  117. package/dist/functional.cjs.map +0 -1
  118. package/dist/functional.d.cts +0 -444
  119. package/dist/functional.d.ts +0 -444
  120. package/dist/functional.js +0 -2
  121. package/dist/functional.js.map +0 -1
  122. package/dist/guards-BodHXLzX.d.cts +0 -72
  123. package/dist/guards-CeWoQ8fn.d.ts +0 -72
  124. package/dist/hitl-BPE_1UiM.d.cts +0 -468
  125. package/dist/hitl-byp570uC.d.ts +0 -468
  126. package/dist/hitl.cjs +0 -7
  127. package/dist/hitl.cjs.map +0 -1
  128. package/dist/hitl.d.cts +0 -442
  129. package/dist/hitl.d.ts +0 -442
  130. package/dist/hitl.js +0 -7
  131. package/dist/hitl.js.map +0 -1
  132. package/dist/index-BYT3amEz.d.ts +0 -417
  133. package/dist/index-C_ak66jy.d.cts +0 -417
  134. package/dist/match-entry-DjI2bLpD.d.cts +0 -209
  135. package/dist/match-entry-DjI2bLpD.d.ts +0 -209
  136. package/dist/match.cjs +0 -2
  137. package/dist/match.cjs.map +0 -1
  138. package/dist/match.d.cts +0 -1
  139. package/dist/match.d.ts +0 -1
  140. package/dist/match.js +0 -2
  141. package/dist/match.js.map +0 -1
  142. package/dist/otel.cjs +0 -2
  143. package/dist/otel.cjs.map +0 -1
  144. package/dist/otel.d.cts +0 -188
  145. package/dist/otel.d.ts +0 -188
  146. package/dist/otel.js +0 -2
  147. package/dist/otel.js.map +0 -1
  148. package/dist/persistence-entry-DOMx3woy.d.ts +0 -822
  149. package/dist/persistence-entry-ymCA4iDu.d.cts +0 -822
  150. package/dist/persistence.cjs +0 -2
  151. package/dist/persistence.cjs.map +0 -1
  152. package/dist/persistence.d.cts +0 -7
  153. package/dist/persistence.d.ts +0 -7
  154. package/dist/persistence.js +0 -2
  155. package/dist/persistence.js.map +0 -1
  156. package/dist/policies.cjs +0 -2
  157. package/dist/policies.cjs.map +0 -1
  158. package/dist/policies.d.cts +0 -379
  159. package/dist/policies.d.ts +0 -379
  160. package/dist/policies.js +0 -2
  161. package/dist/policies.js.map +0 -1
  162. package/dist/ratelimit.cjs +0 -7
  163. package/dist/ratelimit.cjs.map +0 -1
  164. package/dist/ratelimit.d.cts +0 -458
  165. package/dist/ratelimit.d.ts +0 -458
  166. package/dist/ratelimit.js +0 -7
  167. package/dist/ratelimit.js.map +0 -1
  168. package/dist/reliability.cjs +0 -11
  169. package/dist/reliability.cjs.map +0 -1
  170. package/dist/reliability.d.cts +0 -11
  171. package/dist/reliability.d.ts +0 -11
  172. package/dist/reliability.js +0 -11
  173. package/dist/reliability.js.map +0 -1
  174. package/dist/resolver.cjs +0 -7
  175. package/dist/resolver.cjs.map +0 -1
  176. package/dist/resolver.d.cts +0 -68
  177. package/dist/resolver.d.ts +0 -68
  178. package/dist/resolver.js +0 -7
  179. package/dist/resolver.js.map +0 -1
  180. package/dist/resource.cjs +0 -7
  181. package/dist/resource.cjs.map +0 -1
  182. package/dist/resource.d.cts +0 -174
  183. package/dist/resource.d.ts +0 -174
  184. package/dist/resource.js +0 -7
  185. package/dist/resource.js.map +0 -1
  186. package/dist/result/retry.cjs +0 -2
  187. package/dist/result/retry.cjs.map +0 -1
  188. package/dist/result/retry.d.cts +0 -70
  189. package/dist/result/retry.d.ts +0 -70
  190. package/dist/result/retry.js +0 -2
  191. package/dist/result/retry.js.map +0 -1
  192. package/dist/retry.cjs +0 -2
  193. package/dist/retry.cjs.map +0 -1
  194. package/dist/retry.d.cts +0 -388
  195. package/dist/retry.d.ts +0 -388
  196. package/dist/retry.js +0 -2
  197. package/dist/retry.js.map +0 -1
  198. package/dist/run.cjs +0 -7
  199. package/dist/run.cjs.map +0 -1
  200. package/dist/run.d.cts +0 -4
  201. package/dist/run.d.ts +0 -4
  202. package/dist/run.js +0 -7
  203. package/dist/run.js.map +0 -1
  204. package/dist/saga.cjs +0 -11
  205. package/dist/saga.cjs.map +0 -1
  206. package/dist/saga.d.cts +0 -164
  207. package/dist/saga.d.ts +0 -164
  208. package/dist/saga.js +0 -11
  209. package/dist/saga.js.map +0 -1
  210. package/dist/singleflight.cjs +0 -2
  211. package/dist/singleflight.cjs.map +0 -1
  212. package/dist/singleflight.d.cts +0 -145
  213. package/dist/singleflight.d.ts +0 -145
  214. package/dist/singleflight.js +0 -2
  215. package/dist/singleflight.js.map +0 -1
  216. package/dist/slugs.cjs +0 -2
  217. package/dist/slugs.cjs.map +0 -1
  218. package/dist/slugs.d.cts +0 -67
  219. package/dist/slugs.d.ts +0 -67
  220. package/dist/slugs.js +0 -2
  221. package/dist/slugs.js.map +0 -1
  222. package/dist/streaming.cjs +0 -9
  223. package/dist/streaming.cjs.map +0 -1
  224. package/dist/streaming.d.cts +0 -596
  225. package/dist/streaming.d.ts +0 -596
  226. package/dist/streaming.js +0 -9
  227. package/dist/streaming.js.map +0 -1
  228. package/dist/tagged-error.cjs +0 -2
  229. package/dist/tagged-error.cjs.map +0 -1
  230. package/dist/tagged-error.d.cts +0 -275
  231. package/dist/tagged-error.d.ts +0 -275
  232. package/dist/tagged-error.js +0 -2
  233. package/dist/tagged-error.js.map +0 -1
  234. package/dist/types-DQmzO9f4.d.ts +0 -323
  235. package/dist/types-qBUOYi-4.d.cts +0 -323
  236. package/dist/webhook.cjs +0 -7
  237. package/dist/webhook.cjs.map +0 -1
  238. package/dist/webhook.d.cts +0 -499
  239. package/dist/webhook.d.ts +0 -499
  240. package/dist/webhook.js +0 -7
  241. package/dist/webhook.js.map +0 -1
@@ -1,179 +0,0 @@
1
- import { c as AsyncResult } from './run-entry-D2MmJFj9.cjs';
2
- import './errors.cjs';
3
- import './tagged-error.cjs';
4
- import './slugs.cjs';
5
-
6
- /**
7
- * awaitly/adapters
8
- *
9
- * Convenience adapters to wrap common non-Promise async patterns into Results.
10
- *
11
- * @example
12
- * ```typescript
13
- * import { fromCallback, fromEvent } from 'awaitly/adapters';
14
- *
15
- * // Node.js callback style
16
- * const data = await fromCallback<string>(
17
- * (cb) => fs.readFile('file.txt', 'utf8', cb)
18
- * );
19
- *
20
- * // One-shot event emitter
21
- * const response = await fromEvent<Response>(
22
- * request,
23
- * { success: 'response', error: 'error' }
24
- * );
25
- * ```
26
- */
27
-
28
- /**
29
- * Standard Node.js error-first callback signature.
30
- */
31
- type NodeCallback<T> = (error: Error | null | undefined, result: T) => void;
32
- /**
33
- * Event listener configuration for fromEvent.
34
- */
35
- type EventConfig = {
36
- /** Event name that signals success (value is passed to resolve) */
37
- success: string;
38
- /** Event name that signals error (value is passed to reject). Optional. */
39
- error?: string;
40
- /** Timeout in milliseconds. If exceeded, returns timeout error. Optional. */
41
- timeout?: number;
42
- };
43
- /**
44
- * EventEmitter-like interface (supports Node.js and DOM events).
45
- */
46
- type EventEmitterLike = {
47
- on(event: string, listener: (...args: unknown[]) => void): unknown;
48
- off(event: string, listener: (...args: unknown[]) => void): unknown;
49
- } | {
50
- addEventListener(event: string, listener: (...args: unknown[]) => void): unknown;
51
- removeEventListener(event: string, listener: (...args: unknown[]) => void): unknown;
52
- };
53
- /**
54
- * Timeout error returned when fromEvent times out.
55
- */
56
- type EventTimeoutError = {
57
- type: "EVENT_TIMEOUT";
58
- event: string;
59
- timeoutMs: number;
60
- };
61
- /**
62
- * Type guard for EventTimeoutError.
63
- */
64
- declare function isEventTimeoutError(error: unknown): error is EventTimeoutError;
65
- /**
66
- * Error returned when the emitter doesn't have valid event subscription methods.
67
- */
68
- type InvalidEmitterError = {
69
- type: "INVALID_EMITTER";
70
- message: string;
71
- };
72
- /**
73
- * Type guard for InvalidEmitterError.
74
- */
75
- declare function isInvalidEmitterError(error: unknown): error is InvalidEmitterError;
76
- /**
77
- * Convert a Node.js callback-style function to AsyncResult.
78
- *
79
- * Handles the standard Node.js error-first callback pattern:
80
- * `(error: Error | null, result: T) => void`
81
- *
82
- * @param executor - Function that receives the callback and calls it
83
- * @param options - Optional error mapping
84
- * @returns AsyncResult with the callback's result
85
- *
86
- * @example
87
- * ```typescript
88
- * import { fromCallback } from 'awaitly/adapters';
89
- * import { readFile } from 'fs';
90
- *
91
- * // Basic usage
92
- * const result = await fromCallback<string>(
93
- * (cb) => readFile('file.txt', 'utf8', cb)
94
- * );
95
- *
96
- * if (result.ok) {
97
- * console.log(result.value);
98
- * } else {
99
- * console.error(result.error); // Error
100
- * }
101
- * ```
102
- *
103
- * @example
104
- * ```typescript
105
- * // With typed error mapping
106
- * type FileError = { type: 'FILE_ERROR'; path: string; cause: Error };
107
- *
108
- * const result = await fromCallback<string, FileError>(
109
- * (cb) => readFile('config.json', 'utf8', cb),
110
- * { onError: (e) => ({ type: 'FILE_ERROR', path: 'config.json', cause: e }) }
111
- * );
112
- * ```
113
- */
114
- declare function fromCallback<T, E = Error>(executor: (callback: NodeCallback<T>) => void, options?: {
115
- /** Map callback error to typed error */
116
- onError?: (error: Error) => E;
117
- }): AsyncResult<T, E>;
118
- /**
119
- * Convert a one-shot event emitter pattern to AsyncResult.
120
- * Automatically removes listeners after resolution.
121
- *
122
- * Supports both Node.js EventEmitter (on/off) and DOM EventTarget
123
- * (addEventListener/removeEventListener) interfaces.
124
- *
125
- * @param emitter - Object with event subscription methods
126
- * @param config - Event names and optional timeout
127
- * @param options - Optional error mapping
128
- * @returns AsyncResult with the event payload
129
- *
130
- * @example
131
- * ```typescript
132
- * import { fromEvent } from 'awaitly/adapters';
133
- * import { createReadStream } from 'fs';
134
- *
135
- * // Node.js stream - wait for first data chunk
136
- * const stream = createReadStream('data.txt');
137
- * const result = await fromEvent<Buffer>(stream, {
138
- * success: 'data',
139
- * error: 'error',
140
- * });
141
- *
142
- * if (result.ok) {
143
- * console.log('First chunk:', result.value);
144
- * }
145
- * ```
146
- *
147
- * @example
148
- * ```typescript
149
- * // With timeout
150
- * const result = await fromEvent<Response>(request, {
151
- * success: 'response',
152
- * error: 'error',
153
- * timeout: 5000,
154
- * });
155
- *
156
- * if (!result.ok && isEventTimeoutError(result.error)) {
157
- * console.log('Request timed out');
158
- * }
159
- * ```
160
- *
161
- * @example
162
- * ```typescript
163
- * // DOM events
164
- * const result = await fromEvent<Event>(button, {
165
- * success: 'click',
166
- * timeout: 10000,
167
- * });
168
- * ```
169
- */
170
- declare function fromEvent<T, E = Error | EventTimeoutError | InvalidEmitterError>(emitter: EventEmitterLike, config: EventConfig, options?: {
171
- /** Map event error to typed error */
172
- onError?: (error: unknown) => E;
173
- }): AsyncResult<T, E>;
174
- /**
175
- * Type guard to check if an object is EventEmitter-like.
176
- */
177
- declare function isEventEmitterLike(obj: unknown): obj is EventEmitterLike;
178
-
179
- export { type EventConfig, type EventEmitterLike, type EventTimeoutError, type InvalidEmitterError, type NodeCallback, fromCallback, fromEvent, isEventEmitterLike, isEventTimeoutError, isInvalidEmitterError };
@@ -1,179 +0,0 @@
1
- import { c as AsyncResult } from './run-entry-Dduz-is2.js';
2
- import './errors.js';
3
- import './tagged-error.js';
4
- import './slugs.js';
5
-
6
- /**
7
- * awaitly/adapters
8
- *
9
- * Convenience adapters to wrap common non-Promise async patterns into Results.
10
- *
11
- * @example
12
- * ```typescript
13
- * import { fromCallback, fromEvent } from 'awaitly/adapters';
14
- *
15
- * // Node.js callback style
16
- * const data = await fromCallback<string>(
17
- * (cb) => fs.readFile('file.txt', 'utf8', cb)
18
- * );
19
- *
20
- * // One-shot event emitter
21
- * const response = await fromEvent<Response>(
22
- * request,
23
- * { success: 'response', error: 'error' }
24
- * );
25
- * ```
26
- */
27
-
28
- /**
29
- * Standard Node.js error-first callback signature.
30
- */
31
- type NodeCallback<T> = (error: Error | null | undefined, result: T) => void;
32
- /**
33
- * Event listener configuration for fromEvent.
34
- */
35
- type EventConfig = {
36
- /** Event name that signals success (value is passed to resolve) */
37
- success: string;
38
- /** Event name that signals error (value is passed to reject). Optional. */
39
- error?: string;
40
- /** Timeout in milliseconds. If exceeded, returns timeout error. Optional. */
41
- timeout?: number;
42
- };
43
- /**
44
- * EventEmitter-like interface (supports Node.js and DOM events).
45
- */
46
- type EventEmitterLike = {
47
- on(event: string, listener: (...args: unknown[]) => void): unknown;
48
- off(event: string, listener: (...args: unknown[]) => void): unknown;
49
- } | {
50
- addEventListener(event: string, listener: (...args: unknown[]) => void): unknown;
51
- removeEventListener(event: string, listener: (...args: unknown[]) => void): unknown;
52
- };
53
- /**
54
- * Timeout error returned when fromEvent times out.
55
- */
56
- type EventTimeoutError = {
57
- type: "EVENT_TIMEOUT";
58
- event: string;
59
- timeoutMs: number;
60
- };
61
- /**
62
- * Type guard for EventTimeoutError.
63
- */
64
- declare function isEventTimeoutError(error: unknown): error is EventTimeoutError;
65
- /**
66
- * Error returned when the emitter doesn't have valid event subscription methods.
67
- */
68
- type InvalidEmitterError = {
69
- type: "INVALID_EMITTER";
70
- message: string;
71
- };
72
- /**
73
- * Type guard for InvalidEmitterError.
74
- */
75
- declare function isInvalidEmitterError(error: unknown): error is InvalidEmitterError;
76
- /**
77
- * Convert a Node.js callback-style function to AsyncResult.
78
- *
79
- * Handles the standard Node.js error-first callback pattern:
80
- * `(error: Error | null, result: T) => void`
81
- *
82
- * @param executor - Function that receives the callback and calls it
83
- * @param options - Optional error mapping
84
- * @returns AsyncResult with the callback's result
85
- *
86
- * @example
87
- * ```typescript
88
- * import { fromCallback } from 'awaitly/adapters';
89
- * import { readFile } from 'fs';
90
- *
91
- * // Basic usage
92
- * const result = await fromCallback<string>(
93
- * (cb) => readFile('file.txt', 'utf8', cb)
94
- * );
95
- *
96
- * if (result.ok) {
97
- * console.log(result.value);
98
- * } else {
99
- * console.error(result.error); // Error
100
- * }
101
- * ```
102
- *
103
- * @example
104
- * ```typescript
105
- * // With typed error mapping
106
- * type FileError = { type: 'FILE_ERROR'; path: string; cause: Error };
107
- *
108
- * const result = await fromCallback<string, FileError>(
109
- * (cb) => readFile('config.json', 'utf8', cb),
110
- * { onError: (e) => ({ type: 'FILE_ERROR', path: 'config.json', cause: e }) }
111
- * );
112
- * ```
113
- */
114
- declare function fromCallback<T, E = Error>(executor: (callback: NodeCallback<T>) => void, options?: {
115
- /** Map callback error to typed error */
116
- onError?: (error: Error) => E;
117
- }): AsyncResult<T, E>;
118
- /**
119
- * Convert a one-shot event emitter pattern to AsyncResult.
120
- * Automatically removes listeners after resolution.
121
- *
122
- * Supports both Node.js EventEmitter (on/off) and DOM EventTarget
123
- * (addEventListener/removeEventListener) interfaces.
124
- *
125
- * @param emitter - Object with event subscription methods
126
- * @param config - Event names and optional timeout
127
- * @param options - Optional error mapping
128
- * @returns AsyncResult with the event payload
129
- *
130
- * @example
131
- * ```typescript
132
- * import { fromEvent } from 'awaitly/adapters';
133
- * import { createReadStream } from 'fs';
134
- *
135
- * // Node.js stream - wait for first data chunk
136
- * const stream = createReadStream('data.txt');
137
- * const result = await fromEvent<Buffer>(stream, {
138
- * success: 'data',
139
- * error: 'error',
140
- * });
141
- *
142
- * if (result.ok) {
143
- * console.log('First chunk:', result.value);
144
- * }
145
- * ```
146
- *
147
- * @example
148
- * ```typescript
149
- * // With timeout
150
- * const result = await fromEvent<Response>(request, {
151
- * success: 'response',
152
- * error: 'error',
153
- * timeout: 5000,
154
- * });
155
- *
156
- * if (!result.ok && isEventTimeoutError(result.error)) {
157
- * console.log('Request timed out');
158
- * }
159
- * ```
160
- *
161
- * @example
162
- * ```typescript
163
- * // DOM events
164
- * const result = await fromEvent<Event>(button, {
165
- * success: 'click',
166
- * timeout: 10000,
167
- * });
168
- * ```
169
- */
170
- declare function fromEvent<T, E = Error | EventTimeoutError | InvalidEmitterError>(emitter: EventEmitterLike, config: EventConfig, options?: {
171
- /** Map event error to typed error */
172
- onError?: (error: unknown) => E;
173
- }): AsyncResult<T, E>;
174
- /**
175
- * Type guard to check if an object is EventEmitter-like.
176
- */
177
- declare function isEventEmitterLike(obj: unknown): obj is EventEmitterLike;
178
-
179
- export { type EventConfig, type EventEmitterLike, type EventTimeoutError, type InvalidEmitterError, type NodeCallback, fromCallback, fromEvent, isEventEmitterLike, isEventTimeoutError, isInvalidEmitterError };
package/dist/adapters.js DELETED
@@ -1,7 +0,0 @@
1
- var Ie={"step-require-id":"step-require-id","step-no-immediate-execution":"step-no-immediate-execution","step-require-thunk-for-key":"step-require-thunk-for-key","step-no-bare-await":"step-no-bare-await","step-no-try-catch-wrap":"step-no-try-catch-wrap","step-stable-cache-keys":"step-stable-cache-keys","workflow-no-floating":"workflow-no-floating","workflow-options-position":"workflow-options-position","workflow-callback-shape":"workflow-callback-shape","workflow-no-callable-form":"workflow-no-callable-form","workflow-no-dynamic-import":"workflow-no-dynamic-import","result-no-floating":"result-no-floating","result-require-handling":"result-require-handling","result-no-double-wrap":"result-no-double-wrap","result-no-manual-propagation":"result-no-manual-propagation","result-no-direct-ok-err":"result-no-direct-ok-err","error-check-unexpected-first":"error-check-unexpected-first","error-access-cause":"error-access-cause","error-normalize":"error-normalize","error-no-throw-in-deps":"error-no-throw-in-deps","concurrency-no-promise-all":"concurrency-no-promise-all","concurrency-no-promise-race":"concurrency-no-promise-race","concurrency-no-promise-allsettled":"concurrency-no-promise-allsettled","runtime-step-timeout":"runtime-step-timeout","runtime-step-aborted":"runtime-step-aborted","runtime-retry-exhausted":"runtime-retry-exhausted","runtime-rate-limit":"runtime-rate-limit","runtime-circuit-open":"runtime-circuit-open","runtime-unexpected":"runtime-unexpected","runtime-resolver-not-found":"runtime-resolver-not-found","runtime-saga-compensation":"runtime-saga-compensation"};function de(t){return`https://jagreehal.github.io/awaitly/rules/#${t}`}var Ze=Object.keys(Ie);var ee=class extends Error{_tag};function K(t,e){return class extends ee{_tag=t;constructor(c,d){let _=e?.message?e.message(c??{}):t;if(super(_),this.name=t,e?.slug!==void 0){if(!e.hint)throw new TypeError(`TaggedError: 'hint' is required when 'slug' is set (slug: "${e.slug}")`);Object.defineProperty(this,"code",{value:e.slug,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"hint",{value:e.hint,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"docsUrl",{value:de(e.slug),enumerable:!0,writable:!1,configurable:!1})}if(Object.setPrototypeOf(this,new.target.prototype),c&&typeof c=="object"){let f;if(e?.slug!==void 0){let{_tag:a,name:N,message:C,stack:M,code:j,hint:u,docsUrl:U,...$}=c;f=$}else{let{_tag:a,name:N,message:C,stack:M,...j}=c;f=j}let b=Object.prototype.hasOwnProperty.call(f,"cause"),w=b?f.cause:void 0;b&&delete f.cause;let P=d?.cause!==void 0;if(b&&P)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,f),b&&(this.cause=w),P&&(this.cause=d?.cause)}else d?.cause!==void 0&&(this.cause=d.cause)}}}Object.defineProperty(K,Symbol.hasInstance,{value:t=>t instanceof ee});(_=>{function t(f){return f instanceof Error}_.isError=t;function e(f){return f instanceof ee}_.isTaggedError=e;function c(f,b){let w=f._tag,P=b[w];return P(f)}_.match=c;function d(f,b,w){let P=f._tag,a=b[P];return a?a(f):w(f)}_.matchPartial=d})(K||={});var ye=class extends K("TimeoutError",{slug:"runtime-step-timeout",hint:"Increase the step's timeout option, or check why the upstream operation is slow.",message:e=>e.operation?`TimeoutError: ${e.operation} timed out after ${e.ms}ms`:`TimeoutError: Operation timed out after ${e.ms}ms`}){},we=class extends K("RetryExhaustedError",{slug:"runtime-retry-exhausted",hint:"All retry attempts failed. Inspect lastError and decide whether to surface it or compensate.",message:e=>e.operation?`RetryExhaustedError: ${e.operation} failed after ${e.attempts} attempts`:`RetryExhaustedError: Operation failed after ${e.attempts} attempts`}){},fe=class extends K("RateLimitError",{slug:"runtime-rate-limit",hint:"Wait retryAfterMs before retrying, or apply step.cache to deduplicate calls.",message:e=>e.limiterName?`RateLimitError: Rate limit exceeded for ${e.limiterName}${e.retryAfterMs?`, retry after ${e.retryAfterMs}ms`:""}`:`RateLimitError: Rate limit exceeded${e.retryAfterMs?`, retry after ${e.retryAfterMs}ms`:""}`}){},Te=class extends K("CircuitBreakerOpenError",{slug:"runtime-circuit-open",hint:"The circuit is open. Wait for it to half-open or fall back to a degraded path.",message:e=>`CircuitBreakerOpenError: Circuit ${e.circuitName} is ${e.state??"OPEN"}${e.retryAfterMs?`, retry after ${Math.ceil(e.retryAfterMs/1e3)}s`:""}`}){},ge=class extends K("ValidationError",{message:e=>`ValidationError: Invalid ${e.field} - ${e.reason}`}){},ke=class extends K("NotFoundError",{message:e=>e.id?`NotFoundError: ${e.resource} with id ${e.id} not found`:`NotFoundError: ${e.resource} not found`}){},Re=class extends K("UnauthorizedError",{message:e=>e.reason?`UnauthorizedError: ${e.reason}`:e.action&&e.resource?`UnauthorizedError: Not authorized to ${e.action} ${e.resource}`:"UnauthorizedError: Access denied"}){},xe=class extends K("NetworkError",{message:e=>e.url?`NetworkError: ${e.reason} (${e.url})`:`NetworkError: ${e.reason}`}){},he=class extends K("CompensationError",{slug:"runtime-saga-compensation",hint:"A saga compensation step failed. Inspect compensationError and ensure compensation is idempotent.",message:e=>`CompensationError: Failed to compensate step ${e.step}`}){},ne=class extends K("UnexpectedError",{slug:"runtime-unexpected",hint:"An unexpected exception escaped a step. Inspect cause; consider returning a typed Result instead of throwing.",message:e=>`UnexpectedError: ${e.cause instanceof Error?e.cause.message:String(e.cause??"unknown")}`}){};function De(t){let e=t.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!e)return;let c=parseFloat(e[1]),d=e[2].toLowerCase();return{_tag:"Duration",millis:c*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[d]??1)}}function Ue(t){return new ne({cause:t})}function F(t){return{ok:!0,value:t}}function D(t,e){let c=e?.cause;return{ok:!1,error:t,...c!==void 0?{cause:c}:{}}}function Ne(t){if(t==null)return"unknown";if(typeof t=="string")return t.trim()||"unknown";if(typeof t=="object"){let e=t;if(typeof e._tag=="string"){let c=e._tag.trim();if(c)return c}if(typeof e.tag=="string"){let c=e.tag.trim();if(c)return c}if(typeof e.code=="string"){let c=e.code.trim();if(c)return c}else if(typeof e.code=="number")return String(e.code);if(t instanceof Error&&t.name){let c=t.name.trim();if(c)return c}}return"unknown"}function Ke(t,e){if(!(!e||!t))return e[t]}function Fe(t){let{intent:e,domain:c,owner:d,tags:_,stateChanges:f,emits:b,calls:w}=t;if(!e&&!c&&!d&&!_?.length&&!f?.length&&!b?.length&&!w?.length)return;let P={};return e&&(P.intent=e),c&&(P.domain=c),d&&(P.owner=d),_?.length&&(P.tags=_),f?.length&&(P.stateChanges=f),b?.length&&(P.emits=b),w?.length&&(P.calls=w),P}function L(t,e,c,d,_){let f=Ne(t),b=Ke(f,e),w={tag:f,origin:c};return b!==void 0&&(w.classification=b),d!==void 0&&(w.attempt=d),_!==void 0&&(w.cumulativeDurationMs=_),w}var Q=Symbol.for("step_timeout_marker");function Ce(t){return typeof t!="object"||t===null?!1:t.type==="STEP_TIMEOUT"?!0:Q in t}function je(t){if(!(typeof t!="object"||t===null)){if(t.type==="STEP_TIMEOUT"){let e=t;return{timeoutMs:e.timeoutMs,stepName:e.stepName,stepKey:e.stepKey,attempt:e.attempt}}if(Q in t)return t[Q]}}var ve=Symbol("early-exit");function Le(t,e){return{[ve]:!0,error:t,meta:e}}function Be(t){return typeof t=="object"&&t!==null&&t[ve]===!0}var _e=Symbol("mapper-exception");function G(t){return{[_e]:!0,thrown:t}}function Ve(t){return typeof t=="object"&&t!==null&&t[_e]===!0}function le(t,e){let{backoff:c,initialDelay:d,maxDelay:_,jitter:f}=e,b;switch(c){case"fixed":b=d;break;case"linear":b=d*t;break;case"exponential":b=d*Math.pow(2,t-1);break}if(b=Math.min(b,_),f){let w=b*.25*Math.random();b=b+w}return Math.floor(b)}function pe(t){return new Promise(e=>setTimeout(e,t))}var be=Symbol("timeout"),oe=Symbol("timeout-option");function $e(t){return typeof t=="object"&&t!==null&&t[oe]===!0}async function He(t,e,c,d){let _=new AbortController,f=e.onTimeout??"error",b=()=>typeof f=="function"?f({name:c.name,key:c.key,ms:e.ms}):e.error??{type:"STEP_TIMEOUT",stepName:c.name,stepKey:c.key,timeoutMs:e.ms,attempt:c.attempt},w;d?.aborted&&_.abort(d.reason);let P;d&&!d.aborted&&(P=()=>_.abort(d.reason),d.addEventListener("abort",P,{once:!0}));let a=new Promise((C,M)=>{w=setTimeout(()=>{if(f!=="disconnect"&&_.abort(),f==="option"){M({[oe]:!0,ms:e.ms});return}M({[be]:!0,error:b()})},e.ms)}),N;e.signal?N=Promise.resolve(t(_.signal)):N=Promise.resolve(t());try{return await Promise.race([N,a])}catch(C){if(typeof C=="object"&&C!==null&&C[oe]===!0)throw{[oe]:!0,ms:e.ms};if(typeof C=="object"&&C!==null&&C[be]===!0){f==="disconnect"&&N.catch(()=>{});let M=C.error;if(typeof M=="object"&&M!==null&&M.type!=="STEP_TIMEOUT"){let j={timeoutMs:e.ms,stepName:c.name,stepKey:c.key,attempt:c.attempt};Q in M?M[Q]=j:Object.defineProperty(M,Q,{value:j,enumerable:!1,writable:!0,configurable:!1})}throw M}throw C}finally{clearTimeout(w),P&&d&&d.removeEventListener("abort",P)}}var X={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,shouldRetry:()=>!0,onRetry:()=>{}};async function Se(t,e){let{onError:c,onEvent:d,catchUnexpected:_,workflowId:f,workflowName:b,context:w,_workflowSignal:P}=e&&typeof e=="object"?e:{},a=f??crypto.randomUUID(),N=_??Ue,C=[],M=0,j=p=>p??`step_${++M}`,u=p=>{let B=p.context!==void 0||w===void 0?p:{...p,context:w},q=b!==void 0&&B.workflowName===void 0?{...B,workflowName:b}:B;if(q.type==="step_success"){let te=q.stepId;for(let re=C.length-1;re>=0;re--){let V=C[re];if(V.type==="race"&&!V.winnerId){V.winnerId=te;break}}}d?.(q,w)},U=Le,$=p=>Be(p),W=(p,B)=>p,Pe=p=>typeof p=="function"?!1:!!(p&&typeof p=="object"&&"ok"in p||p&&typeof p=="object"&&"then"in p&&typeof p.then=="function");try{let B=function(s){let m={};for(let[n,o]of Object.entries(s))if(typeof o=="function")m[n]=o;else if(o&&typeof o=="object"&&"fn"in o)m[n]=o.fn;else throw new TypeError(`step.all: operation "${n}" must be a function or { fn, errors? } object`);return m},q=function(s,m){let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),r=!1;C.push({scopeId:n,type:"parallel"});let i=()=>{if(r)return;r=!0;let l=C.findIndex(E=>E.scopeId===n);l!==-1&&C.splice(l,1),u({type:"scope_end",workflowId:a,scopeId:n,ts:Date.now(),durationMs:performance.now()-o})};u({type:"scope_start",workflowId:a,scopeId:n,scopeType:"parallel",name:s,ts:Date.now()});try{let l=await m();if(i(),!l.ok)throw c?.(l.error,s,w),U(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw i(),l}})()},te=function(s,m){let n=Object.keys(s),o=m.name??`Parallel(${n.join(", ")})`,r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let i=performance.now(),l=!1;C.push({scopeId:r,type:"parallel"});let E=()=>{if(l)return;l=!0;let y=C.findIndex(T=>T.scopeId===r);y!==-1&&C.splice(y,1),u({type:"scope_end",workflowId:a,scopeId:r,ts:Date.now(),durationMs:performance.now()-i})};u({type:"scope_start",workflowId:a,scopeId:r,scopeType:"parallel",name:o,ts:Date.now()});try{let y=await new Promise(k=>{if(n.length===0){k([]);return}let A=!1,I=n.length,R=new Array(n.length);for(let O=0;O<n.length;O++){let x=n[O],S=O;Promise.resolve(s[x]()).catch(h=>D({type:"PROMISE_REJECTED",cause:h},{cause:{type:"PROMISE_REJECTION",reason:h}})).then(h=>{if(!A){if(!h.ok){A=!0,k([{key:x,result:h}]);return}R[S]={key:x,result:h},I--,I===0&&k(R)}})}});E();let T={};for(let{key:k,result:A}of y){if(!A.ok)throw c?.(A.error,k,w),U(A.error,{origin:"result",resultCause:A.cause});T[k]=A.value}return T}catch(y){throw E(),y}})()};var Ge=B,Xe=q,Qe=te;let p=(s,m,n)=>(async()=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let o=n??{},r=Fe(o),i=s,l=o.key??s,E=o.key??s,{description:y,retry:T,timeout:k}=o,A=j(l),I=d,R=I?performance.now():0,x=Pe(m)?()=>m:m,h={attempts:Math.max(1,T?.attempts??1),backoff:T?.backoff??X.backoff,initialDelay:T?.initialDelay??X.initialDelay,maxDelay:T?.maxDelay??X.maxDelay,jitter:T?.jitter??X.jitter,shouldRetry:T?.shouldRetry??X.shouldRetry,onRetry:T?.onRetry??X.onRetry};d&&u({type:"step_start",workflowId:a,stepId:A,stepKey:l,name:i,description:y,ts:Date.now(),...r&&{metadata:r}});let J;for(let v=1;v<=h.attempts;v++){let Oe=I?performance.now():0;try{let g;if(k?g=await He(x,k,{name:i,key:l,attempt:v},P):g=await x(),g.ok){let z=performance.now()-R;return u({type:"step_success",workflowId:a,stepId:A,stepKey:l,name:i,description:y,ts:Date.now(),durationMs:z,...r&&{metadata:r}}),E&&u({type:"step_complete",workflowId:a,stepKey:E,name:i,description:y,ts:Date.now(),durationMs:z,result:g,...r&&{metadata:r}}),g.value}if(J=g,v<h.attempts&&h.shouldRetry(g.error,v)){let z=le(v,h);u({type:"step_retry",workflowId:a,stepId:A,stepKey:l,name:i,ts:Date.now(),attempt:v+1,maxAttempts:h.attempts,delayMs:z,error:g.error,...r&&{metadata:r},diagnostics:L(g.error,o.errorMeta,"result",v,performance.now()-R)}),h.onRetry(g.error,v,z),await pe(z);continue}h.attempts>1&&u({type:"step_retries_exhausted",workflowId:a,stepId:A,stepKey:l,name:i,ts:Date.now(),durationMs:performance.now()-R,attempts:v,lastError:g.error,...r&&{metadata:r},diagnostics:L(g.error,o.errorMeta,"result",v,performance.now()-R)});break}catch(g){let z=performance.now()-Oe;if($e(g)){let H=g.ms;u({type:"step_timeout",workflowId:a,stepId:A,stepKey:l,name:i,ts:Date.now(),timeoutMs:H,attempt:v,...r&&{metadata:r},diagnostics:L(g,o.errorMeta,"timeout",v)}),u({type:"step_success",workflowId:a,stepId:A,stepKey:l,name:i,description:y,ts:Date.now(),durationMs:performance.now()-R,...r&&{metadata:r}}),E&&u({type:"step_complete",workflowId:a,stepKey:E,name:i,description:y,ts:Date.now(),durationMs:performance.now()-R,result:F(void 0),...r&&{metadata:r}});return}if($(g))throw u({type:"step_aborted",workflowId:a,stepId:A,stepKey:l,name:i,description:y,ts:Date.now(),durationMs:z,...r&&{metadata:r}}),g;if(Ce(g)){let H=je(g),Me=k?.ms??H?.timeoutMs??0;if(u({type:"step_timeout",workflowId:a,stepId:A,stepKey:l,name:i,ts:Date.now(),timeoutMs:Me,attempt:v,...r&&{metadata:r},diagnostics:L(g,o.errorMeta,"timeout",v)}),v<h.attempts&&h.shouldRetry(g,v)){let ce=le(v,h);u({type:"step_retry",workflowId:a,stepId:A,stepKey:l,name:i,ts:Date.now(),attempt:v+1,maxAttempts:h.attempts,delayMs:ce,error:g,...r&&{metadata:r},diagnostics:L(g,o.errorMeta,"timeout",v,performance.now()-R)}),h.onRetry(g,v,ce),await pe(ce);continue}h.attempts>1&&u({type:"step_retries_exhausted",workflowId:a,stepId:A,stepKey:l,name:i,ts:Date.now(),durationMs:performance.now()-R,attempts:v,lastError:g,...r&&{metadata:r},diagnostics:L(g,o.errorMeta,"timeout",v,performance.now()-R)});let ue=performance.now()-R;throw u({type:"step_error",workflowId:a,stepId:A,stepKey:l,name:i,description:y,ts:Date.now(),durationMs:ue,error:g,...r&&{metadata:r},diagnostics:L(g,o.errorMeta,"timeout",v,ue)}),E&&u({type:"step_complete",workflowId:a,stepKey:E,name:i,description:y,ts:Date.now(),durationMs:ue,result:D(g,{cause:g}),meta:{origin:"throw",thrown:g},...r&&{metadata:r}}),c?.(g,i,w),U(g,{origin:"throw",thrown:g})}if(v<h.attempts&&h.shouldRetry(g,v)){let H=le(v,h);u({type:"step_retry",workflowId:a,stepId:A,stepKey:l,name:i,ts:Date.now(),attempt:v+1,maxAttempts:h.attempts,delayMs:H,error:g,...r&&{metadata:r},diagnostics:L(g,o.errorMeta,"throw",v,performance.now()-R)}),h.onRetry(g,v,H),await pe(H);continue}h.attempts>1&&!Ce(g)&&u({type:"step_retries_exhausted",workflowId:a,stepId:A,stepKey:l,name:i,ts:Date.now(),durationMs:performance.now()-R,attempts:v,lastError:g,...r&&{metadata:r},diagnostics:L(g,o.errorMeta,"throw",v,performance.now()-R)});let ie=performance.now()-R,Z;try{Z=N(g)}catch(H){throw G(H)}throw u({type:"step_error",workflowId:a,stepId:A,stepKey:l,name:i,description:y,ts:Date.now(),durationMs:ie,error:Z,...r&&{metadata:r},diagnostics:L(g,o.errorMeta,"throw",v,ie)}),E&&u({type:"step_complete",workflowId:a,stepKey:E,name:i,description:y,ts:Date.now(),durationMs:ie,result:D(Z,{cause:g}),meta:{origin:"throw",thrown:g},...r&&{metadata:r}}),c?.(Z,i,w),U(Z,{origin:"throw",thrown:g})}}let Y=J,se=performance.now()-R,ae=W(Y.error,{origin:"result",resultCause:Y.cause});throw u({type:"step_error",workflowId:a,stepId:A,stepKey:l,name:i,description:y,ts:Date.now(),durationMs:se,error:ae,...r&&{metadata:r},diagnostics:L(Y.error,o.errorMeta,"result",h.attempts,se)}),E&&u({type:"step_complete",workflowId:a,stepKey:E,name:i,description:y,ts:Date.now(),durationMs:se,result:Y,meta:{origin:"result",resultCause:Y.cause},...r&&{metadata:r}}),c?.(ae,i,w),U(ae,{origin:"result",resultCause:Y.cause})})();p.try=(s,m,n)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.try() requires an explicit string ID as the first argument. Example: step.try("parse", () => JSON.parse(str), { error: "PARSE_ERROR" })');let o="error"in n?()=>n.error:n.onError;if(n.retry||n.timeout)return p.retry(s,async()=>{try{return F(await m())}catch(y){return D(o(y),{cause:y})}},{attempts:n.retry?.attempts??1,...n.retry??{},key:n.key,timeout:n.timeout});let r=n.key??s,i=s,l=s,E=d;return(async()=>{let y=E?performance.now():0;d&&u({type:"step_start",workflowId:a,stepId:l,stepKey:r,name:i,ts:Date.now()});try{let T=await m(),k=performance.now()-y;return u({type:"step_success",workflowId:a,stepId:l,stepKey:r,name:i,ts:Date.now(),durationMs:k}),r&&u({type:"step_complete",workflowId:a,stepKey:r,name:i,ts:Date.now(),durationMs:k,result:F(T)}),T}catch(T){let k=o(T),A=performance.now()-y,I=W(k,{origin:"throw",thrown:T});throw u({type:"step_error",workflowId:a,stepId:l,stepKey:r,name:i,ts:Date.now(),durationMs:A,error:I}),r&&u({type:"step_complete",workflowId:a,stepKey:r,name:i,ts:Date.now(),durationMs:A,result:D(k,{cause:T}),meta:{origin:"throw",thrown:T}}),c?.(I,i,w),U(I,{origin:"throw",thrown:T})}})()},p.fromResult=(s,m,n)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.fromResult() requires an explicit string ID as the first argument. Example: step.fromResult("callProvider", () => callProvider(input), { onError: (e) => ({ type: "FAILED" }) })');let o=n.key??s,r=s,i=s,l="error"in n?()=>n.error:n.onError,E=d;return(async()=>{let y=E?performance.now():0;d&&u({type:"step_start",workflowId:a,stepId:i,stepKey:o,name:r,ts:Date.now()});let T=await m();if(T.ok){let k=performance.now()-y;return u({type:"step_success",workflowId:a,stepId:i,stepKey:o,name:r,ts:Date.now(),durationMs:k}),o&&u({type:"step_complete",workflowId:a,stepKey:o,name:r,ts:Date.now(),durationMs:k,result:F(T.value)}),T.value}else{let k=l(T.error),A=performance.now()-y,I=W(k,{origin:"result",resultCause:T.error});throw u({type:"step_error",workflowId:a,stepId:i,stepKey:o,name:r,ts:Date.now(),durationMs:A,error:I}),o&&u({type:"step_complete",workflowId:a,stepKey:o,name:r,ts:Date.now(),durationMs:A,result:D(k,{cause:T.error}),meta:{origin:"result",resultCause:T.error}}),c?.(I,r,w),U(I,{origin:"result",resultCause:T.error})}})()},p.fromNullable=(s,m,n,o)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.fromNullable() requires an explicit string ID as the first argument. Example: step.fromNullable("getUser", () => db.find(id), () => ({ type: "NOT_FOUND" }))');return p(s,async()=>{let r=await m();return r!=null?F(r):D(n())},o)},p.retry=(s,m,n)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.retry() requires an explicit string ID as the first argument. Example: step.retry("fetchData", () => fetchData(), { attempts: 3 })');return p(s,m,{key:n.key??s,retry:{attempts:n.attempts,backoff:n.backoff,initialDelay:n.initialDelay,maxDelay:n.maxDelay,jitter:n.jitter,shouldRetry:n.shouldRetry,onRetry:n.onRetry},timeout:n.timeout})},p.withTimeout=(s,m,n)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.withTimeout() requires an explicit string ID as the first argument. Example: step.withTimeout("slowOp", () => slowOp(), { ms: 5000 })');return p(s,m,{key:n.key??s,timeout:n})},p.sleep=(s,m,n)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let o=typeof m=="string"?De(m):m;if(!o)throw new Error(`step.sleep: invalid duration '${m}'`);let r=o.millis,i=n?.signal;return p(s,async()=>{if(P?.aborted||i?.aborted){let l=new Error("Sleep aborted");throw l.name="AbortError",l}return new Promise((l,E)=>{let y={timeoutId:void 0},T=()=>{y.timeoutId&&clearTimeout(y.timeoutId);let k=new Error("Sleep aborted");k.name="AbortError",E(k)};P?.addEventListener("abort",T,{once:!0}),i?.addEventListener("abort",T,{once:!0}),y.timeoutId=setTimeout(()=>{P?.removeEventListener("abort",T),i?.removeEventListener("abort",T),l(F(void 0))},r)})},{key:n?.key??s,description:n?.description})},p.all=((...s)=>{if(typeof s[0]!="string")throw new TypeError("step.all(name, ...): first argument must be a string (step name). Example: step.all('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let m=s[0],n=s[1];if(typeof n=="function")return q(m,n);if(n&&typeof n=="object"&&!Array.isArray(n)){let r=B(n);return te(r,{name:m})}throw new TypeError("step.all(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),p.race=(s,m)=>{let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),r=!1,i={scopeId:n,type:"race",winnerId:void 0};C.push(i);let l=()=>{if(r)return;r=!0;let E=C.findIndex(y=>y.scopeId===n);E!==-1&&C.splice(E,1),u({type:"scope_end",workflowId:a,scopeId:n,ts:Date.now(),durationMs:performance.now()-o,winnerId:i.winnerId})};u({type:"scope_start",workflowId:a,scopeId:n,scopeType:"race",name:s,ts:Date.now()});try{let E=await m();if(l(),!E.ok)throw c?.(E.error,s,w),U(E.error,{origin:"result",resultCause:E.cause});return E.value}catch(E){throw l(),E}})()},p.if=(s,m,n)=>n(),p.label=p.if,p.branch=async(s,m)=>{let{condition:n,then:o,else:r}=m;if(n())return await o();if(r)return await r()},p.arm=(s,m)=>({fn:s,errors:m}),p.forEach=async(s,m,n)=>{let o=[],r=n.maxIterations,i=0,l="run"in n,E=Symbol.asyncIterator in m?m:(async function*(){yield*m})();for await(let y of E){if(r!==void 0&&i>=r)break;let T;l?T=await n.run(y,i):T=await n.item.handler(y,i,p),o.push(T),i++}return o},p.item=s=>({__forEachItemHandler:!0,handler:s}),p.dep=(s,m)=>m,p.workflow=(s,m,n)=>p(s,m,n),p.map=async(s,m,n,o)=>{let r=o?.concurrency??m.length;return p(s,()=>r>=m.length?Ae(m.map((i,l)=>n(i,l))):(async()=>{let i=[];for(let l=0;l<m.length;l+=r){let E=m.slice(l,l+r),y=await Ae(E.map((T,k)=>n(T,l+k)));if(!y.ok)return y;i.push(...y.value)}return F(i)})(),{key:o?.key})},p.withFallback=(s,m,n)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.withFallback() requires an explicit string ID as the first argument. Example: step.withFallback("getUser", () => fetchUser(id), { fallback: () => fetchFromCache(id) })');let o=n.key??s,r=s,i=j(o),l=d;return(async()=>{let E=l?performance.now():0;d&&u({type:"step_start",workflowId:a,stepId:i,stepKey:o,name:r,ts:Date.now()});let y;try{y=await m()}catch(R){if($(R))throw u({type:"step_aborted",workflowId:a,stepId:i,stepKey:o,name:r,ts:Date.now(),durationMs:performance.now()-E}),R;let O;try{O=N(R)}catch(S){throw G(S)}if(n.on!==void 0&&n.on!==O){let S=performance.now()-E;throw u({type:"step_error",workflowId:a,stepId:i,stepKey:o,name:r,ts:Date.now(),durationMs:S,error:O}),o&&u({type:"step_complete",workflowId:a,stepKey:o,name:r,ts:Date.now(),durationMs:S,result:D(O,{cause:R}),meta:{origin:"throw",thrown:R}}),c?.(O,r,w),U(O,{origin:"throw",thrown:R})}let x;try{x=await n.fallback()}catch(S){if($(S))throw u({type:"step_aborted",workflowId:a,stepId:i,stepKey:o,name:r,ts:Date.now(),durationMs:performance.now()-E}),S;let h;try{h=N(S)}catch(Y){throw G(Y)}let J=performance.now()-E;throw u({type:"step_error",workflowId:a,stepId:i,stepKey:o,name:r,ts:Date.now(),durationMs:J,error:h}),o&&u({type:"step_complete",workflowId:a,stepKey:o,name:r,ts:Date.now(),durationMs:J,result:D(h,{cause:S}),meta:{origin:"throw",thrown:S}}),c?.(h,r,w),U(h,{origin:"throw",thrown:S})}if(x.ok){let S=performance.now()-E;return u({type:"step_success",workflowId:a,stepId:i,stepKey:o,name:r,ts:Date.now(),durationMs:S}),o&&u({type:"step_complete",workflowId:a,stepKey:o,name:r,ts:Date.now(),durationMs:S,result:x,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(O)}}),x.value}else{let S=performance.now()-E,h=W(x.error,{origin:"result",resultCause:x.cause});throw u({type:"step_error",workflowId:a,stepId:i,stepKey:o,name:r,ts:Date.now(),durationMs:S,error:h}),o&&u({type:"step_complete",workflowId:a,stepKey:o,name:r,ts:Date.now(),durationMs:S,result:x,meta:{origin:"result",resultCause:x.cause}}),c?.(h,r,w),U(h,{origin:"result",resultCause:x.cause})}}if(y.ok){let R=performance.now()-E;return u({type:"step_success",workflowId:a,stepId:i,stepKey:o,name:r,ts:Date.now(),durationMs:R}),o&&u({type:"step_complete",workflowId:a,stepKey:o,name:r,ts:Date.now(),durationMs:R,result:y}),y.value}let T=y.error;if(n.on!==void 0&&n.on!==T){let R=performance.now()-E,O=W(T,{origin:"result",resultCause:y.cause});throw u({type:"step_error",workflowId:a,stepId:i,stepKey:o,name:r,ts:Date.now(),durationMs:R,error:O}),o&&u({type:"step_complete",workflowId:a,stepKey:o,name:r,ts:Date.now(),durationMs:R,result:y,meta:{origin:"result",resultCause:y.cause}}),c?.(O,r,w),U(O,{origin:"result",resultCause:y.cause})}let k;try{k=await n.fallback()}catch(R){if($(R))throw u({type:"step_aborted",workflowId:a,stepId:i,stepKey:o,name:r,ts:Date.now(),durationMs:performance.now()-E}),R;let O;try{O=N(R)}catch(S){throw G(S)}let x=performance.now()-E;throw u({type:"step_error",workflowId:a,stepId:i,stepKey:o,name:r,ts:Date.now(),durationMs:x,error:O}),o&&u({type:"step_complete",workflowId:a,stepKey:o,name:r,ts:Date.now(),durationMs:x,result:D(O,{cause:R}),meta:{origin:"throw",thrown:R}}),c?.(O,r,w),U(O,{origin:"throw",thrown:R})}if(k.ok){let R=performance.now()-E;return u({type:"step_success",workflowId:a,stepId:i,stepKey:o,name:r,ts:Date.now(),durationMs:R}),o&&u({type:"step_complete",workflowId:a,stepKey:o,name:r,ts:Date.now(),durationMs:R,result:k,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(T)}}),k.value}let A=performance.now()-E,I=W(k.error,{origin:"result",resultCause:k.cause});throw u({type:"step_error",workflowId:a,stepId:i,stepKey:o,name:r,ts:Date.now(),durationMs:A,error:I}),o&&u({type:"step_complete",workflowId:a,stepKey:o,name:r,ts:Date.now(),durationMs:A,result:k,meta:{origin:"result",resultCause:k.cause}}),c?.(I,r,w),U(I,{origin:"result",resultCause:k.cause})})()},p.withResource=(s,m)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.withResource() requires an explicit string ID as the first argument. Example: step.withResource("useDb", { acquire: () => connect(), use: (db) => query(db), release: (db) => db.close() })');let n=s,o=s,r=j(n),i=d;return(async()=>{let l=i?performance.now():0;d&&u({type:"step_start",workflowId:a,stepId:r,stepKey:n,name:o,ts:Date.now()});let E;try{E=await m.acquire()}catch(x){if($(x))throw u({type:"step_aborted",workflowId:a,stepId:r,stepKey:n,name:o,ts:Date.now(),durationMs:performance.now()-l}),x;let S;try{S=N(x)}catch(J){throw G(J)}let h=performance.now()-l;throw u({type:"step_error",workflowId:a,stepId:r,stepKey:n,name:o,ts:Date.now(),durationMs:h,error:S}),n&&u({type:"step_complete",workflowId:a,stepKey:n,name:o,ts:Date.now(),durationMs:h,result:D(S,{cause:x}),meta:{origin:"throw",thrown:x}}),c?.(S,o,w),U(S,{origin:"throw",thrown:x})}if(!E.ok){let x=performance.now()-l,S=W(E.error,{origin:"result",resultCause:E.cause});throw u({type:"step_error",workflowId:a,stepId:r,stepKey:n,name:o,ts:Date.now(),durationMs:x,error:S}),n&&u({type:"step_complete",workflowId:a,stepKey:n,name:o,ts:Date.now(),durationMs:x,result:E,meta:{origin:"result",resultCause:E.cause}}),c?.(S,o,w),U(S,{origin:"result",resultCause:E.cause})}let y=E.value,T,k,A=!1;try{T=await m.use(y)}catch(x){if($(x)){try{await m.release(y)}catch(S){console.warn(`[awaitly] step.withResource("${s}"): release threw after earlyExit:`,S)}throw x}k=x,A=!0}try{await m.release(y)}catch(x){console.warn(`[awaitly] step.withResource("${s}"): release threw:`,x)}if(A){let x;try{x=N(k)}catch(h){throw G(h)}let S=performance.now()-l;throw u({type:"step_error",workflowId:a,stepId:r,stepKey:n,name:o,ts:Date.now(),durationMs:S,error:x}),n&&u({type:"step_complete",workflowId:a,stepKey:n,name:o,ts:Date.now(),durationMs:S,result:D(x,{cause:k}),meta:{origin:"throw",thrown:k}}),c?.(x,o,w),U(x,{origin:"throw",thrown:k})}let I=T;if(I.ok){let x=performance.now()-l;return u({type:"step_success",workflowId:a,stepId:r,stepKey:n,name:o,ts:Date.now(),durationMs:x}),n&&u({type:"step_complete",workflowId:a,stepKey:n,name:o,ts:Date.now(),durationMs:x,result:I}),I.value}let R=performance.now()-l,O=W(I.error,{origin:"result",resultCause:I.cause});throw u({type:"step_error",workflowId:a,stepId:r,stepKey:n,name:o,ts:Date.now(),durationMs:R,error:O}),n&&u({type:"step_complete",workflowId:a,stepKey:n,name:o,ts:Date.now(),durationMs:R,result:I,meta:{origin:"result",resultCause:I.cause}}),c?.(O,o,w),U(O,{origin:"result",resultCause:I.cause})})()};let V=await t({step:p});if(process.env.NODE_ENV!=="production"&&V!==null&&typeof V=="object"&&"ok"in V&&typeof V.ok=="boolean"){let s=V;(s.ok===!0&&"value"in s||s.ok===!1&&"error"in s)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
2
-
3
- Incorrect: return ok({ data });
4
- Correct: return { data };
5
-
6
- See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return F(V)}catch(p){if(Ve(p))throw p.thrown;if($(p)){let q=p.meta.origin==="throw"?p.meta.thrown:p.meta.origin==="result"?p.meta.resultCause:void 0;return D(p.error,{cause:q})}let B=N(p);return c?.(B,"unexpected",w),D(B,{cause:p})}}Se.strict=(t,e)=>Se(t,e);async function Ae(t){return t.length===0?F([]):new Promise(e=>{let c=!1,d=t.length,_=new Array(t.length);for(let f=0;f<t.length;f++){let b=f;Promise.resolve(t[b]).catch(w=>D({type:"PROMISE_REJECTED",cause:w},{cause:{type:"PROMISE_REJECTION",reason:w}})).then(w=>{if(!c){if(!w.ok){c=!0,e(w);return}_[b]=w.value,d--,d===0&&e(F(_))}})}})}function We(t){return typeof t=="object"&&t!==null&&t.type==="EVENT_TIMEOUT"}function qe(t){return typeof t=="object"&&t!==null&&t.type==="INVALID_EMITTER"}function Ye(t,e){return new Promise(c=>{try{t((d,_)=>{if(d){let f=e?.onError?e.onError(d):d;c(D(f,{cause:d}))}else c(F(_))})}catch(d){let _=d instanceof Error?d:new Error(String(d)),f=e?.onError?e.onError(_):_;c(D(f,{cause:d}))}})}function me(t){return typeof t=="object"&&t!==null&&"on"in t&&"off"in t&&typeof t.on=="function"&&typeof t.off=="function"}function Ee(t){return typeof t=="object"&&t!==null&&"addEventListener"in t&&"removeEventListener"in t&&typeof t.addEventListener=="function"&&typeof t.removeEventListener=="function"}function ze(t,e,c){return new Promise(d=>{let _,f=!1,b=me(t)?(C,M)=>t.on(C,M):Ee(t)?(C,M)=>t.addEventListener(C,M):null,w=me(t)?(C,M)=>t.off(C,M):Ee(t)?(C,M)=>t.removeEventListener(C,M):null;if(!b||!w){d(D({type:"INVALID_EMITTER",message:"Object does not have on/off or addEventListener/removeEventListener"}));return}let P=(...C)=>{f||(f=!0,N(),d(F(C[0])))},a=(...C)=>{if(f)return;f=!0,N();let M=C[0],j=c?.onError?c.onError(M):M;d(D(j,{cause:M}))},N=()=>{_&&clearTimeout(_),w(e.success,P),e.error&&w(e.error,a)};b(e.success,P),e.error&&b(e.error,a),e.timeout&&(_=setTimeout(()=>{if(f)return;f=!0,N();let C={type:"EVENT_TIMEOUT",event:e.success,timeoutMs:e.timeout};d(D(C))},e.timeout))})}function Je(t){return me(t)||Ee(t)}export{Ye as fromCallback,ze as fromEvent,Je as isEventEmitterLike,We as isEventTimeoutError,qe as isInvalidEmitterError};
7
- //# sourceMappingURL=adapters.js.map