@zola_do/workflow-engine 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,20 @@
1
1
  # @zola_do/workflow-engine
2
2
 
3
+ [![npm version](https://img.shields.io/npm/v/@zola_do/workflow-engine.svg)](https://www.npmjs.com/package/@zola_do/workflow-engine)
4
+ [![npm downloads](https://img.shields.io/npm/dm/@zola_do/workflow-engine.svg)](https://www.npmjs.com/package/@zola_do/workflow-engine)
5
+ [![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg)](https://opensource.org/licenses/ISC)
6
+
3
7
  State machine workflow converter for NestJS. Converts UI JSON (node/edge graph) to XState-compatible state machine definitions.
4
8
 
9
+ ## Overview
10
+
11
+ `@zola_do/workflow-engine` provides:
12
+
13
+ - **UI JSON Conversion** — Transform React Flow / node-editor JSON to state machines
14
+ - **XState Compatibility** — Output suitable for XState or similar libraries
15
+ - **Node Type Support** — Handles start, parallel, and custom node types
16
+ - **State Transitions** — Automatic edge-to-transition mapping
17
+
5
18
  ## Installation
6
19
 
7
20
  ```bash
@@ -12,15 +25,13 @@ npm install @zola_do/workflow-engine
12
25
  npm install @zola_do/nestjs-shared
13
26
  ```
14
27
 
15
- ## Usage
28
+ ## Quick Start
16
29
 
17
- ### Module Setup
18
-
19
- Register `WorkflowEngineService` in your module:
30
+ ### 1. Register Service
20
31
 
21
32
  ```typescript
22
- import { Module } from '@nestjs/common';
23
- import { WorkflowEngineService } from '@zola_do/workflow-engine';
33
+ import { Module } from "@nestjs/common";
34
+ import { WorkflowEngineService } from "@zola_do/workflow-engine";
24
35
 
25
36
  @Module({
26
37
  providers: [WorkflowEngineService],
@@ -29,45 +40,467 @@ import { WorkflowEngineService } from '@zola_do/workflow-engine';
29
40
  export class WorkflowModule {}
30
41
  ```
31
42
 
32
- ### Converting UI JSON to State Machine
33
-
34
- The service converts a React Flow / node-editor style JSON (nodes and edges) into a state machine definition:
43
+ ### 2. Convert Workflow
35
44
 
36
45
  ```typescript
37
- import { Injectable } from '@nestjs/common';
38
- import { WorkflowEngineService } from '@zola_do/workflow-engine';
46
+ import { Injectable } from "@nestjs/common";
47
+ import { WorkflowEngineService } from "@zola_do/workflow-engine";
39
48
 
40
49
  @Injectable()
41
50
  export class WorkflowController {
42
51
  constructor(private readonly workflowEngine: WorkflowEngineService) {}
43
52
 
44
- async convertWorkflow(uiJson: {
45
- nodes: Array<{ id: string; type: string; data: { label: string } }>;
46
- edges: Array<{ source: string; target: string; label?: string }>;
47
- }) {
48
- const machine = await this.workflowEngine.convertToStateMachine(uiJson);
49
- return machine;
50
- // Returns { id, initial, states } suitable for XState or similar
53
+ @Post("workflows/:id/compile")
54
+ async compileWorkflow(@Param("id") id: string) {
55
+ const uiJson = await this.workflowService.getUiJson(id);
56
+
57
+ const stateMachine = this.workflowEngine.convertToStateMachine(uiJson);
58
+
59
+ return {
60
+ definition: stateMachine,
61
+ xstateReady: true,
62
+ };
51
63
  }
52
64
  }
53
65
  ```
54
66
 
55
- ### Input Format
67
+ ## Workflow Architecture
68
+
69
+ ```
70
+ ┌─────────────────────────────────────────────────────────────────────┐
71
+ │ Workflow Conversion Flow │
72
+ ├─────────────────────────────────────────────────────────────────────┤
73
+ │ │
74
+ │ UI Editor (React Flow) │
75
+ │ ┌─────────────────────────────────────────┐ │
76
+ │ │ nodes: [ │ │
77
+ │ │ { id: '1', type: 'start', ... }, │ │
78
+ │ │ { id: '2', type: 'task', ... }, │ │
79
+ │ │ { id: '3', type: 'end', ... } │ │
80
+ │ │ ] │ │
81
+ │ │ edges: [ │ │
82
+ │ │ { source: '1', target: '2' }, │ │
83
+ │ │ { source: '2', target: '3' } │ │
84
+ │ │ ] │ │
85
+ │ └────────────────────┬────────────────────┘ │
86
+ │ │ │
87
+ │ │ convertToStateMachine() │
88
+ │ ▼ │
89
+ │ ┌─────────────────────────────────────────┐ │
90
+ │ │ State Machine Definition │ │
91
+ │ │ │ │
92
+ │ │ { │ │
93
+ │ │ id: 'workflow-uuid', │ │
94
+ │ │ initial: 'Start', │ │
95
+ │ │ states: { │ │
96
+ │ │ Start: { │ │
97
+ │ │ on: { NEXT: 'Task' } │ │
98
+ │ │ }, │ │
99
+ │ │ Task: { │ │
100
+ │ │ on: { DONE: 'End' } │ │
101
+ │ │ }, │ │
102
+ │ │ End: { type: 'final' } │ │
103
+ │ │ } │ │
104
+ │ │ } │ │
105
+ │ └─────────────────────────────────────────┘ │
106
+ │ │
107
+ └─────────────────────────────────────────────────────────────────────┘
108
+ ```
109
+
110
+ ## Input Format
111
+
112
+ ### Node Types
113
+
114
+ ```typescript
115
+ interface WorkflowNode {
116
+ id: string;
117
+ type: "start" | "end" | "task" | "condition" | "parallel" | string;
118
+ data: {
119
+ label?: string;
120
+ [key: string]: any;
121
+ };
122
+ position?: { x: number; y: number };
123
+ }
124
+ ```
125
+
126
+ ### Edge Types
127
+
128
+ ```typescript
129
+ interface WorkflowEdge {
130
+ id?: string;
131
+ source: string; // Source node ID
132
+ target: string; // Target node ID
133
+ label?: string; // Event/transition name
134
+ data?: {
135
+ condition?: string; // For conditional edges
136
+ [key: string]: any;
137
+ };
138
+ }
139
+ ```
140
+
141
+ ### Example UI JSON
142
+
143
+ ```typescript
144
+ const uiJson = {
145
+ nodes: [
146
+ {
147
+ id: "node-1",
148
+ type: "start",
149
+ data: { label: "Start" },
150
+ position: { x: 100, y: 100 },
151
+ },
152
+ {
153
+ id: "node-2",
154
+ type: "task",
155
+ data: { label: "Review Application" },
156
+ position: { x: 300, y: 100 },
157
+ },
158
+ {
159
+ id: "node-3",
160
+ type: "condition",
161
+ data: { label: "Approved?" },
162
+ position: { x: 500, y: 100 },
163
+ },
164
+ {
165
+ id: "node-4",
166
+ type: "task",
167
+ data: { label: "Send Approval Email" },
168
+ position: { x: 700, y: 50 },
169
+ },
170
+ {
171
+ id: "node-5",
172
+ type: "task",
173
+ data: { label: "Send Rejection Email" },
174
+ position: { x: 700, y: 150 },
175
+ },
176
+ {
177
+ id: "node-6",
178
+ type: "end",
179
+ data: { label: "End" },
180
+ position: { x: 900, y: 100 },
181
+ },
182
+ ],
183
+ edges: [
184
+ { source: "node-1", target: "node-2" },
185
+ { source: "node-2", target: "node-3" },
186
+ { source: "node-3", target: "node-4", label: "YES" },
187
+ { source: "node-3", target: "node-5", label: "NO" },
188
+ { source: "node-4", target: "node-6" },
189
+ { source: "node-5", target: "node-6" },
190
+ ],
191
+ };
192
+ ```
193
+
194
+ ## Output Format
195
+
196
+ ### State Machine Structure
197
+
198
+ ```typescript
199
+ interface StateMachine {
200
+ id: string; // UUID
201
+ initial: string; // Initial state name
202
+ states: {
203
+ [stateName: string]: {
204
+ type?: "final" | "atomic";
205
+ on?: {
206
+ [event: string]: string | StateMachine;
207
+ };
208
+ meta?: {
209
+ type?: string;
210
+ [key: string]: any;
211
+ };
212
+ states?: {
213
+ [nestedState: string]: any;
214
+ };
215
+ };
216
+ };
217
+ }
218
+ ```
219
+
220
+ ### Example Output
221
+
222
+ ```typescript
223
+ const stateMachine = {
224
+ id: "550e8400-e29b-41d4-a716-446655440000",
225
+ initial: "Start",
226
+ states: {
227
+ Start: {
228
+ on: { NEXT: "Review Application" },
229
+ meta: { type: "start" },
230
+ },
231
+ "Review Application": {
232
+ on: { NEXT: "Approved?" },
233
+ meta: { type: "task" },
234
+ },
235
+ "Approved?": {
236
+ on: {
237
+ YES: "Send Approval Email",
238
+ NO: "Send Rejection Email",
239
+ },
240
+ meta: { type: "condition" },
241
+ },
242
+ "Send Approval Email": {
243
+ on: { NEXT: "End" },
244
+ meta: { type: "task" },
245
+ },
246
+ "Send Rejection Email": {
247
+ on: { NEXT: "End" },
248
+ meta: { type: "task" },
249
+ },
250
+ End: {
251
+ type: "final",
252
+ meta: { type: "end" },
253
+ },
254
+ },
255
+ };
256
+ ```
257
+
258
+ ## Node Type Handling
259
+
260
+ ### Start Node
261
+
262
+ ```typescript
263
+ {
264
+ id: 'node-1',
265
+ type: 'start',
266
+ data: { label: 'Start' },
267
+ }
268
+ // Becomes: initial state in output
269
+ ```
270
+
271
+ ### End Node
272
+
273
+ ```typescript
274
+ {
275
+ id: 'node-2',
276
+ type: 'end',
277
+ data: { label: 'End' },
278
+ }
279
+ // Becomes: { type: 'final' } state
280
+ ```
281
+
282
+ ### Task Node
283
+
284
+ ```typescript
285
+ {
286
+ id: 'node-3',
287
+ type: 'task',
288
+ data: { label: 'Process Order' },
289
+ }
290
+ // Becomes: { on: { NEXT: 'nextState' }, meta: { type: 'task' } }
291
+ ```
292
+
293
+ ### Condition Node
294
+
295
+ ```typescript
296
+ {
297
+ id: 'node-4',
298
+ type: 'condition',
299
+ data: { label: 'Is Valid?' },
300
+ }
301
+ // Becomes: { on: { YES: 'trueState', NO: 'falseState' } }
302
+ ```
303
+
304
+ ### Parallel Node
305
+
306
+ ```typescript
307
+ {
308
+ id: 'node-5',
309
+ type: 'parallel',
310
+ data: { label: 'Parallel Tasks' },
311
+ }
312
+ // Becomes: { type: 'parallel', states: { ... } }
313
+ ```
314
+
315
+ ## Real-World Examples
56
316
 
57
- - **nodes:** Array of `{ id, type, data: { label } }`. `type: 'start'` denotes the initial node.
58
- - **edges:** Array of `{ source, target, label? }`. Defines transitions between states.
317
+ ### Approval Workflow
59
318
 
60
- ### Output Format
319
+ ```typescript
320
+ const approvalWorkflow = {
321
+ nodes: [
322
+ { id: "1", type: "start", data: { label: "Submit" } },
323
+ { id: "2", type: "task", data: { label: "Manager Review" } },
324
+ { id: "3", type: "condition", data: { label: "Approved?" } },
325
+ { id: "4", type: "task", data: { label: "Send Approval" } },
326
+ { id: "5", type: "task", data: { label: "Notify Rejection" } },
327
+ { id: "6", type: "end", data: { label: "Done" } },
328
+ ],
329
+ edges: [
330
+ { source: "1", target: "2" },
331
+ { source: "2", target: "3" },
332
+ { source: "3", target: "4", label: "YES" },
333
+ { source: "3", target: "5", label: "NO" },
334
+ { source: "4", target: "6" },
335
+ { source: "5", target: "6" },
336
+ ],
337
+ };
338
+
339
+ const stateMachine = workflowEngine.convertToStateMachine(approvalWorkflow);
340
+ ```
341
+
342
+ ### Multi-Step Form
343
+
344
+ ```typescript
345
+ const formWorkflow = {
346
+ nodes: [
347
+ { id: "s1", type: "start", data: { label: "Step 1" } },
348
+ { id: "s2", type: "task", data: { label: "Personal Info" } },
349
+ { id: "s3", type: "task", data: { label: "Address" } },
350
+ { id: "s4", type: "task", data: { label: "Payment" } },
351
+ { id: "s5", type: "condition", data: { label: "Valid?" } },
352
+ { id: "s6", type: "end", data: { label: "Complete" } },
353
+ ],
354
+ edges: [
355
+ { source: "s1", target: "s2" },
356
+ { source: "s2", target: "s3" },
357
+ { source: "s3", target: "s4" },
358
+ { source: "s4", target: "s5" },
359
+ { source: "s5", target: "s6", label: "YES" },
360
+ { source: "s5", target: "s2", label: "NO" }, // Go back
361
+ ],
362
+ };
363
+ ```
364
+
365
+ ## XState Integration
366
+
367
+ The output is compatible with XState:
368
+
369
+ ```typescript
370
+ import { createMachine } from "xstate";
371
+ import { interpret } from "xstate";
372
+
373
+ const machine = createMachine(stateMachine);
374
+
375
+ const actor = interpret(machine).start();
376
+
377
+ actor.send({ type: "NEXT" }); // Transition to next state
378
+ actor.send({ type: "YES" }); // Transition on condition
379
+ ```
380
+
381
+ ### Full XState Example
382
+
383
+ ```typescript
384
+ import { createMachine, interpret } from "xstate";
385
+
386
+ @Controller("workflows")
387
+ export class WorkflowExecutionController {
388
+ @Post(":id/execute")
389
+ async executeWorkflow(@Param("id") id: string) {
390
+ const definition = await this.workflowService.getCompiledDefinition(id);
391
+ const machine = createMachine(definition);
392
+
393
+ const actor = interpret(machine)
394
+ .onTransition((state) => {
395
+ console.log("Current state:", state.value);
396
+ })
397
+ .start();
398
+
399
+ // Execute workflow steps
400
+ const result = await this.executeSteps(actor, definition);
401
+
402
+ return result;
403
+ }
404
+
405
+ private async executeSteps(actor: any, definition: any) {
406
+ const states = Object.keys(definition.states);
407
+ for (const state of states) {
408
+ if (definition.states[state].type === "final") {
409
+ break;
410
+ }
411
+ await this.performStateAction(state);
412
+ actor.send({ type: "NEXT" });
413
+ }
414
+ return { completed: true };
415
+ }
416
+ }
417
+ ```
418
+
419
+ ## API Reference
420
+
421
+ ### Service
422
+
423
+ ```typescript
424
+ class WorkflowEngineService {
425
+ convertToStateMachine(uiJson: UiJson): StateMachine;
426
+ }
427
+ ```
428
+
429
+ ### Types
430
+
431
+ ```typescript
432
+ interface UiJson {
433
+ nodes: WorkflowNode[];
434
+ edges: WorkflowEdge[];
435
+ }
436
+
437
+ interface WorkflowNode {
438
+ id: string;
439
+ type: string;
440
+ data: Record<string, any>;
441
+ position?: { x: number; y: number };
442
+ }
443
+
444
+ interface WorkflowEdge {
445
+ id?: string;
446
+ source: string;
447
+ target: string;
448
+ label?: string;
449
+ data?: Record<string, any>;
450
+ }
451
+
452
+ interface StateMachine {
453
+ id: string;
454
+ initial: string;
455
+ states: Record<string, any>;
456
+ }
457
+ ```
458
+
459
+ ## Troubleshooting
460
+
461
+ ### Q: Node label not used?
462
+
463
+ Ensure nodes have a `data.label` property:
464
+
465
+ ```typescript
466
+ // ❌ No label
467
+ { id: '1', type: 'start' }
468
+
469
+ // ✅ With label
470
+ { id: '1', type: 'start', data: { label: 'Start' } }
471
+ ```
472
+
473
+ ### Q: Edge transitions not working?
474
+
475
+ Check edge labels match expected events:
476
+
477
+ ```typescript
478
+ // For condition nodes, edge labels become transition events
479
+ { source: '3', target: '4', label: 'YES' }
480
+ // Triggers: state.on.YES
481
+ ```
482
+
483
+ ### Q: Parallel nodes not handled?
484
+
485
+ Parallel nodes create nested state configurations:
486
+
487
+ ```typescript
488
+ {
489
+ type: 'parallel',
490
+ states: {
491
+ trackA: { initial: 'a1', states: { a1: {}, a2: {} } },
492
+ trackB: { initial: 'b1', states: { b1: {}, b2: {} } },
493
+ },
494
+ }
495
+ ```
61
496
 
62
- Returns an object with:
497
+ ## Related Packages
63
498
 
64
- - `id` UUID
65
- - `initial` — Initial state label
66
- - `states` — Map of state labels to `{ on: { EVENT: targetState }, meta: { type } }`
499
+ None - standalone workflow package
67
500
 
68
- ## Exports
501
+ ## License
69
502
 
70
- - `WorkflowEngineService` — `convertToStateMachine(uiJson)`
503
+ ISC
71
504
 
72
505
  ## Community
73
506
 
@@ -1,3 +1,6 @@
1
1
  export declare class WorkflowEngineService {
2
- convertToStateMachine(uiJson: any): Promise<{}>;
2
+ convertToStateMachine(uiJson: any): Promise<{
3
+ schemaVersion: number;
4
+ definition: Record<string, any>;
5
+ }>;
3
6
  }
@@ -39,7 +39,7 @@ let WorkflowEngineService = class WorkflowEngineService {
39
39
  meta: nodeMetaData,
40
40
  };
41
41
  });
42
- return machine;
42
+ return { schemaVersion: 1, definition: machine };
43
43
  }
44
44
  };
45
45
  exports.WorkflowEngineService = WorkflowEngineService;
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-engine.service.js","sourceRoot":"","sources":["../src/workflow-engine.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,mCAAoC;AAG7B,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,KAAK,CAAC,qBAAqB,CAAC,MAAW;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAA,mBAAU,GAAE,CAAC;QAC7B,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1C,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACxB,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;YAInE,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,UAAU,GAAG,EAAE,CAAC;YACtB,MAAM,YAAY,GAAG,EAAE,CAAC;YACxB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,MAAM,KAAK,GACT,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBACjC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;oBAC1B,CAAC,CAAC,QAAQ,CAAC;gBACf,UAAU,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAC5B,CAAC,IAAI,CAAC,KAAK,CAAC;YACf,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;YAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YACtC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG;gBACnC,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,YAAY;aACnB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAA;AAvCY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;GACA,qBAAqB,CAuCjC"}
1
+ {"version":3,"file":"workflow-engine.service.js","sourceRoot":"","sources":["../src/workflow-engine.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,mCAAoC;AAG7B,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,KAAK,CAAC,qBAAqB,CAAC,MAAW;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAA,mBAAU,GAAE,CAAC;QAC7B,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1C,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACxB,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;YAInE,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,UAAU,GAAG,EAAE,CAAC;YACtB,MAAM,YAAY,GAAG,EAAE,CAAC;YACxB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,MAAM,KAAK,GACT,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBACjC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;oBAC1B,CAAC,CAAC,QAAQ,CAAC;gBACf,UAAU,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAC5B,CAAC,IAAI,CAAC,KAAK,CAAC;YACf,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;YAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YACtC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG;gBACnC,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,YAAY;aACnB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IACnD,CAAC;CACF,CAAA;AAvCY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;GACA,qBAAqB,CAuCjC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zola_do/workflow-engine",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "description": "State machine workflow converter for NestJS",
5
5
  "author": "zolaDO",
6
6
  "license": "ISC",