Migrates console/ to esm

Change-Id: I98fbb09aca094d5493923dd595c940f9f4bc9e85
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/1924206
Commit-Queue: Paul Lewis <[email protected]>
Reviewed-by: Tim van der Lippe <[email protected]>
diff --git a/front_end/console/ConsoleContextSelector.js b/front_end/console/ConsoleContextSelector.js
index afeaa34..ec2b4bf 100644
--- a/front_end/console/ConsoleContextSelector.js
+++ b/front_end/console/ConsoleContextSelector.js
@@ -5,7 +5,7 @@
  * @implements {SDK.SDKModelObserver<!SDK.RuntimeModel>}
  * @implements {UI.SoftDropDown.Delegate<!SDK.ExecutionContext>}
  */
-Console.ConsoleContextSelector = class {
+export default class ConsoleContextSelector {
   constructor() {
     /** @type {!UI.ListModel<!SDK.ExecutionContext>} */
     this._items = new UI.ListModel();
@@ -323,4 +323,15 @@
       }
     }
   }
-};
+}
+
+/* Legacy exported object */
+self.Console = self.Console || {};
+
+/* Legacy exported object */
+Console = Console || {};
+
+/**
+ * @constructor
+ */
+Console.ConsoleContextSelector = ConsoleContextSelector;
diff --git a/front_end/console/ConsoleFilter.js b/front_end/console/ConsoleFilter.js
index bb8b8a9..0bc2b61 100644
--- a/front_end/console/ConsoleFilter.js
+++ b/front_end/console/ConsoleFilter.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-Console.ConsoleFilter = class {
+export default class ConsoleFilter {
   /**
    * @param {string} name
    * @param {!Array<!TextUtils.FilterParser.ParsedFilter>} parsedFilters
@@ -86,12 +86,12 @@
         }
       } else {
         switch (filter.key) {
-          case Console.ConsoleFilter.FilterType.Context:
+          case FilterType.Context:
             if (!passesFilter(filter, message.context, false /* exactMatch */)) {
               return false;
             }
             break;
-          case Console.ConsoleFilter.FilterType.Source:
+          case FilterType.Source:
             const sourceNameForMessage = message.source ?
                 SDK.ConsoleMessage.MessageSourceDisplayName.get(
                     /** @type {!SDK.ConsoleMessage.MessageSource} */ (message.source)) :
@@ -100,7 +100,7 @@
               return false;
             }
             break;
-          case Console.ConsoleFilter.FilterType.Url:
+          case FilterType.Url:
             if (!passesFilter(filter, message.url, false /* exactMatch */)) {
               return false;
             }
@@ -134,11 +134,25 @@
       return true;
     }
   }
-};
+}
 
 /** @enum {string} */
