Skip to content

Commit 06f6a04

Browse files
committed
onStart
1 parent be676fd commit 06f6a04

File tree

5 files changed

+113
-1
lines changed

5 files changed

+113
-1
lines changed

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
AnyOnInitHookFunction,
44
AnyOnStartHookFunction,
55
AnyOnFailureHookFunction,
6+
AnyOnSuccessHookFunction,
67
} from "./types.js";
78

89
export function createInitHookAdapter<TPayload>(
@@ -47,3 +48,22 @@ export function createFailureHookAdapter<TPayload>(
4748
return await fn(params.payload as unknown as TPayload, params.error, paramsWithoutPayload);
4849
};
4950
}
51+
52+
export function createSuccessHookAdapter<TPayload, TOutput>(
53+
fn: NonNullable<TaskOptions<string, TPayload, TOutput, any>["onSuccess"]>
54+
): AnyOnSuccessHookFunction {
55+
return async (params) => {
56+
const paramsWithoutPayload = {
57+
...params,
58+
};
59+
60+
delete paramsWithoutPayload["payload"];
61+
delete paramsWithoutPayload["output"];
62+
63+
return await fn(
64+
params.payload as unknown as TPayload,
65+
params.output as unknown as TOutput,
66+
paramsWithoutPayload
67+
);
68+
};
69+
}

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

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
RegisteredHookFunction,
66
RegisterHookFunctionParams,
77
AnyOnFailureHookFunction,
8+
AnyOnSuccessHookFunction,
89
} from "./types.js";
910

