@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 2.68 kB
JavaScript
import*as SDK from"../../core/sdk/sdk.js";export class ExecutionContextSelector{#t;#e;#n;#o;constructor(t,e){e.addFlavorChangeListener(SDK.RuntimeModel.ExecutionContext,this.#i,this),e.addFlavorChangeListener(SDK.Target.Target,this.#r,this),t.addModelListener(SDK.RuntimeModel.RuntimeModel,SDK.RuntimeModel.Events.ExecutionContextCreated,this.#s,this),t.addModelListener(SDK.RuntimeModel.RuntimeModel,SDK.RuntimeModel.Events.ExecutionContextDestroyed,this.#a,this),t.addModelListener(SDK.RuntimeModel.RuntimeModel,SDK.RuntimeModel.Events.ExecutionContextOrderChanged,this.#d,this),this.#t=t,this.#e=e,t.observeModels(SDK.RuntimeModel.RuntimeModel,this)}modelAdded(t){queueMicrotask(function(){this.#e.flavor(SDK.Target.Target)||this.#e.setFlavor(SDK.Target.Target,t.target())}.bind(this))}modelRemoved(t){const e=this.#e.flavor(SDK.RuntimeModel.ExecutionContext);e&&e.runtimeModel===t&&this.#x();const n=this.#t.models(SDK.RuntimeModel.RuntimeModel);this.#e.flavor(SDK.Target.Target)===t.target()&&n.length&&this.#e.setFlavor(SDK.Target.Target,n[0].target())}#i({data:t}){t&&(this.#e.setFlavor(SDK.Target.Target,t.target()),this.#o||(this.#n=this.#l(t)))}#l(t){return t.isDefault?t.target().name()+":"+t.frameId:""}#r({data:t}){const e=this.#e.flavor(SDK.RuntimeModel.ExecutionContext);if(!t||e&&e.target()===t)return;const n=t.model(SDK.RuntimeModel.RuntimeModel),o=n?n.executionContexts():[];if(!o.length)return;let i=null;for(let t=0;t<o.length&&!i;++t)this.#h(o[t])&&(i=o[t]);for(let t=0;t<o.length&&!i;++t)this.#u(o[t])&&(i=o[t]);this.#o=!0,this.#e.setFlavor(SDK.RuntimeModel.ExecutionContext,i||o[0]),this.#o=!1}#h(t){return!t.target().targetInfo()?.subtype&&(!(!this.#n||this.#n!==this.#l(t))||!this.#n&&this.#u(t))}#u(t){if(!t.isDefault||!t.frameId)return!1;if(t.target().parentTarget()?.type()===SDK.Target.Type.Frame)return!1;const e=t.target().model(SDK.ResourceTreeModel.ResourceTreeModel),n=e&&e.frameForId(t.frameId);return Boolean(n?.isOutermostFrame())}#s(t){this.#c(t.data)}#a(t){const e=t.data;this.#e.flavor(SDK.RuntimeModel.ExecutionContext)===e&&this.#x()}#d(t){const e=t.data.executionContexts();for(let t=0;t<e.length&&!this.#c(e[t]);t++);}#c(t){return!(this.#e.flavor(SDK.RuntimeModel.ExecutionContext)&&!this.#h(t))&&(this.#o=!0,this.#e.setFlavor(SDK.RuntimeModel.ExecutionContext,t),this.#o=!1,!0)}#x(){const t=this.#t.models(SDK.RuntimeModel.RuntimeModel);let e=null;for(let n=0;n<t.length&&!e;++n){const o=t[n].executionContexts();for(const t of o)if(this.#u(t)){e=t;break}}if(!e)for(let n=0;n<t.length&&!e;++n){const o=t[n].executionContexts();if(o.length){e=o[0];break}}this.#o=!0,this.#e.setFlavor(SDK.RuntimeModel.ExecutionContext,e),this.#o=!1}}