UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 840 B
export class ExtensionEndpoint{port;nextRequestId=0;pendingRequests;constructor(e){this.port=e,this.port.onmessage=this.onResponse.bind(this),this.pendingRequests=new Map}sendRequest(e,s){return new Promise(((t,n)=>{const r=this.nextRequestId++;this.pendingRequests.set(r,{resolve:t,reject:n}),this.port.postMessage({requestId:r,method:e,parameters:s})}))}disconnect(){for(const{reject:e}of this.pendingRequests.values())e(new Error("Extension endpoint disconnected"));this.pendingRequests.clear(),this.port.close()}onResponse({data:e}){if("event"in e)return void this.handleEvent(e);const{requestId:s,result:t,error:n}=e,r=this.pendingRequests.get(s);r?(this.pendingRequests.delete(s),n?r.reject(new Error(n.message)):r.resolve(t)):console.error(`No pending request ${s}`)}handleEvent(e){throw new Error("handleEvent is not implemented")}}