From 17f9022d22544f80653aa42118d99e6ba46ee218 Mon Sep 17 00:00:00 2001
From: Alex Yang <himself65@outlook.com>
Date: Wed, 13 Nov 2024 00:46:35 -0800
Subject: [PATCH] fix: output event check (#1475)

---
 packages/workflow/src/workflow-context.ts |  9 +++++----
 unit/workflow/workflow.test.ts            | 15 +++++++++++++++
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/packages/workflow/src/workflow-context.ts b/packages/workflow/src/workflow-context.ts
index a977a065f..bd8bdf2ad 100644
--- a/packages/workflow/src/workflow-context.ts
+++ b/packages/workflow/src/workflow-context.ts
@@ -397,10 +397,11 @@ export class WorkflowContext<Start = string, Stop = string, Data = unknown>
                             );
                           }
                           const outputs = outputsMap.get(step) ?? [];
-                          const outputEvents = flattenEvents(outputs, [
-                            nextEvent,
-                          ]);
-                          if (outputEvents.length !== outputs.length) {
+                          if (
+                            !outputs.some(
+                              (output) => nextEvent.constructor === output,
+                            )
+                          ) {
                             if (this.#strict) {
                               const error = Error(
                                 `Step ${step.name} returned an unexpected output event ${nextEvent}`,
diff --git a/unit/workflow/workflow.test.ts b/unit/workflow/workflow.test.ts
index c6acf07d5..4cc1d0787 100644
--- a/unit/workflow/workflow.test.ts
+++ b/unit/workflow/workflow.test.ts
@@ -794,6 +794,21 @@ describe("workflow event loop", () => {
       }
     `);
   });
+
+  test("workflow multiple output", async () => {
+    const myFlow = new Workflow<unknown, string, string>({ verbose: true });
+    myFlow.addStep(
+      {
+        inputs: [StartEvent<string>],
+        outputs: [StopEvent<string>, StopEvent<string>],
+      },
+      async (_context, ev) => {
+        return new StopEvent(`Hello ${ev.data}!`);
+      },
+    );
+    const result = await myFlow.run("world").strict();
+    expect(result.data).toBe("Hello world!");
+  });
 });
 
 describe("snapshot", async () => {
-- 
GitLab