@serverlessworkflow/sdk 1.0.0-alpha5.0 → 1.0.1

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 (108) hide show
  1. package/README.md +141 -23
  2. package/esm/index.esm.js +2607 -1122
  3. package/esm/index.esm.js.map +1 -1
  4. package/esm/index.esm.min.js +7 -7
  5. package/esm/index.esm.min.js.map +1 -1
  6. package/lib/generated/builders/any-event-consumption-strategy-until-builder.d.ts +14 -0
  7. package/lib/generated/builders/any-event-consumption-strategy-until-builder.d.ts.map +1 -0
  8. package/lib/generated/builders/any-event-until-consumed-builder.d.ts +14 -0
  9. package/lib/generated/builders/any-event-until-consumed-builder.d.ts.map +1 -0
  10. package/lib/generated/builders/container-lifetime-builder.d.ts +14 -0
  11. package/lib/generated/builders/container-lifetime-builder.d.ts.map +1 -0
  12. package/lib/generated/builders/error-filter-builder.d.ts +14 -0
  13. package/lib/generated/builders/error-filter-builder.d.ts.map +1 -0
  14. package/lib/generated/builders/event-data-builder.d.ts +14 -0
  15. package/lib/generated/builders/event-data-builder.d.ts.map +1 -0
  16. package/lib/generated/builders/http-body-builder.d.ts +14 -0
  17. package/lib/generated/builders/http-body-builder.d.ts.map +1 -0
  18. package/lib/generated/builders/http-headers-builder.d.ts +14 -0
  19. package/lib/generated/builders/http-headers-builder.d.ts.map +1 -0
  20. package/lib/generated/builders/http-query-builder.d.ts +14 -0
  21. package/lib/generated/builders/http-query-builder.d.ts.map +1 -0
  22. package/lib/generated/builders/index.d.ts +11 -6
  23. package/lib/generated/builders/index.d.ts.map +1 -1
  24. package/lib/generated/builders/raise-task-error-builder.d.ts +14 -0
  25. package/lib/generated/builders/raise-task-error-builder.d.ts.map +1 -0
  26. package/lib/generated/builders/subscription-iterator-builder.d.ts +14 -0
  27. package/lib/generated/builders/subscription-iterator-builder.d.ts.map +1 -0
  28. package/lib/generated/builders/task-timeout-builder.d.ts +14 -0
  29. package/lib/generated/builders/task-timeout-builder.d.ts.map +1 -0
  30. package/lib/generated/classes/any-event-consumption-strategy-until.d.ts +39 -0
  31. package/lib/generated/classes/any-event-consumption-strategy-until.d.ts.map +1 -0
  32. package/lib/generated/classes/any-event-consumption-strategy.d.ts.map +1 -1
  33. package/lib/generated/classes/any-event-until-consumed.d.ts +39 -0
  34. package/lib/generated/classes/any-event-until-consumed.d.ts.map +1 -0
  35. package/lib/generated/classes/async-api-arguments.d.ts +5 -0
  36. package/lib/generated/classes/async-api-arguments.d.ts.map +1 -1
  37. package/lib/generated/classes/call-async-api.d.ts.map +1 -1
  38. package/lib/generated/classes/catch-errors.d.ts +0 -5
  39. package/lib/generated/classes/catch-errors.d.ts.map +1 -1
  40. package/lib/generated/classes/container-lifetime.d.ts +39 -0
  41. package/lib/generated/classes/container-lifetime.d.ts.map +1 -0
  42. package/lib/generated/classes/container.d.ts.map +1 -1
  43. package/lib/generated/classes/error-filter.d.ts +44 -0
  44. package/lib/generated/classes/error-filter.d.ts.map +1 -0
  45. package/lib/generated/classes/event-consumption-strategy.d.ts.map +1 -1
  46. package/lib/generated/classes/event-data.d.ts +44 -0
  47. package/lib/generated/classes/event-data.d.ts.map +1 -0
  48. package/lib/generated/classes/http-body.d.ts +44 -0
  49. package/lib/generated/classes/http-body.d.ts.map +1 -0
  50. package/lib/generated/classes/http-headers.d.ts +44 -0
  51. package/lib/generated/classes/http-headers.d.ts.map +1 -0
  52. package/lib/generated/classes/http-query.d.ts +44 -0
  53. package/lib/generated/classes/http-query.d.ts.map +1 -0
  54. package/lib/generated/classes/index.d.ts +13 -6
  55. package/lib/generated/classes/index.d.ts.map +1 -1
  56. package/lib/generated/classes/listen-task.d.ts.map +1 -1
  57. package/lib/generated/classes/raise-task-error.d.ts +44 -0
  58. package/lib/generated/classes/raise-task-error.d.ts.map +1 -0
  59. package/lib/generated/classes/subscription-iterator.d.ts +39 -0
  60. package/lib/generated/classes/subscription-iterator.d.ts.map +1 -0
  61. package/lib/generated/classes/task-timeout.d.ts +39 -0
  62. package/lib/generated/classes/task-timeout.d.ts.map +1 -0
  63. package/lib/generated/classes/task.d.ts.map +1 -1
  64. package/lib/generated/classes/workflow.d.ts +25 -0
  65. package/lib/generated/classes/workflow.d.ts.map +1 -1
  66. package/lib/generated/definitions/specification.d.ts +105 -44
  67. package/lib/generated/definitions/specification.d.ts.map +1 -1
  68. package/lib/generated/validation/validation-pointers.d.ts +11 -6
  69. package/lib/generated/validation/validation-pointers.d.ts.map +1 -1
  70. package/lib/graph-builder.d.ts +74 -0
  71. package/lib/graph-builder.d.ts.map +1 -0
  72. package/lib/mermaid-converter.d.ts +21 -0
  73. package/lib/mermaid-converter.d.ts.map +1 -0
  74. package/package.json +2 -2
  75. package/serverless-workflow-sdk.d.ts +2 -0
  76. package/serverless-workflow-sdk.d.ts.map +1 -1
  77. package/systemjs/index.systemjs.js +2611 -1121
  78. package/systemjs/index.systemjs.js.map +1 -1
  79. package/systemjs/index.systemjs.min.js +7 -7
  80. package/systemjs/index.systemjs.min.js.map +1 -1
  81. package/umd/index.umd.js +2620 -1127
  82. package/umd/index.umd.js.map +1 -1
  83. package/umd/index.umd.min.js +7 -7
  84. package/umd/index.umd.min.js.map +1 -1
  85. package/lib/generated/builders/raise-task-raise-error-builder.d.ts +0 -14
  86. package/lib/generated/builders/raise-task-raise-error-builder.d.ts.map +0 -1
  87. package/lib/generated/builders/task-base-timeout-builder.d.ts +0 -14
  88. package/lib/generated/builders/task-base-timeout-builder.d.ts.map +0 -1
  89. package/lib/generated/builders/with-async-api-payload-builder.d.ts +0 -14
  90. package/lib/generated/builders/with-async-api-payload-builder.d.ts.map +0 -1
  91. package/lib/generated/builders/with-http-body-builder.d.ts +0 -14
  92. package/lib/generated/builders/with-http-body-builder.d.ts.map +0 -1
  93. package/lib/generated/builders/with-http-headers-builder.d.ts +0 -14
  94. package/lib/generated/builders/with-http-headers-builder.d.ts.map +0 -1
  95. package/lib/generated/builders/with-http-query-builder.d.ts +0 -14
  96. package/lib/generated/builders/with-http-query-builder.d.ts.map +0 -1
  97. package/lib/generated/classes/raise-task-raise-error.d.ts +0 -44
  98. package/lib/generated/classes/raise-task-raise-error.d.ts.map +0 -1
  99. package/lib/generated/classes/task-base-timeout.d.ts +0 -39
  100. package/lib/generated/classes/task-base-timeout.d.ts.map +0 -1
  101. package/lib/generated/classes/with-async-api-payload.d.ts +0 -44
  102. package/lib/generated/classes/with-async-api-payload.d.ts.map +0 -1
  103. package/lib/generated/classes/with-http-body.d.ts +0 -44
  104. package/lib/generated/classes/with-http-body.d.ts.map +0 -1
  105. package/lib/generated/classes/with-http-headers.d.ts +0 -44
  106. package/lib/generated/classes/with-http-headers.d.ts.map +0 -1
  107. package/lib/generated/classes/with-http-query.d.ts +0 -44
  108. package/lib/generated/classes/with-http-query.d.ts.map +0 -1
