@deephaven/console 0.22.3-beta.15 → 0.22.3-beta.21
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.
- package/dist/Console.d.ts +3 -3
- package/dist/Console.d.ts.map +1 -1
- package/dist/Console.js +9 -114
- package/dist/Console.js.map +1 -1
- package/dist/ConsoleInput.js +14 -90
- package/dist/ConsoleInput.js.map +1 -1
- package/dist/ConsoleMenu.js +6 -25
- package/dist/ConsoleMenu.js.map +1 -1
- package/dist/ConsolePropTypes.js.map +1 -1
- package/dist/ConsoleShortcuts.js +1 -1
- package/dist/ConsoleShortcuts.js.map +1 -1
- package/dist/ConsoleStatusBar.js +0 -16
- package/dist/ConsoleStatusBar.js.map +1 -1
- package/dist/HeapUsage.d.ts +1 -1
- package/dist/HeapUsage.d.ts.map +1 -1
- package/dist/HeapUsage.js +2 -18
- package/dist/HeapUsage.js.map +1 -1
- package/dist/StoragePropTypes.js.map +1 -1
- package/dist/command-history/CommandHistory.js +1 -49
- package/dist/command-history/CommandHistory.js.map +1 -1
- package/dist/command-history/CommandHistoryActions.js +0 -6
- package/dist/command-history/CommandHistoryActions.js.map +1 -1
- package/dist/command-history/CommandHistoryItem.d.ts +4 -4
- package/dist/command-history/CommandHistoryItem.d.ts.map +1 -1
- package/dist/command-history/CommandHistoryItem.js +3 -6
- package/dist/command-history/CommandHistoryItem.js.map +1 -1
- package/dist/command-history/CommandHistoryItemTooltip.d.ts +1 -1
- package/dist/command-history/CommandHistoryItemTooltip.d.ts.map +1 -1
- package/dist/command-history/CommandHistoryItemTooltip.js +3 -28
- package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -1
- package/dist/command-history/CommandHistoryViewportUpdater.js +0 -3
- package/dist/command-history/CommandHistoryViewportUpdater.js.map +1 -1
- package/dist/command-history/index.js.map +1 -1
- package/dist/common/Code.js +2 -11
- package/dist/common/Code.js.map +1 -1
- package/dist/common/ConsoleConstants.js +0 -2
- package/dist/common/ConsoleConstants.js.map +1 -1
- package/dist/common/ConsoleUtils.js +4 -19
- package/dist/common/ConsoleUtils.js.map +1 -1
- package/dist/common/ObjectIcon.d.ts +1 -1
- package/dist/common/ObjectIcon.d.ts.map +1 -1
- package/dist/common/ObjectIcon.js +2 -8
- package/dist/common/ObjectIcon.js.map +1 -1
- package/dist/common/index.js.map +1 -1
- package/dist/console-history/ConsoleHistory.js +0 -8
- package/dist/console-history/ConsoleHistory.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItem.js +2 -25
- package/dist/console-history/ConsoleHistoryItem.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItemResult.d.ts +6 -6
- package/dist/console-history/ConsoleHistoryItemResult.d.ts.map +1 -1
- package/dist/console-history/ConsoleHistoryItemResult.js +2 -4
- package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -1
- package/dist/console-history/ConsoleHistoryResultErrorMessage.js +0 -22
- package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -1
- package/dist/console-history/ConsoleHistoryResultInProgress.js +0 -13
- package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -1
- package/dist/console-history/index.js.map +1 -1
- package/dist/csv/CsvFormats.js +0 -9
- package/dist/csv/CsvFormats.js.map +1 -1
- package/dist/csv/CsvInputBar.js +18 -51
- package/dist/csv/CsvInputBar.js.map +1 -1
- package/dist/csv/CsvOverlay.d.ts +2 -2
- package/dist/csv/CsvOverlay.d.ts.map +1 -1
- package/dist/csv/CsvOverlay.js +1 -41
- package/dist/csv/CsvOverlay.js.map +1 -1
- package/dist/csv/CsvParser.js +10 -73
- package/dist/csv/CsvParser.js.map +1 -1
- package/dist/csv/CsvTypeParser.js +15 -85
- package/dist/csv/CsvTypeParser.js.map +1 -1
- package/dist/csv/NewTableColumnTypes.js +0 -9
- package/dist/csv/NewTableColumnTypes.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/log/LogLevel.js.map +1 -1
- package/dist/log/LogLevelMenuItem.js +0 -5
- package/dist/log/LogLevelMenuItem.js.map +1 -1
- package/dist/log/LogView.js +16 -106
- package/dist/log/LogView.js.map +1 -1
- package/dist/monaco/MonacoCompletionProvider.js +2 -14
- package/dist/monaco/MonacoCompletionProvider.js.map +1 -1
- package/dist/monaco/MonacoUtils.d.ts.map +1 -1
- package/dist/monaco/MonacoUtils.js +21 -49
- package/dist/monaco/MonacoUtils.js.map +1 -1
- package/dist/monaco/index.js.map +1 -1
- package/dist/monaco/lang/db.d.ts.map +1 -1
- package/dist/monaco/lang/db.js +22 -13
- package/dist/monaco/lang/db.js.map +1 -1
- package/dist/monaco/lang/groovy.d.ts.map +1 -1
- package/dist/monaco/lang/groovy.js +28 -15
- package/dist/monaco/lang/groovy.js.map +1 -1
- package/dist/monaco/lang/log.js +1 -0
- package/dist/monaco/lang/log.js.map +1 -1
- package/dist/monaco/lang/python.d.ts.map +1 -1
- package/dist/monaco/lang/python.js +30 -16
- package/dist/monaco/lang/python.js.map +1 -1
- package/dist/monaco/lang/scala.js +26 -13
- package/dist/monaco/lang/scala.js.map +1 -1
- package/dist/notebook/Editor.js +2 -21
- package/dist/notebook/Editor.js.map +1 -1
- package/dist/notebook/ScriptEditor.d.ts +1 -1
- package/dist/notebook/ScriptEditor.d.ts.map +1 -1
- package/dist/notebook/ScriptEditor.js +0 -57
- package/dist/notebook/ScriptEditor.js.map +1 -1
- package/dist/notebook/ScriptEditorUtils.js +1 -7
- package/dist/notebook/ScriptEditorUtils.js.map +1 -1
- package/package.json +11 -11
package/dist/log/LogView.js
CHANGED
|
@@ -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();
|
|
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,29 @@ class LogView extends PureComponent {
|
|
|
148
125
|
});
|
|
149
126
|
return actions;
|
|
150
127
|
}
|
|
151
|
-
|
|
152
128
|
resetLogLevels() {
|
|
153
129
|
var shownLogLevels = {};
|
|
154
|
-
|
|
155
130
|
for (var i = 0; i < LogView.AllLogLevels.length; i += 1) {
|
|
156
131
|
var logLevel = LogView.AllLogLevels[i];
|
|
157
132
|
var isEnabled = LogView.DefaultLogLevels.indexOf(logLevel) >= 0;
|
|
158
133
|
shownLogLevels[logLevel] = isEnabled;
|
|
159
134
|
}
|
|
160
|
-
|
|
161
135
|
this.setState({
|
|
162
136
|
shownLogLevels
|
|
163
137
|
});
|
|
164
138
|
}
|
|
165
|
-
|
|
166
139
|
startListening() {
|
|
167
140
|
var {
|
|
168
141
|
session
|
|
169
142
|
} = this.props;
|
|
170
143
|
this.cancelListener = session.onLogMessage(this.handleLogMessage);
|
|
171
144
|
}
|
|
172
|
-
|
|
173
145
|
stopListening() {
|
|
174
146
|
if (this.cancelListener != null) {
|
|
175
147
|
this.cancelListener();
|
|
176
148
|
this.cancelListener = undefined;
|
|
177
149
|
}
|
|
178
150
|
}
|
|
179
|
-
|
|
180
151
|
initMonaco() {
|
|
181
152
|
assertNotNull(this.editorContainer);
|
|
182
153
|
this.editor = monaco.editor.create(this.editorContainer, {
|
|
@@ -197,80 +168,72 @@ class LogView extends PureComponent {
|
|
|
197
168
|
scrollBeyondLastLine: false,
|
|
198
169
|
value: '',
|
|
199
170
|
wordWrap: 'on'
|
|
200
|
-
});
|
|
201
|
-
// Instead, capture it and do nothing. Same for shift-escape.
|
|
171
|
+
});
|
|
202
172
|
|
|
173
|
+
// When find widget is open, escape key closes it.
|
|
174
|
+
// Instead, capture it and do nothing. Same for shift-escape.
|
|
203
175
|
this.editor.addCommand(monaco.KeyCode.Escape, () => undefined);
|
|
204
|
-
this.editor.addCommand(
|
|
205
|
-
|
|
176
|
+
this.editor.addCommand(
|
|
177
|
+
// eslint-disable-next-line no-bitwise
|
|
178
|
+
monaco.KeyMod.Shift | monaco.KeyCode.Escape, () => undefined);
|
|
206
179
|
|
|
180
|
+
// Restore regular escape to clear selection, when editorText has focus.
|
|
207
181
|
this.editor.addCommand(monaco.KeyCode.Escape, () => {
|
|
208
182
|
var _this$editor, _this$editor2;
|
|
209
|
-
|
|
210
183
|
var position = (_this$editor = this.editor) === null || _this$editor === void 0 ? void 0 : _this$editor.getPosition();
|
|
211
184
|
assertNotNull(position);
|
|
212
185
|
(_this$editor2 = this.editor) === null || _this$editor2 === void 0 ? void 0 : _this$editor2.setPosition(position);
|
|
213
186
|
}, 'findWidgetVisible && editorTextFocus');
|
|
214
|
-
this.editor.addCommand(
|
|
187
|
+
this.editor.addCommand(
|
|
188
|
+
// eslint-disable-next-line no-bitwise
|
|
215
189
|
monaco.KeyMod.Shift | monaco.KeyCode.Escape, () => {
|
|
216
190
|
var _this$editor3, _this$editor4;
|
|
217
|
-
|
|
218
191
|
var position = (_this$editor3 = this.editor) === null || _this$editor3 === void 0 ? void 0 : _this$editor3.getPosition();
|
|
219
192
|
assertNotNull(position);
|
|
220
193
|
(_this$editor4 = this.editor) === null || _this$editor4 === void 0 ? void 0 : _this$editor4.setPosition(position);
|
|
221
194
|
}, 'findWidgetVisible && editorTextFocus');
|
|
222
195
|
}
|
|
223
|
-
|
|
224
196
|
destroyMonaco() {
|
|
225
197
|
if (this.editor) {
|
|
226
198
|
this.editor.dispose();
|
|
227
199
|
this.editor = undefined;
|
|
228
200
|
}
|
|
229
201
|
}
|
|
230
|
-
|
|
231
202
|
triggerFindWidget() {
|
|
232
203
|
var _this$editor5, _this$editor6;
|
|
233
|
-
|
|
234
204
|
// The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.
|
|
235
205
|
// As a workaround, just focus the editor before triggering the action
|
|
236
206
|
// https://github.com/microsoft/monaco-editor/issues/2355
|
|
237
207
|
(_this$editor5 = this.editor) === null || _this$editor5 === void 0 ? void 0 : _this$editor5.focus();
|
|
238
208
|
(_this$editor6 = this.editor) === null || _this$editor6 === void 0 ? void 0 : _this$editor6.trigger('keyboard', 'actions.find', undefined);
|
|
239
209
|
}
|
|
240
|
-
|
|
241
210
|
toggleAll() {
|
|
242
211
|
var {
|
|
243
212
|
shownLogLevels
|
|
244
213
|
} = this.state;
|
|
245
214
|
var isAllEnabled = true;
|
|
246
|
-
|
|
247
215
|
for (var i = 0; i < LogView.AllLogLevels.length; i += 1) {
|
|
248
216
|
var logLevel = LogView.AllLogLevels[i];
|
|
249
|
-
|
|
250
217
|
if (!shownLogLevels[logLevel]) {
|
|
251
218
|
isAllEnabled = false;
|
|
252
219
|
break;
|
|
253
220
|
}
|
|
254
221
|
}
|
|
255
|
-
|
|
256
222
|
if (isAllEnabled) {
|
|
257
223
|
this.setState({
|
|
258
224
|
shownLogLevels: {}
|
|
259
225
|
});
|
|
260
226
|
} else {
|
|
261
227
|
var updatedLogLevels = {};
|
|
262
|
-
|
|
263
228
|
for (var _i = 0; _i < LogView.AllLogLevels.length; _i += 1) {
|
|
264
229
|
var _logLevel = LogView.AllLogLevels[_i];
|
|
265
230
|
updatedLogLevels[_logLevel] = true;
|
|
266
231
|
}
|
|
267
|
-
|
|
268
232
|
this.setState({
|
|
269
233
|
shownLogLevels: updatedLogLevels
|
|
270
234
|
});
|
|
271
235
|
}
|
|
272
236
|
}
|
|
273
|
-
|
|
274
237
|
toggleLogLevel(logLevel) {
|
|
275
238
|
var {
|
|
276
239
|
shownLogLevels
|
|
@@ -280,7 +243,6 @@ class LogView extends PureComponent {
|
|
|
280
243
|
updatedLogLevels[logLevel] = !isEnabled;
|
|
281
244
|
this.updateLogLevels(updatedLogLevels);
|
|
282
245
|
}
|
|
283
|
-
|
|
284
246
|
updateLogLevels(updatedLogLevels) {
|
|
285
247
|
var {
|
|
286
248
|
shownLogLevels
|
|
@@ -290,12 +252,10 @@ class LogView extends PureComponent {
|
|
|
290
252
|
shownLogLevels
|
|
291
253
|
});
|
|
292
254
|
}
|
|
293
|
-
|
|
294
255
|
appendLogText(text) {
|
|
295
256
|
if (!this.editor) {
|
|
296
257
|
return;
|
|
297
258
|
}
|
|
298
|
-
|
|
299
259
|
var model = this.editor.getModel();
|
|
300
260
|
var line = model === null || model === void 0 ? void 0 : model.getLineCount();
|
|
301
261
|
assertNotNull(line);
|
|
@@ -303,7 +263,6 @@ class LogView extends PureComponent {
|
|
|
303
263
|
assertNotNull(column);
|
|
304
264
|
var isBottomVisible = this.isBottomVisible();
|
|
305
265
|
var edits = [];
|
|
306
|
-
|
|
307
266
|
if (column > 0) {
|
|
308
267
|
edits.push({
|
|
309
268
|
range: {
|
|
@@ -318,7 +277,6 @@ class LogView extends PureComponent {
|
|
|
318
277
|
line += 1;
|
|
319
278
|
column = 0;
|
|
320
279
|
}
|
|
321
|
-
|
|
322
280
|
edits.push({
|
|
323
281
|
range: {
|
|
324
282
|
startLineNumber: line,
|
|
@@ -330,195 +288,153 @@ class LogView extends PureComponent {
|
|
|
330
288
|
forceMoveMarkers: true
|
|
331
289
|
});
|
|
332
290
|
model === null || model === void 0 ? void 0 : model.applyEdits(edits);
|
|
333
|
-
|
|
334
291
|
if (isBottomVisible) {
|
|
335
292
|
var lineCount = model === null || model === void 0 ? void 0 : model.getLineCount();
|
|
336
293
|
assertNotNull(lineCount);
|
|
337
294
|
this.editor.revealLine(lineCount, 1);
|
|
338
295
|
}
|
|
339
296
|
}
|
|
297
|
+
|
|
340
298
|
/**
|
|
341
299
|
* Refresh the contents of the log component with the updated filter text
|
|
342
300
|
*/
|
|
343
|
-
|
|
344
|
-
|
|
345
301
|
refreshLogText() {
|
|
346
302
|
if (!this.editor) {
|
|
347
303
|
return;
|
|
348
304
|
}
|
|
349
|
-
|
|
350
305
|
this.truncateLogIfNecessary();
|
|
351
306
|
var {
|
|
352
307
|
shownLogLevels
|
|
353
308
|
} = this.state;
|
|
354
309
|
var isBottomVisible = this.isBottomVisible();
|
|
355
310
|
var text = '';
|
|
356
|
-
|
|
357
311
|
for (var i = 0; i < this.messages.length; i += 1) {
|
|
358
312
|
var message = this.messages[i];
|
|
359
|
-
|
|
360
313
|
if (shownLogLevels[message.logLevel]) {
|
|
361
314
|
var logText = LogView.getLogText(message);
|
|
362
|
-
|
|
363
315
|
if (logText.length > 0) {
|
|
364
316
|
text += logText;
|
|
365
|
-
|
|
366
317
|
if (logText.charAt(logText.length - 1) !== '\n') {
|
|
367
318
|
text += '\n';
|
|
368
319
|
}
|
|
369
320
|
}
|
|
370
321
|
}
|
|
371
322
|
}
|
|
372
|
-
|
|
373
323
|
text = text.trimRight();
|
|
374
324
|
this.editor.setValue(text);
|
|
375
|
-
|
|
376
325
|
if (isBottomVisible) {
|
|
377
326
|
var _this$editor$getModel;
|
|
378
|
-
|
|
379
327
|
var line = (_this$editor$getModel = this.editor.getModel()) === null || _this$editor$getModel === void 0 ? void 0 : _this$editor$getModel.getLineCount();
|
|
380
328
|
assertNotNull(line);
|
|
381
329
|
this.editor.revealLine(line, 1);
|
|
382
330
|
}
|
|
383
|
-
|
|
384
331
|
this.stopFlushTimer();
|
|
385
332
|
this.bufferedMessages = [];
|
|
386
333
|
}
|
|
387
|
-
|
|
388
334
|
truncateLogIfNecessary() {
|
|
389
335
|
if (this.messages.length > LogView.maxLogSize) {
|
|
390
336
|
this.messages = this.messages.splice(this.messages.length - LogView.truncateSize);
|
|
391
337
|
}
|
|
392
338
|
}
|
|
393
|
-
|
|
394
339
|
scrollToBottom() {
|
|
395
340
|
var _this$editor7, _this$editor7$getMode, _this$editor7$getMode2;
|
|
396
|
-
|
|
397
341
|
if (!this.editor) {
|
|
398
342
|
return;
|
|
399
343
|
}
|
|
400
|
-
|
|
401
344
|
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
345
|
assertNotNull(line);
|
|
403
346
|
this.editor.revealLine(line, 1);
|
|
404
347
|
}
|
|
405
|
-
|
|
406
348
|
isBottomVisible() {
|
|
407
349
|
if (!this.editor) {
|
|
408
350
|
return true;
|
|
409
351
|
}
|
|
410
|
-
|
|
411
352
|
var model = this.editor.getModel();
|
|
412
353
|
var line = model === null || model === void 0 ? void 0 : model.getLineCount();
|
|
413
354
|
assertNotNull(line);
|
|
414
355
|
return this.isLineVisible(line);
|
|
415
356
|
}
|
|
416
|
-
|
|
417
357
|
isLineVisible(line) {
|
|
418
358
|
var _this$editor8;
|
|
419
|
-
|
|
420
359
|
var visibleRanges = (_this$editor8 = this.editor) === null || _this$editor8 === void 0 ? void 0 : _this$editor8.getVisibleRanges();
|
|
421
|
-
|
|
422
360
|
if (visibleRanges == null || visibleRanges.length === 0) {
|
|
423
361
|
return false;
|
|
424
362
|
}
|
|
425
|
-
|
|
426
363
|
for (var i = 0; i < visibleRanges.length; i += 1) {
|
|
427
364
|
var range = visibleRanges[i];
|
|
428
|
-
|
|
429
365
|
if (range.startLineNumber <= line && line <= range.endLineNumber) {
|
|
430
366
|
return true;
|
|
431
367
|
}
|
|
432
368
|
}
|
|
433
|
-
|
|
434
369
|
return false;
|
|
435
370
|
}
|
|
436
|
-
/** Checks if the given log message is visible with the current filters */
|
|
437
|
-
|
|
438
371
|
|
|
372
|
+
/** Checks if the given log message is visible with the current filters */
|
|
439
373
|
isLogItemVisible(message) {
|
|
440
374
|
var {
|
|
441
375
|
shownLogLevels
|
|
442
376
|
} = this.state;
|
|
443
377
|
return shownLogLevels[message.logLevel];
|
|
444
378
|
}
|
|
445
|
-
|
|
446
379
|
flush() {
|
|
447
380
|
var text = '';
|
|
448
|
-
|
|
449
381
|
for (var i = 0; i < this.bufferedMessages.length; i += 1) {
|
|
450
382
|
var message = this.bufferedMessages[i];
|
|
451
383
|
var logText = LogView.getLogText(message);
|
|
452
384
|
text += logText;
|
|
453
|
-
|
|
454
385
|
if (logText.charAt(logText.length - 1) !== '\n') {
|
|
455
386
|
text += '\n';
|
|
456
387
|
}
|
|
457
388
|
}
|
|
458
|
-
|
|
459
389
|
this.bufferedMessages = [];
|
|
460
390
|
this.appendLogText(text);
|
|
461
391
|
}
|
|
462
|
-
|
|
463
392
|
queue(message) {
|
|
464
393
|
this.bufferedMessages.push(message);
|
|
465
|
-
|
|
466
394
|
if (this.bufferedMessages.length === 1) {
|
|
467
395
|
this.flushTimer = setTimeout(this.handleFlushTimeout, LogView.bufferTimeout);
|
|
468
396
|
}
|
|
469
397
|
}
|
|
470
|
-
|
|
471
398
|
stopFlushTimer() {
|
|
472
399
|
if (this.flushTimer) {
|
|
473
400
|
clearTimeout(this.flushTimer);
|
|
474
401
|
this.flushTimer = undefined;
|
|
475
402
|
}
|
|
476
403
|
}
|
|
477
|
-
|
|
478
404
|
updateDimensions() {
|
|
479
405
|
if (this.editor) {
|
|
480
406
|
this.editor.layout();
|
|
481
407
|
}
|
|
482
408
|
}
|
|
483
|
-
|
|
484
409
|
handleClearClick() {
|
|
485
410
|
this.clearLogs();
|
|
486
411
|
}
|
|
487
|
-
|
|
488
412
|
clearLogs() {
|
|
489
413
|
this.messages = [];
|
|
490
414
|
this.refreshLogText();
|
|
491
415
|
}
|
|
492
|
-
|
|
493
416
|
handleFlushTimeout() {
|
|
494
417
|
this.stopFlushTimer();
|
|
495
418
|
this.flush();
|
|
496
419
|
}
|
|
497
|
-
|
|
498
420
|
handleLogMessage(message) {
|
|
499
421
|
this.messages.push(message);
|
|
500
|
-
|
|
501
422
|
if (this.editor && this.isLogItemVisible(message)) {
|
|
502
423
|
this.queue(message);
|
|
503
424
|
}
|
|
504
425
|
}
|
|
505
|
-
|
|
506
426
|
handleMenuItemClick(logLevel) {
|
|
507
427
|
this.toggleLogLevel(logLevel);
|
|
508
428
|
}
|
|
509
|
-
|
|
510
429
|
handleResetClick() {
|
|
511
430
|
this.resetLogLevels();
|
|
512
431
|
}
|
|
513
|
-
|
|
514
432
|
handleResize() {
|
|
515
433
|
this.updateDimensions();
|
|
516
434
|
}
|
|
517
|
-
|
|
518
435
|
handleToggleAllClick() {
|
|
519
436
|
this.toggleAll();
|
|
520
437
|
}
|
|
521
|
-
|
|
522
438
|
render() {
|
|
523
439
|
var popperOptions = {
|
|
524
440
|
placement: 'bottom-end'
|
|
@@ -542,7 +458,8 @@ class LogView extends PureComponent {
|
|
|
542
458
|
className: "btn-link-icon btn-overflow",
|
|
543
459
|
icon: vsGear,
|
|
544
460
|
tooltip: "Log Settings",
|
|
545
|
-
onClick: () => {
|
|
461
|
+
onClick: () => {
|
|
462
|
+
// no-op: click is handled in `DropdownMenu'
|
|
546
463
|
}
|
|
547
464
|
}, /*#__PURE__*/React.createElement(DropdownMenu, {
|
|
548
465
|
actions: actions,
|
|
@@ -555,18 +472,11 @@ class LogView extends PureComponent {
|
|
|
555
472
|
}
|
|
556
473
|
}));
|
|
557
474
|
}
|
|
558
|
-
|
|
559
475
|
}
|
|
560
|
-
|
|
561
476
|
_defineProperty(LogView, "DefaultLogLevels", [LogLevel.STDOUT, LogLevel.ERROR, LogLevel.FATAL, LogLevel.STDERR, LogLevel.WARN]);
|
|
562
|
-
|
|
563
477
|
_defineProperty(LogView, "AllLogLevels", [LogLevel.INFO, LogLevel.STDOUT, LogLevel.ERROR, LogLevel.FATAL, LogLevel.STDERR, LogLevel.WARN, LogLevel.DEBUG, LogLevel.TRACE]);
|
|
564
|
-
|
|
565
478
|
_defineProperty(LogView, "bufferTimeout", 16);
|
|
566
|
-
|
|
567
479
|
_defineProperty(LogView, "maxLogSize", 131072);
|
|
568
|
-
|
|
569
480
|
_defineProperty(LogView, "truncateSize", 65536);
|
|
570
|
-
|
|
571
481
|
export default LogView;
|
|
572
482
|
//# sourceMappingURL=LogView.js.map
|
package/dist/log/LogView.js.map
CHANGED
|
@@ -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","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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"}
|