-Console.ConsoleFilter.FilterType = {
+export const FilterType = {
   Context: 'context',
   Source: 'source',
   Url: 'url'
 };
+
+/* Legacy exported object */
+self.Console = self.Console || {};
+
+/* Legacy exported object */
+Console = Console || {};
+
+/**
+ * @constructor
+ */
+Console.ConsoleFilter = ConsoleFilter;
+
+/** @enum {string} */
+Console.ConsoleFilter.FilterType = FilterType;
diff --git a/front_end/console/ConsolePanel.js b/front_end/console/ConsolePanel.js
index c55d029..4807e8c 100644
--- a/front_end/console/ConsolePanel.js
+++ b/front_end/console/ConsolePanel.js
@@ -29,7 +29,7 @@
 /**
  * @unrestricted
  */
-Console.ConsolePanel = class extends UI.Panel {
+export default class ConsolePanel extends UI.Panel {
   constructor() {
     super('console');
     this._view = Console.ConsoleView.instance();
@@ -81,12 +81,12 @@
   searchableView() {
     return Console.ConsoleView.instance().searchableView();
   }
-};
+}
 
 /**
  * @unrestricted
  */
-Console.ConsolePanel.WrapperView = class extends UI.VBox {
+export class WrapperView extends UI.VBox {
   constructor() {
     super();
     this.element.classList.add('console-view-wrapper');
@@ -119,13 +119,13 @@
   _showViewInWrapper() {
     this._view.show(this.element);
   }
-};
+}
 
 /**
  * @implements {Common.Revealer}
  * @unrestricted
  */
-Console.ConsolePanel.ConsoleRevealer = class {
+export class ConsoleRevealer {
   /**
    * @override
    * @param {!Object} object
@@ -140,4 +140,25 @@
     UI.viewManager.showView('console-view');
     return Promise.resolve();
   }
-};
+}
+
+/* Legacy exported object */
+self.Console = self.Console || {};
+
+/* Legacy exported object */
+Console = Console || {};
+
+/**
+ * @constructor
+ */
+Console.ConsolePanel = ConsolePanel;
+
+/**
+ * @constructor
+ */
+Console.ConsolePanel.WrapperView = WrapperView;
+
+/**
+ * @implements {Common.Revealer}
+ */
+Console.ConsolePanel.ConsoleRevealer = ConsoleRevealer;
diff --git a/front_end/console/ConsolePinPane.js b/front_end/console/ConsolePinPane.js
index 2f7935f..db288ad 100644
--- a/front_end/console/ConsolePinPane.js
+++ b/front_end/console/ConsolePinPane.js
@@ -2,7 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-Console.ConsolePinPane = class extends UI.ThrottledWidget {
+const _PinSymbol = Symbol('pinSymbol');
+
+export default class ConsolePinPane extends UI.ThrottledWidget {
   /**
    * @param {!UI.ToolbarButton} liveExpressionButton
    */
@@ -45,7 +47,7 @@
     if (target) {
       const targetPinElement = target.enclosingNodeOrSelfWithClass('console-pin');
       if (targetPinElement) {
-        const targetPin = targetPinElement[Console.ConsolePin._PinSymbol];
+        const targetPin = targetPinElement[_PinSymbol];
         contextMenu.editSection().appendItem(ls`Edit expression`, targetPin.focus.bind(targetPin));
         contextMenu.editSection().appendItem(ls`Remove expression`, this._removePin.bind(this, targetPin));
         targetPin.appendToContextMenu(contextMenu);
@@ -76,7 +78,7 @@
    * @param {boolean=} userGesture
    */
   addPin(expression, userGesture) {
-    const pin = new Console.ConsolePin(expression, this);
+    const pin = new ConsolePin(expression, this);
     this.contentElement.appendChild(pin.element());
     this._pins.add(pin);
     this._savePins();
@@ -102,9 +104,12 @@
 
   _updatedForTest() {
   }
-};
+}
 
-Console.ConsolePin = class extends Common.Object {
+/**
+ * @unrestricted
+ */
+export class ConsolePin extends Common.Object {
   /**
    * @param {string} expression
    * @param {!Console.ConsolePinPane} pinPane
@@ -130,7 +135,7 @@
     this._pinPreview = fragment.$('preview');
     const nameElement = fragment.$('name');
     nameElement.title = expression;
-    this._pinElement[Console.ConsolePin._PinSymbol] = this;
+    this._pinElement[_PinSymbol] = this;
 
     /** @type {?SDK.RuntimeModel.EvaluationResult} */
     this._lastResult = null;
@@ -283,6 +288,22 @@
     const isError = result && result.exceptionDetails && !SDK.RuntimeModel.isSideEffectFailure(result);
     this._pinElement.classList.toggle('error-level', !!isError);
   }
-};
+}
 
-Console.ConsolePin._PinSymbol = Symbol('pinSymbol');
+/* Legacy exported object */
+self.Console = self.Console || {};
+
+/* Legacy exported object */
+Console = Console || {};
+
+/**
+ * @constructor
+ */
+Console.ConsolePinPane = ConsolePinPane;
+
+/**
+ * @constructor
+ */
+Console.ConsolePin = ConsolePin;
+
+Console.ConsolePin._PinSymbol = _PinSymbol;
diff --git a/front_end/console/ConsolePrompt.js b/front_end/console/ConsolePrompt.js
index 3be491f..836ca05 100644
--- a/front_end/console/ConsolePrompt.js
+++ b/front_end/console/ConsolePrompt.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-Console.ConsolePrompt = class extends UI.Widget {
+export default class ConsolePrompt extends UI.Widget {
   constructor() {
     super();
     this.registerRequiredCSS('console/consolePrompt.css');
@@ -103,7 +103,7 @@
       this._previewRequestForTest = this._textChangeThrottler.schedule(this._requestPreviewBound, asSoonAsPossible);
     }
     this._updatePromptIcon();
-    this.dispatchEventToListeners(Console.ConsolePrompt.Events.TextChanged);
+    this.dispatchEventToListeners(Events.TextChanged);
   }
 
   /**
@@ -175,7 +175,7 @@
     } else {
       this._initialText = text;
     }
-    this.dispatchEventToListeners(Console.ConsolePrompt.Events.TextChanged);
+    this.dispatchEventToListeners(Events.TextChanged);
   }
 
   /**
@@ -377,12 +377,12 @@
 
   _editorSetForTest() {
   }
-};
+}
 
 /**
  * @unrestricted
  */
-Console.ConsoleHistoryManager = class {
+export class ConsoleHistoryManager {
   constructor() {
     /**
      * @type {!Array.<string>}
@@ -472,8 +472,26 @@
   _currentHistoryItem() {
     return this._data[this._data.length - this._historyOffset];
   }
-};
+}
 
-Console.ConsolePrompt.Events = {
+export const Events = {
   TextChanged: Symbol('TextChanged')
 };
+
+/* Legacy exported object */
+self.Console = self.Console || {};
+
+/* Legacy exported object */
+Console = Console || {};
+
+/**
+ * @constructor
+ */
+Console.ConsolePrompt = ConsolePrompt;
+
+Console.ConsolePrompt.Events = Events;
+
+/**
+ * @constructor
+ */
+Console.ConsoleHistoryManager = ConsoleHistoryManager;
diff --git a/front_end/console/ConsoleSidebar.js b/front_end/console/ConsoleSidebar.js
index a403597..a02942b 100644
--- a/front_end/console/ConsoleSidebar.js
+++ b/front_end/console/ConsoleSidebar.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-Console.ConsoleSidebar = class extends UI.VBox {
+export default class ConsoleSidebar extends UI.VBox {
   constructor() {
     super(true);
     this.setMinimumSize(125, 0);
@@ -24,24 +24,23 @@
       negative: false
     }];
     this._appendGroup(
-        Console.ConsoleSidebar._groupName.All, [], Console.ConsoleFilter.allLevelsFilterValue(),
-        UI.Icon.create('mediumicon-list'), selectedFilterSetting);
-    this._appendGroup(
-        Console.ConsoleSidebar._groupName.ConsoleAPI, consoleAPIParsedFilters,
-        Console.ConsoleFilter.allLevelsFilterValue(), UI.Icon.create('mediumicon-account-circle'),
+        _groupName.All, [], Console.ConsoleFilter.allLevelsFilterValue(), UI.Icon.create('mediumicon-list'),
         selectedFilterSetting);
     this._appendGroup(
-        Console.ConsoleSidebar._groupName.Error, [], Console.ConsoleFilter.singleLevelMask(Levels.Error),
+        _groupName.ConsoleAPI, consoleAPIParsedFilters, Console.ConsoleFilter.allLevelsFilterValue(),
+        UI.Icon.create('mediumicon-account-circle'), selectedFilterSetting);
+    this._appendGroup(
+        _groupName.Error, [], Console.ConsoleFilter.singleLevelMask(Levels.Error),
         UI.Icon.create('mediumicon-error-circle'), selectedFilterSetting);
     this._appendGroup(
-        Console.ConsoleSidebar._groupName.Warning, [], Console.ConsoleFilter.singleLevelMask(Levels.Warning),
+        _groupName.Warning, [], Console.ConsoleFilter.singleLevelMask(Levels.Warning),
         UI.Icon.create('mediumicon-warning-triangle'), selectedFilterSetting);
     this._appendGroup(
-        Console.ConsoleSidebar._groupName.Info, [], Console.ConsoleFilter.singleLevelMask(Levels.Info),
+        _groupName.Info, [], Console.ConsoleFilter.singleLevelMask(Levels.Info),
         UI.Icon.create('mediumicon-info-circle'), selectedFilterSetting);
     this._appendGroup(
-        Console.ConsoleSidebar._groupName.Verbose, [], Console.ConsoleFilter.singleLevelMask(Levels.Verbose),
-        UI.Icon.create('mediumicon-bug'), selectedFilterSetting);
+        _groupName.Verbose, [], Console.ConsoleFilter.singleLevelMask(Levels.Verbose), UI.Icon.create('mediumicon-bug'),
+        selectedFilterSetting);
     const selectedTreeElementName = selectedFilterSetting.get();
     const defaultTreeElement =
         this._treeElements.find(x => x.name() === selectedTreeElementName) || this._treeElements[0];
@@ -57,7 +56,7 @@
    */
   _appendGroup(name, parsedFilters, levelsMask, icon, selectedFilterSetting) {
     const filter = new Console.ConsoleFilter(name, parsedFilters, null, levelsMask);
-    const treeElement = new Console.ConsoleSidebar.FilterTreeElement(filter, icon, selectedFilterSetting);
+    const treeElement = new FilterTreeElement(filter, icon, selectedFilterSetting);
     this._tree.appendChild(treeElement);
     this._treeElements.push(treeElement);
   }
@@ -93,16 +92,16 @@
    */
   _selectionChanged(event) {
     this._selectedTreeElement = /** @type {!UI.TreeElement} */ (event.data);
-    this.dispatchEventToListeners(Console.ConsoleSidebar.Events.FilterSelected);
+    this.dispatchEventToListeners(Events.FilterSelected);
   }
-};
+}
 
 /** @enum {symbol} */
-Console.ConsoleSidebar.Events = {
+export const Events = {
   FilterSelected: Symbol('FilterSelected')
 };
 
-Console.ConsoleSidebar.URLGroupTreeElement = class extends UI.TreeElement {
+export class URLGroupTreeElement extends UI.TreeElement {
   /**
    * @param {!Console.ConsoleFilter} filter
    */
@@ -119,9 +118,9 @@
     this._messageCount++;
     this._countElement.textContent = this._messageCount;
   }
-};
+}
 
-Console.ConsoleSidebar.FilterTreeElement = class extends UI.TreeElement {
+export class FilterTreeElement extends UI.TreeElement {
   /**
    * @param {!Console.ConsoleFilter} filter
    * @param {!Element} icon
@@ -164,12 +163,11 @@
 
   _updateCounter() {
     if (!this._messageCount) {
-      this.title = Console.ConsoleSidebar._groupNoMessageTitleMap.get(this._filter.name);
+      this.title = _groupNoMessageTitleMap.get(this._filter.name);
     } else if (this._messageCount === 1) {
-      this.title = Console.ConsoleSidebar._groupSingularTitleMap.get(this._filter.name);
+      this.title = _groupSingularTitleMap.get(this._filter.name);
     } else {
-      this.title =
-          String.sprintf(Console.ConsoleSidebar._groupPluralTitleMap.get(this._filter.name), this._messageCount);
+      this.title = String.sprintf(_groupPluralTitleMap.get(this._filter.name), this._messageCount);
     }
 
     this.setExpandable(!!this.childCount());
@@ -210,7 +208,7 @@
       filter.name = Common.UIString('<other>');
     }
     filter.parsedFilters.push({key: Console.ConsoleFilter.FilterType.Url, text: urlValue, negative: false});
-    child = new Console.ConsoleSidebar.URLGroupTreeElement(filter);
+    child = new URLGroupTreeElement(filter);
     if (urlValue) {
       child.tooltip = urlValue;
     }
@@ -218,10 +216,10 @@
     this.appendChild(child);
     return child;
   }
-};
+}
 
 /** @enum {string} */
-Console.ConsoleSidebar._groupName = {
+export const _groupName = {
   ConsoleAPI: 'user message',
   All: 'message',
   Error: 'error',
@@ -231,25 +229,55 @@
 };
 
 /** @const {!Map<string, string>} */
-Console.ConsoleSidebar._groupSingularTitleMap = new Map([
-  [Console.ConsoleSidebar._groupName.ConsoleAPI, ls`1 user message`],
-  [Console.ConsoleSidebar._groupName.All, ls`1 message`], [Console.ConsoleSidebar._groupName.Error, ls`1 error`],
-  [Console.ConsoleSidebar._groupName.Warning, ls`1 warning`], [Console.ConsoleSidebar._groupName.Info, ls`1 info`],
-  [Console.ConsoleSidebar._groupName.Verbose, ls`1 verbose`]
+export const _groupSingularTitleMap = new Map([
+  [_groupName.ConsoleAPI, ls`1 user message`], [_groupName.All, ls`1 message`], [_groupName.Error, ls`1 error`],
+  [_groupName.Warning, ls`1 warning`], [_groupName.Info, ls`1 info`], [_groupName.Verbose, ls`1 verbose`]
 ]);
 
 /** @const {!Map<string, string>} */
-Console.ConsoleSidebar._groupPluralTitleMap = new Map([
-  [Console.ConsoleSidebar._groupName.ConsoleAPI, ls`%d user messages`],
-  [Console.ConsoleSidebar._groupName.All, ls`%d messages`], [Console.ConsoleSidebar._groupName.Error, ls`%d errors`],
-  [Console.ConsoleSidebar._groupName.Warning, ls`%d warnings`], [Console.ConsoleSidebar._groupName.Info, ls`%d info`],
-  [Console.ConsoleSidebar._groupName.Verbose, ls`%d verbose`]
+export const _groupPluralTitleMap = new Map([
+  [_groupName.ConsoleAPI, ls`%d user messages`], [_groupName.All, ls`%d messages`], [_groupName.Error, ls`%d errors`],
+  [_groupName.Warning, ls`%d warnings`], [_groupName.Info, ls`%d info`], [_groupName.Verbose, ls`%d verbose`]
 ]);
 
 /** @const {!Map<string, string>} */
-Console.ConsoleSidebar._groupNoMessageTitleMap = new Map([
-  [Console.ConsoleSidebar._groupName.ConsoleAPI, ls`No user messages`],
-  [Console.ConsoleSidebar._groupName.All, ls`No messages`], [Console.ConsoleSidebar._groupName.Error, ls`No errors`],
-  [Console.ConsoleSidebar._groupName.Warning, ls`No warnings`], [Console.ConsoleSidebar._groupName.Info, ls`No info`],
-  [Console.ConsoleSidebar._groupName.Verbose, ls`No verbose`]
+export const _groupNoMessageTitleMap = new Map([
+  [_groupName.ConsoleAPI, ls`No user messages`], [_groupName.All, ls`No messages`], [_groupName.Error, ls`No errors`],
+  [_groupName.Warning, ls`No warnings`], [_groupName.Info, ls`No info`], [_groupName.Verbose, ls`No verbose`]
 ]);
+
+/* Legacy exported object */
+self.Console = self.Console || {};
+
+/* Legacy exported object */
+Console = Console || {};
+
+/**
+ * @constructor
+ */
+Console.ConsoleSidebar = ConsoleSidebar;
+
+/** @enum {symbol} */
+Console.ConsoleSidebar.Events = Events;
+
+/**
+ * @constructor
+ */
+Console.ConsoleSidebar.URLGroupTreeElement = URLGroupTreeElement;
+
+/**
+ * @constructor
+ */
+Console.ConsoleSidebar.FilterTreeElement = FilterTreeElement;
+
+/** @enum {string} */
+Console.ConsoleSidebar._groupName = _groupName;
+
+/** @const {!Map<string, string>} */
+Console.ConsoleSidebar._groupSingularTitleMap = _groupSingularTitleMap;
+
+/** @const {!Map<string, string>} */
+Console.ConsoleSidebar._groupPluralTitleMap = _groupPluralTitleMap;
+
+/** @const {!Map<string, string>} */
+Console.ConsoleSidebar._groupNoMessageTitleMap = _groupNoMessageTitleMap;
diff --git a/front_end/console/ConsoleView.js b/front_end/console/ConsoleView.js
index 2a333ff..dd1662f 100644
--- a/front_end/console/ConsoleView.js
+++ b/front_end/console/ConsoleView.js
@@ -31,7 +31,7 @@
  * @implements {Console.ConsoleViewportProvider}
  * @unrestricted
  */
-Console.ConsoleView = class extends UI.VBox {
+export default class ConsoleView extends UI.VBox {
   constructor() {
     super();
     this.setMinimumSize(0, 35);
@@ -45,7 +45,7 @@
     this._sidebar = new Console.ConsoleSidebar();
     this._sidebar.addEventListener(Console.ConsoleSidebar.Events.FilterSelected, this._onFilterChanged.bind(this));
     this._isSidebarOpen = false;
-    this._filter = new Console.ConsoleViewFilter(this._onFilterChanged.bind(this));
+    this._filter = new ConsoleViewFilter(this._onFilterChanged.bind(this));
 
     const consoleToolbarContainer = this.element.createChild('div', 'console-toolbar-container');
     this._splitWidget =
@@ -184,7 +184,7 @@
     this._pendingBatchResize = false;
     this._onMessageResizedBound = this._onMessageResized.bind(this);
 
-    this._topGroup = Console.ConsoleGroup.createTopGroup();
+    this._topGroup = ConsoleGroup.createTopGroup();
     this._currentGroup = this._topGroup;
 
     this._promptElement = this._messagesElement.createChild('div', 'source-code');
@@ -253,10 +253,10 @@
    * @return {!Console.ConsoleView}
    */
   static instance() {
-    if (!Console.ConsoleView._instance) {
-      Console.ConsoleView._instance = new Console.ConsoleView();
+    if (!ConsoleView._instance) {
+      ConsoleView._instance = new ConsoleView();
     }
-    return Console.ConsoleView._instance;
+    return ConsoleView._instance;
   }
 
   static clearConsole() {
@@ -508,10 +508,9 @@
     if (message.type === SDK.ConsoleMessage.MessageType.Command ||
         message.type === SDK.ConsoleMessage.MessageType.Result) {
       const lastMessage = this._consoleMessages.peekLast();
-      viewMessage[Console.ConsoleView._messageSortingTimeSymbol] =
-          lastMessage ? lastMessage[Console.ConsoleView._messageSortingTimeSymbol] : 0;
+      viewMessage[_messageSortingTimeSymbol] = lastMessage ? lastMessage[_messageSortingTimeSymbol] : 0;
     } else {
-      viewMessage[Console.ConsoleView._messageSortingTimeSymbol] = viewMessage.consoleMessage().timestamp;
+      viewMessage[_messageSortingTimeSymbol] = viewMessage.consoleMessage().timestamp;
     }
 
     let insertAt;
@@ -557,8 +556,7 @@
      * @param {!Console.ConsoleViewMessage} viewMessage2
      */
     function timeComparator(viewMessage1, viewMessage2) {
-      return viewMessage1[Console.ConsoleView._messageSortingTimeSymbol] -
-          viewMessage2[Console.ConsoleView._messageSortingTimeSymbol];
+      return viewMessage1[_messageSortingTimeSymbol] - viewMessage2[_messageSortingTimeSymbol];
     }
   }
 
@@ -634,7 +632,7 @@
     }
 
     if (viewMessage.consoleMessage().isGroupStartMessage()) {
-      this._currentGroup = new Console.ConsoleGroup(this._currentGroup, viewMessage);
+      this._currentGroup = new ConsoleGroup(this._currentGroup, viewMessage);
     }
 
     this._messageAppendedForTests();
@@ -652,9 +650,9 @@
     const nestingLevel = this._currentGroup.nestingLevel();
     switch (message.type) {
       case SDK.ConsoleMessage.MessageType.Command:
-        return new Console.ConsoleCommand(message, this._linkifier, nestingLevel, this._onMessageResizedBound);
+        return new ConsoleCommand(message, this._linkifier, nestingLevel, this._onMessageResizedBound);
       case SDK.ConsoleMessage.MessageType.Result:
-        return new Console.ConsoleCommandResult(message, this._linkifier, nestingLevel, this._onMessageResizedBound);
+        return new ConsoleCommandResult(message, this._linkifier, nestingLevel, this._onMessageResizedBound);
       case SDK.ConsoleMessage.MessageType.StartGroupCollapsed:
       case SDK.ConsoleMessage.MessageType.StartGroup:
         return new Console.ConsoleGroupViewMessage(
@@ -760,7 +758,7 @@
       const messageContents = [];
       let i;
       for (i = 0; i < chunkSize && i + messageIndex < this.itemCount(); ++i) {
-        const message = this.itemElement(messageIndex + i);
+        const message = /** @type {!Console.ConsoleViewMessage} */ (this.itemElement(messageIndex + i));
         messageContents.push(message.toExportString());
       }
       messageIndex += i;
@@ -824,7 +822,7 @@
   }
 
   _updateMessageList() {
-    this._topGroup = Console.ConsoleGroup.createTopGroup();
+    this._topGroup = ConsoleGroup.createTopGroup();
     this._currentGroup = this._topGroup;
     this._regexMatchRanges = [];
     this._hiddenByFilterCount = 0;
@@ -1006,8 +1004,7 @@
         /** @type {{result: ?SDK.RemoteObject, commandMessage: !SDK.ConsoleMessage, exceptionDetails: (!Protocol.Runtime.ExceptionDetails|undefined)}} */
         (event.data);
     this._prompt.history().pushHistoryItem(data.commandMessage.messageText);
-    this._consoleHistorySetting.set(
-        this._prompt.history().historyData().slice(-Console.ConsoleView.persistedHistorySize));
+    this._consoleHistorySetting.set(this._prompt.history().historyData().slice(-persistedHistorySize));
     this._printResult(data.result, data.commandMessage, data.exceptionDetails);
   }
 
@@ -1245,18 +1242,21 @@
         this._messagesElement.clientHeight - this._prompt.belowEditorElement().offsetHeight;
     return distanceToPromptEditorBottom <= 2;
   }
-};
+}
 
-Console.ConsoleView.persistedHistorySize = 300;
+export const persistedHistorySize = 300;
 
-Console.ConsoleViewFilter = class {
+/**
+ * @unrestricted
+ */
+export class ConsoleViewFilter {
   /**
    * @param {function()} filterChangedCallback
    */
   constructor(filterChangedCallback) {
     this._filterChanged = filterChangedCallback;
 
-    this._messageLevelFiltersSetting = Console.ConsoleViewFilter.levelFilterSetting();
+    this._messageLevelFiltersSetting = ConsoleViewFilter.levelFilterSetting();
     this._hideNetworkMessagesSetting = Common.moduleSetting('hideNetworkMessages');
     this._filterByExecutionContextSetting = Common.moduleSetting('selectedContextFilterEnabled');
 
@@ -1431,12 +1431,12 @@
     this._textFilterUI.setValue('');
     this._onFilterChanged();
   }
-};
+}
 
 /**
  * @unrestricted
  */
-Console.ConsoleCommand = class extends Console.ConsoleViewMessage {
+export class ConsoleCommand extends Console.ConsoleViewMessage {
   /**
    * @override
    * @return {!Element}
@@ -1453,7 +1453,7 @@
       this._formattedCommand.textContent = this.text.replaceControlCharacters();
       this._contentElement.appendChild(this._formattedCommand);
 
-      if (this._formattedCommand.textContent.length < Console.ConsoleCommand.MaxLengthToIgnoreHighlighter) {
+      if (this._formattedCommand.textContent.length < ConsoleCommand.MaxLengthToIgnoreHighlighter) {
         const javascriptSyntaxHighlighter = new UI.SyntaxHighlighter('text/javascript', true);
         javascriptSyntaxHighlighter.syntaxHighlightNode(this._formattedCommand).then(this._updateSearch.bind(this));
       } else {
@@ -1468,16 +1468,12 @@
   _updateSearch() {
     this.setSearchRegex(this.searchRegex());
   }
-};
+}
 
 /**
- * The maximum length before strings are considered too long for syntax highlighting.
- * @const
- * @type {number}
+ * @unrestricted
  */
-Console.ConsoleCommand.MaxLengthToIgnoreHighlighter = 10000;
-
-Console.ConsoleCommandResult = class extends Console.ConsoleViewMessage {
+export class ConsoleCommandResult extends Console.ConsoleViewMessage {
   /**
    * @override
    * @return {!Element}
@@ -1493,9 +1489,12 @@
     }
     return element;
   }
-};
+}
 
-Console.ConsoleGroup = class {
+/**
+ * @unrestricted
+ */
+export class ConsoleGroup {
   /**
    * @param {?Console.ConsoleGroup} parentGroup
    * @param {?Console.ConsoleViewMessage} groupMessage
@@ -1511,7 +1510,7 @@
    * @return {!Console.ConsoleGroup}
    */
   static createTopGroup() {
-    return new Console.ConsoleGroup(null, null);
+    return new ConsoleGroup(null, null);
   }
 
   /**
@@ -1534,12 +1533,12 @@
   parentGroup() {
     return this._parentGroup;
   }
-};
+}
 
 /**
  * @implements {UI.ActionDelegate}
  */
-Console.ConsoleView.ActionDelegate = class {
+export class ActionDelegate {
   /**
    * @override
    * @param {!UI.Context} context
@@ -1551,26 +1550,73 @@
       case 'console.show':
         Host.InspectorFrontendHost.bringToFront();
         Common.console.show();
-        Console.ConsoleView.instance()._focusPrompt();
+        ConsoleView.instance()._focusPrompt();
         return true;
       case 'console.clear':
-        Console.ConsoleView.clearConsole();
+        ConsoleView.clearConsole();
         return true;
       case 'console.clear.history':
-        Console.ConsoleView.instance()._clearHistory();
+        ConsoleView.instance()._clearHistory();
         return true;
       case 'console.create-pin':
-        Console.ConsoleView.instance()._pinPane.addPin('', true /* userGesture */);
+        ConsoleView.instance()._pinPane.addPin('', true /* userGesture */);
         return true;
     }
     return false;
   }
-};
+}
+
+/** @type {symbol} */
+export const _messageSortingTimeSymbol = Symbol('messageSortingTime');
+
+/* Legacy exported object */
+self.Console = self.Console || {};
+
+/* Legacy exported object */
+Console = Console || {};
+
+/**
+ * @constructor
+ */
+Console.ConsoleView = ConsoleView;
+Console.ConsoleView.persistedHistorySize = persistedHistorySize;
 
 /**
  * @typedef {{messageIndex: number, matchIndex: number}}
  */
 Console.ConsoleView.RegexMatchRange;
 
+/**
+ * @implements {UI.ActionDelegate}
+ */
+Console.ConsoleView.ActionDelegate = ActionDelegate;
+
 /** @type {symbol} */
-Console.ConsoleView._messageSortingTimeSymbol = Symbol('messageSortingTime');
+Console.ConsoleView._messageSortingTimeSymbol = _messageSortingTimeSymbol;
+
+/**
+ * @constructor
+ */
+Console.ConsoleViewFilter = ConsoleViewFilter;
+
+/**
+ * @constructor
+ */
+Console.ConsoleCommand = ConsoleCommand;
+
+/**
+ * The maximum length before strings are considered too long for syntax highlighting.
+ * @const
+ * @type {number}
+ */
+Console.ConsoleCommand.MaxLengthToIgnoreHighlighter = 10000;
+
+/**
+ * @constructor
+ */
+Console.ConsoleCommandResult = ConsoleCommandResult;
+
+/**
+ * @constructor
+ */
+Console.ConsoleGroup = ConsoleGroup;
diff --git a/front_end/console/ConsoleViewMessage.js b/front_end/console/ConsoleViewMessage.js
index db81899..32fd9a8 100644
--- a/front_end/console/ConsoleViewMessage.js
+++ b/front_end/console/ConsoleViewMessage.js
@@ -31,7 +31,7 @@
  * @implements {Console.ConsoleViewportElement}
  * @unrestricted
  */
-Console.ConsoleViewMessage = class {
+export default class ConsoleViewMessage {
   /**
    * @param {!SDK.ConsoleMessage} consoleMessage
    * @param {!Components.Linkifier} linkifier
@@ -1681,12 +1681,12 @@
     }, '');
     return result.replace(/[%]o/g, '');
   }
-};
+}
 
 /**
  * @unrestricted
  */
-Console.ConsoleGroupViewMessage = class extends Console.ConsoleViewMessage {
+export class ConsoleGroupViewMessage extends ConsoleViewMessage {
   /**
    * @param {!SDK.ConsoleMessage} consoleMessage
    * @param {!Components.Linkifier} linkifier
@@ -1766,14 +1766,39 @@
       this._repeatCountElement.insertBefore(this._expandGroupIcon, this._repeatCountElement.firstChild);
     }
   }
-};
+}
 
 /**
  * @const
  * @type {number}
  */
-Console.ConsoleViewMessage.MaxLengthForLinks = 40;
+export const MaxLengthForLinks = 40;
 
-Console.ConsoleViewMessage._MaxTokenizableStringLength = 10000;
+export const _MaxTokenizableStringLength = 10000;
+export const _LongStringVisibleLength = 5000;
 
-Console.ConsoleViewMessage._LongStringVisibleLength = 5000;
+/* Legacy exported object */
+self.Console = self.Console || {};
+
+/* Legacy exported object */
+Console = Console || {};
+
+/**
+ * @implements {Console.ConsoleViewportElement}
+ * @unrestricted
+ * @constructor
+ */
+Console.ConsoleViewMessage = ConsoleViewMessage;
+
+/**
+ * @constructor
+ */
+Console.ConsoleGroupViewMessage = ConsoleGroupViewMessage;
+
+/**
+ * @const
+ * @type {number}
+ */
+Console.ConsoleViewMessage.MaxLengthForLinks = MaxLengthForLinks;
+Console.ConsoleViewMessage._MaxTokenizableStringLength = _MaxTokenizableStringLength;
+Console.ConsoleViewMessage._LongStringVisibleLength = _LongStringVisibleLength;
diff --git a/front_end/console/ConsoleViewport.js b/front_end/console/ConsoleViewport.js
index 72c9945..b94dceb 100644
--- a/front_end/console/ConsoleViewport.js
+++ b/front_end/console/ConsoleViewport.js
@@ -31,7 +31,7 @@
 /**
  * @unrestricted
  */
-Console.ConsoleViewport = class {
+export default class ConsoleViewport {
   /**
    * @param {!Console.ConsoleViewportProvider} provider
    */
@@ -762,35 +762,33 @@
     // Use offsetHeight instead of clientHeight to avoid being affected by horizontal scroll.
     return this.element.offsetHeight;
   }
-};
+}
 
 /**
  * @interface
  */
-Console.ConsoleViewportProvider = function() {};
-
-Console.ConsoleViewportProvider.prototype = {
+class ConsoleViewportProvider {
   /**
    * @param {number} index
    * @return {number}
    */
   fastHeight(index) {
     return 0;
-  },
+  }
 
   /**
    * @return {number}
    */
   itemCount() {
     return 0;
-  },
+  }
 
   /**
    * @return {number}
    */
   minimumRowHeight() {
     return 0;
-  },
+  }
 
   /**
    * @param {number} index
@@ -799,19 +797,42 @@
   itemElement(index) {
     return null;
   }
-};
+}
 
 /**
  * @interface
  */
-Console.ConsoleViewportElement = function() {};
-Console.ConsoleViewportElement.prototype = {
-  willHide() {},
+export class ConsoleViewportElement {
+  willHide() {
+  }
 
-  wasShown() {},
+  wasShown() {
+  }
 
   /**
    * @return {!Element}
    */
-  element() {},
-};
+  element() {
+  }
+}
+
+/* Legacy exported object */
+self.Console = self.Console || {};
+
+/* Legacy exported object */
+Console = Console || {};
+
+/**
+ * @constructor
+ */
+Console.ConsoleViewport = ConsoleViewport;
+
+/**
+ * @interface
+ */
+Console.ConsoleViewportProvider = ConsoleViewportProvider;
+
+/**
+ * @interface
+ */
+Console.ConsoleViewportElement = ConsoleViewportElement;
diff --git a/front_end/console/console.js b/front_end/console/console.js
new file mode 100644
index 0000000..470b2ba
--- /dev/null
+++ b/front_end/console/console.js
@@ -0,0 +1,35 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import './ConsoleContextSelector.js';
+import './ConsoleFilter.js';
+import './ConsolePinPane.js';
+import './ConsoleSidebar.js';
+import './ConsoleViewport.js';
+import './ConsoleViewMessage.js';
+import './ConsolePrompt.js';
+import './ConsoleView.js';
+import './ConsolePanel.js';
+
+import * as ConsoleContextSelector from './ConsoleContextSelector.js';
+import * as ConsoleFilter from './ConsoleFilter.js';
+import * as ConsolePanel from './ConsolePanel.js';
+import * as ConsolePinPane from './ConsolePinPane.js';
+import * as ConsolePrompt from './ConsolePrompt.js';
+import * as ConsoleSidebar from './ConsoleSidebar.js';
+import * as ConsoleView from './ConsoleView.js';
+import * as ConsoleViewMessage from './ConsoleViewMessage.js';
+import * as ConsoleViewport from './ConsoleViewport.js';
+
+export {
+  ConsoleContextSelector,
+  ConsoleFilter,
+  ConsolePanel,
+  ConsolePinPane,
+  ConsolePrompt,
+  ConsoleSidebar,
+  ConsoleView,
+  ConsoleViewMessage,
+  ConsoleViewport,
+};
diff --git a/front_end/console/module.json b/front_end/console/module.json
index f1299f0..fea55a5 100644
--- a/front_end/console/module.json
+++ b/front_end/console/module.json
@@ -213,7 +213,8 @@
         "sdk",
         "formatter"
     ],
-    "scripts": [
+    "scripts": [],
+    "modules": [
         "ConsoleContextSelector.js",
         "ConsoleFilter.js",
         "ConsolePinPane.js",