@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 1.2 kB
JavaScript
import*as puppeteer from"../../third_party/puppeteer/puppeteer.js";class Transport{#e;constructor(e){this.#e=e}send(e){this.#e.sendRawMessage(e)}close(){this.#e.disconnect()}set onmessage(e){this.#e.setOnMessage((n=>{const s=n;if(s.sessionId)return e(JSON.stringify({...s,sessionId:s.sessionId===this.#e.getSessionId()?void 0:s.sessionId}))}))}set onclose(e){const n=this.#e.getOnDisconnect();this.#e.setOnDisconnect((s=>{n&&n(s),e&&e()}))}}class PuppeteerConnection extends puppeteer.Connection{async onMessage(e){const n=JSON.parse(e);n.sessionId&&!this._sessions.has(n.sessionId)||super.onMessage(e)}}export class PuppeteerConnectionHelper{static async connectPuppeteerToConnection(e){const{connection:n,mainFrameId:s,targetInfos:t,targetFilterCallback:o,isPageTargetCallback:i}=e,c=new Transport(n),r=new PuppeteerConnection("",c),a=t.filter(o).map((e=>e.targetId)),p=puppeteer.Browser._create("chrome",r,[],!1,void 0,void 0,void 0,(e=>o(e._getTargetInfo())),(e=>i(e._getTargetInfo()))),[,d]=await Promise.all([Promise.all(a.map((e=>r._createSession({targetId:e},!0)))),p]);return{page:(await d.pages()).filter((e=>null!==e)).find((e=>e.mainFrame()._id===s))||null,browser:d,puppeteerConnection:r}}}