@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 1.49 kB
JavaScript
import*as Common from"../../core/common/common.js";let contextInstance;export class Context{flavorsInternal;eventDispatchers;constructor(){this.flavorsInternal=new Map,this.eventDispatchers=new Map}static instance(e={forceNew:null}){const{forceNew:t}=e;return contextInstance&&!t||(contextInstance=new Context),contextInstance}static removeInstance(){contextInstance=void 0}setFlavor(e,t){(this.flavorsInternal.get(e)||null)!==t&&(t?this.flavorsInternal.set(e,t):this.flavorsInternal.delete(e),this.dispatchFlavorChange(e,t))}dispatchFlavorChange(e,t){for(const n of getRegisteredListeners())n.contextTypes().includes(e)&&n.loadListener().then((e=>e.flavorChanged(t)));const n=this.eventDispatchers.get(e);n&&n.dispatchEventToListeners(Events.FlavorChanged,t)}addFlavorChangeListener(e,t,n){let s=this.eventDispatchers.get(e);s||(s=new Common.ObjectWrapper.ObjectWrapper,this.eventDispatchers.set(e,s)),s.addEventListener(Events.FlavorChanged,t,n)}removeFlavorChangeListener(e,t,n){const s=this.eventDispatchers.get(e);s&&(s.removeEventListener(Events.FlavorChanged,t,n),s.hasEventListeners(Events.FlavorChanged)||this.eventDispatchers.delete(e))}flavor(e){return this.flavorsInternal.get(e)||null}flavors(){return new Set(this.flavorsInternal.keys())}}var Events;!function(e){e.FlavorChanged="FlavorChanged"}(Events||(Events={}));const registeredListeners=[];export function registerListener(e){registeredListeners.push(e)}function getRegisteredListeners(){return registeredListeners}