@deephaven/console 0.22.3-deep-bot-test.14 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/Console.d.ts +3 -3
  2. package/dist/Console.d.ts.map +1 -1
  3. package/dist/Console.js +9 -114
  4. package/dist/Console.js.map +1 -1
  5. package/dist/ConsoleInput.js +14 -90
  6. package/dist/ConsoleInput.js.map +1 -1
  7. package/dist/ConsoleMenu.js +6 -25
  8. package/dist/ConsoleMenu.js.map +1 -1
  9. package/dist/ConsolePropTypes.js.map +1 -1
  10. package/dist/ConsoleShortcuts.js +1 -1
  11. package/dist/ConsoleShortcuts.js.map +1 -1
  12. package/dist/ConsoleStatusBar.js +0 -16
  13. package/dist/ConsoleStatusBar.js.map +1 -1
  14. package/dist/HeapUsage.d.ts +1 -1
  15. package/dist/HeapUsage.d.ts.map +1 -1
  16. package/dist/HeapUsage.js +2 -18
  17. package/dist/HeapUsage.js.map +1 -1
  18. package/dist/StoragePropTypes.js.map +1 -1
  19. package/dist/command-history/CommandHistory.d.ts +1 -1
  20. package/dist/command-history/CommandHistory.d.ts.map +1 -1
  21. package/dist/command-history/CommandHistory.js +1 -49
  22. package/dist/command-history/CommandHistory.js.map +1 -1
  23. package/dist/command-history/CommandHistoryActions.js +0 -6
  24. package/dist/command-history/CommandHistoryActions.js.map +1 -1
  25. package/dist/command-history/CommandHistoryItem.d.ts +4 -4
  26. package/dist/command-history/CommandHistoryItem.d.ts.map +1 -1
  27. package/dist/command-history/CommandHistoryItem.js +3 -6
  28. package/dist/command-history/CommandHistoryItem.js.map +1 -1
  29. package/dist/command-history/CommandHistoryItemTooltip.d.ts +1 -1
  30. package/dist/command-history/CommandHistoryItemTooltip.d.ts.map +1 -1
  31. package/dist/command-history/CommandHistoryItemTooltip.js +3 -28
  32. package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -1
  33. package/dist/command-history/CommandHistoryTypes.d.ts +2 -2
  34. package/dist/command-history/CommandHistoryTypes.d.ts.map +1 -1
  35. package/dist/command-history/CommandHistoryViewportUpdater.d.ts +1 -1
  36. package/dist/command-history/CommandHistoryViewportUpdater.d.ts.map +1 -1
  37. package/dist/command-history/CommandHistoryViewportUpdater.js +0 -3
  38. package/dist/command-history/CommandHistoryViewportUpdater.js.map +1 -1
  39. package/dist/command-history/index.js.map +1 -1
  40. package/dist/common/Code.js +2 -11
  41. package/dist/common/Code.js.map +1 -1
  42. package/dist/common/ConsoleConstants.js +0 -2
  43. package/dist/common/ConsoleConstants.js.map +1 -1
  44. package/dist/common/ConsoleUtils.js +4 -19
  45. package/dist/common/ConsoleUtils.js.map +1 -1
  46. package/dist/common/ObjectIcon.d.ts +2 -2
  47. package/dist/common/ObjectIcon.d.ts.map +1 -1
  48. package/dist/common/ObjectIcon.js +2 -8
  49. package/dist/common/ObjectIcon.js.map +1 -1
  50. package/dist/common/index.js.map +1 -1
  51. package/dist/console-history/ConsoleHistory.js +0 -8
  52. package/dist/console-history/ConsoleHistory.js.map +1 -1
  53. package/dist/console-history/ConsoleHistoryItem.js +2 -25
  54. package/dist/console-history/ConsoleHistoryItem.js.map +1 -1
  55. package/dist/console-history/ConsoleHistoryItemResult.d.ts +7 -7
  56. package/dist/console-history/ConsoleHistoryItemResult.d.ts.map +1 -1
  57. package/dist/console-history/ConsoleHistoryItemResult.js +2 -4
  58. package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -1
  59. package/dist/console-history/ConsoleHistoryResultErrorMessage.js +0 -22
  60. package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -1
  61. package/dist/console-history/ConsoleHistoryResultInProgress.js +0 -13
  62. package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -1
  63. package/dist/console-history/ConsoleHistoryTypes.d.ts +1 -1
  64. package/dist/console-history/ConsoleHistoryTypes.d.ts.map +1 -1
  65. package/dist/console-history/index.js.map +1 -1
  66. package/dist/csv/CsvFormats.d.ts +1 -1
  67. package/dist/csv/CsvFormats.d.ts.map +1 -1
  68. package/dist/csv/CsvFormats.js +0 -9
  69. package/dist/csv/CsvFormats.js.map +1 -1
  70. package/dist/csv/CsvInputBar.js +18 -51
  71. package/dist/csv/CsvInputBar.js.map +1 -1
  72. package/dist/csv/CsvOverlay.d.ts +2 -2
  73. package/dist/csv/CsvOverlay.d.ts.map +1 -1
  74. package/dist/csv/CsvOverlay.js +1 -41
  75. package/dist/csv/CsvOverlay.js.map +1 -1
  76. package/dist/csv/CsvParser.js +10 -73
  77. package/dist/csv/CsvParser.js.map +1 -1
  78. package/dist/csv/CsvTypeParser.js +15 -85
  79. package/dist/csv/CsvTypeParser.js.map +1 -1
  80. package/dist/csv/NewTableColumnTypes.js +0 -9
  81. package/dist/csv/NewTableColumnTypes.js.map +1 -1
  82. package/dist/index.d.ts +3 -2
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +3 -2
  85. package/dist/index.js.map +1 -1
  86. package/dist/log/LogLevel.d.ts +8 -8
  87. package/dist/log/LogLevel.js.map +1 -1
  88. package/dist/log/LogLevelMenuItem.js +0 -5
  89. package/dist/log/LogLevelMenuItem.js.map +1 -1
  90. package/dist/log/LogView.d.ts +2 -2
  91. package/dist/log/LogView.d.ts.map +1 -1
  92. package/dist/log/LogView.js +21 -108
  93. package/dist/log/LogView.js.map +1 -1
  94. package/dist/monaco/MonacoCompletionProvider.js +2 -14
  95. package/dist/monaco/MonacoCompletionProvider.js.map +1 -1
  96. package/dist/monaco/MonacoUtils.d.ts.map +1 -1
  97. package/dist/monaco/MonacoUtils.js +21 -49
  98. package/dist/monaco/MonacoUtils.js.map +1 -1
  99. package/dist/monaco/index.js.map +1 -1
  100. package/dist/monaco/lang/Language.d.ts +1 -1
  101. package/dist/monaco/lang/Language.d.ts.map +1 -1
  102. package/dist/monaco/lang/db.d.ts.map +1 -1
  103. package/dist/monaco/lang/db.js +22 -13
  104. package/dist/monaco/lang/db.js.map +1 -1
  105. package/dist/monaco/lang/groovy.d.ts.map +1 -1
  106. package/dist/monaco/lang/groovy.js +28 -15
  107. package/dist/monaco/lang/groovy.js.map +1 -1
  108. package/dist/monaco/lang/log.js +1 -0
  109. package/dist/monaco/lang/log.js.map +1 -1
  110. package/dist/monaco/lang/python.d.ts.map +1 -1
  111. package/dist/monaco/lang/python.js +30 -16
  112. package/dist/monaco/lang/python.js.map +1 -1
  113. package/dist/monaco/lang/scala.js +26 -13
  114. package/dist/monaco/lang/scala.js.map +1 -1
  115. package/dist/notebook/Editor.js +2 -21
  116. package/dist/notebook/Editor.js.map +1 -1
  117. package/dist/notebook/ScriptEditor.d.ts +1 -1
  118. package/dist/notebook/ScriptEditor.d.ts.map +1 -1
  119. package/dist/notebook/ScriptEditor.js +0 -57
  120. package/dist/notebook/ScriptEditor.js.map +1 -1
  121. package/dist/notebook/ScriptEditorUtils.js +1 -7
  122. package/dist/notebook/ScriptEditorUtils.js.map +1 -1
  123. package/package.json +11 -11
