awaitly 1.35.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.
- package/dist/{duration.d.ts → di-BDlT7InM.d.cts} +15 -1
- package/dist/{duration.d.cts → di-BbFFfO8y.d.ts} +15 -1
- package/dist/errors-DtXvrCiO.d.cts +708 -0
- package/dist/errors-DtXvrCiO.d.ts +708 -0
- package/dist/index.cjs +4594 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1970 -141
- package/dist/index.d.ts +1970 -141
- package/dist/index.js +4398 -1
- package/dist/index.js.map +1 -1
- package/dist/result.cjs +641 -1
- package/dist/result.cjs.map +1 -1
- package/dist/result.d.cts +29 -4
- package/dist/result.d.ts +29 -4
- package/dist/result.js +561 -1
- package/dist/result.js.map +1 -1
- package/dist/testing.cjs +4202 -8
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +2 -6
- package/dist/testing.d.ts +2 -6
- package/dist/testing.js +4154 -8
- package/dist/testing.js.map +1 -1
- package/dist/{run-entry-DGs0tySr.d.cts → types-B8NfNRGX.d.ts} +1078 -1502
- package/dist/{run-entry-BOuNyVoO.d.ts → types-BZ2f4MRR.d.cts} +1078 -1502
- package/dist/workflow.cjs +7096 -6
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +3346 -22
- package/dist/workflow.d.ts +3346 -22
- package/dist/workflow.js +6929 -6
- package/dist/workflow.js.map +1 -1
- package/package.json +3 -168
- package/dist/adapters.cjs +0 -7
- package/dist/adapters.cjs.map +0 -1
- package/dist/adapters.d.cts +0 -179
- package/dist/adapters.d.ts +0 -179
- package/dist/adapters.js +0 -7
- package/dist/adapters.js.map +0 -1
- package/dist/batch.cjs +0 -7
- package/dist/batch.cjs.map +0 -1
- package/dist/batch.d.cts +0 -200
- package/dist/batch.d.ts +0 -200
- package/dist/batch.js +0 -7
- package/dist/batch.js.map +0 -1
- package/dist/bind-deps.cjs +0 -2
- package/dist/bind-deps.cjs.map +0 -1
- package/dist/bind-deps.d.cts +0 -28
- package/dist/bind-deps.d.ts +0 -28
- package/dist/bind-deps.js +0 -2
- package/dist/bind-deps.js.map +0 -1
- package/dist/cache.cjs +0 -2
- package/dist/cache.cjs.map +0 -1
- package/dist/cache.d.cts +0 -269
- package/dist/cache.d.ts +0 -269
- package/dist/cache.js +0 -2
- package/dist/cache.js.map +0 -1
- package/dist/circuit-breaker.cjs +0 -7
- package/dist/circuit-breaker.cjs.map +0 -1
- package/dist/circuit-breaker.d.cts +0 -211
- package/dist/circuit-breaker.d.ts +0 -211
- package/dist/circuit-breaker.js +0 -7
- package/dist/circuit-breaker.js.map +0 -1
- package/dist/conditional.cjs +0 -2
- package/dist/conditional.cjs.map +0 -1
- package/dist/conditional.d.cts +0 -252
- package/dist/conditional.d.ts +0 -252
- package/dist/conditional.js +0 -2
- package/dist/conditional.js.map +0 -1
- package/dist/core.cjs +0 -7
- package/dist/core.cjs.map +0 -1
- package/dist/core.d.cts +0 -5
- package/dist/core.d.ts +0 -5
- package/dist/core.js +0 -7
- package/dist/core.js.map +0 -1
- package/dist/di-By77n4Fa.d.ts +0 -15
- package/dist/di-OJfsohf-.d.cts +0 -15
- package/dist/diagnostics.cjs +0 -8
- package/dist/diagnostics.cjs.map +0 -1
- package/dist/diagnostics.d.cts +0 -68
- package/dist/diagnostics.d.ts +0 -68
- package/dist/diagnostics.js +0 -8
- package/dist/diagnostics.js.map +0 -1
- package/dist/durable.cjs +0 -11
- package/dist/durable.cjs.map +0 -1
- package/dist/durable.d.cts +0 -9
- package/dist/durable.d.ts +0 -9
- package/dist/durable.js +0 -11
- package/dist/durable.js.map +0 -1
- package/dist/duration.cjs +0 -2
- package/dist/duration.cjs.map +0 -1
- package/dist/duration.js +0 -2
- package/dist/duration.js.map +0 -1
- package/dist/engine.cjs +0 -11
- package/dist/engine.cjs.map +0 -1
- package/dist/engine.d.cts +0 -115
- package/dist/engine.d.ts +0 -115
- package/dist/engine.js +0 -11
- package/dist/engine.js.map +0 -1
- package/dist/errors.cjs +0 -2
- package/dist/errors.cjs.map +0 -1
- package/dist/errors.d.cts +0 -361
- package/dist/errors.d.ts +0 -361
- package/dist/errors.js +0 -2
- package/dist/errors.js.map +0 -1
- package/dist/fetch.cjs +0 -7
- package/dist/fetch.cjs.map +0 -1
- package/dist/fetch.d.cts +0 -86
- package/dist/fetch.d.ts +0 -86
- package/dist/fetch.js +0 -7
- package/dist/fetch.js.map +0 -1
- package/dist/flow.cjs +0 -7
- package/dist/flow.cjs.map +0 -1
- package/dist/flow.d.cts +0 -163
- package/dist/flow.d.ts +0 -163
- package/dist/flow.js +0 -7
- package/dist/flow.js.map +0 -1
- package/dist/functional.cjs +0 -2
- package/dist/functional.cjs.map +0 -1
- package/dist/functional.d.cts +0 -444
- package/dist/functional.d.ts +0 -444
- package/dist/functional.js +0 -2
- package/dist/functional.js.map +0 -1
- package/dist/guards-4sV7mTqj.d.cts +0 -72
- package/dist/guards-BIX05ALH.d.ts +0 -72
- package/dist/hitl-DFn4Xa_l.d.cts +0 -468
- package/dist/hitl-DU5VpKq7.d.ts +0 -468
- package/dist/hitl.cjs +0 -7
- package/dist/hitl.cjs.map +0 -1
- package/dist/hitl.d.cts +0 -442
- package/dist/hitl.d.ts +0 -442
- package/dist/hitl.js +0 -7
- package/dist/hitl.js.map +0 -1
- package/dist/index-CnvBryQB.d.ts +0 -417
- package/dist/index-DEZEf8Fs.d.cts +0 -417
- package/dist/match-entry-DjI2bLpD.d.cts +0 -209
- package/dist/match-entry-DjI2bLpD.d.ts +0 -209
- package/dist/match.cjs +0 -2
- package/dist/match.cjs.map +0 -1
- package/dist/match.d.cts +0 -1
- package/dist/match.d.ts +0 -1
- package/dist/match.js +0 -2
- package/dist/match.js.map +0 -1
- package/dist/otel.cjs +0 -2
- package/dist/otel.cjs.map +0 -1
- package/dist/otel.d.cts +0 -188
- package/dist/otel.d.ts +0 -188
- package/dist/otel.js +0 -2
- package/dist/otel.js.map +0 -1
- package/dist/persistence-entry-B-8PjnSR.d.cts +0 -831
- package/dist/persistence-entry-D8zRkLiT.d.ts +0 -831
- package/dist/persistence.cjs +0 -2
- package/dist/persistence.cjs.map +0 -1
- package/dist/persistence.d.cts +0 -7
- package/dist/persistence.d.ts +0 -7
- package/dist/persistence.js +0 -2
- package/dist/persistence.js.map +0 -1
- package/dist/policies.cjs +0 -2
- package/dist/policies.cjs.map +0 -1
- package/dist/policies.d.cts +0 -379
- package/dist/policies.d.ts +0 -379
- package/dist/policies.js +0 -2
- package/dist/policies.js.map +0 -1
- package/dist/ratelimit.cjs +0 -7
- package/dist/ratelimit.cjs.map +0 -1
- package/dist/ratelimit.d.cts +0 -458
- package/dist/ratelimit.d.ts +0 -458
- package/dist/ratelimit.js +0 -7
- package/dist/ratelimit.js.map +0 -1
- package/dist/reliability.cjs +0 -11
- package/dist/reliability.cjs.map +0 -1
- package/dist/reliability.d.cts +0 -11
- package/dist/reliability.d.ts +0 -11
- package/dist/reliability.js +0 -11
- package/dist/reliability.js.map +0 -1
- package/dist/resolver.cjs +0 -7
- package/dist/resolver.cjs.map +0 -1
- package/dist/resolver.d.cts +0 -68
- package/dist/resolver.d.ts +0 -68
- package/dist/resolver.js +0 -7
- package/dist/resolver.js.map +0 -1
- package/dist/resource.cjs +0 -7
- package/dist/resource.cjs.map +0 -1
- package/dist/resource.d.cts +0 -174
- package/dist/resource.d.ts +0 -174
- package/dist/resource.js +0 -7
- package/dist/resource.js.map +0 -1
- package/dist/result/retry.cjs +0 -2
- package/dist/result/retry.cjs.map +0 -1
- package/dist/result/retry.d.cts +0 -70
- package/dist/result/retry.d.ts +0 -70
- package/dist/result/retry.js +0 -2
- package/dist/result/retry.js.map +0 -1
- package/dist/retry.cjs +0 -2
- package/dist/retry.cjs.map +0 -1
- package/dist/retry.d.cts +0 -388
- package/dist/retry.d.ts +0 -388
- package/dist/retry.js +0 -2
- package/dist/retry.js.map +0 -1
- package/dist/run.cjs +0 -7
- package/dist/run.cjs.map +0 -1
- package/dist/run.d.cts +0 -4
- package/dist/run.d.ts +0 -4
- package/dist/run.js +0 -7
- package/dist/run.js.map +0 -1
- package/dist/saga.cjs +0 -11
- package/dist/saga.cjs.map +0 -1
- package/dist/saga.d.cts +0 -164
- package/dist/saga.d.ts +0 -164
- package/dist/saga.js +0 -11
- package/dist/saga.js.map +0 -1
- package/dist/singleflight.cjs +0 -2
- package/dist/singleflight.cjs.map +0 -1
- package/dist/singleflight.d.cts +0 -145
- package/dist/singleflight.d.ts +0 -145
- package/dist/singleflight.js +0 -2
- package/dist/singleflight.js.map +0 -1
- package/dist/slugs.cjs +0 -2
- package/dist/slugs.cjs.map +0 -1
- package/dist/slugs.d.cts +0 -67
- package/dist/slugs.d.ts +0 -67
- package/dist/slugs.js +0 -2
- package/dist/slugs.js.map +0 -1
- package/dist/streaming.cjs +0 -9
- package/dist/streaming.cjs.map +0 -1
- package/dist/streaming.d.cts +0 -596
- package/dist/streaming.d.ts +0 -596
- package/dist/streaming.js +0 -9
- package/dist/streaming.js.map +0 -1
- package/dist/tagged-error.cjs +0 -2
- package/dist/tagged-error.cjs.map +0 -1
- package/dist/tagged-error.d.cts +0 -275
- package/dist/tagged-error.d.ts +0 -275
- package/dist/tagged-error.js +0 -2
- package/dist/tagged-error.js.map +0 -1
- package/dist/types-BziYHFkD.d.ts +0 -323
- package/dist/types-C5jLEUqY.d.cts +0 -323
- package/dist/webhook.cjs +0 -7
- package/dist/webhook.cjs.map +0 -1
- package/dist/webhook.d.cts +0 -499
- package/dist/webhook.d.ts +0 -499
- package/dist/webhook.js +0 -7
- package/dist/webhook.js.map +0 -1
package/dist/adapters.d.cts
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import { c as AsyncResult } from './run-entry-DGs0tySr.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 };
|
package/dist/adapters.d.ts
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import { c as AsyncResult } from './run-entry-BOuNyVoO.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 Fe={"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 Te(e){return`https://jagreehal.github.io/awaitly/rules/#${e}`}var sr=Object.keys(Fe);var te=class extends Error{_tag};function F(e,r){return class extends te{_tag=e;constructor(m,y){let h=r?.message?r.message(m??{}):e;if(super(h),this.name=e,r?.slug!==void 0){if(!r.hint)throw new TypeError(`TaggedError: 'hint' is required when 'slug' is set (slug: "${r.slug}")`);Object.defineProperty(this,"code",{value:r.slug,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"hint",{value:r.hint,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"docsUrl",{value:Te(r.slug),enumerable:!0,writable:!1,configurable:!1})}if(Object.setPrototypeOf(this,new.target.prototype),m&&typeof m=="object"){let i;if(r?.slug!==void 0){let{_tag:K,name:S,message:O,stack:s,code:N,hint:B,docsUrl:fe,...re}=m;i=re}else{let{_tag:K,name:S,message:O,stack:s,...N}=m;i=N}let f=Object.prototype.hasOwnProperty.call(i,"cause"),A=f?i.cause:void 0;f&&delete i.cause;let _=y?.cause!==void 0;if(f&&_)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,i),f&&(this.cause=A),_&&(this.cause=y?.cause)}else y?.cause!==void 0&&(this.cause=y.cause)}}}Object.defineProperty(F,Symbol.hasInstance,{value:e=>e instanceof te});(h=>{function e(i){return i instanceof Error}h.isError=e;function r(i){return i instanceof te}h.isTaggedError=r;function m(i,f){let A=i._tag,_=f[A];return _(i)}h.match=m;function y(i,f,A){let _=i._tag,K=f[_];return K?K(i):A(i)}h.matchPartial=y})(F||={});var ke=class extends F("TimeoutError",{slug:"runtime-step-timeout",hint:"Increase the step's timeout option, or check why the upstream operation is slow.",message:r=>r.operation?`TimeoutError: ${r.operation} timed out after ${r.ms}ms`:`TimeoutError: Operation timed out after ${r.ms}ms`}){},Re=class extends F("RetryExhaustedError",{slug:"runtime-retry-exhausted",hint:"All retry attempts failed. Inspect lastError and decide whether to surface it or compensate.",message:r=>r.operation?`RetryExhaustedError: ${r.operation} failed after ${r.attempts} attempts`:`RetryExhaustedError: Operation failed after ${r.attempts} attempts`}){},ge=class extends F("RateLimitError",{slug:"runtime-rate-limit",hint:"Wait retryAfterMs before retrying, or apply step.cache to deduplicate calls.",message:r=>r.limiterName?`RateLimitError: Rate limit exceeded for ${r.limiterName}${r.retryAfterMs?`, retry after ${r.retryAfterMs}ms`:""}`:`RateLimitError: Rate limit exceeded${r.retryAfterMs?`, retry after ${r.retryAfterMs}ms`:""}`}){},xe=class extends F("CircuitBreakerOpenError",{slug:"runtime-circuit-open",hint:"The circuit is open. Wait for it to half-open or fall back to a degraded path.",message:r=>`CircuitBreakerOpenError: Circuit ${r.circuitName} is ${r.state??"OPEN"}${r.retryAfterMs?`, retry after ${Math.ceil(r.retryAfterMs/1e3)}s`:""}`}){},Ce=class extends F("ValidationError",{message:r=>`ValidationError: Invalid ${r.field} - ${r.reason}`}){},he=class extends F("NotFoundError",{message:r=>r.id?`NotFoundError: ${r.resource} with id ${r.id} not found`:`NotFoundError: ${r.resource} not found`}){},be=class extends F("UnauthorizedError",{message:r=>r.reason?`UnauthorizedError: ${r.reason}`:r.action&&r.resource?`UnauthorizedError: Not authorized to ${r.action} ${r.resource}`:"UnauthorizedError: Access denied"}){},Ae=class extends F("NetworkError",{message:r=>r.url?`NetworkError: ${r.reason} (${r.url})`:`NetworkError: ${r.reason}`}){},ve=class extends F("CompensationError",{slug:"runtime-saga-compensation",hint:"A saga compensation step failed. Inspect compensationError and ensure compensation is idempotent.",message:r=>`CompensationError: Failed to compensate step ${r.step}`}){},se=class extends F("UnexpectedError",{slug:"runtime-unexpected",hint:"An unexpected exception escaped a step. Inspect cause; consider returning a typed Result instead of throwing.",message:r=>`UnexpectedError: ${r.cause instanceof Error?r.cause.message:String(r.cause??"unknown")}`}){};function Se(e){return{ok:!0,value:e}}var je=e=>typeof e=="object"&&e!==null&&"ok"in e&&typeof e.ok=="boolean"&&(e.ok?"value"in e:"error"in e),Pe=(e,r)=>{let m={},y=new Map;for(let h of Object.keys(e)){let i=e[h];typeof i=="function"&&(m[h]=(...f)=>{let A=(y.get(h)??0)+1;y.set(h,A);let _=A===1?h:`${h}#${A}`;return r(_,async()=>{let K=await i(...f);return je(K)?K:Se(K)})})}return m};function Le(e){let r=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!r)return;let m=parseFloat(r[1]),y=r[2].toLowerCase();return{_tag:"Duration",millis:m*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[y]??1)}}function Be(e){return new se({cause:e})}function L(e){return{ok:!0,value:e}}function D(e,r){let m=r?.cause;return{ok:!1,error:e,...m!==void 0?{cause:m}:{}}}function Ve(e){if(e==null)return"unknown";if(typeof e=="string")return e.trim()||"unknown";if(typeof e=="object"){let r=e;if(typeof r._tag=="string"){let m=r._tag.trim();if(m)return m}if(typeof r.tag=="string"){let m=r.tag.trim();if(m)return m}if(typeof r.code=="string"){let m=r.code.trim();if(m)return m}else if(typeof r.code=="number")return String(r.code);if(e instanceof Error&&e.name){let m=e.name.trim();if(m)return m}}return"unknown"}function He(e,r){if(!(!r||!e))return r[e]}function $e(e){let{intent:r,domain:m,owner:y,tags:h,stateChanges:i,emits:f,calls:A}=e;if(!r&&!m&&!y&&!h?.length&&!i?.length&&!f?.length&&!A?.length)return;let _={};return r&&(_.intent=r),m&&(_.domain=m),y&&(_.owner=y),h?.length&&(_.tags=h),i?.length&&(_.stateChanges=i),f?.length&&(_.emits=f),A?.length&&(_.calls=A),_}function V(e,r,m,y,h){let i=Ve(e),f=He(i,r),A={tag:i,origin:m};return f!==void 0&&(A.classification=f),y!==void 0&&(A.attempt=y),h!==void 0&&(A.cumulativeDurationMs=h),A}var ee=Symbol.for("step_timeout_marker");function Oe(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:ee in e}function We(e){if(!(typeof e!="object"||e===null)){if(e.type==="STEP_TIMEOUT"){let r=e;return{timeoutMs:r.timeoutMs,stepName:r.stepName,stepKey:r.stepKey,attempt:r.attempt}}if(ee in e)return e[ee]}}var Me=Symbol("early-exit");function qe(e,r){return{[Me]:!0,error:e,meta:r}}function Ye(e){return typeof e=="object"&&e!==null&&e[Me]===!0}var De=Symbol("mapper-exception");function Z(e){return{[De]:!0,thrown:e}}function ze(e){return typeof e=="object"&&e!==null&&e[De]===!0}function Ee(e,r){let{backoff:m,initialDelay:y,maxDelay:h,jitter:i}=r,f;switch(m){case"fixed":f=y;break;case"linear":f=y*e;break;case"exponential":f=y*Math.pow(2,e-1);break}if(f=Math.min(f,h),i){let A=f*.25*Math.random();f=f+A}return Math.floor(f)}function de(e){return new Promise(r=>setTimeout(r,e))}var _e=Symbol("timeout"),ae=Symbol("timeout-option");function Je(e){return typeof e=="object"&&e!==null&&e[ae]===!0}async function Ge(e,r,m,y){let h=new AbortController,i=r.onTimeout??"error",f=()=>typeof i=="function"?i({name:m.name,key:m.key,ms:r.ms}):r.error??{type:"STEP_TIMEOUT",stepName:m.name,stepKey:m.key,timeoutMs:r.ms,attempt:m.attempt},A;y?.aborted&&h.abort(y.reason);let _;y&&!y.aborted&&(_=()=>h.abort(y.reason),y.addEventListener("abort",_,{once:!0}));let K=new Promise((O,s)=>{A=setTimeout(()=>{if(i!=="disconnect"&&h.abort(),i==="option"){s({[ae]:!0,ms:r.ms});return}s({[_e]:!0,error:f()})},r.ms)}),S;r.signal?S=Promise.resolve(e(h.signal)):S=Promise.resolve(e());try{return await Promise.race([S,K])}catch(O){if(typeof O=="object"&&O!==null&&O[ae]===!0)throw{[ae]:!0,ms:r.ms};if(typeof O=="object"&&O!==null&&O[_e]===!0){i==="disconnect"&&S.catch(()=>{});let s=O.error;if(typeof s=="object"&&s!==null&&s.type!=="STEP_TIMEOUT"){let N={timeoutMs:r.ms,stepName:m.name,stepKey:m.key,attempt:m.attempt};ee in s?s[ee]=N:Object.defineProperty(s,ee,{value:N,enumerable:!1,writable:!0,configurable:!1})}throw s}throw O}finally{clearTimeout(A),_&&y&&y.removeEventListener("abort",_)}}var Q={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,shouldRetry:()=>!0,onRetry:()=>{}};async function me(e,r,m){if(typeof e!="function"){let p=e,j=r;if(typeof j!="function")throw new TypeError("[awaitly] run(deps, fn) requires a callback as the second argument. Example: run({ getUser }, async (s) => s.getUser(id))");return me(({step:G})=>j(Pe(p,G),{step:G}),m)}let y=e,h=r,{onError:i,onEvent:f,catchUnexpected:A,workflowId:_,workflowName:K,context:S,_workflowSignal:O}=h&&typeof h=="object"?h:{},s=_??crypto.randomUUID(),N=A??Be,B=[],fe=0,re=p=>p??`step_${++fe}`,c=p=>{let j=p.context!==void 0||S===void 0?p:{...p,context:S},$=K!==void 0&&j.workflowName===void 0?{...j,workflowName:K}:j;if($.type==="step_success"){let G=$.stepId;for(let oe=B.length-1;oe>=0;oe--){let H=B[oe];if(H.type==="race"&&!H.winnerId){H.winnerId=G;break}}}f?.($,S)},U=qe,J=p=>Ye(p),q=(p,j)=>p,Ue=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 j=function(a){let E={};for(let[t,o]of Object.entries(a))if(typeof o=="function")E[t]=o;else if(o&&typeof o=="object"&&"fn"in o)E[t]=o.fn;else throw new TypeError(`step.all: operation "${t}" must be a function or { fn, errors? } object`);return E},$=function(a,E){let t=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),n=!1;B.push({scopeId:t,type:"parallel"});let u=()=>{if(n)return;n=!0;let l=B.findIndex(d=>d.scopeId===t);l!==-1&&B.splice(l,1),c({type:"scope_end",workflowId:s,scopeId:t,ts:Date.now(),durationMs:performance.now()-o})};c({type:"scope_start",workflowId:s,scopeId:t,scopeType:"parallel",name:a,ts:Date.now()});try{let l=await E();if(u(),!l.ok)throw i?.(l.error,a,S),U(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw u(),l}})()},G=function(a,E){let t=Object.keys(a),o=E.name??`Parallel(${t.join(", ")})`,n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let u=performance.now(),l=!1;B.push({scopeId:n,type:"parallel"});let d=()=>{if(l)return;l=!0;let w=B.findIndex(T=>T.scopeId===n);w!==-1&&B.splice(w,1),c({type:"scope_end",workflowId:s,scopeId:n,ts:Date.now(),durationMs:performance.now()-u})};c({type:"scope_start",workflowId:s,scopeId:n,scopeType:"parallel",name:o,ts:Date.now()});try{let w=await new Promise(R=>{if(t.length===0){R([]);return}let v=!1,M=t.length,g=new Array(t.length);for(let I=0;I<t.length;I++){let x=t[I],b=I;Promise.resolve(a[x]()).catch(C=>D({type:"PROMISE_REJECTED",cause:C},{cause:{type:"PROMISE_REJECTION",reason:C}})).then(C=>{if(!v){if(!C.ok){v=!0,R([{key:x,result:C}]);return}g[b]={key:x,result:C},M--,M===0&&R(g)}})}});d();let T={};for(let{key:R,result:v}of w){if(!v.ok)throw i?.(v.error,R,S),U(v.error,{origin:"result",resultCause:v.cause});T[R]=v.value}return T}catch(w){throw d(),w}})()};var nr=j,tr=$,or=G;let p=(a,E,t)=>(async()=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let o=t??{},n=$e(o),u=a,l=o.key??a,d=o.key??a,{description:w,retry:T,timeout:R}=o,v=re(l),M=f,g=M?performance.now():0,x=Ue(E)?()=>E:E,C={attempts:Math.max(1,T?.attempts??1),backoff:T?.backoff??Q.backoff,initialDelay:T?.initialDelay??Q.initialDelay,maxDelay:T?.maxDelay??Q.maxDelay,jitter:T?.jitter??Q.jitter,shouldRetry:T?.shouldRetry??Q.shouldRetry,onRetry:T?.onRetry??Q.onRetry};f&&c({type:"step_start",workflowId:s,stepId:v,stepKey:l,name:u,description:w,ts:Date.now(),...n&&{metadata:n}});let X;for(let P=1;P<=C.attempts;P++){let Ke=M?performance.now():0;try{let k;if(R?k=await Ge(x,R,{name:u,key:l,attempt:P},O):k=await x(),k.ok){let z=performance.now()-g;return c({type:"step_success",workflowId:s,stepId:v,stepKey:l,name:u,description:w,ts:Date.now(),durationMs:z,...n&&{metadata:n}}),d&&c({type:"step_complete",workflowId:s,stepKey:d,name:u,description:w,ts:Date.now(),durationMs:z,result:k,...n&&{metadata:n}}),k.value}if(X=k,P<C.attempts&&C.shouldRetry(k.error,P)){let z=Ee(P,C);c({type:"step_retry",workflowId:s,stepId:v,stepKey:l,name:u,ts:Date.now(),attempt:P+1,maxAttempts:C.attempts,delayMs:z,error:k.error,...n&&{metadata:n},diagnostics:V(k.error,o.errorMeta,"result",P,performance.now()-g)}),C.onRetry(k.error,P,z),await de(z);continue}C.attempts>1&&c({type:"step_retries_exhausted",workflowId:s,stepId:v,stepKey:l,name:u,ts:Date.now(),durationMs:performance.now()-g,attempts:P,lastError:k.error,...n&&{metadata:n},diagnostics:V(k.error,o.errorMeta,"result",P,performance.now()-g)});break}catch(k){let z=performance.now()-Ke;if(Je(k)){let W=k.ms;c({type:"step_timeout",workflowId:s,stepId:v,stepKey:l,name:u,ts:Date.now(),timeoutMs:W,attempt:P,...n&&{metadata:n},diagnostics:V(k,o.errorMeta,"timeout",P)}),c({type:"step_success",workflowId:s,stepId:v,stepKey:l,name:u,description:w,ts:Date.now(),durationMs:performance.now()-g,...n&&{metadata:n}}),d&&c({type:"step_complete",workflowId:s,stepKey:d,name:u,description:w,ts:Date.now(),durationMs:performance.now()-g,result:L(void 0),...n&&{metadata:n}});return}if(J(k))throw c({type:"step_aborted",workflowId:s,stepId:v,stepKey:l,name:u,description:w,ts:Date.now(),durationMs:z,...n&&{metadata:n}}),k;if(Oe(k)){let W=We(k),Ne=R?.ms??W?.timeoutMs??0;if(c({type:"step_timeout",workflowId:s,stepId:v,stepKey:l,name:u,ts:Date.now(),timeoutMs:Ne,attempt:P,...n&&{metadata:n},diagnostics:V(k,o.errorMeta,"timeout",P)}),P<C.attempts&&C.shouldRetry(k,P)){let pe=Ee(P,C);c({type:"step_retry",workflowId:s,stepId:v,stepKey:l,name:u,ts:Date.now(),attempt:P+1,maxAttempts:C.attempts,delayMs:pe,error:k,...n&&{metadata:n},diagnostics:V(k,o.errorMeta,"timeout",P,performance.now()-g)}),C.onRetry(k,P,pe),await de(pe);continue}C.attempts>1&&c({type:"step_retries_exhausted",workflowId:s,stepId:v,stepKey:l,name:u,ts:Date.now(),durationMs:performance.now()-g,attempts:P,lastError:k,...n&&{metadata:n},diagnostics:V(k,o.errorMeta,"timeout",P,performance.now()-g)});let le=performance.now()-g;throw c({type:"step_error",workflowId:s,stepId:v,stepKey:l,name:u,description:w,ts:Date.now(),durationMs:le,error:k,...n&&{metadata:n},diagnostics:V(k,o.errorMeta,"timeout",P,le)}),d&&c({type:"step_complete",workflowId:s,stepKey:d,name:u,description:w,ts:Date.now(),durationMs:le,result:D(k,{cause:k}),meta:{origin:"throw",thrown:k},...n&&{metadata:n}}),i?.(k,u,S),U(k,{origin:"throw",thrown:k})}if(P<C.attempts&&C.shouldRetry(k,P)){let W=Ee(P,C);c({type:"step_retry",workflowId:s,stepId:v,stepKey:l,name:u,ts:Date.now(),attempt:P+1,maxAttempts:C.attempts,delayMs:W,error:k,...n&&{metadata:n},diagnostics:V(k,o.errorMeta,"throw",P,performance.now()-g)}),C.onRetry(k,P,W),await de(W);continue}C.attempts>1&&!Oe(k)&&c({type:"step_retries_exhausted",workflowId:s,stepId:v,stepKey:l,name:u,ts:Date.now(),durationMs:performance.now()-g,attempts:P,lastError:k,...n&&{metadata:n},diagnostics:V(k,o.errorMeta,"throw",P,performance.now()-g)});let ce=performance.now()-g,ne;try{ne=N(k)}catch(W){throw Z(W)}throw c({type:"step_error",workflowId:s,stepId:v,stepKey:l,name:u,description:w,ts:Date.now(),durationMs:ce,error:ne,...n&&{metadata:n},diagnostics:V(k,o.errorMeta,"throw",P,ce)}),d&&c({type:"step_complete",workflowId:s,stepKey:d,name:u,description:w,ts:Date.now(),durationMs:ce,result:D(ne,{cause:k}),meta:{origin:"throw",thrown:k},...n&&{metadata:n}}),i?.(ne,u,S),U(ne,{origin:"throw",thrown:k})}}let Y=X,ue=performance.now()-g,ie=q(Y.error,{origin:"result",resultCause:Y.cause});throw c({type:"step_error",workflowId:s,stepId:v,stepKey:l,name:u,description:w,ts:Date.now(),durationMs:ue,error:ie,...n&&{metadata:n},diagnostics:V(Y.error,o.errorMeta,"result",C.attempts,ue)}),d&&c({type:"step_complete",workflowId:s,stepKey:d,name:u,description:w,ts:Date.now(),durationMs:ue,result:Y,meta:{origin:"result",resultCause:Y.cause},...n&&{metadata:n}}),i?.(ie,u,S),U(ie,{origin:"result",resultCause:Y.cause})})();p.try=(a,E,t)=>{if(typeof a!="string"||a.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 t?()=>t.error:t.onError;if(t.retry||t.timeout)return p.retry(a,async()=>{try{return L(await E())}catch(w){return D(o(w),{cause:w})}},{attempts:t.retry?.attempts??1,...t.retry??{},key:t.key,timeout:t.timeout});let n=t.key??a,u=a,l=a,d=f;return(async()=>{let w=d?performance.now():0;f&&c({type:"step_start",workflowId:s,stepId:l,stepKey:n,name:u,ts:Date.now()});try{let T=await E(),R=performance.now()-w;return c({type:"step_success",workflowId:s,stepId:l,stepKey:n,name:u,ts:Date.now(),durationMs:R}),n&&c({type:"step_complete",workflowId:s,stepKey:n,name:u,ts:Date.now(),durationMs:R,result:L(T)}),T}catch(T){let R=o(T),v=performance.now()-w,M=q(R,{origin:"throw",thrown:T});throw c({type:"step_error",workflowId:s,stepId:l,stepKey:n,name:u,ts:Date.now(),durationMs:v,error:M}),n&&c({type:"step_complete",workflowId:s,stepKey:n,name:u,ts:Date.now(),durationMs:v,result:D(R,{cause:T}),meta:{origin:"throw",thrown:T}}),i?.(M,u,S),U(M,{origin:"throw",thrown:T})}})()},p.fromResult=(a,E,t)=>{if(typeof a!="string"||a.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=t.key??a,n=a,u=a,l="error"in t?()=>t.error:t.onError,d=f;return(async()=>{let w=d?performance.now():0;f&&c({type:"step_start",workflowId:s,stepId:u,stepKey:o,name:n,ts:Date.now()});let T=await E();if(T.ok){let R=performance.now()-w;return c({type:"step_success",workflowId:s,stepId:u,stepKey:o,name:n,ts:Date.now(),durationMs:R}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:R,result:L(T.value)}),T.value}else{let R=l(T.error),v=performance.now()-w,M=q(R,{origin:"result",resultCause:T.error});throw c({type:"step_error",workflowId:s,stepId:u,stepKey:o,name:n,ts:Date.now(),durationMs:v,error:M}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:v,result:D(R,{cause:T.error}),meta:{origin:"result",resultCause:T.error}}),i?.(M,n,S),U(M,{origin:"result",resultCause:T.error})}})()},p.fromNullable=(a,E,t,o)=>{if(typeof a!="string"||a.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(a,async()=>{let n=await E();return n!=null?L(n):D(t())},o)},p.retry=(a,E,t)=>{if(typeof a!="string"||a.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(a,E,{key:t.key??a,retry:{attempts:t.attempts,backoff:t.backoff,initialDelay:t.initialDelay,maxDelay:t.maxDelay,jitter:t.jitter,shouldRetry:t.shouldRetry,onRetry:t.onRetry},timeout:t.timeout})},p.withTimeout=(a,E,t)=>{if(typeof a!="string"||a.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(a,E,{key:t.key??a,timeout:t})},p.sleep=(a,E,t)=>{if(typeof a!="string"||a.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 E=="string"?Le(E):E;if(!o)throw new Error(`step.sleep: invalid duration '${E}'`);let n=o.millis,u=t?.signal;return p(a,async()=>{if(O?.aborted||u?.aborted){let l=new Error("Sleep aborted");throw l.name="AbortError",l}return new Promise((l,d)=>{let w={timeoutId:void 0},T=()=>{w.timeoutId&&clearTimeout(w.timeoutId);let R=new Error("Sleep aborted");R.name="AbortError",d(R)};O?.addEventListener("abort",T,{once:!0}),u?.addEventListener("abort",T,{once:!0}),w.timeoutId=setTimeout(()=>{O?.removeEventListener("abort",T),u?.removeEventListener("abort",T),l(L(void 0))},n)})},{key:t?.key??a,description:t?.description})},p.all=((...a)=>{if(typeof a[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 E=a[0],t=a[1];if(typeof t=="function")return $(E,t);if(t&&typeof t=="object"&&!Array.isArray(t)){let n=j(t);return G(n,{name:E})}throw new TypeError("step.all(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),p.race=(a,E)=>{let t=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),n=!1,u={scopeId:t,type:"race",winnerId:void 0};B.push(u);let l=()=>{if(n)return;n=!0;let d=B.findIndex(w=>w.scopeId===t);d!==-1&&B.splice(d,1),c({type:"scope_end",workflowId:s,scopeId:t,ts:Date.now(),durationMs:performance.now()-o,winnerId:u.winnerId})};c({type:"scope_start",workflowId:s,scopeId:t,scopeType:"race",name:a,ts:Date.now()});try{let d=await E();if(l(),!d.ok)throw i?.(d.error,a,S),U(d.error,{origin:"result",resultCause:d.cause});return d.value}catch(d){throw l(),d}})()},p.if=(a,E,t)=>t(),p.label=p.if,p.branch=async(a,E)=>{let{condition:t,then:o,else:n}=E;if(t())return await o();if(n)return await n()},p.arm=(a,E)=>({fn:a,errors:E}),p.forEach=async(a,E,t)=>{let o=[],n=t.maxIterations,u=0,l="run"in t,d=Symbol.asyncIterator in E?E:(async function*(){yield*E})();for await(let w of d){if(n!==void 0&&u>=n)break;let T;l?T=await t.run(w,u):T=await t.item.handler(w,u,p),o.push(T),u++}return o},p.item=a=>({__forEachItemHandler:!0,handler:a}),p.dep=(a,E)=>E,p.workflow=(a,E,t)=>p(a,E,t),p.map=async(a,E,t,o)=>{let n=o?.concurrency??E.length;return p(a,()=>n>=E.length?Ie(E.map((u,l)=>t(u,l))):(async()=>{let u=[];for(let l=0;l<E.length;l+=n){let d=E.slice(l,l+n),w=await Ie(d.map((T,R)=>t(T,l+R)));if(!w.ok)return w;u.push(...w.value)}return L(u)})(),{key:o?.key})},p.withFallback=(a,E,t)=>{if(typeof a!="string"||a.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=t.key??a,n=a,u=re(o),l=f;return(async()=>{let d=l?performance.now():0;f&&c({type:"step_start",workflowId:s,stepId:u,stepKey:o,name:n,ts:Date.now()});let w;try{w=await E()}catch(g){if(J(g))throw c({type:"step_aborted",workflowId:s,stepId:u,stepKey:o,name:n,ts:Date.now(),durationMs:performance.now()-d}),g;let I;try{I=N(g)}catch(b){throw Z(b)}if(t.on!==void 0&&t.on!==I){let b=performance.now()-d;throw c({type:"step_error",workflowId:s,stepId:u,stepKey:o,name:n,ts:Date.now(),durationMs:b,error:I}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:b,result:D(I,{cause:g}),meta:{origin:"throw",thrown:g}}),i?.(I,n,S),U(I,{origin:"throw",thrown:g})}let x;try{x=await t.fallback()}catch(b){if(J(b))throw c({type:"step_aborted",workflowId:s,stepId:u,stepKey:o,name:n,ts:Date.now(),durationMs:performance.now()-d}),b;let C;try{C=N(b)}catch(Y){throw Z(Y)}let X=performance.now()-d;throw c({type:"step_error",workflowId:s,stepId:u,stepKey:o,name:n,ts:Date.now(),durationMs:X,error:C}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:X,result:D(C,{cause:b}),meta:{origin:"throw",thrown:b}}),i?.(C,n,S),U(C,{origin:"throw",thrown:b})}if(x.ok){let b=performance.now()-d;return c({type:"step_success",workflowId:s,stepId:u,stepKey:o,name:n,ts:Date.now(),durationMs:b}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:b,result:x,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(I)}}),x.value}else{let b=performance.now()-d,C=q(x.error,{origin:"result",resultCause:x.cause});throw c({type:"step_error",workflowId:s,stepId:u,stepKey:o,name:n,ts:Date.now(),durationMs:b,error:C}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:b,result:x,meta:{origin:"result",resultCause:x.cause}}),i?.(C,n,S),U(C,{origin:"result",resultCause:x.cause})}}if(w.ok){let g=performance.now()-d;return c({type:"step_success",workflowId:s,stepId:u,stepKey:o,name:n,ts:Date.now(),durationMs:g}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:g,result:w}),w.value}let T=w.error;if(t.on!==void 0&&t.on!==T){let g=performance.now()-d,I=q(T,{origin:"result",resultCause:w.cause});throw c({type:"step_error",workflowId:s,stepId:u,stepKey:o,name:n,ts:Date.now(),durationMs:g,error:I}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:g,result:w,meta:{origin:"result",resultCause:w.cause}}),i?.(I,n,S),U(I,{origin:"result",resultCause:w.cause})}let R;try{R=await t.fallback()}catch(g){if(J(g))throw c({type:"step_aborted",workflowId:s,stepId:u,stepKey:o,name:n,ts:Date.now(),durationMs:performance.now()-d}),g;let I;try{I=N(g)}catch(b){throw Z(b)}let x=performance.now()-d;throw c({type:"step_error",workflowId:s,stepId:u,stepKey:o,name:n,ts:Date.now(),durationMs:x,error:I}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:x,result:D(I,{cause:g}),meta:{origin:"throw",thrown:g}}),i?.(I,n,S),U(I,{origin:"throw",thrown:g})}if(R.ok){let g=performance.now()-d;return c({type:"step_success",workflowId:s,stepId:u,stepKey:o,name:n,ts:Date.now(),durationMs:g}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:g,result:R,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(T)}}),R.value}let v=performance.now()-d,M=q(R.error,{origin:"result",resultCause:R.cause});throw c({type:"step_error",workflowId:s,stepId:u,stepKey:o,name:n,ts:Date.now(),durationMs:v,error:M}),o&&c({type:"step_complete",workflowId:s,stepKey:o,name:n,ts:Date.now(),durationMs:v,result:R,meta:{origin:"result",resultCause:R.cause}}),i?.(M,n,S),U(M,{origin:"result",resultCause:R.cause})})()},p.withResource=(a,E)=>{if(typeof a!="string"||a.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 t=a,o=a,n=re(t),u=f;return(async()=>{let l=u?performance.now():0;f&&c({type:"step_start",workflowId:s,stepId:n,stepKey:t,name:o,ts:Date.now()});let d;try{d=await E.acquire()}catch(x){if(J(x))throw c({type:"step_aborted",workflowId:s,stepId:n,stepKey:t,name:o,ts:Date.now(),durationMs:performance.now()-l}),x;let b;try{b=N(x)}catch(X){throw Z(X)}let C=performance.now()-l;throw c({type:"step_error",workflowId:s,stepId:n,stepKey:t,name:o,ts:Date.now(),durationMs:C,error:b}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:o,ts:Date.now(),durationMs:C,result:D(b,{cause:x}),meta:{origin:"throw",thrown:x}}),i?.(b,o,S),U(b,{origin:"throw",thrown:x})}if(!d.ok){let x=performance.now()-l,b=q(d.error,{origin:"result",resultCause:d.cause});throw c({type:"step_error",workflowId:s,stepId:n,stepKey:t,name:o,ts:Date.now(),durationMs:x,error:b}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:o,ts:Date.now(),durationMs:x,result:d,meta:{origin:"result",resultCause:d.cause}}),i?.(b,o,S),U(b,{origin:"result",resultCause:d.cause})}let w=d.value,T,R,v=!1;try{T=await E.use(w)}catch(x){if(J(x)){try{await E.release(w)}catch(b){console.warn(`[awaitly] step.withResource("${a}"): release threw after earlyExit:`,b)}throw x}R=x,v=!0}try{await E.release(w)}catch(x){console.warn(`[awaitly] step.withResource("${a}"): release threw:`,x)}if(v){let x;try{x=N(R)}catch(C){throw Z(C)}let b=performance.now()-l;throw c({type:"step_error",workflowId:s,stepId:n,stepKey:t,name:o,ts:Date.now(),durationMs:b,error:x}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:o,ts:Date.now(),durationMs:b,result:D(x,{cause:R}),meta:{origin:"throw",thrown:R}}),i?.(x,o,S),U(x,{origin:"throw",thrown:R})}let M=T;if(M.ok){let x=performance.now()-l;return c({type:"step_success",workflowId:s,stepId:n,stepKey:t,name:o,ts:Date.now(),durationMs:x}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:o,ts:Date.now(),durationMs:x,result:M}),M.value}let g=performance.now()-l,I=q(M.error,{origin:"result",resultCause:M.cause});throw c({type:"step_error",workflowId:s,stepId:n,stepKey:t,name:o,ts:Date.now(),durationMs:g,error:I}),t&&c({type:"step_complete",workflowId:s,stepKey:t,name:o,ts:Date.now(),durationMs:g,result:M,meta:{origin:"result",resultCause:M.cause}}),i?.(I,o,S),U(I,{origin:"result",resultCause:M.cause})})()};let H=await y({step:p});if(process.env.NODE_ENV!=="production"&&H!==null&&typeof H=="object"&&"ok"in H&&typeof H.ok=="boolean"){let a=H;(a.ok===!0&&"value"in a||a.ok===!1&&"error"in a)&&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 L(H)}catch(p){if(ze(p))throw p.thrown;if(J(p)){let $=p.meta.origin==="throw"?p.meta.thrown:p.meta.origin==="result"?p.meta.resultCause:void 0;return D(p.error,{cause:$})}let j=N(p);return i?.(j,"unexpected",S),D(j,{cause:p})}}me.strict=(e,r)=>me(e,r);async function Ie(e){return e.length===0?L([]):new Promise(r=>{let m=!1,y=e.length,h=new Array(e.length);for(let i=0;i<e.length;i++){let f=i;Promise.resolve(e[f]).catch(A=>D({type:"PROMISE_REJECTED",cause:A},{cause:{type:"PROMISE_REJECTION",reason:A}})).then(A=>{if(!m){if(!A.ok){m=!0,r(A);return}h[f]=A.value,y--,y===0&&r(L(h))}})}})}function Xe(e){return typeof e=="object"&&e!==null&&e.type==="EVENT_TIMEOUT"}function Ze(e){return typeof e=="object"&&e!==null&&e.type==="INVALID_EMITTER"}function Qe(e,r){return new Promise(m=>{try{e((y,h)=>{if(y){let i=r?.onError?r.onError(y):y;m(D(i,{cause:y}))}else m(L(h))})}catch(y){let h=y instanceof Error?y:new Error(String(y)),i=r?.onError?r.onError(h):h;m(D(i,{cause:y}))}})}function we(e){return typeof e=="object"&&e!==null&&"on"in e&&"off"in e&&typeof e.on=="function"&&typeof e.off=="function"}function ye(e){return typeof e=="object"&&e!==null&&"addEventListener"in e&&"removeEventListener"in e&&typeof e.addEventListener=="function"&&typeof e.removeEventListener=="function"}function er(e,r,m){return new Promise(y=>{let h,i=!1,f=we(e)?(O,s)=>e.on(O,s):ye(e)?(O,s)=>e.addEventListener(O,s):null,A=we(e)?(O,s)=>e.off(O,s):ye(e)?(O,s)=>e.removeEventListener(O,s):null;if(!f||!A){y(D({type:"INVALID_EMITTER",message:"Object does not have on/off or addEventListener/removeEventListener"}));return}let _=(...O)=>{i||(i=!0,S(),y(L(O[0])))},K=(...O)=>{if(i)return;i=!0,S();let s=O[0],N=m?.onError?m.onError(s):s;y(D(N,{cause:s}))},S=()=>{h&&clearTimeout(h),A(r.success,_),r.error&&A(r.error,K)};f(r.success,_),r.error&&f(r.error,K),r.timeout&&(h=setTimeout(()=>{if(i)return;i=!0,S();let O={type:"EVENT_TIMEOUT",event:r.success,timeoutMs:r.timeout};y(D(O))},r.timeout))})}function rr(e){return we(e)||ye(e)}export{Qe as fromCallback,er as fromEvent,rr as isEventEmitterLike,Xe as isEventTimeoutError,Ze as isInvalidEmitterError};
|
|
7
|
-
//# sourceMappingURL=adapters.js.map
|