package/README.md CHANGED
@@ -1,5 +1,26 @@
1
1
  ![Node CI](https://github.com/serverlessworkflow/sdk-typescript/workflows/Node%20CI/badge.svg) [![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/serverlessworkflow/sdk-typescript)
2
2
 
3
+ - [Serverless Workflow Specification - TypeScript SDK](#serverless-workflow-specification---typescript-sdk)
4
+ - [Status](#status)
5
+ - [SDK Structure](#sdk-structure)
6
+ - [Types and Interfaces](#types-and-interfaces)
7
+ - [Classes](#classes)
8
+ - [Fluent Builders](#fluent-builders)
9
+ - [Validation Function](#validation-function)
10
+ - [Other tools](#other-tools)
11
+ - [Getting Started](#getting-started)
12
+ - [Installation](#installation)
13
+ - [Usage](#usage)
14
+ - [Create a Workflow Definition from YAML or JSON](#create-a-workflow-definition-from-yaml-or-json)
15
+ - [Create a Workflow Definition by Casting an Object](#create-a-workflow-definition-by-casting-an-object)
16
+ - [Create a Workflow Definition Using a Class Constructor](#create-a-workflow-definition-using-a-class-constructor)
17
+ - [Create a Workflow Definition Using the Builder API](#create-a-workflow-definition-using-the-builder-api)
18
+ - [Serialize a Workflow Definition to YAML or JSON](#serialize-a-workflow-definition-to-yaml-or-json)
19
+ - [Validate Workflow Definitions](#validate-workflow-definitions)
20
+ - [Generate a directed graph](#generate-a-directed-graph)
21
+ - [Generate a MermaidJS flowchart](#generate-a-mermaidjs-flowchart)
22
+ - [Building Locally](#building-locally)
23
+
3
24
  # Serverless Workflow Specification - TypeScript SDK
4
25
 
5
26
  This SDK provides a TypeScript API for working with the [Serverless Workflow Specification](https://github.com/serverlessworkflow/specification).
@@ -14,7 +35,7 @@ The npm [`@serverlessworkflow/sdk`](https://www.npmjs.com/package/@serverlesswor
14
35
 
15
36
  | Latest Releases | Conformance to Spec Version |
16
37
  | :---: | :---: |
17
- | [v1.0.0-alpha5.\*](https://github.com/serverlessworkflow/sdk-typescript/releases/) | [v1.0.0-alpha5](https://github.com/serverlessworkflow/specification) |
38
+ | [v1.0.\*](https://github.com/serverlessworkflow/sdk-typescript/releases/) | [v1.0.0](https://github.com/serverlessworkflow/specification) |
18
39
 
19
40
  > [!WARNING]
20
41
  > Previous versions of the SDK were published with a typo in the scope:
@@ -56,11 +77,14 @@ The SDK includes a validation function to check if objects conform to the expect
56
77
 
57
78
  The `validate` function is directly exported and can be used as `validate('Workflow', workflowObject)`.
58
79
 
80
+ ### Other Tools
81
+ The SDK also ships tools to build directed graph and MermaidJS flowcharts from a workflow.
82
+
59
83
  ## Getting Started
60
84
 
61
85
  ### Installation
62
86
  > [!NOTE]
63
- > Version v1.0.0-alpha5.\* has not been released yet.
87
+ > Version v1.0.0.\* has not been released yet.
64
88
 
65
89
  ```sh
66
90
  npm install @serverlessworkflow/sdk
@@ -77,7 +101,7 @@ import { Classes } from '@serverlessworkflow/sdk';
77
101
  // const text = await fetch('https://myserver.com/my-workflow-definition.json');
78
102
  const text = `
79
103
  document:
80
- dsl: 1.0.0-alpha5
104
+ dsl: 1.0.0
81
105
  name: test
82
106
  version: 1.0.0
83
107
  namespace: default
@@ -86,7 +110,7 @@ do:
86
110
  set:
87
111
  variable: 'my first workflow'
88
112
  `;
89
- const workflowDefinition = Classes.Workflow.deserialize(text);
113
+ const workflow = Classes.Workflow.deserialize(text);
90
114
  ```
91
115
 
92
116
  #### Create a Workflow Definition by Casting an Object
@@ -96,9 +120,9 @@ You can type-cast an object to match the structure of a workflow definition:
96
120
  import { Classes, Specification, validate } from '@serverlessworkflow/sdk';
97
121
 
98
122
  // Simply cast an object:
99
- const workflowDefinition = {
123
+ const workflow = {
100
124
  document: {
101
- dsl: '1.0.0-alpha5',
125
+ dsl: '1.0.0',
102
126
  name: 'test',
103
127
  version: '1.0.0',
104
128
  namespace: 'default',
@@ -116,9 +140,9 @@ const workflowDefinition = {
116
140
 
117
141
  // Validate it
118
142
  try {
119
- validate('Workflow', workflowDefinition);
143
+ validate('Workflow', workflow);
120
144
  // Serialize it
121
- const definitionTxt = Classes.Workflow.serialize(workflowDefinition);
145
+ const definitionTxt = Classes.Workflow.serialize(workflow);
122
146
  }
123
147
  catch (ex) {
124
148
  // Invalid workflow definition
@@ -132,9 +156,9 @@ You can create a workflow definition by calling a constructor:
132
156
  import { Classes, validate } from '@serverlessworkflow/sdk';
133
157
 
134
158
  // Simply use the constructor
135
- const workflowDefinition = new Classes.Workflow({
159
+ const workflow = new Classes.Workflow({
136
160
  document: {
137
- dsl: '1.0.0-alpha5',
161
+ dsl: '1.0.0',
138
162
  name: 'test',
139
163
  version: '1.0.0',
140
164
  namespace: 'default',
@@ -149,7 +173,7 @@ const workflowDefinition = new Classes.Workflow({
149
173
  },
150
174
  */],
151
175
  });
152
- workflowDefinition.do.push({
176
+ workflow.do.push({
153
177
  step1: new Classes.SetTask({
154
178
  set: {
155
179
  variable: 'my first workflow',
@@ -159,9 +183,9 @@ workflowDefinition.do.push({
159
183
 
160
184
  // Validate it
161
185
  try {
162
- workflowDefinition.validate();
186
+ workflow.validate();
163
187
  // Serialize it
164
- const definitionTxt = workflowDefinition.serialize();
188
+ const definitionTxt = workflow.serialize();
165
189
  }
166
190
  catch (ex) {
167
191
  // Invalid workflow definition
@@ -174,10 +198,10 @@ You can use the fluent API to build a validated and normalized workflow definiti
174
198
  ```typescript
175
199
  import { documentBuilder, setTaskBuilder, taskListBuilder, workflowBuilder } from '@serverlessworkflow/sdk';
176
200
 
177
- const workflowDefinition = workflowBuilder(/*workflowDefinitionObject*/)
201
+ const workflow = workflowBuilder(/*workflowObject*/)
178
202
  .document(
179
203
  documentBuilder()
180
- .dsl('1.0.0-alpha5')
204
+ .dsl('1.0.0')
181
205
  .name('test')
182
206
  .version('1.0.0')
183
207
  .namespace('default')
@@ -206,12 +230,12 @@ You can serialize a workflow definition either by using its `serialize` method i
206
230
  ```typescript
207
231
  import { Classes } from '@serverlessworkflow/sdk';
208
232
 
209
- // const workflowDefinition = <Your preferred method>;
210
- if (workflowDefinition instanceof Classes.Workflow) {
211
- const yaml = workflowDefinition.serialize(/*'yaml' | 'json' */);
233
+ // const workflow = <Your preferred method>;
234
+ if (workflow instanceof Classes.Workflow) {
235
+ const yaml = workflow.serialize(/*'yaml' | 'json' */);
212
236
  }
213
237
  else {
214
- const json = Classes.Workflow.serialize(workflowDefinition, 'json');
238
+ const json = Classes.Workflow.serialize(workflow, 'json');
215
239
  }
216
240
  ```
217
241
  > [!NOTE]
@@ -223,13 +247,13 @@ Validation can be achieved in two ways: via the `validate` function or the insta
223
247
  ```typescript
224
248
  import { Classes, validate } from '@serverlessworkflow/sdk';
225
249
 
226
- // const workflowDefinition = <Your preferred method>;
250
+ const workflow = /* <Your preferred method> */;
227
251
  try {
228
- if (workflowDefinition instanceof Classes.Workflow) {
229
- workflowDefinition.validate();
252
+ if (workflow instanceof Classes.Workflow) {
253
+ workflow.validate();
230
254
  }
231
255
  else {
232
- validate('Workflow', workflowDefinition);
256
+ validate('Workflow', workflow);
233
257
  }
234
258
  }
235
259
  catch (ex) {
@@ -237,6 +261,100 @@ catch (ex) {
237
261
  }
238
262
  ```
239
263
 
264
+ #### Generate a directed graph
265
+ A [directed graph](https://en.wikipedia.org/wiki/Directed_graph) of a workflow can be generated using the `buildGraph` function, or alternatives:
266
+ - Workflow instance `.toGraph();`
267
+ - Static `Classes.Workflow.toGraph(workflow)`
268
+
269
+ ```typescript
270
+ import { buildGraph } from '@serverlessworkflow/sdk';
271
+
272
+ const workflow = {
273
+ document: {
274
+ dsl: '1.0.0',
275
+ name: 'using-plain-object',
276
+ version: '1.0.0',
277
+ namespace: 'default',
278
+ },
279
+ do: [
280
+ {
281
+ step1: {
282
+ set: {
283
+ variable: 'my first workflow',
284
+ },
285
+ },
286
+ },
287
+ ],
288
+ };
289
+ const graph = buildGraph(workflow);
290
+ // const workflow = new Classes.Workflow({...}); const graph = workflow.toGraph();
291
+ // const graph = Classes.Workflow.toGraph(workflow);
292
+ /*{
293
+ id: 'root',
294
+ type: 'root',
295
+ label: undefined,
296
+ parent: null,
297
+ nodes: [...], // length 3 - root entry node, step1 node, root exit node
298
+ edges: [...], // length 2 - entry to step1, step1 to exit
299
+ entryNode: {...}, // root entry node
300
+ exitNode: {...} // root exit node
301
+ }*/
302
+ ```
303
+
304
+ #### Generate a MermaidJS flowchart
305
+ Generating a [MermaidJS](https://mermaid.js.org/) flowchart can be achieved in two ways: using the `convertToMermaidCode`, the legacy `MermaidDiagram` class, or alternatives:
306
+ - Workflow instance `.toMermaidCode();`
307
+ - Static `Classes.Workflow.toMermaidCode(workflow)`
308
+
309
+ ```typescript
310
+ import { convertToMermaidCode, MermaidDiagram } from '@serverlessworkflow/sdk';
311
+
312
+ const workflow = {
313
+ document: {
314
+ dsl: '1.0.0',
315
+ name: 'using-plain-object',
316
+ version: '1.0.0',
317
+ namespace: 'default',
318
+ },
319
+ do: [
320
+ {
321
+ step1: {
322
+ set: {
323
+ variable: 'my first workflow',
324
+ },
325
+ },
326
+ },
327
+ ],
328
+ };
329
+ const mermaidCode = convertToMermaidCode(workflow) /* or */;
330
+ // const mermaidCode = new MermaidDiagram(workflow).sourceCode();
331
+ // const workflow = new Classes.Workflow({...}); const mermaidCode = workflow.toMermaidCode();
332
+ // const mermaidCode = Classes.Workflow.toMermaidCode(workflow);
333
+ /*
334
+ flowchart TD
335
+ root-entry-node(( ))
336
+ root-exit-node((( )))
337
+ /do/0/step1["step1"]
338
+ /do/0/step1 --> root-exit-node
339
+ root-entry-node --> /do/0/step1
340
+
341
+
342
+ classDef hidden display: none;
343
+ */
344
+ ```
345
+
346
+ ```mermaid
347
+ flowchart TD
348
+ root-entry-node(( ))
349
+ root-exit-node((( )))
350
+ /do/0/step1["step1"]
351
+ /do/0/step1 --> root-exit-node
352
+ root-entry-node --> /do/0/step1
353
+
354
+
355
+ classDef hidden display: none;
356
+ ```
357
+
240
358
  ### Building Locally
241
359
 
242
360
  To build the project and run tests locally, use the following commands: