import { Invalidator } from './private.js'; /** Callback to inform of a value updates. */ export type Subscriber = (value: T) => void; /** Unsubscribes from value updates. */ export type Unsubscriber = () => void; /** Callback to update a value. */ export type Updater = (value: T) => T; /** * Start and stop notification callbacks. * This function is called when the first subscriber subscribes. * * @param {(value: T) => void} set Function that sets the value of the store. * @param {(value: Updater) => void} update Function that sets the value of the store after passing the current value to the update function. * @returns {void | (() => void)} Optionally, a cleanup function that is called when the last remaining * subscriber unsubscribes. */ export type StartStopNotifier = ( set: (value: T) => void, update: (fn: Updater) => void ) => void | (() => void); /** Readable interface for subscribing. */ export interface Readable { /** * Subscribe on value changes. * @param run subscription callback * @param invalidate cleanup callback */ subscribe(this: void, run: Subscriber, invalidate?: Invalidator): Unsubscriber; } /** Writable interface for both updating and subscribing. */ export interface Writable extends Readable { /** * Set value and inform subscribers. * @param value to set */ set(this: void, value: T): void; /** * Update value using callback and inform subscribers. * @param updater callback */ update(this: void, updater: Updater): void; } export * from './index.js';