@effect/workflow 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/WorkflowProxy/package.json +6 -0
  2. package/WorkflowProxyServer/package.json +6 -0
  3. package/dist/cjs/Activity.js +17 -8
  4. package/dist/cjs/Activity.js.map +1 -1
  5. package/dist/cjs/DurableDeferred.js +40 -2
  6. package/dist/cjs/DurableDeferred.js.map +1 -1
  7. package/dist/cjs/Workflow.js +44 -21
  8. package/dist/cjs/Workflow.js.map +1 -1
  9. package/dist/cjs/WorkflowEngine.js +14 -1
  10. package/dist/cjs/WorkflowEngine.js.map +1 -1
  11. package/dist/cjs/WorkflowProxy.js +111 -0
  12. package/dist/cjs/WorkflowProxy.js.map +1 -0
  13. package/dist/cjs/WorkflowProxyServer.js +61 -0
  14. package/dist/cjs/WorkflowProxyServer.js.map +1 -0
  15. package/dist/cjs/index.js +5 -1
  16. package/dist/dts/Activity.d.ts +13 -6
  17. package/dist/dts/Activity.d.ts.map +1 -1
  18. package/dist/dts/DurableDeferred.d.ts +28 -1
  19. package/dist/dts/DurableDeferred.d.ts.map +1 -1
  20. package/dist/dts/Workflow.d.ts +28 -1
  21. package/dist/dts/Workflow.d.ts.map +1 -1
  22. package/dist/dts/WorkflowEngine.d.ts +6 -5
  23. package/dist/dts/WorkflowEngine.d.ts.map +1 -1
  24. package/dist/dts/WorkflowProxy.d.ts +90 -0
  25. package/dist/dts/WorkflowProxy.d.ts.map +1 -0
  26. package/dist/dts/WorkflowProxyServer.d.ts +27 -0
  27. package/dist/dts/WorkflowProxyServer.d.ts.map +1 -0
  28. package/dist/dts/index.d.ts +8 -0
  29. package/dist/dts/index.d.ts.map +1 -1
  30. package/dist/esm/Activity.js +15 -6
  31. package/dist/esm/Activity.js.map +1 -1
  32. package/dist/esm/DurableDeferred.js +38 -1
  33. package/dist/esm/DurableDeferred.js.map +1 -1
  34. package/dist/esm/Workflow.js +41 -19
  35. package/dist/esm/Workflow.js.map +1 -1
  36. package/dist/esm/WorkflowEngine.js +14 -1
  37. package/dist/esm/WorkflowEngine.js.map +1 -1
  38. package/dist/esm/WorkflowProxy.js +101 -0
  39. package/dist/esm/WorkflowProxy.js.map +1 -0
  40. package/dist/esm/WorkflowProxyServer.js +52 -0
  41. package/dist/esm/WorkflowProxyServer.js.map +1 -0
  42. package/dist/esm/index.js +8 -0
  43. package/dist/esm/index.js.map +1 -1
  44. package/package.json +20 -2
  45. package/src/Activity.ts +47 -13
  46. package/src/DurableDeferred.ts +103 -2
  47. package/src/Workflow.ts +111 -22
  48. package/src/WorkflowEngine.ts +19 -10
  49. package/src/WorkflowProxy.ts +178 -0
  50. package/src/WorkflowProxyServer.ts +103 -0
  51. package/src/index.ts +10 -0
@@ -5,6 +5,7 @@ import * as Exit from "effect/Exit";
5
5
  import { dual } from "effect/Function";
6
6
  import * as Option from "effect/Option";
7
7
  import * as Schema from "effect/Schema";
