UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 9.93 kB
import*as Common from"../../core/common/common.js";import*as Host from"../../core/host/host.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";import*as TextUtils from"../../models/text_utils/text_utils.js";import*as DataGrid from"../../ui/legacy/components/data_grid/data_grid.js";import*as SourceFrame from"../../ui/legacy/components/source_frame/source_frame.js";import*as UI from"../../ui/legacy/legacy.js";import{BinaryResourceView}from"./BinaryResourceView.js";import webSocketFrameViewStyles from"./webSocketFrameView.css.js";const UIStrings={data:"Data",length:"Length",time:"Time",webSocketFrame:"Web Socket Frame",clearAll:"Clear All",filter:"Filter",selectMessageToBrowseItsContent:"Select message to browse its content.",copyMessageD:"Copy message...",copyMessage:"Copy message",clearAllL:"Clear all",sOpcodeSMask:"{PH1} (Opcode {PH2}, mask)",sOpcodeS:"{PH1} (Opcode {PH2})",continuationFrame:"Continuation Frame",textMessage:"Text Message",binaryMessage:"Binary Message",connectionCloseMessage:"Connection Close Message",pingMessage:"Ping Message",pongMessage:"Pong Message",all:"All",send:"Send",receive:"Receive",na:"N/A",enterRegex:"Enter regex, for example: (web)?socket"},str_=i18n.i18n.registerUIStrings("panels/network/ResourceWebSocketFrameView.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_),i18nLazyString=i18n.i18n.getLazilyComputedLocalizedString.bind(void 0,str_);export class ResourceWebSocketFrameView extends UI.Widget.VBox{request;splitWidget;dataGrid;timeComparator;mainToolbar;clearAllButton;filterTypeCombobox;filterType;filterTextInput;filterRegex;frameEmptyWidget;selectedNode;currentSelectedNode;messageFilterSetting=Common.Settings.Settings.instance().createSetting("networkWebSocketMessageFilter","");constructor(e){super(),this.element.classList.add("websocket-frame-view"),this.request=e,this.splitWidget=new UI.SplitWidget.SplitWidget(!1,!0,"resourceWebSocketFrameSplitViewState"),this.splitWidget.show(this.element);const t=[{id:"data",title:i18nString(UIStrings.data),sortable:!1,weight:88},{id:"length",title:i18nString(UIStrings.length),sortable:!1,align:DataGrid.DataGrid.Align.Right,weight:5},{id:"time",title:i18nString(UIStrings.time),sortable:!0,weight:7}];this.dataGrid=new DataGrid.SortableDataGrid.SortableDataGrid({displayName:i18nString(UIStrings.webSocketFrame),columns:t,editCallback:void 0,deleteCallback:void 0,refreshCallback:void 0}),this.dataGrid.setRowContextMenuCallback(function(e,t){const i=t,r=i.binaryView();r?r.addCopyToContextMenu(e,i18nString(UIStrings.copyMessageD)):e.clipboardSection().appendItem(i18nString(UIStrings.copyMessage),Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText.bind(Host.InspectorFrontendHost.InspectorFrontendHostInstance,i.data.data));e.footerSection().appendItem(i18nString(UIStrings.clearAllL),this.clearFrames.bind(this))}.bind(this)),this.dataGrid.setStickToBottom(!0),this.dataGrid.setCellClass("websocket-frame-view-td"),this.timeComparator=ResourceWebSocketFrameNodeTimeComparator,this.dataGrid.sortNodes(this.timeComparator,!1),this.dataGrid.markColumnAsSortedBy("time",DataGrid.DataGrid.Order.Ascending),this.dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged,this.sortItems,this),this.dataGrid.setName("ResourceWebSocketFrameView"),this.dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,(e=>{this.onFrameSelected(e)}),this),this.dataGrid.addEventListener(DataGrid.DataGrid.Events.DeselectedNode,this.onFrameDeselected,this),this.mainToolbar=new UI.Toolbar.Toolbar(""),this.clearAllButton=new UI.Toolbar.ToolbarButton(i18nString(UIStrings.clearAll),"clear"),this.clearAllButton.addEventListener(UI.Toolbar.ToolbarButton.Events.Click,this.clearFrames,this),this.mainToolbar.appendToolbarItem(this.clearAllButton),this.filterTypeCombobox=new UI.Toolbar.ToolbarComboBox(this.updateFilterSetting.bind(this),i18nString(UIStrings.filter));for(const e of _filterTypes){const t=this.filterTypeCombobox.createOption(e.label(),e.name);this.filterTypeCombobox.addOption(t)}this.mainToolbar.appendToolbarItem(this.filterTypeCombobox),this.filterType=null;const i=i18nString(UIStrings.enterRegex);this.filterTextInput=new UI.Toolbar.ToolbarInput(i,"",.4),this.filterTextInput.addEventListener(UI.Toolbar.ToolbarInput.Event.TextChanged,this.updateFilterSetting,this);const r=this.messageFilterSetting.get();r&&this.filterTextInput.setValue(r),this.filterRegex=null,this.mainToolbar.appendToolbarItem(this.filterTextInput);const s=new UI.Widget.VBox;s.element.appendChild(this.mainToolbar.element),this.dataGrid.asWidget().show(s.element),s.setMinimumSize(0,72),this.splitWidget.setMainWidget(s),this.frameEmptyWidget=new UI.EmptyWidget.EmptyWidget(i18nString(UIStrings.selectMessageToBrowseItsContent)),this.splitWidget.setSidebarWidget(this.frameEmptyWidget),this.selectedNode=null,r&&this.applyFilter(r)}static opCodeDescription(e,t){const i=opCodeDescriptions[e]||(()=>"");return i18nString(t?UIStrings.sOpcodeSMask:UIStrings.sOpcodeS,{PH1:i(),PH2:e})}wasShown(){this.refresh(),this.registerCSSFiles([webSocketFrameViewStyles]),this.request.addEventListener(SDK.NetworkRequest.Events.WebsocketFrameAdded,this.frameAdded,this)}willHide(){this.request.removeEventListener(SDK.NetworkRequest.Events.WebsocketFrameAdded,this.frameAdded,this)}frameAdded(e){const t=e.data;this.frameFilter(t)&&this.dataGrid.insertChild(new ResourceWebSocketFrameNode(this.request.url(),t))}frameFilter(e){return(!this.filterType||e.type===this.filterType)&&(!this.filterRegex||this.filterRegex.test(e.text))}clearFrames(){_clearFrameOffsets.set(this.request,this.request.frames().length),this.refresh()}updateFilterSetting(){const e=this.filterTextInput.value();this.messageFilterSetting.set(e),this.applyFilter(e)}applyFilter(e){const t=this.filterTypeCombobox.selectedOption().value;this.filterRegex=e?new RegExp(Platform.StringUtilities.escapeForRegExp(e),"i"):null,this.filterType="all"===t?null:t,this.refresh()}async onFrameSelected(e){this.currentSelectedNode=e.data;const t=this.currentSelectedNode.dataText(),i=this.currentSelectedNode.binaryView();if(i)return void this.splitWidget.setSidebarWidget(i);const r=await SourceFrame.JSONView.JSONView.createView(t);r?this.splitWidget.setSidebarWidget(r):this.splitWidget.setSidebarWidget(new SourceFrame.ResourceSourceFrame.ResourceSourceFrame(TextUtils.StaticContentProvider.StaticContentProvider.fromString(this.request.url(),Common.ResourceType.resourceTypes.WebSocket,t),""))}onFrameDeselected(){this.currentSelectedNode=null,this.splitWidget.setSidebarWidget(this.frameEmptyWidget)}refresh(){this.dataGrid.rootNode().removeChildren();const e=this.request.url();let t=this.request.frames();const i=_clearFrameOffsets.get(this.request)||0;t=t.slice(i),t=t.filter(this.frameFilter.bind(this)),t.forEach((t=>this.dataGrid.insertChild(new ResourceWebSocketFrameNode(e,t))))}sortItems(){this.dataGrid.sortNodes(this.timeComparator,!this.dataGrid.isSortOrderAscending())}}export var OpCodes;!function(e){e[e.ContinuationFrame=0]="ContinuationFrame",e[e.TextFrame=1]="TextFrame",e[e.BinaryFrame=2]="BinaryFrame",e[e.ConnectionCloseFrame=8]="ConnectionCloseFrame",e[e.PingFrame=9]="PingFrame",e[e.PongFrame=10]="PongFrame"}(OpCodes||(OpCodes={}));export const opCodeDescriptions=function(){const e=OpCodes,t=[];return t[e.ContinuationFrame]=i18nLazyString(UIStrings.continuationFrame),t[e.TextFrame]=i18nLazyString(UIStrings.textMessage),t[e.BinaryFrame]=i18nLazyString(UIStrings.binaryMessage),t[e.ConnectionCloseFrame]=i18nLazyString(UIStrings.connectionCloseMessage),t[e.PingFrame]=i18nLazyString(UIStrings.pingMessage),t[e.PongFrame]=i18nLazyString(UIStrings.pongMessage),t}();export const _filterTypes=[{name:"all",label:i18nLazyString(UIStrings.all),title:void 0},{name:"send",label:i18nLazyString(UIStrings.send),title:void 0},{name:"receive",label:i18nLazyString(UIStrings.receive),title:void 0}];export class ResourceWebSocketFrameNode extends DataGrid.SortableDataGrid.SortableDataGridNode{url;frame;isTextFrame;dataTextInternal;binaryViewInternal;constructor(e,t){let i=String(t.text.length);const r=new Date(1e3*t.time),s=("0"+r.getHours()).substr(-2)+":"+("0"+r.getMinutes()).substr(-2)+":"+("0"+r.getSeconds()).substr(-2)+"."+("00"+r.getMilliseconds()).substr(-3),a=document.createElement("div");UI.UIUtils.createTextChild(a,s),UI.Tooltip.Tooltip.install(a,r.toLocaleString());let o=t.text,n=ResourceWebSocketFrameView.opCodeDescription(t.opCode,t.mask);const l=t.opCode===OpCodes.TextFrame;t.type===SDK.NetworkRequest.WebSocketFrameType.Error?(n=o,i=i18nString(UIStrings.na)):l?n=o:t.opCode===OpCodes.BinaryFrame?(i=Platform.NumberUtilities.bytesToString(Platform.StringUtilities.base64ToSize(t.text)),n=opCodeDescriptions[t.opCode]()):o=n,super({data:n,length:i,time:a}),this.url=e,this.frame=t,this.isTextFrame=l,this.dataTextInternal=o,this.binaryViewInternal=null}createCells(e){e.classList.toggle("websocket-frame-view-row-error",this.frame.type===SDK.NetworkRequest.WebSocketFrameType.Error),e.classList.toggle("websocket-frame-view-row-send",this.frame.type===SDK.NetworkRequest.WebSocketFrameType.Send),e.classList.toggle("websocket-frame-view-row-receive",this.frame.type===SDK.NetworkRequest.WebSocketFrameType.Receive),super.createCells(e)}nodeSelfHeight(){return 21}dataText(){return this.dataTextInternal}opCode(){return this.frame.opCode}binaryView(){return this.isTextFrame||this.frame.type===SDK.NetworkRequest.WebSocketFrameType.Error?null:(this.binaryViewInternal||this.dataTextInternal.length>0&&(this.binaryViewInternal=new BinaryResourceView(this.dataTextInternal,Platform.DevToolsPath.EmptyUrlString,Common.ResourceType.resourceTypes.WebSocket)),this.binaryViewInternal)}}export function ResourceWebSocketFrameNodeTimeComparator(e,t){return e.frame.time-t.frame.time}const _clearFrameOffsets=new WeakMap;