@@ -1,9 +1,6 @@
1
1
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
-
3
2
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
-
5
3
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
-
7
4
  import React, { PureComponent } from 'react';
8
5
  import { Button, DropdownMenu } from '@deephaven/components';
9
6
  import { vsGear, dhTrashUndo } from '@deephaven/icons';
@@ -13,7 +10,6 @@ import ConsoleUtils from "../common/ConsoleUtils.js";
13
10
  import LogLevel from "./LogLevel.js";
14
11
  import "./LogView.css";
15
12
  import LogLevelMenuItem from "./LogLevelMenuItem.js";
16
-
17
13
  /**
18
14
  * Log view contents. Uses a monaco editor to display/search the contents of the log.
19
15
  */
@@ -21,29 +17,21 @@ class LogView extends PureComponent {
21
17
  /** ms to buffer log messages before processing them */
22
18
 
23
19
  /** Maximum number of messages to store in the log */
20
+
24
21
  static getLogText(logItem) {
25
22
  var date = new Date(logItem.micros / 1000);
26
23
  var timestamp = ConsoleUtils.formatTimestamp(date);
27
24
  return "".concat(timestamp, " ").concat(logItem.logLevel, " ").concat(logItem.message);
28
25
  }
29
-
30
26
  constructor(props) {
31
27
  super(props);
32
-
33
28
  _defineProperty(this, "cancelListener", void 0);
34
-
35
29
  _defineProperty(this, "editor", void 0);
36
-
37
30
  _defineProperty(this, "editorContainer", void 0);
38
-
39
31
  _defineProperty(this, "logLevelMenuItems", void 0);
40
-
41
32
  _defineProperty(this, "flushTimer", void 0);
42
-
43
33
  _defineProperty(this, "bufferedMessages", void 0);
44
-
45
34
  _defineProperty(this, "messages", void 0);
46
-
47
35
  this.handleClearClick = this.handleClearClick.bind(this);
48
36
  this.handleFlushTimeout = this.handleFlushTimeout.bind(this);
49
37
  this.handleLogMessage = this.handleLogMessage.bind(this);
@@ -59,46 +47,38 @@ class LogView extends PureComponent {
59
47
  shownLogLevels: {}
60
48
  };
61
49
  }
62
-
63
50
  componentDidMount() {
64
51
  this.resetLogLevels();
65
52
  this.initMonaco();
66
53
  this.startListening();
67
54
  window.addEventListener('resize', this.handleResize);
68
55
  }
69
-
70
56
  componentDidUpdate(prevProps, prevState) {
71
57
  this.updateDimensions();
72
58
  var {
73
59
  shownLogLevels
74
60
  } = this.state;
75
-
76
61
  if (prevState.shownLogLevels !== shownLogLevels) {
77
62
  this.refreshLogText();
78
63
  }
79
-
80
64
  var {
81
65
  session
82
66
  } = this.props;
83
-
84
67
  if (prevProps.session !== session) {
85
68
  this.stopListening();
86
- this.startListening(); // clear logs when starting a new console
87
-
69
+ this.startListening();
70
+ // clear logs when starting a new console
88
71
  this.clearLogs();
89
72
  }
90
73
  }
91
-
92
74
  componentWillUnmount() {
93
75
  this.stopFlushTimer();
94
76
  this.stopListening();
95
77
  this.destroyMonaco();
96
78
  window.removeEventListener('resize', this.handleResize);
97
79
  }
98
-
99
80
  getMenuActions(shownLogLevels) {
100
81
  var _this = this;
101
-
102
82
  var actions = [];
103
83
  actions.push({
104
84
  menuElement: /*#__PURE__*/React.createElement("div", {
@@ -107,7 +87,6 @@ class LogView extends PureComponent {
107
87
  group: 1,
108
88
  order: 10
109
89
  });
110
-
111
90
  var _loop = function _loop(i) {
112
91
  var logLevel = LogView.AllLogLevels[i];
113
92
  var on = shownLogLevels[logLevel] != null ? shownLogLevels[logLevel] : false;
@@ -127,11 +106,9 @@ class LogView extends PureComponent {
127
106
  })
128
107
  });
129
108
  };
130
-
131
109
  for (var i = 0; i < LogView.AllLogLevels.length; i += 1) {
132
110
  _loop(i);
133
111
  }
134
-
135
112
  actions.push({
136
113
  group: 1,
137
114
  order: 1000,
@@ -148,35 +125,32 @@ class LogView extends PureComponent {
148
125
  });
149
126
  return actions;
150
127
  }
151
-
152
128
  resetLogLevels() {
153
129
  var shownLogLevels = {};
154
-
155
- for (var i = 0; i < LogView.AllLogLevels.length; i += 1) {
130
+ var _loop2 = function _loop2(i) {
156
131
  var logLevel = LogView.AllLogLevels[i];
157
- var isEnabled = LogView.DefaultLogLevels.indexOf(logLevel) >= 0;
132
+ var isEnabled = LogView.DefaultLogLevels.some(level => level === logLevel);
158
133
  shownLogLevels[logLevel] = isEnabled;
134
+ };
135
+ for (var i = 0; i < LogView.AllLogLevels.length; i += 1) {
136
+ _loop2(i);
159
137
  }
160
-
161
138
  this.setState({
162
139
  shownLogLevels
163
140
  });
164
141
  }
165
-
166
142
  startListening() {
167
143
  var {
168
144
  session
169
145
  } = this.props;
170
146
  this.cancelListener = session.onLogMessage(this.handleLogMessage);
171
147
  }
172
-
173
148
  stopListening() {
174
149
  if (this.cancelListener != null) {
175
150
  this.cancelListener();
176
151
  this.cancelListener = undefined;
177
152
  }
178
153
  }
179
-
180
154
  initMonaco() {
181
155
  assertNotNull(this.editorContainer);
182
156
  this.editor = monaco.editor.create(this.editorContainer, {
@@ -197,80 +171,72 @@ class LogView extends PureComponent {
197
171
  scrollBeyondLastLine: false,
198
172
  value: '',
199
173
  wordWrap: 'on'
200
- }); // When find widget is open, escape key closes it.
201
- // Instead, capture it and do nothing. Same for shift-escape.
174
+ });
202
175
 
176
+ // When find widget is open, escape key closes it.
177
+ // Instead, capture it and do nothing. Same for shift-escape.
203
178
  this.editor.addCommand(monaco.KeyCode.Escape, () => undefined);
204
- this.editor.addCommand( // eslint-disable-next-line no-bitwise
205
- monaco.KeyMod.Shift | monaco.KeyCode.Escape, () => undefined); // Restore regular escape to clear selection, when editorText has focus.
179
+ this.editor.addCommand(
180
+ // eslint-disable-next-line no-bitwise
181
+ monaco.KeyMod.Shift | monaco.KeyCode.Escape, () => undefined);
206
182
 
183
+ // Restore regular escape to clear selection, when editorText has focus.
207
184
  this.editor.addCommand(monaco.KeyCode.Escape, () => {
208
185
  var _this$editor, _this$editor2;
209
-
210
186
  var position = (_this$editor = this.editor) === null || _this$editor === void 0 ? void 0 : _this$editor.getPosition();
211
187
  assertNotNull(position);
212
188
  (_this$editor2 = this.editor) === null || _this$editor2 === void 0 ? void 0 : _this$editor2.setPosition(position);
213
189
  }, 'findWidgetVisible && editorTextFocus');
214
- this.editor.addCommand( // eslint-disable-next-line no-bitwise
190
+ this.editor.addCommand(
191
+ // eslint-disable-next-line no-bitwise
215
192
  monaco.KeyMod.Shift | monaco.KeyCode.Escape, () => {
216
193
  var _this$editor3, _this$editor4;
217
-
218
194
  var position = (_this$editor3 = this.editor) === null || _this$editor3 === void 0 ? void 0 : _this$editor3.getPosition();
219
195
  assertNotNull(position);
220
196
  (_this$editor4 = this.editor) === null || _this$editor4 === void 0 ? void 0 : _this$editor4.setPosition(position);
221
197
  }, 'findWidgetVisible && editorTextFocus');
222
198
  }
223
-
224
199
  destroyMonaco() {
225
200
  if (this.editor) {
226
201
  this.editor.dispose();
227
202
  this.editor = undefined;
228
203
  }
229
204
  }
230
-
231
205
  triggerFindWidget() {
232
206
  var _this$editor5, _this$editor6;
233
-
234
207
  // The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.
235
208
  // As a workaround, just focus the editor before triggering the action
236
209
  // https://github.com/microsoft/monaco-editor/issues/2355
237
210
  (_this$editor5 = this.editor) === null || _this$editor5 === void 0 ? void 0 : _this$editor5.focus();
238
211
  (_this$editor6 = this.editor) === null || _this$editor6 === void 0 ? void 0 : _this$editor6.trigger('keyboard', 'actions.find', undefined);
239
212
  }
240
-
241
213
  toggleAll() {
242
214
  var {
243
215
  shownLogLevels
244
216
  } = this.state;
245
217
  var isAllEnabled = true;
246
-
247
218
  for (var i = 0; i < LogView.AllLogLevels.length; i += 1) {
248
219
  var logLevel = LogView.AllLogLevels[i];
249
-
250
220
  if (!shownLogLevels[logLevel]) {
251
221
  isAllEnabled = false;
252
222
  break;
253
223
  }
254
224
  }
255
-
256
225
  if (isAllEnabled) {
257
226
  this.setState({
258
227
  shownLogLevels: {}
259
228
  });
260
229
  } else {
261
230
  var updatedLogLevels = {};
262
-
263
231
  for (var _i = 0; _i < LogView.AllLogLevels.length; _i += 1) {
264
232
  var _logLevel = LogView.AllLogLevels[_i];
265
233
  updatedLogLevels[_logLevel] = true;
266
234
  }
267
-
268
235
  this.setState({
269
236
  shownLogLevels: updatedLogLevels
270
237
  });
271
238
  }
272
239
  }
273
-
274
240
  toggleLogLevel(logLevel) {
275
241
  var {
276
242
  shownLogLevels
@@ -280,7 +246,6 @@ class LogView extends PureComponent {
280
246
  updatedLogLevels[logLevel] = !isEnabled;
281
247
  this.updateLogLevels(updatedLogLevels);
282
248
  }
283
-
284
249
  updateLogLevels(updatedLogLevels) {
285
250
  var {
286
251
  shownLogLevels
@@ -290,12 +255,10 @@ class LogView extends PureComponent {
290
255
  shownLogLevels
291
256
  });
292
257
  }
293
-
294
258
  appendLogText(text) {
295
259
  if (!this.editor) {
296
260
  return;
297
261
  }
298
-
299
262
  var model = this.editor.getModel();
300
263
  var line = model === null || model === void 0 ? void 0 : model.getLineCount();
301
264
  assertNotNull(line);
@@ -303,7 +266,6 @@ class LogView extends PureComponent {
303
266
  assertNotNull(column);
304
267
  var isBottomVisible = this.isBottomVisible();
305
268
  var edits = [];
306
-
307
269
  if (column > 0) {
308
270
  edits.push({
309
271
  range: {
@@ -318,7 +280,6 @@ class LogView extends PureComponent {
318
280
  line += 1;
319
281
  column = 0;
320
282
  }
321
-
322
283
  edits.push({
323
284
  range: {
324
285
  startLineNumber: line,
@@ -330,195 +291,153 @@ class LogView extends PureComponent {
330
291
  forceMoveMarkers: true
331
292
  });
332
293
  model === null || model === void 0 ? void 0 : model.applyEdits(edits);
333
-
334
294
  if (isBottomVisible) {
335
295
  var lineCount = model === null || model === void 0 ? void 0 : model.getLineCount();
336
296
  assertNotNull(lineCount);
337
297
  this.editor.revealLine(lineCount, 1);
338
298
  }
339
299
  }
300
+
340
301
  /**
341
302
  * Refresh the contents of the log component with the updated filter text
342
303
  */
343
-
344
-
345
304
  refreshLogText() {
346
305
  if (!this.editor) {
347
306
  return;
348
307
  }
349
-
350
308
  this.truncateLogIfNecessary();
351
309
  var {
352
310
  shownLogLevels
353
311
  } = this.state;
354
312
  var isBottomVisible = this.isBottomVisible();
355
313
  var text = '';
356
-
357
314
  for (var i = 0; i < this.messages.length; i += 1) {
358
315
  var message = this.messages[i];
359
-
360
316
  if (shownLogLevels[message.logLevel]) {
361
317
  var logText = LogView.getLogText(message);
362
-
363
318
  if (logText.length > 0) {
364
319
  text += logText;
365
-
366
320
  if (logText.charAt(logText.length - 1) !== '\n') {
367
321
  text += '\n';
368
322
  }
369
323
  }
370
324
  }
371
325
  }
372
-
373
326
  text = text.trimRight();
374
327
  this.editor.setValue(text);
375
-
376
328
  if (isBottomVisible) {
377
329
  var _this$editor$getModel;
378
-
379
330
  var line = (_this$editor$getModel = this.editor.getModel()) === null || _this$editor$getModel === void 0 ? void 0 : _this$editor$getModel.getLineCount();
380
331
  assertNotNull(line);
381
332
  this.editor.revealLine(line, 1);
382
333
  }
383
-
384
334
  this.stopFlushTimer();
385
335
  this.bufferedMessages = [];
386
336
  }
387
-
388
337
  truncateLogIfNecessary() {
389
338
  if (this.messages.length > LogView.maxLogSize) {
390
339
  this.messages = this.messages.splice(this.messages.length - LogView.truncateSize);
391
340
  }
392
341
  }
393
-
394
342
  scrollToBottom() {
395
343
  var _this$editor7, _this$editor7$getMode, _this$editor7$getMode2;
396
-
397
344
  if (!this.editor) {
398
345
  return;
399
346
  }
400
-
401
347
  var line = (_this$editor7 = this.editor) === null || _this$editor7 === void 0 ? void 0 : (_this$editor7$getMode = _this$editor7.getModel) === null || _this$editor7$getMode === void 0 ? void 0 : (_this$editor7$getMode2 = _this$editor7$getMode.call(_this$editor7)) === null || _this$editor7$getMode2 === void 0 ? void 0 : _this$editor7$getMode2.getLineCount();
402
348
  assertNotNull(line);
403
349
  this.editor.revealLine(line, 1);
404
350
  }
405
-
406
351
  isBottomVisible() {
407
352
  if (!this.editor) {
408
353
  return true;
409
354
  }
410
-
411
355
  var model = this.editor.getModel();
412
356
  var line = model === null || model === void 0 ? void 0 : model.getLineCount();
413
357
  assertNotNull(line);
414
358
  return this.isLineVisible(line);
415
359
  }
416
-
417
360
  isLineVisible(line) {
418
361
  var _this$editor8;
419
-
420
362
  var visibleRanges = (_this$editor8 = this.editor) === null || _this$editor8 === void 0 ? void 0 : _this$editor8.getVisibleRanges();
421
-
422
363
  if (visibleRanges == null || visibleRanges.length === 0) {
423
364
  return false;
424
365
  }
425
-
426
366
  for (var i = 0; i < visibleRanges.length; i += 1) {
427
367
  var range = visibleRanges[i];
428
-
429
368
  if (range.startLineNumber <= line && line <= range.endLineNumber) {
430
369
  return true;
431
370
  }
432
371
  }
433
-
434
372
  return false;
435
373
  }
436
- /** Checks if the given log message is visible with the current filters */
437
-
438
374
 
375
+ /** Checks if the given log message is visible with the current filters */
439
376
  isLogItemVisible(message) {
440
377
  var {
441
378
  shownLogLevels
442
379
  } = this.state;
443
380
  return shownLogLevels[message.logLevel];
444
381
  }
445
-
446
382
  flush() {
447
383
  var text = '';
448
-
449
384
  for (var i = 0; i < this.bufferedMessages.length; i += 1) {
450
385
  var message = this.bufferedMessages[i];
451
386
  var logText = LogView.getLogText(message);
452
387
  text += logText;
453
-
454
388
  if (logText.charAt(logText.length - 1) !== '\n') {
455
389
  text += '\n';
456
390
  }
457
391
  }
458
-
459
392
  this.bufferedMessages = [];
460
393
  this.appendLogText(text);
461
394
  }
462
-
463
395
  queue(message) {
464
396
  this.bufferedMessages.push(message);
465
-
466
397
  if (this.bufferedMessages.length === 1) {
467
398
  this.flushTimer = setTimeout(this.handleFlushTimeout, LogView.bufferTimeout);
468
399
  }
469
400
  }
470
-
471
401
  stopFlushTimer() {
472
402
  if (this.flushTimer) {
473
403
  clearTimeout(this.flushTimer);
474
404
  this.flushTimer = undefined;
475
405
  }
476
406
  }
477
-
478
407
  updateDimensions() {
479
408
  if (this.editor) {
480
409
  this.editor.layout();
481
410
  }
482
411
  }
483
-
484
412
  handleClearClick() {
485
413
  this.clearLogs();
486
414
  }
487
-
488
415
  clearLogs() {
489
416
  this.messages = [];
490
417
  this.refreshLogText();
491
418
  }
492
-
493
419
  handleFlushTimeout() {
494
420
  this.stopFlushTimer();
495
421
  this.flush();
496
422
  }
497
-
498
423
  handleLogMessage(message) {
499
424
  this.messages.push(message);
500
-
501
425
  if (this.editor && this.isLogItemVisible(message)) {
502
426
  this.queue(message);
503
427
  }
504
428
  }
505
-
506
429
  handleMenuItemClick(logLevel) {
507
430
  this.toggleLogLevel(logLevel);
508
431
  }
509
-
510
432
  handleResetClick() {
511
433
  this.resetLogLevels();
512
434
  }
513
-
514
435
  handleResize() {
515
436
  this.updateDimensions();
516
437
  }
517
-
518
438
  handleToggleAllClick() {
519
439
  this.toggleAll();
520
440
  }
521
-
522
441
  render() {
523
442
  var popperOptions = {
524
443
  placement: 'bottom-end'
@@ -542,7 +461,8 @@ class LogView extends PureComponent {
542
461
  className: "btn-link-icon btn-overflow",
543
462
  icon: vsGear,
544
463
  tooltip: "Log Settings",
545
- onClick: () => {// no-op: click is handled in `DropdownMenu'
464
+ onClick: () => {
465
+ // no-op: click is handled in `DropdownMenu'
546
466
  }
547
467
  }, /*#__PURE__*/React.createElement(DropdownMenu, {
548
468
  actions: actions,
@@ -555,18 +475,11 @@ class LogView extends PureComponent {
555
475
  }
556
476
  }));
557
477
  }
558
-
559
478
  }
560
-
561
479
  _defineProperty(LogView, "DefaultLogLevels", [LogLevel.STDOUT, LogLevel.ERROR, LogLevel.FATAL, LogLevel.STDERR, LogLevel.WARN]);
562
-
563
480
  _defineProperty(LogView, "AllLogLevels", [LogLevel.INFO, LogLevel.STDOUT, LogLevel.ERROR, LogLevel.FATAL, LogLevel.STDERR, LogLevel.WARN, LogLevel.DEBUG, LogLevel.TRACE]);
564
-
565
481
  _defineProperty(LogView, "bufferTimeout", 16);
566
-
567
482
  _defineProperty(LogView, "maxLogSize", 131072);
568
-
569
483
  _defineProperty(LogView, "truncateSize", 65536);
570
-
571
484
  export default LogView;
572
485
  //# sourceMappingURL=LogView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LogView.js","names":["React","PureComponent","Button","DropdownMenu","vsGear","dhTrashUndo","assertNotNull","monaco","ConsoleUtils","LogLevel","LogLevelMenuItem","LogView","getLogText","logItem","date","Date","micros","timestamp","formatTimestamp","logLevel","message","constructor","props","handleClearClick","bind","handleFlushTimeout","handleLogMessage","handleMenuItemClick","handleResetClick","handleResize","handleToggleAllClick","logLevelMenuItems","editorContainer","bufferedMessages","messages","state","shownLogLevels","componentDidMount","resetLogLevels","initMonaco","startListening","window","addEventListener","componentDidUpdate","prevProps","prevState","updateDimensions","refreshLogText","session","stopListening","clearLogs","componentWillUnmount","stopFlushTimer","destroyMonaco","removeEventListener","getMenuActions","actions","push","menuElement","group","order","i","AllLogLevels","on","title","element","length","isEnabled","DefaultLogLevels","indexOf","setState","cancelListener","onLogMessage","undefined","editor","create","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","language","lineDecorationsWidth","lineNumbers","lineNumbersMinChars","minimap","enabled","readOnly","renderLineHighlight","scrollBeyondLastLine","value","wordWrap","addCommand","KeyCode","Escape","KeyMod","Shift","position","getPosition","setPosition","dispose","triggerFindWidget","focus","trigger","toggleAll","isAllEnabled","updatedLogLevels","toggleLogLevel","updateLogLevels","appendLogText","text","model","getModel","line","getLineCount","column","getLineLength","isBottomVisible","edits","range","startLineNumber","startColumn","endLineNumber","endColumn","forceMoveMarkers","applyEdits","lineCount","revealLine","truncateLogIfNecessary","logText","charAt","trimRight","setValue","maxLogSize","splice","truncateSize","scrollToBottom","isLineVisible","visibleRanges","getVisibleRanges","isLogItemVisible","flush","queue","flushTimer","setTimeout","bufferTimeout","clearTimeout","layout","render","popperOptions","placement","STDOUT","ERROR","FATAL","STDERR","WARN","INFO","DEBUG","TRACE"],"sources":["../../src/log/LogView.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { Button, DropdownActions, DropdownMenu } from '@deephaven/components';\nimport { vsGear, dhTrashUndo } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\nimport { IdeSession, LogItem } from '@deephaven/jsapi-shim';\nimport { Placement } from 'popper.js';\nimport * as monaco from 'monaco-editor';\nimport ConsoleUtils from '../common/ConsoleUtils';\nimport LogLevel from './LogLevel';\nimport './LogView.scss';\nimport LogLevelMenuItem from './LogLevelMenuItem';\n\ninterface LogViewProps {\n session: IdeSession;\n}\n\ninterface LogViewState {\n shownLogLevels: Record<string, boolean>;\n}\n/**\n * Log view contents. Uses a monaco editor to display/search the contents of the log.\n */\nclass LogView extends PureComponent<LogViewProps, LogViewState> {\n static DefaultLogLevels = [\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n ];\n\n static AllLogLevels = [\n LogLevel.INFO,\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n LogLevel.DEBUG,\n LogLevel.TRACE,\n ];\n\n /** ms to buffer log messages before processing them */\n static bufferTimeout = 16;\n\n /** Maximum number of messages to store in the log */\n static maxLogSize = 131072;\n\n static truncateSize = 65536;\n\n static getLogText(logItem: LogItem): string {\n const date = new Date(logItem.micros / 1000);\n const timestamp = ConsoleUtils.formatTimestamp(date);\n return `${timestamp} ${logItem.logLevel} ${logItem.message}`;\n }\n\n constructor(props: LogViewProps) {\n super(props);\n\n this.handleClearClick = this.handleClearClick.bind(this);\n this.handleFlushTimeout = this.handleFlushTimeout.bind(this);\n this.handleLogMessage = this.handleLogMessage.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleResetClick = this.handleResetClick.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleToggleAllClick = this.handleToggleAllClick.bind(this);\n\n this.logLevelMenuItems = {};\n\n this.editorContainer = null;\n\n this.bufferedMessages = [];\n this.messages = [];\n\n this.state = {\n shownLogLevels: {},\n };\n }\n\n componentDidMount(): void {\n this.resetLogLevels();\n this.initMonaco();\n this.startListening();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(prevProps: LogViewProps, prevState: LogViewState): void {\n this.updateDimensions();\n\n const { shownLogLevels } = this.state;\n if (prevState.shownLogLevels !== shownLogLevels) {\n this.refreshLogText();\n }\n\n const { session } = this.props;\n if (prevProps.session !== session) {\n this.stopListening();\n this.startListening();\n // clear logs when starting a new console\n this.clearLogs();\n }\n }\n\n componentWillUnmount(): void {\n this.stopFlushTimer();\n this.stopListening();\n this.destroyMonaco();\n\n window.removeEventListener('resize', this.handleResize);\n }\n\n cancelListener?: () => void | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n editorContainer: HTMLDivElement | null;\n\n logLevelMenuItems: Record<string, LogLevelMenuItem>;\n\n flushTimer?: ReturnType<typeof setTimeout>;\n\n bufferedMessages: LogItem[];\n\n messages: LogItem[];\n\n getMenuActions(shownLogLevels: Record<string, boolean>): DropdownActions {\n const actions = [];\n\n actions.push({\n menuElement: (\n <div className=\"log-level-menu-title\">Display Log Levels</div>\n ),\n group: 1,\n order: 10,\n });\n\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const on =\n shownLogLevels[logLevel] != null ? shownLogLevels[logLevel] : false;\n actions.push({\n title: logLevel,\n group: 1,\n order: i + 100,\n\n menuElement: (\n <LogLevelMenuItem\n logLevel={logLevel}\n on={on}\n onClick={this.handleMenuItemClick}\n ref={element => {\n if (element != null) {\n this.logLevelMenuItems[logLevel] = element;\n }\n }}\n />\n ),\n });\n }\n\n actions.push({\n group: 1,\n order: 1000,\n menuElement: (\n <div className=\"log-level-menu-controls\">\n <Button\n kind=\"ghost\"\n className=\"log-level-toggle-all\"\n onClick={this.handleToggleAllClick}\n >\n Toggle All\n </Button>\n <Button kind=\"ghost\" onClick={this.handleResetClick}>\n Reset\n </Button>\n </div>\n ),\n });\n\n return actions;\n }\n\n resetLogLevels(): void {\n const shownLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const isEnabled = LogView.DefaultLogLevels.indexOf(logLevel) >= 0;\n shownLogLevels[logLevel] = isEnabled;\n }\n\n this.setState({ shownLogLevels });\n }\n\n startListening(): void {\n const { session } = this.props;\n this.cancelListener = session.onLogMessage(this.handleLogMessage);\n }\n\n stopListening(): void {\n if (this.cancelListener != null) {\n this.cancelListener();\n this.cancelListener = undefined;\n }\n }\n\n initMonaco(): void {\n assertNotNull(this.editorContainer);\n this.editor = monaco.editor.create(this.editorContainer, {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'log',\n lineDecorationsWidth: 0,\n lineNumbers: 'off',\n lineNumbersMinChars: 0,\n minimap: { enabled: false },\n readOnly: true,\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n value: '',\n wordWrap: 'on',\n });\n\n // When find widget is open, escape key closes it.\n // Instead, capture it and do nothing. Same for shift-escape.\n this.editor.addCommand(monaco.KeyCode.Escape, () => undefined);\n this.editor.addCommand(\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.Shift | monaco.KeyCode.Escape,\n () => undefined\n );\n\n // Restore regular escape to clear selection, when editorText has focus.\n this.editor.addCommand(\n monaco.KeyCode.Escape,\n () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n 'findWidgetVisible && editorTextFocus'\n );\n\n this.editor.addCommand(\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.Shift | monaco.KeyCode.Escape,\n () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n 'findWidgetVisible && editorTextFocus'\n );\n }\n\n destroyMonaco(): void {\n if (this.editor) {\n this.editor.dispose();\n this.editor = undefined;\n }\n }\n\n triggerFindWidget(): void {\n // The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.\n // As a workaround, just focus the editor before triggering the action\n // https://github.com/microsoft/monaco-editor/issues/2355\n this.editor?.focus();\n this.editor?.trigger('keyboard', 'actions.find', undefined);\n }\n\n toggleAll(): void {\n const { shownLogLevels } = this.state;\n let isAllEnabled = true;\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n if (!shownLogLevels[logLevel]) {\n isAllEnabled = false;\n break;\n }\n }\n\n if (isAllEnabled) {\n this.setState({ shownLogLevels: {} });\n } else {\n const updatedLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n updatedLogLevels[logLevel] = true;\n }\n this.setState({ shownLogLevels: updatedLogLevels });\n }\n }\n\n toggleLogLevel(logLevel: string): void {\n const { shownLogLevels } = this.state;\n const isEnabled = shownLogLevels[logLevel];\n const updatedLogLevels: Record<string, boolean> = {};\n updatedLogLevels[logLevel] = !isEnabled;\n this.updateLogLevels(updatedLogLevels);\n }\n\n updateLogLevels(updatedLogLevels: Record<string, boolean>): void {\n let { shownLogLevels } = this.state;\n shownLogLevels = { ...shownLogLevels, ...updatedLogLevels };\n this.setState({ shownLogLevels });\n }\n\n appendLogText(text: string): void {\n if (!this.editor) {\n return;\n }\n\n const model = this.editor.getModel();\n let line = model?.getLineCount();\n assertNotNull(line);\n let column = model?.getLineLength(line);\n assertNotNull(column);\n const isBottomVisible = this.isBottomVisible();\n\n const edits = [];\n if (column > 0) {\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column + 1,\n endLineNumber: line,\n endColumn: column + 1,\n },\n text: '\\n',\n forceMoveMarkers: true,\n });\n line += 1;\n column = 0;\n }\n\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column,\n endLineNumber: line,\n endColumn: column,\n },\n text,\n forceMoveMarkers: true,\n });\n\n model?.applyEdits(edits);\n\n if (isBottomVisible) {\n const lineCount = model?.getLineCount();\n assertNotNull(lineCount);\n this.editor.revealLine(lineCount, 1);\n }\n }\n\n /**\n * Refresh the contents of the log component with the updated filter text\n */\n refreshLogText(): void {\n if (!this.editor) {\n return;\n }\n\n this.truncateLogIfNecessary();\n\n const { shownLogLevels } = this.state;\n const isBottomVisible = this.isBottomVisible();\n\n let text = '';\n for (let i = 0; i < this.messages.length; i += 1) {\n const message = this.messages[i];\n if (shownLogLevels[message.logLevel]) {\n const logText = LogView.getLogText(message);\n if (logText.length > 0) {\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n }\n }\n text = text.trimRight();\n\n this.editor.setValue(text);\n\n if (isBottomVisible) {\n const line = this.editor.getModel()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n this.stopFlushTimer();\n this.bufferedMessages = [];\n }\n\n truncateLogIfNecessary(): void {\n if (this.messages.length > LogView.maxLogSize) {\n this.messages = this.messages.splice(\n this.messages.length - LogView.truncateSize\n );\n }\n }\n\n scrollToBottom(): void {\n if (!this.editor) {\n return;\n }\n\n const line = this.editor?.getModel?.()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n isBottomVisible(): boolean {\n if (!this.editor) {\n return true;\n }\n\n const model = this.editor.getModel();\n const line = model?.getLineCount();\n\n assertNotNull(line);\n return this.isLineVisible(line);\n }\n\n isLineVisible(line: number): boolean {\n const visibleRanges = this.editor?.getVisibleRanges();\n if (visibleRanges == null || visibleRanges.length === 0) {\n return false;\n }\n\n for (let i = 0; i < visibleRanges.length; i += 1) {\n const range = visibleRanges[i];\n if (range.startLineNumber <= line && line <= range.endLineNumber) {\n return true;\n }\n }\n\n return false;\n }\n\n /** Checks if the given log message is visible with the current filters */\n isLogItemVisible(message: LogItem): boolean {\n const { shownLogLevels } = this.state;\n return shownLogLevels[message.logLevel];\n }\n\n flush(): void {\n let text = '';\n for (let i = 0; i < this.bufferedMessages.length; i += 1) {\n const message = this.bufferedMessages[i];\n const logText = LogView.getLogText(message);\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n\n this.bufferedMessages = [];\n\n this.appendLogText(text);\n }\n\n queue(message: LogItem): void {\n this.bufferedMessages.push(message);\n if (this.bufferedMessages.length === 1) {\n this.flushTimer = setTimeout(\n this.handleFlushTimeout,\n LogView.bufferTimeout\n );\n }\n }\n\n stopFlushTimer(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n\n updateDimensions(): void {\n if (this.editor) {\n this.editor.layout();\n }\n }\n\n handleClearClick(): void {\n this.clearLogs();\n }\n\n clearLogs(): void {\n this.messages = [];\n this.refreshLogText();\n }\n\n handleFlushTimeout(): void {\n this.stopFlushTimer();\n this.flush();\n }\n\n handleLogMessage(message: LogItem): void {\n this.messages.push(message);\n\n if (this.editor && this.isLogItemVisible(message)) {\n this.queue(message);\n }\n }\n\n handleMenuItemClick(logLevel: string): void {\n this.toggleLogLevel(logLevel);\n }\n\n handleResetClick(): void {\n this.resetLogLevels();\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleToggleAllClick(): void {\n this.toggleAll();\n }\n\n render(): ReactElement {\n const popperOptions = { placement: 'bottom-end' as Placement };\n const { shownLogLevels } = this.state;\n const actions = this.getMenuActions(shownLogLevels);\n return (\n <div className=\"log-pane h-100 w-100\">\n <div className=\"log-pane-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn-clear-logs\"\n onClick={this.handleClearClick}\n icon={dhTrashUndo}\n tooltip=\"Clear log\"\n />\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon btn-overflow\"\n icon={vsGear}\n tooltip=\"Log Settings\"\n onClick={() => {\n // no-op: click is handled in `DropdownMenu'\n }}\n >\n <DropdownMenu\n actions={actions}\n popperClassName=\"log-level-menu-popper\"\n popperOptions={popperOptions}\n />\n </Button>\n </div>\n <div\n className=\"log-pane-editor h-100 w-100\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n </div>\n );\n }\n}\n\nexport default LogView;\n"],"mappings":"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"}
1
+ {"version":3,"file":"LogView.js","names":["React","PureComponent","Button","DropdownMenu","vsGear","dhTrashUndo","assertNotNull","monaco","ConsoleUtils","LogLevel","LogLevelMenuItem","LogView","getLogText","logItem","date","Date","micros","timestamp","formatTimestamp","logLevel","message","constructor","props","handleClearClick","bind","handleFlushTimeout","handleLogMessage","handleMenuItemClick","handleResetClick","handleResize","handleToggleAllClick","logLevelMenuItems","editorContainer","bufferedMessages","messages","state","shownLogLevels","componentDidMount","resetLogLevels","initMonaco","startListening","window","addEventListener","componentDidUpdate","prevProps","prevState","updateDimensions","refreshLogText","session","stopListening","clearLogs","componentWillUnmount","stopFlushTimer","destroyMonaco","removeEventListener","getMenuActions","actions","push","menuElement","group","order","i","AllLogLevels","on","title","element","length","isEnabled","DefaultLogLevels","some","level","setState","cancelListener","onLogMessage","undefined","editor","create","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","language","lineDecorationsWidth","lineNumbers","lineNumbersMinChars","minimap","enabled","readOnly","renderLineHighlight","scrollBeyondLastLine","value","wordWrap","addCommand","KeyCode","Escape","KeyMod","Shift","position","getPosition","setPosition","dispose","triggerFindWidget","focus","trigger","toggleAll","isAllEnabled","updatedLogLevels","toggleLogLevel","updateLogLevels","appendLogText","text","model","getModel","line","getLineCount","column","getLineLength","isBottomVisible","edits","range","startLineNumber","startColumn","endLineNumber","endColumn","forceMoveMarkers","applyEdits","lineCount","revealLine","truncateLogIfNecessary","logText","charAt","trimRight","setValue","maxLogSize","splice","truncateSize","scrollToBottom","isLineVisible","visibleRanges","getVisibleRanges","isLogItemVisible","flush","queue","flushTimer","setTimeout","bufferTimeout","clearTimeout","layout","render","popperOptions","placement","STDOUT","ERROR","FATAL","STDERR","WARN","INFO","DEBUG","TRACE"],"sources":["../../src/log/LogView.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { Button, DropdownActions, DropdownMenu } from '@deephaven/components';\nimport { vsGear, dhTrashUndo } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\nimport { IdeSession, LogItem } from '@deephaven/jsapi-shim';\nimport { Placement } from 'popper.js';\nimport * as monaco from 'monaco-editor';\nimport ConsoleUtils from '../common/ConsoleUtils';\nimport LogLevel from './LogLevel';\nimport './LogView.scss';\nimport LogLevelMenuItem from './LogLevelMenuItem';\n\ninterface LogViewProps {\n session: IdeSession;\n}\n\ninterface LogViewState {\n shownLogLevels: Record<string, boolean>;\n}\n/**\n * Log view contents. Uses a monaco editor to display/search the contents of the log.\n */\nclass LogView extends PureComponent<LogViewProps, LogViewState> {\n static DefaultLogLevels = [\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n ];\n\n static AllLogLevels = [\n LogLevel.INFO,\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n LogLevel.DEBUG,\n LogLevel.TRACE,\n ];\n\n /** ms to buffer log messages before processing them */\n static bufferTimeout = 16;\n\n /** Maximum number of messages to store in the log */\n static maxLogSize = 131072;\n\n static truncateSize = 65536;\n\n static getLogText(logItem: LogItem): string {\n const date = new Date(logItem.micros / 1000);\n const timestamp = ConsoleUtils.formatTimestamp(date);\n return `${timestamp} ${logItem.logLevel} ${logItem.message}`;\n }\n\n constructor(props: LogViewProps) {\n super(props);\n\n this.handleClearClick = this.handleClearClick.bind(this);\n this.handleFlushTimeout = this.handleFlushTimeout.bind(this);\n this.handleLogMessage = this.handleLogMessage.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleResetClick = this.handleResetClick.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleToggleAllClick = this.handleToggleAllClick.bind(this);\n\n this.logLevelMenuItems = {};\n\n this.editorContainer = null;\n\n this.bufferedMessages = [];\n this.messages = [];\n\n this.state = {\n shownLogLevels: {},\n };\n }\n\n componentDidMount(): void {\n this.resetLogLevels();\n this.initMonaco();\n this.startListening();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(prevProps: LogViewProps, prevState: LogViewState): void {\n this.updateDimensions();\n\n const { shownLogLevels } = this.state;\n if (prevState.shownLogLevels !== shownLogLevels) {\n this.refreshLogText();\n }\n\n const { session } = this.props;\n if (prevProps.session !== session) {\n this.stopListening();\n this.startListening();\n // clear logs when starting a new console\n this.clearLogs();\n }\n }\n\n componentWillUnmount(): void {\n this.stopFlushTimer();\n this.stopListening();\n this.destroyMonaco();\n\n window.removeEventListener('resize', this.handleResize);\n }\n\n cancelListener?: () => void | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n editorContainer: HTMLDivElement | null;\n\n logLevelMenuItems: Record<string, LogLevelMenuItem>;\n\n flushTimer?: ReturnType<typeof setTimeout>;\n\n bufferedMessages: LogItem[];\n\n messages: LogItem[];\n\n getMenuActions(shownLogLevels: Record<string, boolean>): DropdownActions {\n const actions = [];\n\n actions.push({\n menuElement: (\n <div className=\"log-level-menu-title\">Display Log Levels</div>\n ),\n group: 1,\n order: 10,\n });\n\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const on =\n shownLogLevels[logLevel] != null ? shownLogLevels[logLevel] : false;\n actions.push({\n title: logLevel,\n group: 1,\n order: i + 100,\n\n menuElement: (\n <LogLevelMenuItem\n logLevel={logLevel}\n on={on}\n onClick={this.handleMenuItemClick}\n ref={element => {\n if (element != null) {\n this.logLevelMenuItems[logLevel] = element;\n }\n }}\n />\n ),\n });\n }\n\n actions.push({\n group: 1,\n order: 1000,\n menuElement: (\n <div className=\"log-level-menu-controls\">\n <Button\n kind=\"ghost\"\n className=\"log-level-toggle-all\"\n onClick={this.handleToggleAllClick}\n >\n Toggle All\n </Button>\n <Button kind=\"ghost\" onClick={this.handleResetClick}>\n Reset\n </Button>\n </div>\n ),\n });\n\n return actions;\n }\n\n resetLogLevels(): void {\n const shownLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const isEnabled = LogView.DefaultLogLevels.some(\n level => level === logLevel\n );\n shownLogLevels[logLevel] = isEnabled;\n }\n\n this.setState({ shownLogLevels });\n }\n\n startListening(): void {\n const { session } = this.props;\n this.cancelListener = session.onLogMessage(this.handleLogMessage);\n }\n\n stopListening(): void {\n if (this.cancelListener != null) {\n this.cancelListener();\n this.cancelListener = undefined;\n }\n }\n\n initMonaco(): void {\n assertNotNull(this.editorContainer);\n this.editor = monaco.editor.create(this.editorContainer, {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'log',\n lineDecorationsWidth: 0,\n lineNumbers: 'off',\n lineNumbersMinChars: 0,\n minimap: { enabled: false },\n readOnly: true,\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n value: '',\n wordWrap: 'on',\n });\n\n // When find widget is open, escape key closes it.\n // Instead, capture it and do nothing. Same for shift-escape.\n this.editor.addCommand(monaco.KeyCode.Escape, () => undefined);\n this.editor.addCommand(\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.Shift | monaco.KeyCode.Escape,\n () => undefined\n );\n\n // Restore regular escape to clear selection, when editorText has focus.\n this.editor.addCommand(\n monaco.KeyCode.Escape,\n () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n 'findWidgetVisible && editorTextFocus'\n );\n\n this.editor.addCommand(\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.Shift | monaco.KeyCode.Escape,\n () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n 'findWidgetVisible && editorTextFocus'\n );\n }\n\n destroyMonaco(): void {\n if (this.editor) {\n this.editor.dispose();\n this.editor = undefined;\n }\n }\n\n triggerFindWidget(): void {\n // The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.\n // As a workaround, just focus the editor before triggering the action\n // https://github.com/microsoft/monaco-editor/issues/2355\n this.editor?.focus();\n this.editor?.trigger('keyboard', 'actions.find', undefined);\n }\n\n toggleAll(): void {\n const { shownLogLevels } = this.state;\n let isAllEnabled = true;\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n if (!shownLogLevels[logLevel]) {\n isAllEnabled = false;\n break;\n }\n }\n\n if (isAllEnabled) {\n this.setState({ shownLogLevels: {} });\n } else {\n const updatedLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n updatedLogLevels[logLevel] = true;\n }\n this.setState({ shownLogLevels: updatedLogLevels });\n }\n }\n\n toggleLogLevel(logLevel: string): void {\n const { shownLogLevels } = this.state;\n const isEnabled = shownLogLevels[logLevel];\n const updatedLogLevels: Record<string, boolean> = {};\n updatedLogLevels[logLevel] = !isEnabled;\n this.updateLogLevels(updatedLogLevels);\n }\n\n updateLogLevels(updatedLogLevels: Record<string, boolean>): void {\n let { shownLogLevels } = this.state;\n shownLogLevels = { ...shownLogLevels, ...updatedLogLevels };\n this.setState({ shownLogLevels });\n }\n\n appendLogText(text: string): void {\n if (!this.editor) {\n return;\n }\n\n const model = this.editor.getModel();\n let line = model?.getLineCount();\n assertNotNull(line);\n let column = model?.getLineLength(line);\n assertNotNull(column);\n const isBottomVisible = this.isBottomVisible();\n\n const edits = [];\n if (column > 0) {\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column + 1,\n endLineNumber: line,\n endColumn: column + 1,\n },\n text: '\\n',\n forceMoveMarkers: true,\n });\n line += 1;\n column = 0;\n }\n\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column,\n endLineNumber: line,\n endColumn: column,\n },\n text,\n forceMoveMarkers: true,\n });\n\n model?.applyEdits(edits);\n\n if (isBottomVisible) {\n const lineCount = model?.getLineCount();\n assertNotNull(lineCount);\n this.editor.revealLine(lineCount, 1);\n }\n }\n\n /**\n * Refresh the contents of the log component with the updated filter text\n */\n refreshLogText(): void {\n if (!this.editor) {\n return;\n }\n\n this.truncateLogIfNecessary();\n\n const { shownLogLevels } = this.state;\n const isBottomVisible = this.isBottomVisible();\n\n let text = '';\n for (let i = 0; i < this.messages.length; i += 1) {\n const message = this.messages[i];\n if (shownLogLevels[message.logLevel]) {\n const logText = LogView.getLogText(message);\n if (logText.length > 0) {\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n }\n }\n text = text.trimRight();\n\n this.editor.setValue(text);\n\n if (isBottomVisible) {\n const line = this.editor.getModel()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n this.stopFlushTimer();\n this.bufferedMessages = [];\n }\n\n truncateLogIfNecessary(): void {\n if (this.messages.length > LogView.maxLogSize) {\n this.messages = this.messages.splice(\n this.messages.length - LogView.truncateSize\n );\n }\n }\n\n scrollToBottom(): void {\n if (!this.editor) {\n return;\n }\n\n const line = this.editor?.getModel?.()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n isBottomVisible(): boolean {\n if (!this.editor) {\n return true;\n }\n\n const model = this.editor.getModel();\n const line = model?.getLineCount();\n\n assertNotNull(line);\n return this.isLineVisible(line);\n }\n\n isLineVisible(line: number): boolean {\n const visibleRanges = this.editor?.getVisibleRanges();\n if (visibleRanges == null || visibleRanges.length === 0) {\n return false;\n }\n\n for (let i = 0; i < visibleRanges.length; i += 1) {\n const range = visibleRanges[i];\n if (range.startLineNumber <= line && line <= range.endLineNumber) {\n return true;\n }\n }\n\n return false;\n }\n\n /** Checks if the given log message is visible with the current filters */\n isLogItemVisible(message: LogItem): boolean {\n const { shownLogLevels } = this.state;\n return shownLogLevels[message.logLevel];\n }\n\n flush(): void {\n let text = '';\n for (let i = 0; i < this.bufferedMessages.length; i += 1) {\n const message = this.bufferedMessages[i];\n const logText = LogView.getLogText(message);\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n\n this.bufferedMessages = [];\n\n this.appendLogText(text);\n }\n\n queue(message: LogItem): void {\n this.bufferedMessages.push(message);\n if (this.bufferedMessages.length === 1) {\n this.flushTimer = setTimeout(\n this.handleFlushTimeout,\n LogView.bufferTimeout\n );\n }\n }\n\n stopFlushTimer(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n\n updateDimensions(): void {\n if (this.editor) {\n this.editor.layout();\n }\n }\n\n handleClearClick(): void {\n this.clearLogs();\n }\n\n clearLogs(): void {\n this.messages = [];\n this.refreshLogText();\n }\n\n handleFlushTimeout(): void {\n this.stopFlushTimer();\n this.flush();\n }\n\n handleLogMessage(message: LogItem): void {\n this.messages.push(message);\n\n if (this.editor && this.isLogItemVisible(message)) {\n this.queue(message);\n }\n }\n\n handleMenuItemClick(logLevel: string): void {\n this.toggleLogLevel(logLevel);\n }\n\n handleResetClick(): void {\n this.resetLogLevels();\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleToggleAllClick(): void {\n this.toggleAll();\n }\n\n render(): ReactElement {\n const popperOptions = { placement: 'bottom-end' as Placement };\n const { shownLogLevels } = this.state;\n const actions = this.getMenuActions(shownLogLevels);\n return (\n <div className=\"log-pane h-100 w-100\">\n <div className=\"log-pane-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn-clear-logs\"\n onClick={this.handleClearClick}\n icon={dhTrashUndo}\n tooltip=\"Clear log\"\n />\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon btn-overflow\"\n icon={vsGear}\n tooltip=\"Log Settings\"\n onClick={() => {\n // no-op: click is handled in `DropdownMenu'\n }}\n >\n <DropdownMenu\n actions={actions}\n popperClassName=\"log-level-menu-popper\"\n popperOptions={popperOptions}\n />\n </Button>\n </div>\n <div\n className=\"log-pane-editor h-100 w-100\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n </div>\n );\n }\n}\n\nexport default LogView;\n"],"mappings":"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"}