@effect/workflow 0.1.1 → 0.1.3
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/README.md +13 -1
- package/WorkflowProxy/package.json +6 -0
- package/WorkflowProxyServer/package.json +6 -0
- package/dist/cjs/Activity.js +6 -11
- package/dist/cjs/Activity.js.map +1 -1
- package/dist/cjs/Workflow.js +37 -6
- package/dist/cjs/Workflow.js.map +1 -1
- package/dist/cjs/WorkflowProxy.js +111 -0
- package/dist/cjs/WorkflowProxy.js.map +1 -0
- package/dist/cjs/WorkflowProxyServer.js +61 -0
- package/dist/cjs/WorkflowProxyServer.js.map +1 -0
- package/dist/cjs/index.js +5 -1
- package/dist/dts/Activity.d.ts +1 -17
- package/dist/dts/Activity.d.ts.map +1 -1
- package/dist/dts/Workflow.d.ts +85 -1
- package/dist/dts/Workflow.d.ts.map +1 -1
- package/dist/dts/WorkflowProxy.d.ts +90 -0
- package/dist/dts/WorkflowProxy.d.ts.map +1 -0
- package/dist/dts/WorkflowProxyServer.d.ts +27 -0
- package/dist/dts/WorkflowProxyServer.d.ts.map +1 -0
- package/dist/dts/index.d.ts +8 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/esm/Activity.js +4 -10
- package/dist/esm/Activity.js.map +1 -1
- package/dist/esm/Workflow.js +36 -4
- package/dist/esm/Workflow.js.map +1 -1
- package/dist/esm/WorkflowProxy.js +101 -0
- package/dist/esm/WorkflowProxy.js.map +1 -0
- package/dist/esm/WorkflowProxyServer.js +52 -0
- package/dist/esm/WorkflowProxyServer.js.map +1 -0
- package/dist/esm/index.js +8 -0
- package/dist/esm/index.js.map +1 -1
- package/package.json +20 -2
- package/src/Activity.ts +6 -34
- package/src/Workflow.ts +155 -2
- package/src/WorkflowProxy.ts +178 -0
- package/src/WorkflowProxyServer.ts +103 -0
- package/src/index.ts +10 -0
package/dist/dts/Workflow.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import type * as Cause from "effect/Cause";
|
|
5
|
+
import * as Context from "effect/Context";
|
|
1
6
|
import * as Effect from "effect/Effect";
|
|
2
7
|
import * as Exit from "effect/Exit";
|
|
3
8
|
import * as Layer from "effect/Layer";
|
|
@@ -6,6 +11,7 @@ import * as PrimaryKey from "effect/PrimaryKey";
|
|
|
6
11
|
import * as Schedule from "effect/Schedule";
|
|
7
12
|
import * as Schema from "effect/Schema";
|
|
8
13
|
import type * as AST from "effect/SchemaAST";
|
|
14
|
+
import type * as Scope from "effect/Scope";
|
|
9
15
|
import type { WorkflowEngine, WorkflowInstance } from "./WorkflowEngine.js";
|
|
10
16
|
/**
|
|
11
17
|
* @since 1.0.0
|
|
@@ -27,6 +33,15 @@ export interface Workflow<Name extends string, Payload extends AnyStructSchema,
|
|
|
27
33
|
readonly payloadSchema: Payload;
|
|
28
34
|
readonly successSchema: Success;
|
|
29
35
|
readonly errorSchema: Error;
|
|
36
|
+
readonly annotations: Context.Context<never>;
|
|
37
|
+
/**
|
|
38
|
+
* Add an annotation to the workflow.
|
|
39
|
+
*/
|
|
40
|
+
annotate<I, S>(tag: Context.Tag<I, S>, value: S): Workflow<Name, Payload, Success, Error>;
|
|
41
|
+
/**
|
|
42
|
+
* Add the annotations from a Context object to the workflow.
|
|
43
|
+
*/
|
|
44
|
+
annotateContext<I>(context: Context.Context<I>): Workflow<Name, Payload, Success, Error>;
|
|
30
45
|
/**
|
|
31
46
|
* Execute the workflow with the given payload.
|
|
32
47
|
*/
|
|
@@ -41,11 +56,23 @@ export interface Workflow<Name extends string, Payload extends AnyStructSchema,
|
|
|
41
56
|
* Create a layer that registers the workflow and provides an effect to
|
|
42
57
|
* execute it.
|
|
43
58
|
*/
|
|
44
|
-
readonly toLayer: <R>(execute: (payload: Payload["Type"], executionId: string) => Effect.Effect<Success["Type"], Error["Type"], R>) => Layer.Layer<Registration<Name> | WorkflowEngine, never, WorkflowEngine | Exclude<R, WorkflowEngine | WorkflowInstance> | Payload["Context"] | Success["Context"] | Error["Context"]>;
|
|
59
|
+
readonly toLayer: <R>(execute: (payload: Payload["Type"], executionId: string) => Effect.Effect<Success["Type"], Error["Type"], R>) => Layer.Layer<Registration<Name> | WorkflowEngine, never, WorkflowEngine | Exclude<R, WorkflowEngine | WorkflowInstance | Execution<Name> | Scope.Scope> | Payload["Context"] | Success["Context"] | Error["Context"]>;
|
|
45
60
|
/**
|
|
46
61
|
* For the given payload, compute the deterministic execution ID.
|
|
47
62
|
*/
|
|
48
63
|
readonly executionId: (payload: Schema.Simplify<Schema.Struct.Constructor<Payload["fields"]>>) => Effect.Effect<string>;
|
|
64
|
+
/**
|
|
65
|
+
* Add compensation logic to an effect inside a Workflow. The compensation finalizer will be
|
|
66
|
+
* called if the entire workflow fails, allowing you to perform cleanup or
|
|
67
|
+
* other actions based on the success value and the cause of the workflow failure.
|
|
68
|
+
*
|
|
69
|
+
* NOTE: Compensation will not work for nested activities. Compensation
|
|
70
|
+
* finalizers are only registered for top-level effects in the workflow.
|
|
71
|
+
*/
|
|
72
|
+
readonly withCompensation: {
|
|
73
|
+
<A, R2>(compensation: (value: A, cause: Cause.Cause<Error["Type"]>) => Effect.Effect<void, never, R2>): <E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R | R2 | WorkflowInstance | Execution<Name> | Scope.Scope>;
|
|
74
|
+
<A, E, R, R2>(effect: Effect.Effect<A, E, R>, compensation: (value: A, cause: Cause.Cause<Error["Type"]>) => Effect.Effect<void, never, R2>): Effect.Effect<A, E, R | R2 | WorkflowInstance | Execution<Name> | Scope.Scope>;
|
|
75
|
+
};
|
|
49
76
|
}
|
|
50
77
|
/**
|
|
51
78
|
* @since 1.0.0
|
|
@@ -78,6 +105,14 @@ export interface Registration<Name extends string> {
|
|
|
78
105
|
readonly _: unique symbol;
|
|
79
106
|
readonly name: Name;
|
|
80
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* @since 1.0.0
|
|
110
|
+
* @category Models
|
|
111
|
+
*/
|
|
112
|
+
export interface Execution<Name extends string> {
|
|
113
|
+
readonly _: unique symbol;
|
|
114
|
+
readonly name: Name;
|
|
115
|
+
}
|
|
81
116
|
/**
|
|
82
117
|
* @since 1.0.0
|
|
83
118
|
* @category Models
|
|
@@ -88,8 +123,19 @@ export interface Any {
|
|
|
88
123
|
readonly payloadSchema: AnyStructSchema;
|
|
89
124
|
readonly successSchema: Schema.Schema.Any;
|
|
90
125
|
readonly errorSchema: Schema.Schema.All;
|
|
126
|
+
readonly annotations: Context.Context<never>;
|
|
91
127
|
readonly executionId: (payload: any) => Effect.Effect<string>;
|
|
92
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* @since 1.0.0
|
|
131
|
+
* @category Models
|
|
132
|
+
*/
|
|
133
|
+
export type Registrations<Workflows extends Any> = Workflows extends Workflow<infer _Name, infer _Payload, infer _Success, infer _Error> ? Registration<_Name> : never;
|
|
134
|
+
/**
|
|
135
|
+
* @since 1.0.0
|
|
136
|
+
* @category Models
|
|
137
|
+
*/
|
|
138
|
+
export type Requirements<Workflows extends Any> = Workflows extends Workflow<infer _Name, infer _Payload, infer _Success, infer _Error> ? _Payload["Context"] | _Success["Context"] | _Error["Context"] : never;
|
|
93
139
|
/**
|
|
94
140
|
* @since 1.0.0
|
|
95
141
|
* @category Constructors
|
|
@@ -101,6 +147,7 @@ export declare const make: <const Name extends string, Payload extends Schema.St
|
|
|
101
147
|
readonly success?: Success;
|
|
102
148
|
readonly error?: Error;
|
|
103
149
|
readonly suspendedRetrySchedule?: Schedule.Schedule<any, unknown> | undefined;
|
|
150
|
+
readonly annotations?: Context.Context<never>;
|
|
104
151
|
}) => Workflow<Name, Payload extends Schema.Struct.Fields ? Schema.Struct<Payload> : Payload, Success, Error>;
|
|
105
152
|
/**
|
|
106
153
|
* @since 1.0.0
|
|
@@ -207,5 +254,42 @@ export declare const Result: <Success extends Schema.Schema.Any, Error extends S
|
|
|
207
254
|
* @category Result
|
|
208
255
|
*/
|
|
209
256
|
export declare const intoResult: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<Result<A, E>, never, R | WorkflowInstance>;
|
|
257
|
+
/**
|
|
258
|
+
* Add compensation logic to an effect inside a Workflow. The compensation finalizer will be
|
|
259
|
+
* called if the entire workflow fails, allowing you to perform cleanup or
|
|
260
|
+
* other actions based on the success value and the cause of the workflow failure.
|
|
261
|
+
*
|
|
262
|
+
* NOTE: Compensation will not work for nested activities. Compensation
|
|
263
|
+
* finalizers are only registered for top-level effects in the workflow.
|
|
264
|
+
*
|
|
265
|
+
* @since 1.0.0
|
|
266
|
+
* @category Compensation
|
|
267
|
+
*/
|
|
268
|
+
export declare const withCompensation: {
|
|
269
|
+
/**
|
|
270
|
+
* Add compensation logic to an effect inside a Workflow. The compensation finalizer will be
|
|
271
|
+
* called if the entire workflow fails, allowing you to perform cleanup or
|
|
272
|
+
* other actions based on the success value and the cause of the workflow failure.
|
|
273
|
+
*
|
|
274
|
+
* NOTE: Compensation will not work for nested activities. Compensation
|
|
275
|
+
* finalizers are only registered for top-level effects in the workflow.
|
|
276
|
+
*
|
|
277
|
+
* @since 1.0.0
|
|
278
|
+
* @category Compensation
|
|
279
|
+
*/
|
|
280
|
+
<A, R2>(compensation: (value: A, cause: Cause.Cause<unknown>) => Effect.Effect<void, never, R2>): <E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R | R2 | WorkflowInstance | Scope.Scope>;
|
|
281
|
+
/**
|
|
282
|
+
* Add compensation logic to an effect inside a Workflow. The compensation finalizer will be
|
|
283
|
+
* called if the entire workflow fails, allowing you to perform cleanup or
|
|
284
|
+
* other actions based on the success value and the cause of the workflow failure.
|
|
285
|
+
*
|
|
286
|
+
* NOTE: Compensation will not work for nested activities. Compensation
|
|
287
|
+
* finalizers are only registered for top-level effects in the workflow.
|
|
288
|
+
*
|
|
289
|
+
* @since 1.0.0
|
|
290
|
+
* @category Compensation
|
|
291
|
+
*/
|
|
292
|
+
<A, E, R, R2>(effect: Effect.Effect<A, E, R>, compensation: (value: A, cause: Cause.Cause<unknown>) => Effect.Effect<void, never, R2>): Effect.Effect<A, E, R | R2 | WorkflowInstance | Scope.Scope>;
|
|
293
|
+
};
|
|
210
294
|
export {};
|
|
211
295
|
//# sourceMappingURL=Workflow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Workflow.d.ts","sourceRoot":"","sources":["../../src/Workflow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Workflow.d.ts","sourceRoot":"","sources":["../../src/Workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import * as HttpApiEndpoint from "@effect/platform/HttpApiEndpoint";
|
|
5
|
+
import * as HttpApiGroup from "@effect/platform/HttpApiGroup";
|
|
6
|
+
import * as Rpc from "@effect/rpc/Rpc";
|
|
7
|
+
import * as RpcGroup from "@effect/rpc/RpcGroup";
|
|
8
|
+
import type { NonEmptyReadonlyArray } from "effect/Array";
|
|
9
|
+
import type * as Workflow from "./Workflow.js";
|
|
10
|
+
/**
|
|
11
|
+
* Derives an `RpcGroup` from a list of workflows.
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* import { RpcServer } from "@effect/rpc"
|
|
15
|
+
* import { Workflow, WorkflowProxy, WorkflowProxyServer } from "@effect/workflow"
|
|
16
|
+
* import { Layer, Schema } from "effect"
|
|
17
|
+
*
|
|
18
|
+
* const EmailWorkflow = Workflow.make({
|
|
19
|
+
* name: "EmailWorkflow",
|
|
20
|
+
* payload: {
|
|
21
|
+
* id: Schema.String,
|
|
22
|
+
* to: Schema.String
|
|
23
|
+
* },
|
|
24
|
+
* idempotencyKey: ({ id }) => id
|
|
25
|
+
* })
|
|
26
|
+
*
|
|
27
|
+
* const myWorkflows = [EmailWorkflow] as const
|
|
28
|
+
*
|
|
29
|
+
* // Use WorkflowProxy.toRpcGroup to create a `RpcGroup` from the
|
|
30
|
+
* // workflows
|
|
31
|
+
* class MyRpcs extends WorkflowProxy.toRpcGroup(myWorkflows) {}
|
|
32
|
+
*
|
|
33
|
+
* // Use WorkflowProxyServer.layerRpcHandlers to create a layer that implements
|
|
34
|
+
* // the rpc handlers
|
|
35
|
+
* const ApiLayer = RpcServer.layer(MyRpcs).pipe(
|
|
36
|
+
* Layer.provide(WorkflowProxyServer.layerRpcHandlers(myWorkflows))
|
|
37
|
+
* )
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @since 1.0.0
|
|
41
|
+
* @category Constructors
|
|
42
|
+
*/
|
|
43
|
+
export declare const toRpcGroup: <const Workflows extends NonEmptyReadonlyArray<Workflow.Any>, const Prefix extends string = "">(workflows: Workflows, options?: {
|
|
44
|
+
readonly prefix?: Prefix | undefined;
|
|
45
|
+
}) => RpcGroup.RpcGroup<ConvertRpcs<Workflows[number], Prefix>>;
|
|
46
|
+
/**
|
|
47
|
+
* @since 1.0.0
|
|
48
|
+
*/
|
|
49
|
+
export type ConvertRpcs<Workflows extends Workflow.Any, Prefix extends string> = Workflows extends Workflow.Workflow<infer _Name, infer _Payload, infer _Success, infer _Error> ? Rpc.Rpc<`${Prefix}${_Name}`, _Payload, _Success, _Error> | Rpc.Rpc<`${Prefix}${_Name}Discard`, _Payload> : never;
|
|
50
|
+
/**
|
|
51
|
+
* Derives an `HttpApiGroup` from a list of workflows.
|
|
52
|
+
*
|
|
53
|
+
* ```ts
|
|
54
|
+
* import { HttpApi, HttpApiBuilder } from "@effect/platform"
|
|
55
|
+
* import { Workflow, WorkflowProxy, WorkflowProxyServer } from "@effect/workflow"
|
|
56
|
+
* import { Layer, Schema } from "effect"
|
|
57
|
+
*
|
|
58
|
+
* const EmailWorkflow = Workflow.make({
|
|
59
|
+
* name: "EmailWorkflow",
|
|
60
|
+
* payload: {
|
|
61
|
+
* id: Schema.String,
|
|
62
|
+
* to: Schema.String
|
|
63
|
+
* },
|
|
64
|
+
* idempotencyKey: ({ id }) => id
|
|
65
|
+
* })
|
|
66
|
+
*
|
|
67
|
+
* const myWorkflows = [EmailWorkflow] as const
|
|
68
|
+
*
|
|
69
|
+
* // Use WorkflowProxy.toHttpApiGroup to create a `HttpApiGroup` from the
|
|
70
|
+
* // workflows
|
|
71
|
+
* class MyApi extends HttpApi.make("api")
|
|
72
|
+
* .add(WorkflowProxy.toHttpApiGroup("workflows", myWorkflows))
|
|
73
|
+
* {}
|
|
74
|
+
*
|
|
75
|
+
* // Use WorkflowProxyServer.layerHttpApi to create a layer that implements the
|
|
76
|
+
* // workflows HttpApiGroup
|
|
77
|
+
* const ApiLayer = HttpApiBuilder.api(MyApi).pipe(
|
|
78
|
+
* Layer.provide(WorkflowProxyServer.layerHttpApi(MyApi, "workflows", myWorkflows))
|
|
79
|
+
* )
|
|
80
|
+
* ```
|
|
81
|
+
*
|
|
82
|
+
* @since 1.0.0
|
|
83
|
+
* @category Constructors
|
|
84
|
+
*/
|
|
85
|
+
export declare const toHttpApiGroup: <const Name extends string, const Workflows extends NonEmptyReadonlyArray<Workflow.Any>>(name: Name, workflows: Workflows) => HttpApiGroup.HttpApiGroup<Name, ConvertHttpApi<Workflows[number]>>;
|
|
86
|
+
/**
|
|
87
|
+
* @since 1.0.0
|
|
88
|
+
*/
|
|
89
|
+
export type ConvertHttpApi<Workflows extends Workflow.Any> = Workflows extends Workflow.Workflow<infer _Name, infer _Payload, infer _Success, infer _Error> ? HttpApiEndpoint.HttpApiEndpoint<_Name, "POST", never, never, _Payload["Type"], never, _Success["Type"], _Error["Type"], _Payload["Context"] | _Success["Context"], _Error["Context"]> | HttpApiEndpoint.HttpApiEndpoint<`${_Name}Discard`, "POST", never, never, _Payload["Type"], never, void, never, _Payload["Context"]> : never;
|
|
90
|
+
//# sourceMappingURL=WorkflowProxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowProxy.d.ts","sourceRoot":"","sources":["../../src/WorkflowProxy.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,eAAe,MAAM,kCAAkC,CAAA;AACnE,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAA;AAC7D,OAAO,KAAK,GAAG,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAA;AAChD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,KAAK,KAAK,QAAQ,MAAM,eAAe,CAAA;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,UAAU,GACrB,KAAK,CAAC,SAAS,SAAS,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC3D,KAAK,CAAC,MAAM,SAAS,MAAM,GAAG,EAAE,EAEhC,WAAW,SAAS,EACpB,UAAU;IACR,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACrC,KACA,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAgB1D,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,SAAS,SAAS,QAAQ,CAAC,GAAG,EAAE,MAAM,SAAS,MAAM,IAAI,SAAS,SAAS,QAAQ,CAAC,QAAQ,CAClH,MAAM,KAAK,EACX,MAAM,QAAQ,EACd,MAAM,QAAQ,EACd,MAAM,MAAM,CACb,GACK,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,GACxD,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,SAAS,EAAE,QAAQ,CAAC,GAC/C,KAAK,CAAA;AAET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,cAAc,GAAI,KAAK,CAAC,IAAI,SAAS,MAAM,EAAE,KAAK,CAAC,SAAS,SAAS,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,EACnH,MAAM,IAAI,EACV,WAAW,SAAS,KACnB,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAiBnE,CAAA;AAQD;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,SAAS,SAAS,QAAQ,CAAC,GAAG,IAAI,SAAS,SAAS,QAAQ,CAAC,QAAQ,CAC9F,MAAM,KAAK,EACX,MAAM,QAAQ,EACd,MAAM,QAAQ,EACd,MAAM,MAAM,CACb,GACK,eAAe,CAAC,eAAe,CAC/B,KAAK,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,CAAC,MAAM,CAAC,EAChB,KAAK,EACL,QAAQ,CAAC,MAAM,CAAC,EAChB,MAAM,CAAC,MAAM,CAAC,EACd,QAAQ,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,EACzC,MAAM,CAAC,SAAS,CAAC,CAClB,GACC,eAAe,CAAC,eAAe,CAC/B,GAAG,KAAK,SAAS,EACjB,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,CAAC,MAAM,CAAC,EAChB,KAAK,EACL,IAAI,EACJ,KAAK,EACL,QAAQ,CAAC,SAAS,CAAC,CACpB,GACH,KAAK,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import type * as HttpApi from "@effect/platform/HttpApi";
|
|
5
|
+
import type { ApiGroup, HttpApiGroup } from "@effect/platform/HttpApiGroup";
|
|
6
|
+
import type * as Rpc from "@effect/rpc/Rpc";
|
|
7
|
+
import type { NonEmptyReadonlyArray } from "effect/Array";
|
|
8
|
+
import * as Layer from "effect/Layer";
|
|
9
|
+
import type * as Workflow from "./Workflow.js";
|
|
10
|
+
import type { WorkflowEngine } from "./WorkflowEngine.js";
|
|
11
|
+
/**
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
* @category Layers
|
|
14
|
+
*/
|
|
15
|
+
export declare const layerHttpApi: <ApiId extends string, Groups extends HttpApiGroup.Any, ApiE, ApiR, Name extends HttpApiGroup.Name<Groups>, const Workflows extends NonEmptyReadonlyArray<Workflow.Any>>(api: HttpApi.HttpApi<ApiId, Groups, ApiE, ApiR>, name: Name, workflows: Workflows) => Layer.Layer<ApiGroup<ApiId, Name>, never, WorkflowEngine | Workflow.Registrations<Workflows[number]> | Workflow.Requirements<Workflows[number]>>;
|
|
16
|
+
/**
|
|
17
|
+
* @since 1.0.0
|
|
18
|
+
* @category Layers
|
|
19
|
+
*/
|
|
20
|
+
export declare const layerRpcHandlers: <const Workflows extends NonEmptyReadonlyArray<Workflow.Any>, const Prefix extends string = "">(workflows: Workflows, options?: {
|
|
21
|
+
readonly prefix?: Prefix;
|
|
22
|
+
}) => Layer.Layer<RpcHandlers<Workflows[number], Prefix>, never, WorkflowEngine | Workflow.Registrations<Workflows[number]> | Workflow.Requirements<Workflows[number]>>;
|
|
23
|
+
/**
|
|
24
|
+
* @since 1.0.0
|
|
25
|
+
*/
|
|
26
|
+
export type RpcHandlers<Workflows extends Workflow.Any, Prefix extends string> = Workflows extends Workflow.Workflow<infer _Name, infer _Payload, infer _Success, infer _Error> ? Rpc.Handler<`${Prefix}${_Name}`> | Rpc.Handler<`${Prefix}${_Name}Discard`> : never;
|
|
27
|
+
//# sourceMappingURL=WorkflowProxyServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowProxyServer.d.ts","sourceRoot":"","sources":["../../src/WorkflowProxyServer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,KAAK,OAAO,MAAM,0BAA0B,CAAA;AAExD,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC3E,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAGzD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,QAAQ,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD;;;GAGG;AACH,eAAO,MAAM,YAAY,GACvB,KAAK,SAAS,MAAM,EACpB,MAAM,SAAS,YAAY,CAAC,GAAG,EAC/B,IAAI,EACJ,IAAI,EACJ,IAAI,SAAS,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EACtC,KAAK,CAAC,SAAS,SAAS,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAE3D,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,EAC/C,MAAM,IAAI,EACV,WAAW,SAAS,KACnB,KAAK,CAAC,KAAK,CACZ,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,EACrB,KAAK,EACL,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAqBpG,CAAA;AAEH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAC3B,KAAK,CAAC,SAAS,SAAS,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC3D,KAAK,CAAC,MAAM,SAAS,MAAM,GAAG,EAAE,EAChC,WAAW,SAAS,EAAE,UAAU;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB,KAAG,KAAK,CAAC,KAAK,CACb,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EACtC,KAAK,EACL,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAwBlG,CAAA;AAEL;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,SAAS,SAAS,QAAQ,CAAC,GAAG,EAAE,MAAM,SAAS,MAAM,IAAI,SAAS,SAAS,QAAQ,CAAC,QAAQ,CAClH,MAAM,KAAK,EACX,MAAM,QAAQ,EACd,MAAM,QAAQ,EACd,MAAM,MAAM,CACb,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,KAAK,SAAS,CAAC,GAC1E,KAAK,CAAA"}
|
package/dist/dts/index.d.ts
CHANGED
|
@@ -18,4 +18,12 @@ export * as Workflow from "./Workflow.js";
|
|
|
18
18
|
* @since 1.0.0
|
|
19
19
|
*/
|
|
20
20
|
export * as WorkflowEngine from "./WorkflowEngine.js";
|
|
21
|
+
/**
|
|
22
|
+
* @since 1.0.0
|
|
23
|
+
*/
|
|
24
|
+
export * as WorkflowProxy from "./WorkflowProxy.js";
|
|
25
|
+
/**
|
|
26
|
+
* @since 1.0.0
|
|
27
|
+
*/
|
|
28
|
+
export * as WorkflowProxyServer from "./WorkflowProxyServer.js";
|
|
21
29
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/dts/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;GAEG;AACH,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AAEjD;;GAEG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AAEvD;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;GAEG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;GAEG;AACH,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AAEjD;;GAEG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AAEvD;;GAEG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;GAEG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;GAEG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;GAEG;AACH,OAAO,KAAK,mBAAmB,MAAM,0BAA0B,CAAA"}
|
package/dist/esm/Activity.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
1
4
|
import * as Context from "effect/Context";
|
|
2
5
|
import * as Effect from "effect/Effect";
|
|
3
6
|
import * as Effectable from "effect/Effectable";
|
|
@@ -29,6 +32,7 @@ export const make = options => {
|
|
|
29
32
|
failure: errorSchema,
|
|
30
33
|
defect: Schema.Defect
|
|
31
34
|
}),
|
|
35
|
+
execute: options.execute,
|
|
32
36
|
executeEncoded: Effect.matchEffect(options.execute, {
|
|
33
37
|
onFailure: error => Effect.flatMap(Effect.orDie(Schema.encode(self.errorSchema)(error)), Effect.fail),
|
|
34
38
|
onSuccess: value => Effect.orDie(Schema.encode(self.successSchema)(value))
|
|
@@ -48,16 +52,6 @@ export const retry = /*#__PURE__*/dual(2, (effect, options) => Effect.suspend(()
|
|
|
48
52
|
let attempt = 1;
|
|
49
53
|
return Effect.suspend(() => Effect.provideService(effect, CurrentAttempt, attempt++)).pipe(Effect.retry(options));
|
|
50
54
|
}));
|
|
51
|
-
/**
|
|
52
|
-
* @since 1.0.0
|
|
53
|
-
* @category Error handling
|
|
54
|
-
*/
|
|
55
|
-
export const onError = /*#__PURE__*/dual(2, (self, onError) => make({
|
|
56
|
-
name: `${self.name}/onError`,
|
|
57
|
-
success: self.successSchema,
|
|
58
|
-
error: self.errorSchema,
|
|
59
|
-
execute: Effect.onError(self, onError)
|
|
60
|
-
}));
|
|
61
55
|
/**
|
|
62
56
|
* @since 1.0.0
|
|
63
57
|
* @category Attempts
|
package/dist/esm/Activity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Activity.js","names":["Context","Effect","Effectable","dual","Schema","makeHashDigest","TypeId","Symbol","for","make","options","successSchema","success","Void","errorSchema","error","Never","execute","self","CommitPrototype","name","exitSchema","ExitFromSelf","failure","defect","Defect","executeEncoded","matchEffect","onFailure","flatMap","orDie","encode","fail","onSuccess","value","commit","makeExecute","retry","effect","suspend","attempt","provideService","CurrentAttempt","pipe","
|
|
1
|
+
{"version":3,"file":"Activity.js","names":["Context","Effect","Effectable","dual","Schema","makeHashDigest","TypeId","Symbol","for","make","options","successSchema","success","Void","errorSchema","error","Never","execute","self","CommitPrototype","name","exitSchema","ExitFromSelf","failure","defect","Defect","executeEncoded","matchEffect","onFailure","flatMap","orDie","encode","fail","onSuccess","value","commit","makeExecute","retry","effect","suspend","attempt","provideService","CurrentAttempt","pipe","Reference","defaultValue","executionIdWithAttempt","gen","instance","InstanceTag","executionId","EngineTag","GenericTag","fnUntraced","activity","engine","result","activityExecute","_tag","suspended","interrupt","exit","decode"],"sources":["../../src/Activity.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/esm/Workflow.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @since 1.0.0
|
|
3
|
-
*/
|
|
4
1
|
import * as Context from "effect/Context";
|
|
5
2
|
import * as Data from "effect/Data";
|
|
6
3
|
import * as Effect from "effect/Effect";
|
|
7
4
|
import * as Exit from "effect/Exit";
|
|
5
|
+
import { dual } from "effect/Function";
|
|
8
6
|
import * as Layer from "effect/Layer";
|
|
9
7
|
import * as Predicate from "effect/Predicate";
|
|
10
8
|
import * as PrimaryKey from "effect/PrimaryKey";
|
|
@@ -31,6 +29,19 @@ export const make = options => {
|
|
|
31
29
|
payloadSchema: Schema.isSchema(options.payload) ? options.payload : Schema.Struct(options.payload),
|
|
32
30
|
successSchema: options.success ?? Schema.Void,
|
|
33
31
|
errorSchema: options.error ?? Schema.Never,
|
|
32
|
+
annotations: options.annotations ?? Context.empty(),
|
|
33
|
+
annotate(tag, value) {
|
|
34
|
+
return make({
|
|
35
|
+
...options,
|
|
36
|
+
annotations: Context.add(self.annotations, tag, value)
|
|
37
|
+
});
|
|
38
|
+
},
|
|
39
|
+
annotateContext(context) {
|
|
40
|
+
return make({
|
|
41
|
+
...options,
|
|
42
|
+
annotations: Context.merge(self.annotations, context)
|
|
43
|
+
});
|
|
44
|
+
},
|
|
34
45
|
execute: Effect.fnUntraced(function* (fields, opts) {
|
|
35
46
|
const payload = self.payloadSchema.make(fields);
|
|
36
47
|
const engine = yield* EngineTag;
|
|
@@ -79,7 +90,8 @@ export const make = options => {
|
|
|
79
90
|
yield* engine.register(self, (payload, executionId) => execute(payload, executionId).pipe(Effect.provide(context)));
|
|
80
91
|
return EngineTag.context(engine);
|
|
81
92
|
})),
|
|
82
|
-
executionId: payload => makeExecutionId(self.payloadSchema.make(payload))
|
|
93
|
+
executionId: payload => makeExecutionId(self.payloadSchema.make(payload)),
|
|
94
|
+
withCompensation
|
|
83
95
|
};
|
|
84
96
|
return self;
|
|
85
97
|
};
|
|
@@ -180,4 +192,24 @@ export const intoResult = effect => Effect.uninterruptibleMask(restore => Effect
|
|
|
180
192
|
});
|
|
181
193
|
}
|
|
182
194
|
})));
|
|
195
|
+
/**
|
|
196
|
+
* Add compensation logic to an effect inside a Workflow. The compensation finalizer will be
|
|
197
|
+
* called if the entire workflow fails, allowing you to perform cleanup or
|
|
198
|
+
* other actions based on the success value and the cause of the workflow failure.
|
|
199
|
+
*
|
|
200
|
+
* NOTE: Compensation will not work for nested activities. Compensation
|
|
201
|
+
* finalizers are only registered for top-level effects in the workflow.
|
|
202
|
+
*
|
|
203
|
+
* @since 1.0.0
|
|
204
|
+
* @category Compensation
|
|
205
|
+
*/
|
|
206
|
+
export const withCompensation = /*#__PURE__*/dual(2, (effect, compensation) => Effect.uninterruptibleMask(restore => Effect.contextWithEffect(context => {
|
|
207
|
+
const instance = Context.get(context, InstanceTag);
|
|
208
|
+
return Effect.tap(restore(effect), value => Effect.addFinalizer(exit => {
|
|
209
|
+
if (Exit.isSuccess(exit) || instance.suspended) {
|
|
210
|
+
return Effect.void;
|
|
211
|
+
}
|
|
212
|
+
return compensation(value, exit.cause);
|
|
213
|
+
}));
|
|
214
|
+
})));
|
|
183
215
|
//# sourceMappingURL=Workflow.js.map
|
package/dist/esm/Workflow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Workflow.js","names":["Context","Data","Effect","Exit","Layer","Predicate","PrimaryKey","Schedule","Schema","makeHashDigest","TypeId","Symbol","for","EngineTag","GenericTag","InstanceTag","make","options","suspendedRetrySchedule","defaultRetrySchedule","makeExecutionId","payload","name","idempotencyKey","self","payloadSchema","isSchema","Struct","successSchema","success","Void","errorSchema","error","Never","execute","fnUntraced","fields","opts","engine","executionId","annotateCurrentSpan","discard","workflow","sleep","result","_tag","exit","driver","next","pipe","catchAll","dieMessage","withSpan","captureStackTrace","interrupt","effect","attributes","toLayer","effectContext","gen","
|
|
1
|
+
{"version":3,"file":"Workflow.js","names":["Context","Data","Effect","Exit","dual","Layer","Predicate","PrimaryKey","Schedule","Schema","makeHashDigest","TypeId","Symbol","for","EngineTag","GenericTag","InstanceTag","make","options","suspendedRetrySchedule","defaultRetrySchedule","makeExecutionId","payload","name","idempotencyKey","self","payloadSchema","isSchema","Struct","successSchema","success","Void","errorSchema","error","Never","annotations","empty","annotate","tag","value","add","annotateContext","context","merge","execute","fnUntraced","fields","opts","engine","executionId","annotateCurrentSpan","discard","workflow","sleep","result","_tag","exit","driver","next","pipe","catchAll","dieMessage","withSpan","captureStackTrace","interrupt","effect","attributes","toLayer","effectContext","gen","get","register","provide","withCompensation","exponential","union","spaced","fromTaggedRequest","schema","failure","ResultTypeId","isResult","u","hasProperty","Complete","TaggedClass","SchemaFromSelf","_options","declare","SchemaEncoded","defect","Defect","transform","decode","fromA","encode","toI","Suspended","Result","Union","intoResult","uninterruptibleMask","restore","withFiberRuntime","fiber","matchCause","onSuccess","succeed","onFailure","cause","instance","unsafeGet","currentContext","suspended","failCause","compensation","contextWithEffect","tap","addFinalizer","isSuccess","void"],"sources":["../../src/Workflow.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import * as HttpApiEndpoint from "@effect/platform/HttpApiEndpoint";
|
|
5
|
+
import * as HttpApiGroup from "@effect/platform/HttpApiGroup";
|
|
6
|
+
import * as Rpc from "@effect/rpc/Rpc";
|
|
7
|
+
import * as RpcGroup from "@effect/rpc/RpcGroup";
|
|
8
|
+
/**
|
|
9
|
+
* Derives an `RpcGroup` from a list of workflows.
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { RpcServer } from "@effect/rpc"
|
|
13
|
+
* import { Workflow, WorkflowProxy, WorkflowProxyServer } from "@effect/workflow"
|
|
14
|
+
* import { Layer, Schema } from "effect"
|
|
15
|
+
*
|
|
16
|
+
* const EmailWorkflow = Workflow.make({
|
|
17
|
+
* name: "EmailWorkflow",
|
|
18
|
+
* payload: {
|
|
19
|
+
* id: Schema.String,
|
|
20
|
+
* to: Schema.String
|
|
21
|
+
* },
|
|
22
|
+
* idempotencyKey: ({ id }) => id
|
|
23
|
+
* })
|
|
24
|
+
*
|
|
25
|
+
* const myWorkflows = [EmailWorkflow] as const
|
|
26
|
+
*
|
|
27
|
+
* // Use WorkflowProxy.toRpcGroup to create a `RpcGroup` from the
|
|
28
|
+
* // workflows
|
|
29
|
+
* class MyRpcs extends WorkflowProxy.toRpcGroup(myWorkflows) {}
|
|
30
|
+
*
|
|
31
|
+
* // Use WorkflowProxyServer.layerRpcHandlers to create a layer that implements
|
|
32
|
+
* // the rpc handlers
|
|
33
|
+
* const ApiLayer = RpcServer.layer(MyRpcs).pipe(
|
|
34
|
+
* Layer.provide(WorkflowProxyServer.layerRpcHandlers(myWorkflows))
|
|
35
|
+
* )
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @since 1.0.0
|
|
39
|
+
* @category Constructors
|
|
40
|
+
*/
|
|
41
|
+
export const toRpcGroup = (workflows, options) => {
|
|
42
|
+
const prefix = options?.prefix ?? "";
|
|
43
|
+
const rpcs = [];
|
|
44
|
+
for (const workflow of workflows) {
|
|
45
|
+
rpcs.push(Rpc.make(`${prefix}${workflow.name}`, {
|
|
46
|
+
payload: workflow.payloadSchema,
|
|
47
|
+
error: workflow.errorSchema,
|
|
48
|
+
success: workflow.successSchema
|
|
49
|
+
}).annotateContext(workflow.annotations), Rpc.make(`${prefix}${workflow.name}Discard`, {
|
|
50
|
+
payload: workflow.payloadSchema
|
|
51
|
+
}).annotateContext(workflow.annotations));
|
|
52
|
+
}
|
|
53
|
+
return RpcGroup.make(...rpcs);
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Derives an `HttpApiGroup` from a list of workflows.
|
|
57
|
+
*
|
|
58
|
+
* ```ts
|
|
59
|
+
* import { HttpApi, HttpApiBuilder } from "@effect/platform"
|
|
60
|
+
* import { Workflow, WorkflowProxy, WorkflowProxyServer } from "@effect/workflow"
|
|
61
|
+
* import { Layer, Schema } from "effect"
|
|
62
|
+
*
|
|
63
|
+
* const EmailWorkflow = Workflow.make({
|
|
64
|
+
* name: "EmailWorkflow",
|
|
65
|
+
* payload: {
|
|
66
|
+
* id: Schema.String,
|
|
67
|
+
* to: Schema.String
|
|
68
|
+
* },
|
|
69
|
+
* idempotencyKey: ({ id }) => id
|
|
70
|
+
* })
|
|
71
|
+
*
|
|
72
|
+
* const myWorkflows = [EmailWorkflow] as const
|
|
73
|
+
*
|
|
74
|
+
* // Use WorkflowProxy.toHttpApiGroup to create a `HttpApiGroup` from the
|
|
75
|
+
* // workflows
|
|
76
|
+
* class MyApi extends HttpApi.make("api")
|
|
77
|
+
* .add(WorkflowProxy.toHttpApiGroup("workflows", myWorkflows))
|
|
78
|
+
* {}
|
|
79
|
+
*
|
|
80
|
+
* // Use WorkflowProxyServer.layerHttpApi to create a layer that implements the
|
|
81
|
+
* // workflows HttpApiGroup
|
|
82
|
+
* const ApiLayer = HttpApiBuilder.api(MyApi).pipe(
|
|
83
|
+
* Layer.provide(WorkflowProxyServer.layerHttpApi(MyApi, "workflows", myWorkflows))
|
|
84
|
+
* )
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* @since 1.0.0
|
|
88
|
+
* @category Constructors
|
|
89
|
+
*/
|
|
90
|
+
export const toHttpApiGroup = (name, workflows) => {
|
|
91
|
+
let group = HttpApiGroup.make(name);
|
|
92
|
+
for (const workflow of workflows) {
|
|
93
|
+
const path = `/${tagToPath(workflow.name)}`;
|
|
94
|
+
group = group.add(HttpApiEndpoint.post(workflow.name, path).setPayload(workflow.payloadSchema).addSuccess(workflow.successSchema).addError(workflow.errorSchema).annotateContext(workflow.annotations)).add(HttpApiEndpoint.post(workflow.name + "Discard", `${path}/discard`).setPayload(workflow.payloadSchema).annotateContext(workflow.annotations));
|
|
95
|
+
}
|
|
96
|
+
return group;
|
|
97
|
+
};
|
|
98
|
+
const tagToPath = tag => tag.replace(/[^a-zA-Z0-9]+/g, "-") // Replace non-alphanumeric characters with hyphen
|
|
99
|
+
.replace(/([a-z])([A-Z])/g, "$1-$2") // Insert hyphen before uppercase letters
|
|
100
|
+
.toLowerCase();
|
|
101
|
+
//# sourceMappingURL=WorkflowProxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowProxy.js","names":["HttpApiEndpoint","HttpApiGroup","Rpc","RpcGroup","toRpcGroup","workflows","options","prefix","rpcs","workflow","push","make","name","payload","payloadSchema","error","errorSchema","success","successSchema","annotateContext","annotations","toHttpApiGroup","group","path","tagToPath","add","post","setPayload","addSuccess","addError","tag","replace","toLowerCase"],"sources":["../../src/WorkflowProxy.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,eAAe,MAAM,kCAAkC;AACnE,OAAO,KAAKC,YAAY,MAAM,+BAA+B;AAC7D,OAAO,KAAKC,GAAG,MAAM,iBAAiB;AACtC,OAAO,KAAKC,QAAQ,MAAM,sBAAsB;AAIhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,OAAO,MAAMC,UAAU,GAAGA,CAIxBC,SAAoB,EACpBC,OAEC,KAC4D;EAC7D,MAAMC,MAAM,GAAGD,OAAO,EAAEC,MAAM,IAAI,EAAE;EACpC,MAAMC,IAAI,GAAmB,EAAE;EAC/B,KAAK,MAAMC,QAAQ,IAAIJ,SAAS,EAAE;IAChCG,IAAI,CAACE,IAAI,CACPR,GAAG,CAACS,IAAI,CAAC,GAAGJ,MAAM,GAAGE,QAAQ,CAACG,IAAI,EAAE,EAAE;MACpCC,OAAO,EAAEJ,QAAQ,CAACK,aAAa;MAC/BC,KAAK,EAAEN,QAAQ,CAACO,WAAW;MAC3BC,OAAO,EAAER,QAAQ,CAACS;KACnB,CAAC,CAACC,eAAe,CAACV,QAAQ,CAACW,WAAW,CAAC,EACxClB,GAAG,CAACS,IAAI,CAAC,GAAGJ,MAAM,GAAGE,QAAQ,CAACG,IAAI,SAAS,EAAE;MAC3CC,OAAO,EAAEJ,QAAQ,CAACK;KACnB,CAAC,CAACK,eAAe,CAACV,QAAQ,CAACW,WAAW,CAAC,CACzC;EACH;EACA,OAAOjB,QAAQ,CAACQ,IAAI,CAAC,GAAGH,IAAI,CAAQ;AACtC,CAAC;AAeD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,OAAO,MAAMa,cAAc,GAAGA,CAC5BT,IAAU,EACVP,SAAoB,KACkD;EACtE,IAAIiB,KAAK,GAAGrB,YAAY,CAACU,IAAI,CAACC,IAAI,CAAC;EACnC,KAAK,MAAMH,QAAQ,IAAIJ,SAAS,EAAE;IAChC,MAAMkB,IAAI,GAAG,IAAIC,SAAS,CAACf,QAAQ,CAACG,IAAI,CAAC,EAAW;IACpDU,KAAK,GAAGA,KAAK,CAACG,GAAG,CACfzB,eAAe,CAAC0B,IAAI,CAACjB,QAAQ,CAACG,IAAI,EAAEW,IAAI,CAAC,CACtCI,UAAU,CAAClB,QAAQ,CAACK,aAAa,CAAC,CAClCc,UAAU,CAACnB,QAAQ,CAACS,aAAa,CAAC,CAClCW,QAAQ,CAACpB,QAAQ,CAACO,WAAkB,CAAC,CACrCG,eAAe,CAACV,QAAQ,CAACW,WAAW,CAAC,CACzC,CAACK,GAAG,CACHzB,eAAe,CAAC0B,IAAI,CAACjB,QAAQ,CAACG,IAAI,GAAG,SAAS,EAAE,GAAGW,IAAI,UAAU,CAAC,CAC/DI,UAAU,CAAClB,QAAQ,CAACK,aAAa,CAAC,CAClCK,eAAe,CAACV,QAAQ,CAACW,WAAW,CAAC,CAClC;EACV;EACA,OAAOE,KAAY;AACrB,CAAC;AAED,MAAME,SAAS,GAAIM,GAAW,IAC5BA,GAAG,CACAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;AAAA,CAC/BA,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;AAAA,CACpCC,WAAW,EAAE","ignoreList":[]}
|