diff --git a/packages/workflow/src/workflow-context.ts b/packages/workflow/src/workflow-context.ts index a977a065fa0e6eae53639e3df2082a1701c1f70b..bd8bdf2adad8dd89a8de0d875489b581c2b98a89 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 c6acf07d57770e58add79ba61014825963796d8c..4cc1d0787bdabc3879360ee08ab689bf37386b91 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 () => {