tav-ui
Version:
1 lines • 4.35 kB
Source Map (JSON)
{"version":3,"file":"mitt2.mjs","sources":["../../../../../packages/utils/mitt.ts"],"sourcesContent":["/**\n * copy to https://github.com/developit/mitt\n * Expand clear method\n */\n\nexport type EventType = string | symbol\n\n// An event handler can take an optional event argument\n// and should not return a value\nexport type Handler<T = any> = (event?: T) => void\nexport type WildcardHandler = (type: EventType, event?: any) => void\n\n// An array of all currently registered event handlers for a type\nexport type EventHandlerList = Array<Handler>\nexport type WildCardEventHandlerList = Array<WildcardHandler>\n\n// A map of event types and their corresponding event handlers.\nexport type EventHandlerMap = Map<EventType, EventHandlerList | WildCardEventHandlerList>\n\nexport interface Emitter {\n all: EventHandlerMap\n\n on<T = any>(type: EventType, handler: Handler<T>): void\n on(type: '*', handler: WildcardHandler): void\n\n off<T = any>(type: EventType, handler: Handler<T>): void\n off(type: '*', handler: WildcardHandler): void\n\n emit<T = any>(type: EventType, event?: T): void\n emit(type: '*', event?: any): void\n clear(): void\n}\n\n/**\n * Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nexport function mitt(all?: EventHandlerMap): Emitter {\n all = all || new Map()\n\n return {\n /**\n * A Map of event names to registered handler functions.\n */\n all,\n\n /**\n * Register an event handler for the given type.\n * @param {string|symbol} type Type of event to listen for, or `\"*\"` for all events\n * @param {Function} handler Function to call in response to given event\n * @memberOf mitt\n */\n on<T = any>(type: EventType, handler: Handler<T>) {\n const handlers = all?.get(type)\n const added = handlers && handlers.push(handler)\n if (!added) {\n all?.set(type, [handler])\n }\n },\n\n /**\n * Remove an event handler for the given type.\n * @param {string|symbol} type Type of event to unregister `handler` from, or `\"*\"`\n * @param {Function} handler Handler function to remove\n * @memberOf mitt\n */\n off<T = any>(type: EventType, handler: Handler<T>) {\n const handlers = all?.get(type)\n if (handlers) {\n handlers.splice(handlers.indexOf(handler) >>> 0, 1)\n }\n },\n\n /**\n * Invoke all handlers for the given type.\n * If present, `\"*\"` handlers are invoked after type-matched handlers.\n *\n * Note: Manually firing \"*\" handlers is not supported.\n *\n * @param {string|symbol} type The event type to invoke\n * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n * @memberOf mitt\n */\n emit<T = any>(type: EventType, evt: T) {\n ;((all?.get(type) || []) as EventHandlerList).slice().forEach((handler) => {\n handler(evt)\n })\n ;((all?.get('*') || []) as WildCardEventHandlerList).slice().forEach((handler) => {\n handler(type, evt)\n })\n },\n\n /**\n * Clear all\n */\n clear() {\n this.all.clear()\n },\n }\n}\n"],"names":[],"mappings":"AAAO,SAAS,IAAI,CAAC,GAAG,EAAE;AAC1B,EAAE,GAAG,GAAG,GAAG,oBAAoB,IAAI,GAAG,EAAE,CAAC;AACzC,EAAE,OAAO;AACT,IAAI,GAAG;AACP,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE;AACtB,MAAM,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AACtC,MAAM,MAAM,KAAK,GAAG,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvD,MAAM,IAAI,CAAC,KAAK,EAAE;AAClB,QAAQ,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AAClC,OAAO;AACP,KAAK;AACL,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE;AACvB,MAAM,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AACtC,MAAM,IAAI,QAAQ,EAAE;AACpB,QAAQ,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5D,OAAO;AACP,KAAK;AACL,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;AACpB,MAAM,CAAC;AACP,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK;AAC1D,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC;AACrB,OAAO,CAAC,CAAC;AACT,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK;AACzD,QAAQ,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC3B,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,KAAK,GAAG;AACZ,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;AACvB,KAAK;AACL,GAAG,CAAC;AACJ;;;;"}