Skip to content

Commit 69222c7

Browse files
committed
handleError
1 parent 94632c9 commit 69222c7

File tree

4 files changed

+103
-0
lines changed

4 files changed

+103
-0
lines changed

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

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
AnyOnCompleteHookFunction,
1010
AnyOnWaitHookFunction,
1111
AnyOnResumeHookFunction,
12+
AnyOnHandleErrorHookFunction,
1213
} from "./types.js";
1314

1415
export class StandardLifecycleHooksManager implements LifecycleHooksManager {
@@ -40,6 +41,13 @@ export class StandardLifecycleHooksManager implements LifecycleHooksManager {
4041
new Map();
4142
private taskResumeHooks: Map<string, RegisteredHookFunction<AnyOnResumeHookFunction>> = new Map();
4243

44+
private globalHandleErrorHooks: Map<
45+
string,
46+
RegisteredHookFunction<AnyOnHandleErrorHookFunction>
47+
> = new Map();
48+
private taskHandleErrorHooks: Map<string, RegisteredHookFunction<AnyOnHandleErrorHookFunction>> =
49+
new Map();
50+
4351
registerGlobalStartHook(hook: RegisterHookFunctionParams<AnyOnStartHookFunction>): void {
4452
const id = generateHookId(hook);
4553

@@ -259,6 +267,39 @@ export class StandardLifecycleHooksManager implements LifecycleHooksManager {
259267
getGlobalResumeHooks(): RegisteredHookFunction<AnyOnResumeHookFunction>[] {
260268
return Array.from(this.globalResumeHooks.values());
261269
}
270+
271+
registerGlobalHandleErrorHook(
272+
hook: RegisterHookFunctionParams<AnyOnHandleErrorHookFunction>
273+
): void {
274+
const id = generateHookId(hook);
275+
276+
this.globalHandleErrorHooks.set(id, {
277+
id,
278+
name: hook.id ?? hook.fn.name ? (hook.fn.name === "" ? undefined : hook.fn.name) : undefined,
279+
fn: hook.fn,
280+
});
281+
}
282+
283+
registerTaskHandleErrorHook(
284+
taskId: string,
285+
hook: RegisterHookFunctionParams<AnyOnHandleErrorHookFunction>
286+
): void {
287+
const id = generateHookId(hook);
288+
289+
this.taskHandleErrorHooks.set(taskId, {
290+
id,
291+
name: hook.id ?? hook.fn.name ? (hook.fn.name === "" ? undefined : hook.fn.name) : undefined,
292+
fn: hook.fn,
293+
});
294+
}
295+
296+
getTaskHandleErrorHook(taskId: string): AnyOnHandleErrorHookFunction | undefined {
297+
return this.taskHandleErrorHooks.get(taskId)?.fn;
298+
}
299+
300+
getGlobalHandleErrorHooks(): RegisteredHookFunction<AnyOnHandleErrorHookFunction>[] {
301+
return Array.from(this.globalHandleErrorHooks.values());
302+
}
262303
}
263304

264305
export class NoopLifecycleHooksManager implements LifecycleHooksManager {
@@ -394,6 +435,27 @@ export class NoopLifecycleHooksManager implements LifecycleHooksManager {
394435
getGlobalResumeHooks(): RegisteredHookFunction<AnyOnResumeHookFunction>[] {
395436
return [];
396437
}
438+
439+
registerGlobalHandleErrorHook(
440+
hook: RegisterHookFunctionParams<AnyOnHandleErrorHookFunction>
441+
): void {
442+
// Noop
443+
}
444+
445+
registerTaskHandleErrorHook(
446+
taskId: string,
447+
hook: RegisterHookFunctionParams<AnyOnHandleErrorHookFunction>
448+
): void {
449+
// Noop
450+
}
451+
452+
getTaskHandleErrorHook(taskId: string): AnyOnHandleErrorHookFunction | undefined {
453+
return undefined;
454+
}
455+
456+
getGlobalHandleErrorHooks(): RegisteredHookFunction<AnyOnHandleErrorHookFunction>[] {
457+
return [];
458+
}
397459
}
398460

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

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,23 @@ export type RegisteredHookFunction<THookFunction extends (params: any) => any> =
119119
fn: THookFunction;
120120
};
121121

122+
export type TaskHandleErrorHookParams<TPayload = unknown> = {
123+
ctx: TaskRunContext;
124+
payload: TPayload;
125+
task: string;
126+
error: unknown;
127+
retry?: RetryOptions;
128+
retryAt?: Date;
129+
retryDelayInMs?: number;
130+
signal?: AbortSignal;
131+
};
132+
133+
export type OnHandleErrorHookFunction<TPayload> = (
134+
params: TaskHandleErrorHookParams<TPayload>
135+
) => HandleErrorResult;
136+
137+
export type AnyOnHandleErrorHookFunction = OnHandleErrorHookFunction<unknown>;
138+
122139
export interface LifecycleHooksManager {
123140
registerGlobalInitHook(hook: RegisterHookFunctionParams<AnyOnInitHookFunction>): void;
124141
registerTaskInitHook(
@@ -169,4 +186,13 @@ export interface LifecycleHooksManager {
169186
): void;
170187
getTaskResumeHook(taskId: string): AnyOnResumeHookFunction | undefined;
171188
getGlobalResumeHooks(): RegisteredHookFunction<AnyOnResumeHookFunction>[];
189+
registerGlobalHandleErrorHook(
190+
hook: RegisterHookFunctionParams<AnyOnHandleErrorHookFunction>
191+
): void;
192+
registerTaskHandleErrorHook(
193+
taskId: string,
194+
hook: RegisterHookFunctionParams<AnyOnHandleErrorHookFunction>
195+
): void;
196+
getTaskHandleErrorHook(taskId: string): AnyOnHandleErrorHookFunction | undefined;
197+
getGlobalHandleErrorHooks(): RegisteredHookFunction<AnyOnHandleErrorHookFunction>[];
172198
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
type TaskCompleteResult,
1313
type AnyOnWaitHookFunction,
1414
type AnyOnResumeHookFunction,
15+
type AnyOnHandleErrorHookFunction,
1516
} from "@trigger.dev/core/v3";
1617

1718
export type {
@@ -27,6 +28,7 @@ export type {
2728
TaskCompleteResult,
2829
AnyOnWaitHookFunction,
2930
AnyOnResumeHookFunction,
31+
AnyOnHandleErrorHookFunction,
3032
};
3133

3234
export function onInit(name: string, fn: AnyOnInitHookFunction): void;
@@ -106,3 +108,15 @@ export function onResume(
106108
fn: typeof fnOrName === "function" ? fnOrName : fn!,
107109
});
108110
}
111+
112+
export function onHandleError(name: string, fn: AnyOnHandleErrorHookFunction): void;
113+
export function onHandleError(fn: AnyOnHandleErrorHookFunction): void;
114+
export function onHandleError(
115+
fnOrName: string | AnyOnHandleErrorHookFunction,
116+
fn?: AnyOnHandleErrorHookFunction
117+
): void {
118+
lifecycleHooks.registerGlobalHandleErrorHook({
119+
id: typeof fnOrName === "string" ? fnOrName : fnOrName.name ? fnOrName.name : undefined,
120+
fn: typeof fnOrName === "function" ? fnOrName : fn!,
121+
});
122+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,5 @@ export const tasks = {
8686
onComplete,
8787
onWait,
8888
onResume,
89+
onHandleError,
8990
};

0 commit comments

Comments
 (0)