@deephaven/console 1.30.0 → 1.30.1
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/ConsoleInput.d.ts +13 -6
- package/dist/ConsoleInput.d.ts.map +1 -1
- package/dist/ConsoleInput.js +95 -62
- package/dist/ConsoleInput.js.map +1 -1
- package/dist/common/Code.d.ts.map +1 -1
- package/dist/common/Code.js +24 -2
- package/dist/common/Code.js.map +1 -1
- package/dist/log/LogView.d.ts +3 -4
- package/dist/log/LogView.d.ts.map +1 -1
- package/dist/log/LogView.js +34 -35
- package/dist/log/LogView.js.map +1 -1
- package/dist/monaco/MonacoProviders.d.ts +1 -1
- package/dist/monaco/MonacoProviders.d.ts.map +1 -1
- package/dist/monaco/MonacoProviders.js +11 -3
- package/dist/monaco/MonacoProviders.js.map +1 -1
- package/dist/monaco/MonacoUtils.d.ts +28 -6
- package/dist/monaco/MonacoUtils.d.ts.map +1 -1
- package/dist/monaco/MonacoUtils.js +115 -15
- package/dist/monaco/MonacoUtils.js.map +1 -1
- package/dist/monaco/RuffSettingsModal.d.ts.map +1 -1
- package/dist/monaco/RuffSettingsModal.js +45 -30
- package/dist/monaco/RuffSettingsModal.js.map +1 -1
- package/dist/notebook/Editor.d.ts +5 -3
- package/dist/notebook/Editor.d.ts.map +1 -1
- package/dist/notebook/Editor.js +61 -44
- package/dist/notebook/Editor.js.map +1 -1
- package/package.json +2 -2
package/dist/common/Code.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Code.js","names":["React","useEffect","useState","
|
|
1
|
+
{"version":3,"file":"Code.js","names":["React","useEffect","useState","Log","useTheme","MonacoUtils","jsx","_jsx","log","module","Code","_ref","children","language","_useState","_useState2","_slicedToArray","colorizedHtml","setColorizedHtml","_useState3","_useState4","isColorizeFailed","setIsColorizeFailed","_useTheme","activeThemes","isCanceled","colorize","_colorize","apply","arguments","_asyncToGenerator","monaco","load","result","editor","toString","catch","err","error","style","pointerEvents","whiteSpace","dangerouslySetInnerHTML","__html","undefined"],"sources":["../../src/common/Code.tsx"],"sourcesContent":["import React, { useEffect, useState, type ReactNode } from 'react';\nimport Log from '@deephaven/log';\nimport { useTheme } from '@deephaven/components';\nimport MonacoUtils from '../monaco/MonacoUtils';\n\nconst log = Log.module('Code');\n\ninterface CodeProps {\n children: ReactNode;\n language: string;\n}\n\nfunction Code({ children, language }: CodeProps): JSX.Element {\n const [colorizedHtml, setColorizedHtml] = useState<string | null>(null);\n const [isColorizeFailed, setIsColorizeFailed] = useState(false);\n const { activeThemes } = useTheme();\n\n useEffect(() => {\n let isCanceled = false;\n async function colorize() {\n if (children != null && activeThemes != null) {\n const monaco = await MonacoUtils.load();\n const result = await monaco.editor.colorize(\n children.toString(),\n language,\n {}\n );\n if (!isCanceled) {\n setColorizedHtml(result);\n setIsColorizeFailed(false);\n }\n }\n }\n colorize().catch(err => {\n log.error('Unable to colorize code, showing it as plain text', err);\n if (!isCanceled) {\n setIsColorizeFailed(true);\n }\n });\n return () => {\n isCanceled = true;\n };\n }, [activeThemes, children, language]);\n\n if (isColorizeFailed) {\n return (\n <div style={{ pointerEvents: 'none', whiteSpace: 'pre-wrap' }}>\n {children}\n </div>\n );\n }\n\n return (\n <div\n // Add pointerEvents: 'none' has huge benefits on performance with Hit Test testing on large colorized elements.\n // You can still select the text event with this set\n style={{ pointerEvents: 'none' }}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={\n colorizedHtml != null ? { __html: colorizedHtml } : undefined\n }\n />\n );\n}\n\nexport default Code;\n"],"mappings":";;;;;;;;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAwB,OAAO;AAClE,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,QAAQ,QAAQ,uBAAuB;AAAC,OAC1CC,WAAW;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAElB,IAAMC,GAAG,GAAGL,GAAG,CAACM,MAAM,CAAC,MAAM,CAAC;AAO9B,SAASC,IAAIA,CAAAC,IAAA,EAAiD;EAAA,IAA9CC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IAAEC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;EAChC,IAAAC,SAAA,GAA0CZ,QAAQ,CAAgB,IAAI,CAAC;IAAAa,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAAhEG,aAAa,GAAAF,UAAA;IAAEG,gBAAgB,GAAAH,UAAA;EACtC,IAAAI,UAAA,GAAgDjB,QAAQ,CAAC,KAAK,CAAC;IAAAkB,UAAA,GAAAJ,cAAA,CAAAG,UAAA;IAAxDE,gBAAgB,GAAAD,UAAA;IAAEE,mBAAmB,GAAAF,UAAA;EAC5C,IAAAG,SAAA,GAAyBnB,QAAQ,CAAC,CAAC;IAA3BoB,YAAY,GAAAD,SAAA,CAAZC,YAAY;EAEpBvB,SAAS,CAAC,MAAM;IACd,IAAIwB,UAAU,GAAG,KAAK;IAAC,SACRC,QAAQA,CAAA;MAAA,OAAAC,SAAA,CAAAC,KAAA,OAAAC,SAAA;IAAA;IAAA,SAAAF,UAAA;MAAAA,SAAA,GAAAG,iBAAA,CAAvB,aAA0B;QACxB,IAAIlB,QAAQ,IAAI,IAAI,IAAIY,YAAY,IAAI,IAAI,EAAE;UAC5C,IAAMO,MAAM,SAAS1B,WAAW,CAAC2B,IAAI,CAAC,CAAC;UACvC,IAAMC,MAAM,SAASF,MAAM,CAACG,MAAM,CAACR,QAAQ,CACzCd,QAAQ,CAACuB,QAAQ,CAAC,CAAC,EACnBtB,QAAQ,EACR,CAAC,CACH,CAAC;UACD,IAAI,CAACY,UAAU,EAAE;YACfP,gBAAgB,CAACe,MAAM,CAAC;YACxBX,mBAAmB,CAAC,KAAK,CAAC;UAC5B;QACF;MACF,CAAC;MAAA,OAAAK,SAAA,CAAAC,KAAA,OAAAC,SAAA;IAAA;IACDH,QAAQ,CAAC,CAAC,CAACU,KAAK,CAACC,GAAG,IAAI;MACtB7B,GAAG,CAAC8B,KAAK,CAAC,mDAAmD,EAAED,GAAG,CAAC;MACnE,IAAI,CAACZ,UAAU,EAAE;QACfH,mBAAmB,CAAC,IAAI,CAAC;MAC3B;IACF,CAAC,CAAC;IACF,OAAO,MAAM;MACXG,UAAU,GAAG,IAAI;IACnB,CAAC;EACH,CAAC,EAAE,CAACD,YAAY,EAAEZ,QAAQ,EAAEC,QAAQ,CAAC,CAAC;EAEtC,IAAIQ,gBAAgB,EAAE;IACpB,oBACEd,IAAA;MAAKgC,KAAK,EAAE;QAAEC,aAAa,EAAE,MAAM;QAAEC,UAAU,EAAE;MAAW,CAAE;MAAA7B,QAAA,EAC3DA;IAAQ,CACN,CAAC;EAEV;EAEA,oBACEL,IAAA;IACE;IACA;IACAgC,KAAK,EAAE;MAAEC,aAAa,EAAE;IAAO;IAC/B;IAAA;IACAE,uBAAuB,EACrBzB,aAAa,IAAI,IAAI,GAAG;MAAE0B,MAAM,EAAE1B;IAAc,CAAC,GAAG2B;EACrD,CACF,CAAC;AAEN;AAEA,eAAelC,IAAI","ignoreList":[]}
|
package/dist/log/LogView.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PureComponent, type ReactElement } from 'react';
|
|
2
2
|
import { type DropdownActions } from '@deephaven/components';
|
|
3
3
|
import type { dh } from '@deephaven/jsapi-types';
|
|
4
|
-
import * as monaco from 'monaco-editor';
|
|
4
|
+
import type * as monaco from 'monaco-editor';
|
|
5
5
|
import './LogView.scss';
|
|
6
6
|
import LogLevelMenuItem from './LogLevelMenuItem';
|
|
7
7
|
interface LogViewProps {
|
|
@@ -28,7 +28,6 @@ declare class LogView extends PureComponent<LogViewProps, LogViewState> {
|
|
|
28
28
|
componentWillUnmount(): void;
|
|
29
29
|
cancelListener?: () => void | null;
|
|
30
30
|
editor?: monaco.editor.IStandaloneCodeEditor;
|
|
31
|
-
editorContainer: HTMLDivElement | null;
|
|
32
31
|
logLevelMenuItems: Record<string, LogLevelMenuItem>;
|
|
33
32
|
flushTimer?: ReturnType<typeof setTimeout>;
|
|
34
33
|
bufferedMessages: dh.ide.LogItem[];
|
|
@@ -37,8 +36,8 @@ declare class LogView extends PureComponent<LogViewProps, LogViewState> {
|
|
|
37
36
|
resetLogLevels(): void;
|
|
38
37
|
startListening(): void;
|
|
39
38
|
stopListening(): void;
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
handleEditorInitialized(editor: monaco.editor.IStandaloneCodeEditor): void;
|
|
40
|
+
handleEditorWillDestroy(): void;
|
|
42
41
|
triggerFindWidget(): void;
|
|
43
42
|
toggleAll(): void;
|
|
44
43
|
toggleLogLevel(logLevel: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogView.d.ts","sourceRoot":"","sources":["../../src/log/LogView.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAEL,KAAK,eAAe,EAErB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"LogView.d.ts","sourceRoot":"","sources":["../../src/log/LogView.tsx"],"names":[],"mappings":"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"}
|
package/dist/log/LogView.js
CHANGED
|
@@ -7,13 +7,32 @@ import React, { PureComponent } from 'react';
|
|
|
7
7
|
import { Button, DropdownMenu } from '@deephaven/components';
|
|
8
8
|
import { vsGear, dhTrashUndo } from '@deephaven/icons';
|
|
9
9
|
import { assertNotNull } from '@deephaven/utils';
|
|
10
|
-
import * as monaco from 'monaco-editor';
|
|
11
10
|
import ConsoleUtils from "../common/ConsoleUtils.js";
|
|
12
11
|
import LogLevel from "./LogLevel.js";
|
|
13
12
|
import "./LogView.css";
|
|
14
13
|
import LogLevelMenuItem from "./LogLevelMenuItem.js";
|
|
14
|
+
import Editor from "../notebook/Editor.js";
|
|
15
15
|
import { MonacoUtils } from "../monaco/index.js";
|
|
16
16
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
|
+
var EDITOR_SETTINGS = {
|
|
18
|
+
copyWithSyntaxHighlighting: false,
|
|
19
|
+
fixedOverflowWidgets: true,
|
|
20
|
+
folding: false,
|
|
21
|
+
fontFamily: 'Fira Mono',
|
|
22
|
+
glyphMargin: false,
|
|
23
|
+
language: 'log',
|
|
24
|
+
lineDecorationsWidth: 0,
|
|
25
|
+
lineNumbers: 'off',
|
|
26
|
+
lineNumbersMinChars: 0,
|
|
27
|
+
minimap: {
|
|
28
|
+
enabled: false
|
|
29
|
+
},
|
|
30
|
+
readOnly: true,
|
|
31
|
+
renderLineHighlight: 'none',
|
|
32
|
+
scrollBeyondLastLine: false,
|
|
33
|
+
value: '',
|
|
34
|
+
wordWrap: 'on'
|
|
35
|
+
};
|
|
17
36
|
/**
|
|
18
37
|
* Log view contents. Uses a monaco editor to display/search the contents of the log.
|
|
19
38
|
*/
|
|
@@ -27,12 +46,13 @@ class LogView extends PureComponent {
|
|
|
27
46
|
super(props);
|
|
28
47
|
_defineProperty(this, "cancelListener", void 0);
|
|
29
48
|
_defineProperty(this, "editor", void 0);
|
|
30
|
-
_defineProperty(this, "editorContainer", void 0);
|
|
31
49
|
_defineProperty(this, "logLevelMenuItems", void 0);
|
|
32
50
|
_defineProperty(this, "flushTimer", void 0);
|
|
33
51
|
_defineProperty(this, "bufferedMessages", void 0);
|
|
34
52
|
_defineProperty(this, "messages", void 0);
|
|
35
53
|
this.handleClearClick = this.handleClearClick.bind(this);
|
|
54
|
+
this.handleEditorInitialized = this.handleEditorInitialized.bind(this);
|
|
55
|
+
this.handleEditorWillDestroy = this.handleEditorWillDestroy.bind(this);
|
|
36
56
|
this.handleFlushTimeout = this.handleFlushTimeout.bind(this);
|
|
37
57
|
this.handleLogMessage = this.handleLogMessage.bind(this);
|
|
38
58
|
this.handleMenuItemClick = this.handleMenuItemClick.bind(this);
|
|
@@ -40,7 +60,6 @@ class LogView extends PureComponent {
|
|
|
40
60
|
this.handleResize = this.handleResize.bind(this);
|
|
41
61
|
this.handleToggleAllClick = this.handleToggleAllClick.bind(this);
|
|
42
62
|
this.logLevelMenuItems = {};
|
|
43
|
-
this.editorContainer = null;
|
|
44
63
|
this.bufferedMessages = [];
|
|
45
64
|
this.messages = [];
|
|
46
65
|
this.state = {
|
|
@@ -49,7 +68,6 @@ class LogView extends PureComponent {
|
|
|
49
68
|
}
|
|
50
69
|
componentDidMount() {
|
|
51
70
|
this.resetLogLevels();
|
|
52
|
-
this.initMonaco();
|
|
53
71
|
this.startListening();
|
|
54
72
|
window.addEventListener('resize', this.handleResize);
|
|
55
73
|
}
|
|
@@ -70,7 +88,6 @@ class LogView extends PureComponent {
|
|
|
70
88
|
componentWillUnmount() {
|
|
71
89
|
this.stopFlushTimer();
|
|
72
90
|
this.stopListening();
|
|
73
|
-
this.destroyMonaco();
|
|
74
91
|
window.removeEventListener('resize', this.handleResize);
|
|
75
92
|
}
|
|
76
93
|
getMenuActions(shownLogLevels) {
|
|
@@ -149,27 +166,9 @@ class LogView extends PureComponent {
|
|
|
149
166
|
this.cancelListener = undefined;
|
|
150
167
|
}
|
|
151
168
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
copyWithSyntaxHighlighting: false,
|
|
156
|
-
fixedOverflowWidgets: true,
|
|
157
|
-
folding: false,
|
|
158
|
-
fontFamily: 'Fira Mono',
|
|
159
|
-
glyphMargin: false,
|
|
160
|
-
language: 'log',
|
|
161
|
-
lineDecorationsWidth: 0,
|
|
162
|
-
lineNumbers: 'off',
|
|
163
|
-
lineNumbersMinChars: 0,
|
|
164
|
-
minimap: {
|
|
165
|
-
enabled: false
|
|
166
|
-
},
|
|
167
|
-
readOnly: true,
|
|
168
|
-
renderLineHighlight: 'none',
|
|
169
|
-
scrollBeyondLastLine: false,
|
|
170
|
-
value: '',
|
|
171
|
-
wordWrap: 'on'
|
|
172
|
-
});
|
|
169
|
+
handleEditorInitialized(editor) {
|
|
170
|
+
this.editor = editor;
|
|
171
|
+
var monaco = MonacoUtils.getMonaco();
|
|
173
172
|
|
|
174
173
|
// Override default Monaco keybindings for `escape` and `shift-escape`
|
|
175
174
|
[[monaco.KeyCode.Escape], [monaco.KeyMod.Shift | monaco.KeyCode.Escape] // eslint-disable-line no-bitwise
|
|
@@ -194,12 +193,12 @@ class LogView extends PureComponent {
|
|
|
194
193
|
}
|
|
195
194
|
});
|
|
196
195
|
});
|
|
196
|
+
|
|
197
|
+
// Show anything logged before the editor existed
|
|
198
|
+
this.refreshLogText();
|
|
197
199
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
this.editor.dispose();
|
|
201
|
-
this.editor = undefined;
|
|
202
|
-
}
|
|
200
|
+
handleEditorWillDestroy() {
|
|
201
|
+
this.editor = undefined;
|
|
203
202
|
}
|
|
204
203
|
triggerFindWidget() {
|
|
205
204
|
var _this$editor3, _this$editor4;
|
|
@@ -457,11 +456,11 @@ class LogView extends PureComponent {
|
|
|
457
456
|
popperOptions: popperOptions
|
|
458
457
|
})
|
|
459
458
|
})]
|
|
460
|
-
}), /*#__PURE__*/_jsx(
|
|
459
|
+
}), /*#__PURE__*/_jsx(Editor, {
|
|
461
460
|
className: "log-pane-editor h-100 w-100",
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
461
|
+
settings: EDITOR_SETTINGS,
|
|
462
|
+
onEditorInitialized: this.handleEditorInitialized,
|
|
463
|
+
onEditorWillDestroy: this.handleEditorWillDestroy
|
|
465
464
|
})]
|
|
466
465
|
});
|
|
467
466
|
}
|
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","MonacoUtils","jsx","_jsx","jsxs","_jsxs","LogView","getLogText","logItem","date","Date","micros","timestamp","formatTimestamp","concat","logLevel","message","constructor","props","_defineProperty","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","_this","actions","push","menuElement","className","children","group","order","_loop","AllLogLevels","i","on","title","onClick","ref","element","length","kind","_loop2","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","KeyCode","Escape","KeyMod","Shift","forEach","keybindings","disableKeyBindings","addAction","id","label","keybindingContext","run","_this$editor","_this$editor2","position","getPosition","setPosition","dispose","triggerFindWidget","_this$editor3","_this$editor4","focus","trigger","toggleAll","isAllEnabled","updatedLogLevels","toggleLogLevel","updateLogLevels","_objectSpread","appendLogText","text","model","getModel","line","getLineCount","column","getLineLength","isBottomVisible","edits","range","startLineNumber","startColumn","endLineNumber","endColumn","forceMoveMarkers","applyEdits","lineCount","revealLine","truncateLogIfNecessary","logText","charAt","trimRight","setValue","_this$editor$getModel","maxLogSize","splice","truncateSize","scrollToBottom","_this$editor5","_this$editor5$getMode","call","isLineVisible","_this$editor6","visibleRanges","getVisibleRanges","isLogItemVisible","flush","queue","flushTimer","setTimeout","bufferTimeout","clearTimeout","layout","render","popperOptions","placement","icon","tooltip","popperClassName","STDOUT","ERROR","FATAL","STDERR","WARN","INFO","DEBUG","TRACE"],"sources":["../../src/log/LogView.tsx"],"sourcesContent":["import React, { PureComponent, type ReactElement } from 'react';\nimport {\n Button,\n type DropdownActions,\n DropdownMenu,\n} from '@deephaven/components';\nimport { vsGear, dhTrashUndo } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type 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';\nimport { MonacoUtils } from '../monaco';\n\ninterface LogViewProps {\n session: dh.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: dh.ide.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: dh.ide.LogItem[];\n\n messages: dh.ide.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 // Override default Monaco keybindings for `escape` and `shift-escape`\n [\n [monaco.KeyCode.Escape],\n [monaco.KeyMod.Shift | monaco.KeyCode.Escape], // eslint-disable-line no-bitwise\n ].forEach(keybindings => {\n assertNotNull(this.editor);\n\n // Monaco default behavior is for escape key to close the find widget.\n // Instead, capture it and do nothing. Same for shift-escape.\n MonacoUtils.disableKeyBindings(this.editor, keybindings);\n\n // Restore regular escape to clear selection, when editorText has focus.\n this.editor.addAction({\n id: 'clear-selection-on-escape',\n label: '',\n keybindings: [monaco.KeyCode.Escape],\n keybindingContext: 'findWidgetVisible && editorTextFocus',\n run: () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n });\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: dh.ide.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: dh.ide.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: dh.ide.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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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"LogView.js","names":["React","PureComponent","Button","DropdownMenu","vsGear","dhTrashUndo","assertNotNull","ConsoleUtils","LogLevel","LogLevelMenuItem","Editor","MonacoUtils","jsx","_jsx","jsxs","_jsxs","EDITOR_SETTINGS","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","language","lineDecorationsWidth","lineNumbers","lineNumbersMinChars","minimap","enabled","readOnly","renderLineHighlight","scrollBeyondLastLine","value","wordWrap","LogView","getLogText","logItem","date","Date","micros","timestamp","formatTimestamp","concat","logLevel","message","constructor","props","_defineProperty","handleClearClick","bind","handleEditorInitialized","handleEditorWillDestroy","handleFlushTimeout","handleLogMessage","handleMenuItemClick","handleResetClick","handleResize","handleToggleAllClick","logLevelMenuItems","bufferedMessages","messages","state","shownLogLevels","componentDidMount","resetLogLevels","startListening","window","addEventListener","componentDidUpdate","prevProps","prevState","updateDimensions","refreshLogText","session","stopListening","clearLogs","componentWillUnmount","stopFlushTimer","removeEventListener","getMenuActions","_this","actions","push","menuElement","className","children","group","order","_loop","AllLogLevels","i","on","title","onClick","ref","element","length","kind","_loop2","isEnabled","DefaultLogLevels","some","level","setState","cancelListener","onLogMessage","undefined","editor","monaco","getMonaco","KeyCode","Escape","KeyMod","Shift","forEach","keybindings","disableKeyBindings","addAction","id","label","keybindingContext","run","_this$editor","_this$editor2","position","getPosition","setPosition","triggerFindWidget","_this$editor3","_this$editor4","focus","trigger","toggleAll","isAllEnabled","updatedLogLevels","toggleLogLevel","updateLogLevels","_objectSpread","appendLogText","text","model","getModel","line","getLineCount","column","getLineLength","isBottomVisible","edits","range","startLineNumber","startColumn","endLineNumber","endColumn","forceMoveMarkers","applyEdits","lineCount","revealLine","truncateLogIfNecessary","logText","charAt","trimRight","setValue","_this$editor$getModel","maxLogSize","splice","truncateSize","scrollToBottom","_this$editor5","_this$editor5$getMode","call","isLineVisible","_this$editor6","visibleRanges","getVisibleRanges","isLogItemVisible","flush","queue","flushTimer","setTimeout","bufferTimeout","clearTimeout","layout","render","popperOptions","placement","icon","tooltip","popperClassName","settings","onEditorInitialized","onEditorWillDestroy","STDOUT","ERROR","FATAL","STDERR","WARN","INFO","DEBUG","TRACE"],"sources":["../../src/log/LogView.tsx"],"sourcesContent":["import React, { PureComponent, type ReactElement } from 'react';\nimport {\n Button,\n type DropdownActions,\n DropdownMenu,\n} from '@deephaven/components';\nimport { vsGear, dhTrashUndo } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type Placement } from 'popper.js';\nimport type * as monaco from 'monaco-editor';\nimport ConsoleUtils from '../common/ConsoleUtils';\nimport LogLevel from './LogLevel';\nimport './LogView.scss';\nimport LogLevelMenuItem from './LogLevelMenuItem';\nimport Editor from '../notebook/Editor';\nimport { MonacoUtils } from '../monaco';\n\nconst EDITOR_SETTINGS: monaco.editor.IStandaloneEditorConstructionOptions = {\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\ninterface LogViewProps {\n session: dh.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: dh.ide.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.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorWillDestroy = this.handleEditorWillDestroy.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.bufferedMessages = [];\n this.messages = [];\n\n this.state = {\n shownLogLevels: {},\n };\n }\n\n componentDidMount(): void {\n this.resetLogLevels();\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\n window.removeEventListener('resize', this.handleResize);\n }\n\n cancelListener?: () => void | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n logLevelMenuItems: Record<string, LogLevelMenuItem>;\n\n flushTimer?: ReturnType<typeof setTimeout>;\n\n bufferedMessages: dh.ide.LogItem[];\n\n messages: dh.ide.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 handleEditorInitialized(editor: monaco.editor.IStandaloneCodeEditor): void {\n this.editor = editor;\n const monaco = MonacoUtils.getMonaco();\n\n // Override default Monaco keybindings for `escape` and `shift-escape`\n [\n [monaco.KeyCode.Escape],\n [monaco.KeyMod.Shift | monaco.KeyCode.Escape], // eslint-disable-line no-bitwise\n ].forEach(keybindings => {\n assertNotNull(this.editor);\n\n // Monaco default behavior is for escape key to close the find widget.\n // Instead, capture it and do nothing. Same for shift-escape.\n MonacoUtils.disableKeyBindings(this.editor, keybindings);\n\n // Restore regular escape to clear selection, when editorText has focus.\n this.editor.addAction({\n id: 'clear-selection-on-escape',\n label: '',\n keybindings: [monaco.KeyCode.Escape],\n keybindingContext: 'findWidgetVisible && editorTextFocus',\n run: () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n });\n });\n\n // Show anything logged before the editor existed\n this.refreshLogText();\n }\n\n handleEditorWillDestroy(): void {\n this.editor = undefined;\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: dh.ide.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: dh.ide.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: dh.ide.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 <Editor\n className=\"log-pane-editor h-100 w-100\"\n settings={EDITOR_SETTINGS}\n onEditorInitialized={this.handleEditorInitialized}\n onEditorWillDestroy={this.handleEditorWillDestroy}\n />\n </div>\n );\n }\n}\n\nexport default LogView;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Completion provider for a code session
|
|
3
3
|
*/
|
|
4
4
|
import { PureComponent } from 'react';
|
|
5
|
-
import * as monaco from 'monaco-editor';
|
|
5
|
+
import type * as monaco from 'monaco-editor';
|
|
6
6
|
import type { dh } from '@deephaven/jsapi-types';
|
|
7
7
|
import { Workspace, type Diagnostic } from '@astral-sh/ruff-wasm-web';
|
|
8
8
|
interface MonacoProviderProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonacoProviders.d.ts","sourceRoot":"","sources":["../../src/monaco/MonacoProviders.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"MonacoProviders.d.ts","sourceRoot":"","sources":["../../src/monaco/MonacoProviders.tsx"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,6 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
|
|
|
7
7
|
* Completion provider for a code session
|
|
8
8
|
*/
|
|
9
9
|
import { PureComponent } from 'react';
|
|
10
|
-
import * as monaco from 'monaco-editor';
|
|
11
10
|
import Log from '@deephaven/log';
|
|
12
11
|
import init, { Workspace } from '@astral-sh/ruff-wasm-web';
|
|
13
12
|
import RUFF_DEFAULT_SETTINGS from "./RuffDefaultSettings.js";
|
|
@@ -29,7 +28,12 @@ class MonacoProviders extends PureComponent {
|
|
|
29
28
|
if (MonacoProviders.initRuffPromise) {
|
|
30
29
|
return MonacoProviders.initRuffPromise;
|
|
31
30
|
}
|
|
32
|
-
|
|
31
|
+
|
|
32
|
+
// Ruff is only useful once an editor has loaded Monaco. Wait for that
|
|
33
|
+
// rather than loading Monaco here
|
|
34
|
+
MonacoProviders.initRuffPromise = new Promise(resolve => {
|
|
35
|
+
MonacoUtils.whenLoaded(resolve);
|
|
36
|
+
}).then(() => init({})).then(() => {
|
|
33
37
|
log.debug('Initialized Ruff', Workspace.version());
|
|
34
38
|
MonacoProviders.isRuffInitialized = true;
|
|
35
39
|
MonacoProviders.updateRuffWorkspace();
|
|
@@ -85,6 +89,7 @@ class MonacoProviders extends PureComponent {
|
|
|
85
89
|
return diagnostics;
|
|
86
90
|
}
|
|
87
91
|
static lintAllPython() {
|
|
92
|
+
var monaco = MonacoUtils.getMonaco();
|
|
88
93
|
if (!MonacoProviders.isRuffEnabled) {
|
|
89
94
|
monaco.editor.removeAllMarkers('ruff');
|
|
90
95
|
return;
|
|
@@ -98,6 +103,7 @@ class MonacoProviders extends PureComponent {
|
|
|
98
103
|
if (!MonacoProviders.ruffWorkspace) {
|
|
99
104
|
return;
|
|
100
105
|
}
|
|
106
|
+
var monaco = MonacoUtils.getMonaco();
|
|
101
107
|
var diagnostics = MonacoProviders.getDiagnostics(model);
|
|
102
108
|
log.debug("Linting Python document: ".concat(model.uri.toString()), diagnostics);
|
|
103
109
|
monaco.editor.setModelMarkers(model, 'ruff', diagnostics.map(d => {
|
|
@@ -125,7 +131,7 @@ class MonacoProviders extends PureComponent {
|
|
|
125
131
|
* @returns Monaco kind
|
|
126
132
|
*/
|
|
127
133
|
static lspToMonacoKind(kind) {
|
|
128
|
-
var monacoKinds =
|
|
134
|
+
var monacoKinds = MonacoUtils.getMonaco().languages.CompletionItemKind;
|
|
129
135
|
switch (kind) {
|
|
130
136
|
case 1:
|
|
131
137
|
return monacoKinds.Text;
|
|
@@ -225,6 +231,7 @@ class MonacoProviders extends PureComponent {
|
|
|
225
231
|
}
|
|
226
232
|
};
|
|
227
233
|
}
|
|
234
|
+
var monaco = MonacoUtils.getMonaco();
|
|
228
235
|
var diagnostics = MonacoProviders.getDiagnostics(model).filter(d => {
|
|
229
236
|
var diagnosticRange = new monaco.Range(d.location.row, d.location.column, d.end_location.row, d.end_location.column);
|
|
230
237
|
return d.code != null &&
|
|
@@ -370,6 +377,7 @@ class MonacoProviders extends PureComponent {
|
|
|
370
377
|
var _this$props = this.props,
|
|
371
378
|
language = _this$props.language,
|
|
372
379
|
session = _this$props.session;
|
|
380
|
+
var monaco = MonacoUtils.getMonaco();
|
|
373
381
|
this.registeredCompletionProvider = monaco.languages.registerCompletionItemProvider(language, {
|
|
374
382
|
provideCompletionItems: this.handleCompletionRequest,
|
|
375
383
|
triggerCharacters: ['.', '"', "'"]
|