import type { Hooks as Service } from '@roots/bud-framework'; import { Bud } from '@roots/bud-framework/bud'; import { Service as Base } from '@roots/bud-framework/service'; import { AsyncHooks } from './async/async.js'; import { EventHooks } from './event/event.js'; import { SyncHooks } from './sync/sync.js'; /** * Hooks and events registry * * @remarks * Supports async and sync value hooks as well as asyncronous events. * * @example * Add a new entry to the `webpack.externals` configuration: * * ```ts * hooks.on( * 'build.externals', * externals => ({ * ...externals, * $: 'jquery', * }), * ) * ``` * * @example * Change the `webpack.output.filename` format: * * ```ts * hooks.on( * 'build.output.filename', * () => '[name].[hash:4]', * ) * ``` * * @example * Filter a value through any registered hooks: * * ```ts * hooks.filter('build.output.filename', DEFAULT_VALUE) * ``` * * @example * Filter an async value through any registered hooks: * * ```ts * await hooks.filterAsync('my-event-name', async () => DEFAULT_VALUE) * ``` */ export declare class Hooks extends Base implements Service { action: EventHooks['set']; async: AsyncHooks['set']; asyncStore: AsyncHooks; events: EventHooks; filter: SyncHooks['get']; filterAsync: AsyncHooks['get']; fire: EventHooks['get']; fromAsyncMap: AsyncHooks['setRecords']; fromMap: SyncHooks['setRecords']; hasAsyncHook: AsyncHooks['has']; hasEvent: EventHooks['has']; hasSyncHook: SyncHooks['has']; on: SyncHooks[`set`]; syncStore: SyncHooks; constructor(app: () => Bud); }