/** export type Metadata = Record; export abstract class BaseTask< TInput extends ZodTypeAny = ZodTypeAny, TOutput extends ZodTypeAny = ZodTypeAny > { // ... private _preHooks: ((input?: types.ParsedData) => void | Promise, metadata: types.Metadata)[] = []; private _postHooks: ((result: types.ParsedData, metadata: types.Metadata) => void | Promise)[] = []; public registerPreHook(hook: (input?: types.ParsedData) => void | Promise): this { this._preHooks.push(hook); return this; } public registerPostHook(hook: (result: types.ParsedData) => void | Promise): this { this._postHooks.push(hook); return this; } public async callWithMetadata( input?: types.ParsedData, options: { dryRun?: boolean } = {} ): Promise<{result: types.ParsedData | undefined, metadata: types.Metadata}> { const metadata: types.Metadata = {}; if (options.dryRun) { return console.log( '// TODO: implement' ) } for (const hook of this._preHooks) { await hook(input); } const result = await this._call(input); for (const hook of this._postHooks) { await hook(result, metadata); } return {result, metadata}; } } **/