1011
export class StandardLifecycleHooksManager implements LifecycleHooksManager {
@@ -19,6 +20,11 @@ export class StandardLifecycleHooksManager implements LifecycleHooksManager {
1920
private taskFailureHooks: Map<string, RegisteredHookFunction<AnyOnFailureHookFunction>> =
2021
new Map();
2122

23+
private globalSuccessHooks: Map<string, RegisteredHookFunction<AnyOnSuccessHookFunction>> =
24+
new Map();
25+
private taskSuccessHooks: Map<string, RegisteredHookFunction<AnyOnSuccessHookFunction>> =
26+
new Map();
27+
2228
registerGlobalStartHook(hook: RegisterHookFunctionParams<AnyOnStartHookFunction>): void {
2329
const id = generateHookId(hook);
2430

@@ -114,6 +120,37 @@ export class StandardLifecycleHooksManager implements LifecycleHooksManager {
114120
getGlobalFailureHooks(): RegisteredHookFunction<AnyOnFailureHookFunction>[] {
115121
return Array.from(this.globalFailureHooks.values());
116122
}
123+
124+
registerGlobalSuccessHook(hook: RegisterHookFunctionParams<AnyOnSuccessHookFunction>): void {
125+
const id = generateHookId(hook);
126+
127+
this.globalSuccessHooks.set(id, {
128+
id,
129+
name: hook.id ?? hook.fn.name ? (hook.fn.name === "" ? undefined : hook.fn.name) : undefined,
130+
fn: hook.fn,
131+
});
132+
}
133+
134+
registerTaskSuccessHook(
135+
taskId: string,
136+
hook: RegisterHookFunctionParams<AnyOnSuccessHookFunction>
137+
): void {
138+
const id = generateHookId(hook);
139+
140+
this.taskSuccessHooks.set(taskId, {
141+
id,
142+
name: hook.id ?? hook.fn.name ? (hook.fn.name === "" ? undefined : hook.fn.name) : undefined,
143+
fn: hook.fn,
144+
});
145+
}
146+
147+
getTaskSuccessHook(taskId: string): AnyOnSuccessHookFunction | undefined {
148+
return this.taskSuccessHooks.get(taskId)?.fn;
149+
}
150+
151+
getGlobalSuccessHooks(): RegisteredHookFunction<AnyOnSuccessHookFunction>[] {
152+
return Array.from(this.globalSuccessHooks.values());
153+
}
117154
}
118155

119156
export class NoopLifecycleHooksManager implements LifecycleHooksManager {
@@ -173,6 +210,25 @@ export class NoopLifecycleHooksManager implements LifecycleHooksManager {
173210
getGlobalFailureHooks(): RegisteredHookFunction<AnyOnFailureHookFunction>[] {
174211
return [];
175212
}
213+
214+
registerGlobalSuccessHook(hook: RegisterHookFunctionParams<AnyOnSuccessHookFunction>): void {
215+
// Noop
216+
}
217+
218+
registerTaskSuccessHook(
219+
taskId: string,
220+
hook: RegisterHookFunctionParams<AnyOnSuccessHookFunction>
221+
): void {
222+
// Noop
223+
}
224+
225+
getTaskSuccessHook(taskId: string): AnyOnSuccessHookFunction | undefined {
226+
return undefined;
227+
}
228+
229+
getGlobalSuccessHooks(): RegisteredHookFunction<AnyOnSuccessHookFunction>[] {
230+
return [];
231+
}
176232
}
177233

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

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,20 @@ export type OnFailureHookFunction<TPayload> = (
4040

4141
export type AnyOnFailureHookFunction = OnFailureHookFunction<unknown>;
4242

43+
export type TaskSuccessHookParams<TPayload = unknown, TOutput = unknown> = {
44+
ctx: TaskRunContext;
45+
payload: TPayload;
46+
task: string;
47+
output: TOutput;
48+
signal?: AbortSignal;
49+
};
50+
51+
export type OnSuccessHookFunction<TPayload, TOutput> = (
52+
params: TaskSuccessHookParams<TPayload, TOutput>
53+
) => undefined | void | Promise<undefined | void>;
54+
55+
export type AnyOnSuccessHookFunction = OnSuccessHookFunction<unknown, unknown>;
56+
4357
export type RegisterHookFunctionParams<THookFunction extends (params: any) => any> = {
4458
id?: string;
4559
fn: THookFunction;
@@ -73,4 +87,11 @@ export interface LifecycleHooksManager {
7387
): void;
7488
getTaskFailureHook(taskId: string): AnyOnFailureHookFunction | undefined;
7589
getGlobalFailureHooks(): RegisteredHookFunction<AnyOnFailureHookFunction>[];
90+
registerGlobalSuccessHook(hook: RegisterHookFunctionParams<AnyOnSuccessHookFunction>): void;
91+
registerTaskSuccessHook(
92+
taskId: string,
93+
hook: RegisterHookFunctionParams<AnyOnSuccessHookFunction>
94+
): void;
95+
getTaskSuccessHook(taskId: string): AnyOnSuccessHookFunction | undefined;
96+
getGlobalSuccessHooks(): RegisteredHookFunction<AnyOnSuccessHookFunction>[];
7697
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
type TaskStartHookParams,
88
type OnStartHookFunction,
99
type AnyOnFailureHookFunction,
10+
type AnyOnSuccessHookFunction,
1011
} from "@trigger.dev/core/v3";
1112

1213
export type {
@@ -17,6 +18,7 @@ export type {
1718
TaskStartHookParams,
1819
OnStartHookFunction,
1920
AnyOnFailureHookFunction,
21+
AnyOnSuccessHookFunction,
2022
};
2123

2224
export function onInit(name: string, fn: AnyOnInitHookFunction): void;
@@ -51,3 +53,15 @@ export function onFailure(
5153
fn: typeof fnOrName === "function" ? fnOrName : fn!,
5254
});
5355
}
56+
57+
export function onSuccess(name: string, fn: AnyOnSuccessHookFunction): void;
58+
export function onSuccess(fn: AnyOnSuccessHookFunction): void;
59+
export function onSuccess(
60+
fnOrName: string | AnyOnSuccessHookFunction,
61+
fn?: AnyOnSuccessHookFunction
62+
): void {
63+
lifecycleHooks.registerGlobalSuccessHook({
64+
id: typeof fnOrName === "string" ? fnOrName : fnOrName.name ? fnOrName.name : undefined,
65+
fn: typeof fnOrName === "function" ? fnOrName : fn!,
66+
});
67+
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { onInit, onStart, onFailure } from "./hooks.js";
1+
import { onInit, onStart, onFailure, onSuccess } from "./hooks.js";
22
import {
33
batchTrigger,
44
batchTriggerAndWait,
@@ -82,4 +82,5 @@ export const tasks = {
8282
init: onInit,
8383
onStart,
8484
onFailure,
85+
onSuccess,
8586
};

0 commit comments

Comments
 (0)