8
+ import * as Workflow from "./Workflow.js";
8
9
  /**
9
10
  * @since 1.0.0
10
11
  * @category Symbols
@@ -30,7 +31,7 @@ const InstanceTag = /*#__PURE__*/Context.GenericTag("@effect/workflow/WorkflowEn
30
31
  const await_ = /*#__PURE__*/Effect.fnUntraced(function* (self) {
31
32
  const engine = yield* EngineTag;
32
33
  const instance = yield* InstanceTag;
33
- const oexit = yield* engine.deferredResult(self);
34
+ const oexit = yield* Workflow.wrapActivityResult(engine.deferredResult(self), Option.isNone);
34
35
  if (Option.isNone(oexit)) {
35
36
  instance.suspended = true;
36
37
  return yield* Effect.interrupt;
@@ -43,6 +44,42 @@ export {
43
44
  * @category Combinators
44
45
  */
45
46
  await_ as await };
47
+ /**
48
+ * @since 1.0.0
49
+ * @category Combinators
50
+ */
51
+ export const into = /*#__PURE__*/dual(2, (effect, self) => Effect.contextWithEffect(context => {
52
+ const engine = Context.get(context, EngineTag);
53
+ const instance = Context.get(context, InstanceTag);
54
+ return Effect.onExit(effect, Effect.fnUntraced(function* (exit) {
55
+ if (instance.suspended) return;
56
+ const encodedExit = yield* Effect.orDie(Schema.encode(self.exitSchema)(exit));
57
+ yield* engine.deferredDone({
58
+ workflowName: instance.workflow.name,
59
+ executionId: instance.executionId,
60
+ deferred: self,
61
+ exit: encodedExit
62
+ });
63
+ }));
64
+ }));
65
+ /**
66
+ * @since 1.0.0
67
+ * @category Racing
68
+ */
69
+ export const raceAll = options => {
70
+ const deferred = make(`raceAll/${options.name}`, {
71
+ success: options.success,
72
+ error: options.error
73
+ });
74
+ return Effect.gen(function* () {
75
+ const engine = yield* EngineTag;
76
+ const oexit = yield* Workflow.wrapActivityResult(engine.deferredResult(deferred), Option.isNone);
77
+ if (Option.isSome(oexit)) {
78
+ return yield* Effect.flatten(Effect.orDie(Schema.decodeUnknown(deferred.exitSchema)(oexit.value)));
79
+ }
80
+ return yield* into(Effect.raceAll(options.effects), deferred);
81
+ });
82
+ };
46
83
  /**
47
84
  * @since 1.0.0
48
85
  * @category Token
@@ -1 +1 @@
1
- {"version":3,"file":"DurableDeferred.js","names":["Context","Effect","Encoding","Exit","dual","Option","Schema","TypeId","Symbol","for","make","name","options","successSchema","success","Void","errorSchema","error","Never","exitSchema","failure","defect","Defect","EngineTag","GenericTag","InstanceTag","await_","fnUntraced","self","engine","instance","oexit","deferredResult","isNone","suspended","interrupt","flatten","orDie","decodeUnknown","value","await","TokenTypeId","Token","String","pipe","brand","TokenParsed","Class","workflowName","executionId","deferredName","asToken","encodeBase64Url","JSON","stringify","FromString","StringFromBase64Url","compose","parseJson","Tuple","transform","decode","encode","parsed","fromString","decodeSync","encodeSync","token","tokenFromExecutionId","workflow","tokenFromPayload","map","payload","done","exit","deferredDone","deferred","succeed","fail","failCause","cause"],"sources":["../../src/DurableDeferred.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"DurableDeferred.js","names":["Context","Effect","Encoding","Exit","dual","Option","Schema","Workflow","TypeId","Symbol","for","make","name","options","successSchema","success","Void","errorSchema","error","Never","exitSchema","failure","defect","Defect","EngineTag","GenericTag","InstanceTag","await_","fnUntraced","self","engine","instance","oexit","wrapActivityResult","deferredResult","isNone","suspended","interrupt","flatten","orDie","decodeUnknown","value","await","into","effect","contextWithEffect","context","get","onExit","exit","encodedExit","encode","deferredDone","workflowName","workflow","executionId","deferred","raceAll","gen","isSome","effects","TokenTypeId","Token","String","pipe","brand","TokenParsed","Class","deferredName","asToken","encodeBase64Url","JSON","stringify","FromString","StringFromBase64Url","compose","parseJson","Tuple","transform","decode","parsed","fromString","decodeSync","encodeSync","token","tokenFromExecutionId","tokenFromPayload","map","payload","done","succeed","fail","failCause","cause"],"sources":["../../src/DurableDeferred.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -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;
@@ -55,7 +68,6 @@ export const make = options => {
55
68
  if (result._tag === "Complete") {
56
69
  return yield* result.exit;
57
70
  }
58
- // @effect-diagnostics effect/floatingEffect:off
59
71
  sleep ??= (yield* Schedule.driver(suspendedRetrySchedule)).next(void 0).pipe(Effect.catchAll(() => Effect.dieMessage(`${options.name}.execute: suspendedRetrySchedule exhausted`)));
60
72
  yield* sleep;
61
73
  }
@@ -168,17 +180,35 @@ export const Result = options => Schema.Union(Complete.Schema(options), Suspende
168
180
  * @since 1.0.0
169
181
  * @category Result
170
182
  */
171
- export const intoResult = effect => Effect.uninterruptibleMask(restore => Effect.withFiberRuntime(fiber => Effect.matchCause(restore(effect), {
172
- onSuccess: value => new Complete({
173
- exit: Exit.succeed(value)
174
- }),
175
- onFailure(cause) {
176
- const instance = Context.unsafeGet(fiber.currentContext, InstanceTag);
177
- return instance.suspended ? new Suspended() : new Complete({
183
+ export const intoResult = effect => Effect.contextWithEffect(context => {
184
+ const instance = Context.get(context, InstanceTag);
185
+ return Effect.uninterruptibleMask(restore => restore(effect).pipe(Effect.scoped, Effect.matchCause({
186
+ onSuccess: value => new Complete({
187
+ exit: Exit.succeed(value)
188
+ }),
189
+ onFailure: cause => instance.suspended ? new Suspended() : new Complete({
178
190
  exit: Exit.failCause(cause)
179
- });
191
+ })
192
+ })));
193
+ });
194
+ /**
195
+ * @since 1.0.0
196
+ * @category Result
197
+ */
198
+ export const wrapActivityResult = (effect, isSuspend) => Effect.contextWithEffect(context => {
199
+ const instance = Context.get(context, InstanceTag);
200
+ const state = instance.activityState;
201
+ if (instance.suspended) {
202
+ return state.count > 0 ? state.latch.await.pipe(Effect.andThen(Effect.yieldNow()), Effect.andThen(Effect.interrupt)) : Effect.interrupt;
180
203
  }
181
- })));
204
+ if (state.count === 0) state.latch.unsafeClose();
205
+ state.count++;
206
+ return Effect.onExit(effect, exit => {
207
+ state.count--;
208
+ const isSuspended = Exit.isSuccess(exit) && isSuspend(exit.value);
209
+ return state.count === 0 ? state.latch.open : isSuspended ? state.latch.await : Effect.void;
210
+ });
211
+ });
182
212
  /**
183
213
  * Add compensation logic to an effect inside a Workflow. The compensation finalizer will be
184
214
  * called if the entire workflow fails, allowing you to perform cleanup or
@@ -190,13 +220,5 @@ export const intoResult = effect => Effect.uninterruptibleMask(restore => Effect
190
220
  * @since 1.0.0
191
221
  * @category Compensation
192
222
  */
193
- export const withCompensation = /*#__PURE__*/dual(2, (effect, compensation) => Effect.uninterruptibleMask(restore => Effect.contextWithEffect(context => {
194
- const instance = Context.get(context, InstanceTag);
195
- return Effect.tap(restore(effect), value => Effect.addFinalizer(exit => {
196
- if (Exit.isSuccess(exit) || instance.suspended) {
197
- return Effect.void;
198
- }
199
- return compensation(value, exit.cause);
200
- }));
201
- })));
223
+ export const withCompensation = /*#__PURE__*/dual(2, (effect, compensation) => Effect.uninterruptibleMask(restore => Effect.tap(restore(effect), value => Effect.contextWithEffect(context => Effect.addFinalizer(exit => Exit.isSuccess(exit) || Context.get(context, InstanceTag).suspended ? Effect.void : compensation(value, exit.cause))))));
202
224
  //# sourceMappingURL=Workflow.js.map
@@ -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","context","get","register","provide","withCompensation","exponential","union","spaced","fromTaggedRequest","schema","failure","value","ResultTypeId","isResult","u","hasProperty","Complete","TaggedClass","SchemaFromSelf","_options","declare","SchemaEncoded","tag","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":[]}
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","contextWithEffect","instance","uninterruptibleMask","restore","scoped","matchCause","onSuccess","succeed","onFailure","cause","suspended","failCause","wrapActivityResult","isSuspend","state","activityState","count","latch","await","andThen","yieldNow","unsafeClose","onExit","isSuspended","isSuccess","open","void","compensation","tap","addFinalizer"],"sources":["../../src/Workflow.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -2,6 +2,7 @@
2
2
  * @since 1.0.0
3
3
  */
4
4
  import * as Context from "effect/Context";
5
+ import * as Effect from "effect/Effect";
5
6
  /**
6
7
  * @since 1.0.0
7
8
  * @category Services
@@ -11,5 +12,17 @@ export class WorkflowEngine extends /*#__PURE__*/Context.Tag("@effect/workflow/W
11
12
  * @since 1.0.0
12
13
  * @category Services
13
14
  */
14
- export class WorkflowInstance extends /*#__PURE__*/Context.Tag("@effect/workflow/WorkflowEngine/WorkflowInstance")() {}
15
+ export class WorkflowInstance extends /*#__PURE__*/Context.Tag("@effect/workflow/WorkflowEngine/WorkflowInstance")() {
16
+ static initial(workflow, executionId) {
17
+ return WorkflowInstance.of({
18
+ executionId,
19
+ workflow,
20
+ suspended: false,
21
+ activityState: {
22
+ count: 0,
23
+ latch: Effect.unsafeMakeLatch()
24
+ }
25
+ });
26
+ }
27
+ }
15
28
  //# sourceMappingURL=WorkflowEngine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowEngine.js","names":["Context","WorkflowEngine","Tag","WorkflowInstance"],"sources":["../../src/WorkflowEngine.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,OAAO,MAAM,gBAAgB;AASzC;;;;AAIA,OAAM,MAAOC,cAAe,sBAAQD,OAAO,CAACE,GAAG,CAAC,iCAAiC,CAAC,EAiF/E;AAEH;;;;AAIA,OAAM,MAAOC,gBAAiB,sBAAQH,OAAO,CAACE,GAAG,CAAC,kDAAkD,CAAC,EAkBlG","ignoreList":[]}
1
+ {"version":3,"file":"WorkflowEngine.js","names":["Context","Effect","WorkflowEngine","Tag","WorkflowInstance","initial","workflow","executionId","of","suspended","activityState","count","latch","unsafeMakeLatch"],"sources":["../../src/WorkflowEngine.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AAQvC;;;;AAIA,OAAM,MAAOC,cAAe,sBAAQF,OAAO,CAACG,GAAG,CAAC,iCAAiC,CAAC,EAyE/E;AAEH;;;;AAIA,OAAM,MAAOC,gBAAiB,sBAAQJ,OAAO,CAACG,GAAG,CAAC,kDAAkD,CAAC,EAuBlG;EACD,OAAOE,OAAOA,CAACC,QAAsB,EAAEC,WAAmB;IACxD,OAAOH,gBAAgB,CAACI,EAAE,CAAC;MACzBD,WAAW;MACXD,QAAQ;MACRG,SAAS,EAAE,KAAK;MAChBC,aAAa,EAAE;QACbC,KAAK,EAAE,CAAC;QACRC,KAAK,EAAEX,MAAM,CAACY,eAAe;;KAEhC,CAAC;EACJ","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
@@ -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.2",
3
+ "version": "0.1.4",
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": "^3.16.3"
14
+ "effect": "^3.16.4",
15
+ "@effect/rpc": "^0.61.7",
16
+ "@effect/platform": "^0.84.7"
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/Activity.ts CHANGED
@@ -1,13 +1,17 @@
1
1
  /**
2
2
  * @since 1.0.0
3
3
  */
4
+ import type { NonEmptyReadonlyArray } from "effect/Array"
4
5
  import * as Context from "effect/Context"
5
6
  import * as Effect from "effect/Effect"
6
7
  import * as Effectable from "effect/Effectable"
7
8
  import type * as Exit from "effect/Exit"
8
9
  import { dual } from "effect/Function"
9
10
  import * as Schema from "effect/Schema"
11
+ import type { Scope } from "effect/Scope"
12
+ import * as DurableDeferred from "./DurableDeferred.js"
10
13
  import { makeHashDigest } from "./internal/crypto.js"
14
+ import * as Workflow from "./Workflow.js"
11
15
  import type { WorkflowEngine, WorkflowInstance } from "./WorkflowEngine.js"
12
16
 
13
17
  /**
@@ -27,9 +31,9 @@ export type TypeId = typeof TypeId
27
31
  * @category Models
28
32
  */
29
33
  export interface Activity<
30
- Success extends Schema.Schema.Any,
31
- Error extends Schema.Schema.All,
32
- R
34
+ Success extends Schema.Schema.Any = typeof Schema.Void,
35
+ Error extends Schema.Schema.All = typeof Schema.Never,
36
+ R = never
33
37
  > extends
34
38
  Effect.Effect<
35
39
  Success["Type"],
@@ -49,12 +53,12 @@ export interface Activity<
49
53
  readonly execute: Effect.Effect<
50
54
  Success["Type"],
51
55
  Error["Type"],
52
- Success["Context"] | Error["Context"] | R | WorkflowEngine | WorkflowInstance
56
+ Success["Context"] | Error["Context"] | R | Scope | WorkflowEngine | WorkflowInstance
53
57
  >
54
58
  readonly executeEncoded: Effect.Effect<
55
59
  Success["Encoded"],
56
60
  Error["Encoded"],
57
- Success["Context"] | Error["Context"] | R | WorkflowEngine | WorkflowInstance
61
+ Success["Context"] | Error["Context"] | R | Scope | WorkflowEngine | WorkflowInstance
58
62
  >
59
63
  }
60
64
 
@@ -80,10 +84,10 @@ export const make = <
80
84
  Error extends Schema.Schema.All = typeof Schema.Never
81
85
  >(options: {
82
86
  readonly name: string
83
- readonly success?: Success
84
- readonly error?: Error
87
+ readonly success?: Success | undefined
88
+ readonly error?: Error | undefined
85
89
  readonly execute: Effect.Effect<Success["Type"], Error["Type"], R>
86
- }): Activity<Success, Error, Exclude<R, WorkflowInstance | WorkflowEngine>> => {
90
+ }): Activity<Success, Error, Exclude<R, WorkflowInstance | WorkflowEngine | Scope>> => {
87
91
  const successSchema = options.success ?? Schema.Void as any as Success
88
92
  const errorSchema = options.error ?? Schema.Never as any as Error
89
93
  // eslint-disable-next-line prefer-const
@@ -132,7 +136,7 @@ export const retry: typeof Effect.retry = dual(
132
136
  * @category Attempts
133
137
  */
134
138
  export class CurrentAttempt extends Context.Reference<CurrentAttempt>()("@effect/workflow/Activity/CurrentAttempt", {
135
- defaultValue: () => 0
139
+ defaultValue: () => 1
136
140
  }) {}
137
141
 
138
142
  /**
@@ -149,6 +153,33 @@ export const executionIdWithAttempt: Effect.Effect<
149
153
  return yield* makeHashDigest(`${instance.executionId}-${attempt}`)
150
154
  })
151
155
 
156
+ /**
157
+ * @since 1.0.0
158
+ * @category Racing
159
+ */
160
+ export const raceAll = <const Activities extends NonEmptyReadonlyArray<Any>>(
161
+ name: string,
162
+ activities: Activities
163
+ ): Effect.Effect<
164
+ (Activities[number] extends Activity<infer _A, infer _E, infer _R> ? _A["Type"] : never),
165
+ (Activities[number] extends Activity<infer _A, infer _E, infer _R> ? _E["Type"] : never),
166
+ | (Activities[number] extends Activity<infer Success, infer Error, infer R>
167
+ ? Success["Context"] | Error["Context"] | R
168
+ : never)
169
+ | WorkflowEngine
170
+ | WorkflowInstance
171
+ > =>
172
+ DurableDeferred.raceAll({
173
+ name: `Activity/${name}`,
174
+ success: Schema.Union(
175
+ ...activities.map((activity) => activity.successSchema)
176
+ ),
177
+ error: Schema.Union(
178
+ ...activities.map((activity) => activity.errorSchema)
179
+ ),
180
+ effects: activities as any
181
+ }) as any
182
+
152
183
  // -----------------------------------------------------------------------------
153
184
  // internal
154
185
  // -----------------------------------------------------------------------------
@@ -168,10 +199,13 @@ const makeExecute = Effect.fnUntraced(function*<
168
199
  const engine = yield* EngineTag
169
200
  const instance = yield* InstanceTag
170
201
  const attempt = yield* CurrentAttempt
171
- const result = yield* engine.activityExecute({
172
- activity,
173
- attempt
174
- })
202
+ const result = yield* Workflow.wrapActivityResult(
203
+ engine.activityExecute({
204
+ activity,
205
+ attempt
206
+ }),
207
+ (_) => _._tag === "Suspended"
208
+ )
175
209
  if (result._tag === "Suspended") {
176
210
  instance.suspended = true
177
211
  return yield* Effect.interrupt