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