@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 1.15 kB
JavaScript
import{getRegisteredActionExtensions,reset as resetActionRegistrations}from"./ActionRegistration.js";import{Context}from"./Context.js";let actionRegistryInstance;export class ActionRegistry{actionsById;constructor(){this.actionsById=new Map,this.registerActions()}static instance(t={forceNew:null}){const{forceNew:n}=t;return actionRegistryInstance&&!n||(actionRegistryInstance=new ActionRegistry),actionRegistryInstance}static removeInstance(){actionRegistryInstance=void 0}static reset(){ActionRegistry.removeInstance(),resetActionRegistrations()}registerActions(){for(const t of getRegisteredActionExtensions())this.actionsById.set(t.id(),t),t.canInstantiate()||t.setEnabled(!1)}availableActions(){return this.applicableActions([...this.actionsById.keys()],Context.instance())}actions(){return[...this.actionsById.values()]}applicableActions(t,n){const e=[];for(const i of t){const t=this.actionsById.get(i);t&&t.enabled()&&s(t,n.flavors())&&e.push(t)}return e;function s(t,n){const e=t.contextTypes();if(!e)return!0;for(let t=0;t<e.length;++t){const s=e[t];if(Boolean(s)&&n.has(s))return!0}return!1}}action(t){return this.actionsById.get(t)||null}}