@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 4.67 kB
JavaScript
import*as Common from"../common/common.js";import*as Host from"../host/host.js";import{ParallelConnection}from"./Connections.js";import{Capability,Type}from"./Target.js";import{SDKModel}from"./SDKModel.js";import{Events as TargetManagerEvents,TargetManager}from"./TargetManager.js";import{ResourceTreeModel}from"./ResourceTreeModel.js";export class ChildTargetManager extends SDKModel{#e;#t;#a;#r=new Map;#n=new Map;#s=new Map;#o=new Map;#i=null;constructor(e){super(e),this.#e=e.targetManager(),this.#t=e,this.#a=e.targetAgent(),e.registerTargetDispatcher(this);const t=this.#e.browserTarget();t?t!==e&&t.targetAgent().invoke_autoAttachRelated({targetId:e.id(),waitForDebuggerOnStart:!0}):this.#a.invoke_setAutoAttach({autoAttach:!0,waitForDebuggerOnStart:!0,flatten:!0}),e.parentTarget()?.type()===Type.Frame||Host.InspectorFrontendHost.isUnderTest()||(this.#a.invoke_setDiscoverTargets({discover:!0}),this.#a.invoke_setRemoteLocations({locations:[{host:"localhost",port:9229}]}))}static install(e){ChildTargetManager.attachCallback=e,SDKModel.register(ChildTargetManager,{capabilities:Capability.Target,autostart:!0})}childTargets(){return Array.from(this.#n.values())}async suspendModel(){await this.#a.invoke_setAutoAttach({autoAttach:!0,waitForDebuggerOnStart:!1,flatten:!0})}async resumeModel(){await this.#a.invoke_setAutoAttach({autoAttach:!0,waitForDebuggerOnStart:!0,flatten:!0})}dispose(){for(const e of this.#n.keys())this.detachedFromTarget({sessionId:e,targetId:void 0})}targetCreated({targetInfo:e}){this.#r.set(e.targetId,e),this.fireAvailableTargetsChanged(),this.dispatchEventToListeners(Events.TargetCreated,e)}targetInfoChanged({targetInfo:e}){this.#r.set(e.targetId,e);const t=this.#s.get(e.targetId);if(t)if("prerender"!==t.targetInfo()?.subtype||e.subtype)t.updateTargetInfo(e);else{const a=t.model(ResourceTreeModel);t.updateTargetInfo(e),a&&a.mainFrame&&a.primaryPageChanged(a.mainFrame,"Activation")}this.fireAvailableTargetsChanged(),this.dispatchEventToListeners(Events.TargetInfoChanged,e)}targetDestroyed({targetId:e}){this.#r.delete(e),this.fireAvailableTargetsChanged(),this.dispatchEventToListeners(Events.TargetDestroyed,e)}targetCrashed({targetId:e,status:t,errorCode:a}){}fireAvailableTargetsChanged(){TargetManager.instance().dispatchEventToListeners(TargetManagerEvents.AvailableTargetsChanged,[...this.#r.values()])}async getParentTargetId(){return this.#i||(this.#i=(await this.#t.targetAgent().invoke_getTargetInfo({})).targetInfo.targetId),this.#i}async attachedToTarget({sessionId:e,targetInfo:t,waitingForDebugger:a}){if(this.#i===t.targetId)return;let r=Type.Browser,n="";if("worker"===t.type&&t.title&&t.title!==t.url)n=t.title;else if(!["page","iframe","webview"].includes(t.type)){if(["^chrome://print/$","^chrome://file-manager/","^chrome://feedback/","^chrome://.*\\.top-chrome/$","^devtools://"].some((e=>t.url.match(e))))r=Type.Frame;else{const e=Common.ParsedURL.ParsedURL.fromString(t.url);n=e?e.lastPathComponentWithFragment():"#"+ ++ChildTargetManager.lastAnonymousTargetId}}"iframe"===t.type||"webview"===t.type||"background_page"===t.type||"app"===t.type||"popup_page"===t.type||"page"===t.type?r=Type.Frame:"worker"===t.type?r=Type.Worker:"shared_worker"===t.type?r=Type.SharedWorker:"service_worker"===t.type?r=Type.ServiceWorker:"auction_worklet"===t.type&&(r=Type.AuctionWorklet);const s=this.#e.createTarget(t.targetId,n,r,this.#t,e,void 0,void 0,t);this.#n.set(e,s),this.#s.set(s.id(),s),ChildTargetManager.attachCallback&&await ChildTargetManager.attachCallback({target:s,waitingForDebugger:a}),a&&s.runtimeAgent().invoke_runIfWaitingForDebugger()}detachedFromTarget({sessionId:e}){if(this.#o.has(e))this.#o.delete(e);else{const t=this.#n.get(e);t&&(t.dispose("target terminated"),this.#n.delete(e),this.#s.delete(t.id()))}}receivedMessageFromTarget({}){}async createParallelConnection(e){const t=await this.getParentTargetId(),{connection:a,sessionId:r}=await this.createParallelConnectionAndSessionForTarget(this.#t,t);return a.setOnMessage(e),this.#o.set(r,a),{connection:a,sessionId:r}}async createParallelConnectionAndSessionForTarget(e,t){const a=e.targetAgent(),r=e.router(),n=(await a.invoke_attachToTarget({targetId:t,flatten:!0})).sessionId,s=new ParallelConnection(r.connection(),n);return r.registerSession(e,n,s),s.setOnDisconnect((()=>{r.unregisterSession(n),a.invoke_detachFromTarget({sessionId:n})})),{connection:s,sessionId:n}}targetInfos(){return Array.from(this.#r.values())}static lastAnonymousTargetId=0;static attachCallback}export var Events;!function(e){e.TargetCreated="TargetCreated",e.TargetDestroyed="TargetDestroyed",e.TargetInfoChanged="TargetInfoChanged"}(Events||(Events={}));