@effect/workflow 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/Activity/package.json +6 -0
  2. package/DurableClock/package.json +6 -0
  3. package/DurableDeferred/package.json +6 -0
  4. package/LICENSE +21 -0
  5. package/README.md +133 -0
  6. package/Workflow/package.json +6 -0
  7. package/WorkflowEngine/package.json +6 -0
  8. package/dist/cjs/Activity.js +100 -0
  9. package/dist/cjs/Activity.js.map +1 -0
  10. package/dist/cjs/DurableClock.js +49 -0
  11. package/dist/cjs/DurableClock.js.map +1 -0
  12. package/dist/cjs/DurableDeferred.js +158 -0
  13. package/dist/cjs/DurableDeferred.js.map +1 -0
  14. package/dist/cjs/Workflow.js +198 -0
  15. package/dist/cjs/Workflow.js.map +1 -0
  16. package/dist/cjs/WorkflowEngine.js +25 -0
  17. package/dist/cjs/WorkflowEngine.js.map +1 -0
  18. package/dist/cjs/index.js +18 -0
  19. package/dist/cjs/index.js.map +1 -0
  20. package/dist/cjs/internal/crypto.js +19 -0
  21. package/dist/cjs/internal/crypto.js.map +1 -0
  22. package/dist/dts/Activity.d.ts +70 -0
  23. package/dist/dts/Activity.d.ts.map +1 -0
  24. package/dist/dts/DurableClock.d.ts +42 -0
  25. package/dist/dts/DurableClock.d.ts.map +1 -0
  26. package/dist/dts/DurableDeferred.d.ts +252 -0
  27. package/dist/dts/DurableDeferred.d.ts.map +1 -0
  28. package/dist/dts/Workflow.d.ts +211 -0
  29. package/dist/dts/Workflow.d.ts.map +1 -0
  30. package/dist/dts/WorkflowEngine.d.ts +91 -0
  31. package/dist/dts/WorkflowEngine.d.ts.map +1 -0
  32. package/dist/dts/index.d.ts +21 -0
  33. package/dist/dts/index.d.ts.map +1 -0
  34. package/dist/dts/internal/crypto.d.ts +2 -0
  35. package/dist/dts/internal/crypto.d.ts.map +1 -0
  36. package/dist/esm/Activity.js +90 -0
  37. package/dist/esm/Activity.js.map +1 -0
  38. package/dist/esm/DurableClock.js +40 -0
  39. package/dist/esm/DurableClock.js.map +1 -0
  40. package/dist/esm/DurableDeferred.js +155 -0
  41. package/dist/esm/DurableDeferred.js.map +1 -0
  42. package/dist/esm/Workflow.js +183 -0
  43. package/dist/esm/Workflow.js.map +1 -0
  44. package/dist/esm/WorkflowEngine.js +15 -0
  45. package/dist/esm/WorkflowEngine.js.map +1 -0
  46. package/dist/esm/index.js +21 -0
  47. package/dist/esm/index.js.map +1 -0
  48. package/dist/esm/internal/crypto.js +11 -0
  49. package/dist/esm/internal/crypto.js.map +1 -0
  50. package/dist/esm/package.json +4 -0
  51. package/package.json +74 -0
  52. package/src/Activity.ts +177 -0
  53. package/src/DurableClock.ts +82 -0
  54. package/src/DurableDeferred.ts +461 -0
  55. package/src/Workflow.ts +401 -0
  56. package/src/WorkflowEngine.ts +122 -0
  57. package/src/index.ts +24 -0
  58. package/src/internal/crypto.ts +15 -0
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../dist/cjs/Activity.js",
3
+ "module": "../dist/esm/Activity.js",
4
+ "types": "../dist/dts/Activity.d.ts",
5
+ "sideEffects": []
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../dist/cjs/DurableClock.js",
3
+ "module": "../dist/esm/DurableClock.js",
4
+ "types": "../dist/dts/DurableClock.d.ts",
5
+ "sideEffects": []
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../dist/cjs/DurableDeferred.js",
3
+ "module": "../dist/esm/DurableDeferred.js",
4
+ "types": "../dist/dts/DurableDeferred.d.ts",
5
+ "sideEffects": []
6
+ }
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023-present The Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,133 @@
1
+ # @effect/workflow
2
+
3
+ Build and run durable workflows in TypeScript with Effect.
4
+
5
+ ## Example
6
+
7
+ ```typescript
8
+ import { ClusterWorkflowEngine } from "@effect/cluster"
9
+ import { NodeClusterRunnerSocket, NodeRuntime } from "@effect/platform-node"
10
+ import { PgClient } from "@effect/sql-pg"
11
+ import {
12
+ Activity,
13
+ DurableClock,
14
+ DurableDeferred,
15
+ Workflow
16
+ } from "@effect/workflow"
17
+ import { Effect, Layer, Redacted, Schema } from "effect"
18
+
19
+ // Define a custom error for the SendEmail activity
20
+ class SendEmailError extends Schema.TaggedError<SendEmailError>(
21
+ "SendEmailError"
22
+ )("SendEmailError", {
23
+ message: Schema.String
24
+ }) {}
25
+
26
+ // Define a workflow using the `Workflow.make` api.
27
+ const EmailWorkflow = Workflow.make({
28
+ // Every workflow needs a unique name
29
+ name: "EmailWorkflow",
30
+ // Add a success schema. You can omit this to use the default value `Schema.Void`
31
+ success: Schema.Void,
32
+ // Add an error schema. You can omit this to use the default value `Schema.Never`
33
+ error: SendEmailError,
34
+ // Define the payload for the workflow
35
+ payload: {
36
+ id: Schema.String,
37
+ to: Schema.String
38
+ },
39
+ // Define the idempotency key for the workflow. This is used to ensure that
40
+ // the workflow is not duplicated if it is retried.
41
+ idempotencyKey: ({ id }) => id
42
+ })
43
+
44
+ // Once you have defined the workflow, you can create a layer for by providing
45
+ // the implementation.
46
+ const EmailWorkflowLayer = EmailWorkflow.toLayer(
47
+ Effect.fn(function* (payload, executionId) {
48
+ // An `Activity` represents an unit of work in the workflow.
49
+ // They will only ever be executed once, unless you use `Activity.retry`.
50
+ yield* Activity.make({
51
+ name: "SendEmail",
52
+ error: SendEmailError,
53
+ execute: Effect.gen(function* () {
54
+ // You can access the current attempt number of the activity.
55
+ const attempt = yield* Activity.CurrentAttempt
56
+
57
+ yield* Effect.annotateLogs(Effect.log(`Sending email`), {
58
+ id: payload.id,
59
+ executionId,
60
+ attempt
61
+ })
62
+
63
+ if (attempt !== 5) {
64
+ return yield* new SendEmailError({
65
+ message: `Failed to send email for ${payload.id} on attempt ${attempt}`
66
+ })
67
+ }
68
+ })
69
+ }).pipe(Activity.retry({ times: 5 }))
70
+
71
+ // Use the `DurableClock` to sleep for a specified duration.
72
+ // The workflow will pause execution for the specified duration.
73
+ //
74
+ // You can sleep for as long as you want - when the workflow pauses it
75
+ // consumes no resources.
76
+ yield* Effect.log("Sleeping for 10 seconds")
77
+ yield* DurableClock.sleep({
78
+ name: "Some sleep",
79
+ duration: "10 seconds"
80
+ })
81
+ yield* Effect.log("Woke up")
82
+
83
+ // You can use `DurableDeferred` to create a signal that can be awaited later.
84
+ const EmailTrigger = DurableDeferred.make("EmailTrigger")
85
+
86
+ // You can use the `DurableDeferred.token` api to acquire the token that can
87
+ // later be used with `DurableDeferred.done / succeed / fail`
88
+ const token = yield* DurableDeferred.token(EmailTrigger)
89
+
90
+ // You then use the token to send a result to the deferred.
91
+ //
92
+ // This doesn't need to be done inside the workflow, it just needs access to
93
+ // the `WorkflowEngine` service.
94
+ yield* DurableDeferred.succeed(EmailTrigger, {
95
+ token,
96
+ value: void 0
97
+ }).pipe(
98
+ Effect.delay("1 second"), // Simulate some delay before completing the deferred
99
+ Effect.forkDaemon
100
+ )
101
+
102
+ // Finally, you can await the deferred to get the result.
103
+ //
104
+ // It will pause the workflow until the deferred is completed.
105
+ yield* DurableDeferred.await(EmailTrigger)
106
+ })
107
+ )
108
+
109
+ // To integrate with @effect/cluster, you can use the
110
+ // `ClusterWorkflowEngine.layer` Layer, and provide it with your cluster Runner
111
+ // layer.
112
+ const WorkflowEngineLayer = ClusterWorkflowEngine.layer.pipe(
113
+ Layer.provideMerge(NodeClusterRunnerSocket.layer({ storage: "sql" })),
114
+ Layer.provideMerge(
115
+ PgClient.layer({
116
+ database: "effect_cluster",
117
+ username: "cluster",
118
+ password: Redacted.make("cluster")
119
+ })
120
+ )
121
+ )
122
+
123
+ const EnvLayer = Layer.mergeAll(
124
+ EmailWorkflowLayer
125
+ // You can add any other cluster entities or workflow layers here
126
+ ).pipe(Layer.provide(WorkflowEngineLayer))
127
+
128
+ // Finally, you can execute a workflow using the `.execute` method.
129
+ EmailWorkflow.execute({ id: "123", to: "hello@timsmart.co" }).pipe(
130
+ Effect.provide(EnvLayer),
131
+ NodeRuntime.runMain
132
+ )
133
+ ```
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../dist/cjs/Workflow.js",
3
+ "module": "../dist/esm/Workflow.js",
4
+ "types": "../dist/dts/Workflow.d.ts",
5
+ "sideEffects": []
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../dist/cjs/WorkflowEngine.js",
3
+ "module": "../dist/esm/WorkflowEngine.js",
4
+ "types": "../dist/dts/WorkflowEngine.d.ts",
5
+ "sideEffects": []
6
+ }
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.retry = exports.make = exports.executionIdWithAttempt = exports.TypeId = exports.CurrentAttempt = void 0;
7
+ var Context = _interopRequireWildcard(require("effect/Context"));
8
+ var Effect = _interopRequireWildcard(require("effect/Effect"));
9
+ var Effectable = _interopRequireWildcard(require("effect/Effectable"));
10
+ var _Function = require("effect/Function");
11
+ var Schema = _interopRequireWildcard(require("effect/Schema"));
12
+ var _crypto = require("./internal/crypto.js");
13
+ 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); }
14
+ /**
15
+ * @since 1.0.0
16
+ */
17
+
18
+ /**
19
+ * @since 1.0.0
20
+ * @category Symbols
21
+ */
22
+ const TypeId = exports.TypeId = /*#__PURE__*/Symbol.for("@effect/workflow/Activity");
23
+ /**
24
+ * @since 1.0.0
25
+ * @category Constructors
26
+ */
27
+ const make = options => {
28
+ const successSchema = options.success ?? Schema.Void;
29
+ const errorSchema = options.error ?? Schema.Never;
30
+ // eslint-disable-next-line prefer-const
31
+ let execute;
32
+ const self = {
33
+ ...Effectable.CommitPrototype,
34
+ [TypeId]: TypeId,
35
+ name: options.name,
36
+ successSchema,
37
+ errorSchema,
38
+ exitSchema: Schema.ExitFromSelf({
39
+ success: successSchema,
40
+ failure: errorSchema,
41
+ defect: Schema.Defect
42
+ }),
43
+ executeEncoded: Effect.matchEffect(options.execute, {
44
+ onFailure: error => Effect.flatMap(Effect.orDie(Schema.encode(self.errorSchema)(error)), Effect.fail),
45
+ onSuccess: value => Effect.orDie(Schema.encode(self.successSchema)(value))
46
+ }),
47
+ commit() {
48
+ return execute;
49
+ }
50
+ };
51
+ execute = makeExecute(self);
52
+ return self;
53
+ };
54
+ /**
55
+ * @since 1.0.0
56
+ * @category Error handling
57
+ */
58
+ exports.make = make;
59
+ const retry = exports.retry = /*#__PURE__*/(0, _Function.dual)(2, (effect, options) => Effect.suspend(() => {
60
+ let attempt = 1;
61
+ return Effect.suspend(() => Effect.provideService(effect, CurrentAttempt, attempt++)).pipe(Effect.retry(options));
62
+ }));
63
+ /**
64
+ * @since 1.0.0
65
+ * @category Attempts
66
+ */
67
+ class CurrentAttempt extends /*#__PURE__*/Context.Reference()("@effect/workflow/Activity/CurrentAttempt", {
68
+ defaultValue: () => 0
69
+ }) {}
70
+ /**
71
+ * @since 1.0.0
72
+ * @category Execution ID
73
+ */
74
+ exports.CurrentAttempt = CurrentAttempt;
75
+ const executionIdWithAttempt = exports.executionIdWithAttempt = /*#__PURE__*/Effect.gen(function* () {
76
+ const instance = yield* InstanceTag;
77
+ const attempt = yield* CurrentAttempt;
78
+ return yield* (0, _crypto.makeHashDigest)(`${instance.executionId}-${attempt}`);
79
+ });
80
+ // -----------------------------------------------------------------------------
81
+ // internal
82
+ // -----------------------------------------------------------------------------
83
+ const EngineTag = /*#__PURE__*/Context.GenericTag("@effect/workflow/WorkflowEngine");
84
+ const InstanceTag = /*#__PURE__*/Context.GenericTag("@effect/workflow/WorkflowEngine/WorkflowInstance");
85
+ const makeExecute = /*#__PURE__*/Effect.fnUntraced(function* (activity) {
86
+ const engine = yield* EngineTag;
87
+ const instance = yield* InstanceTag;
88
+ const attempt = yield* CurrentAttempt;
89
+ const result = yield* engine.activityExecute({
90
+ activity,
91
+ attempt
92
+ });
93
+ if (result._tag === "Suspended") {
94
+ instance.suspended = true;
95
+ return yield* Effect.interrupt;
96
+ }
97
+ const exit = yield* Effect.orDie(Schema.decode(activity.exitSchema)(result.exit));
98
+ return yield* exit;
99
+ });
100
+ //# sourceMappingURL=Activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Activity.js","names":["Context","_interopRequireWildcard","require","Effect","Effectable","_Function","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","make","options","successSchema","success","Void","errorSchema","error","Never","execute","self","CommitPrototype","name","exitSchema","ExitFromSelf","failure","defect","Defect","executeEncoded","matchEffect","onFailure","flatMap","orDie","encode","fail","onSuccess","value","commit","makeExecute","retry","dual","effect","suspend","attempt","provideService","CurrentAttempt","pipe","Reference","defaultValue","executionIdWithAttempt","gen","instance","InstanceTag","makeHashDigest","executionId","EngineTag","GenericTag","fnUntraced","activity","engine","result","activityExecute","_tag","suspended","interrupt","exit","decode"],"sources":["../../src/Activity.ts"],"sourcesContent":[null],"mappings":";;;;;;AAGA,IAAAA,OAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,uBAAA,CAAAC,OAAA;AACA,IAAAE,UAAA,GAAAH,uBAAA,CAAAC,OAAA;AAEA,IAAAG,SAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAL,uBAAA,CAAAC,OAAA;AACA,IAAAK,OAAA,GAAAL,OAAA;AAAqD,SAAAD,wBAAAO,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAT,uBAAA,YAAAA,CAAAO,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AATrD;;;;AAYA;;;;AAIO,MAAMkB,MAAM,GAAAC,OAAA,CAAAD,MAAA,gBAAkBE,MAAM,CAACC,GAAG,CAAC,2BAA2B,CAAC;AAmD5E;;;;AAIO,MAAMC,IAAI,GAIfC,OAKD,IAA6E;EAC5E,MAAMC,aAAa,GAAGD,OAAO,CAACE,OAAO,IAAI5B,MAAM,CAAC6B,IAAsB;EACtE,MAAMC,WAAW,GAAGJ,OAAO,CAACK,KAAK,IAAI/B,MAAM,CAACgC,KAAqB;EACjE;EACA,IAAIC,OAA4D;EAChE,MAAMC,IAAI,GAA4E;IACpF,GAAGpC,UAAU,CAACqC,eAAe;IAC7B,CAACd,MAAM,GAAGA,MAAM;IAChBe,IAAI,EAAEV,OAAO,CAACU,IAAI;IAClBT,aAAa;IACbG,WAAW;IACXO,UAAU,EAAErC,MAAM,CAACsC,YAAY,CAAC;MAC9BV,OAAO,EAAED,aAAa;MACtBY,OAAO,EAAET,WAAW;MACpBU,MAAM,EAAExC,MAAM,CAACyC;KAChB,CAAC;IACFC,cAAc,EAAE7C,MAAM,CAAC8C,WAAW,CAACjB,OAAO,CAACO,OAAO,EAAE;MAClDW,SAAS,EAAGb,KAAK,IAAKlC,MAAM,CAACgD,OAAO,CAAChD,MAAM,CAACiD,KAAK,CAAC9C,MAAM,CAAC+C,MAAM,CAACb,IAAI,CAACJ,WAAkB,CAAC,CAACC,KAAK,CAAC,CAAC,EAAElC,MAAM,CAACmD,IAAI,CAAC;MAC9GC,SAAS,EAAGC,KAAK,IAAKrD,MAAM,CAACiD,KAAK,CAAC9C,MAAM,CAAC+C,MAAM,CAACb,IAAI,CAACP,aAAa,CAAC,CAACuB,KAAK,CAAC;KAC5E,CAAC;IACFC,MAAMA,CAAA;MACJ,OAAOlB,OAAO;IAChB;GACM;EACRA,OAAO,GAAGmB,WAAW,CAAClB,IAAI,CAAC;EAC3B,OAAOA,IAAI;AACb,CAAC;AAED;;;;AAAAZ,OAAA,CAAAG,IAAA,GAAAA,IAAA;AAIO,MAAM4B,KAAK,GAAA/B,OAAA,CAAA+B,KAAA,gBAAwB,IAAAC,cAAI,EAC5C,CAAC,EACD,CAACC,MAAoC,EAAE7B,OAAW,KAChD7B,MAAM,CAAC2D,OAAO,CAAC,MAAK;EAClB,IAAIC,OAAO,GAAG,CAAC;EACf,OAAO5D,MAAM,CAAC2D,OAAO,CAAC,MAAM3D,MAAM,CAAC6D,cAAc,CAACH,MAAM,EAAEI,cAAc,EAAEF,OAAO,EAAE,CAAC,CAAC,CAACG,IAAI,CACxF/D,MAAM,CAACwD,KAAK,CAAC3B,OAAO,CAAC,CACtB;AACH,CAAC,CAAC,CACL;AAED;;;;AAIM,MAAOiC,cAAe,sBAAQjE,OAAO,CAACmE,SAAS,EAAkB,CAAC,0CAA0C,EAAE;EAClHC,YAAY,EAAEA,CAAA,KAAM;CACrB,CAAC;AAEF;;;;AAAAxC,OAAA,CAAAqC,cAAA,GAAAA,cAAA;AAIO,MAAMI,sBAAsB,GAAAzC,OAAA,CAAAyC,sBAAA,gBAI/BlE,MAAM,CAACmE,GAAG,CAAC,aAAS;EACtB,MAAMC,QAAQ,GAAG,OAAOC,WAAW;EACnC,MAAMT,OAAO,GAAG,OAAOE,cAAc;EACrC,OAAO,OAAO,IAAAQ,sBAAc,EAAC,GAAGF,QAAQ,CAACG,WAAW,IAAIX,OAAO,EAAE,CAAC;AACpE,CAAC,CAAC;AAEF;AACA;AACA;AAEA,MAAMY,SAAS,gBAAG3E,OAAO,CAAC4E,UAAU,CAClC,iCAAqE,CACtE;AACD,MAAMJ,WAAW,gBAAGxE,OAAO,CAAC4E,UAAU,CACpC,kDAAwF,CACzF;AAED,MAAMlB,WAAW,gBAAGvD,MAAM,CAAC0E,UAAU,CAAC,WAIpCC,QAAqC;EACrC,MAAMC,MAAM,GAAG,OAAOJ,SAAS;EAC/B,MAAMJ,QAAQ,GAAG,OAAOC,WAAW;EACnC,MAAMT,OAAO,GAAG,OAAOE,cAAc;EACrC,MAAMe,MAAM,GAAG,OAAOD,MAAM,CAACE,eAAe,CAAC;IAC3CH,QAAQ;IACRf;GACD,CAAC;EACF,IAAIiB,MAAM,CAACE,IAAI,KAAK,WAAW,EAAE;IAC/BX,QAAQ,CAACY,SAAS,GAAG,IAAI;IACzB,OAAO,OAAOhF,MAAM,CAACiF,SAAS;EAChC;EACA,MAAMC,IAAI,GAAG,OAAOlF,MAAM,CAACiD,KAAK,CAC9B9C,MAAM,CAACgF,MAAM,CAACR,QAAQ,CAACnC,UAAU,CAAC,CAACqC,MAAM,CAACK,IAAI,CAAC,CAChD;EACD,OAAO,OAAOA,IAAI;AACpB,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.sleep = exports.make = exports.TypeId = void 0;
7
+ var Context = _interopRequireWildcard(require("effect/Context"));
8
+ var Duration = _interopRequireWildcard(require("effect/Duration"));
9
+ var Effect = _interopRequireWildcard(require("effect/Effect"));
10
+ var DurableDeferred = _interopRequireWildcard(require("./DurableDeferred.js"));
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
+ * @since 1.0.0
18
+ * @category Symbols
19
+ */
20
+ const TypeId = exports.TypeId = /*#__PURE__*/Symbol.for("@effect/workflow/DurableClock");
21
+ /**
22
+ * @since 1.0.0
23
+ * @category Constructors
24
+ */
25
+ const make = options => ({
26
+ [TypeId]: TypeId,
27
+ name: options.name,
28
+ duration: Duration.decode(options.duration),
29
+ deferred: DurableDeferred.make(`DurableClock/${options.name}`)
30
+ });
31
+ exports.make = make;
32
+ const EngineTag = /*#__PURE__*/Context.GenericTag("@effect/workflow/WorkflowEngine");
33
+ const InstanceTag = /*#__PURE__*/Context.GenericTag("@effect/workflow/WorkflowEngine/WorkflowInstance");
34
+ /**
35
+ * @since 1.0.0
36
+ * @category Sleeping
37
+ */
38
+ const sleep = exports.sleep = /*#__PURE__*/Effect.fnUntraced(function* (options) {
39
+ const engine = yield* EngineTag;
40
+ const instance = yield* InstanceTag;
41
+ const clock = make(options);
42
+ yield* engine.scheduleClock({
43
+ workflow: instance.workflow,
44
+ executionId: instance.executionId,
45
+ clock
46
+ });
47
+ return yield* DurableDeferred.await(clock.deferred);
48
+ });
49
+ //# sourceMappingURL=DurableClock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DurableClock.js","names":["Context","_interopRequireWildcard","require","Duration","Effect","DurableDeferred","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TypeId","exports","Symbol","for","make","options","name","duration","decode","deferred","EngineTag","GenericTag","InstanceTag","sleep","fnUntraced","engine","instance","clock","scheduleClock","workflow","executionId","await"],"sources":["../../src/DurableClock.ts"],"sourcesContent":[null],"mappings":";;;;;;AAGA,IAAAA,OAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,uBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAH,uBAAA,CAAAC,OAAA;AAEA,IAAAG,eAAA,GAAAJ,uBAAA,CAAAC,OAAA;AAAuD,SAAAD,wBAAAK,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAP,uBAAA,YAAAA,CAAAK,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAPvD;;;;AAUA;;;;AAIO,MAAMkB,MAAM,GAAAC,OAAA,CAAAD,MAAA,gBAAkBE,MAAM,CAACC,GAAG,CAAC,+BAA+B,CAAC;AAmBhF;;;;AAIO,MAAMC,IAAI,GAAIC,OAGpB,KAAoB;EACnB,CAACL,MAAM,GAAGA,MAAM;EAChBM,IAAI,EAAED,OAAO,CAACC,IAAI;EAClBC,QAAQ,EAAE7B,QAAQ,CAAC8B,MAAM,CAACH,OAAO,CAACE,QAAQ,CAAC;EAC3CE,QAAQ,EAAE7B,eAAe,CAACwB,IAAI,CAAC,gBAAgBC,OAAO,CAACC,IAAI,EAAE;CAC9D,CAAC;AAAAL,OAAA,CAAAG,IAAA,GAAAA,IAAA;AAEF,MAAMM,SAAS,gBAAGnC,OAAO,CAACoC,UAAU,CAClC,iCAAqE,CACtE;AAED,MAAMC,WAAW,gBAAGrC,OAAO,CAACoC,UAAU,CACpC,kDAAwF,CACzF;AAED;;;;AAIO,MAAME,KAAK,GAAAZ,OAAA,CAAAY,KAAA,gBASdlC,MAAM,CAACmC,UAAU,CAAC,WAAUT,OAG/B;EACC,MAAMU,MAAM,GAAG,OAAOL,SAAS;EAC/B,MAAMM,QAAQ,GAAG,OAAOJ,WAAW;EACnC,MAAMK,KAAK,GAAGb,IAAI,CAACC,OAAO,CAAC;EAC3B,OAAOU,MAAM,CAACG,aAAa,CAAC;IAC1BC,QAAQ,EAAEH,QAAQ,CAACG,QAAQ;IAC3BC,WAAW,EAAEJ,QAAQ,CAACI,WAAW;IACjCH;GACD,CAAC;EACF,OAAO,OAAOrC,eAAe,CAACyC,KAAK,CAACJ,KAAK,CAACR,QAAQ,CAAC;AACrD,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.tokenFromPayload = exports.tokenFromExecutionId = exports.token = exports.succeed = exports.make = exports.failCause = exports.fail = exports.done = exports.await = exports.TypeId = exports.TokenTypeId = exports.TokenParsed = exports.Token = void 0;
7
+ var Context = _interopRequireWildcard(require("effect/Context"));
8
+ var Effect = _interopRequireWildcard(require("effect/Effect"));
9
+ var Encoding = _interopRequireWildcard(require("effect/Encoding"));
10
+ var Exit = _interopRequireWildcard(require("effect/Exit"));
11
+ var _Function = require("effect/Function");
12
+ var Option = _interopRequireWildcard(require("effect/Option"));
13
+ var Schema = _interopRequireWildcard(require("effect/Schema"));
14
+ 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); }
15
+ /**
16
+ * @since 1.0.0
17
+ * @category Symbols
18
+ */
19
+ const TypeId = exports.TypeId = /*#__PURE__*/Symbol.for("@effect/workflow/DurableDeferred");
20
+ /**
21
+ * @since 1.0.0
22
+ * @category Constructors
23
+ */
24
+ const make = (name, options) => ({
25
+ [TypeId]: TypeId,
26
+ name,
27
+ successSchema: options?.success ?? Schema.Void,
28
+ errorSchema: options?.error ?? Schema.Never,
29
+ exitSchema: Schema.Exit({
30
+ success: options?.success ?? Schema.Void,
31
+ failure: options?.error ?? Schema.Never,
32
+ defect: Schema.Defect
33
+ })
34
+ });
35
+ exports.make = make;
36
+ const EngineTag = /*#__PURE__*/Context.GenericTag("@effect/workflow/WorkflowEngine");
37
+ const InstanceTag = /*#__PURE__*/Context.GenericTag("@effect/workflow/WorkflowEngine/WorkflowInstance");
38
+ const await_ = exports.await = /*#__PURE__*/Effect.fnUntraced(function* (self) {
39
+ const engine = yield* EngineTag;
40
+ const instance = yield* InstanceTag;
41
+ const oexit = yield* engine.deferredResult(self);
42
+ if (Option.isNone(oexit)) {
43
+ instance.suspended = true;
44
+ return yield* Effect.interrupt;
45
+ }
46
+ return yield* Effect.flatten(Effect.orDie(Schema.decodeUnknown(self.exitSchema)(oexit.value)));
47
+ });
48
+ /**
49
+ * @since 1.0.0
50
+ * @category Token
51
+ */
52
+ const TokenTypeId = exports.TokenTypeId = /*#__PURE__*/Symbol.for("@effect/workflow/DurableDeferred/Token");
53
+ /**
54
+ * @since 1.0.0
55
+ * @category Token
56
+ */
57
+ const Token = exports.Token = /*#__PURE__*/Schema.String.pipe(/*#__PURE__*/Schema.brand(TokenTypeId));
58
+ /**
59
+ * @since 1.0.0
60
+ * @category Token
61
+ */
62
+ class TokenParsed extends /*#__PURE__*/Schema.Class("@effect/workflow/DurableDeferred/TokenParsed")({
63
+ workflowName: Schema.String,
64
+ executionId: Schema.String,
65
+ deferredName: Schema.String
66
+ }) {
67
+ /**
68
+ * @since 1.0.0
69
+ */
70
+ get asToken() {
71
+ return Encoding.encodeBase64Url(JSON.stringify([this.workflowName, this.executionId, this.deferredName]));
72
+ }
73
+ /**
74
+ * @since 1.0.0
75
+ */
76
+ static FromString = /*#__PURE__*/Schema.StringFromBase64Url.pipe(/*#__PURE__*/Schema.compose(/*#__PURE__*/Schema.parseJson(/*#__PURE__*/Schema.Tuple(Schema.String, Schema.String, Schema.String))), /*#__PURE__*/Schema.transform(TokenParsed, {
77
+ decode: ([workflowName, executionId, deferredName]) => new TokenParsed({
78
+ workflowName,
79
+ executionId,
80
+ deferredName
81
+ }),
82
+ encode: parsed => [parsed.workflowName, parsed.executionId, parsed.deferredName]
83
+ }));
84
+ /**
85
+ * @since 1.0.0
86
+ */
87
+ static fromString = /*#__PURE__*/Schema.decodeSync(TokenParsed.FromString);
88
+ /**
89
+ * @since 1.0.0
90
+ */
91
+ static encode = /*#__PURE__*/Schema.encodeSync(TokenParsed.FromString);
92
+ }
93
+ /**
94
+ * @since 1.0.0
95
+ * @category Token
96
+ */
97
+ exports.TokenParsed = TokenParsed;
98
+ const token = exports.token = /*#__PURE__*/Effect.fnUntraced(function* (self) {
99
+ const instance = yield* InstanceTag;
100
+ return tokenFromExecutionId(self, instance);
101
+ });
102
+ /**
103
+ * @since 1.0.0
104
+ * @category Token
105
+ */
106
+ const tokenFromExecutionId = exports.tokenFromExecutionId = /*#__PURE__*/(0, _Function.dual)(2, (self, options) => new TokenParsed({
107
+ workflowName: options.workflow.name,
108
+ executionId: options.executionId,
109
+ deferredName: self.name
110
+ }).asToken);
111
+ /**
112
+ * @since 1.0.0
113
+ * @category Token
114
+ */
115
+ const tokenFromPayload = exports.tokenFromPayload = /*#__PURE__*/(0, _Function.dual)(2, (self, options) => Effect.map(options.workflow.executionId(options.payload), executionId => tokenFromExecutionId(self, {
116
+ workflow: options.workflow,
117
+ executionId
118
+ })));
119
+ /**
120
+ * @since 1.0.0
121
+ * @category Combinators
122
+ */
123
+ const done = exports.done = /*#__PURE__*/(0, _Function.dual)(2, /*#__PURE__*/Effect.fnUntraced(function* (self, options) {
124
+ const engine = yield* EngineTag;
125
+ const token = TokenParsed.fromString(options.token);
126
+ const exit = yield* Schema.encode(self.exitSchema)(options.exit);
127
+ yield* engine.deferredDone({
128
+ workflowName: token.workflowName,
129
+ executionId: token.executionId,
130
+ deferred: self,
131
+ exit: exit
132
+ });
133
+ }, Effect.orDie));
134
+ /**
135
+ * @since 1.0.0
136
+ * @category Combinators
137
+ */
138
+ const succeed = exports.succeed = /*#__PURE__*/(0, _Function.dual)(2, (self, options) => done(self, {
139
+ token: options.token,
140
+ exit: Exit.succeed(options.value)
141
+ }));
142
+ /**
143
+ * @since 1.0.0
144
+ * @category Combinators
145
+ */
146
+ const fail = exports.fail = /*#__PURE__*/(0, _Function.dual)(2, (self, options) => done(self, {
147
+ token: options.token,
148
+ exit: Exit.fail(options.error)
149
+ }));
150
+ /**
151
+ * @since 1.0.0
152
+ * @category Combinators
153
+ */
154
+ const failCause = exports.failCause = /*#__PURE__*/(0, _Function.dual)(2, (self, options) => done(self, {
155
+ token: options.token,
156
+ exit: Exit.failCause(options.cause)
157
+ }));
158
+ //# sourceMappingURL=DurableDeferred.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DurableDeferred.js","names":["Context","_interopRequireWildcard","require","Effect","Encoding","Exit","_Function","Option","Schema","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TypeId","exports","Symbol","for","make","name","options","successSchema","success","Void","errorSchema","error","Never","exitSchema","failure","defect","Defect","EngineTag","GenericTag","InstanceTag","await_","await","fnUntraced","self","engine","instance","oexit","deferredResult","isNone","suspended","interrupt","flatten","orDie","decodeUnknown","value","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","dual","workflow","tokenFromPayload","map","payload","done","exit","deferredDone","deferred","succeed","fail","failCause","cause"],"sources":["../../src/DurableDeferred.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}