@deephaven/console 0.67.0 → 0.67.1-beta.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/Console.d.ts +12 -12
- package/dist/Console.d.ts.map +1 -1
- package/dist/Console.js +0 -1
- package/dist/Console.js.map +1 -1
- package/dist/ConsoleInput.d.ts +2 -2
- package/dist/ConsoleInput.d.ts.map +1 -1
- package/dist/ConsoleInput.js.map +1 -1
- package/dist/ConsoleMenu.d.ts +7 -7
- package/dist/ConsoleMenu.d.ts.map +1 -1
- package/dist/ConsoleMenu.js.map +1 -1
- package/dist/ConsoleStatusBar.d.ts +5 -5
- package/dist/ConsoleStatusBar.d.ts.map +1 -1
- package/dist/ConsoleStatusBar.js.map +1 -1
- package/dist/HeapUsage.d.ts +2 -2
- package/dist/HeapUsage.d.ts.map +1 -1
- package/dist/HeapUsage.js.map +1 -1
- package/dist/common/ConsoleUtils.d.ts +5 -5
- package/dist/common/ConsoleUtils.d.ts.map +1 -1
- package/dist/common/ConsoleUtils.js.map +1 -1
- package/dist/console-history/ConsoleHistory.d.ts +2 -2
- package/dist/console-history/ConsoleHistory.d.ts.map +1 -1
- package/dist/console-history/ConsoleHistory.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItem.d.ts +3 -3
- package/dist/console-history/ConsoleHistoryItem.d.ts.map +1 -1
- package/dist/console-history/ConsoleHistoryItem.js.map +1 -1
- package/dist/console-history/ConsoleHistoryTypes.d.ts +2 -2
- package/dist/console-history/ConsoleHistoryTypes.d.ts.map +1 -1
- package/dist/console-history/ConsoleHistoryTypes.js.map +1 -1
- package/dist/csv/CsvInputBar.d.ts +2 -2
- package/dist/csv/CsvInputBar.d.ts.map +1 -1
- package/dist/csv/CsvInputBar.js.map +1 -1
- package/dist/csv/CsvParser.d.ts +6 -6
- package/dist/csv/CsvParser.d.ts.map +1 -1
- package/dist/csv/CsvParser.js.map +1 -1
- package/dist/log/LogView.d.ts +8 -8
- package/dist/log/LogView.d.ts.map +1 -1
- package/dist/log/LogView.js.map +1 -1
- package/dist/monaco/MonacoProviders.d.ts +4 -4
- package/dist/monaco/MonacoProviders.d.ts.map +1 -1
- package/dist/monaco/MonacoProviders.js +5 -5
- package/dist/monaco/MonacoProviders.js.map +1 -1
- package/dist/monaco/MonacoUtils.d.ts +3 -3
- package/dist/monaco/MonacoUtils.d.ts.map +1 -1
- package/dist/monaco/MonacoUtils.js.map +1 -1
- package/dist/notebook/ScriptEditor.d.ts +2 -2
- package/dist/notebook/ScriptEditor.d.ts.map +1 -1
- package/dist/notebook/ScriptEditor.js.map +1 -1
- package/package.json +13 -13
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","_this$editor5$getMode2","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, ReactElement } from 'react';\nimport { Button, DropdownActions, DropdownMenu } from '@deephaven/components';\nimport { vsGear, dhTrashUndo } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\nimport type { IdeSession, LogItem } from '@deephaven/jsapi-types';\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';\nimport { MonacoUtils } from '../monaco';\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 // 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: 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","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","_this$editor5$getMode2","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, ReactElement } from 'react';\nimport { Button, DropdownActions, DropdownMenu } from '@deephaven/components';\nimport { vsGear, dhTrashUndo } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\nimport type { dh } from '@deephaven/jsapi-types';\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';\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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"}
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { PureComponent } from 'react';
|
|
5
5
|
import * as monaco from 'monaco-editor';
|
|
6
|
-
import type {
|
|
6
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
7
7
|
interface MonacoProviderProps {
|
|
8
8
|
model: monaco.editor.ITextModel;
|
|
9
|
-
session: IdeSession;
|
|
9
|
+
session: dh.IdeSession;
|
|
10
10
|
language: string;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
@@ -29,7 +29,7 @@ declare class MonacoProviders extends PureComponent<MonacoProviderProps, Record<
|
|
|
29
29
|
* @param range The LSP document range to convert
|
|
30
30
|
* @returns The corresponding monaco range
|
|
31
31
|
*/
|
|
32
|
-
static lspToMonacoRange(range:
|
|
32
|
+
static lspToMonacoRange(range: dh.lsp.Range): monaco.IRange;
|
|
33
33
|
/**
|
|
34
34
|
* Converts a monaco position to an LSP position
|
|
35
35
|
* Accounts for LSP indexing from 0 and monaco indexing from 1
|
|
@@ -37,7 +37,7 @@ declare class MonacoProviders extends PureComponent<MonacoProviderProps, Record<
|
|
|
37
37
|
* @param position The monaco position
|
|
38
38
|
* @returns The corresponding LSP position
|
|
39
39
|
*/
|
|
40
|
-
static monacoToLspPosition(position: monaco.IPosition): Position
|
|
40
|
+
static monacoToLspPosition(position: monaco.IPosition): Pick<dh.lsp.Position, 'line' | 'character'>;
|
|
41
41
|
constructor(props: MonacoProviderProps);
|
|
42
42
|
componentDidMount(): void;
|
|
43
43
|
componentWillUnmount(): void;
|
|
@@ -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;AAExC,OAAO,KAAK,
|
|
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;AAExC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAIjD,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;IAChC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,cAAM,eAAgB,SAAQ,aAAa,CACzC,mBAAmB,EACnB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC;;;;;;;OAOG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM;IA0DxD;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM;IAY3D;;;;;;OAMG;IACH,MAAM,CAAC,mBAAmB,CACxB,QAAQ,EAAE,MAAM,CAAC,SAAS,GACzB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;gBAQlC,KAAK,EAAE,mBAAmB;IAQtC,iBAAiB,IAAI,IAAI;IA2BzB,oBAAoB,IAAI,IAAI;IAM5B,4BAA4B,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAElD,2BAA2B,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAEjD,uBAAuB,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAE7C,uBAAuB,CACrB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAC1C,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;IAkEnE,sBAAsB,CACpB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,KAAK,EAAE,MAAM,CAAC,iBAAiB,EAC/B,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,oBAAoB,GAC7C,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC;IAwExE,kBAAkB,CAChB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,GACxB,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;IAkC1D,MAAM,IAAI,IAAI;CAGf;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -132,13 +132,13 @@ class MonacoProviders extends PureComponent {
|
|
|
132
132
|
provideCompletionItems: this.handleCompletionRequest,
|
|
133
133
|
triggerCharacters: ['.', '"', "'"]
|
|
134
134
|
});
|
|
135
|
-
if (session.getSignatureHelp) {
|
|
135
|
+
if (session.getSignatureHelp != null) {
|
|
136
136
|
this.registeredSignatureProvider = monaco.languages.registerSignatureHelpProvider(language, {
|
|
137
137
|
provideSignatureHelp: this.handleSignatureRequest,
|
|
138
138
|
signatureHelpTriggerCharacters: ['(', ',']
|
|
139
139
|
});
|
|
140
140
|
}
|
|
141
|
-
if (session.getHover) {
|
|
141
|
+
if (session.getHover != null) {
|
|
142
142
|
this.registeredHoverProvider = monaco.languages.registerHoverProvider(language, {
|
|
143
143
|
provideHover: this.handleHoverRequest
|
|
144
144
|
});
|
|
@@ -223,7 +223,7 @@ class MonacoProviders extends PureComponent {
|
|
|
223
223
|
model: propModel,
|
|
224
224
|
session
|
|
225
225
|
} = this.props;
|
|
226
|
-
if (model !== propModel ||
|
|
226
|
+
if (model !== propModel || session.getSignatureHelp == null) {
|
|
227
227
|
return null;
|
|
228
228
|
}
|
|
229
229
|
var params = {
|
|
@@ -278,7 +278,7 @@ class MonacoProviders extends PureComponent {
|
|
|
278
278
|
model: propModel,
|
|
279
279
|
session
|
|
280
280
|
} = this.props;
|
|
281
|
-
if (model !== propModel ||
|
|
281
|
+
if (model !== propModel || session.getHover == null) {
|
|
282
282
|
return null;
|
|
283
283
|
}
|
|
284
284
|
var params = {
|
|
@@ -296,7 +296,7 @@ class MonacoProviders extends PureComponent {
|
|
|
296
296
|
contents: hoverContents
|
|
297
297
|
} = hoverItem;
|
|
298
298
|
return {
|
|
299
|
-
contents: hoverContents ? [hoverContents] : []
|
|
299
|
+
contents: hoverContents != null ? [hoverContents] : []
|
|
300
300
|
};
|
|
301
301
|
}).catch(error => {
|
|
302
302
|
log.error('There was an error retrieving hover', error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonacoProviders.js","names":["PureComponent","monaco","Log","log","module","MonacoProviders","lspToMonacoKind","kind","monacoKinds","languages","CompletionItemKind","Text","Method","Function","Constructor","Field","Variable","Class","Interface","Module","Property","Unit","Value","Enum","Keyword","Snippet","Color","File","Reference","Folder","EnumMember","Constant","Struct","Event","Operator","TypeParameter","lspToMonacoRange","range","start","end","startLineNumber","line","startColumn","character","endLineNumber","endColumn","monacoToLspPosition","position","lineNumber","column","constructor","props","_defineProperty","handleCompletionRequest","bind","handleSignatureRequest","handleHoverRequest","componentDidMount","language","session","registeredCompletionProvider","registerCompletionItemProvider","provideCompletionItems","triggerCharacters","getSignatureHelp","registeredSignatureProvider","registerSignatureHelpProvider","provideSignatureHelp","signatureHelpTriggerCharacters","getHover","registeredHoverProvider","registerHoverProvider","provideHover","componentWillUnmount","_this$registeredCompl","_this$registeredSigna","_this$registeredHover","dispose","model","context","propModel","params","textDocument","uri","concat","version","getVersionId","completionItems","getCompletionItems","debug","monacoCompletionItems","then","items","suggestions","map","item","label","detail","documentation","sortText","filterText","textEdit","insertTextFormat","value","insertText","text","insertTextRules","incomplete","catch","error","token","defaultResult","signatures","activeSignature","activeParameter","signatureItems","monacoSignatures","parameters","length","hover","monacoHover","hoverItem","contents","hoverContents","render"],"sources":["../../src/monaco/MonacoProviders.tsx"],"sourcesContent":["/**\n * Completion provider for a code session\n */\nimport { PureComponent } from 'react';\nimport * as monaco from 'monaco-editor';\nimport Log from '@deephaven/log';\nimport type {\n DocumentRange,\n IdeSession,\n Position,\n} from '@deephaven/jsapi-types';\n\nconst log = Log.module('MonacoCompletionProvider');\n\ninterface MonacoProviderProps {\n model: monaco.editor.ITextModel;\n session: IdeSession;\n language: string;\n}\n\n/**\n * Registers a completion provider with monaco for the language and session provided.\n */\nclass MonacoProviders extends PureComponent<\n MonacoProviderProps,\n Record<string, never>\n> {\n /**\n * Converts LSP CompletionItemKind to Monaco CompletionItemKind\n * Defaults to Variable if no LSP kind was provided\n * https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#completionItemKind\n *\n * @param kind The LSP kind\n * @returns Monaco kind\n */\n static lspToMonacoKind(kind: number | undefined): number {\n const monacoKinds = monaco.languages.CompletionItemKind;\n switch (kind) {\n case 1:\n return monacoKinds.Text;\n case 2:\n return monacoKinds.Method;\n case 3:\n return monacoKinds.Function;\n case 4:\n return monacoKinds.Constructor;\n case 5:\n return monacoKinds.Field;\n case 6:\n return monacoKinds.Variable;\n case 7:\n return monacoKinds.Class;\n case 8:\n return monacoKinds.Interface;\n case 9:\n return monacoKinds.Module;\n case 10:\n return monacoKinds.Property;\n case 11:\n return monacoKinds.Unit;\n case 12:\n return monacoKinds.Value;\n case 13:\n return monacoKinds.Enum;\n case 14:\n return monacoKinds.Keyword;\n case 15:\n return monacoKinds.Snippet;\n case 16:\n return monacoKinds.Color;\n case 17:\n return monacoKinds.File;\n case 18:\n return monacoKinds.Reference;\n case 19:\n return monacoKinds.Folder;\n case 20:\n return monacoKinds.EnumMember;\n case 21:\n return monacoKinds.Constant;\n case 22:\n return monacoKinds.Struct;\n case 23:\n return monacoKinds.Event;\n case 24:\n return monacoKinds.Operator;\n case 25:\n return monacoKinds.TypeParameter;\n default:\n return monacoKinds.Variable;\n }\n }\n\n /**\n * Converts an LSP document range to a monaco range\n * Accounts for LSP indexing from 0 and monaco indexing from 1\n *\n * @param range The LSP document range to convert\n * @returns The corresponding monaco range\n */\n static lspToMonacoRange(range: DocumentRange): monaco.IRange {\n const { start, end } = range;\n\n // Monaco expects the columns/ranges to start at 1. LSP starts at 0\n return {\n startLineNumber: start.line + 1,\n startColumn: start.character + 1,\n endLineNumber: end.line + 1,\n endColumn: end.character + 1,\n };\n }\n\n /**\n * Converts a monaco position to an LSP position\n * Accounts for LSP indexing from 0 and monaco indexing from 1\n *\n * @param position The monaco position\n * @returns The corresponding LSP position\n */\n static monacoToLspPosition(position: monaco.IPosition): Position {\n // Monaco 1-indexes Position. LSP 0-indexes Position\n return {\n line: position.lineNumber - 1,\n character: position.column - 1,\n };\n }\n\n constructor(props: MonacoProviderProps) {\n super(props);\n\n this.handleCompletionRequest = this.handleCompletionRequest.bind(this);\n this.handleSignatureRequest = this.handleSignatureRequest.bind(this);\n this.handleHoverRequest = this.handleHoverRequest.bind(this);\n }\n\n componentDidMount(): void {\n const { language, session } = this.props;\n\n this.registeredCompletionProvider =\n monaco.languages.registerCompletionItemProvider(language, {\n provideCompletionItems: this.handleCompletionRequest,\n triggerCharacters: ['.', '\"', \"'\"],\n });\n\n if (session.getSignatureHelp) {\n this.registeredSignatureProvider =\n monaco.languages.registerSignatureHelpProvider(language, {\n provideSignatureHelp: this.handleSignatureRequest,\n signatureHelpTriggerCharacters: ['(', ','],\n });\n }\n\n if (session.getHover) {\n this.registeredHoverProvider = monaco.languages.registerHoverProvider(\n language,\n {\n provideHover: this.handleHoverRequest,\n }\n );\n }\n }\n\n componentWillUnmount(): void {\n this.registeredCompletionProvider?.dispose();\n this.registeredSignatureProvider?.dispose();\n this.registeredHoverProvider?.dispose();\n }\n\n registeredCompletionProvider?: monaco.IDisposable;\n\n registeredSignatureProvider?: monaco.IDisposable;\n\n registeredHoverProvider?: monaco.IDisposable;\n\n handleCompletionRequest(\n model: monaco.editor.ITextModel,\n position: monaco.Position,\n context: monaco.languages.CompletionContext\n ): monaco.languages.ProviderResult<monaco.languages.CompletionList> {\n const { model: propModel, session } = this.props;\n if (model !== propModel) {\n return null;\n }\n\n const params = {\n textDocument: {\n uri: `${model.uri}`,\n version: model.getVersionId(),\n },\n position: MonacoProviders.monacoToLspPosition(position),\n context,\n };\n\n const completionItems = session.getCompletionItems(params);\n log.debug('Requested completion items', params);\n\n const monacoCompletionItems = completionItems\n .then(items => {\n log.debug('Completion items received: ', params, items);\n\n const suggestions = items.map(item => {\n const {\n label,\n kind,\n detail,\n documentation,\n sortText,\n filterText,\n textEdit,\n insertTextFormat,\n } = item;\n\n return {\n label,\n kind: MonacoProviders.lspToMonacoKind(kind),\n detail,\n documentation:\n documentation?.kind === 'markdown'\n ? documentation\n : documentation?.value,\n sortText,\n filterText,\n insertText: textEdit.text,\n // We are basically guessing that LSP's insertTextFormat===2 is\n // semantically equivalent to monaco's insertTextRules===4.\n // Why microsoft is using almost-but-not-LSP apis is beyond me....\n insertTextRules: insertTextFormat === 2 ? 4 : insertTextFormat,\n range: MonacoProviders.lspToMonacoRange(textEdit.range),\n };\n });\n\n return {\n incomplete: true,\n suggestions,\n };\n })\n .catch((error: unknown) => {\n log.error('There was an error retrieving completion items', error);\n return { suggestions: [] };\n });\n\n return monacoCompletionItems;\n }\n\n handleSignatureRequest(\n model: monaco.editor.ITextModel,\n position: monaco.Position,\n token: monaco.CancellationToken,\n context: monaco.languages.SignatureHelpContext\n ): monaco.languages.ProviderResult<monaco.languages.SignatureHelpResult> {\n const defaultResult: monaco.languages.SignatureHelpResult = {\n value: {\n signatures: [],\n activeSignature: 0,\n activeParameter: 0,\n },\n dispose: () => {\n /* no-op */\n },\n };\n\n const { model: propModel, session } = this.props;\n if (model !== propModel || !session.getSignatureHelp) {\n return null;\n }\n\n const params = {\n textDocument: {\n uri: `${model.uri}`,\n version: model.getVersionId(),\n },\n position: MonacoProviders.monacoToLspPosition(position),\n context,\n };\n\n const signatureItems = session.getSignatureHelp(params);\n log.debug('Requested signature help', params);\n\n const monacoSignatures = signatureItems\n .then(items => {\n log.debug('Signatures received: ', params, signatureItems);\n const signatures = items.map(item => {\n const { label, documentation, parameters } = item;\n\n return {\n documentation:\n documentation?.kind === 'markdown'\n ? documentation\n : documentation?.value,\n label,\n parameters: parameters ?? [],\n };\n });\n\n if (signatures.length === 0) {\n return defaultResult;\n }\n\n // For now we will assume we only autocomplete Python w/ 1 signature\n // For multiple signatures, this may need to be sent through the request as context\n const activeSignature = 0;\n\n return {\n value: {\n signatures,\n activeSignature,\n activeParameter: items[activeSignature].activeParameter,\n },\n dispose: () => {\n /* no-op */\n },\n };\n })\n .catch((error: unknown) => {\n log.error('There was an error retrieving completion items', error);\n return defaultResult;\n });\n\n return monacoSignatures;\n }\n\n handleHoverRequest(\n model: monaco.editor.ITextModel,\n position: monaco.Position\n ): monaco.languages.ProviderResult<monaco.languages.Hover> {\n const { model: propModel, session } = this.props;\n if (model !== propModel || !session.getHover) {\n return null;\n }\n\n const params = {\n textDocument: {\n uri: `${model.uri}`,\n version: model.getVersionId(),\n },\n position: MonacoProviders.monacoToLspPosition(position),\n };\n\n const hover = session.getHover(params);\n log.debug('Requested hover', params);\n\n const monacoHover = hover\n .then(hoverItem => {\n log.debug('Hover received: ', params, hoverItem);\n const { contents: hoverContents } = hoverItem;\n\n return {\n contents: hoverContents ? [hoverContents] : [],\n };\n })\n .catch((error: unknown) => {\n log.error('There was an error retrieving hover', error);\n return { contents: [] };\n });\n\n return monacoHover;\n }\n\n render(): null {\n return null;\n }\n}\n\nexport default MonacoProviders;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MonacoProviders.js","names":["PureComponent","monaco","Log","log","module","MonacoProviders","lspToMonacoKind","kind","monacoKinds","languages","CompletionItemKind","Text","Method","Function","Constructor","Field","Variable","Class","Interface","Module","Property","Unit","Value","Enum","Keyword","Snippet","Color","File","Reference","Folder","EnumMember","Constant","Struct","Event","Operator","TypeParameter","lspToMonacoRange","range","start","end","startLineNumber","line","startColumn","character","endLineNumber","endColumn","monacoToLspPosition","position","lineNumber","column","constructor","props","_defineProperty","handleCompletionRequest","bind","handleSignatureRequest","handleHoverRequest","componentDidMount","language","session","registeredCompletionProvider","registerCompletionItemProvider","provideCompletionItems","triggerCharacters","getSignatureHelp","registeredSignatureProvider","registerSignatureHelpProvider","provideSignatureHelp","signatureHelpTriggerCharacters","getHover","registeredHoverProvider","registerHoverProvider","provideHover","componentWillUnmount","_this$registeredCompl","_this$registeredSigna","_this$registeredHover","dispose","model","context","propModel","params","textDocument","uri","concat","version","getVersionId","completionItems","getCompletionItems","debug","monacoCompletionItems","then","items","suggestions","map","item","label","detail","documentation","sortText","filterText","textEdit","insertTextFormat","value","insertText","text","insertTextRules","incomplete","catch","error","token","defaultResult","signatures","activeSignature","activeParameter","signatureItems","monacoSignatures","parameters","length","hover","monacoHover","hoverItem","contents","hoverContents","render"],"sources":["../../src/monaco/MonacoProviders.tsx"],"sourcesContent":["/**\n * Completion provider for a code session\n */\nimport { PureComponent } from 'react';\nimport * as monaco from 'monaco-editor';\nimport Log from '@deephaven/log';\nimport type { dh } from '@deephaven/jsapi-types';\n\nconst log = Log.module('MonacoCompletionProvider');\n\ninterface MonacoProviderProps {\n model: monaco.editor.ITextModel;\n session: dh.IdeSession;\n language: string;\n}\n\n/**\n * Registers a completion provider with monaco for the language and session provided.\n */\nclass MonacoProviders extends PureComponent<\n MonacoProviderProps,\n Record<string, never>\n> {\n /**\n * Converts LSP CompletionItemKind to Monaco CompletionItemKind\n * Defaults to Variable if no LSP kind was provided\n * https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#completionItemKind\n *\n * @param kind The LSP kind\n * @returns Monaco kind\n */\n static lspToMonacoKind(kind: number | undefined): number {\n const monacoKinds = monaco.languages.CompletionItemKind;\n switch (kind) {\n case 1:\n return monacoKinds.Text;\n case 2:\n return monacoKinds.Method;\n case 3:\n return monacoKinds.Function;\n case 4:\n return monacoKinds.Constructor;\n case 5:\n return monacoKinds.Field;\n case 6:\n return monacoKinds.Variable;\n case 7:\n return monacoKinds.Class;\n case 8:\n return monacoKinds.Interface;\n case 9:\n return monacoKinds.Module;\n case 10:\n return monacoKinds.Property;\n case 11:\n return monacoKinds.Unit;\n case 12:\n return monacoKinds.Value;\n case 13:\n return monacoKinds.Enum;\n case 14:\n return monacoKinds.Keyword;\n case 15:\n return monacoKinds.Snippet;\n case 16:\n return monacoKinds.Color;\n case 17:\n return monacoKinds.File;\n case 18:\n return monacoKinds.Reference;\n case 19:\n return monacoKinds.Folder;\n case 20:\n return monacoKinds.EnumMember;\n case 21:\n return monacoKinds.Constant;\n case 22:\n return monacoKinds.Struct;\n case 23:\n return monacoKinds.Event;\n case 24:\n return monacoKinds.Operator;\n case 25:\n return monacoKinds.TypeParameter;\n default:\n return monacoKinds.Variable;\n }\n }\n\n /**\n * Converts an LSP document range to a monaco range\n * Accounts for LSP indexing from 0 and monaco indexing from 1\n *\n * @param range The LSP document range to convert\n * @returns The corresponding monaco range\n */\n static lspToMonacoRange(range: dh.lsp.Range): monaco.IRange {\n const { start, end } = range;\n\n // Monaco expects the columns/ranges to start at 1. LSP starts at 0\n return {\n startLineNumber: start.line + 1,\n startColumn: start.character + 1,\n endLineNumber: end.line + 1,\n endColumn: end.character + 1,\n };\n }\n\n /**\n * Converts a monaco position to an LSP position\n * Accounts for LSP indexing from 0 and monaco indexing from 1\n *\n * @param position The monaco position\n * @returns The corresponding LSP position\n */\n static monacoToLspPosition(\n position: monaco.IPosition\n ): Pick<dh.lsp.Position, 'line' | 'character'> {\n // Monaco 1-indexes Position. LSP 0-indexes Position\n return {\n line: position.lineNumber - 1,\n character: position.column - 1,\n };\n }\n\n constructor(props: MonacoProviderProps) {\n super(props);\n\n this.handleCompletionRequest = this.handleCompletionRequest.bind(this);\n this.handleSignatureRequest = this.handleSignatureRequest.bind(this);\n this.handleHoverRequest = this.handleHoverRequest.bind(this);\n }\n\n componentDidMount(): void {\n const { language, session } = this.props;\n\n this.registeredCompletionProvider =\n monaco.languages.registerCompletionItemProvider(language, {\n provideCompletionItems: this.handleCompletionRequest,\n triggerCharacters: ['.', '\"', \"'\"],\n });\n\n if (session.getSignatureHelp != null) {\n this.registeredSignatureProvider =\n monaco.languages.registerSignatureHelpProvider(language, {\n provideSignatureHelp: this.handleSignatureRequest,\n signatureHelpTriggerCharacters: ['(', ','],\n });\n }\n\n if (session.getHover != null) {\n this.registeredHoverProvider = monaco.languages.registerHoverProvider(\n language,\n {\n provideHover: this.handleHoverRequest,\n }\n );\n }\n }\n\n componentWillUnmount(): void {\n this.registeredCompletionProvider?.dispose();\n this.registeredSignatureProvider?.dispose();\n this.registeredHoverProvider?.dispose();\n }\n\n registeredCompletionProvider?: monaco.IDisposable;\n\n registeredSignatureProvider?: monaco.IDisposable;\n\n registeredHoverProvider?: monaco.IDisposable;\n\n handleCompletionRequest(\n model: monaco.editor.ITextModel,\n position: monaco.Position,\n context: monaco.languages.CompletionContext\n ): monaco.languages.ProviderResult<monaco.languages.CompletionList> {\n const { model: propModel, session } = this.props;\n if (model !== propModel) {\n return null;\n }\n\n const params = {\n textDocument: {\n uri: `${model.uri}`,\n version: model.getVersionId(),\n },\n position: MonacoProviders.monacoToLspPosition(position),\n context,\n };\n\n const completionItems = session.getCompletionItems(params);\n log.debug('Requested completion items', params);\n\n const monacoCompletionItems = completionItems\n .then(items => {\n log.debug('Completion items received: ', params, items);\n\n const suggestions = items.map(item => {\n const {\n label,\n kind,\n detail,\n documentation,\n sortText,\n filterText,\n textEdit,\n insertTextFormat,\n } = item;\n\n return {\n label,\n kind: MonacoProviders.lspToMonacoKind(kind),\n detail,\n documentation:\n documentation?.kind === 'markdown'\n ? documentation\n : documentation?.value,\n sortText,\n filterText,\n insertText: textEdit.text,\n // We are basically guessing that LSP's insertTextFormat===2 is\n // semantically equivalent to monaco's insertTextRules===4.\n // Why microsoft is using almost-but-not-LSP apis is beyond me....\n insertTextRules: insertTextFormat === 2 ? 4 : insertTextFormat,\n range: MonacoProviders.lspToMonacoRange(textEdit.range),\n };\n });\n\n return {\n incomplete: true,\n suggestions,\n };\n })\n .catch((error: unknown) => {\n log.error('There was an error retrieving completion items', error);\n return { suggestions: [] };\n });\n\n return monacoCompletionItems;\n }\n\n handleSignatureRequest(\n model: monaco.editor.ITextModel,\n position: monaco.Position,\n token: monaco.CancellationToken,\n context: monaco.languages.SignatureHelpContext\n ): monaco.languages.ProviderResult<monaco.languages.SignatureHelpResult> {\n const defaultResult: monaco.languages.SignatureHelpResult = {\n value: {\n signatures: [],\n activeSignature: 0,\n activeParameter: 0,\n },\n dispose: () => {\n /* no-op */\n },\n };\n\n const { model: propModel, session } = this.props;\n if (model !== propModel || session.getSignatureHelp == null) {\n return null;\n }\n\n const params = {\n textDocument: {\n uri: `${model.uri}`,\n version: model.getVersionId(),\n },\n position: MonacoProviders.monacoToLspPosition(position),\n context,\n };\n\n const signatureItems = session.getSignatureHelp(params);\n log.debug('Requested signature help', params);\n\n const monacoSignatures = signatureItems\n .then(items => {\n log.debug('Signatures received: ', params, signatureItems);\n const signatures = items.map(item => {\n const { label, documentation, parameters } = item;\n\n return {\n documentation:\n documentation?.kind === 'markdown'\n ? documentation\n : documentation?.value,\n label,\n parameters: parameters ?? [],\n };\n });\n\n if (signatures.length === 0) {\n return defaultResult;\n }\n\n // For now we will assume we only autocomplete Python w/ 1 signature\n // For multiple signatures, this may need to be sent through the request as context\n const activeSignature = 0;\n\n return {\n value: {\n signatures,\n activeSignature,\n activeParameter: items[activeSignature].activeParameter,\n },\n dispose: () => {\n /* no-op */\n },\n };\n })\n .catch((error: unknown) => {\n log.error('There was an error retrieving completion items', error);\n return defaultResult;\n });\n\n return monacoSignatures;\n }\n\n handleHoverRequest(\n model: monaco.editor.ITextModel,\n position: monaco.Position\n ): monaco.languages.ProviderResult<monaco.languages.Hover> {\n const { model: propModel, session } = this.props;\n if (model !== propModel || session.getHover == null) {\n return null;\n }\n\n const params = {\n textDocument: {\n uri: `${model.uri}`,\n version: model.getVersionId(),\n },\n position: MonacoProviders.monacoToLspPosition(position),\n };\n\n const hover = session.getHover(params);\n log.debug('Requested hover', params);\n\n const monacoHover = hover\n .then(hoverItem => {\n log.debug('Hover received: ', params, hoverItem);\n const { contents: hoverContents } = hoverItem;\n\n return {\n contents: hoverContents != null ? [hoverContents] : [],\n };\n })\n .catch((error: unknown) => {\n log.error('There was an error retrieving hover', error);\n return { contents: [] };\n });\n\n return monacoHover;\n }\n\n render(): null {\n return null;\n }\n}\n\nexport default MonacoProviders;\n"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Exports a function for initializing monaco with the deephaven theme/config
|
|
3
3
|
*/
|
|
4
4
|
import { Shortcut } from '@deephaven/components';
|
|
5
|
-
import type {
|
|
5
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
6
6
|
import * as monaco from 'monaco-editor';
|
|
7
7
|
import type { Environment } from 'monaco-editor';
|
|
8
8
|
import { Language } from './lang/Language';
|
|
@@ -49,8 +49,8 @@ declare class MonacoUtils {
|
|
|
49
49
|
* @param editor The editor to link the session to
|
|
50
50
|
* @returns A cleanup function for disposing of the created listeners
|
|
51
51
|
*/
|
|
52
|
-
static openDocument(editor: monaco.editor.IStandaloneCodeEditor, session: IdeSession): monaco.IDisposable;
|
|
53
|
-
static closeDocument(editor: monaco.editor.IStandaloneCodeEditor, session: IdeSession): void;
|
|
52
|
+
static openDocument(editor: monaco.editor.IStandaloneCodeEditor, session: dh.IdeSession): monaco.IDisposable;
|
|
53
|
+
static closeDocument(editor: monaco.editor.IStandaloneCodeEditor, session: dh.IdeSession): void;
|
|
54
54
|
/**
|
|
55
55
|
* Register a paste handle to clean up any garbage code pasted.
|
|
56
56
|
* Most of this comes from copying from Slack, which has a bad habit of injecting their own characters in your code snippets.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonacoUtils.d.ts","sourceRoot":"","sources":["../../src/monaco/MonacoUtils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,OAAO,EAA+B,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"MonacoUtils.d.ts","sourceRoot":"","sources":["../../src/monaco/MonacoUtils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,OAAO,EAA+B,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAGjD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAUjD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAI3C,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,iBAAiB,CAAC,EAAE,WAAW,CAAC;KACjC;CACF;AAED,cAAM,WAAW;IACf;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,EACV,SAAS,GACV,GAAE;QAAE,SAAS,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,CAAA;KAAO,GAAG,IAAI;IAkBvD;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,IAAI;IAkKxB;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,IAAI;IAOnE;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAI5C,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI;IAkBrD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAUjD;;;;OAIG;IACH,MAAM,CAAC,MAAM,CACX,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAC3C,WAAW,kCAAqC,GAC/C,IAAI;IAIP;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CACjB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAC3C,OAAO,EAAE,EAAE,CAAC,UAAU,GACrB,MAAM,CAAC,WAAW;IAwDrB,MAAM,CAAC,aAAa,CAClB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAC3C,OAAO,EAAE,EAAE,CAAC,UAAU,GACrB,IAAI;IAWP;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,GAC1C,IAAI;IA0BP,MAAM,CAAC,aAAa,IAAI,OAAO;IAK/B;;;;;OAKG;IACH,MAAM,CAAC,4BAA4B,IAAI,IAAI;IA2B3C;;;;;;;OAOG;IACH,MAAM,CAAC,kBAAkB,CACvB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAC3C,WAAW,EAAE,MAAM,EAAE,GACpB,IAAI;IAUP,MAAM,CAAC,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM;IA8B/D,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG;QACpD,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;KACjC;CA0BF;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonacoUtils.js","names":["shortid","resolveCssVariablesInRecord","assertNotNull","find","linkifyFind","monaco","KeyCodeUtils","Log","MonacoThemeRaw","PyLang","GroovyLang","ScalaLang","DbLang","LogLang","log","module","MonacoUtils","init","getWorker","arguments","length","undefined","debug","registerGetWorker","initTheme","registerLanguages","removeConflictingKeybindings","_MonacoTheme$logErro","_MonacoTheme$logErro2","removeHashtag","MonacoTheme","debug2","dhDarkRules","token","foreground","string","keyword","delimiter","comment","number","storage","identifier","operator","predefined","substring","dhDarkColors","errorForeground","background","focusBorder","editor","defineTheme","base","inherit","rules","colors","setTheme","err","error","window","MonacoEnvironment","_objectSpread","color","_color$substring","languages","languageIds","map","_ref","id","getLanguages","filter","_ref2","includes","forEach","languageParam","language","registerLanguage","register","onLanguage","setLanguageConfiguration","conf","setMonarchTokensProvider","setEOL","_editor$getModel","eolSequence","EndOfLineSequence","LF","getModel","openDocument","session","model","didOpenDocumentParams","textDocument","uri","concat","languageId","getLanguageId","version","getVersionId","text","getValue","dispose","onDidChangeModelContent","changedEvent","changes","versionId","contentChanges","i","change","range","rangeLength","contentChange","start","line","startLineNumber","character","startColumn","end","endLineNumber","endColumn","push","didChangeDocumentParams","changeDocument","closeDocument","didCloseDocumentParams","registerPasteHandler","onDidPaste","pasteEvent","smartQuotes","invalidChars","invalidSpaces","editorModel","pastedText","getValueInRange","test","applyEdits","replace","isMacPlatform","platform","navigator","startsWith","addKeybindingRule","keybinding","KeyMod","CtrlCmd","KeyCode","KeyD","command","KeyH","disableKeyBindings","keybindings","addAction","label","run","getMonacoKeyCodeFromShortcut","shortcut","keyState","keyValue","isMac","metaKey","shiftKey","Shift","altKey","Alt","ctrlKey","WinCtrl","fromString","provideLinks","newTokens","_loop","lineText","getLineContent","originalTokens","tokens","type","value","url","href","Range","getLineCount","links"],"sources":["../../src/monaco/MonacoUtils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport shortid from 'shortid';\n/**\n * Exports a function for initializing monaco with the deephaven theme/config\n */\nimport { resolveCssVariablesInRecord, Shortcut } from '@deephaven/components';\nimport type { IdeSession } from '@deephaven/jsapi-types';\nimport { assertNotNull } from '@deephaven/utils';\nimport { find as linkifyFind } from 'linkifyjs';\nimport * as monaco from 'monaco-editor';\nimport type { Environment } from 'monaco-editor';\n// @ts-ignore\nimport { KeyCodeUtils } from 'monaco-editor/esm/vs/base/common/keyCodes.js';\nimport Log from '@deephaven/log';\nimport MonacoThemeRaw from './MonacoTheme.module.scss';\nimport PyLang from './lang/python';\nimport GroovyLang from './lang/groovy';\nimport ScalaLang from './lang/scala';\nimport DbLang from './lang/db';\nimport LogLang from './lang/log';\nimport { Language } from './lang/Language';\n\nconst log = Log.module('MonacoUtils');\n\ndeclare global {\n interface Window {\n MonacoEnvironment?: Environment;\n }\n}\n\nclass MonacoUtils {\n /**\n * Initializes Monaco for the environment\n * @param getWorker The getWorker function Monaco should use\n * The workers should be provided by the caller and bundled by their build system (e.g. Vite, Webpack)\n */\n static init({\n getWorker,\n }: { getWorker?: Environment['getWorker'] } = {}): void {\n log.debug('Initializing Monaco...');\n\n if (getWorker !== undefined) {\n MonacoUtils.registerGetWorker(getWorker);\n }\n\n const { initTheme, registerLanguages } = MonacoUtils;\n\n initTheme();\n\n registerLanguages([DbLang, PyLang, GroovyLang, LogLang, ScalaLang]);\n\n MonacoUtils.removeConflictingKeybindings();\n\n log.debug('Monaco initialized.');\n }\n\n /**\n * Initialize current Monaco theme based on the current DH theme.\n */\n static initTheme(): void {\n const { removeHashtag } = MonacoUtils;\n\n const MonacoTheme = resolveCssVariablesInRecord(MonacoThemeRaw);\n log.debug2('Monaco theme:', MonacoThemeRaw);\n log.debug2('Monaco theme derived:', MonacoTheme);\n\n const dhDarkRules = [\n { token: '', foreground: removeHashtag(MonacoTheme.foreground) },\n { token: 'string', foreground: removeHashtag(MonacoTheme.string) },\n {\n token: 'string.delim',\n foreground: removeHashtag(MonacoTheme['string-delim']),\n },\n { token: 'keyword', foreground: removeHashtag(MonacoTheme.keyword) },\n {\n token: 'identifier.js',\n foreground: removeHashtag(MonacoTheme['identifier-js']),\n },\n {\n token: 'delimiter',\n foreground: removeHashtag(MonacoTheme.delimiter),\n },\n { token: 'comment', foreground: removeHashtag(MonacoTheme.comment) },\n { token: 'number', foreground: removeHashtag(MonacoTheme.number) },\n { token: 'storage', foreground: removeHashtag(MonacoTheme.storage) },\n {\n token: 'identifier',\n foreground: removeHashtag(MonacoTheme.identifier),\n },\n {\n token: 'namespace.identifier',\n foreground: removeHashtag(MonacoTheme['namespace-identifier']),\n },\n { token: 'operator', foreground: removeHashtag(MonacoTheme.operator) },\n {\n token: 'predefined',\n foreground: removeHashtag(MonacoTheme.predefined),\n },\n {\n token: 'error.log',\n foreground: MonacoTheme['log-error']?.substring(1) ?? '',\n },\n {\n token: 'warn.log',\n foreground: removeHashtag(MonacoTheme['log-warn']),\n },\n {\n token: 'info.log',\n foreground: removeHashtag(MonacoTheme['log-info']),\n },\n {\n token: 'stdout.log',\n foreground: removeHashtag(MonacoTheme['log-stdout']),\n },\n {\n token: 'trace.log',\n foreground: removeHashtag(MonacoTheme['log-trace']),\n },\n {\n token: 'debug.log',\n foreground: removeHashtag(MonacoTheme['log-debug']),\n },\n {\n token: 'date.log',\n foreground: removeHashtag(MonacoTheme['log-date']),\n },\n ];\n\n const dhDarkColors = {\n foreground: MonacoTheme.foreground,\n errorForeground: MonacoTheme['error-foreground'],\n 'inputOption.activeBorder': MonacoTheme['input-option-active-border'],\n 'editor.background': MonacoTheme.background,\n 'editor.foreground': MonacoTheme.foreground,\n 'editor.lineHighlightBackground':\n MonacoTheme['editor-line-highlight-background'],\n 'editorLineNumber.foreground':\n MonacoTheme['editor-line-number-foreground'],\n 'editorLineNumber.activeForeground':\n MonacoTheme['editor-line-number-active-foreground'],\n 'editor.selectionBackground': MonacoTheme['editor-selection-background'],\n 'editor.inactiveSelectionBackground':\n MonacoTheme['editor-inactive-selection-background'],\n 'editor.selectionHighlightBackground':\n MonacoTheme['editor-selection-highlight-background'],\n 'editor.wordHighlightBackground':\n MonacoTheme['editor-word-highlight-background'],\n 'editor.findMatchBackground': MonacoTheme['editor-find-match-background'],\n 'editor.findMatchHighlightBackground':\n MonacoTheme['editor-find-match-highlight-background'],\n 'editorSuggestWidget.background':\n MonacoTheme['editor-suggest-widget-background'],\n 'editorSuggestWidget.border': MonacoTheme['editor-suggest-widget-border'],\n 'editorSuggestWidget.foreground':\n MonacoTheme['editor-suggest-widget-foreground'],\n 'editorSuggestWidget.selectedBackground':\n MonacoTheme['editor-suggest-widget-selected-background'],\n 'list.activeSelectionBackground':\n MonacoTheme['editor-suggest-widget-selected-background'],\n 'editorSuggestWidget.selectedForeground':\n MonacoTheme['editor-suggest-widget-selected-foreground'],\n 'list.activeSelectionForeground':\n MonacoTheme['editor-suggest-widget-selected-foreground'],\n 'editorSuggestWidget.highlightForeground':\n MonacoTheme['editor-suggest-widget-highlightForeground'],\n 'editorSuggestWidget.focusHighlightForeground':\n MonacoTheme['editor-suggest-widget-focus-highlight-foreground'],\n 'list.hoverBackground': MonacoTheme['list-hover-background'],\n 'dropdown.background': MonacoTheme['context-menu-background'],\n 'dropdown.foreground': MonacoTheme['context-menu-foreground'],\n 'menu.selectionBackground': MonacoTheme['menu-selection-background'],\n 'menu.selectionForeground': MonacoTheme['menu-selection-foreground'],\n 'keybindingLabel.foreground': MonacoTheme['menu-selection-foreground'],\n 'list.focusBackground': MonacoTheme['menu-selection-background'],\n 'editorWidget.background': MonacoTheme['editor-widget-background'],\n 'inputOption.activeBackground':\n MonacoTheme['input-option-active-background'],\n 'inputOption.activeForeground':\n MonacoTheme['input-option-active-foreground'],\n focusBorder: MonacoTheme['focus-border'],\n 'input.background': MonacoTheme['input-background'],\n 'input.foreground': MonacoTheme['input-foreground'],\n 'input.border': MonacoTheme['input-border'],\n 'textLink.foreground': MonacoTheme['text-link-foreground'],\n 'textLink.activeForeground': MonacoTheme['text-link-active-foreground'],\n 'editorLink.activeForeground':\n MonacoTheme['editor-link-active-foreground'],\n 'editorBracketHighlight.foreground1':\n MonacoTheme['editor-bracket-foreground1'],\n 'editorBracketHighlight.foreground2':\n MonacoTheme['editor-bracket-foreground2'],\n 'editorBracketHighlight.foreground3':\n MonacoTheme['editor-bracket-foreground3'],\n 'editorBracketHighlight.foreground4':\n MonacoTheme['editor-bracket-foreground4'],\n 'editorBracketHighlight.foreground5':\n MonacoTheme['editor-bracket-foreground5'],\n 'editorBracketHighlight.foreground6':\n MonacoTheme['editor-bracket-foreground6'],\n 'editorBracketHighlight.unexpectedBracket.foreground':\n MonacoTheme['editor-unexpected-bracket-foreground'],\n };\n\n monaco.editor.defineTheme('dh-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: dhDarkRules,\n colors: dhDarkColors,\n });\n\n try {\n monaco.editor.setTheme('dh-dark');\n } catch (err) {\n log.error(\n `Failed to set 'dh-dark' Monaco theme, falling back to vs-dark`,\n err\n );\n monaco.editor.setTheme('vs-dark');\n }\n }\n\n /**\n * Register the getWorker function for Monaco\n * @param getWorker The getWorker function for Monaco\n */\n static registerGetWorker(getWorker: Environment['getWorker']): void {\n window.MonacoEnvironment = {\n ...window.MonacoEnvironment,\n getWorker,\n };\n }\n\n /**\n * Remove the hashtag prefix from a CSS color string.\n * Monaco expects colors to be the value only, no hashtag.\n * @param color The hex color string to remove the hashtag from, eg. '#ffffff'\n */\n static removeHashtag(color?: string): string {\n return color?.substring(1) ?? '';\n }\n\n static registerLanguages(languages: Language[]): void {\n // First override the default loader for any language we have a custom definition for\n // https://github.com/Microsoft/monaco-editor/issues/252#issuecomment-482786867\n const languageIds = languages.map(({ id }) => id);\n monaco.languages\n .getLanguages()\n .filter(({ id }) => languageIds.includes(id))\n .forEach(languageParam => {\n const language = languageParam;\n log.debug2('Overriding default language loader:', language.id);\n });\n\n // Then register our language definitions\n languages.forEach(language => {\n MonacoUtils.registerLanguage(language);\n });\n }\n\n static registerLanguage(language: Language): void {\n log.debug2('Registering language: ', language.id);\n monaco.languages.register(language);\n\n monaco.languages.onLanguage(language.id, () => {\n monaco.languages.setLanguageConfiguration(language.id, language.conf);\n monaco.languages.setMonarchTokensProvider(language.id, language.language);\n });\n }\n\n /**\n * Set EOL preference for the editor\n * @param editor The editor to set the EOL for\n * @param eolSequence EOL sequence\n */\n static setEOL(\n editor: monaco.editor.IStandaloneCodeEditor,\n eolSequence = monaco.editor.EndOfLineSequence.LF\n ): void {\n editor.getModel()?.setEOL(eolSequence);\n }\n\n /**\n * Links an editor with a provided session to provide completion items.\n * @param session The IdeSession to link\n * @param editor The editor to link the session to\n * @returns A cleanup function for disposing of the created listeners\n */\n static openDocument(\n editor: monaco.editor.IStandaloneCodeEditor,\n session: IdeSession\n ): monaco.IDisposable {\n const model = editor.getModel();\n assertNotNull(model);\n const didOpenDocumentParams = {\n textDocument: {\n uri: `${model.uri}`,\n languageId: model.getLanguageId(),\n version: model.getVersionId(),\n text: model.getValue(),\n },\n };\n log.debug2('didOpenDocumentParams: ', didOpenDocumentParams);\n\n session.openDocument(didOpenDocumentParams);\n\n const dispose = editor.onDidChangeModelContent(changedEvent => {\n const { changes, versionId } = changedEvent;\n\n const contentChanges = [];\n for (let i = 0; i < changes.length; i += 1) {\n const change = changes[i];\n const { range, rangeLength, text } = change;\n const contentChange = {\n range: {\n start: {\n line: range.startLineNumber - 1,\n character: range.startColumn - 1,\n },\n end: {\n line: range.endLineNumber - 1,\n character: range.endColumn - 1,\n },\n },\n rangeLength,\n text,\n };\n\n contentChanges.push(contentChange);\n }\n\n if (contentChanges.length > 0) {\n const didChangeDocumentParams = {\n textDocument: {\n version: versionId,\n uri: `${model.uri}`,\n },\n contentChanges,\n };\n log.debug2('didChangeDocumentParams', didChangeDocumentParams);\n session.changeDocument(didChangeDocumentParams);\n }\n });\n\n return dispose;\n }\n\n static closeDocument(\n editor: monaco.editor.IStandaloneCodeEditor,\n session: IdeSession\n ): void {\n const model = editor.getModel();\n assertNotNull(model);\n const didCloseDocumentParams = {\n textDocument: {\n uri: `${model.uri}`,\n },\n };\n session.closeDocument(didCloseDocumentParams);\n }\n\n /**\n * Register a paste handle to clean up any garbage code pasted.\n * Most of this comes from copying from Slack, which has a bad habit of injecting their own characters in your code snippets.\n * I've emailed Slack about the issue and they're working on it. I can't reference a ticket number because their ticket system is entirely internally facing.\n * @param editor The editor the register the paste handler for\n */\n static registerPasteHandler(\n editor: monaco.editor.IStandaloneCodeEditor\n ): void {\n editor.onDidPaste(pasteEvent => {\n const smartQuotes = /“|”/g;\n const invalidChars = /\\u200b/g; // zero width space\n const invalidSpaces = /\\u00A0/g; // non-breaking space\n const editorModel = editor.getModel();\n assertNotNull(editorModel);\n const pastedText = editorModel.getValueInRange(pasteEvent.range);\n if (\n smartQuotes.test(pastedText) ||\n invalidChars.test(pastedText) ||\n invalidSpaces.test(pastedText)\n ) {\n editorModel.applyEdits([\n {\n range: pasteEvent.range,\n text: pastedText\n .replace(smartQuotes, '\"')\n .replace(invalidChars, '')\n .replace(invalidSpaces, ' '),\n },\n ]);\n }\n });\n }\n\n static isMacPlatform(): boolean {\n const { platform } = window.navigator;\n return platform.startsWith('Mac');\n }\n\n /**\n * Remove any keybindings which are used for our own shortcuts.\n * This allows the key events to bubble up so a component higher up can capture\n * them. Note that this is a global configuration, so all editor instances will\n * be impacted.\n */\n static removeConflictingKeybindings(): void {\n // All editor instances share a global keybinding registry which is where\n // default keybindings are set. There doesn't appear to be a way to remove\n // default bindings, but we can add new ones that will override the existing\n // ones and set `command` to null. This will treat the key events as unhandled\n // and allow them to bubble up.\n monaco.editor.addKeybindingRule(\n // Restart console in Enterprise (see Shortcuts.ts)\n {\n /* eslint-disable-next-line no-bitwise */\n keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyD,\n command: null,\n }\n );\n\n // Ctrl+H is used to focus Community console history in Windows + Linux.\n // An alternate shortcut is used for Mac, so no need to override it\n // (See ConsoleShortcuts.ts)\n if (!MonacoUtils.isMacPlatform()) {\n monaco.editor.addKeybindingRule({\n /* eslint-disable-next-line no-bitwise */\n keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyH,\n command: null,\n });\n }\n }\n\n /**\n * Creates actions with a `noop` run function to disable specified keybindings.\n * Note that this will swallow the events. To disable default keybindings in a\n * way that allows events to propagate upward, see `removeConflictingKeybindings`\n * @param editor Editor to disable keybindings for\n * @param keybindings List of monaco keybindings to disable. Often a bitwise\n * combination like `monaco.KeyMod.Alt | monaco.KeyMod.KeyJ`\n */\n static disableKeyBindings(\n editor: monaco.editor.IStandaloneCodeEditor,\n keybindings: number[]\n ): void {\n editor.addAction({\n // This shouldn't be referenced by anything so using an arbitrary unique id\n id: `disable-keybindings-${shortid()}`,\n label: '', // This action won't be shown in the UI so no need for a label\n keybindings,\n run: () => undefined,\n });\n }\n\n static getMonacoKeyCodeFromShortcut(shortcut: Shortcut): number {\n const { keyState } = shortcut;\n const { keyValue } = keyState;\n if (keyValue === null) {\n return 0;\n }\n\n const isMac = MonacoUtils.isMacPlatform();\n\n if (isMac) {\n return (\n // eslint-disable-next-line no-bitwise\n (keyState.metaKey ? monaco.KeyMod.CtrlCmd : 0) |\n (keyState.shiftKey ? monaco.KeyMod.Shift : 0) |\n (keyState.altKey ? monaco.KeyMod.Alt : 0) |\n (keyState.ctrlKey ? monaco.KeyMod.WinCtrl : 0) |\n KeyCodeUtils.fromString(keyValue)\n );\n }\n\n return (\n // eslint-disable-next-line no-bitwise\n (keyState.ctrlKey ? monaco.KeyMod.CtrlCmd : 0) |\n (keyState.shiftKey ? monaco.KeyMod.Shift : 0) |\n (keyState.altKey ? monaco.KeyMod.Alt : 0) |\n (keyState.metaKey ? monaco.KeyMod.WinCtrl : 0) |\n KeyCodeUtils.fromString(keyValue)\n );\n }\n\n static provideLinks(model: monaco.editor.ITextModel): {\n links: monaco.languages.ILink[];\n } {\n const newTokens: monaco.languages.ILink[] = [];\n\n for (let i = 1; i <= model.getLineCount(); i += 1) {\n const lineText = model.getLineContent(i);\n const originalTokens = linkifyFind(lineText);\n\n const tokens = originalTokens.filter(token => {\n if (token.type === 'url') {\n return /^https?:\\/\\//.test(token.value);\n }\n return true;\n });\n // map the tokens to the ranges - you know the line number now, use the token start/end as the startColumn/endColumn\n tokens.forEach(token => {\n newTokens.push({\n url: token.href,\n range: new monaco.Range(i, token.start + 1, i, token.end + 1),\n });\n });\n }\n\n return {\n links: newTokens,\n };\n }\n}\n\nexport default MonacoUtils;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MonacoUtils.js","names":["shortid","resolveCssVariablesInRecord","assertNotNull","find","linkifyFind","monaco","KeyCodeUtils","Log","MonacoThemeRaw","PyLang","GroovyLang","ScalaLang","DbLang","LogLang","log","module","MonacoUtils","init","getWorker","arguments","length","undefined","debug","registerGetWorker","initTheme","registerLanguages","removeConflictingKeybindings","_MonacoTheme$logErro","_MonacoTheme$logErro2","removeHashtag","MonacoTheme","debug2","dhDarkRules","token","foreground","string","keyword","delimiter","comment","number","storage","identifier","operator","predefined","substring","dhDarkColors","errorForeground","background","focusBorder","editor","defineTheme","base","inherit","rules","colors","setTheme","err","error","window","MonacoEnvironment","_objectSpread","color","_color$substring","languages","languageIds","map","_ref","id","getLanguages","filter","_ref2","includes","forEach","languageParam","language","registerLanguage","register","onLanguage","setLanguageConfiguration","conf","setMonarchTokensProvider","setEOL","_editor$getModel","eolSequence","EndOfLineSequence","LF","getModel","openDocument","session","model","didOpenDocumentParams","textDocument","uri","concat","languageId","getLanguageId","version","getVersionId","text","getValue","dispose","onDidChangeModelContent","changedEvent","changes","versionId","contentChanges","i","change","range","rangeLength","contentChange","start","line","startLineNumber","character","startColumn","end","endLineNumber","endColumn","push","didChangeDocumentParams","changeDocument","closeDocument","didCloseDocumentParams","registerPasteHandler","onDidPaste","pasteEvent","smartQuotes","invalidChars","invalidSpaces","editorModel","pastedText","getValueInRange","test","applyEdits","replace","isMacPlatform","platform","navigator","startsWith","addKeybindingRule","keybinding","KeyMod","CtrlCmd","KeyCode","KeyD","command","KeyH","disableKeyBindings","keybindings","addAction","label","run","getMonacoKeyCodeFromShortcut","shortcut","keyState","keyValue","isMac","metaKey","shiftKey","Shift","altKey","Alt","ctrlKey","WinCtrl","fromString","provideLinks","newTokens","_loop","lineText","getLineContent","originalTokens","tokens","type","value","url","href","Range","getLineCount","links"],"sources":["../../src/monaco/MonacoUtils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport shortid from 'shortid';\n/**\n * Exports a function for initializing monaco with the deephaven theme/config\n */\nimport { resolveCssVariablesInRecord, Shortcut } from '@deephaven/components';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { assertNotNull } from '@deephaven/utils';\nimport { find as linkifyFind } from 'linkifyjs';\nimport * as monaco from 'monaco-editor';\nimport type { Environment } from 'monaco-editor';\n// @ts-ignore\nimport { KeyCodeUtils } from 'monaco-editor/esm/vs/base/common/keyCodes.js';\nimport Log from '@deephaven/log';\nimport MonacoThemeRaw from './MonacoTheme.module.scss';\nimport PyLang from './lang/python';\nimport GroovyLang from './lang/groovy';\nimport ScalaLang from './lang/scala';\nimport DbLang from './lang/db';\nimport LogLang from './lang/log';\nimport { Language } from './lang/Language';\n\nconst log = Log.module('MonacoUtils');\n\ndeclare global {\n interface Window {\n MonacoEnvironment?: Environment;\n }\n}\n\nclass MonacoUtils {\n /**\n * Initializes Monaco for the environment\n * @param getWorker The getWorker function Monaco should use\n * The workers should be provided by the caller and bundled by their build system (e.g. Vite, Webpack)\n */\n static init({\n getWorker,\n }: { getWorker?: Environment['getWorker'] } = {}): void {\n log.debug('Initializing Monaco...');\n\n if (getWorker !== undefined) {\n MonacoUtils.registerGetWorker(getWorker);\n }\n\n const { initTheme, registerLanguages } = MonacoUtils;\n\n initTheme();\n\n registerLanguages([DbLang, PyLang, GroovyLang, LogLang, ScalaLang]);\n\n MonacoUtils.removeConflictingKeybindings();\n\n log.debug('Monaco initialized.');\n }\n\n /**\n * Initialize current Monaco theme based on the current DH theme.\n */\n static initTheme(): void {\n const { removeHashtag } = MonacoUtils;\n\n const MonacoTheme = resolveCssVariablesInRecord(MonacoThemeRaw);\n log.debug2('Monaco theme:', MonacoThemeRaw);\n log.debug2('Monaco theme derived:', MonacoTheme);\n\n const dhDarkRules = [\n { token: '', foreground: removeHashtag(MonacoTheme.foreground) },\n { token: 'string', foreground: removeHashtag(MonacoTheme.string) },\n {\n token: 'string.delim',\n foreground: removeHashtag(MonacoTheme['string-delim']),\n },\n { token: 'keyword', foreground: removeHashtag(MonacoTheme.keyword) },\n {\n token: 'identifier.js',\n foreground: removeHashtag(MonacoTheme['identifier-js']),\n },\n {\n token: 'delimiter',\n foreground: removeHashtag(MonacoTheme.delimiter),\n },\n { token: 'comment', foreground: removeHashtag(MonacoTheme.comment) },\n { token: 'number', foreground: removeHashtag(MonacoTheme.number) },\n { token: 'storage', foreground: removeHashtag(MonacoTheme.storage) },\n {\n token: 'identifier',\n foreground: removeHashtag(MonacoTheme.identifier),\n },\n {\n token: 'namespace.identifier',\n foreground: removeHashtag(MonacoTheme['namespace-identifier']),\n },\n { token: 'operator', foreground: removeHashtag(MonacoTheme.operator) },\n {\n token: 'predefined',\n foreground: removeHashtag(MonacoTheme.predefined),\n },\n {\n token: 'error.log',\n foreground: MonacoTheme['log-error']?.substring(1) ?? '',\n },\n {\n token: 'warn.log',\n foreground: removeHashtag(MonacoTheme['log-warn']),\n },\n {\n token: 'info.log',\n foreground: removeHashtag(MonacoTheme['log-info']),\n },\n {\n token: 'stdout.log',\n foreground: removeHashtag(MonacoTheme['log-stdout']),\n },\n {\n token: 'trace.log',\n foreground: removeHashtag(MonacoTheme['log-trace']),\n },\n {\n token: 'debug.log',\n foreground: removeHashtag(MonacoTheme['log-debug']),\n },\n {\n token: 'date.log',\n foreground: removeHashtag(MonacoTheme['log-date']),\n },\n ];\n\n const dhDarkColors = {\n foreground: MonacoTheme.foreground,\n errorForeground: MonacoTheme['error-foreground'],\n 'inputOption.activeBorder': MonacoTheme['input-option-active-border'],\n 'editor.background': MonacoTheme.background,\n 'editor.foreground': MonacoTheme.foreground,\n 'editor.lineHighlightBackground':\n MonacoTheme['editor-line-highlight-background'],\n 'editorLineNumber.foreground':\n MonacoTheme['editor-line-number-foreground'],\n 'editorLineNumber.activeForeground':\n MonacoTheme['editor-line-number-active-foreground'],\n 'editor.selectionBackground': MonacoTheme['editor-selection-background'],\n 'editor.inactiveSelectionBackground':\n MonacoTheme['editor-inactive-selection-background'],\n 'editor.selectionHighlightBackground':\n MonacoTheme['editor-selection-highlight-background'],\n 'editor.wordHighlightBackground':\n MonacoTheme['editor-word-highlight-background'],\n 'editor.findMatchBackground': MonacoTheme['editor-find-match-background'],\n 'editor.findMatchHighlightBackground':\n MonacoTheme['editor-find-match-highlight-background'],\n 'editorSuggestWidget.background':\n MonacoTheme['editor-suggest-widget-background'],\n 'editorSuggestWidget.border': MonacoTheme['editor-suggest-widget-border'],\n 'editorSuggestWidget.foreground':\n MonacoTheme['editor-suggest-widget-foreground'],\n 'editorSuggestWidget.selectedBackground':\n MonacoTheme['editor-suggest-widget-selected-background'],\n 'list.activeSelectionBackground':\n MonacoTheme['editor-suggest-widget-selected-background'],\n 'editorSuggestWidget.selectedForeground':\n MonacoTheme['editor-suggest-widget-selected-foreground'],\n 'list.activeSelectionForeground':\n MonacoTheme['editor-suggest-widget-selected-foreground'],\n 'editorSuggestWidget.highlightForeground':\n MonacoTheme['editor-suggest-widget-highlightForeground'],\n 'editorSuggestWidget.focusHighlightForeground':\n MonacoTheme['editor-suggest-widget-focus-highlight-foreground'],\n 'list.hoverBackground': MonacoTheme['list-hover-background'],\n 'dropdown.background': MonacoTheme['context-menu-background'],\n 'dropdown.foreground': MonacoTheme['context-menu-foreground'],\n 'menu.selectionBackground': MonacoTheme['menu-selection-background'],\n 'menu.selectionForeground': MonacoTheme['menu-selection-foreground'],\n 'keybindingLabel.foreground': MonacoTheme['menu-selection-foreground'],\n 'list.focusBackground': MonacoTheme['menu-selection-background'],\n 'editorWidget.background': MonacoTheme['editor-widget-background'],\n 'inputOption.activeBackground':\n MonacoTheme['input-option-active-background'],\n 'inputOption.activeForeground':\n MonacoTheme['input-option-active-foreground'],\n focusBorder: MonacoTheme['focus-border'],\n 'input.background': MonacoTheme['input-background'],\n 'input.foreground': MonacoTheme['input-foreground'],\n 'input.border': MonacoTheme['input-border'],\n 'textLink.foreground': MonacoTheme['text-link-foreground'],\n 'textLink.activeForeground': MonacoTheme['text-link-active-foreground'],\n 'editorLink.activeForeground':\n MonacoTheme['editor-link-active-foreground'],\n 'editorBracketHighlight.foreground1':\n MonacoTheme['editor-bracket-foreground1'],\n 'editorBracketHighlight.foreground2':\n MonacoTheme['editor-bracket-foreground2'],\n 'editorBracketHighlight.foreground3':\n MonacoTheme['editor-bracket-foreground3'],\n 'editorBracketHighlight.foreground4':\n MonacoTheme['editor-bracket-foreground4'],\n 'editorBracketHighlight.foreground5':\n MonacoTheme['editor-bracket-foreground5'],\n 'editorBracketHighlight.foreground6':\n MonacoTheme['editor-bracket-foreground6'],\n 'editorBracketHighlight.unexpectedBracket.foreground':\n MonacoTheme['editor-unexpected-bracket-foreground'],\n };\n\n monaco.editor.defineTheme('dh-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: dhDarkRules,\n colors: dhDarkColors,\n });\n\n try {\n monaco.editor.setTheme('dh-dark');\n } catch (err) {\n log.error(\n `Failed to set 'dh-dark' Monaco theme, falling back to vs-dark`,\n err\n );\n monaco.editor.setTheme('vs-dark');\n }\n }\n\n /**\n * Register the getWorker function for Monaco\n * @param getWorker The getWorker function for Monaco\n */\n static registerGetWorker(getWorker: Environment['getWorker']): void {\n window.MonacoEnvironment = {\n ...window.MonacoEnvironment,\n getWorker,\n };\n }\n\n /**\n * Remove the hashtag prefix from a CSS color string.\n * Monaco expects colors to be the value only, no hashtag.\n * @param color The hex color string to remove the hashtag from, eg. '#ffffff'\n */\n static removeHashtag(color?: string): string {\n return color?.substring(1) ?? '';\n }\n\n static registerLanguages(languages: Language[]): void {\n // First override the default loader for any language we have a custom definition for\n // https://github.com/Microsoft/monaco-editor/issues/252#issuecomment-482786867\n const languageIds = languages.map(({ id }) => id);\n monaco.languages\n .getLanguages()\n .filter(({ id }) => languageIds.includes(id))\n .forEach(languageParam => {\n const language = languageParam;\n log.debug2('Overriding default language loader:', language.id);\n });\n\n // Then register our language definitions\n languages.forEach(language => {\n MonacoUtils.registerLanguage(language);\n });\n }\n\n static registerLanguage(language: Language): void {\n log.debug2('Registering language: ', language.id);\n monaco.languages.register(language);\n\n monaco.languages.onLanguage(language.id, () => {\n monaco.languages.setLanguageConfiguration(language.id, language.conf);\n monaco.languages.setMonarchTokensProvider(language.id, language.language);\n });\n }\n\n /**\n * Set EOL preference for the editor\n * @param editor The editor to set the EOL for\n * @param eolSequence EOL sequence\n */\n static setEOL(\n editor: monaco.editor.IStandaloneCodeEditor,\n eolSequence = monaco.editor.EndOfLineSequence.LF\n ): void {\n editor.getModel()?.setEOL(eolSequence);\n }\n\n /**\n * Links an editor with a provided session to provide completion items.\n * @param session The IdeSession to link\n * @param editor The editor to link the session to\n * @returns A cleanup function for disposing of the created listeners\n */\n static openDocument(\n editor: monaco.editor.IStandaloneCodeEditor,\n session: dh.IdeSession\n ): monaco.IDisposable {\n const model = editor.getModel();\n assertNotNull(model);\n const didOpenDocumentParams = {\n textDocument: {\n uri: `${model.uri}`,\n languageId: model.getLanguageId(),\n version: model.getVersionId(),\n text: model.getValue(),\n },\n };\n log.debug2('didOpenDocumentParams: ', didOpenDocumentParams);\n\n session.openDocument(didOpenDocumentParams);\n\n const dispose = editor.onDidChangeModelContent(changedEvent => {\n const { changes, versionId } = changedEvent;\n\n const contentChanges = [];\n for (let i = 0; i < changes.length; i += 1) {\n const change = changes[i];\n const { range, rangeLength, text } = change;\n const contentChange = {\n range: {\n start: {\n line: range.startLineNumber - 1,\n character: range.startColumn - 1,\n },\n end: {\n line: range.endLineNumber - 1,\n character: range.endColumn - 1,\n },\n },\n rangeLength,\n text,\n };\n\n contentChanges.push(contentChange);\n }\n\n if (contentChanges.length > 0) {\n const didChangeDocumentParams = {\n textDocument: {\n version: versionId,\n uri: `${model.uri}`,\n },\n contentChanges,\n };\n log.debug2('didChangeDocumentParams', didChangeDocumentParams);\n session.changeDocument(didChangeDocumentParams);\n }\n });\n\n return dispose;\n }\n\n static closeDocument(\n editor: monaco.editor.IStandaloneCodeEditor,\n session: dh.IdeSession\n ): void {\n const model = editor.getModel();\n assertNotNull(model);\n const didCloseDocumentParams = {\n textDocument: {\n uri: `${model.uri}`,\n },\n };\n session.closeDocument(didCloseDocumentParams);\n }\n\n /**\n * Register a paste handle to clean up any garbage code pasted.\n * Most of this comes from copying from Slack, which has a bad habit of injecting their own characters in your code snippets.\n * I've emailed Slack about the issue and they're working on it. I can't reference a ticket number because their ticket system is entirely internally facing.\n * @param editor The editor the register the paste handler for\n */\n static registerPasteHandler(\n editor: monaco.editor.IStandaloneCodeEditor\n ): void {\n editor.onDidPaste(pasteEvent => {\n const smartQuotes = /“|”/g;\n const invalidChars = /\\u200b/g; // zero width space\n const invalidSpaces = /\\u00A0/g; // non-breaking space\n const editorModel = editor.getModel();\n assertNotNull(editorModel);\n const pastedText = editorModel.getValueInRange(pasteEvent.range);\n if (\n smartQuotes.test(pastedText) ||\n invalidChars.test(pastedText) ||\n invalidSpaces.test(pastedText)\n ) {\n editorModel.applyEdits([\n {\n range: pasteEvent.range,\n text: pastedText\n .replace(smartQuotes, '\"')\n .replace(invalidChars, '')\n .replace(invalidSpaces, ' '),\n },\n ]);\n }\n });\n }\n\n static isMacPlatform(): boolean {\n const { platform } = window.navigator;\n return platform.startsWith('Mac');\n }\n\n /**\n * Remove any keybindings which are used for our own shortcuts.\n * This allows the key events to bubble up so a component higher up can capture\n * them. Note that this is a global configuration, so all editor instances will\n * be impacted.\n */\n static removeConflictingKeybindings(): void {\n // All editor instances share a global keybinding registry which is where\n // default keybindings are set. There doesn't appear to be a way to remove\n // default bindings, but we can add new ones that will override the existing\n // ones and set `command` to null. This will treat the key events as unhandled\n // and allow them to bubble up.\n monaco.editor.addKeybindingRule(\n // Restart console in Enterprise (see Shortcuts.ts)\n {\n /* eslint-disable-next-line no-bitwise */\n keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyD,\n command: null,\n }\n );\n\n // Ctrl+H is used to focus Community console history in Windows + Linux.\n // An alternate shortcut is used for Mac, so no need to override it\n // (See ConsoleShortcuts.ts)\n if (!MonacoUtils.isMacPlatform()) {\n monaco.editor.addKeybindingRule({\n /* eslint-disable-next-line no-bitwise */\n keybinding: monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyH,\n command: null,\n });\n }\n }\n\n /**\n * Creates actions with a `noop` run function to disable specified keybindings.\n * Note that this will swallow the events. To disable default keybindings in a\n * way that allows events to propagate upward, see `removeConflictingKeybindings`\n * @param editor Editor to disable keybindings for\n * @param keybindings List of monaco keybindings to disable. Often a bitwise\n * combination like `monaco.KeyMod.Alt | monaco.KeyMod.KeyJ`\n */\n static disableKeyBindings(\n editor: monaco.editor.IStandaloneCodeEditor,\n keybindings: number[]\n ): void {\n editor.addAction({\n // This shouldn't be referenced by anything so using an arbitrary unique id\n id: `disable-keybindings-${shortid()}`,\n label: '', // This action won't be shown in the UI so no need for a label\n keybindings,\n run: () => undefined,\n });\n }\n\n static getMonacoKeyCodeFromShortcut(shortcut: Shortcut): number {\n const { keyState } = shortcut;\n const { keyValue } = keyState;\n if (keyValue === null) {\n return 0;\n }\n\n const isMac = MonacoUtils.isMacPlatform();\n\n if (isMac) {\n return (\n // eslint-disable-next-line no-bitwise\n (keyState.metaKey ? monaco.KeyMod.CtrlCmd : 0) |\n (keyState.shiftKey ? monaco.KeyMod.Shift : 0) |\n (keyState.altKey ? monaco.KeyMod.Alt : 0) |\n (keyState.ctrlKey ? monaco.KeyMod.WinCtrl : 0) |\n KeyCodeUtils.fromString(keyValue)\n );\n }\n\n return (\n // eslint-disable-next-line no-bitwise\n (keyState.ctrlKey ? monaco.KeyMod.CtrlCmd : 0) |\n (keyState.shiftKey ? monaco.KeyMod.Shift : 0) |\n (keyState.altKey ? monaco.KeyMod.Alt : 0) |\n (keyState.metaKey ? monaco.KeyMod.WinCtrl : 0) |\n KeyCodeUtils.fromString(keyValue)\n );\n }\n\n static provideLinks(model: monaco.editor.ITextModel): {\n links: monaco.languages.ILink[];\n } {\n const newTokens: monaco.languages.ILink[] = [];\n\n for (let i = 1; i <= model.getLineCount(); i += 1) {\n const lineText = model.getLineContent(i);\n const originalTokens = linkifyFind(lineText);\n\n const tokens = originalTokens.filter(token => {\n if (token.type === 'url') {\n return /^https?:\\/\\//.test(token.value);\n }\n return true;\n });\n // map the tokens to the ranges - you know the line number now, use the token start/end as the startColumn/endColumn\n tokens.forEach(token => {\n newTokens.push({\n url: token.href,\n range: new monaco.Range(i, token.start + 1, i, token.end + 1),\n });\n });\n }\n\n return {\n links: newTokens,\n };\n }\n}\n\nexport default MonacoUtils;\n"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Script editor for large blocks of code
|
|
3
3
|
*/
|
|
4
4
|
import { Component, ReactElement, RefObject } from 'react';
|
|
5
|
-
import type {
|
|
5
|
+
import type { dh } from '@deephaven/jsapi-types';
|
|
6
6
|
import type { editor, IDisposable } from 'monaco-editor';
|
|
7
7
|
import Editor from './Editor';
|
|
8
8
|
import './ScriptEditor.scss';
|
|
@@ -17,7 +17,7 @@ interface ScriptEditorProps {
|
|
|
17
17
|
onRunCommand: (command: string) => void;
|
|
18
18
|
onEditorInitialized: (editor: editor.IStandaloneCodeEditor) => void;
|
|
19
19
|
onEditorWillDestroy: (editor: editor.IStandaloneCodeEditor) => void;
|
|
20
|
-
session: IdeSession | null;
|
|
20
|
+
session: dh.IdeSession | null;
|
|
21
21
|
sessionLanguage?: string;
|
|
22
22
|
settings?: editor.IStandaloneEditorConstructionOptions;
|
|
23
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScriptEditor.d.ts","sourceRoot":"","sources":["../../src/notebook/ScriptEditor.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"ScriptEditor.d.ts","sourceRoot":"","sources":["../../src/notebook/ScriptEditor.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,MAAM,MAAM,UAAU,CAAC;AAE9B,OAAO,qBAAqB,CAAC;AAM7B,UAAU,iBAAiB;IACzB,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,yBAAyB,KAAK,IAAI,CAAC;IACxD,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,qBAAqB,KAAK,IAAI,CAAC;IACpE,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,qBAAqB,KAAK,IAAI,CAAC;IACpE,OAAO,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,oCAAoC,CAAC;CACxD;AAED,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;CACjC;AAED,cAAM,YAAa,SAAQ,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IACxE,MAAM,CAAC,YAAY;;;;;wBAKH,IAAI;mCACO,IAAI;mCACJ,IAAI;;MAE7B;gBAEU,KAAK,EAAE,iBAAiB;IAgBpC,iBAAiB,IAAI,IAAI;IAIzB,kBAAkB,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAuCtD,oBAAoB,IAAI,IAAI;IAI5B,qBAAqB,EAAE,WAAW,EAAE,CAAC;IAErC,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAEhC,MAAM,CAAC,EAAE,MAAM,CAAC,qBAAqB,CAAC;IAEtC,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAEnC,QAAQ,IAAI,MAAM,GAAG,IAAI;IAQzB,kBAAkB,IAAI,MAAM;IAmB5B,uBAAuB,CAAC,WAAW,EAAE,MAAM,CAAC,qBAAqB,GAAG,IAAI;IA+BxE,uBAAuB,CAAC,WAAW,EAAE,MAAM,CAAC,qBAAqB,GAAG,IAAI;IAUxE,SAAS,IAAI,IAAI;IAQjB,iBAAiB,IAAI,IAAI;IAMzB,kBAAkB,IAAI,IAAI;IAgD1B,oBAAoB,IAAI,IAAI;IAO5B,eAAe,IAAI,IAAI;IAKvB,kBAAkB,IAAI,IAAI;IAY1B,oBAAoB,IAAI,IAAI;IAY5B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,UAAO,GAAG,IAAI;IAqBxC,gBAAgB,IAAI,IAAI;IAOxB,KAAK,IAAI,IAAI;IAOb,UAAU,IAAI,IAAI;IAMlB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAMpC,MAAM,IAAI,YAAY;CA8CvB;AAED,eAAe,YAAY,CAAC"}
|