@effect/workflow 0.1.2 → 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/WorkflowProxy/package.json +6 -0
- package/WorkflowProxyServer/package.json +6 -0
- package/dist/cjs/Workflow.js +13 -0
- 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/Workflow.d.ts +22 -0
- 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/Workflow.js +13 -0
- 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/Workflow.ts +60 -0
- package/src/WorkflowProxy.ts +178 -0
- package/src/WorkflowProxyServer.ts +103 -0
- package/src/index.ts +10 -0
package/dist/cjs/Workflow.js
CHANGED
|
@@ -36,6 +36,19 @@ const make = options => {
|
|
|
36
36
|
payloadSchema: Schema.isSchema(options.payload) ? options.payload : Schema.Struct(options.payload),
|
|
37
37
|
successSchema: options.success ?? Schema.Void,
|
|
38
38
|
errorSchema: options.error ?? Schema.Never,
|
|
39
|
+
annotations: options.annotations ?? Context.empty(),
|
|
40
|
+
annotate(tag, value) {
|
|
41
|
+
return make({
|
|
42
|
+
...options,
|
|
43
|
+
annotations: Context.add(self.annotations, tag, value)
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
annotateContext(context) {
|
|
47
|
+
return make({
|
|
48
|
+
...options,
|
|
49
|
+
annotations: Context.merge(self.annotations, context)
|
|
50
|
+
});
|
|
51
|
+
},
|
|
39
52
|
execute: Effect.fnUntraced(function* (fields, opts) {
|
|
40
53
|
const payload = self.payloadSchema.make(fields);
|
|
41
54
|
const engine = yield* EngineTag;
|
package/dist/cjs/Workflow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Workflow.js","names":["Context","_interopRequireWildcard","require","Data","Effect","Exit","_Function","Layer","Predicate","PrimaryKey","Schedule","Schema","_crypto","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TypeId","exports","Symbol","for","EngineTag","GenericTag","InstanceTag","make","options","suspendedRetrySchedule","defaultRetrySchedule","makeExecutionId","payload","makeHashDigest","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","_interopRequireWildcard","require","Data","Effect","Exit","_Function","Layer","Predicate","PrimaryKey","Schedule","Schema","_crypto","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TypeId","exports","Symbol","for","EngineTag","GenericTag","InstanceTag","make","options","suspendedRetrySchedule","defaultRetrySchedule","makeExecutionId","payload","makeHashDigest","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","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","dual","compensation","contextWithEffect","tap","addFinalizer","isSuccess","void"],"sources":["../../src/Workflow.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.toRpcGroup = exports.toHttpApiGroup = void 0;
|
|
7
|
+
var HttpApiEndpoint = _interopRequireWildcard(require("@effect/platform/HttpApiEndpoint"));
|
|
8
|
+
var HttpApiGroup = _interopRequireWildcard(require("@effect/platform/HttpApiGroup"));
|
|
9
|
+
var Rpc = _interopRequireWildcard(require("@effect/rpc/Rpc"));
|
|
10
|
+
var RpcGroup = _interopRequireWildcard(require("@effect/rpc/RpcGroup"));
|
|
11
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
12
|
+
/**
|
|
13
|
+
* @since 1.0.0
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Derives an `RpcGroup` from a list of workflows.
|
|
18
|
+
*
|
|
19
|
+
* ```ts
|
|
20
|
+
* import { RpcServer } from "@effect/rpc"
|
|
21
|
+
* import { Workflow, WorkflowProxy, WorkflowProxyServer } from "@effect/workflow"
|
|
22
|
+
* import { Layer, Schema } from "effect"
|
|
23
|
+
*
|
|
24
|
+
* const EmailWorkflow = Workflow.make({
|
|
25
|
+
* name: "EmailWorkflow",
|
|
26
|
+
* payload: {
|
|
27
|
+
* id: Schema.String,
|
|
28
|
+
* to: Schema.String
|
|
29
|
+
* },
|
|
30
|
+
* idempotencyKey: ({ id }) => id
|
|
31
|
+
* })
|
|
32
|
+
*
|
|
33
|
+
* const myWorkflows = [EmailWorkflow] as const
|
|
34
|
+
*
|
|
35
|
+
* // Use WorkflowProxy.toRpcGroup to create a `RpcGroup` from the
|
|
36
|
+
* // workflows
|
|
37
|
+
* class MyRpcs extends WorkflowProxy.toRpcGroup(myWorkflows) {}
|
|
38
|
+
*
|
|
39
|
+
* // Use WorkflowProxyServer.layerRpcHandlers to create a layer that implements
|
|
40
|
+
* // the rpc handlers
|
|
41
|
+
* const ApiLayer = RpcServer.layer(MyRpcs).pipe(
|
|
42
|
+
* Layer.provide(WorkflowProxyServer.layerRpcHandlers(myWorkflows))
|
|
43
|
+
* )
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @since 1.0.0
|
|
47
|
+
* @category Constructors
|
|
48
|
+
*/
|
|
49
|
+
const toRpcGroup = (workflows, options) => {
|
|
50
|
+
const prefix = options?.prefix ?? "";
|
|
51
|
+
const rpcs = [];
|
|
52
|
+
for (const workflow of workflows) {
|
|
53
|
+
rpcs.push(Rpc.make(`${prefix}${workflow.name}`, {
|
|
54
|
+
payload: workflow.payloadSchema,
|
|
55
|
+
error: workflow.errorSchema,
|
|
56
|
+
success: workflow.successSchema
|
|
57
|
+
}).annotateContext(workflow.annotations), Rpc.make(`${prefix}${workflow.name}Discard`, {
|
|
58
|
+
payload: workflow.payloadSchema
|
|
59
|
+
}).annotateContext(workflow.annotations));
|
|
60
|
+
}
|
|
61
|
+
return RpcGroup.make(...rpcs);
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Derives an `HttpApiGroup` from a list of workflows.
|
|
65
|
+
*
|
|
66
|
+
* ```ts
|
|
67
|
+
* import { HttpApi, HttpApiBuilder } from "@effect/platform"
|
|
68
|
+
* import { Workflow, WorkflowProxy, WorkflowProxyServer } from "@effect/workflow"
|
|
69
|
+
* import { Layer, Schema } from "effect"
|
|
70
|
+
*
|
|
71
|
+
* const EmailWorkflow = Workflow.make({
|
|
72
|
+
* name: "EmailWorkflow",
|
|
73
|
+
* payload: {
|
|
74
|
+
* id: Schema.String,
|
|
75
|
+
* to: Schema.String
|
|
76
|
+
* },
|
|
77
|
+
* idempotencyKey: ({ id }) => id
|
|
78
|
+
* })
|
|
79
|
+
*
|
|
80
|
+
* const myWorkflows = [EmailWorkflow] as const
|
|
81
|
+
*
|
|
82
|
+
* // Use WorkflowProxy.toHttpApiGroup to create a `HttpApiGroup` from the
|
|
83
|
+
* // workflows
|
|
84
|
+
* class MyApi extends HttpApi.make("api")
|
|
85
|
+
* .add(WorkflowProxy.toHttpApiGroup("workflows", myWorkflows))
|
|
86
|
+
* {}
|
|
87
|
+
*
|
|
88
|
+
* // Use WorkflowProxyServer.layerHttpApi to create a layer that implements the
|
|
89
|
+
* // workflows HttpApiGroup
|
|
90
|
+
* const ApiLayer = HttpApiBuilder.api(MyApi).pipe(
|
|
91
|
+
* Layer.provide(WorkflowProxyServer.layerHttpApi(MyApi, "workflows", myWorkflows))
|
|
92
|
+
* )
|
|
93
|
+
* ```
|
|
94
|
+
*
|
|
95
|
+
* @since 1.0.0
|
|
96
|
+
* @category Constructors
|
|
97
|
+
*/
|
|
98
|
+
exports.toRpcGroup = toRpcGroup;
|
|
99
|
+
const toHttpApiGroup = (name, workflows) => {
|
|
100
|
+
let group = HttpApiGroup.make(name);
|
|
101
|
+
for (const workflow of workflows) {
|
|
102
|
+
const path = `/${tagToPath(workflow.name)}`;
|
|
103
|
+
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));
|
|
104
|
+
}
|
|
105
|
+
return group;
|
|
106
|
+
};
|
|
107
|
+
exports.toHttpApiGroup = toHttpApiGroup;
|
|
108
|
+
const tagToPath = tag => tag.replace(/[^a-zA-Z0-9]+/g, "-") // Replace non-alphanumeric characters with hyphen
|
|
109
|
+
.replace(/([a-z])([A-Z])/g, "$1-$2") // Insert hyphen before uppercase letters
|
|
110
|
+
.toLowerCase();
|
|
111
|
+
//# sourceMappingURL=WorkflowProxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowProxy.js","names":["HttpApiEndpoint","_interopRequireWildcard","require","HttpApiGroup","Rpc","RpcGroup","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","toRpcGroup","workflows","options","prefix","rpcs","workflow","push","make","name","payload","payloadSchema","error","errorSchema","success","successSchema","annotateContext","annotations","exports","toHttpApiGroup","group","path","tagToPath","add","post","setPayload","addSuccess","addError","tag","replace","toLowerCase"],"sources":["../../src/WorkflowProxy.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.layerRpcHandlers = exports.layerHttpApi = void 0;
|
|
7
|
+
var HttpApiBuilder = _interopRequireWildcard(require("@effect/platform/HttpApiBuilder"));
|
|
8
|
+
var Context = _interopRequireWildcard(require("effect/Context"));
|
|
9
|
+
var Effect = _interopRequireWildcard(require("effect/Effect"));
|
|
10
|
+
var Layer = _interopRequireWildcard(require("effect/Layer"));
|
|
11
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
12
|
+
/**
|
|
13
|
+
* @since 1.0.0
|
|
14
|
+
* @category Layers
|
|
15
|
+
*/
|
|
16
|
+
const layerHttpApi = (api, name, workflows) => HttpApiBuilder.group(api, name, Effect.fnUntraced(function* (handlers_) {
|
|
17
|
+
let handlers = handlers_;
|
|
18
|
+
for (const workflow_ of workflows) {
|
|
19
|
+
const workflow = workflow_;
|
|
20
|
+
handlers = handlers.handle(workflow.name, ({
|
|
21
|
+
payload
|
|
22
|
+
}) => workflow.execute(payload)).handle(workflow.name + "Discard", ({
|
|
23
|
+
payload
|
|
24
|
+
}) => workflow.execute(payload, {
|
|
25
|
+
discard: true
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
return handlers;
|
|
29
|
+
}));
|
|
30
|
+
/**
|
|
31
|
+
* @since 1.0.0
|
|
32
|
+
* @category Layers
|
|
33
|
+
*/
|
|
34
|
+
exports.layerHttpApi = layerHttpApi;
|
|
35
|
+
const layerRpcHandlers = (workflows, options) => Layer.effectContext(Effect.gen(function* () {
|
|
36
|
+
const context = yield* Effect.context();
|
|
37
|
+
const prefix = options?.prefix ?? "";
|
|
38
|
+
const handlers = new Map();
|
|
39
|
+
for (const workflow_ of workflows) {
|
|
40
|
+
const workflow = workflow_;
|
|
41
|
+
const tag = `${prefix}${workflow.name}`;
|
|
42
|
+
const tagDiscard = `${tag}Discard`;
|
|
43
|
+
const key = `@effect/rpc/Rpc/${tag}`;
|
|
44
|
+
const keyDiscard = `${key}Discard`;
|
|
45
|
+
handlers.set(key, {
|
|
46
|
+
context,
|
|
47
|
+
tag,
|
|
48
|
+
handler: payload => workflow.execute(payload)
|
|
49
|
+
});
|
|
50
|
+
handlers.set(keyDiscard, {
|
|
51
|
+
context,
|
|
52
|
+
tag: tagDiscard,
|
|
53
|
+
handler: payload => workflow.execute(payload, {
|
|
54
|
+
discard: true
|
|
55
|
+
})
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return Context.unsafeMake(handlers);
|
|
59
|
+
}));
|
|
60
|
+
exports.layerRpcHandlers = layerRpcHandlers;
|
|
61
|
+
//# sourceMappingURL=WorkflowProxyServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowProxyServer.js","names":["HttpApiBuilder","_interopRequireWildcard","require","Context","Effect","Layer","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","layerHttpApi","api","name","workflows","group","fnUntraced","handlers_","handlers","workflow_","workflow","handle","payload","execute","discard","exports","layerRpcHandlers","options","effectContext","gen","context","prefix","Map","tag","tagDiscard","key","keyDiscard","handler","unsafeMake"],"sources":["../../src/WorkflowProxyServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/cjs/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.WorkflowEngine = exports.Workflow = exports.DurableDeferred = exports.DurableClock = exports.Activity = void 0;
|
|
6
|
+
exports.WorkflowProxyServer = exports.WorkflowProxy = exports.WorkflowEngine = exports.Workflow = exports.DurableDeferred = exports.DurableClock = exports.Activity = void 0;
|
|
7
7
|
var _Activity = _interopRequireWildcard(require("./Activity.js"));
|
|
8
8
|
exports.Activity = _Activity;
|
|
9
9
|
var _DurableClock = _interopRequireWildcard(require("./DurableClock.js"));
|
|
@@ -14,5 +14,9 @@ var _Workflow = _interopRequireWildcard(require("./Workflow.js"));
|
|
|
14
14
|
exports.Workflow = _Workflow;
|
|
15
15
|
var _WorkflowEngine = _interopRequireWildcard(require("./WorkflowEngine.js"));
|
|
16
16
|
exports.WorkflowEngine = _WorkflowEngine;
|
|
17
|
+
var _WorkflowProxy = _interopRequireWildcard(require("./WorkflowProxy.js"));
|
|
18
|
+
exports.WorkflowProxy = _WorkflowProxy;
|
|
19
|
+
var _WorkflowProxyServer = _interopRequireWildcard(require("./WorkflowProxyServer.js"));
|
|
20
|
+
exports.WorkflowProxyServer = _WorkflowProxyServer;
|
|
17
21
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
18
22
|
//# sourceMappingURL=index.js.map
|
package/dist/dts/Workflow.d.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
4
|
import type * as Cause from "effect/Cause";
|
|
5
|
+
import * as Context from "effect/Context";
|
|
5
6
|
import * as Effect from "effect/Effect";
|
|
6
7
|
import * as Exit from "effect/Exit";
|
|
7
8
|
import * as Layer from "effect/Layer";
|
|
@@ -32,6 +33,15 @@ export interface Workflow<Name extends string, Payload extends AnyStructSchema,
|
|
|
32
33
|
readonly payloadSchema: Payload;
|
|
33
34
|
readonly successSchema: Success;
|
|
34
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>;
|
|
35
45
|
/**
|
|
36
46
|
* Execute the workflow with the given payload.
|
|
37
47
|
*/
|
|
@@ -113,8 +123,19 @@ export interface Any {
|
|
|
113
123
|
readonly payloadSchema: AnyStructSchema;
|
|
114
124
|
readonly successSchema: Schema.Schema.Any;
|
|
115
125
|
readonly errorSchema: Schema.Schema.All;
|
|
126
|
+
readonly annotations: Context.Context<never>;
|
|
116
127
|
readonly executionId: (payload: any) => Effect.Effect<string>;
|
|
117
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;
|
|
118
139
|
/**
|
|
119
140
|
* @since 1.0.0
|
|
120
141
|
* @category Constructors
|
|
@@ -126,6 +147,7 @@ export declare const make: <const Name extends string, Payload extends Schema.St
|
|
|
126
147
|
readonly success?: Success;
|
|
127
148
|
readonly error?: Error;
|
|
128
149
|
readonly suspendedRetrySchedule?: Schedule.Schedule<any, unknown> | undefined;
|
|
150
|
+
readonly annotations?: Context.Context<never>;
|
|
129
151
|
}) => Workflow<Name, Payload extends Schema.Struct.Fields ? Schema.Struct<Payload> : Payload, Success, Error>;
|
|
130
152
|
/**
|
|
131
153
|
* @since 1.0.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Workflow.d.ts","sourceRoot":"","sources":["../../src/Workflow.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;
|
|
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/Workflow.js
CHANGED
|
@@ -29,6 +29,19 @@ export const make = options => {
|
|
|
29
29
|
payloadSchema: Schema.isSchema(options.payload) ? options.payload : Schema.Struct(options.payload),
|
|
30
30
|
successSchema: options.success ?? Schema.Void,
|
|
31
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
|
+
},
|
|
32
45
|
execute: Effect.fnUntraced(function* (fields, opts) {
|
|
33
46
|
const payload = self.payloadSchema.make(fields);
|
|
34
47
|
const engine = yield* EngineTag;
|
package/dist/esm/Workflow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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","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":[]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as HttpApiBuilder from "@effect/platform/HttpApiBuilder";
|
|
2
|
+
import * as Context from "effect/Context";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import * as Layer from "effect/Layer";
|
|
5
|
+
/**
|
|
6
|
+
* @since 1.0.0
|
|
7
|
+
* @category Layers
|
|
8
|
+
*/
|
|
9
|
+
export const layerHttpApi = (api, name, workflows) => HttpApiBuilder.group(api, name, Effect.fnUntraced(function* (handlers_) {
|
|
10
|
+
let handlers = handlers_;
|
|
11
|
+
for (const workflow_ of workflows) {
|
|
12
|
+
const workflow = workflow_;
|
|
13
|
+
handlers = handlers.handle(workflow.name, ({
|
|
14
|
+
payload
|
|
15
|
+
}) => workflow.execute(payload)).handle(workflow.name + "Discard", ({
|
|
16
|
+
payload
|
|
17
|
+
}) => workflow.execute(payload, {
|
|
18
|
+
discard: true
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
return handlers;
|
|
22
|
+
}));
|
|
23
|
+
/**
|
|
24
|
+
* @since 1.0.0
|
|
25
|
+
* @category Layers
|
|
26
|
+
*/
|
|
27
|
+
export const layerRpcHandlers = (workflows, options) => Layer.effectContext(Effect.gen(function* () {
|
|
28
|
+
const context = yield* Effect.context();
|
|
29
|
+
const prefix = options?.prefix ?? "";
|
|
30
|
+
const handlers = new Map();
|
|
31
|
+
for (const workflow_ of workflows) {
|
|
32
|
+
const workflow = workflow_;
|
|
33
|
+
const tag = `${prefix}${workflow.name}`;
|
|
34
|
+
const tagDiscard = `${tag}Discard`;
|
|
35
|
+
const key = `@effect/rpc/Rpc/${tag}`;
|
|
36
|
+
const keyDiscard = `${key}Discard`;
|
|
37
|
+
handlers.set(key, {
|
|
38
|
+
context,
|
|
39
|
+
tag,
|
|
40
|
+
handler: payload => workflow.execute(payload)
|
|
41
|
+
});
|
|
42
|
+
handlers.set(keyDiscard, {
|
|
43
|
+
context,
|
|
44
|
+
tag: tagDiscard,
|
|
45
|
+
handler: payload => workflow.execute(payload, {
|
|
46
|
+
discard: true
|
|
47
|
+
})
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return Context.unsafeMake(handlers);
|
|
51
|
+
}));
|
|
52
|
+
//# sourceMappingURL=WorkflowProxyServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowProxyServer.js","names":["HttpApiBuilder","Context","Effect","Layer","layerHttpApi","api","name","workflows","group","fnUntraced","handlers_","handlers","workflow_","workflow","handle","payload","execute","discard","layerRpcHandlers","options","effectContext","gen","context","prefix","Map","tag","tagDiscard","key","keyDiscard","set","handler","unsafeMake"],"sources":["../../src/WorkflowProxyServer.ts"],"sourcesContent":[null],"mappings":"AAIA,OAAO,KAAKA,cAAc,MAAM,iCAAiC;AAIjE,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AAIrC;;;;AAIA,OAAO,MAAMC,YAAY,GAAGA,CAQ1BC,GAA+C,EAC/CC,IAAU,EACVC,SAAoB,KAMpBP,cAAc,CAACQ,KAAK,CAClBH,GAAG,EACHC,IAAI,EACJJ,MAAM,CAACO,UAAU,CAAC,WAAUC,SAAS;EACnC,IAAIC,QAAQ,GAAGD,SAAgB;EAC/B,KAAK,MAAME,SAAS,IAAIL,SAAS,EAAE;IACjC,MAAMM,QAAQ,GAAGD,SAAqD;IACtED,QAAQ,GAAGA,QAAQ,CAChBG,MAAM,CACLD,QAAQ,CAACP,IAAW,EACpB,CAAC;MAAES;IAAO,CAAoB,KAAKF,QAAQ,CAACG,OAAO,CAACD,OAAO,CAAC,CAC7D,CACAD,MAAM,CACLD,QAAQ,CAACP,IAAI,GAAG,SAAgB,EAChC,CAAC;MAAES;IAAO,CAAoB,KAAKF,QAAQ,CAACG,OAAO,CAACD,OAAO,EAAE;MAAEE,OAAO,EAAE;IAAI,CAAS,CAAC,CACvF;EACL;EACA,OAAON,QAAwD;AACjE,CAAC,CAAC,CACH;AAEH;;;;AAIA,OAAO,MAAMO,gBAAgB,GAAGA,CAG9BX,SAAoB,EAAEY,OAEvB,KAKChB,KAAK,CAACiB,aAAa,CAAClB,MAAM,CAACmB,GAAG,CAAC,aAAS;EACtC,MAAMC,OAAO,GAAG,OAAOpB,MAAM,CAACoB,OAAO,EAAS;EAC9C,MAAMC,MAAM,GAAGJ,OAAO,EAAEI,MAAM,IAAI,EAAE;EACpC,MAAMZ,QAAQ,GAAG,IAAIa,GAAG,EAA+B;EACvD,KAAK,MAAMZ,SAAS,IAAIL,SAAS,EAAE;IACjC,MAAMM,QAAQ,GAAGD,SAAqD;IACtE,MAAMa,GAAG,GAAG,GAAGF,MAAM,GAAGV,QAAQ,CAACP,IAAI,EAAE;IACvC,MAAMoB,UAAU,GAAG,GAAGD,GAAG,SAAS;IAClC,MAAME,GAAG,GAAG,mBAAmBF,GAAG,EAAE;IACpC,MAAMG,UAAU,GAAG,GAAGD,GAAG,SAAS;IAClChB,QAAQ,CAACkB,GAAG,CAACF,GAAG,EAAE;MAChBL,OAAO;MACPG,GAAG;MACHK,OAAO,EAAGf,OAAY,IAAKF,QAAQ,CAACG,OAAO,CAACD,OAAO;KAC7C,CAAC;IACTJ,QAAQ,CAACkB,GAAG,CAACD,UAAU,EAAE;MACvBN,OAAO;MACPG,GAAG,EAAEC,UAAU;MACfI,OAAO,EAAGf,OAAY,IAAKF,QAAQ,CAACG,OAAO,CAACD,OAAO,EAAE;QAAEE,OAAO,EAAE;MAAI,CAAS;KACvE,CAAC;EACX;EACA,OAAOhB,OAAO,CAAC8B,UAAU,CAACpB,QAAQ,CAAC;AACrC,CAAC,CAAC,CAAC","ignoreList":[]}
|
package/dist/esm/index.js
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.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Activity","DurableClock","DurableDeferred","Workflow","WorkflowEngine"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAKC,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,eAAe,MAAM,sBAAsB;AAEvD;;;AAGA,OAAO,KAAKC,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAKC,cAAc,MAAM,qBAAqB","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["Activity","DurableClock","DurableDeferred","Workflow","WorkflowEngine","WorkflowProxy","WorkflowProxyServer"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAKC,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,eAAe,MAAM,sBAAsB;AAEvD;;;AAGA,OAAO,KAAKC,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AAErD;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,mBAAmB,MAAM,0BAA0B","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect/workflow",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Durable workflows for Effect",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
"sideEffects": [],
|
|
12
12
|
"homepage": "https://effect.website",
|
|
13
13
|
"peerDependencies": {
|
|
14
|
-
"effect": "^
|
|
14
|
+
"@effect/platform": "^0.84.6",
|
|
15
|
+
"effect": "^3.16.3",
|
|
16
|
+
"@effect/rpc": "^0.61.6"
|
|
15
17
|
},
|
|
16
18
|
"publishConfig": {
|
|
17
19
|
"provenance": true
|
|
@@ -50,6 +52,16 @@
|
|
|
50
52
|
"types": "./dist/dts/WorkflowEngine.d.ts",
|
|
51
53
|
"import": "./dist/esm/WorkflowEngine.js",
|
|
52
54
|
"default": "./dist/cjs/WorkflowEngine.js"
|
|
55
|
+
},
|
|
56
|
+
"./WorkflowProxy": {
|
|
57
|
+
"types": "./dist/dts/WorkflowProxy.d.ts",
|
|
58
|
+
"import": "./dist/esm/WorkflowProxy.js",
|
|
59
|
+
"default": "./dist/cjs/WorkflowProxy.js"
|
|
60
|
+
},
|
|
61
|
+
"./WorkflowProxyServer": {
|
|
62
|
+
"types": "./dist/dts/WorkflowProxyServer.d.ts",
|
|
63
|
+
"import": "./dist/esm/WorkflowProxyServer.js",
|
|
64
|
+
"default": "./dist/cjs/WorkflowProxyServer.js"
|
|
53
65
|
}
|
|
54
66
|
},
|
|
55
67
|
"typesVersions": {
|
|
@@ -68,6 +80,12 @@
|
|
|
68
80
|
],
|
|
69
81
|
"WorkflowEngine": [
|
|
70
82
|
"./dist/dts/WorkflowEngine.d.ts"
|
|
83
|
+
],
|
|
84
|
+
"WorkflowProxy": [
|
|
85
|
+
"./dist/dts/WorkflowProxy.d.ts"
|
|
86
|
+
],
|
|
87
|
+
"WorkflowProxyServer": [
|
|
88
|
+
"./dist/dts/WorkflowProxyServer.d.ts"
|
|
71
89
|
]
|
|
72
90
|
}
|
|
73
91
|
}
|
package/src/Workflow.ts
CHANGED
|
@@ -45,6 +45,27 @@ export interface Workflow<
|
|
|
45
45
|
readonly payloadSchema: Payload
|
|
46
46
|
readonly successSchema: Success
|
|
47
47
|
readonly errorSchema: Error
|
|
48
|
+
readonly annotations: Context.Context<never>
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Add an annotation to the workflow.
|
|
52
|
+
*/
|
|
53
|
+
annotate<I, S>(tag: Context.Tag<I, S>, value: S): Workflow<
|
|
54
|
+
Name,
|
|
55
|
+
Payload,
|
|
56
|
+
Success,
|
|
57
|
+
Error
|
|
58
|
+
>
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Add the annotations from a Context object to the workflow.
|
|
62
|
+
*/
|
|
63
|
+
annotateContext<I>(context: Context.Context<I>): Workflow<
|
|
64
|
+
Name,
|
|
65
|
+
Payload,
|
|
66
|
+
Success,
|
|
67
|
+
Error
|
|
68
|
+
>
|
|
48
69
|
|
|
49
70
|
/**
|
|
50
71
|
* Execute the workflow with the given payload.
|
|
@@ -166,9 +187,34 @@ export interface Any {
|
|
|
166
187
|
readonly payloadSchema: AnyStructSchema
|
|
167
188
|
readonly successSchema: Schema.Schema.Any
|
|
168
189
|
readonly errorSchema: Schema.Schema.All
|
|
190
|
+
readonly annotations: Context.Context<never>
|
|
169
191
|
readonly executionId: (payload: any) => Effect.Effect<string>
|
|
170
192
|
}
|
|
171
193
|
|
|
194
|
+
/**
|
|
195
|
+
* @since 1.0.0
|
|
196
|
+
* @category Models
|
|
197
|
+
*/
|
|
198
|
+
export type Registrations<Workflows extends Any> = Workflows extends Workflow<
|
|
199
|
+
infer _Name,
|
|
200
|
+
infer _Payload,
|
|
201
|
+
infer _Success,
|
|
202
|
+
infer _Error
|
|
203
|
+
> ? Registration<_Name> :
|
|
204
|
+
never
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* @since 1.0.0
|
|
208
|
+
* @category Models
|
|
209
|
+
*/
|
|
210
|
+
export type Requirements<Workflows extends Any> = Workflows extends Workflow<
|
|
211
|
+
infer _Name,
|
|
212
|
+
infer _Payload,
|
|
213
|
+
infer _Success,
|
|
214
|
+
infer _Error
|
|
215
|
+
> ? _Payload["Context"] | _Success["Context"] | _Error["Context"] :
|
|
216
|
+
never
|
|
217
|
+
|
|
172
218
|
const EngineTag = Context.GenericTag<WorkflowEngine, WorkflowEngine["Type"]>(
|
|
173
219
|
"@effect/workflow/WorkflowEngine" satisfies typeof WorkflowEngine.key
|
|
174
220
|
)
|
|
@@ -196,6 +242,7 @@ export const make = <
|
|
|
196
242
|
readonly success?: Success
|
|
197
243
|
readonly error?: Error
|
|
198
244
|
readonly suspendedRetrySchedule?: Schedule.Schedule<any, unknown> | undefined
|
|
245
|
+
readonly annotations?: Context.Context<never>
|
|
199
246
|
}
|
|
200
247
|
): Workflow<Name, Payload extends Schema.Struct.Fields ? Schema.Struct<Payload> : Payload, Success, Error> => {
|
|
201
248
|
const suspendedRetrySchedule = options.suspendedRetrySchedule ?? defaultRetrySchedule
|
|
@@ -206,6 +253,19 @@ export const make = <
|
|
|
206
253
|
payloadSchema: Schema.isSchema(options.payload) ? options.payload : Schema.Struct(options.payload as any),
|
|
207
254
|
successSchema: options.success ?? Schema.Void as any,
|
|
208
255
|
errorSchema: options.error ?? Schema.Never as any,
|
|
256
|
+
annotations: options.annotations ?? Context.empty(),
|
|
257
|
+
annotate(tag, value) {
|
|
258
|
+
return make({
|
|
259
|
+
...options,
|
|
260
|
+
annotations: Context.add(self.annotations, tag, value)
|
|
261
|
+
})
|
|
262
|
+
},
|
|
263
|
+
annotateContext(context) {
|
|
264
|
+
return make({
|
|
265
|
+
...options,
|
|
266
|
+
annotations: Context.merge(self.annotations, context)
|
|
267
|
+
})
|
|
268
|
+
},
|
|
209
269
|
execute: Effect.fnUntraced(
|
|
210
270
|
function*(fields: any, opts) {
|
|
211
271
|
const payload = self.payloadSchema.make(fields)
|
|
@@ -0,0 +1,178 @@
|
|
|
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
|
+
/**
|
|
12
|
+
* Derives an `RpcGroup` from a list of workflows.
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { RpcServer } from "@effect/rpc"
|
|
16
|
+
* import { Workflow, WorkflowProxy, WorkflowProxyServer } from "@effect/workflow"
|
|
17
|
+
* import { Layer, Schema } from "effect"
|
|
18
|
+
*
|
|
19
|
+
* const EmailWorkflow = Workflow.make({
|
|
20
|
+
* name: "EmailWorkflow",
|
|
21
|
+
* payload: {
|
|
22
|
+
* id: Schema.String,
|
|
23
|
+
* to: Schema.String
|
|
24
|
+
* },
|
|
25
|
+
* idempotencyKey: ({ id }) => id
|
|
26
|
+
* })
|
|
27
|
+
*
|
|
28
|
+
* const myWorkflows = [EmailWorkflow] as const
|
|
29
|
+
*
|
|
30
|
+
* // Use WorkflowProxy.toRpcGroup to create a `RpcGroup` from the
|
|
31
|
+
* // workflows
|
|
32
|
+
* class MyRpcs extends WorkflowProxy.toRpcGroup(myWorkflows) {}
|
|
33
|
+
*
|
|
34
|
+
* // Use WorkflowProxyServer.layerRpcHandlers to create a layer that implements
|
|
35
|
+
* // the rpc handlers
|
|
36
|
+
* const ApiLayer = RpcServer.layer(MyRpcs).pipe(
|
|
37
|
+
* Layer.provide(WorkflowProxyServer.layerRpcHandlers(myWorkflows))
|
|
38
|
+
* )
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @since 1.0.0
|
|
42
|
+
* @category Constructors
|
|
43
|
+
*/
|
|
44
|
+
export const toRpcGroup = <
|
|
45
|
+
const Workflows extends NonEmptyReadonlyArray<Workflow.Any>,
|
|
46
|
+
const Prefix extends string = ""
|
|
47
|
+
>(
|
|
48
|
+
workflows: Workflows,
|
|
49
|
+
options?: {
|
|
50
|
+
readonly prefix?: Prefix | undefined
|
|
51
|
+
}
|
|
52
|
+
): RpcGroup.RpcGroup<ConvertRpcs<Workflows[number], Prefix>> => {
|
|
53
|
+
const prefix = options?.prefix ?? ""
|
|
54
|
+
const rpcs: Array<Rpc.Any> = []
|
|
55
|
+
for (const workflow of workflows) {
|
|
56
|
+
rpcs.push(
|
|
57
|
+
Rpc.make(`${prefix}${workflow.name}`, {
|
|
58
|
+
payload: workflow.payloadSchema,
|
|
59
|
+
error: workflow.errorSchema,
|
|
60
|
+
success: workflow.successSchema
|
|
61
|
+
}).annotateContext(workflow.annotations),
|
|
62
|
+
Rpc.make(`${prefix}${workflow.name}Discard`, {
|
|
63
|
+
payload: workflow.payloadSchema
|
|
64
|
+
}).annotateContext(workflow.annotations)
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
return RpcGroup.make(...rpcs) as any
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @since 1.0.0
|
|
72
|
+
*/
|
|
73
|
+
export type ConvertRpcs<Workflows extends Workflow.Any, Prefix extends string> = Workflows extends Workflow.Workflow<
|
|
74
|
+
infer _Name,
|
|
75
|
+
infer _Payload,
|
|
76
|
+
infer _Success,
|
|
77
|
+
infer _Error
|
|
78
|
+
> ?
|
|
79
|
+
| Rpc.Rpc<`${Prefix}${_Name}`, _Payload, _Success, _Error>
|
|
80
|
+
| Rpc.Rpc<`${Prefix}${_Name}Discard`, _Payload>
|
|
81
|
+
: never
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Derives an `HttpApiGroup` from a list of workflows.
|
|
85
|
+
*
|
|
86
|
+
* ```ts
|
|
87
|
+
* import { HttpApi, HttpApiBuilder } from "@effect/platform"
|
|
88
|
+
* import { Workflow, WorkflowProxy, WorkflowProxyServer } from "@effect/workflow"
|
|
89
|
+
* import { Layer, Schema } from "effect"
|
|
90
|
+
*
|
|
91
|
+
* const EmailWorkflow = Workflow.make({
|
|
92
|
+
* name: "EmailWorkflow",
|
|
93
|
+
* payload: {
|
|
94
|
+
* id: Schema.String,
|
|
95
|
+
* to: Schema.String
|
|
96
|
+
* },
|
|
97
|
+
* idempotencyKey: ({ id }) => id
|
|
98
|
+
* })
|
|
99
|
+
*
|
|
100
|
+
* const myWorkflows = [EmailWorkflow] as const
|
|
101
|
+
*
|
|
102
|
+
* // Use WorkflowProxy.toHttpApiGroup to create a `HttpApiGroup` from the
|
|
103
|
+
* // workflows
|
|
104
|
+
* class MyApi extends HttpApi.make("api")
|
|
105
|
+
* .add(WorkflowProxy.toHttpApiGroup("workflows", myWorkflows))
|
|
106
|
+
* {}
|
|
107
|
+
*
|
|
108
|
+
* // Use WorkflowProxyServer.layerHttpApi to create a layer that implements the
|
|
109
|
+
* // workflows HttpApiGroup
|
|
110
|
+
* const ApiLayer = HttpApiBuilder.api(MyApi).pipe(
|
|
111
|
+
* Layer.provide(WorkflowProxyServer.layerHttpApi(MyApi, "workflows", myWorkflows))
|
|
112
|
+
* )
|
|
113
|
+
* ```
|
|
114
|
+
*
|
|
115
|
+
* @since 1.0.0
|
|
116
|
+
* @category Constructors
|
|
117
|
+
*/
|
|
118
|
+
export const toHttpApiGroup = <const Name extends string, const Workflows extends NonEmptyReadonlyArray<Workflow.Any>>(
|
|
119
|
+
name: Name,
|
|
120
|
+
workflows: Workflows
|
|
121
|
+
): HttpApiGroup.HttpApiGroup<Name, ConvertHttpApi<Workflows[number]>> => {
|
|
122
|
+
let group = HttpApiGroup.make(name)
|
|
123
|
+
for (const workflow of workflows) {
|
|
124
|
+
const path = `/${tagToPath(workflow.name)}` as const
|
|
125
|
+
group = group.add(
|
|
126
|
+
HttpApiEndpoint.post(workflow.name, path)
|
|
127
|
+
.setPayload(workflow.payloadSchema)
|
|
128
|
+
.addSuccess(workflow.successSchema)
|
|
129
|
+
.addError(workflow.errorSchema as any)
|
|
130
|
+
.annotateContext(workflow.annotations)
|
|
131
|
+
).add(
|
|
132
|
+
HttpApiEndpoint.post(workflow.name + "Discard", `${path}/discard`)
|
|
133
|
+
.setPayload(workflow.payloadSchema)
|
|
134
|
+
.annotateContext(workflow.annotations)
|
|
135
|
+
) as any
|
|
136
|
+
}
|
|
137
|
+
return group as any
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const tagToPath = (tag: string): string =>
|
|
141
|
+
tag
|
|
142
|
+
.replace(/[^a-zA-Z0-9]+/g, "-") // Replace non-alphanumeric characters with hyphen
|
|
143
|
+
.replace(/([a-z])([A-Z])/g, "$1-$2") // Insert hyphen before uppercase letters
|
|
144
|
+
.toLowerCase()
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* @since 1.0.0
|
|
148
|
+
*/
|
|
149
|
+
export type ConvertHttpApi<Workflows extends Workflow.Any> = Workflows extends Workflow.Workflow<
|
|
150
|
+
infer _Name,
|
|
151
|
+
infer _Payload,
|
|
152
|
+
infer _Success,
|
|
153
|
+
infer _Error
|
|
154
|
+
> ?
|
|
155
|
+
| HttpApiEndpoint.HttpApiEndpoint<
|
|
156
|
+
_Name,
|
|
157
|
+
"POST",
|
|
158
|
+
never,
|
|
159
|
+
never,
|
|
160
|
+
_Payload["Type"],
|
|
161
|
+
never,
|
|
162
|
+
_Success["Type"],
|
|
163
|
+
_Error["Type"],
|
|
164
|
+
_Payload["Context"] | _Success["Context"],
|
|
165
|
+
_Error["Context"]
|
|
166
|
+
>
|
|
167
|
+
| HttpApiEndpoint.HttpApiEndpoint<
|
|
168
|
+
`${_Name}Discard`,
|
|
169
|
+
"POST",
|
|
170
|
+
never,
|
|
171
|
+
never,
|
|
172
|
+
_Payload["Type"],
|
|
173
|
+
never,
|
|
174
|
+
void,
|
|
175
|
+
never,
|
|
176
|
+
_Payload["Context"]
|
|
177
|
+
> :
|
|
178
|
+
never
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import type * as HttpApi from "@effect/platform/HttpApi"
|
|
5
|
+
import * as HttpApiBuilder from "@effect/platform/HttpApiBuilder"
|
|
6
|
+
import type { ApiGroup, HttpApiGroup } from "@effect/platform/HttpApiGroup"
|
|
7
|
+
import type * as Rpc from "@effect/rpc/Rpc"
|
|
8
|
+
import type { NonEmptyReadonlyArray } from "effect/Array"
|
|
9
|
+
import * as Context from "effect/Context"
|
|
10
|
+
import * as Effect from "effect/Effect"
|
|
11
|
+
import * as Layer from "effect/Layer"
|
|
12
|
+
import type * as Workflow from "./Workflow.js"
|
|
13
|
+
import type { WorkflowEngine } from "./WorkflowEngine.js"
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @since 1.0.0
|
|
17
|
+
* @category Layers
|
|
18
|
+
*/
|
|
19
|
+
export const layerHttpApi = <
|
|
20
|
+
ApiId extends string,
|
|
21
|
+
Groups extends HttpApiGroup.Any,
|
|
22
|
+
ApiE,
|
|
23
|
+
ApiR,
|
|
24
|
+
Name extends HttpApiGroup.Name<Groups>,
|
|
25
|
+
const Workflows extends NonEmptyReadonlyArray<Workflow.Any>
|
|
26
|
+
>(
|
|
27
|
+
api: HttpApi.HttpApi<ApiId, Groups, ApiE, ApiR>,
|
|
28
|
+
name: Name,
|
|
29
|
+
workflows: Workflows
|
|
30
|
+
): Layer.Layer<
|
|
31
|
+
ApiGroup<ApiId, Name>,
|
|
32
|
+
never,
|
|
33
|
+
WorkflowEngine | Workflow.Registrations<Workflows[number]> | Workflow.Requirements<Workflows[number]>
|
|
34
|
+
> =>
|
|
35
|
+
HttpApiBuilder.group(
|
|
36
|
+
api,
|
|
37
|
+
name,
|
|
38
|
+
Effect.fnUntraced(function*(handlers_) {
|
|
39
|
+
let handlers = handlers_ as any
|
|
40
|
+
for (const workflow_ of workflows) {
|
|
41
|
+
const workflow = workflow_ as Workflow.Workflow<string, any, any, any>
|
|
42
|
+
handlers = handlers
|
|
43
|
+
.handle(
|
|
44
|
+
workflow.name as any,
|
|
45
|
+
({ payload }: { payload: any }) => workflow.execute(payload)
|
|
46
|
+
)
|
|
47
|
+
.handle(
|
|
48
|
+
workflow.name + "Discard" as any,
|
|
49
|
+
({ payload }: { payload: any }) => workflow.execute(payload, { discard: true } as any)
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
return handlers as HttpApiBuilder.Handlers<never, never, never>
|
|
53
|
+
})
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @since 1.0.0
|
|
58
|
+
* @category Layers
|
|
59
|
+
*/
|
|
60
|
+
export const layerRpcHandlers = <
|
|
61
|
+
const Workflows extends NonEmptyReadonlyArray<Workflow.Any>,
|
|
62
|
+
const Prefix extends string = ""
|
|
63
|
+
>(workflows: Workflows, options?: {
|
|
64
|
+
readonly prefix?: Prefix
|
|
65
|
+
}): Layer.Layer<
|
|
66
|
+
RpcHandlers<Workflows[number], Prefix>,
|
|
67
|
+
never,
|
|
68
|
+
WorkflowEngine | Workflow.Registrations<Workflows[number]> | Workflow.Requirements<Workflows[number]>
|
|
69
|
+
> =>
|
|
70
|
+
Layer.effectContext(Effect.gen(function*() {
|
|
71
|
+
const context = yield* Effect.context<never>()
|
|
72
|
+
const prefix = options?.prefix ?? ""
|
|
73
|
+
const handlers = new Map<string, Rpc.Handler<string>>()
|
|
74
|
+
for (const workflow_ of workflows) {
|
|
75
|
+
const workflow = workflow_ as Workflow.Workflow<string, any, any, any>
|
|
76
|
+
const tag = `${prefix}${workflow.name}`
|
|
77
|
+
const tagDiscard = `${tag}Discard`
|
|
78
|
+
const key = `@effect/rpc/Rpc/${tag}`
|
|
79
|
+
const keyDiscard = `${key}Discard`
|
|
80
|
+
handlers.set(key, {
|
|
81
|
+
context,
|
|
82
|
+
tag,
|
|
83
|
+
handler: (payload: any) => workflow.execute(payload) as any
|
|
84
|
+
} as any)
|
|
85
|
+
handlers.set(keyDiscard, {
|
|
86
|
+
context,
|
|
87
|
+
tag: tagDiscard,
|
|
88
|
+
handler: (payload: any) => workflow.execute(payload, { discard: true } as any) as any
|
|
89
|
+
} as any)
|
|
90
|
+
}
|
|
91
|
+
return Context.unsafeMake(handlers)
|
|
92
|
+
}))
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* @since 1.0.0
|
|
96
|
+
*/
|
|
97
|
+
export type RpcHandlers<Workflows extends Workflow.Any, Prefix extends string> = Workflows extends Workflow.Workflow<
|
|
98
|
+
infer _Name,
|
|
99
|
+
infer _Payload,
|
|
100
|
+
infer _Success,
|
|
101
|
+
infer _Error
|
|
102
|
+
> ? Rpc.Handler<`${Prefix}${_Name}`> | Rpc.Handler<`${Prefix}${_Name}Discard`>
|
|
103
|
+
: never
|
package/src/index.ts
CHANGED
|
@@ -22,3 +22,13 @@ export * as Workflow from "./Workflow.js"
|
|
|
22
22
|
* @since 1.0.0
|
|
23
23
|
*/
|
|
24
24
|
export * as WorkflowEngine from "./WorkflowEngine.js"
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @since 1.0.0
|
|
28
|
+
*/
|
|
29
|
+
export * as WorkflowProxy from "./WorkflowProxy.js"
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @since 1.0.0
|
|
33
|
+
*/
|
|
34
|
+
export * as WorkflowProxyServer from "./WorkflowProxyServer.js"
|