@@ -77,36 +77,16 @@ export type CallbackOptions = {
7777export type WorkflowDefinition <
7878 ArgsValidator extends PropertyValidators ,
7979 ReturnsValidator extends Validator < any , "required" , any > | void = any ,
80- DataModel extends GenericDataModel = GenericDataModel ,
8180> = {
8281 args ?: ArgsValidator ;
8382 returns ?: ReturnsValidator ;
8483 workpoolOptions ?: WorkpoolRetryOptions ;
85- /**
86- * Provide your app's `internalMutation` (from `_generated/server`) to get
87- * a fully typed `ctx` in `ctx.run()` handlers, with your data model's
88- * tables available on `ctx.db`. This also lets any custom middleware
89- * you've configured run around the workflow.
90- *
91- * ```ts
92- * import { internalMutation } from "./_generated/server";
93- * workflow.define({
94- * internalMutation,
95- * handler: async (ctx, args) => {
96- * const user = await ctx.run(async (ctx) => {
97- * return ctx.db.query("users").first(); // fully typed
98- * });
99- * },
100- * });
101- * ```
102- */
103- internalMutation ?: MutationBuilder < DataModel , "internal" > ;
10484} ;
10585
10686export type WorkflowHandler <
10787 ArgsValidator extends PropertyValidators ,
10888 ReturnsValidator extends Validator < any , "required" , any > | void ,
109- DataModel extends GenericDataModel ,
89+ DataModel extends GenericDataModel = GenericDataModel ,
11090> = (
11191 step : WorkflowCtx < DataModel > ,
11292 args : ObjectType < ArgsValidator > ,
@@ -158,7 +138,9 @@ export function defineWorkflow<
158138 DM extends GenericDataModel = GenericDataModel ,
159139> (
160140 component : WorkflowComponent ,
161- config : WorkflowDefinition < AV , RV , DM > ,
141+ config : WorkflowDefinition < AV , RV > & {
142+ internalMutation ?: MutationBuilder < DM , "internal" > ;
143+ } ,
162144) : {
163145 /**
164146 * Define the workflow handler function.
@@ -538,11 +520,27 @@ export async function cleanup(
538520 } ) ;
539521}
540522
541- export class WorkflowManager {
523+ export class WorkflowManager <
524+ DataModel extends GenericDataModel = GenericDataModel ,
525+ > {
542526 constructor (
543527 public component : WorkflowComponent ,
544528 public options ?: {
545- workpoolOptions : WorkpoolOptions ;
529+ workpoolOptions ?: WorkpoolOptions ;
530+ /**
531+ * Provide your app's `internalMutation` (from `_generated/server`) to get
532+ * a fully typed `ctx` in `step.run()` handlers, with your data model's
533+ * tables available on `ctx.db`. This also lets any custom middleware
534+ * you've configured run around the workflow.
535+ *
536+ * ```ts
537+ * import { internalMutation } from "./_generated/server";
538+ * const workflow = new WorkflowManager(components.workflow, {
539+ * internalMutation,
540+ * });
541+ * ```
542+ */
543+ internalMutation ?: MutationBuilder < DataModel , "internal" > ;
546544 } ,
547545 ) { }
548546
@@ -555,9 +553,8 @@ export class WorkflowManager {
555553 define <
556554 ArgsValidator extends PropertyValidators ,
557555 ReturnsValidator extends Validator < unknown , "required" , string > | void ,
558- DataModel extends GenericDataModel = GenericDataModel ,
559556 > (
560- workflow : WorkflowDefinition < ArgsValidator , ReturnsValidator , DataModel > & {
557+ workflow : WorkflowDefinition < ArgsValidator , ReturnsValidator > & {
561558 handler : WorkflowHandler < ArgsValidator , ReturnsValidator , DataModel > ;
562559 } ,
563560 ) : RegisteredMutation <
@@ -568,9 +565,8 @@ export class WorkflowManager {
568565 define <
569566 ArgsValidator extends PropertyValidators ,
570567 ReturnsValidator extends Validator < unknown , "required" , string > | void ,
571- DataModel extends GenericDataModel = GenericDataModel ,
572568 > (
573- workflow : WorkflowDefinition < ArgsValidator , ReturnsValidator , DataModel > ,
569+ workflow : WorkflowDefinition < ArgsValidator , ReturnsValidator > ,
574570 ) : {
575571 /**
576572 * Define the workflow handler function.
@@ -602,21 +598,21 @@ export class WorkflowManager {
602598 define <
603599 ArgsValidator extends PropertyValidators ,
604600 ReturnsValidator extends Validator < unknown , "required" , string > | void ,
605- DataModel extends GenericDataModel = GenericDataModel ,
606601 > (
607- workflow : WorkflowDefinition < ArgsValidator , ReturnsValidator , DataModel > & {
602+ workflow : WorkflowDefinition < ArgsValidator , ReturnsValidator > & {
608603 handler ?: WorkflowHandler < ArgsValidator , ReturnsValidator , DataModel > ;
609604 } ,
610605 ) : unknown {
606+ const withMutation = {
607+ ...workflow ,
608+ internalMutation : this . options ?. internalMutation ,
609+ } ;
611610 if ( workflow . handler ) {
612611 return workflowMutation (
613612 this . component ,
614- workflow as WorkflowDefinition <
615- ArgsValidator ,
616- ReturnsValidator ,
617- DataModel
618- > & {
613+ withMutation as WorkflowDefinition < ArgsValidator , ReturnsValidator > & {
619614 handler : WorkflowHandler < ArgsValidator , ReturnsValidator , DataModel > ;
615+ internalMutation ?: MutationBuilder < DataModel , "internal" > ;
620616 } ,
621617 this . options ?. workpoolOptions ,
622618 ) ;
@@ -628,7 +624,7 @@ export class WorkflowManager {
628624 return defineWorkflow < ArgsValidator , ReturnsValidator , DataModel > (
629625 this . component ,
630626 {
631- ...workflow ,
627+ ...withMutation ,
632628 workpoolOptions : {
633629 ...this . options ?. workpoolOptions ,
634630 ...workflow . workpoolOptions ,
0 commit comments