UNPKG

@cloudcome/utils-vue

Version:
1 lines 2.33 kB
{"version":3,"file":"event.mjs","sources":["../src/event.ts"],"sourcesContent":["import { Emitter, type EmitterListener, type EmitterMap } from '@cloudcome/utils-core/emitter';\nimport { onBeforeMount, onBeforeUnmount, onMounted, onUnmounted } from 'vue';\n\nexport type EventEmitter = {\n on: (event: string, listener: (...payloads: unknown[]) => unknown) => unknown;\n off: (event: string, listener: (...payloads: unknown[]) => unknown) => unknown;\n emit: (event: string, ...payloads: unknown[]) => unknown;\n};\n\nexport type CreateEventCenterOptions = {\n emitter?: EventEmitter;\n stage?: 'mount' | 'mounted';\n};\n\nexport function createEventHook<E extends EmitterMap>(options: CreateEventCenterOptions = {}) {\n const emitter = options.emitter || new Emitter();\n\n const on = <K extends keyof E>(event: K, listener: EmitterListener<E, K>) => {\n // @ts-ignore\n emitter.on(event as string, listener);\n };\n\n const off = <K extends keyof E>(event: K, listener: EmitterListener<E, K>) => {\n // @ts-ignore\n emitter.off(event as string, listener);\n };\n\n const emit = <K extends keyof E>(event: K, ...payloads: E[K]) => {\n emitter.emit(event as string, ...payloads);\n };\n\n const useEvent = <K extends keyof E>(event: K, fn: (...payloads: E[K]) => unknown) => {\n if (options.stage === 'mounted') {\n onMounted(() => {\n on(event, fn);\n });\n onUnmounted(() => {\n off(event, fn);\n });\n } else {\n onBeforeMount(() => {\n on(event, fn);\n });\n onBeforeUnmount(() => {\n off(event, fn);\n });\n }\n };\n\n return { on, off, emit, useEvent };\n}\n"],"names":[],"mappings":";;AAcgB,SAAA,gBAAsC,UAAoC,IAAI;AAC5F,QAAM,UAAU,QAAQ,WAAW,IAAI,QAAQ;AAEzC,QAAA,KAAK,CAAoB,OAAU,aAAoC;AAEnE,YAAA,GAAG,OAAiB,QAAQ;AAAA,EACtC;AAEM,QAAA,MAAM,CAAoB,OAAU,aAAoC;AAEpE,YAAA,IAAI,OAAiB,QAAQ;AAAA,EACvC;AAEM,QAAA,OAAO,CAAoB,UAAa,aAAmB;AACvD,YAAA,KAAK,OAAiB,GAAG,QAAQ;AAAA,EAC3C;AAEM,QAAA,WAAW,CAAoB,OAAU,OAAuC;AAChF,QAAA,QAAQ,UAAU,WAAW;AAC/B,gBAAU,MAAM;AACd,WAAG,OAAO,EAAE;AAAA,MAAA,CACb;AACD,kBAAY,MAAM;AAChB,YAAI,OAAO,EAAE;AAAA,MAAA,CACd;AAAA,IAAA,OACI;AACL,oBAAc,MAAM;AAClB,WAAG,OAAO,EAAE;AAAA,MAAA,CACb;AACD,sBAAgB,MAAM;AACpB,YAAI,OAAO,EAAE;AAAA,MAAA,CACd;AAAA,IAAA;AAAA,EAEL;AAEA,SAAO,EAAE,IAAI,KAAK,MAAM,SAAS;AACnC;"}