/opt/canhelp/node_modules/nanostores/lifecycle
Edit: /opt/canhelp/node_modules/nanostores/lifecycle/index.d.ts (4264B)
import type { MapStore, Store, StoreValue } from '../map/index.js'
type AtomSetPayload
= {
abort(): void
changed: undefined
newValue: StoreValue
shared: Shared
}
type MapSetPayload =
| {
abort(): void
changed: keyof StoreValue
newValue: StoreValue
shared: Shared
}
| AtomSetPayload
type AtomNotifyPayload = {
abort(): void
changed: undefined
oldValue: StoreValue
shared: Shared
}
type MapNotifyPayload =
| {
abort(): void
changed: keyof StoreValue
oldValue: StoreValue
shared: Shared
}
| AtomNotifyPayload
/**
* Add listener to store chagings.
*
* ```js
* import { onSet } from 'nanostores'
*
* onSet($store, ({ newValue, abort }) => {
* if (!validate(newValue)) {
* abort()
* }
* })
* ```
*
* You can communicate between listeners by `payload.shared`
* or cancel changes by `payload.abort()`.
*
* New value of the all store will be `payload.newValue`.
* On `MapStore#setKey()` call, changed value will be in `payload.changed`.
*
* @param $store The store to add listener.
* @param listener Event callback.
* @returns A function to remove listener.
*/
export function onSet(
$store: SomeStore,
listener: (
payload: SomeStore extends MapStore
? MapSetPayload
: AtomSetPayload
) => void
): () => void
/**
* Add listener to notifying about store changes.
*
* You can communicate between listeners by `payload.shared`
* or cancel changes by `payload.abort()`.
*
* On `MapStore#setKey()` call, changed value will be in `payload.changed`.
*
* @param $store The store to add listener.
* @param listener Event callback.
* @returns A function to remove listener.
*/
export function onNotify(
$store: SomeStore,
listener: (
payload: SomeStore extends MapStore
? MapNotifyPayload
: AtomNotifyPayload
) => void
): () => void
/**
* Add listener on first store listener.
*
* We recommend to always use `onMount` instead to prevent flickering.
* See {@link onMount} to add constructor and destructor for the store.
*
* You can communicate between listeners by `payload.shared`.
*
* @param $store The store to add listener.
* @param listener Event callback.
* @returns A function to remove listener.
*/
export function onStart(
$store: Store,
listener: (payload: { shared: Shared }) => void
): () => void
/**
* Add listener on last store listener unsubscription.
*
* We recommend to always use `onMount` instead to prevent flickering.
* See {@link onMount} to add constructor and destructor for the store.
*
* You can communicate between listeners by `payload.shared`.
*
* @param $store The store to add listener.
* @param listener Event callback.
* @returns A function to remove listener.
*/
export function onStop(
$store: Store,
listener: (payload: { shared: Shared }) => void
): () => void
export const STORE_UNMOUNT_DELAY: number
/**
* Run constructor on first store’s listener and run destructor on last listener
* unsubscription. It has a debounce to prevent flickering.
*
* A way to reduce memory and CPU usage when you do not need a store.
*
* You can communicate between listeners by `payload.shared`.
*
* ```js
* import { onMount } from 'nanostores'
*
* // Listen for URL changes on first store’s listener.
* onMount($router, () => {
* parse()
* window.addEventListener('popstate', parse)
* return () => {
* window.removeEventListener('popstate', parse)
* }
* })
* ```
*
* @param $store Store to listen.
* @param initialize Store constructor. Returns store destructor.
* @return A function to remove constructor and destructor from store.
*/
export function onMount(
$store: Store,
initialize?: (payload: { shared: Shared }) => (() => void) | void
): () => void