UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 3.57 kB
import*as Root from"../../core/root/root.js";import*as PuppeteerService from"../../services/puppeteer/puppeteer.js";function disableLoggingForTest(){console.log=()=>{}}class ConnectionProxy{sessionId;onMessage;onDisconnect;constructor(e){this.sessionId=e,this.onMessage=null,this.onDisconnect=null}setOnMessage(e){this.onMessage=e}setOnDisconnect(e){this.onDisconnect=e}getOnDisconnect(){return this.onDisconnect}getSessionId(){return this.sessionId}sendRawMessage(e){notifyFrontendViaWorkerMessage("sendProtocolMessage",{message:e})}async disconnect(){this.onDisconnect?.("force disconnect"),this.onDisconnect=null,this.onMessage=null}}let cdpConnection,endTimespan;async function invokeLH(e,t){let n;Root.Runtime.Runtime.queryParam("isUnderTest")&&(disableLoggingForTest(),t.flags.maxWaitForLoad=2e3),self.listenForStatus((e=>{notifyFrontendViaWorkerMessage("statusUpdate",{message:e[1]})}));try{if("endTimespan"===e){if(!endTimespan)throw new Error("Cannot end a timespan before starting one");const e=await endTimespan();return endTimespan=void 0,e}const s=await fetchLocaleData(t.locales),o=t.flags;o.logLevel=o.logLevel||"info",o.channel="devtools",o.locale=s,"startTimespan"!==e&&"snapshot"!==e||(t.categoryIDs=t.categoryIDs.filter((e=>"lighthouse-plugin-publisher-ads"!==e)));const a=t.config||self.createConfig(t.categoryIDs,o.formFactor),i=t.url,{mainFrameId:r,mainTargetId:c,mainSessionId:l,targetInfos:g}=t;cdpConnection=new ConnectionProxy(l),n=await PuppeteerService.PuppeteerConnection.PuppeteerConnectionHelper.connectPuppeteerToConnection({connection:cdpConnection,mainFrameId:r,targetInfos:g,targetFilterCallback:e=>!e.url.startsWith("https://i0.devtools-frontend")&&!e.url.startsWith("devtools://")&&(e.targetId===c||e.openerId===c||"iframe"===e.type),isPageTargetCallback:e=>"page"===e.type});const{page:p}=n;if(!p)throw new Error("Could not create page handle for the target page");if("snapshot"===e)return await self.snapshot(p,{config:a,flags:o});if("startTimespan"===e){const e=await self.startTimespan(p,{config:a,flags:o});return void(endTimespan=e.endTimespan)}return await self.navigation(p,i,{config:a,flags:o})}catch(e){return{fatal:!0,message:e.message,stack:e.stack}}finally{"startTimespan"!==e&&n?.browser.disconnect()}}async function fetchLocaleData(e){const t=self.lookupLocale(e);if("en-US"!==t&&"en"!==t)try{const e=Root.Runtime.getRemoteBase();let n;n=e&&e.base?`${e.base}third_party/lighthouse/locales/${t}.json`:new URL(`../../third_party/lighthouse/locales/${t}.json`,import.meta.url).toString();const s=new Promise(((e,t)=>setTimeout((()=>t(new Error("timed out fetching locale"))),5e3))),o=await Promise.race([s,fetch(n).then((e=>e.json()))]);return self.registerLocaleData(t,o),t}catch(e){console.error(e)}}function notifyFrontendViaWorkerMessage(e,t){self.postMessage({action:e,args:t})}async function onFrontendMessage(e){const t=e.data;switch(t.action){case"startTimespan":case"endTimespan":case"snapshot":case"navigation":{const e=await invokeLH(t.action,t.args);e&&"object"==typeof e&&("report"in e&&delete e.report,"artifacts"in e&&(e.artifacts.Timing=JSON.parse(JSON.stringify(e.artifacts.Timing)))),self.postMessage({id:t.id,result:e});break}case"dispatchProtocolMessage":cdpConnection?.onMessage?.(t.args.message);break;default:throw new Error(`Unknown event: ${e.data}`)}}self.onmessage=onFrontendMessage,globalThis.global=self,globalThis.global.isVinn=!0,globalThis.global.document={},globalThis.global.document.documentElement={},globalThis.global.document.documentElement.style={WebkitAppearance:"WebkitAppearance"};