Skip to content

Commit aaf2ed8

Browse files
committed
onWait and onResume
1 parent e816ba4 commit aaf2ed8

File tree

4 files changed

+177
-1
lines changed

4 files changed

+177
-1
lines changed

packages/core/src/v3/lifecycleHooks/manager.ts

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import {
77
AnyOnFailureHookFunction,
88
AnyOnSuccessHookFunction,
99
AnyOnCompleteHookFunction,
10+
AnyOnWaitHookFunction,
11+
AnyOnResumeHookFunction,
1012
} from "./types.js";
1113

1214
export class StandardLifecycleHooksManager implements LifecycleHooksManager {
@@ -31,6 +33,13 @@ export class StandardLifecycleHooksManager implements LifecycleHooksManager {
3133
private taskCompleteHooks: Map<string, RegisteredHookFunction<AnyOnCompleteHookFunction>> =
3234
new Map();
3335

36+
private globalWaitHooks: Map<string, RegisteredHookFunction<AnyOnWaitHookFunction>> = new Map();
37+
private taskWaitHooks: Map<string, RegisteredHookFunction<AnyOnWaitHookFunction>> = new Map();
38+
39+
private globalResumeHooks: Map<string, RegisteredHookFunction<AnyOnResumeHookFunction>> =
40+
new Map();
41+
private taskResumeHooks: Map<string, RegisteredHookFunction<AnyOnResumeHookFunction>> = new Map();
42+
3443
registerGlobalStartHook(hook: RegisterHookFunctionParams<AnyOnStartHookFunction>): void {
3544
const id = generateHookId(hook);
3645

@@ -188,6 +197,68 @@ export class StandardLifecycleHooksManager implements LifecycleHooksManager {
188197
getGlobalCompleteHooks(): RegisteredHookFunction<AnyOnCompleteHookFunction>[] {
189198
return Array.from(this.globalCompleteHooks.values());
190199
}
200+
201+
registerGlobalWaitHook(hook: RegisterHookFunctionParams<AnyOnWaitHookFunction>): void {
202+
const id = generateHookId(hook);
203+
204+
this.globalWaitHooks.set(id, {
205+
id,
206+
name: hook.id ?? hook.fn.name ? (hook.fn.name === "" ? undefined : hook.fn.name) : undefined,
207+
fn: hook.fn,
208+
});
209+
}
210+
211+
registerTaskWaitHook(
212+
taskId: string,
213+
hook: RegisterHookFunctionParams<AnyOnWaitHookFunction>
214+
): void {
215+
const id = generateHookId(hook);
216+
217+
this.taskWaitHooks.set(taskId, {
218+
id,
219+
name: hook.id ?? hook.fn.name ? (hook.fn.name === "" ? undefined : hook.fn.name) : undefined,
220+
fn: hook.fn,
221+
});
222+
}
223+
224+
getTaskWaitHook(taskId: string): AnyOnWaitHookFunction | undefined {
225+
return this.taskWaitHooks.get(taskId)?.fn;
226+
}
227+
228+
getGlobalWaitHooks(): RegisteredHookFunction<AnyOnWaitHookFunction>[] {
229+
return Array.from(this.globalWaitHooks.values());
230+
}
231+
232+
registerGlobalResumeHook(hook: RegisterHookFunctionParams<AnyOnResumeHookFunction>): void {
233+
const id = generateHookId(hook);
234+
235+
this.globalResumeHooks.set(id, {
236+
id,
237+
name: hook.id ?? hook.fn.name ? (hook.fn.name === "" ? undefined : hook.fn.name) : undefined,
238+
fn: hook.fn,
239+
});
240+
}
241+
242+
registerTaskResumeHook(
243+
taskId: string,
244+
hook: RegisterHookFunctionParams<AnyOnResumeHookFunction>
245+
): void {
246+
const id = generateHookId(hook);
247+
248+
this.taskResumeHooks.set(taskId, {
249+
id,
250+
name: hook.id ?? hook.fn.name ? (hook.fn.name === "" ? undefined : hook.fn.name) : undefined,
251+
fn: hook.fn,
252+
});
253+
}
254+
255+
getTaskResumeHook(taskId: string): AnyOnResumeHookFunction | undefined {
256+
return this.taskResumeHooks.get(taskId)?.fn;
257+
}
258+
259+
getGlobalResumeHooks(): RegisteredHookFunction<AnyOnResumeHookFunction>[] {
260+
return Array.from(this.globalResumeHooks.values());
261+
}
191262
}
192263

193264
export class NoopLifecycleHooksManager implements LifecycleHooksManager {
@@ -285,6 +356,44 @@ export class NoopLifecycleHooksManager implements LifecycleHooksManager {
285356
getGlobalCompleteHooks(): RegisteredHookFunction<AnyOnCompleteHookFunction>[] {
286357
return [];
287358
}
359+
360+
registerGlobalWaitHook(hook: RegisterHookFunctionParams<AnyOnWaitHookFunction>): void {
361+
// Noop
362+
}
363+
364+
registerTaskWaitHook(
365+
taskId: string,
366+
hook: RegisterHookFunctionParams<AnyOnWaitHookFunction>
367+
): void {
368+
// Noop
369+
}
370+
371+
getTaskWaitHook(taskId: string): AnyOnWaitHookFunction | undefined {
372+
return undefined;
373+
}
374+
375+
getGlobalWaitHooks(): RegisteredHookFunction<AnyOnWaitHookFunction>[] {
376+
return [];
377+
}
378+
379+
registerGlobalResumeHook(hook: RegisterHookFunctionParams<AnyOnResumeHookFunction>): void {
380+
// Noop
381+
}
382+
383+
registerTaskResumeHook(
384+
taskId: string,
385+
hook: RegisterHookFunctionParams<AnyOnResumeHookFunction>
386+
): void {
387+
// Noop
388+
}
389+
390+
getTaskResumeHook(taskId: string): AnyOnResumeHookFunction | undefined {
391+
return undefined;
392+
}
393+
394+
getGlobalResumeHooks(): RegisteredHookFunction<AnyOnResumeHookFunction>[] {
395+
return [];
396+
}
288397
}
289398

290399
function generateHookId(hook: RegisterHookFunctionParams<any>): string {

packages/core/src/v3/lifecycleHooks/types.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,32 @@ export type OnStartHookFunction<TPayload> = (
2626

2727
export type AnyOnStartHookFunction = OnStartHookFunction<unknown>;
2828

29+
export type TaskWaitHookParams<TPayload = unknown> = {
30+
ctx: TaskRunContext;
31+
payload: TPayload;
32+
task: string;
33+
signal?: AbortSignal;
34+
};
35+
36+
export type OnWaitHookFunction<TPayload> = (
37+
params: TaskWaitHookParams<TPayload>
38+
) => undefined | void | Promise<undefined | void>;
39+
40+
export type AnyOnWaitHookFunction = OnWaitHookFunction<unknown>;
41+
42+
export type TaskResumeHookParams<TPayload = unknown> = {
43+
ctx: TaskRunContext;
44+
payload: TPayload;
45+
task: string;
46+
signal?: AbortSignal;
47+
};
48+
49+
export type OnResumeHookFunction<TPayload> = (
50+
params: TaskResumeHookParams<TPayload>
51+
) => undefined | void | Promise<undefined | void>;
52+
53+
export type AnyOnResumeHookFunction = OnResumeHookFunction<unknown>;
54+
2955
export type TaskFailureHookParams<TPayload = unknown> = {
3056
ctx: TaskRunContext;
3157
payload: TPayload;
@@ -129,4 +155,18 @@ export interface LifecycleHooksManager {
129155
): void;
130156
getTaskCompleteHook(taskId: string): AnyOnCompleteHookFunction | undefined;
131157
getGlobalCompleteHooks(): RegisteredHookFunction<AnyOnCompleteHookFunction>[];
158+
registerGlobalWaitHook(hook: RegisterHookFunctionParams<AnyOnWaitHookFunction>): void;
159+
registerTaskWaitHook(
160+
taskId: string,
161+
hook: RegisterHookFunctionParams<AnyOnWaitHookFunction>
162+
): void;
163+
getTaskWaitHook(taskId: string): AnyOnWaitHookFunction | undefined;
164+
getGlobalWaitHooks(): RegisteredHookFunction<AnyOnWaitHookFunction>[];
165+
registerGlobalResumeHook(hook: RegisterHookFunctionParams<AnyOnResumeHookFunction>): void;
166+
registerTaskResumeHook(
167+
taskId: string,
168+
hook: RegisterHookFunctionParams<AnyOnResumeHookFunction>
169+
): void;
170+
getTaskResumeHook(taskId: string): AnyOnResumeHookFunction | undefined;
171+
getGlobalResumeHooks(): RegisteredHookFunction<AnyOnResumeHookFunction>[];
132172
}

packages/trigger-sdk/src/v3/hooks.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import {
1010
type AnyOnSuccessHookFunction,
1111
type AnyOnCompleteHookFunction,
1212
type TaskCompleteResult,
13+
type AnyOnWaitHookFunction,
14+
type AnyOnResumeHookFunction,
1315
} from "@trigger.dev/core/v3";
1416

1517
export type {
@@ -23,6 +25,8 @@ export type {
2325
AnyOnSuccessHookFunction,
2426
AnyOnCompleteHookFunction,
2527
TaskCompleteResult,
28+
AnyOnWaitHookFunction,
29+
AnyOnResumeHookFunction,
2630
};
2731

2832
export function onInit(name: string, fn: AnyOnInitHookFunction): void;
@@ -81,3 +85,24 @@ export function onComplete(
8185
fn: typeof fnOrName === "function" ? fnOrName : fn!,
8286
});
8387
}
88+
89+
export function onWait(name: string, fn: AnyOnWaitHookFunction): void;
90+
export function onWait(fn: AnyOnWaitHookFunction): void;
91+
export function onWait(fnOrName: string | AnyOnWaitHookFunction, fn?: AnyOnWaitHookFunction): void {
92+
lifecycleHooks.registerGlobalWaitHook({
93+
id: typeof fnOrName === "string" ? fnOrName : fnOrName.name ? fnOrName.name : undefined,
94+
fn: typeof fnOrName === "function" ? fnOrName : fn!,
95+
});
96+
}
97+
98+
export function onResume(name: string, fn: AnyOnResumeHookFunction): void;
99+
export function onResume(fn: AnyOnResumeHookFunction): void;
100+
export function onResume(
101+
fnOrName: string | AnyOnResumeHookFunction,
102+
fn?: AnyOnResumeHookFunction
103+
): void {
104+
lifecycleHooks.registerGlobalResumeHook({
105+
id: typeof fnOrName === "string" ? fnOrName : fnOrName.name ? fnOrName.name : undefined,
106+
fn: typeof fnOrName === "function" ? fnOrName : fn!,
107+
});
108+
}

packages/trigger-sdk/src/v3/tasks.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { onInit, onStart, onFailure, onSuccess, onComplete } from "./hooks.js";
1+
import { onInit, onStart, onFailure, onSuccess, onComplete, onWait, onResume } from "./hooks.js";
22
import {
33
batchTrigger,
44
batchTriggerAndWait,
@@ -84,4 +84,6 @@ export const tasks = {
8484
onFailure,
8585
onSuccess,
8686
onComplete,
87+
onWait,
88+
onResume,
8789
};

0 commit comments

Comments
 (0)