UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 11.1 kB
import*as Common from"../../core/common/common.js";import*as i18n from"../../core/i18n/i18n.js";import*as Platform from"../../core/platform/platform.js";import*as SDK from"../../core/sdk/sdk.js";const UIStrings={anonymous:"<anonymous>"},str_=i18n.i18n.registerUIStrings("models/logs/NetworkLog.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);let networkLogInstance;export class NetworkLog extends Common.ObjectWrapper.ObjectWrapper{requestsInternal;sentNetworkRequests;receivedNetworkResponses;requestsSet;requestsMap;pageLoadForManager;isRecording;modelListeners;initiatorData;unresolvedPreflightRequests;constructor(){super(),this.requestsInternal=[],this.sentNetworkRequests=[],this.receivedNetworkResponses=[],this.requestsSet=new Set,this.requestsMap=new Map,this.pageLoadForManager=new Map,this.isRecording=!0,this.modelListeners=new WeakMap,this.initiatorData=new WeakMap,SDK.TargetManager.TargetManager.instance().observeModels(SDK.NetworkManager.NetworkManager,this);const e=Common.Settings.Settings.instance().moduleSetting("network_log.record-log");e.addChangeListener((()=>{!Common.Settings.Settings.instance().moduleSetting("network_log.preserve-log").get()&&e.get()&&this.reset(!0),this.setIsRecording(e.get())}),this),this.unresolvedPreflightRequests=new Map}static instance(){return networkLogInstance||(networkLogInstance=new NetworkLog),networkLogInstance}static removeInstance(){networkLogInstance=void 0}modelAdded(e){const t=[];t.push(e.addEventListener(SDK.NetworkManager.Events.RequestStarted,this.onRequestStarted,this)),t.push(e.addEventListener(SDK.NetworkManager.Events.RequestUpdated,this.onRequestUpdated,this)),t.push(e.addEventListener(SDK.NetworkManager.Events.RequestRedirected,this.onRequestRedirect,this)),t.push(e.addEventListener(SDK.NetworkManager.Events.RequestFinished,this.onRequestUpdated,this)),t.push(e.addEventListener(SDK.NetworkManager.Events.MessageGenerated,this.networkMessageGenerated.bind(this,e))),t.push(e.addEventListener(SDK.NetworkManager.Events.ResponseReceived,this.onResponseReceived,this));const s=e.target().model(SDK.ResourceTreeModel.ResourceTreeModel);s&&(t.push(s.addEventListener(SDK.ResourceTreeModel.Events.WillReloadPage,this.willReloadPage,this)),t.push(s.addEventListener(SDK.ResourceTreeModel.Events.PrimaryPageChanged,this.onPrimaryPageChanged,this)),t.push(s.addEventListener(SDK.ResourceTreeModel.Events.Load,this.onLoad,this)),t.push(s.addEventListener(SDK.ResourceTreeModel.Events.DOMContentLoaded,this.onDOMContentLoaded.bind(this,s)))),this.modelListeners.set(e,t)}modelRemoved(e){this.removeNetworkManagerListeners(e)}removeNetworkManagerListeners(e){Common.EventTarget.removeEventListeners(this.modelListeners.get(e)||[])}setIsRecording(e){this.isRecording!==e&&(this.isRecording=e,e?SDK.TargetManager.TargetManager.instance().observeModels(SDK.NetworkManager.NetworkManager,this):(SDK.TargetManager.TargetManager.instance().unobserveModels(SDK.NetworkManager.NetworkManager,this),SDK.TargetManager.TargetManager.instance().models(SDK.NetworkManager.NetworkManager).forEach(this.removeNetworkManagerListeners.bind(this))))}requestForURL(e){return this.requestsInternal.find((t=>t.url()===e))||null}originalRequestForURL(e){return this.sentNetworkRequests.find((t=>t.url===e))||null}originalResponseForURL(e){return this.receivedNetworkResponses.find((t=>t.url===e))||null}requests(){return this.requestsInternal}requestByManagerAndId(e,t){for(let s=this.requestsInternal.length-1;s>=0;s--){const r=this.requestsInternal[s];if(t===r.requestId()&&e===SDK.NetworkManager.NetworkManager.forRequest(r))return r}return null}requestByManagerAndURL(e,t){for(const s of this.requestsInternal)if(t===s.url()&&e===SDK.NetworkManager.NetworkManager.forRequest(s))return s;return null}initializeInitiatorSymbolIfNeeded(e){let t=this.initiatorData.get(e);return t||(t={info:null,chain:null,request:void 0},this.initiatorData.set(e,t),t)}static initiatorInfoForRequest(e,t){const s=t||{info:null,chain:null,request:void 0};let r,n,i=SDK.NetworkRequest.InitiatorType.Other,o=Platform.DevToolsPath.EmptyUrlString,a=null,u=null,d=null;const l=e.initiator(),g=e.redirectSource();if(g)i=SDK.NetworkRequest.InitiatorType.Redirect,o=g.url();else if(l)if("parser"===l.type)i=SDK.NetworkRequest.InitiatorType.Parser,o=l.url?l.url:o,r=l.lineNumber,n=l.columnNumber;else if("script"===l.type){for(let e=l.stack;e;){const t=e.callFrames.length?e.callFrames[0]:null;if(t){i=SDK.NetworkRequest.InitiatorType.Script,o=t.url||i18nString(UIStrings.anonymous),r=t.lineNumber,n=t.columnNumber,a=t.scriptId;break}e=e.parent}!l.stack&&l.url&&(i=SDK.NetworkRequest.InitiatorType.Script,o=l.url,r=l.lineNumber),l.stack?.callFrames?.length&&(u=l.stack)}else"preload"===l.type?i=SDK.NetworkRequest.InitiatorType.Preload:"preflight"===l.type?(i=SDK.NetworkRequest.InitiatorType.Preflight,d=e.preflightInitiatorRequest()):"SignedExchange"===l.type&&(i=SDK.NetworkRequest.InitiatorType.SignedExchange,o=l.url||Platform.DevToolsPath.EmptyUrlString);return s.info={type:i,url:o,lineNumber:r,columnNumber:n,scriptId:a,stack:u,initiatorRequest:d},s.info}initiatorInfoForRequest(e){const t=this.initializeInitiatorSymbolIfNeeded(e);return t.info?t.info:NetworkLog.initiatorInfoForRequest(e,t)}initiatorGraphForRequest(e){const t=new Map,s=SDK.NetworkManager.NetworkManager.forRequest(e);for(const r of this.requestsInternal){if(s===SDK.NetworkManager.NetworkManager.forRequest(r)&&this.initiatorChain(r).has(e)){const e=this.initiatorRequest(r);e&&t.set(r,e)}}return{initiators:this.initiatorChain(e),initiated:t}}initiatorChain(e){const t=this.initializeInitiatorSymbolIfNeeded(e);let s=t.chain;if(s)return s;s=new Set;let r=e;for(;r;){const e=this.initializeInitiatorSymbolIfNeeded(r);if(e.chain){Platform.SetUtilities.addAll(s,e.chain);break}if(s.has(r))break;s.add(r),r=this.initiatorRequest(r)}return t.chain=s,s}initiatorRequest(e){const t=this.initializeInitiatorSymbolIfNeeded(e);if(void 0!==t.request)return t.request;const s=this.initiatorInfoForRequest(e).url,r=SDK.NetworkManager.NetworkManager.forRequest(e);return t.request=r?this.requestByManagerAndURL(r,s):null,t.request}willReloadPage(){Common.Settings.Settings.instance().moduleSetting("network_log.preserve-log").get()||this.reset(!0)}onPrimaryPageChanged(e){const t=e.data.frame,s=t.resourceTreeModel().target().model(SDK.NetworkManager.NetworkManager);if(!s||t.resourceTreeModel().target().parentTarget()?.type()===SDK.Target.Type.Frame)return;if(t.url!==t.unreachableUrl()&&t.url.startsWith("chrome-error://"))return;const r=Common.Settings.Settings.instance().moduleSetting("network_log.preserve-log").get(),n=this.requestsInternal,i=this.requestsInternal.filter((e=>SDK.NetworkManager.NetworkManager.forRequest(e)===s)),o=this.requestsSet;this.requestsInternal=[],this.sentNetworkRequests=[],this.receivedNetworkResponses=[],this.requestsSet=new Set,this.requestsMap.clear(),this.unresolvedPreflightRequests.clear(),this.dispatchEventToListeners(Events.Reset,{clearIfPreserved:!r});let a=null;const u=[];for(const e of i)if(e.loaderId===t.loaderId){if(!a){a=new SDK.PageLoad.PageLoad(e);let t=e.redirectSource();for(;t;)u.push(t),t=t.redirectSource()}u.push(e)}const d=[];for(const e of n){if(!e.initiatedByServiceWorker())continue;u.some((t=>t.url()===e.url()&&t.issueTime()<=e.issueTime()))&&d.push(e)}u.push(...d);for(const e of u)a?.bindRequest(e),o.delete(e),this.addRequest(e);if(r)for(const e of o)this.addRequest(e),e.preserved=!0;a&&this.pageLoadForManager.set(s,a)}addRequest(e){this.requestsInternal.push(e),this.requestsSet.add(e);const t=this.requestsMap.get(e.requestId());t?t.push(e):this.requestsMap.set(e.requestId(),[e]),this.tryResolvePreflightRequests(e),this.dispatchEventToListeners(Events.RequestAdded,e)}removeRequest(e){const t=this.requestsInternal.indexOf(e);t>-1&&this.requestsInternal.splice(t,1),this.requestsSet.delete(e),this.requestsMap.delete(e.requestId()),this.dispatchEventToListeners(Events.RequestRemoved,e)}tryResolvePreflightRequests(e){if(e.isPreflightRequest()){const t=e.initiator();if(t&&t.requestId){const[s]=this.requestsForId(t.requestId);s?(e.setPreflightInitiatorRequest(s),s.setPreflightRequest(e)):this.unresolvedPreflightRequests.set(t.requestId,e)}}else{const t=this.unresolvedPreflightRequests.get(e.requestId());if(t){this.unresolvedPreflightRequests.delete(e.requestId()),e.setPreflightRequest(t),t.setPreflightInitiatorRequest(e);const s=this.initiatorData.get(t);s&&(s.info=null),this.dispatchEventToListeners(Events.RequestUpdated,t)}}}importRequests(e){this.reset(!0),this.requestsInternal=[],this.sentNetworkRequests=[],this.receivedNetworkResponses=[],this.requestsSet.clear(),this.requestsMap.clear(),this.unresolvedPreflightRequests.clear();for(const t of e)this.addRequest(t)}onRequestStarted(e){const{request:t,originalRequest:s}=e.data;s&&this.sentNetworkRequests.push(s),this.requestsSet.add(t);const r=SDK.NetworkManager.NetworkManager.forRequest(t),n=r?this.pageLoadForManager.get(r):null;n&&n.bindRequest(t),this.addRequest(t)}onResponseReceived(e){const t=e.data.response;this.receivedNetworkResponses.push(t)}onRequestUpdated(e){const t=e.data;this.requestsSet.has(t)&&(t.isPreflightRequest()&&"UnexpectedPrivateNetworkAccess"===t.corsErrorStatus()?.corsError?this.removeRequest(t):this.dispatchEventToListeners(Events.RequestUpdated,t))}onRequestRedirect(e){this.initiatorData.delete(e.data)}onDOMContentLoaded(e,t){const s=e.target().model(SDK.NetworkManager.NetworkManager),r=s?this.pageLoadForManager.get(s):null;r&&(r.contentLoadTime=t.data)}onLoad(e){const t=e.data.resourceTreeModel.target().model(SDK.NetworkManager.NetworkManager),s=t?this.pageLoadForManager.get(t):null;s&&(s.loadTime=e.data.loadTime)}reset(e){this.requestsInternal=[],this.sentNetworkRequests=[],this.receivedNetworkResponses=[],this.requestsSet.clear(),this.requestsMap.clear(),this.unresolvedPreflightRequests.clear();const t=new Set(SDK.TargetManager.TargetManager.instance().models(SDK.NetworkManager.NetworkManager));for(const e of this.pageLoadForManager.keys())t.has(e)||this.pageLoadForManager.delete(e);this.dispatchEventToListeners(Events.Reset,{clearIfPreserved:e})}networkMessageGenerated(e,t){const{message:s,warning:r,requestId:n}=t.data,i=new SDK.ConsoleModel.ConsoleMessage(e.target().model(SDK.RuntimeModel.RuntimeModel),"network",r?"warning":"info",s);this.associateConsoleMessageWithRequest(i,n),e.target().model(SDK.ConsoleModel.ConsoleModel)?.addMessage(i)}associateConsoleMessageWithRequest(e,t){const s=e.target(),r=s?s.model(SDK.NetworkManager.NetworkManager):null;if(!r)return;const n=this.requestByManagerAndId(r,t);if(!n)return;consoleMessageToRequest.set(e,n);const i=n.initiator();i&&(e.stackTrace=i.stack||void 0,i.url&&(e.url=i.url,e.line=i.lineNumber||0))}static requestForConsoleMessage(e){return consoleMessageToRequest.get(e)||null}requestsForId(e){return this.requestsMap.get(e)||[]}}const consoleMessageToRequest=new WeakMap;export var Events;!function(e){e.Reset="Reset",e.RequestAdded="RequestAdded",e.RequestUpdated="RequestUpdated",e.RequestRemoved="RequestRemoved"}(Events||(Events={}));