/// declare module '@ioc:Adonis/Core/Event' { import type { LucidRow, ModelQueryBuilderContract, LucidModel, EventsList as Hooks } from '@ioc:Adonis/Lucid/Orm'; import type { SimplePaginatorContract } from '@ioc:Adonis/Lucid/Database'; type ObserverEventName = `observer:${Event}`; type Data = Type extends ObserverEventName<'beforeFetch'> | ObserverEventName<'beforeFind'> ? ModelQueryBuilderContract : Type extends ObserverEventName<'beforePaginate'> ? [ModelQueryBuilderContract, ModelQueryBuilderContract] : Type extends ObserverEventName<'afterPaginate'> ? SimplePaginatorContract : Type extends ObserverEventName<'afterFetch'> ? Array : LucidRow; type Payload = { type: Type; data: Data; observer: string; isTransaction: Type extends ObserverEventName<'afterPaginate'> ? false : boolean; }; type BeforeHooksList = ObserverEventName<`before${Capitalize}`>; type AfterHooksList = ObserverEventName<`after${Capitalize}`>; type HooksList = { [Key in BeforeHooksList]: Payload; } & { [Key in AfterHooksList]: Payload; }; interface EventsList extends HooksList { } }