import type { Unsubscriber } from './types.js'; export type SignalSubscriber = (...args: any[]) => any; export type ErrorSubscriber = (error: Error) => any; export type { Unsubscriber }; type Args = T extends (...args: infer A) => any ? A : never; export type Signal = { (subscriber: T): Unsubscriber; error: (errorListener: ErrorSubscriber) => Unsubscriber; emit: (...args: Args) => Promise; emitError: (error: Error) => Promise; clear: () => void; }; /** * Creates a signal, a function that can be used to subscribe to events. The signal can be called with a subscriber * function to register event listeners. It has methods for emitting events, handling errors, and managing subscriptions. * * @example * const onLoad = signal<(data: string) => void>(); * * // Subscribe to data * onLoad((data) => console.log('loaded', data)); * * // Subscribe to errors * onLoad.error((error) => console.error('error', error)); * * // Emit data to subscribers * await onLoad.emit('data'); // logs 'loaded data' * * // Emit an error to error listeners * await onLoad.emitError(new Error('something failed')); * * // Clear all subscribers * onLoad.clear(); */ export declare function signal(): Signal;