From ff3885500cdc49440ada8f92d355e9bfe1cd39b9 Mon Sep 17 00:00:00 2001 From: Harminder Virk Date: Tue, 18 Mar 2025 15:41:01 +0530 Subject: [PATCH] fix: hooks auto-generated types to have precise input options (#11886) --- .changeset/fifty-badgers-punch.md | 5 ++++ .../composer/helpers/workflow-response.ts | 5 +++- .../workflows-sdk/src/utils/composer/type.ts | 25 +++++++++++-------- 3 files changed, 24 insertions(+), 11 deletions(-) create mode 100644 .changeset/fifty-badgers-punch.md diff --git a/.changeset/fifty-badgers-punch.md b/.changeset/fifty-badgers-punch.md new file mode 100644 index 0000000000..5d6c6a8d14 --- /dev/null +++ b/.changeset/fifty-badgers-punch.md @@ -0,0 +1,5 @@ +--- +"@medusajs/workflows-sdk": patch +--- + +fix: hooks auto-generated types to have precise input options diff --git a/packages/core/workflows-sdk/src/utils/composer/helpers/workflow-response.ts b/packages/core/workflows-sdk/src/utils/composer/helpers/workflow-response.ts index bf50b8a8a9..fc61ab85d0 100644 --- a/packages/core/workflows-sdk/src/utils/composer/helpers/workflow-response.ts +++ b/packages/core/workflows-sdk/src/utils/composer/helpers/workflow-response.ts @@ -4,7 +4,10 @@ import { WorkflowData, WorkflowDataProperties } from "../type" /** * Workflow response class encapsulates the return value of a workflow */ -export class WorkflowResponse { +export class WorkflowResponse< + TResult, + const THooks extends readonly unknown[] = [] +> { __type: typeof OrchestrationUtils.SymbolMedusaWorkflowResponse = OrchestrationUtils.SymbolMedusaWorkflowResponse diff --git a/packages/core/workflows-sdk/src/utils/composer/type.ts b/packages/core/workflows-sdk/src/utils/composer/type.ts index 6e2027de09..89c238841f 100644 --- a/packages/core/workflows-sdk/src/utils/composer/type.ts +++ b/packages/core/workflows-sdk/src/utils/composer/type.ts @@ -27,19 +27,24 @@ export type StepFunctionReturnConfig = { type KeysOfUnion = T extends T ? keyof T : never export type HookHandler = (...args: any[]) => void | Promise +type ConvertHookToObject = THook extends Hook + ? { + [K in Name]: ( + invoke: InvokeFn, + compensate?: CompensateFn + ) => void + } + : never + /** * Helper to convert an array of hooks to functions */ -type ConvertHooksToFunctions = { - [K in keyof THooks]: THooks[K] extends Hook - ? { - [Fn in Name]: ( - invoke: InvokeFn, - compensate?: CompensateFn - ) => void - } - : never -}[number] +type ConvertHooksToFunctions = THooks extends [ + infer A, + ...infer R +] + ? ConvertHookToObject & ConvertHooksToFunctions + : {} /** * A step function to be used in a workflow.