Skip to content

Commit 294705f

Browse files
authored
fix(client): Only require signalArgs when needed (#847)
1 parent 1991fb9 commit 294705f

File tree

3 files changed

+29
-13
lines changed

3 files changed

+29
-13
lines changed

packages/client/src/workflow-client.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ export class WorkflowClient {
377377
headers: {},
378378
workflowType,
379379
signalName: typeof signal === 'string' ? signal : signal.name,
380-
signalArgs,
380+
signalArgs: signalArgs ?? [],
381381
});
382382
}
383383

@@ -409,15 +409,15 @@ export class WorkflowClient {
409409
}
410410

411411
/**
412-
* Sends a signal to a running Workflow or starts a new one if not already running and immediately signals it.
413-
* Useful when you're unsure of the Workflows' run state.
412+
* Sends a Signal to a running Workflow or starts a new one if not already running and immediately Signals it.
413+
* Useful when you're unsure whether the Workflow has been started.
414414
*
415-
* @returns a WorkflowHandle to the started Workflow
415+
* @returns a {@link WorkflowHandle} to the started Workflow
416416
*/
417-
public async signalWithStart<T extends Workflow, SA extends any[] = []>(
418-
workflowTypeOrFunc: string | T,
419-
options: WithWorkflowArgs<T, WorkflowSignalWithStartOptions<SA>>
420-
): Promise<WorkflowHandleWithSignaledRunId<T>> {
417+
public async signalWithStart<WorkflowFn extends Workflow, SignalArgs extends any[] = []>(
418+
workflowTypeOrFunc: string | WorkflowFn,
419+
options: WithWorkflowArgs<WorkflowFn, WorkflowSignalWithStartOptions<SignalArgs>>
420+
): Promise<WorkflowHandleWithSignaledRunId<WorkflowFn>> {
421421
const { workflowId } = options;
422422
const interceptors = (this.options.interceptors.calls ?? []).map((ctor) => ctor({ workflowId }));
423423
const runId = await this._signalWithStart(workflowTypeOrFunc, options, interceptors);
@@ -430,7 +430,7 @@ export class WorkflowClient {
430430
runIdForResult: runId,
431431
interceptors,
432432
followRuns: options.followRuns ?? true,
433-
}) as WorkflowHandleWithSignaledRunId<T>; // Cast is safe because we know we add the signaledRunId below
433+
}) as WorkflowHandleWithSignaledRunId<WorkflowFn>; // Cast is safe because we know we add the signaledRunId below
434434
(handle as any) /* readonly */.signaledRunId = runId;
435435
return handle;
436436
}

packages/client/src/workflow-options.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,32 @@ export interface WorkflowOptions extends CommonWorkflowOptions {
3737
followRuns?: boolean;
3838
}
3939

40-
export interface WorkflowSignalWithStartOptions<SA extends any[] = []> extends WorkflowOptions {
40+
export type WorkflowSignalWithStartOptions<SignalArgs extends any[] = []> = SignalArgs extends [any, ...any[]]
41+
? WorkflowSignalWithStartOptionsWithArgs<SignalArgs>
42+
: WorkflowSignalWithStartOptionsWithoutArgs<SignalArgs>;
43+
44+
export interface WorkflowSignalWithStartOptionsWithoutArgs<SignalArgs extends any[]> extends WorkflowOptions {
4145
/**
4246
* SignalDefinition or name of signal
4347
*/
44-
signal: SignalDefinition<SA> | string;
48+
signal: SignalDefinition | string;
49+
50+
/**
51+
* Arguments to invoke the signal handler with
52+
*/
53+
signalArgs?: SignalArgs;
54+
}
55+
56+
export interface WorkflowSignalWithStartOptionsWithArgs<SignalArgs extends any[]> extends WorkflowOptions {
57+
/**
58+
* SignalDefinition or name of signal
59+
*/
60+
signal: SignalDefinition<SignalArgs> | string;
61+
4562
/**
4663
* Arguments to invoke the signal handler with
4764
*/
48-
signalArgs: SA;
65+
signalArgs: SignalArgs;
4966
}
5067

5168
// export interface WorkflowOptionsWithDefaults<T extends Workflow> extends CommonWorkflowOptionsWithDefaults<T> {

packages/test/src/integration-tests.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1090,7 +1090,6 @@ export function runIntegrationTests(codec?: PayloadCodec): void {
10901090
taskQueue: 'test',
10911091
workflowId,
10921092
signal: 'unblock',
1093-
signalArgs: [],
10941093
});
10951094
const handleFromGet = client.getHandle(workflowId);
10961095
await t.throwsAsync(handleFromGet.result(), { message: /.*/ });

0 commit comments

Comments
 (0)