UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 1.18 kB
export class ObjectWrapper{listeners;addEventListener(e,t,s){this.listeners||(this.listeners=new Map);let n=this.listeners.get(e);return n||(n=new Set,this.listeners.set(e,n)),n.add({thisObject:s,listener:t}),{eventTarget:this,eventType:e,thisObject:s,listener:t}}once(e){return new Promise((t=>{const s=this.addEventListener(e,(n=>{this.removeEventListener(e,s.listener),t(n.data)}))}))}removeEventListener(e,t,s){const n=this.listeners?.get(e);if(n){for(const e of n)e.listener===t&&e.thisObject===s&&(e.disposed=!0,n.delete(e));n.size||this.listeners?.delete(e)}}hasEventListeners(e){return Boolean(this.listeners&&this.listeners.has(e))}dispatchEventToListeners(e,...[t]){const s=this.listeners?.get(e);if(!s)return;const n={data:t,source:this};for(const e of[...s])e.disposed||e.listener.call(e.thisObject,n)}}export function eventMixin(e){return class extends e{#e=new ObjectWrapper;addEventListener(e,t,s){return this.#e.addEventListener(e,t,s)}once(e){return this.#e.once(e)}removeEventListener(e,t,s){this.#e.removeEventListener(e,t,s)}hasEventListeners(e){return this.#e.hasEventListeners(e)}dispatchEventToListeners(e,...t){this.#e.dispatchEventToListeners(e,...t)}}}