Skip to content

Commit 1c7b729

Browse files
committed
Add middleware types
1 parent fc029ce commit 1c7b729

File tree

4 files changed

+93
-0
lines changed

4 files changed

+93
-0
lines changed

packages/core/src/v3/lifecycle-hooks-api.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ export type {
2525
TaskCatchErrorHookParams,
2626
AnyOnCatchErrorHookFunction,
2727
TaskCompleteResult,
28+
TaskMiddlewareHookParams,
29+
AnyOnMiddlewareHookFunction,
30+
OnMiddlewareHookFunction,
2831
} from "./lifecycleHooks/types.js";
2932

3033
export * as lifecycleHooksAdapters from "./lifecycleHooks/adapters.js";

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

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

1011
export function createInitHookAdapter<TPayload>(
@@ -76,3 +77,16 @@ export function createHandleErrorHookAdapter<TPayload>(
7677
return await fn(params.payload as unknown as TPayload, params.error, params);
7778
};
7879
}
80+
81+
export function createMiddlewareHookAdapter<TPayload>(
82+
fn: NonNullable<TaskOptions<string, TPayload, unknown, any>["middleware"]>
83+
): AnyOnMiddlewareHookFunction {
84+
return async (params) => {
85+
const { payload, next, ...paramsWithoutPayloadAndNext } = params;
86+
87+
return await fn(payload as unknown as TPayload, {
88+
...paramsWithoutPayloadAndNext,
89+
next,
90+
});
91+
};
92+
}

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

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
AnyOnWaitHookFunction,
1111
AnyOnResumeHookFunction,
1212
AnyOnCatchErrorHookFunction,
13+
AnyOnMiddlewareHookFunction,
1314
} from "./types.js";
1415

1516
export class StandardLifecycleHooksManager implements LifecycleHooksManager {
@@ -46,6 +47,11 @@ export class StandardLifecycleHooksManager implements LifecycleHooksManager {
4647
private taskCatchErrorHooks: Map<string, RegisteredHookFunction<AnyOnCatchErrorHookFunction>> =
4748
new Map();
4849

50+
private globalMiddlewareHooks: Map<string, RegisteredHookFunction<AnyOnMiddlewareHookFunction>> =
51+
new Map();
52+
private taskMiddlewareHooks: Map<string, RegisteredHookFunction<AnyOnMiddlewareHookFunction>> =
53+
new Map();
54+
4955
registerGlobalStartHook(hook: RegisterHookFunctionParams<AnyOnStartHookFunction>): void {
5056
const id = generateHookId(hook);
5157

@@ -298,6 +304,39 @@ export class StandardLifecycleHooksManager implements LifecycleHooksManager {
298304
getGlobalCatchErrorHooks(): RegisteredHookFunction<AnyOnCatchErrorHookFunction>[] {
299305
return Array.from(this.globalCatchErrorHooks.values());
300306
}
307+
308+
registerGlobalMiddlewareHook(
309+
hook: RegisterHookFunctionParams<AnyOnMiddlewareHookFunction>
310+
): void {
311+
const id = generateHookId(hook);
312+
313+
this.globalMiddlewareHooks.set(id, {
314+
id,
315+
name: hook.id ?? hook.fn.name ? (hook.fn.name === "" ? undefined : hook.fn.name) : undefined,
316+
fn: hook.fn,
317+
});
318+
}
319+
320+
registerTaskMiddlewareHook(
321+
taskId: string,
322+
hook: RegisterHookFunctionParams<AnyOnMiddlewareHookFunction>
323+
): void {
324+
const id = generateHookId(hook);
325+
326+
this.taskMiddlewareHooks.set(taskId, {
327+
id,
328+
name: hook.id ?? hook.fn.name ? (hook.fn.name === "" ? undefined : hook.fn.name) : undefined,
329+
fn: hook.fn,
330+
});
331+
}
332+
333+
getTaskMiddlewareHook(taskId: string): AnyOnMiddlewareHookFunction | undefined {
334+
return this.taskMiddlewareHooks.get(taskId)?.fn;
335+
}
336+
337+
getGlobalMiddlewareHooks(): RegisteredHookFunction<AnyOnMiddlewareHookFunction>[] {
338+
return Array.from(this.globalMiddlewareHooks.values());
339+
}
301340
}
302341

303342
export class NoopLifecycleHooksManager implements LifecycleHooksManager {
@@ -449,6 +488,22 @@ export class NoopLifecycleHooksManager implements LifecycleHooksManager {
449488
getGlobalCatchErrorHooks(): [] {
450489
return [];
451490
}
491+
492+
registerGlobalMiddlewareHook(): void {
493+
// Noop
494+
}
495+
496+
registerTaskMiddlewareHook(): void {
497+
// Noop
498+
}
499+
500+
getTaskMiddlewareHook(): undefined {
501+
return undefined;
502+
}
503+
504+
getGlobalMiddlewareHooks(): [] {
505+
return [];
506+
}
452507
}
453508

454509
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
@@ -137,6 +137,20 @@ export type OnCatchErrorHookFunction<TPayload> = (
137137

138138
export type AnyOnCatchErrorHookFunction = OnCatchErrorHookFunction<unknown>;
139139

140+
export type TaskMiddlewareHookParams<TPayload = unknown> = {
141+
ctx: TaskRunContext;
142+
payload: TPayload;
143+
task: string;
144+
signal?: AbortSignal;
145+
next: () => Promise<void>;
146+
};
147+
148+
export type OnMiddlewareHookFunction<TPayload> = (
149+
params: TaskMiddlewareHookParams<TPayload>
150+
) => Promise<void>;
151+
152+
export type AnyOnMiddlewareHookFunction = OnMiddlewareHookFunction<unknown>;
153+
140154
export interface LifecycleHooksManager {
141155
registerGlobalInitHook(hook: RegisterHookFunctionParams<AnyOnInitHookFunction>): void;
142156
registerTaskInitHook(
@@ -194,4 +208,11 @@ export interface LifecycleHooksManager {
194208
): void;
195209
getTaskCatchErrorHook(taskId: string): AnyOnCatchErrorHookFunction | undefined;
196210
getGlobalCatchErrorHooks(): RegisteredHookFunction<AnyOnCatchErrorHookFunction>[];
211+
registerGlobalMiddlewareHook(hook: RegisterHookFunctionParams<AnyOnMiddlewareHookFunction>): void;
212+
registerTaskMiddlewareHook(
213+
taskId: string,
214+
hook: RegisterHookFunctionParams<AnyOnMiddlewareHookFunction>
215+
): void;
216+
getTaskMiddlewareHook(taskId: string): AnyOnMiddlewareHookFunction | undefined;
217+
getGlobalMiddlewareHooks(): RegisteredHookFunction<AnyOnMiddlewareHookFunction>[];
197218
}

0 commit comments

Comments
 (0)