@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.
- 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.d.ts +1 -1
- package/dist/command-history/CommandHistory.d.ts.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/CommandHistoryTypes.d.ts +2 -2
- package/dist/command-history/CommandHistoryTypes.d.ts.map +1 -1
- package/dist/command-history/CommandHistoryViewportUpdater.d.ts +1 -1
- package/dist/command-history/CommandHistoryViewportUpdater.d.ts.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 +2 -2
- 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 +7 -7
- 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/ConsoleHistoryTypes.d.ts +1 -1
- package/dist/console-history/ConsoleHistoryTypes.d.ts.map +1 -1
- package/dist/console-history/index.js.map +1 -1
- package/dist/csv/CsvFormats.d.ts +1 -1
- package/dist/csv/CsvFormats.d.ts.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.d.ts +8 -8
- 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.d.ts +2 -2
- package/dist/log/LogView.d.ts.map +1 -1
- package/dist/log/LogView.js +21 -108
- 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/Language.d.ts +1 -1
- package/dist/monaco/lang/Language.d.ts.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,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.
|
|
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
|
-
});
|
|
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(
|
|
205
|
-
|
|
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(
|
|
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: () => {
|
|
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
|
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","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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"}
|