UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 42.1 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 Root from"../../core/root/root.js";import*as SDK from"../../core/sdk/sdk.js";import*as Bindings from"../../models/bindings/bindings.js";import*as IssuesManager from"../../models/issues_manager/issues_manager.js";import*as Logs from"../../models/logs/logs.js";import*as TextUtils from"../../models/text_utils/text_utils.js";import*as CodeHighlighter from"../../ui/components/code_highlighter/code_highlighter.js";import*as IssueCounter from"../../ui/components/issue_counter/issue_counter.js";import objectValueStyles from"../../ui/legacy/components/object_ui/objectValue.css.js";import*as Components from"../../ui/legacy/components/utils/utils.js";import*as UI from"../../ui/legacy/legacy.js";import{ConsoleContextSelector}from"./ConsoleContextSelector.js";import consoleViewStyles from"./consoleView.css.js";import{ConsoleFilter,FilterType}from"./ConsoleFilter.js";import{ConsolePinPane}from"./ConsolePinPane.js";import{ConsolePrompt}from"./ConsolePrompt.js";import{ConsoleSidebar}from"./ConsoleSidebar.js";import{ConsoleCommand,ConsoleCommandResult,ConsoleGroupViewMessage,ConsoleTableMessageView,ConsoleViewMessage,getMessageForElement,MaxLengthForLinks}from"./ConsoleViewMessage.js";import{ConsoleViewport}from"./ConsoleViewport.js";const UIStrings={issuesWithColon:"{n, plural, =0 {No Issues} =1 {# Issue:} other {# Issues:}}",issueToolbarTooltipGeneral:"Some problems no longer generate console messages, but are surfaced in the issues tab.",issueToolbarClickToView:"Click to view {issueEnumeration}",issueToolbarClickToGoToTheIssuesTab:"Click to go to the issues tab",findStringInLogs:"Find string in logs",consoleSettings:"Console settings",groupSimilarMessagesInConsole:"Group similar messages in console",showCorsErrorsInConsole:"Show `CORS` errors in console",showConsoleSidebar:"Show console sidebar",hideConsoleSidebar:"Hide console sidebar",consoleSidebarShown:"Console sidebar shown",consoleSidebarHidden:"Console sidebar hidden",doNotClearLogOnPageReload:"Do not clear log on page reload / navigation",preserveLog:"Preserve log",hideNetwork:"Hide network",onlyShowMessagesFromTheCurrentContext:"Only show messages from the current context (`top`, `iframe`, `worker`, extension)",selectedContextOnly:"Selected context only",logXMLHttpRequests:"Log XMLHttpRequests",eagerlyEvaluateTextInThePrompt:"Eagerly evaluate text in the prompt",autocompleteFromHistory:"Autocomplete from history",treatEvaluationAsUserActivation:"Treat evaluation as user activation",sHidden:"{n, plural, =1 {# hidden} other {# hidden}}",consoleCleared:"Console cleared",hideMessagesFromS:"Hide messages from {PH1}",saveAs:"Save as...",copyVisibleStyledSelection:"Copy visible styled selection",replayXhr:"Replay XHR",writingFile:"Writing file…",searching:"Searching…",filter:"Filter",egEventdCdnUrlacom:"e.g. `/eventd/ -cdn url:a.com`",verbose:"Verbose",info:"Info",warnings:"Warnings",errors:"Errors",logLevels:"Log levels",overriddenByFilterSidebar:"Overridden by filter sidebar",customLevels:"Custom levels",sOnly:"{PH1} only",allLevels:"All levels",defaultLevels:"Default levels",hideAll:"Hide all",logLevelS:"Log level: {PH1}",default:"Default",filteredMessagesInConsole:"{PH1} messages in console"},str_=i18n.i18n.registerUIStrings("panels/console/ConsoleView.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);let consoleViewInstance;const MIN_HISTORY_LENGTH_FOR_DISABLING_SELF_XSS_WARNING=5;export class ConsoleView extends UI.Widget.VBox{searchableViewInternal;sidebar;isSidebarOpen;filter;consoleToolbarContainer;splitWidget;contentsElement;visibleViewMessages;hiddenByFilterCount;shouldBeHiddenCache;lastShownHiddenByFilterCount;currentMatchRangeIndex;searchRegex;groupableMessages;groupableMessageTitle;shortcuts;regexMatchRanges;consoleContextSelector;filterStatusText;showSettingsPaneSetting;showSettingsPaneButton;progressToolbarItem;groupSimilarSetting;showCorsErrorsSetting;timestampsSetting;consoleHistoryAutocompleteSetting;selfXssWarningDisabledSetting;pinPane;viewport;messagesElement;messagesCountElement;viewportThrottler;pendingBatchResize;onMessageResizedBound;promptElement;linkifier;consoleMessages;consoleGroupStarts;prompt;immediatelyFilterMessagesForTest;maybeDirtyWhileMuted;scheduledRefreshPromiseForTest;needsFullUpdate;buildHiddenCacheTimeout;searchShouldJumpBackwards;searchProgressIndicator;innerSearchTimeoutId;muteViewportUpdates;waitForScrollTimeout;issueCounter;pendingSidebarMessages=[];userHasOpenedSidebarAtLeastOnce=!1;issueToolbarThrottle;requestResolver=new Logs.RequestResolver.RequestResolver;issueResolver=new IssuesManager.IssueResolver.IssueResolver;#e=!1;#t=this.#s.bind(this);constructor(e){super(),this.setMinimumSize(0,35),this.searchableViewInternal=new UI.SearchableView.SearchableView(this,null),this.searchableViewInternal.element.classList.add("console-searchable-view"),this.searchableViewInternal.setPlaceholder(i18nString(UIStrings.findStringInLogs)),this.searchableViewInternal.setMinimalSearchQuerySize(0),this.sidebar=new ConsoleSidebar,this.sidebar.addEventListener("FilterSelected",this.onFilterChanged.bind(this)),this.isSidebarOpen=!1,this.filter=new ConsoleViewFilter(this.onFilterChanged.bind(this)),this.consoleToolbarContainer=this.element.createChild("div","console-toolbar-container"),this.splitWidget=new UI.SplitWidget.SplitWidget(!0,!1,"console.sidebar.width",100),this.splitWidget.setMainWidget(this.searchableViewInternal),this.splitWidget.setSidebarWidget(this.sidebar),this.splitWidget.show(this.element),this.splitWidget.hideSidebar(),this.splitWidget.enableShowModeSaving(),this.isSidebarOpen=this.splitWidget.showMode()===UI.SplitWidget.ShowMode.Both,this.filter.setLevelMenuOverridden(this.isSidebarOpen),this.splitWidget.addEventListener(UI.SplitWidget.Events.ShowModeChanged,(e=>{this.isSidebarOpen=e.data===UI.SplitWidget.ShowMode.Both,this.isSidebarOpen&&(this.userHasOpenedSidebarAtLeastOnce||(Host.userMetrics.actionTaken(Host.UserMetrics.Action.ConsoleSidebarOpened),this.userHasOpenedSidebarAtLeastOnce=!0),this.pendingSidebarMessages.forEach((e=>{this.sidebar.onMessageAdded(e)})),this.pendingSidebarMessages=[]),this.filter.setLevelMenuOverridden(this.isSidebarOpen),this.onFilterChanged()})),this.contentsElement=this.searchableViewInternal.element,this.element.classList.add("console-view"),this.visibleViewMessages=[],this.hiddenByFilterCount=0,this.shouldBeHiddenCache=new Set,this.groupableMessages=new Map,this.groupableMessageTitle=new Map,this.shortcuts=new Map,this.regexMatchRanges=[],this.consoleContextSelector=new ConsoleContextSelector,this.filterStatusText=new UI.Toolbar.ToolbarText,this.filterStatusText.element.classList.add("dimmed"),this.showSettingsPaneSetting=Common.Settings.Settings.instance().createSetting("consoleShowSettingsToolbar",!1),this.showSettingsPaneButton=new UI.Toolbar.ToolbarSettingToggle(this.showSettingsPaneSetting,"gear",i18nString(UIStrings.consoleSettings),"gear-filled"),this.progressToolbarItem=new UI.Toolbar.ToolbarItem(document.createElement("div")),this.groupSimilarSetting=Common.Settings.Settings.instance().moduleSetting("consoleGroupSimilar"),this.groupSimilarSetting.addChangeListener((()=>this.updateMessageList())),this.showCorsErrorsSetting=Common.Settings.Settings.instance().moduleSetting("consoleShowsCorsErrors"),this.showCorsErrorsSetting.addChangeListener((()=>this.updateMessageList()));const t=new UI.Toolbar.Toolbar("console-main-toolbar",this.consoleToolbarContainer);t.makeWrappable(!0);const s=new UI.Toolbar.Toolbar("",this.consoleToolbarContainer);t.appendToolbarItem(this.splitWidget.createShowHideSidebarButton(i18nString(UIStrings.showConsoleSidebar),i18nString(UIStrings.hideConsoleSidebar),i18nString(UIStrings.consoleSidebarShown),i18nString(UIStrings.consoleSidebarHidden))),t.appendToolbarItem(UI.Toolbar.Toolbar.createActionButton(UI.ActionRegistry.ActionRegistry.instance().action("console.clear"))),t.appendSeparator(),t.appendToolbarItem(this.consoleContextSelector.toolbarItem()),t.appendSeparator();const i=UI.Toolbar.Toolbar.createActionButton(UI.ActionRegistry.ActionRegistry.instance().action("console.create-pin"));t.appendToolbarItem(i),t.appendSeparator(),t.appendToolbarItem(this.filter.textFilterUI),t.appendToolbarItem(this.filter.levelMenuButton),t.appendToolbarItem(this.progressToolbarItem),t.appendSeparator(),this.issueCounter=new IssueCounter.IssueCounter.IssueCounter,this.issueCounter.id="console-issues-counter";const o=new UI.Toolbar.ToolbarItem(this.issueCounter);this.issueCounter.data={clickHandler:()=>{Host.userMetrics.issuesPanelOpenedFrom(Host.UserMetrics.IssueOpener.StatusBarIssuesCounter),UI.ViewManager.ViewManager.instance().showView("issues-pane")},issuesManager:IssuesManager.IssuesManager.IssuesManager.instance(),accessibleName:i18nString(UIStrings.issueToolbarTooltipGeneral),displayMode:"OmitEmpty"},t.appendToolbarItem(o),s.appendSeparator(),s.appendToolbarItem(this.filterStatusText),s.appendToolbarItem(this.showSettingsPaneButton);const n=Common.Settings.Settings.instance().moduleSetting("monitoringXHREnabled");this.timestampsSetting=Common.Settings.Settings.instance().moduleSetting("consoleTimestampsEnabled"),this.consoleHistoryAutocompleteSetting=Common.Settings.Settings.instance().moduleSetting("consoleHistoryAutocomplete"),this.selfXssWarningDisabledSetting=Common.Settings.Settings.instance().createSetting("disableSelfXssWarning",!1,Common.Settings.SettingStorageType.Synced);const r=new UI.Widget.HBox;r.show(this.contentsElement),r.element.classList.add("console-settings-pane"),UI.ARIAUtils.setLabel(r.element,i18nString(UIStrings.consoleSettings)),UI.ARIAUtils.markAsGroup(r.element);const a=new UI.Toolbar.Toolbar("",r.element);a.makeVertical(),ConsoleView.appendSettingsCheckboxToToolbar(a,this.filter.hideNetworkMessagesSetting,this.filter.hideNetworkMessagesSetting.title(),i18nString(UIStrings.hideNetwork)),ConsoleView.appendSettingsCheckboxToToolbar(a,"preserveConsoleLog",i18nString(UIStrings.doNotClearLogOnPageReload),i18nString(UIStrings.preserveLog)),ConsoleView.appendSettingsCheckboxToToolbar(a,this.filter.filterByExecutionContextSetting,i18nString(UIStrings.onlyShowMessagesFromTheCurrentContext),i18nString(UIStrings.selectedContextOnly)),ConsoleView.appendSettingsCheckboxToToolbar(a,this.groupSimilarSetting,i18nString(UIStrings.groupSimilarMessagesInConsole)),ConsoleView.appendSettingsCheckboxToToolbar(a,this.showCorsErrorsSetting,i18nString(UIStrings.showCorsErrorsInConsole));const l=new UI.Toolbar.Toolbar("",r.element);l.makeVertical(),ConsoleView.appendSettingsCheckboxToToolbar(l,n,i18nString(UIStrings.logXMLHttpRequests)),ConsoleView.appendSettingsCheckboxToToolbar(l,"consoleEagerEval",i18nString(UIStrings.eagerlyEvaluateTextInThePrompt)),ConsoleView.appendSettingsCheckboxToToolbar(l,this.consoleHistoryAutocompleteSetting,i18nString(UIStrings.autocompleteFromHistory)),ConsoleView.appendSettingsCheckboxToToolbar(l,"consoleUserActivationEval",i18nString(UIStrings.treatEvaluationAsUserActivation)),this.showSettingsPaneSetting.get()||r.element.classList.add("hidden"),this.showSettingsPaneSetting.addChangeListener((()=>r.element.classList.toggle("hidden",!this.showSettingsPaneSetting.get()))),this.pinPane=new ConsolePinPane(i,(()=>this.prompt.focus())),this.pinPane.element.classList.add("console-view-pinpane"),this.pinPane.show(this.contentsElement),this.viewport=new ConsoleViewport(this),this.viewport.setStickToBottom(!0),this.viewport.contentElement().classList.add("console-group","console-group-messages"),this.contentsElement.appendChild(this.viewport.element),this.messagesElement=this.viewport.element,this.messagesElement.id="console-messages",this.messagesElement.classList.add("monospace"),this.messagesElement.addEventListener("click",this.messagesClicked.bind(this),!1),["paste","clipboard-paste","drop"].forEach((e=>{this.messagesElement.addEventListener(e,this.messagesPasted.bind(this),!0)})),this.messagesCountElement=this.consoleToolbarContainer.createChild("div","message-count"),UI.ARIAUtils.markAsPoliteLiveRegion(this.messagesCountElement,!1),this.viewportThrottler=new Common.Throttler.Throttler(e),this.pendingBatchResize=!1,this.onMessageResizedBound=e=>{this.onMessageResized(e)},this.promptElement=this.messagesElement.createChild("div","source-code"),this.promptElement.id="console-prompt";const h=this.messagesElement.createChild("div","console-view-fix-select-all");h.textContent=".",UI.ARIAUtils.markAsHidden(h),this.registerShortcuts(),this.messagesElement.addEventListener("contextmenu",this.handleContextMenuEvent.bind(this),!1);const d=new Common.Throttler.Throttler(100);this.linkifier=new Components.Linkifier.Linkifier(MaxLengthForLinks,void 0,(()=>d.schedule((async()=>this.onFilterChanged())))),this.consoleMessages=[],this.consoleGroupStarts=[],this.prompt=new ConsolePrompt,this.prompt.show(this.promptElement),this.prompt.element.addEventListener("keydown",this.promptKeyDown.bind(this),!0),this.prompt.addEventListener("TextChanged",this.promptTextChanged,this),this.messagesElement.addEventListener("keydown",this.messagesKeyDown.bind(this),!1),this.prompt.element.addEventListener("focusin",(()=>{this.isScrolledToBottom()&&this.viewport.setStickToBottom(!0)})),this.consoleHistoryAutocompleteSetting.addChangeListener(this.consoleHistoryAutocompleteChanged,this),this.consoleHistoryAutocompleteChanged(),this.updateFilterStatus(),this.timestampsSetting.addChangeListener(this.consoleTimestampsSettingChanged,this),this.registerWithMessageSink(),UI.Context.Context.instance().addFlavorChangeListener(SDK.RuntimeModel.ExecutionContext,this.executionContextChanged,this),this.messagesElement.addEventListener("mousedown",(e=>this.updateStickToBottomOnPointerDown(2===e.button)),!1),this.messagesElement.addEventListener("mouseup",this.updateStickToBottomOnPointerUp.bind(this),!1),this.messagesElement.addEventListener("mouseleave",this.updateStickToBottomOnPointerUp.bind(this),!1),this.messagesElement.addEventListener("wheel",this.updateStickToBottomOnWheel.bind(this),!1),this.messagesElement.addEventListener("touchstart",this.updateStickToBottomOnPointerDown.bind(this,!1),!1),this.messagesElement.addEventListener("touchend",this.updateStickToBottomOnPointerUp.bind(this),!1),this.messagesElement.addEventListener("touchcancel",this.updateStickToBottomOnPointerUp.bind(this),!1),SDK.TargetManager.TargetManager.instance().addModelListener(SDK.ConsoleModel.ConsoleModel,SDK.ConsoleModel.Events.ConsoleCleared,this.consoleCleared,this,{scoped:!0}),SDK.TargetManager.TargetManager.instance().addModelListener(SDK.ConsoleModel.ConsoleModel,SDK.ConsoleModel.Events.MessageAdded,this.onConsoleMessageAdded,this,{scoped:!0}),SDK.TargetManager.TargetManager.instance().addModelListener(SDK.ConsoleModel.ConsoleModel,SDK.ConsoleModel.Events.MessageUpdated,this.onConsoleMessageUpdated,this,{scoped:!0}),SDK.TargetManager.TargetManager.instance().addModelListener(SDK.ConsoleModel.ConsoleModel,SDK.ConsoleModel.Events.CommandEvaluated,this.commandEvaluated,this,{scoped:!0}),SDK.TargetManager.TargetManager.instance().observeModels(SDK.ConsoleModel.ConsoleModel,this,{scoped:!0});const g=IssuesManager.IssuesManager.IssuesManager.instance();this.issueToolbarThrottle=new Common.Throttler.Throttler(100),g.addEventListener("IssuesCountUpdated",this.#t)}static appendSettingsCheckboxToToolbar(e,t,s,i){let o;o="string"==typeof t?Common.Settings.Settings.instance().moduleSetting(t):t;const n=new UI.Toolbar.ToolbarSettingCheckbox(o,s,i);return e.appendToolbarItem(n),n}static instance(e){return consoleViewInstance&&!e?.forceNew||(consoleViewInstance=new ConsoleView(e?.viewportThrottlerTimeout??50)),consoleViewInstance}static clearConsole(){SDK.ConsoleModel.ConsoleModel.requestClearMessages()}#s(){this.issueToolbarThrottle.schedule((async()=>this.updateIssuesToolbarItem()))}modelAdded(e){e.messages().forEach(this.addConsoleMessage,this)}modelRemoved(e){Common.Settings.Settings.instance().moduleSetting("preserveConsoleLog").get()||e.target().outermostTarget()!==e.target()||this.consoleCleared()}onFilterChanged(){if(this.filter.currentFilter.levelsMask=this.isSidebarOpen?ConsoleFilter.allLevelsFilterValue():this.filter.messageLevelFiltersSetting.get(),this.cancelBuildHiddenCache(),this.immediatelyFilterMessagesForTest){for(const e of this.consoleMessages)this.computeShouldMessageBeVisible(e);this.updateMessageList()}else this.buildHiddenCache(0,this.consoleMessages.slice())}setImmediatelyFilterMessagesForTest(){this.immediatelyFilterMessagesForTest=!0}searchableView(){return this.searchableViewInternal}clearHistory(){this.prompt.history().clear()}consoleHistoryAutocompleteChanged(){this.prompt.setAddCompletionsFromHistory(this.consoleHistoryAutocompleteSetting.get())}itemCount(){return this.visibleViewMessages.length}itemElement(e){return this.visibleViewMessages[e]}fastHeight(e){return this.visibleViewMessages[e].fastHeight()}minimumRowHeight(){return 16}registerWithMessageSink(){Common.Console.Console.instance().messages().forEach(this.addSinkMessage,this),Common.Console.Console.instance().addEventListener(Common.Console.Events.MessageAdded,(({data:e})=>{this.addSinkMessage(e)}),this)}addSinkMessage(e){let t="verbose";switch(e.level){case Common.Console.MessageLevel.Info:t="info";break;case Common.Console.MessageLevel.Error:t="error";break;case Common.Console.MessageLevel.Warning:t="warning"}const s=new SDK.ConsoleModel.ConsoleMessage(null,"other",t,e.text,{type:SDK.ConsoleModel.FrontendMessageType.System,timestamp:e.timestamp});this.addConsoleMessage(s)}consoleTimestampsSettingChanged(){this.updateMessageList(),this.consoleMessages.forEach((e=>e.updateTimestamp())),this.groupableMessageTitle.forEach((e=>e.updateTimestamp()))}executionContextChanged(){this.prompt.clearAutocomplete()}willHide(){this.hidePromptSuggestBox()}wasShown(){super.wasShown(),this.updateIssuesToolbarItem(),this.viewport.refresh(),this.registerCSSFiles([consoleViewStyles,objectValueStyles,CodeHighlighter.Style.default])}focus(){this.viewport.hasVirtualSelection()?this.viewport.contentElement().focus():this.focusPrompt()}focusPrompt(){if(!this.prompt.hasFocus()){const e=this.viewport.stickToBottom(),t=this.viewport.element.scrollTop;this.prompt.focus(),this.viewport.setStickToBottom(e),this.viewport.element.scrollTop=t}}restoreScrollPositions(){this.viewport.stickToBottom()?this.immediatelyScrollToBottom():super.restoreScrollPositions()}onResize(){this.scheduleViewportRefresh(),this.hidePromptSuggestBox(),this.viewport.stickToBottom()&&this.immediatelyScrollToBottom();for(let e=0;e<this.visibleViewMessages.length;++e)this.visibleViewMessages[e].onResize()}hidePromptSuggestBox(){this.prompt.clearAutocomplete()}async invalidateViewport(){this.updateIssuesToolbarItem(),this.muteViewportUpdates?this.maybeDirtyWhileMuted=!0:this.needsFullUpdate?(this.updateMessageList(),delete this.needsFullUpdate):this.viewport.invalidate()}onDetach(){this.#e=!0;IssuesManager.IssuesManager.IssuesManager.instance().removeEventListener("IssuesCountUpdated",this.#t)}updateIssuesToolbarItem(){if(this.#e)return;const e=IssuesManager.IssuesManager.IssuesManager.instance(),t=IssueCounter.IssueCounter.getIssueCountsEnumeration(e),s=0===e.numberOfIssues()?i18nString(UIStrings.issueToolbarClickToGoToTheIssuesTab):i18nString(UIStrings.issueToolbarClickToView,{issueEnumeration:t}),i=`${i18nString(UIStrings.issueToolbarTooltipGeneral)} ${s}`;UI.Tooltip.Tooltip.install(this.issueCounter,i),this.issueCounter.data={...this.issueCounter.data,leadingText:i18nString(UIStrings.issuesWithColon,{n:e.numberOfIssues()}),accessibleName:i}}scheduleViewportRefresh(){this.muteViewportUpdates?this.maybeDirtyWhileMuted=!0:this.scheduledRefreshPromiseForTest=this.viewportThrottler.schedule(this.invalidateViewport.bind(this))}getScheduledRefreshPromiseForTest(){return this.scheduledRefreshPromiseForTest}immediatelyScrollToBottom(){this.viewport.setStickToBottom(!0),this.promptElement.scrollIntoView(!0)}updateFilterStatus(){this.hiddenByFilterCount!==this.lastShownHiddenByFilterCount&&(this.filterStatusText.setText(i18nString(UIStrings.sHidden,{n:this.hiddenByFilterCount})),this.filterStatusText.setVisible(Boolean(this.hiddenByFilterCount)),this.lastShownHiddenByFilterCount=this.hiddenByFilterCount)}onConsoleMessageAdded(e){const t=e.data;this.addConsoleMessage(t)}addConsoleMessage(e){const t=this.createViewMessage(e);if(consoleMessageToViewMessage.set(e,t),e.type===SDK.ConsoleModel.FrontendMessageType.Command||e.type===SDK.ConsoleModel.FrontendMessageType.Result){const e=this.consoleMessages[this.consoleMessages.length-1],s=e&&messagesSortedBySymbol.get(e)||0;messagesSortedBySymbol.set(t,s)}else messagesSortedBySymbol.set(t,t.consoleMessage().timestamp);let s;s=!this.consoleMessages.length||r(t,this.consoleMessages[this.consoleMessages.length-1])>0?this.consoleMessages.length:Platform.ArrayUtilities.upperBound(this.consoleMessages,t,r);const i=s<this.consoleMessages.length;if(this.consoleMessages.splice(s,0,t),e.type!==SDK.ConsoleModel.FrontendMessageType.Command&&e.type!==SDK.ConsoleModel.FrontendMessageType.Result){const i=Platform.ArrayUtilities.upperBound(this.consoleGroupStarts,t,r)-1;if(i>=0){!function e(t,s){const i=s.groupEnd();if(null!==i&&r(t,i)>0){const i=s.consoleGroup();if(null===i)return;return void e(t,i)}"endGroup"===t.consoleMessage().type?s.setGroupEnd(t):t.setConsoleGroup(s)}(t,this.consoleGroupStarts[i])}e.isGroupStartMessage()&&(s=Platform.ArrayUtilities.upperBound(this.consoleGroupStarts,t,r),this.consoleGroupStarts.splice(s,0,t))}this.filter.onMessageAdded(e),this.isSidebarOpen?this.sidebar.onMessageAdded(t):this.pendingSidebarMessages.push(t);let o=!1;const n=this.groupSimilarSetting.get();if(e.isGroupable()){const e=t.groupKey();o=n&&this.groupableMessages.has(e);let s=this.groupableMessages.get(e);s||(s=[],this.groupableMessages.set(e,s)),s.push(t)}function r(e,t){return(messagesSortedBySymbol.get(e)||0)-(messagesSortedBySymbol.get(t)||0)}this.computeShouldMessageBeVisible(t),o||i?this.needsFullUpdate=!0:(this.appendMessageToEnd(t,!n),this.updateFilterStatus(),this.searchableViewInternal.updateSearchMatchesCount(this.regexMatchRanges.length)),this.scheduleViewportRefresh(),this.consoleMessageAddedForTest(t)}onConsoleMessageUpdated(e){const t=e.data,s=consoleMessageToViewMessage.get(t);s&&(s.updateMessageElement(),this.computeShouldMessageBeVisible(s),this.updateMessageList())}consoleMessageAddedForTest(e){}shouldMessageBeVisible(e){return!this.shouldBeHiddenCache.has(e)}computeShouldMessageBeVisible(e){!this.filter.shouldBeVisible(e)||this.isSidebarOpen&&!this.sidebar.shouldBeVisible(e)?this.shouldBeHiddenCache.add(e):this.shouldBeHiddenCache.delete(e)}appendMessageToEnd(e,t){if("cors"===e.consoleMessage().category&&!this.showCorsErrorsSetting.get())return;const s=this.visibleViewMessages[this.visibleViewMessages.length-1];if("endGroup"===e.consoleMessage().type){if(s){const e=s.consoleGroup();e&&!e.messagesHidden()&&s.incrementCloseGroupDecorationCount()}return}if(!this.shouldMessageBeVisible(e))return void this.hiddenByFilterCount++;if(!t&&this.tryToCollapseMessages(e,this.visibleViewMessages[this.visibleViewMessages.length-1]))return;const i=e.consoleGroup();if(!i||!i.messagesHidden()){const t=e.consoleMessage().originatingMessage(),o=Boolean(t&&s?.consoleMessage()===t);e.setAdjacentUserCommandResult(o),function e(t,s){if(null===t)return;if(s.includes(t))return;const i=t.consoleGroup();i&&e(i,s);s.push(t)}(i,this.visibleViewMessages),this.visibleViewMessages.push(e),this.searchMessage(this.visibleViewMessages.length-1)}this.messageAppendedForTests()}messageAppendedForTests(){}createViewMessage(e){switch(e.type){case SDK.ConsoleModel.FrontendMessageType.Command:return new ConsoleCommand(e,this.linkifier,this.requestResolver,this.issueResolver,this.onMessageResizedBound);case SDK.ConsoleModel.FrontendMessageType.Result:return new ConsoleCommandResult(e,this.linkifier,this.requestResolver,this.issueResolver,this.onMessageResizedBound);case"startGroupCollapsed":case"startGroup":return new ConsoleGroupViewMessage(e,this.linkifier,this.requestResolver,this.issueResolver,this.updateMessageList.bind(this),this.onMessageResizedBound);case"table":return new ConsoleTableMessageView(e,this.linkifier,this.requestResolver,this.issueResolver,this.onMessageResizedBound);default:return new ConsoleViewMessage(e,this.linkifier,this.requestResolver,this.issueResolver,this.onMessageResizedBound)}}async onMessageResized(e){const t=e.data;if(this.pendingBatchResize||!t.treeOutline)return;this.pendingBatchResize=!0,await Promise.resolve();const s=t.treeOutline.element;this.viewport.setStickToBottom(this.isScrolledToBottom()),s.offsetHeight<=this.messagesElement.offsetHeight&&s.scrollIntoViewIfNeeded(),this.pendingBatchResize=!1}consoleCleared(){const e=this.viewport.element.hasFocus();this.cancelBuildHiddenCache(),this.currentMatchRangeIndex=-1,this.consoleMessages=[],this.groupableMessages.clear(),this.groupableMessageTitle.clear(),this.sidebar.clear(),this.pendingSidebarMessages=[],this.updateMessageList(),this.hidePromptSuggestBox(),this.viewport.setStickToBottom(!0),this.linkifier.reset(),this.filter.clear(),this.requestResolver.clear(),this.consoleGroupStarts=[],e&&this.prompt.focus(),UI.ARIAUtils.alert(i18nString(UIStrings.consoleCleared))}handleContextMenuEvent(e){const t=new UI.ContextMenu.ContextMenu(e),s=e.target;if(s.isSelfOrDescendant(this.promptElement))return void t.show();const i=s.enclosingNodeOrSelfWithClass("console-message-wrapper"),o=i&&getMessageForElement(i),n=o?o.consoleMessage():null;if(n&&n.url){const e=i18nString(UIStrings.hideMessagesFromS,{PH1:new Common.ParsedURL.ParsedURL(n.url).displayName});t.headerSection().appendItem(e,this.filter.addMessageURLFilter.bind(this.filter,n.url))}if(t.defaultSection().appendAction("console.clear"),t.defaultSection().appendAction("console.clear.history"),t.saveSection().appendItem(i18nString(UIStrings.saveAs),this.saveConsole.bind(this)),this.element.hasSelection()&&t.clipboardSection().appendItem(i18nString(UIStrings.copyVisibleStyledSelection),this.viewport.copyWithStyles.bind(this.viewport)),n){const e=Logs.NetworkLog.NetworkLog.requestForConsoleMessage(n);e&&SDK.NetworkManager.NetworkManager.canReplayRequest(e)&&t.debugSection().appendItem(i18nString(UIStrings.replayXhr),SDK.NetworkManager.NetworkManager.replayRequest.bind(null,e))}t.show()}async saveConsole(){const e=SDK.TargetManager.TargetManager.instance().scopeTarget().inspectedURL(),t=Common.ParsedURL.ParsedURL.fromString(e),s=Platform.StringUtilities.sprintf("%s-%d.log",t?t.host:"console",Date.now()),i=new Bindings.FileUtils.FileOutputStream,o=new UI.ProgressIndicator.ProgressIndicator;o.setTitle(i18nString(UIStrings.writingFile)),o.setTotalWork(this.itemCount());if(!await i.open(s))return;this.progressToolbarItem.element.appendChild(o.element);let n=0;for(;n<this.itemCount()&&!o.isCanceled();){const e=[];let t;for(t=0;t<350&&t+n<this.itemCount();++t){const s=this.itemElement(n+t);e.push(s.toExportString())}n+=t,await i.write(e.join("\n")+"\n"),o.setWorked(n)}i.close(),o.done()}tryToCollapseMessages(e,t){return!(this.timestampsSetting.get()||!t||e.consoleMessage().isGroupMessage()||e.consoleMessage().type===SDK.ConsoleModel.FrontendMessageType.Command||e.consoleMessage().type===SDK.ConsoleModel.FrontendMessageType.Result||!e.consoleMessage().isEqual(t.consoleMessage()))&&(t.incrementRepeatCount(),e.isLastInSimilarGroup()&&t.setInSimilarGroup(!0,!0),!0)}buildHiddenCache(e,t){const s=Date.now();let i;for(i=e;i<t.length&&(this.computeShouldMessageBeVisible(t[i]),!(i%10==0&&Date.now()-s>12));++i);i!==t.length?this.buildHiddenCacheTimeout=this.element.window().requestAnimationFrame(this.buildHiddenCache.bind(this,i+1,t)):this.updateMessageList()}cancelBuildHiddenCache(){this.shouldBeHiddenCache.clear(),this.buildHiddenCacheTimeout&&(this.element.window().cancelAnimationFrame(this.buildHiddenCacheTimeout),delete this.buildHiddenCacheTimeout)}updateMessageList(){this.regexMatchRanges=[],this.hiddenByFilterCount=0;for(const e of this.visibleViewMessages)e.resetCloseGroupDecorationCount(),e.resetIncrementRepeatCount();if(this.visibleViewMessages=[],this.groupSimilarSetting.get())this.addGroupableMessagesToEnd();else for(const e of this.consoleMessages)e.setInSimilarGroup(!1),e.consoleMessage().isGroupable()&&e.clearConsoleGroup(),this.appendMessageToEnd(e,!0);this.updateFilterStatus(),this.searchableViewInternal.updateSearchMatchesCount(this.regexMatchRanges.length),this.viewport.invalidate(),this.messagesCountElement.setAttribute("aria-label",i18nString(UIStrings.filteredMessagesInConsole,{PH1:this.visibleViewMessages.length}))}addGroupableMessagesToEnd(){const e=new Set,t=new Set;for(const s of this.consoleMessages){const i=s.consoleMessage();if(e.has(i))continue;if(!i.isGroupable()){this.appendMessageToEnd(s),e.add(i);continue}const o=s.groupKey(),n=this.groupableMessages.get(o);if(!n||n.length<5){s.setInSimilarGroup(!1),this.appendMessageToEnd(s),e.add(i);continue}if(t.has(o))continue;if(!n.find((e=>this.shouldMessageBeVisible(e)))){Platform.SetUtilities.addAll(e,n),t.add(o);continue}let r=this.groupableMessageTitle.get(o);if(!r){const e=new SDK.ConsoleModel.ConsoleMessage(null,i.source,i.level,s.groupTitle(),{type:"startGroupCollapsed"});r=this.createViewMessage(e),this.groupableMessageTitle.set(o,r)}r.setRepeatCount(n.length),this.appendMessageToEnd(r);for(const t of n)t.setInSimilarGroup(!0,n[n.length-1]===t),t.setConsoleGroup(r),this.appendMessageToEnd(t,!0),e.add(t.consoleMessage());const a=new SDK.ConsoleModel.ConsoleMessage(null,i.source,i.level,i.messageText,{type:"endGroup"});this.appendMessageToEnd(this.createViewMessage(a))}}messagesClicked(e){const t=e.target;if(!this.messagesElement.hasSelection()){(t===this.messagesElement||this.prompt.belowEditorElement().isSelfOrAncestor(t))&&(this.prompt.moveCaretToEndOfPrompt(),this.focusPrompt())}}messagesKeyDown(e){const t=e;t.ctrlKey||t.altKey||t.metaKey||1!==t.key.length||UI.UIUtils.isEditing()||this.messagesElement.hasSelection()||(this.prompt.moveCaretToEndOfPrompt(),this.focusPrompt())}messagesPasted(e){Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.SELF_XSS_WARNING)&&!this.selfXssWarningDisabledSetting.get()&&(e.preventDefault(),this.prompt.showSelfXssWarning()),UI.UIUtils.isEditing()||this.prompt.focus()}registerShortcuts(){this.shortcuts.set(UI.KeyboardShortcut.KeyboardShortcut.makeKey("u",UI.KeyboardShortcut.Modifiers.Ctrl),this.clearPromptBackwards.bind(this))}clearPromptBackwards(){this.prompt.clear()}promptKeyDown(e){const t=e;if("PageUp"===t.key)return void this.updateStickToBottomOnWheel();const s=UI.KeyboardShortcut.KeyboardShortcut.makeKeyFromEvent(t),i=this.shortcuts.get(s);i&&(i(),t.preventDefault())}printResult(e,t,s){if(!e)return;const i=Boolean(s)?"error":"info";let o;o=s?SDK.ConsoleModel.ConsoleMessage.fromException(e.runtimeModel(),s,SDK.ConsoleModel.FrontendMessageType.Result,void 0,void 0):new SDK.ConsoleModel.ConsoleMessage(e.runtimeModel(),"javascript",i,"",{type:SDK.ConsoleModel.FrontendMessageType.Result,parameters:[e]}),o.setOriginatingMessage(t),e.runtimeModel().target().model(SDK.ConsoleModel.ConsoleModel)?.addMessage(o)}commandEvaluated(e){const{data:t}=e;this.prompt.history().pushHistoryItem(t.commandMessage.messageText),this.prompt.history().length()>=5&&!this.selfXssWarningDisabledSetting.get()&&this.selfXssWarningDisabledSetting.set(!0),this.printResult(t.result,t.commandMessage,t.exceptionDetails)}elementsToRestoreScrollPositionsFor(){return[this.messagesElement]}onSearchCanceled(){this.cleanupAfterSearch();for(const e of this.visibleViewMessages)e.setSearchRegex(null);this.currentMatchRangeIndex=-1,this.regexMatchRanges=[],this.searchRegex=null,this.viewport.refresh()}performSearch(e,t,s){this.onSearchCanceled(),this.searchableViewInternal.updateSearchMatchesCount(0),this.searchRegex=e.toSearchRegex(!0).regex,this.regexMatchRanges=[],this.currentMatchRangeIndex=-1,t&&(this.searchShouldJumpBackwards=Boolean(s)),this.searchProgressIndicator=new UI.ProgressIndicator.ProgressIndicator,this.searchProgressIndicator.setTitle(i18nString(UIStrings.searching)),this.searchProgressIndicator.setTotalWork(this.visibleViewMessages.length),this.progressToolbarItem.element.appendChild(this.searchProgressIndicator.element),this.innerSearch(0)}cleanupAfterSearch(){delete this.searchShouldJumpBackwards,this.innerSearchTimeoutId&&(clearTimeout(this.innerSearchTimeoutId),delete this.innerSearchTimeoutId),this.searchProgressIndicator&&(this.searchProgressIndicator.done(),delete this.searchProgressIndicator)}searchFinishedForTests(){}innerSearch(e){if(delete this.innerSearchTimeoutId,this.searchProgressIndicator&&this.searchProgressIndicator.isCanceled())return void this.cleanupAfterSearch();const t=Date.now();for(;e<this.visibleViewMessages.length&&Date.now()-t<100;++e)this.searchMessage(e);if(this.searchableViewInternal.updateSearchMatchesCount(this.regexMatchRanges.length),void 0!==this.searchShouldJumpBackwards&&this.regexMatchRanges.length&&(this.jumpToMatch(this.searchShouldJumpBackwards?-1:0),delete this.searchShouldJumpBackwards),e===this.visibleViewMessages.length)return this.cleanupAfterSearch(),void window.setTimeout(this.searchFinishedForTests.bind(this),0);this.innerSearchTimeoutId=window.setTimeout(this.innerSearch.bind(this,e),100),this.searchProgressIndicator&&this.searchProgressIndicator.setWorked(e)}searchMessage(e){const t=this.visibleViewMessages[e];t.setSearchRegex(this.searchRegex);for(let s=0;s<t.searchCount();++s)this.regexMatchRanges.push({messageIndex:e,matchIndex:s})}jumpToNextSearchResult(){this.jumpToMatch(this.currentMatchRangeIndex+1)}jumpToPreviousSearchResult(){this.jumpToMatch(this.currentMatchRangeIndex-1)}supportsCaseSensitiveSearch(){return!0}supportsRegexSearch(){return!0}jumpToMatch(e){if(!this.regexMatchRanges.length)return;let t;if(this.currentMatchRangeIndex>=0){t=this.regexMatchRanges[this.currentMatchRangeIndex];this.visibleViewMessages[t.messageIndex].searchHighlightNode(t.matchIndex).classList.remove(UI.UIUtils.highlightedCurrentSearchResultClassName)}e=Platform.NumberUtilities.mod(e,this.regexMatchRanges.length),this.currentMatchRangeIndex=e,this.searchableViewInternal.updateCurrentMatchIndex(e),t=this.regexMatchRanges[e];const s=this.visibleViewMessages[t.messageIndex].searchHighlightNode(t.matchIndex);s.classList.add(UI.UIUtils.highlightedCurrentSearchResultClassName),this.viewport.scrollItemIntoView(t.messageIndex),s.scrollIntoViewIfNeeded()}updateStickToBottomOnPointerDown(e){this.muteViewportUpdates=!e,this.viewport.setStickToBottom(!1),this.waitForScrollTimeout&&(clearTimeout(this.waitForScrollTimeout),delete this.waitForScrollTimeout)}updateStickToBottomOnPointerUp(){this.muteViewportUpdates&&(this.waitForScrollTimeout=window.setTimeout(function(){this.muteViewportUpdates=!1,this.isShowing()&&this.viewport.setStickToBottom(this.isScrolledToBottom());this.maybeDirtyWhileMuted&&(this.scheduleViewportRefresh(),delete this.maybeDirtyWhileMuted);delete this.waitForScrollTimeout,this.updateViewportStickinessForTest()}.bind(this),200))}updateViewportStickinessForTest(){}updateStickToBottomOnWheel(){this.updateStickToBottomOnPointerDown(),this.updateStickToBottomOnPointerUp()}promptTextChanged(){const e=this.viewport.stickToBottom(),t=this.isScrolledToBottom();this.viewport.setStickToBottom(t),t&&!e&&this.scheduleViewportRefresh(),this.promptTextChangedForTest()}promptTextChangedForTest(){}isScrolledToBottom(){return this.messagesElement.scrollHeight-this.messagesElement.scrollTop-this.messagesElement.clientHeight-this.prompt.belowEditorElement().offsetHeight<=2}}globalThis.Console=globalThis.Console||{},globalThis.Console.ConsoleView=ConsoleView;export class ConsoleViewFilter{filterChanged;messageLevelFiltersSetting;hideNetworkMessagesSetting;filterByExecutionContextSetting;suggestionBuilder;textFilterUI;textFilterSetting;filterParser;currentFilter;levelLabels;levelMenuButton;constructor(e){this.filterChanged=e,this.messageLevelFiltersSetting=ConsoleViewFilter.levelFilterSetting(),this.hideNetworkMessagesSetting=Common.Settings.Settings.instance().moduleSetting("hideNetworkMessages"),this.filterByExecutionContextSetting=Common.Settings.Settings.instance().moduleSetting("selectedContextFilterEnabled"),this.messageLevelFiltersSetting.addChangeListener(this.onFilterChanged.bind(this)),this.hideNetworkMessagesSetting.addChangeListener(this.onFilterChanged.bind(this)),this.filterByExecutionContextSetting.addChangeListener(this.onFilterChanged.bind(this)),UI.Context.Context.instance().addFlavorChangeListener(SDK.RuntimeModel.ExecutionContext,this.onFilterChanged,this);const t=Object.values(FilterType);this.suggestionBuilder=new UI.FilterSuggestionBuilder.FilterSuggestionBuilder(t),this.textFilterUI=new UI.Toolbar.ToolbarInput(i18nString(UIStrings.filter),"",1,1,i18nString(UIStrings.egEventdCdnUrlacom),this.suggestionBuilder.completions.bind(this.suggestionBuilder),!0),this.textFilterSetting=Common.Settings.Settings.instance().createSetting("console.textFilter",""),this.textFilterSetting.get()&&this.textFilterUI.setValue(this.textFilterSetting.get()),this.textFilterUI.addEventListener(UI.Toolbar.ToolbarInput.Event.TextChanged,(()=>{this.textFilterSetting.set(this.textFilterUI.value()),this.onFilterChanged()})),this.filterParser=new TextUtils.TextUtils.FilterParser(t),this.currentFilter=new ConsoleFilter("",[],null,this.messageLevelFiltersSetting.get()),this.updateCurrentFilter(),this.levelLabels=new Map([["verbose",i18nString(UIStrings.verbose)],["info",i18nString(UIStrings.info)],["warning",i18nString(UIStrings.warnings)],["error",i18nString(UIStrings.errors)]]),this.levelMenuButton=new UI.Toolbar.ToolbarButton(i18nString(UIStrings.logLevels)),this.levelMenuButton.turnIntoSelect(),this.levelMenuButton.addEventListener(UI.Toolbar.ToolbarButton.Events.Click,this.showLevelContextMenu.bind(this)),UI.ARIAUtils.markAsMenuButton(this.levelMenuButton.element),this.updateLevelMenuButtonText(),this.messageLevelFiltersSetting.addChangeListener(this.updateLevelMenuButtonText.bind(this))}onMessageAdded(e){e.type===SDK.ConsoleModel.FrontendMessageType.Command||e.type===SDK.ConsoleModel.FrontendMessageType.Result||e.isGroupMessage()||(e.context&&this.suggestionBuilder.addItem(FilterType.Context,e.context),e.source&&this.suggestionBuilder.addItem(FilterType.Source,e.source),e.url&&this.suggestionBuilder.addItem(FilterType.Url,e.url))}setLevelMenuOverridden(e){this.levelMenuButton.setEnabled(!e),e?this.levelMenuButton.setTitle(i18nString(UIStrings.overriddenByFilterSidebar)):this.updateLevelMenuButtonText()}static levelFilterSetting(){return Common.Settings.Settings.instance().createSetting("messageLevelFilters",ConsoleFilter.defaultLevelsFilterValue())}updateCurrentFilter(){const e=this.filterParser.parse(this.textFilterUI.value());this.hideNetworkMessagesSetting.get()&&e.push({key:FilterType.Source,text:"network",negative:!0,regex:void 0}),this.currentFilter.executionContext=this.filterByExecutionContextSetting.get()?UI.Context.Context.instance().flavor(SDK.RuntimeModel.ExecutionContext):null,this.currentFilter.parsedFilters=e,this.currentFilter.levelsMask=this.messageLevelFiltersSetting.get()}onFilterChanged(){this.updateCurrentFilter(),this.filterChanged()}updateLevelMenuButtonText(){let e=!0,t=!0;const s=ConsoleFilter.allLevelsFilterValue(),i=ConsoleFilter.defaultLevelsFilterValue();let o=null;const n=this.messageLevelFiltersSetting.get(),r={Verbose:"verbose",Info:"info",Warning:"warning",Error:"error"};for(const a of Object.values(r))e=e&&n[a]===s[a],t=t&&n[a]===i[a],n[a]&&(o=o?i18nString(UIStrings.customLevels):i18nString(UIStrings.sOnly,{PH1:String(this.levelLabels.get(a))}));o=e?i18nString(UIStrings.allLevels):t?i18nString(UIStrings.defaultLevels):o||i18nString(UIStrings.hideAll),this.levelMenuButton.element.classList.toggle("warning",!e&&!t),this.levelMenuButton.setText(o),this.levelMenuButton.setTitle(i18nString(UIStrings.logLevelS,{PH1:o}))}showLevelContextMenu(e){const t=e.data,s=this.messageLevelFiltersSetting,i=s.get(),o=new UI.ContextMenu.ContextMenu(t,{useSoftMenu:!0,x:this.levelMenuButton.element.getBoundingClientRect().left,y:this.levelMenuButton.element.getBoundingClientRect().top+this.levelMenuButton.element.offsetHeight});o.headerSection().appendItem(i18nString(UIStrings.default),(()=>s.set(ConsoleFilter.defaultLevelsFilterValue())));for(const[e,t]of this.levelLabels.entries())o.defaultSection().appendCheckboxItem(t,n.bind(null,e),i[e]);function n(e){i[e]=!i[e],s.set(i)}o.show()}addMessageURLFilter(e){if(!e)return;const t=this.textFilterUI.value()?` ${this.textFilterUI.value()}`:"";this.textFilterUI.setValue(`-url:${e}${t}`),this.textFilterSetting.set(this.textFilterUI.value()),this.onFilterChanged()}shouldBeVisible(e){return this.currentFilter.shouldBeVisible(e)}clear(){this.suggestionBuilder.clear()}reset(){this.messageLevelFiltersSetting.set(ConsoleFilter.defaultLevelsFilterValue()),this.filterByExecutionContextSetting.set(!1),this.hideNetworkMessagesSetting.set(!1),this.textFilterUI.setValue(""),this.onFilterChanged()}}let actionDelegateInstance;export class ActionDelegate{handleAction(e,t){switch(t){case"console.show":return Host.InspectorFrontendHost.InspectorFrontendHostInstance.bringToFront(),Common.Console.Console.instance().show(),ConsoleView.instance().focusPrompt(),!0;case"console.clear":return ConsoleView.clearConsole(),!0;case"console.clear.history":return ConsoleView.instance().clearHistory(),!0;case"console.create-pin":return ConsoleView.instance().pinPane.addPin("",!0),!0}return!1}static instance(e={forceNew:null}){const{forceNew:t}=e;return actionDelegateInstance&&!t||(actionDelegateInstance=new ActionDelegate),actionDelegateInstance}}const messagesSortedBySymbol=new WeakMap,consoleMessageToViewMessage=new WeakMap;