@nanostores/logger
Version:
Pretty logger of lifecycles, changes and actions for Nano Stores
58 lines (51 loc) • 1.34 kB
TypeScript
import type { AnyStore, MapStore } from 'nanostores'
interface CreatorLoggerOptionsMessages {
/**
* Disable build logs.
*/
build?: boolean
}
export interface CreatorLoggerOptions {
messages?: CreatorLoggerOptionsMessages
/**
* Custom name getter for stores built with creators.
*
* @param creatorName Name of the creator.
* @param store Store built by the creator.
* @returns Custom store name.
*/
nameGetter?: (creatorName: string, store: MapStore) => string
}
interface EventBuildPayload {
creatorName: string
store: MapStore
storeName: string
}
interface BuildCreatorLoggerEvents {
build: (payload: EventBuildPayload) => void
}
/**
* Builds logger of map creators for Nano Stores.
*
* ```js
* import { buildCreatorLogger } from '@nanostores/logger'
* import { $profile } from './stores/index.js'
*
* let destroy = buildLogger($profile, 'Profile', {
* build: ({ creatorName, store, storeName }) => {
* console.log(`${storeName} was built by ${creatorName}`, store)
* }
* })
* ```
*
* @param store Creator for logging.
* @param storeName Store name.
* @param events Events to log.
* @param opts Logger options.
*/
export function buildCreatorLogger(
store: AnyStore,
storeName: string,
events: BuildCreatorLoggerEvents,
opts?: CreatorLoggerOptions
): () => void