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/resolver.d.cts
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { R as Result, c as AsyncResult } from './run-entry-DGs0tySr.cjs';
|
|
2
|
-
import { UnexpectedError } from './errors.cjs';
|
|
3
|
-
import './tagged-error.cjs';
|
|
4
|
-
import './slugs.cjs';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Configuration for createResolver.
|
|
8
|
-
*
|
|
9
|
-
* @typeParam T - The type of items returned by batchFn
|
|
10
|
-
* @typeParam K - The type of keys used to identify items
|
|
11
|
-
* @typeParam E - The error type from batchFn
|
|
12
|
-
*/
|
|
13
|
-
interface ResolverConfig<T, K, E extends string> {
|
|
14
|
-
/** Human-readable name for this resolver (used in error messages) */
|
|
15
|
-
name: string;
|
|
16
|
-
/** Batch function that receives unique keys and returns all matching items */
|
|
17
|
-
batchFn: (keys: K[]) => AsyncResult<T[], E>;
|
|
18
|
-
/** Extract a dedup key from an input. Defaults to identity. */
|
|
19
|
-
key?: (input: K) => K;
|
|
20
|
-
/** Match a result item to a requested key */
|
|
21
|
-
find: (item: T, key: K) => boolean;
|
|
22
|
-
/** Enable per-key caching of ok results. No TTL in v1. */
|
|
23
|
-
cache?: boolean;
|
|
24
|
-
}
|
|
25
|
-
/** Error returned when batchFn succeeds but no item matches the requested key */
|
|
26
|
-
type ResolverNotFoundError = "RESOLVER_NOT_FOUND";
|
|
27
|
-
/**
|
|
28
|
-
* A resolver instance created by createResolver.
|
|
29
|
-
*
|
|
30
|
-
* Resolvers should be created per-request/workflow, not as module-level singletons,
|
|
31
|
-
* to avoid accidental cross-request batching.
|
|
32
|
-
*/
|
|
33
|
-
interface Resolver<T, K, E extends string> {
|
|
34
|
-
/** Load a single item by key. Batches with other loads in the same microtask. */
|
|
35
|
-
load: (input: K) => Promise<Result<T, E | ResolverNotFoundError | UnexpectedError>>;
|
|
36
|
-
/** Load multiple items by key. Results array matches input order. */
|
|
37
|
-
loadMany: (inputs: K[]) => Promise<Result<T, E | ResolverNotFoundError | UnexpectedError>[]>;
|
|
38
|
-
/** Evict a single key from the cache */
|
|
39
|
-
clear: (input: K) => void;
|
|
40
|
-
/** Evict all cached entries */
|
|
41
|
-
clearAll: () => void;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Create a DataLoader-style resolver that batches and deduplicates loads
|
|
45
|
-
* within a single microtask tick.
|
|
46
|
-
*
|
|
47
|
-
* @example
|
|
48
|
-
* ```typescript
|
|
49
|
-
* const getUserById = createResolver({
|
|
50
|
-
* name: "getUserById",
|
|
51
|
-
* batchFn: async (keys: number[]): AsyncResult<User[], "QUERY_ERROR"> => {
|
|
52
|
-
* const users = await db.query("SELECT * FROM users WHERE id IN (?)", keys);
|
|
53
|
-
* return ok(users);
|
|
54
|
-
* },
|
|
55
|
-
* find: (user, key) => user.id === key,
|
|
56
|
-
* cache: true,
|
|
57
|
-
* });
|
|
58
|
-
*
|
|
59
|
-
* // These batch into a single batchFn call
|
|
60
|
-
* const [user1, user2] = await Promise.all([
|
|
61
|
-
* getUserById.load(1),
|
|
62
|
-
* getUserById.load(2),
|
|
63
|
-
* ]);
|
|
64
|
-
* ```
|
|
65
|
-
*/
|
|
66
|
-
declare function createResolver<T, K, E extends string>(config: ResolverConfig<T, K, E>): Resolver<T, K, E>;
|
|
67
|
-
|
|
68
|
-
export { type Resolver, type ResolverConfig, type ResolverNotFoundError, createResolver };
|
package/dist/resolver.d.ts
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { R as Result, c as AsyncResult } from './run-entry-BOuNyVoO.js';
|
|
2
|
-
import { UnexpectedError } from './errors.js';
|
|
3
|
-
import './tagged-error.js';
|
|
4
|
-
import './slugs.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Configuration for createResolver.
|
|
8
|
-
*
|
|
9
|
-
* @typeParam T - The type of items returned by batchFn
|
|
10
|
-
* @typeParam K - The type of keys used to identify items
|
|
11
|
-
* @typeParam E - The error type from batchFn
|
|
12
|
-
*/
|
|
13
|
-
interface ResolverConfig<T, K, E extends string> {
|
|
14
|
-
/** Human-readable name for this resolver (used in error messages) */
|
|
15
|
-
name: string;
|
|
16
|
-
/** Batch function that receives unique keys and returns all matching items */
|
|
17
|
-
batchFn: (keys: K[]) => AsyncResult<T[], E>;
|
|
18
|
-
/** Extract a dedup key from an input. Defaults to identity. */
|
|
19
|
-
key?: (input: K) => K;
|
|
20
|
-
/** Match a result item to a requested key */
|
|
21
|
-
find: (item: T, key: K) => boolean;
|
|
22
|
-
/** Enable per-key caching of ok results. No TTL in v1. */
|
|
23
|
-
cache?: boolean;
|
|
24
|
-
}
|
|
25
|
-
/** Error returned when batchFn succeeds but no item matches the requested key */
|
|
26
|
-
type ResolverNotFoundError = "RESOLVER_NOT_FOUND";
|
|
27
|
-
/**
|
|
28
|
-
* A resolver instance created by createResolver.
|
|
29
|
-
*
|
|
30
|
-
* Resolvers should be created per-request/workflow, not as module-level singletons,
|
|
31
|
-
* to avoid accidental cross-request batching.
|
|
32
|
-
*/
|
|
33
|
-
interface Resolver<T, K, E extends string> {
|
|
34
|
-
/** Load a single item by key. Batches with other loads in the same microtask. */
|
|
35
|
-
load: (input: K) => Promise<Result<T, E | ResolverNotFoundError | UnexpectedError>>;
|
|
36
|
-
/** Load multiple items by key. Results array matches input order. */
|
|
37
|
-
loadMany: (inputs: K[]) => Promise<Result<T, E | ResolverNotFoundError | UnexpectedError>[]>;
|
|
38
|
-
/** Evict a single key from the cache */
|
|
39
|
-
clear: (input: K) => void;
|
|
40
|
-
/** Evict all cached entries */
|
|
41
|
-
clearAll: () => void;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Create a DataLoader-style resolver that batches and deduplicates loads
|
|
45
|
-
* within a single microtask tick.
|
|
46
|
-
*
|
|
47
|
-
* @example
|
|
48
|
-
* ```typescript
|
|
49
|
-
* const getUserById = createResolver({
|
|
50
|
-
* name: "getUserById",
|
|
51
|
-
* batchFn: async (keys: number[]): AsyncResult<User[], "QUERY_ERROR"> => {
|
|
52
|
-
* const users = await db.query("SELECT * FROM users WHERE id IN (?)", keys);
|
|
53
|
-
* return ok(users);
|
|
54
|
-
* },
|
|
55
|
-
* find: (user, key) => user.id === key,
|
|
56
|
-
* cache: true,
|
|
57
|
-
* });
|
|
58
|
-
*
|
|
59
|
-
* // These batch into a single batchFn call
|
|
60
|
-
* const [user1, user2] = await Promise.all([
|
|
61
|
-
* getUserById.load(1),
|
|
62
|
-
* getUserById.load(2),
|
|
63
|
-
* ]);
|
|
64
|
-
* ```
|
|
65
|
-
*/
|
|
66
|
-
declare function createResolver<T, K, E extends string>(config: ResolverConfig<T, K, E>): Resolver<T, K, E>;
|
|
67
|
-
|
|
68
|
-
export { type Resolver, type ResolverConfig, type ResolverNotFoundError, createResolver };
|
package/dist/resolver.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
var Ke={"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 we(n){return`https://jagreehal.github.io/awaitly/rules/#${n}`}var Qe=Object.keys(Ke);var ae=class extends Error{_tag};function L(n,r){return class extends ae{_tag=n;constructor(y,C){let A=r?.message?r.message(y??{}):n;if(super(A),this.name=n,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:we(r.slug),enumerable:!0,writable:!1,configurable:!1})}if(Object.setPrototypeOf(this,new.target.prototype),y&&typeof y=="object"){let l;if(r?.slug!==void 0){let{_tag:j,name:v,message:K,stack:s,code:_,hint:D,docsUrl:J,...W}=y;l=W}else{let{_tag:j,name:v,message:K,stack:s,..._}=y;l=_}let f=Object.prototype.hasOwnProperty.call(l,"cause"),S=f?l.cause:void 0;f&&delete l.cause;let M=C?.cause!==void 0;if(f&&M)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,l),f&&(this.cause=S),M&&(this.cause=C?.cause)}else C?.cause!==void 0&&(this.cause=C.cause)}}}Object.defineProperty(L,Symbol.hasInstance,{value:n=>n instanceof ae});(A=>{function n(l){return l instanceof Error}A.isError=n;function r(l){return l instanceof ae}A.isTaggedError=r;function y(l,f){let S=l._tag,M=f[S];return M(l)}A.match=y;function C(l,f,S){let M=l._tag,j=f[M];return j?j(l):S(l)}A.matchPartial=C})(L||={});var Te=class extends L("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`}){},ke=class extends L("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`}){},Re=class extends L("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`:""}`}){},ge=class extends L("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`:""}`}){},xe=class extends L("ValidationError",{message:r=>`ValidationError: Invalid ${r.field} - ${r.reason}`}){},Ce=class extends L("NotFoundError",{message:r=>r.id?`NotFoundError: ${r.resource} with id ${r.id} not found`:`NotFoundError: ${r.resource} not found`}){},he=class extends L("UnauthorizedError",{message:r=>r.reason?`UnauthorizedError: ${r.reason}`:r.action&&r.resource?`UnauthorizedError: Not authorized to ${r.action} ${r.resource}`:"UnauthorizedError: Access denied"}){},be=class extends L("NetworkError",{message:r=>r.url?`NetworkError: ${r.reason} (${r.url})`:`NetworkError: ${r.reason}`}){},Ae=class extends L("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}`}){},re=class extends L("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(n){return{ok:!0,value:n}}var Ne=n=>typeof n=="object"&&n!==null&&"ok"in n&&typeof n.ok=="boolean"&&(n.ok?"value"in n:"error"in n),Pe=(n,r)=>{let y={},C=new Map;for(let A of Object.keys(n)){let l=n[A];typeof l=="function"&&(y[A]=(...f)=>{let S=(C.get(A)??0)+1;C.set(A,S);let M=S===1?A:`${A}#${S}`;return r(M,async()=>{let j=await l(...f);return Ne(j)?j:Se(j)})})}return y};function Fe(n){let r=n.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!r)return;let y=parseFloat(r[1]),C=r[2].toLowerCase();return{_tag:"Duration",millis:y*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[C]??1)}}function je(n){return new re({cause:n})}function $(n){return{ok:!0,value:n}}function N(n,r){let y=r?.cause;return{ok:!1,error:n,...y!==void 0?{cause:y}:{}}}function Be(n){if(n==null)return"unknown";if(typeof n=="string")return n.trim()||"unknown";if(typeof n=="object"){let r=n;if(typeof r._tag=="string"){let y=r._tag.trim();if(y)return y}if(typeof r.tag=="string"){let y=r.tag.trim();if(y)return y}if(typeof r.code=="string"){let y=r.code.trim();if(y)return y}else if(typeof r.code=="number")return String(r.code);if(n instanceof Error&&n.name){let y=n.name.trim();if(y)return y}}return"unknown"}function Le(n,r){if(!(!r||!n))return r[n]}function Ve(n){let{intent:r,domain:y,owner:C,tags:A,stateChanges:l,emits:f,calls:S}=n;if(!r&&!y&&!C&&!A?.length&&!l?.length&&!f?.length&&!S?.length)return;let M={};return r&&(M.intent=r),y&&(M.domain=y),C&&(M.owner=C),A?.length&&(M.tags=A),l?.length&&(M.stateChanges=l),f?.length&&(M.emits=f),S?.length&&(M.calls=S),M}function H(n,r,y,C,A){let l=Be(n),f=Le(l,r),S={tag:l,origin:y};return f!==void 0&&(S.classification=f),C!==void 0&&(S.attempt=C),A!==void 0&&(S.cumulativeDurationMs=A),S}var oe=Symbol.for("step_timeout_marker");function ve(n){return typeof n!="object"||n===null?!1:n.type==="STEP_TIMEOUT"?!0:oe in n}function $e(n){if(!(typeof n!="object"||n===null)){if(n.type==="STEP_TIMEOUT"){let r=n;return{timeoutMs:r.timeoutMs,stepName:r.stepName,stepKey:r.stepKey,attempt:r.attempt}}if(oe in n)return n[oe]}}var Me=Symbol("early-exit");function We(n,r){return{[Me]:!0,error:n,meta:r}}function He(n){return typeof n=="object"&&n!==null&&n[Me]===!0}var Ie=Symbol("mapper-exception");function ne(n){return{[Ie]:!0,thrown:n}}function qe(n){return typeof n=="object"&&n!==null&&n[Ie]===!0}function me(n,r){let{backoff:y,initialDelay:C,maxDelay:A,jitter:l}=r,f;switch(y){case"fixed":f=C;break;case"linear":f=C*n;break;case"exponential":f=C*Math.pow(2,n-1);break}if(f=Math.min(f,A),l){let S=f*.25*Math.random();f=f+S}return Math.floor(f)}function ye(n){return new Promise(r=>setTimeout(r,n))}var Oe=Symbol("timeout"),ie=Symbol("timeout-option");function Ye(n){return typeof n=="object"&&n!==null&&n[ie]===!0}async function ze(n,r,y,C){let A=new AbortController,l=r.onTimeout??"error",f=()=>typeof l=="function"?l({name:y.name,key:y.key,ms:r.ms}):r.error??{type:"STEP_TIMEOUT",stepName:y.name,stepKey:y.key,timeoutMs:r.ms,attempt:y.attempt},S;C?.aborted&&A.abort(C.reason);let M;C&&!C.aborted&&(M=()=>A.abort(C.reason),C.addEventListener("abort",M,{once:!0}));let j=new Promise((K,s)=>{S=setTimeout(()=>{if(l!=="disconnect"&&A.abort(),l==="option"){s({[ie]:!0,ms:r.ms});return}s({[Oe]:!0,error:f()})},r.ms)}),v;r.signal?v=Promise.resolve(n(A.signal)):v=Promise.resolve(n());try{return await Promise.race([v,j])}catch(K){if(typeof K=="object"&&K!==null&&K[ie]===!0)throw{[ie]:!0,ms:r.ms};if(typeof K=="object"&&K!==null&&K[Oe]===!0){l==="disconnect"&&v.catch(()=>{});let s=K.error;if(typeof s=="object"&&s!==null&&s.type!=="STEP_TIMEOUT"){let _={timeoutMs:r.ms,stepName:y.name,stepKey:y.key,attempt:y.attempt};oe in s?s[oe]=_:Object.defineProperty(s,oe,{value:_,enumerable:!1,writable:!0,configurable:!1})}throw s}throw K}finally{clearTimeout(S),M&&C&&C.removeEventListener("abort",M)}}var te={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,shouldRetry:()=>!0,onRetry:()=>{}};async function fe(n,r,y){if(typeof n!="function"){let p=n,V=r;if(typeof V!="function")throw new TypeError("[awaitly] run(deps, fn) requires a callback as the second argument. Example: run({ getUser }, async (s) => s.getUser(id))");return fe(({step:Q})=>V(Pe(p,Q),{step:Q}),y)}let C=n,A=r,{onError:l,onEvent:f,catchUnexpected:S,workflowId:M,workflowName:j,context:v,_workflowSignal:K}=A&&typeof A=="object"?A:{},s=M??crypto.randomUUID(),_=S??je,D=[],J=0,W=p=>p??`step_${++J}`,i=p=>{let V=p.context!==void 0||v===void 0?p:{...p,context:v},Y=j!==void 0&&V.workflowName===void 0?{...V,workflowName:j}:V;if(Y.type==="step_success"){let Q=Y.stepId;for(let ue=D.length-1;ue>=0;ue--){let q=D[ue];if(q.type==="race"&&!q.winnerId){q.winnerId=Q;break}}}f?.(Y,v)},O=We,B=p=>He(p),F=(p,V)=>p,Z=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 V=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},Y=function(a,E){let t=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),e=!1;D.push({scopeId:t,type:"parallel"});let u=()=>{if(e)return;e=!0;let c=D.findIndex(d=>d.scopeId===t);c!==-1&&D.splice(c,1),i({type:"scope_end",workflowId:s,scopeId:t,ts:Date.now(),durationMs:performance.now()-o})};i({type:"scope_start",workflowId:s,scopeId:t,scopeType:"parallel",name:a,ts:Date.now()});try{let c=await E();if(u(),!c.ok)throw l?.(c.error,a,v),O(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw u(),c}})()},Q=function(a,E){let t=Object.keys(a),o=E.name??`Parallel(${t.join(", ")})`,e=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let u=performance.now(),c=!1;D.push({scopeId:e,type:"parallel"});let d=()=>{if(c)return;c=!0;let m=D.findIndex(w=>w.scopeId===e);m!==-1&&D.splice(m,1),i({type:"scope_end",workflowId:s,scopeId:e,ts:Date.now(),durationMs:performance.now()-u})};i({type:"scope_start",workflowId:s,scopeId:e,scopeType:"parallel",name:o,ts:Date.now()});try{let m=await new Promise(k=>{if(t.length===0){k([]);return}let b=!1,U=t.length,R=new Array(t.length);for(let I=0;I<t.length;I++){let g=t[I],h=I;Promise.resolve(a[g]()).catch(x=>N({type:"PROMISE_REJECTED",cause:x},{cause:{type:"PROMISE_REJECTION",reason:x}})).then(x=>{if(!b){if(!x.ok){b=!0,k([{key:g,result:x}]);return}R[h]={key:g,result:x},U--,U===0&&k(R)}})}});d();let w={};for(let{key:k,result:b}of m){if(!b.ok)throw l?.(b.error,k,v),O(b.error,{origin:"result",resultCause:b.cause});w[k]=b.value}return w}catch(m){throw d(),m}})()};var Ge=V,Xe=Y,Ze=Q;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??{},e=Ve(o),u=a,c=o.key??a,d=o.key??a,{description:m,retry:w,timeout:k}=o,b=W(c),U=f,R=U?performance.now():0,g=Z(E)?()=>E:E,x={attempts:Math.max(1,w?.attempts??1),backoff:w?.backoff??te.backoff,initialDelay:w?.initialDelay??te.initialDelay,maxDelay:w?.maxDelay??te.maxDelay,jitter:w?.jitter??te.jitter,shouldRetry:w?.shouldRetry??te.shouldRetry,onRetry:w?.onRetry??te.onRetry};f&&i({type:"step_start",workflowId:s,stepId:b,stepKey:c,name:u,description:m,ts:Date.now(),...e&&{metadata:e}});let ee;for(let P=1;P<=x.attempts;P++){let Ue=U?performance.now():0;try{let T;if(k?T=await ze(g,k,{name:u,key:c,attempt:P},K):T=await g(),T.ok){let X=performance.now()-R;return i({type:"step_success",workflowId:s,stepId:b,stepKey:c,name:u,description:m,ts:Date.now(),durationMs:X,...e&&{metadata:e}}),d&&i({type:"step_complete",workflowId:s,stepKey:d,name:u,description:m,ts:Date.now(),durationMs:X,result:T,...e&&{metadata:e}}),T.value}if(ee=T,P<x.attempts&&x.shouldRetry(T.error,P)){let X=me(P,x);i({type:"step_retry",workflowId:s,stepId:b,stepKey:c,name:u,ts:Date.now(),attempt:P+1,maxAttempts:x.attempts,delayMs:X,error:T.error,...e&&{metadata:e},diagnostics:H(T.error,o.errorMeta,"result",P,performance.now()-R)}),x.onRetry(T.error,P,X),await ye(X);continue}x.attempts>1&&i({type:"step_retries_exhausted",workflowId:s,stepId:b,stepKey:c,name:u,ts:Date.now(),durationMs:performance.now()-R,attempts:P,lastError:T.error,...e&&{metadata:e},diagnostics:H(T.error,o.errorMeta,"result",P,performance.now()-R)});break}catch(T){let X=performance.now()-Ue;if(Ye(T)){let z=T.ms;i({type:"step_timeout",workflowId:s,stepId:b,stepKey:c,name:u,ts:Date.now(),timeoutMs:z,attempt:P,...e&&{metadata:e},diagnostics:H(T,o.errorMeta,"timeout",P)}),i({type:"step_success",workflowId:s,stepId:b,stepKey:c,name:u,description:m,ts:Date.now(),durationMs:performance.now()-R,...e&&{metadata:e}}),d&&i({type:"step_complete",workflowId:s,stepKey:d,name:u,description:m,ts:Date.now(),durationMs:performance.now()-R,result:$(void 0),...e&&{metadata:e}});return}if(B(T))throw i({type:"step_aborted",workflowId:s,stepId:b,stepKey:c,name:u,description:m,ts:Date.now(),durationMs:X,...e&&{metadata:e}}),T;if(ve(T)){let z=$e(T),De=k?.ms??z?.timeoutMs??0;if(i({type:"step_timeout",workflowId:s,stepId:b,stepKey:c,name:u,ts:Date.now(),timeoutMs:De,attempt:P,...e&&{metadata:e},diagnostics:H(T,o.errorMeta,"timeout",P)}),P<x.attempts&&x.shouldRetry(T,P)){let de=me(P,x);i({type:"step_retry",workflowId:s,stepId:b,stepKey:c,name:u,ts:Date.now(),attempt:P+1,maxAttempts:x.attempts,delayMs:de,error:T,...e&&{metadata:e},diagnostics:H(T,o.errorMeta,"timeout",P,performance.now()-R)}),x.onRetry(T,P,de),await ye(de);continue}x.attempts>1&&i({type:"step_retries_exhausted",workflowId:s,stepId:b,stepKey:c,name:u,ts:Date.now(),durationMs:performance.now()-R,attempts:P,lastError:T,...e&&{metadata:e},diagnostics:H(T,o.errorMeta,"timeout",P,performance.now()-R)});let Ee=performance.now()-R;throw i({type:"step_error",workflowId:s,stepId:b,stepKey:c,name:u,description:m,ts:Date.now(),durationMs:Ee,error:T,...e&&{metadata:e},diagnostics:H(T,o.errorMeta,"timeout",P,Ee)}),d&&i({type:"step_complete",workflowId:s,stepKey:d,name:u,description:m,ts:Date.now(),durationMs:Ee,result:N(T,{cause:T}),meta:{origin:"throw",thrown:T},...e&&{metadata:e}}),l?.(T,u,v),O(T,{origin:"throw",thrown:T})}if(P<x.attempts&&x.shouldRetry(T,P)){let z=me(P,x);i({type:"step_retry",workflowId:s,stepId:b,stepKey:c,name:u,ts:Date.now(),attempt:P+1,maxAttempts:x.attempts,delayMs:z,error:T,...e&&{metadata:e},diagnostics:H(T,o.errorMeta,"throw",P,performance.now()-R)}),x.onRetry(T,P,z),await ye(z);continue}x.attempts>1&&!ve(T)&&i({type:"step_retries_exhausted",workflowId:s,stepId:b,stepKey:c,name:u,ts:Date.now(),durationMs:performance.now()-R,attempts:P,lastError:T,...e&&{metadata:e},diagnostics:H(T,o.errorMeta,"throw",P,performance.now()-R)});let pe=performance.now()-R,se;try{se=_(T)}catch(z){throw ne(z)}throw i({type:"step_error",workflowId:s,stepId:b,stepKey:c,name:u,description:m,ts:Date.now(),durationMs:pe,error:se,...e&&{metadata:e},diagnostics:H(T,o.errorMeta,"throw",P,pe)}),d&&i({type:"step_complete",workflowId:s,stepKey:d,name:u,description:m,ts:Date.now(),durationMs:pe,result:N(se,{cause:T}),meta:{origin:"throw",thrown:T},...e&&{metadata:e}}),l?.(se,u,v),O(se,{origin:"throw",thrown:T})}}let G=ee,ce=performance.now()-R,le=F(G.error,{origin:"result",resultCause:G.cause});throw i({type:"step_error",workflowId:s,stepId:b,stepKey:c,name:u,description:m,ts:Date.now(),durationMs:ce,error:le,...e&&{metadata:e},diagnostics:H(G.error,o.errorMeta,"result",x.attempts,ce)}),d&&i({type:"step_complete",workflowId:s,stepKey:d,name:u,description:m,ts:Date.now(),durationMs:ce,result:G,meta:{origin:"result",resultCause:G.cause},...e&&{metadata:e}}),l?.(le,u,v),O(le,{origin:"result",resultCause:G.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 $(await E())}catch(m){return N(o(m),{cause:m})}},{attempts:t.retry?.attempts??1,...t.retry??{},key:t.key,timeout:t.timeout});let e=t.key??a,u=a,c=a,d=f;return(async()=>{let m=d?performance.now():0;f&&i({type:"step_start",workflowId:s,stepId:c,stepKey:e,name:u,ts:Date.now()});try{let w=await E(),k=performance.now()-m;return i({type:"step_success",workflowId:s,stepId:c,stepKey:e,name:u,ts:Date.now(),durationMs:k}),e&&i({type:"step_complete",workflowId:s,stepKey:e,name:u,ts:Date.now(),durationMs:k,result:$(w)}),w}catch(w){let k=o(w),b=performance.now()-m,U=F(k,{origin:"throw",thrown:w});throw i({type:"step_error",workflowId:s,stepId:c,stepKey:e,name:u,ts:Date.now(),durationMs:b,error:U}),e&&i({type:"step_complete",workflowId:s,stepKey:e,name:u,ts:Date.now(),durationMs:b,result:N(k,{cause:w}),meta:{origin:"throw",thrown:w}}),l?.(U,u,v),O(U,{origin:"throw",thrown:w})}})()},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,e=a,u=a,c="error"in t?()=>t.error:t.onError,d=f;return(async()=>{let m=d?performance.now():0;f&&i({type:"step_start",workflowId:s,stepId:u,stepKey:o,name:e,ts:Date.now()});let w=await E();if(w.ok){let k=performance.now()-m;return i({type:"step_success",workflowId:s,stepId:u,stepKey:o,name:e,ts:Date.now(),durationMs:k}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:e,ts:Date.now(),durationMs:k,result:$(w.value)}),w.value}else{let k=c(w.error),b=performance.now()-m,U=F(k,{origin:"result",resultCause:w.error});throw i({type:"step_error",workflowId:s,stepId:u,stepKey:o,name:e,ts:Date.now(),durationMs:b,error:U}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:e,ts:Date.now(),durationMs:b,result:N(k,{cause:w.error}),meta:{origin:"result",resultCause:w.error}}),l?.(U,e,v),O(U,{origin:"result",resultCause:w.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 e=await E();return e!=null?$(e):N(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"?Fe(E):E;if(!o)throw new Error(`step.sleep: invalid duration '${E}'`);let e=o.millis,u=t?.signal;return p(a,async()=>{if(K?.aborted||u?.aborted){let c=new Error("Sleep aborted");throw c.name="AbortError",c}return new Promise((c,d)=>{let m={timeoutId:void 0},w=()=>{m.timeoutId&&clearTimeout(m.timeoutId);let k=new Error("Sleep aborted");k.name="AbortError",d(k)};K?.addEventListener("abort",w,{once:!0}),u?.addEventListener("abort",w,{once:!0}),m.timeoutId=setTimeout(()=>{K?.removeEventListener("abort",w),u?.removeEventListener("abort",w),c($(void 0))},e)})},{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 Y(E,t);if(t&&typeof t=="object"&&!Array.isArray(t)){let e=V(t);return Q(e,{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(),e=!1,u={scopeId:t,type:"race",winnerId:void 0};D.push(u);let c=()=>{if(e)return;e=!0;let d=D.findIndex(m=>m.scopeId===t);d!==-1&&D.splice(d,1),i({type:"scope_end",workflowId:s,scopeId:t,ts:Date.now(),durationMs:performance.now()-o,winnerId:u.winnerId})};i({type:"scope_start",workflowId:s,scopeId:t,scopeType:"race",name:a,ts:Date.now()});try{let d=await E();if(c(),!d.ok)throw l?.(d.error,a,v),O(d.error,{origin:"result",resultCause:d.cause});return d.value}catch(d){throw c(),d}})()},p.if=(a,E,t)=>t(),p.label=p.if,p.branch=async(a,E)=>{let{condition:t,then:o,else:e}=E;if(t())return await o();if(e)return await e()},p.arm=(a,E)=>({fn:a,errors:E}),p.forEach=async(a,E,t)=>{let o=[],e=t.maxIterations,u=0,c="run"in t,d=Symbol.asyncIterator in E?E:(async function*(){yield*E})();for await(let m of d){if(e!==void 0&&u>=e)break;let w;c?w=await t.run(m,u):w=await t.item.handler(m,u,p),o.push(w),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 e=o?.concurrency??E.length;return p(a,()=>e>=E.length?_e(E.map((u,c)=>t(u,c))):(async()=>{let u=[];for(let c=0;c<E.length;c+=e){let d=E.slice(c,c+e),m=await _e(d.map((w,k)=>t(w,c+k)));if(!m.ok)return m;u.push(...m.value)}return $(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,e=a,u=W(o),c=f;return(async()=>{let d=c?performance.now():0;f&&i({type:"step_start",workflowId:s,stepId:u,stepKey:o,name:e,ts:Date.now()});let m;try{m=await E()}catch(R){if(B(R))throw i({type:"step_aborted",workflowId:s,stepId:u,stepKey:o,name:e,ts:Date.now(),durationMs:performance.now()-d}),R;let I;try{I=_(R)}catch(h){throw ne(h)}if(t.on!==void 0&&t.on!==I){let h=performance.now()-d;throw i({type:"step_error",workflowId:s,stepId:u,stepKey:o,name:e,ts:Date.now(),durationMs:h,error:I}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:e,ts:Date.now(),durationMs:h,result:N(I,{cause:R}),meta:{origin:"throw",thrown:R}}),l?.(I,e,v),O(I,{origin:"throw",thrown:R})}let g;try{g=await t.fallback()}catch(h){if(B(h))throw i({type:"step_aborted",workflowId:s,stepId:u,stepKey:o,name:e,ts:Date.now(),durationMs:performance.now()-d}),h;let x;try{x=_(h)}catch(G){throw ne(G)}let ee=performance.now()-d;throw i({type:"step_error",workflowId:s,stepId:u,stepKey:o,name:e,ts:Date.now(),durationMs:ee,error:x}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:e,ts:Date.now(),durationMs:ee,result:N(x,{cause:h}),meta:{origin:"throw",thrown:h}}),l?.(x,e,v),O(x,{origin:"throw",thrown:h})}if(g.ok){let h=performance.now()-d;return i({type:"step_success",workflowId:s,stepId:u,stepKey:o,name:e,ts:Date.now(),durationMs:h}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:e,ts:Date.now(),durationMs:h,result:g,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(I)}}),g.value}else{let h=performance.now()-d,x=F(g.error,{origin:"result",resultCause:g.cause});throw i({type:"step_error",workflowId:s,stepId:u,stepKey:o,name:e,ts:Date.now(),durationMs:h,error:x}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:e,ts:Date.now(),durationMs:h,result:g,meta:{origin:"result",resultCause:g.cause}}),l?.(x,e,v),O(x,{origin:"result",resultCause:g.cause})}}if(m.ok){let R=performance.now()-d;return i({type:"step_success",workflowId:s,stepId:u,stepKey:o,name:e,ts:Date.now(),durationMs:R}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:e,ts:Date.now(),durationMs:R,result:m}),m.value}let w=m.error;if(t.on!==void 0&&t.on!==w){let R=performance.now()-d,I=F(w,{origin:"result",resultCause:m.cause});throw i({type:"step_error",workflowId:s,stepId:u,stepKey:o,name:e,ts:Date.now(),durationMs:R,error:I}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:e,ts:Date.now(),durationMs:R,result:m,meta:{origin:"result",resultCause:m.cause}}),l?.(I,e,v),O(I,{origin:"result",resultCause:m.cause})}let k;try{k=await t.fallback()}catch(R){if(B(R))throw i({type:"step_aborted",workflowId:s,stepId:u,stepKey:o,name:e,ts:Date.now(),durationMs:performance.now()-d}),R;let I;try{I=_(R)}catch(h){throw ne(h)}let g=performance.now()-d;throw i({type:"step_error",workflowId:s,stepId:u,stepKey:o,name:e,ts:Date.now(),durationMs:g,error:I}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:e,ts:Date.now(),durationMs:g,result:N(I,{cause:R}),meta:{origin:"throw",thrown:R}}),l?.(I,e,v),O(I,{origin:"throw",thrown:R})}if(k.ok){let R=performance.now()-d;return i({type:"step_success",workflowId:s,stepId:u,stepKey:o,name:e,ts:Date.now(),durationMs:R}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:e,ts:Date.now(),durationMs:R,result:k,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(w)}}),k.value}let b=performance.now()-d,U=F(k.error,{origin:"result",resultCause:k.cause});throw i({type:"step_error",workflowId:s,stepId:u,stepKey:o,name:e,ts:Date.now(),durationMs:b,error:U}),o&&i({type:"step_complete",workflowId:s,stepKey:o,name:e,ts:Date.now(),durationMs:b,result:k,meta:{origin:"result",resultCause:k.cause}}),l?.(U,e,v),O(U,{origin:"result",resultCause:k.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,e=W(t),u=f;return(async()=>{let c=u?performance.now():0;f&&i({type:"step_start",workflowId:s,stepId:e,stepKey:t,name:o,ts:Date.now()});let d;try{d=await E.acquire()}catch(g){if(B(g))throw i({type:"step_aborted",workflowId:s,stepId:e,stepKey:t,name:o,ts:Date.now(),durationMs:performance.now()-c}),g;let h;try{h=_(g)}catch(ee){throw ne(ee)}let x=performance.now()-c;throw i({type:"step_error",workflowId:s,stepId:e,stepKey:t,name:o,ts:Date.now(),durationMs:x,error:h}),t&&i({type:"step_complete",workflowId:s,stepKey:t,name:o,ts:Date.now(),durationMs:x,result:N(h,{cause:g}),meta:{origin:"throw",thrown:g}}),l?.(h,o,v),O(h,{origin:"throw",thrown:g})}if(!d.ok){let g=performance.now()-c,h=F(d.error,{origin:"result",resultCause:d.cause});throw i({type:"step_error",workflowId:s,stepId:e,stepKey:t,name:o,ts:Date.now(),durationMs:g,error:h}),t&&i({type:"step_complete",workflowId:s,stepKey:t,name:o,ts:Date.now(),durationMs:g,result:d,meta:{origin:"result",resultCause:d.cause}}),l?.(h,o,v),O(h,{origin:"result",resultCause:d.cause})}let m=d.value,w,k,b=!1;try{w=await E.use(m)}catch(g){if(B(g)){try{await E.release(m)}catch(h){console.warn(`[awaitly] step.withResource("${a}"): release threw after earlyExit:`,h)}throw g}k=g,b=!0}try{await E.release(m)}catch(g){console.warn(`[awaitly] step.withResource("${a}"): release threw:`,g)}if(b){let g;try{g=_(k)}catch(x){throw ne(x)}let h=performance.now()-c;throw i({type:"step_error",workflowId:s,stepId:e,stepKey:t,name:o,ts:Date.now(),durationMs:h,error:g}),t&&i({type:"step_complete",workflowId:s,stepKey:t,name:o,ts:Date.now(),durationMs:h,result:N(g,{cause:k}),meta:{origin:"throw",thrown:k}}),l?.(g,o,v),O(g,{origin:"throw",thrown:k})}let U=w;if(U.ok){let g=performance.now()-c;return i({type:"step_success",workflowId:s,stepId:e,stepKey:t,name:o,ts:Date.now(),durationMs:g}),t&&i({type:"step_complete",workflowId:s,stepKey:t,name:o,ts:Date.now(),durationMs:g,result:U}),U.value}let R=performance.now()-c,I=F(U.error,{origin:"result",resultCause:U.cause});throw i({type:"step_error",workflowId:s,stepId:e,stepKey:t,name:o,ts:Date.now(),durationMs:R,error:I}),t&&i({type:"step_complete",workflowId:s,stepKey:t,name:o,ts:Date.now(),durationMs:R,result:U,meta:{origin:"result",resultCause:U.cause}}),l?.(I,o,v),O(I,{origin:"result",resultCause:U.cause})})()};let q=await C({step:p});if(process.env.NODE_ENV!=="production"&&q!==null&&typeof q=="object"&&"ok"in q&&typeof q.ok=="boolean"){let a=q;(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 $(q)}catch(p){if(qe(p))throw p.thrown;if(B(p)){let Y=p.meta.origin==="throw"?p.meta.thrown:p.meta.origin==="result"?p.meta.resultCause:void 0;return N(p.error,{cause:Y})}let V=_(p);return l?.(V,"unexpected",v),N(V,{cause:p})}}fe.strict=(n,r)=>fe(n,r);async function _e(n){return n.length===0?$([]):new Promise(r=>{let y=!1,C=n.length,A=new Array(n.length);for(let l=0;l<n.length;l++){let f=l;Promise.resolve(n[f]).catch(S=>N({type:"PROMISE_REJECTED",cause:S},{cause:{type:"PROMISE_REJECTION",reason:S}})).then(S=>{if(!y){if(!S.ok){y=!0,r(S);return}A[f]=S.value,C--,C===0&&r($(A))}})}})}function Je(n){let r=n.key??(s=>s),y=new Map,C=[],A=[],l=!1,f=new Map;async function S(){l=!1;let s=[...C],_=[...A];C.length=0,A.length=0;let D=new Set,J=[];for(let O of s)D.has(O)||(D.add(O),J.push(O));let W;try{W=await n.batchFn(J)}catch(O){let B=N(new re({cause:O}));for(let{key:F,resolve:Z}of _)Z(B),y.delete(F);return}if(!W.ok){let O=N(W.error);for(let{key:B,resolve:F}of _)F(O),y.delete(B);return}let i=W.value;for(let{key:O,resolve:B}of _){let F=i.find(Z=>n.find(Z,O));if(F!==void 0){let Z=$(F);n.cache&&f.set(O,F),B(Z)}else B(N("RESOLVER_NOT_FOUND"));y.delete(O)}}function M(s){let _=r(s);if(n.cache&&f.has(_))return Promise.resolve($(f.get(_)));let D=y.get(_);if(D)return D;let J=new Promise(W=>{C.push(_),A.push({key:_,resolve:W})});return y.set(_,J),l||(l=!0,queueMicrotask(S)),J}async function j(s){let _=s.map(D=>M(D));return Promise.all(_)}function v(s){let _=r(s);f.delete(_)}function K(){f.clear()}return{load:M,loadMany:j,clear:v,clearAll:K}}export{Je as createResolver};
|
|
7
|
-
//# sourceMappingURL=resolver.js.map
|