@deephaven/console 0.26.1 → 0.26.2-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.
Files changed (47) hide show
  1. package/dist/Console.js +3 -1
  2. package/dist/Console.js.map +1 -1
  3. package/dist/ConsoleInput.js +3 -1
  4. package/dist/ConsoleInput.js.map +1 -1
  5. package/dist/ConsoleMenu.js +3 -1
  6. package/dist/ConsoleMenu.js.map +1 -1
  7. package/dist/ConsoleStatusBar.js +3 -1
  8. package/dist/ConsoleStatusBar.js.map +1 -1
  9. package/dist/HeapUsage.js.map +1 -1
  10. package/dist/command-history/CommandHistory.js +3 -1
  11. package/dist/command-history/CommandHistory.js.map +1 -1
  12. package/dist/command-history/CommandHistoryItemTooltip.js +3 -1
  13. package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -1
  14. package/dist/common/Code.js +3 -1
  15. package/dist/common/Code.js.map +1 -1
  16. package/dist/console-history/ConsoleHistory.js +3 -1
  17. package/dist/console-history/ConsoleHistory.js.map +1 -1
  18. package/dist/console-history/ConsoleHistoryItem.js +3 -1
  19. package/dist/console-history/ConsoleHistoryItem.js.map +1 -1
  20. package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -1
  21. package/dist/console-history/ConsoleHistoryResultErrorMessage.js +3 -1
  22. package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -1
  23. package/dist/console-history/ConsoleHistoryResultInProgress.js +3 -1
  24. package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -1
  25. package/dist/csv/CsvFormats.js +3 -1
  26. package/dist/csv/CsvFormats.js.map +1 -1
  27. package/dist/csv/CsvInputBar.js +3 -1
  28. package/dist/csv/CsvInputBar.js.map +1 -1
  29. package/dist/csv/CsvOverlay.js +3 -1
  30. package/dist/csv/CsvOverlay.js.map +1 -1
  31. package/dist/csv/CsvParser.js +3 -1
  32. package/dist/csv/CsvParser.js.map +1 -1
  33. package/dist/csv/CsvTypeParser.js +3 -1
  34. package/dist/csv/CsvTypeParser.js.map +1 -1
  35. package/dist/csv/NewTableColumnTypes.js +3 -1
  36. package/dist/csv/NewTableColumnTypes.js.map +1 -1
  37. package/dist/log/LogView.js +7 -5
  38. package/dist/log/LogView.js.map +1 -1
  39. package/dist/monaco/MonacoCompletionProvider.js +3 -1
  40. package/dist/monaco/MonacoCompletionProvider.js.map +1 -1
  41. package/dist/monaco/MonacoUtils.js +3 -1
  42. package/dist/monaco/MonacoUtils.js.map +1 -1
  43. package/dist/notebook/Editor.js +3 -1
  44. package/dist/notebook/Editor.js.map +1 -1
  45. package/dist/notebook/ScriptEditor.js +3 -1
  46. package/dist/notebook/ScriptEditor.js.map +1 -1
  47. package/package.json +12 -12
@@ -1 +1 @@
1
- {"version":3,"file":"LogView.js","names":["React","PureComponent","Button","DropdownMenu","vsGear","dhTrashUndo","assertNotNull","monaco","ConsoleUtils","LogLevel","LogLevelMenuItem","LogView","getLogText","logItem","date","Date","micros","timestamp","formatTimestamp","logLevel","message","constructor","props","handleClearClick","bind","handleFlushTimeout","handleLogMessage","handleMenuItemClick","handleResetClick","handleResize","handleToggleAllClick","logLevelMenuItems","editorContainer","bufferedMessages","messages","state","shownLogLevels","componentDidMount","resetLogLevels","initMonaco","startListening","window","addEventListener","componentDidUpdate","prevProps","prevState","updateDimensions","refreshLogText","session","stopListening","clearLogs","componentWillUnmount","stopFlushTimer","destroyMonaco","removeEventListener","getMenuActions","actions","push","menuElement","group","order","i","AllLogLevels","on","title","element","length","isEnabled","DefaultLogLevels","some","level","setState","cancelListener","onLogMessage","undefined","editor","create","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","language","lineDecorationsWidth","lineNumbers","lineNumbersMinChars","minimap","enabled","readOnly","renderLineHighlight","scrollBeyondLastLine","value","wordWrap","addCommand","KeyCode","Escape","KeyMod","Shift","position","getPosition","setPosition","dispose","triggerFindWidget","focus","trigger","toggleAll","isAllEnabled","updatedLogLevels","toggleLogLevel","updateLogLevels","appendLogText","text","model","getModel","line","getLineCount","column","getLineLength","isBottomVisible","edits","range","startLineNumber","startColumn","endLineNumber","endColumn","forceMoveMarkers","applyEdits","lineCount","revealLine","truncateLogIfNecessary","logText","charAt","trimRight","setValue","maxLogSize","splice","truncateSize","scrollToBottom","isLineVisible","visibleRanges","getVisibleRanges","isLogItemVisible","flush","queue","flushTimer","setTimeout","bufferTimeout","clearTimeout","layout","render","popperOptions","placement","STDOUT","ERROR","FATAL","STDERR","WARN","INFO","DEBUG","TRACE"],"sources":["../../src/log/LogView.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { Button, DropdownActions, DropdownMenu } from '@deephaven/components';\nimport { vsGear, dhTrashUndo } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\nimport { IdeSession, LogItem } from '@deephaven/jsapi-shim';\nimport { Placement } from 'popper.js';\nimport * as monaco from 'monaco-editor';\nimport ConsoleUtils from '../common/ConsoleUtils';\nimport LogLevel from './LogLevel';\nimport './LogView.scss';\nimport LogLevelMenuItem from './LogLevelMenuItem';\n\ninterface LogViewProps {\n session: IdeSession;\n}\n\ninterface LogViewState {\n shownLogLevels: Record<string, boolean>;\n}\n/**\n * Log view contents. Uses a monaco editor to display/search the contents of the log.\n */\nclass LogView extends PureComponent<LogViewProps, LogViewState> {\n static DefaultLogLevels = [\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n ];\n\n static AllLogLevels = [\n LogLevel.INFO,\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n LogLevel.DEBUG,\n LogLevel.TRACE,\n ];\n\n /** ms to buffer log messages before processing them */\n static bufferTimeout = 16;\n\n /** Maximum number of messages to store in the log */\n static maxLogSize = 131072;\n\n static truncateSize = 65536;\n\n static getLogText(logItem: LogItem): string {\n const date = new Date(logItem.micros / 1000);\n const timestamp = ConsoleUtils.formatTimestamp(date);\n return `${timestamp} ${logItem.logLevel} ${logItem.message}`;\n }\n\n constructor(props: LogViewProps) {\n super(props);\n\n this.handleClearClick = this.handleClearClick.bind(this);\n this.handleFlushTimeout = this.handleFlushTimeout.bind(this);\n this.handleLogMessage = this.handleLogMessage.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleResetClick = this.handleResetClick.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleToggleAllClick = this.handleToggleAllClick.bind(this);\n\n this.logLevelMenuItems = {};\n\n this.editorContainer = null;\n\n this.bufferedMessages = [];\n this.messages = [];\n\n this.state = {\n shownLogLevels: {},\n };\n }\n\n componentDidMount(): void {\n this.resetLogLevels();\n this.initMonaco();\n this.startListening();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(prevProps: LogViewProps, prevState: LogViewState): void {\n this.updateDimensions();\n\n const { shownLogLevels } = this.state;\n if (prevState.shownLogLevels !== shownLogLevels) {\n this.refreshLogText();\n }\n\n const { session } = this.props;\n if (prevProps.session !== session) {\n this.stopListening();\n this.startListening();\n // clear logs when starting a new console\n this.clearLogs();\n }\n }\n\n componentWillUnmount(): void {\n this.stopFlushTimer();\n this.stopListening();\n this.destroyMonaco();\n\n window.removeEventListener('resize', this.handleResize);\n }\n\n cancelListener?: () => void | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n editorContainer: HTMLDivElement | null;\n\n logLevelMenuItems: Record<string, LogLevelMenuItem>;\n\n flushTimer?: ReturnType<typeof setTimeout>;\n\n bufferedMessages: LogItem[];\n\n messages: LogItem[];\n\n getMenuActions(shownLogLevels: Record<string, boolean>): DropdownActions {\n const actions = [];\n\n actions.push({\n menuElement: (\n <div className=\"log-level-menu-title\">Display Log Levels</div>\n ),\n group: 1,\n order: 10,\n });\n\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const on =\n shownLogLevels[logLevel] != null ? shownLogLevels[logLevel] : false;\n actions.push({\n title: logLevel,\n group: 1,\n order: i + 100,\n\n menuElement: (\n <LogLevelMenuItem\n logLevel={logLevel}\n on={on}\n onClick={this.handleMenuItemClick}\n ref={element => {\n if (element != null) {\n this.logLevelMenuItems[logLevel] = element;\n }\n }}\n />\n ),\n });\n }\n\n actions.push({\n group: 1,\n order: 1000,\n menuElement: (\n <div className=\"log-level-menu-controls\">\n <Button\n kind=\"ghost\"\n className=\"log-level-toggle-all\"\n onClick={this.handleToggleAllClick}\n >\n Toggle All\n </Button>\n <Button kind=\"ghost\" onClick={this.handleResetClick}>\n Reset\n </Button>\n </div>\n ),\n });\n\n return actions;\n }\n\n resetLogLevels(): void {\n const shownLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const isEnabled = LogView.DefaultLogLevels.some(\n level => level === logLevel\n );\n shownLogLevels[logLevel] = isEnabled;\n }\n\n this.setState({ shownLogLevels });\n }\n\n startListening(): void {\n const { session } = this.props;\n this.cancelListener = session.onLogMessage(this.handleLogMessage);\n }\n\n stopListening(): void {\n if (this.cancelListener != null) {\n this.cancelListener();\n this.cancelListener = undefined;\n }\n }\n\n initMonaco(): void {\n assertNotNull(this.editorContainer);\n this.editor = monaco.editor.create(this.editorContainer, {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'log',\n lineDecorationsWidth: 0,\n lineNumbers: 'off',\n lineNumbersMinChars: 0,\n minimap: { enabled: false },\n readOnly: true,\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n value: '',\n wordWrap: 'on',\n });\n\n // When find widget is open, escape key closes it.\n // Instead, capture it and do nothing. Same for shift-escape.\n this.editor.addCommand(monaco.KeyCode.Escape, () => undefined);\n this.editor.addCommand(\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.Shift | monaco.KeyCode.Escape,\n () => undefined\n );\n\n // Restore regular escape to clear selection, when editorText has focus.\n this.editor.addCommand(\n monaco.KeyCode.Escape,\n () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n 'findWidgetVisible && editorTextFocus'\n );\n\n this.editor.addCommand(\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.Shift | monaco.KeyCode.Escape,\n () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n 'findWidgetVisible && editorTextFocus'\n );\n }\n\n destroyMonaco(): void {\n if (this.editor) {\n this.editor.dispose();\n this.editor = undefined;\n }\n }\n\n triggerFindWidget(): void {\n // The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.\n // As a workaround, just focus the editor before triggering the action\n // https://github.com/microsoft/monaco-editor/issues/2355\n this.editor?.focus();\n this.editor?.trigger('keyboard', 'actions.find', undefined);\n }\n\n toggleAll(): void {\n const { shownLogLevels } = this.state;\n let isAllEnabled = true;\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n if (!shownLogLevels[logLevel]) {\n isAllEnabled = false;\n break;\n }\n }\n\n if (isAllEnabled) {\n this.setState({ shownLogLevels: {} });\n } else {\n const updatedLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n updatedLogLevels[logLevel] = true;\n }\n this.setState({ shownLogLevels: updatedLogLevels });\n }\n }\n\n toggleLogLevel(logLevel: string): void {\n const { shownLogLevels } = this.state;\n const isEnabled = shownLogLevels[logLevel];\n const updatedLogLevels: Record<string, boolean> = {};\n updatedLogLevels[logLevel] = !isEnabled;\n this.updateLogLevels(updatedLogLevels);\n }\n\n updateLogLevels(updatedLogLevels: Record<string, boolean>): void {\n let { shownLogLevels } = this.state;\n shownLogLevels = { ...shownLogLevels, ...updatedLogLevels };\n this.setState({ shownLogLevels });\n }\n\n appendLogText(text: string): void {\n if (!this.editor) {\n return;\n }\n\n const model = this.editor.getModel();\n let line = model?.getLineCount();\n assertNotNull(line);\n let column = model?.getLineLength(line);\n assertNotNull(column);\n const isBottomVisible = this.isBottomVisible();\n\n const edits = [];\n if (column > 0) {\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column + 1,\n endLineNumber: line,\n endColumn: column + 1,\n },\n text: '\\n',\n forceMoveMarkers: true,\n });\n line += 1;\n column = 0;\n }\n\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column,\n endLineNumber: line,\n endColumn: column,\n },\n text,\n forceMoveMarkers: true,\n });\n\n model?.applyEdits(edits);\n\n if (isBottomVisible) {\n const lineCount = model?.getLineCount();\n assertNotNull(lineCount);\n this.editor.revealLine(lineCount, 1);\n }\n }\n\n /**\n * Refresh the contents of the log component with the updated filter text\n */\n refreshLogText(): void {\n if (!this.editor) {\n return;\n }\n\n this.truncateLogIfNecessary();\n\n const { shownLogLevels } = this.state;\n const isBottomVisible = this.isBottomVisible();\n\n let text = '';\n for (let i = 0; i < this.messages.length; i += 1) {\n const message = this.messages[i];\n if (shownLogLevels[message.logLevel]) {\n const logText = LogView.getLogText(message);\n if (logText.length > 0) {\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n }\n }\n text = text.trimRight();\n\n this.editor.setValue(text);\n\n if (isBottomVisible) {\n const line = this.editor.getModel()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n this.stopFlushTimer();\n this.bufferedMessages = [];\n }\n\n truncateLogIfNecessary(): void {\n if (this.messages.length > LogView.maxLogSize) {\n this.messages = this.messages.splice(\n this.messages.length - LogView.truncateSize\n );\n }\n }\n\n scrollToBottom(): void {\n if (!this.editor) {\n return;\n }\n\n const line = this.editor?.getModel?.()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n isBottomVisible(): boolean {\n if (!this.editor) {\n return true;\n }\n\n const model = this.editor.getModel();\n const line = model?.getLineCount();\n\n assertNotNull(line);\n return this.isLineVisible(line);\n }\n\n isLineVisible(line: number): boolean {\n const visibleRanges = this.editor?.getVisibleRanges();\n if (visibleRanges == null || visibleRanges.length === 0) {\n return false;\n }\n\n for (let i = 0; i < visibleRanges.length; i += 1) {\n const range = visibleRanges[i];\n if (range.startLineNumber <= line && line <= range.endLineNumber) {\n return true;\n }\n }\n\n return false;\n }\n\n /** Checks if the given log message is visible with the current filters */\n isLogItemVisible(message: LogItem): boolean {\n const { shownLogLevels } = this.state;\n return shownLogLevels[message.logLevel];\n }\n\n flush(): void {\n let text = '';\n for (let i = 0; i < this.bufferedMessages.length; i += 1) {\n const message = this.bufferedMessages[i];\n const logText = LogView.getLogText(message);\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n\n this.bufferedMessages = [];\n\n this.appendLogText(text);\n }\n\n queue(message: LogItem): void {\n this.bufferedMessages.push(message);\n if (this.bufferedMessages.length === 1) {\n this.flushTimer = setTimeout(\n this.handleFlushTimeout,\n LogView.bufferTimeout\n );\n }\n }\n\n stopFlushTimer(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n\n updateDimensions(): void {\n if (this.editor) {\n this.editor.layout();\n }\n }\n\n handleClearClick(): void {\n this.clearLogs();\n }\n\n clearLogs(): void {\n this.messages = [];\n this.refreshLogText();\n }\n\n handleFlushTimeout(): void {\n this.stopFlushTimer();\n this.flush();\n }\n\n handleLogMessage(message: LogItem): void {\n this.messages.push(message);\n\n if (this.editor && this.isLogItemVisible(message)) {\n this.queue(message);\n }\n }\n\n handleMenuItemClick(logLevel: string): void {\n this.toggleLogLevel(logLevel);\n }\n\n handleResetClick(): void {\n this.resetLogLevels();\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleToggleAllClick(): void {\n this.toggleAll();\n }\n\n render(): ReactElement {\n const popperOptions = { placement: 'bottom-end' as Placement };\n const { shownLogLevels } = this.state;\n const actions = this.getMenuActions(shownLogLevels);\n return (\n <div className=\"log-pane h-100 w-100\">\n <div className=\"log-pane-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn-clear-logs\"\n onClick={this.handleClearClick}\n icon={dhTrashUndo}\n tooltip=\"Clear log\"\n />\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon btn-overflow\"\n icon={vsGear}\n tooltip=\"Log Settings\"\n onClick={() => {\n // no-op: click is handled in `DropdownMenu'\n }}\n >\n <DropdownMenu\n actions={actions}\n popperClassName=\"log-level-menu-popper\"\n popperOptions={popperOptions}\n />\n </Button>\n </div>\n <div\n className=\"log-pane-editor h-100 w-100\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n </div>\n );\n }\n}\n\nexport default LogView;\n"],"mappings":"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"}
1
+ {"version":3,"file":"LogView.js","names":["React","PureComponent","Button","DropdownMenu","vsGear","dhTrashUndo","assertNotNull","monaco","ConsoleUtils","LogLevel","LogLevelMenuItem","LogView","getLogText","logItem","date","Date","micros","timestamp","formatTimestamp","logLevel","message","constructor","props","handleClearClick","bind","handleFlushTimeout","handleLogMessage","handleMenuItemClick","handleResetClick","handleResize","handleToggleAllClick","logLevelMenuItems","editorContainer","bufferedMessages","messages","state","shownLogLevels","componentDidMount","resetLogLevels","initMonaco","startListening","window","addEventListener","componentDidUpdate","prevProps","prevState","updateDimensions","refreshLogText","session","stopListening","clearLogs","componentWillUnmount","stopFlushTimer","destroyMonaco","removeEventListener","getMenuActions","actions","push","menuElement","group","order","AllLogLevels","i","on","title","element","length","isEnabled","DefaultLogLevels","some","level","setState","cancelListener","onLogMessage","undefined","editor","create","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","language","lineDecorationsWidth","lineNumbers","lineNumbersMinChars","minimap","enabled","readOnly","renderLineHighlight","scrollBeyondLastLine","value","wordWrap","addCommand","KeyCode","Escape","KeyMod","Shift","position","getPosition","setPosition","dispose","triggerFindWidget","focus","trigger","toggleAll","isAllEnabled","updatedLogLevels","toggleLogLevel","updateLogLevels","appendLogText","text","model","getModel","line","getLineCount","column","getLineLength","isBottomVisible","edits","range","startLineNumber","startColumn","endLineNumber","endColumn","forceMoveMarkers","applyEdits","lineCount","revealLine","truncateLogIfNecessary","logText","charAt","trimRight","setValue","maxLogSize","splice","truncateSize","scrollToBottom","isLineVisible","visibleRanges","getVisibleRanges","isLogItemVisible","flush","queue","flushTimer","setTimeout","bufferTimeout","clearTimeout","layout","render","popperOptions","placement","STDOUT","ERROR","FATAL","STDERR","WARN","INFO","DEBUG","TRACE"],"sources":["../../src/log/LogView.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { Button, DropdownActions, DropdownMenu } from '@deephaven/components';\nimport { vsGear, dhTrashUndo } from '@deephaven/icons';\nimport { assertNotNull } from '@deephaven/utils';\nimport { IdeSession, LogItem } from '@deephaven/jsapi-shim';\nimport { Placement } from 'popper.js';\nimport * as monaco from 'monaco-editor';\nimport ConsoleUtils from '../common/ConsoleUtils';\nimport LogLevel from './LogLevel';\nimport './LogView.scss';\nimport LogLevelMenuItem from './LogLevelMenuItem';\n\ninterface LogViewProps {\n session: IdeSession;\n}\n\ninterface LogViewState {\n shownLogLevels: Record<string, boolean>;\n}\n/**\n * Log view contents. Uses a monaco editor to display/search the contents of the log.\n */\nclass LogView extends PureComponent<LogViewProps, LogViewState> {\n static DefaultLogLevels = [\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n ];\n\n static AllLogLevels = [\n LogLevel.INFO,\n LogLevel.STDOUT,\n LogLevel.ERROR,\n LogLevel.FATAL,\n LogLevel.STDERR,\n LogLevel.WARN,\n LogLevel.DEBUG,\n LogLevel.TRACE,\n ];\n\n /** ms to buffer log messages before processing them */\n static bufferTimeout = 16;\n\n /** Maximum number of messages to store in the log */\n static maxLogSize = 131072;\n\n static truncateSize = 65536;\n\n static getLogText(logItem: LogItem): string {\n const date = new Date(logItem.micros / 1000);\n const timestamp = ConsoleUtils.formatTimestamp(date);\n return `${timestamp} ${logItem.logLevel} ${logItem.message}`;\n }\n\n constructor(props: LogViewProps) {\n super(props);\n\n this.handleClearClick = this.handleClearClick.bind(this);\n this.handleFlushTimeout = this.handleFlushTimeout.bind(this);\n this.handleLogMessage = this.handleLogMessage.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleResetClick = this.handleResetClick.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleToggleAllClick = this.handleToggleAllClick.bind(this);\n\n this.logLevelMenuItems = {};\n\n this.editorContainer = null;\n\n this.bufferedMessages = [];\n this.messages = [];\n\n this.state = {\n shownLogLevels: {},\n };\n }\n\n componentDidMount(): void {\n this.resetLogLevels();\n this.initMonaco();\n this.startListening();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(prevProps: LogViewProps, prevState: LogViewState): void {\n this.updateDimensions();\n\n const { shownLogLevels } = this.state;\n if (prevState.shownLogLevels !== shownLogLevels) {\n this.refreshLogText();\n }\n\n const { session } = this.props;\n if (prevProps.session !== session) {\n this.stopListening();\n this.startListening();\n // clear logs when starting a new console\n this.clearLogs();\n }\n }\n\n componentWillUnmount(): void {\n this.stopFlushTimer();\n this.stopListening();\n this.destroyMonaco();\n\n window.removeEventListener('resize', this.handleResize);\n }\n\n cancelListener?: () => void | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n editorContainer: HTMLDivElement | null;\n\n logLevelMenuItems: Record<string, LogLevelMenuItem>;\n\n flushTimer?: ReturnType<typeof setTimeout>;\n\n bufferedMessages: LogItem[];\n\n messages: LogItem[];\n\n getMenuActions(shownLogLevels: Record<string, boolean>): DropdownActions {\n const actions = [];\n\n actions.push({\n menuElement: (\n <div className=\"log-level-menu-title\">Display Log Levels</div>\n ),\n group: 1,\n order: 10,\n });\n\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const on =\n shownLogLevels[logLevel] != null ? shownLogLevels[logLevel] : false;\n actions.push({\n title: logLevel,\n group: 1,\n order: i + 100,\n\n menuElement: (\n <LogLevelMenuItem\n logLevel={logLevel}\n on={on}\n onClick={this.handleMenuItemClick}\n ref={element => {\n if (element != null) {\n this.logLevelMenuItems[logLevel] = element;\n }\n }}\n />\n ),\n });\n }\n\n actions.push({\n group: 1,\n order: 1000,\n menuElement: (\n <div className=\"log-level-menu-controls\">\n <Button\n kind=\"ghost\"\n className=\"log-level-toggle-all\"\n onClick={this.handleToggleAllClick}\n >\n Toggle All\n </Button>\n <Button kind=\"ghost\" onClick={this.handleResetClick}>\n Reset\n </Button>\n </div>\n ),\n });\n\n return actions;\n }\n\n resetLogLevels(): void {\n const shownLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n const isEnabled = LogView.DefaultLogLevels.some(\n level => level === logLevel\n );\n shownLogLevels[logLevel] = isEnabled;\n }\n\n this.setState({ shownLogLevels });\n }\n\n startListening(): void {\n const { session } = this.props;\n this.cancelListener = session.onLogMessage(this.handleLogMessage);\n }\n\n stopListening(): void {\n if (this.cancelListener != null) {\n this.cancelListener();\n this.cancelListener = undefined;\n }\n }\n\n initMonaco(): void {\n assertNotNull(this.editorContainer);\n this.editor = monaco.editor.create(this.editorContainer, {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'log',\n lineDecorationsWidth: 0,\n lineNumbers: 'off',\n lineNumbersMinChars: 0,\n minimap: { enabled: false },\n readOnly: true,\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n value: '',\n wordWrap: 'on',\n });\n\n // When find widget is open, escape key closes it.\n // Instead, capture it and do nothing. Same for shift-escape.\n this.editor.addCommand(monaco.KeyCode.Escape, () => undefined);\n this.editor.addCommand(\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.Shift | monaco.KeyCode.Escape,\n () => undefined\n );\n\n // Restore regular escape to clear selection, when editorText has focus.\n this.editor.addCommand(\n monaco.KeyCode.Escape,\n () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n 'findWidgetVisible && editorTextFocus'\n );\n\n this.editor.addCommand(\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.Shift | monaco.KeyCode.Escape,\n () => {\n const position = this.editor?.getPosition();\n assertNotNull(position);\n this.editor?.setPosition(position);\n },\n 'findWidgetVisible && editorTextFocus'\n );\n }\n\n destroyMonaco(): void {\n if (this.editor) {\n this.editor.dispose();\n this.editor = undefined;\n }\n }\n\n triggerFindWidget(): void {\n // The actions.find action can no longer be triggered when the editor is not in focus, with monaco 0.22.x.\n // As a workaround, just focus the editor before triggering the action\n // https://github.com/microsoft/monaco-editor/issues/2355\n this.editor?.focus();\n this.editor?.trigger('keyboard', 'actions.find', undefined);\n }\n\n toggleAll(): void {\n const { shownLogLevels } = this.state;\n let isAllEnabled = true;\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n if (!shownLogLevels[logLevel]) {\n isAllEnabled = false;\n break;\n }\n }\n\n if (isAllEnabled) {\n this.setState({ shownLogLevels: {} });\n } else {\n const updatedLogLevels: Record<string, boolean> = {};\n for (let i = 0; i < LogView.AllLogLevels.length; i += 1) {\n const logLevel = LogView.AllLogLevels[i];\n updatedLogLevels[logLevel] = true;\n }\n this.setState({ shownLogLevels: updatedLogLevels });\n }\n }\n\n toggleLogLevel(logLevel: string): void {\n const { shownLogLevels } = this.state;\n const isEnabled = shownLogLevels[logLevel];\n const updatedLogLevels: Record<string, boolean> = {};\n updatedLogLevels[logLevel] = !isEnabled;\n this.updateLogLevels(updatedLogLevels);\n }\n\n updateLogLevels(updatedLogLevels: Record<string, boolean>): void {\n let { shownLogLevels } = this.state;\n shownLogLevels = { ...shownLogLevels, ...updatedLogLevels };\n this.setState({ shownLogLevels });\n }\n\n appendLogText(text: string): void {\n if (!this.editor) {\n return;\n }\n\n const model = this.editor.getModel();\n let line = model?.getLineCount();\n assertNotNull(line);\n let column = model?.getLineLength(line);\n assertNotNull(column);\n const isBottomVisible = this.isBottomVisible();\n\n const edits = [];\n if (column > 0) {\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column + 1,\n endLineNumber: line,\n endColumn: column + 1,\n },\n text: '\\n',\n forceMoveMarkers: true,\n });\n line += 1;\n column = 0;\n }\n\n edits.push({\n range: {\n startLineNumber: line,\n startColumn: column,\n endLineNumber: line,\n endColumn: column,\n },\n text,\n forceMoveMarkers: true,\n });\n\n model?.applyEdits(edits);\n\n if (isBottomVisible) {\n const lineCount = model?.getLineCount();\n assertNotNull(lineCount);\n this.editor.revealLine(lineCount, 1);\n }\n }\n\n /**\n * Refresh the contents of the log component with the updated filter text\n */\n refreshLogText(): void {\n if (!this.editor) {\n return;\n }\n\n this.truncateLogIfNecessary();\n\n const { shownLogLevels } = this.state;\n const isBottomVisible = this.isBottomVisible();\n\n let text = '';\n for (let i = 0; i < this.messages.length; i += 1) {\n const message = this.messages[i];\n if (shownLogLevels[message.logLevel]) {\n const logText = LogView.getLogText(message);\n if (logText.length > 0) {\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n }\n }\n text = text.trimRight();\n\n this.editor.setValue(text);\n\n if (isBottomVisible) {\n const line = this.editor.getModel()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n this.stopFlushTimer();\n this.bufferedMessages = [];\n }\n\n truncateLogIfNecessary(): void {\n if (this.messages.length > LogView.maxLogSize) {\n this.messages = this.messages.splice(\n this.messages.length - LogView.truncateSize\n );\n }\n }\n\n scrollToBottom(): void {\n if (!this.editor) {\n return;\n }\n\n const line = this.editor?.getModel?.()?.getLineCount();\n assertNotNull(line);\n this.editor.revealLine(line, 1);\n }\n\n isBottomVisible(): boolean {\n if (!this.editor) {\n return true;\n }\n\n const model = this.editor.getModel();\n const line = model?.getLineCount();\n\n assertNotNull(line);\n return this.isLineVisible(line);\n }\n\n isLineVisible(line: number): boolean {\n const visibleRanges = this.editor?.getVisibleRanges();\n if (visibleRanges == null || visibleRanges.length === 0) {\n return false;\n }\n\n for (let i = 0; i < visibleRanges.length; i += 1) {\n const range = visibleRanges[i];\n if (range.startLineNumber <= line && line <= range.endLineNumber) {\n return true;\n }\n }\n\n return false;\n }\n\n /** Checks if the given log message is visible with the current filters */\n isLogItemVisible(message: LogItem): boolean {\n const { shownLogLevels } = this.state;\n return shownLogLevels[message.logLevel];\n }\n\n flush(): void {\n let text = '';\n for (let i = 0; i < this.bufferedMessages.length; i += 1) {\n const message = this.bufferedMessages[i];\n const logText = LogView.getLogText(message);\n text += logText;\n if (logText.charAt(logText.length - 1) !== '\\n') {\n text += '\\n';\n }\n }\n\n this.bufferedMessages = [];\n\n this.appendLogText(text);\n }\n\n queue(message: LogItem): void {\n this.bufferedMessages.push(message);\n if (this.bufferedMessages.length === 1) {\n this.flushTimer = setTimeout(\n this.handleFlushTimeout,\n LogView.bufferTimeout\n );\n }\n }\n\n stopFlushTimer(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = undefined;\n }\n }\n\n updateDimensions(): void {\n if (this.editor) {\n this.editor.layout();\n }\n }\n\n handleClearClick(): void {\n this.clearLogs();\n }\n\n clearLogs(): void {\n this.messages = [];\n this.refreshLogText();\n }\n\n handleFlushTimeout(): void {\n this.stopFlushTimer();\n this.flush();\n }\n\n handleLogMessage(message: LogItem): void {\n this.messages.push(message);\n\n if (this.editor && this.isLogItemVisible(message)) {\n this.queue(message);\n }\n }\n\n handleMenuItemClick(logLevel: string): void {\n this.toggleLogLevel(logLevel);\n }\n\n handleResetClick(): void {\n this.resetLogLevels();\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleToggleAllClick(): void {\n this.toggleAll();\n }\n\n render(): ReactElement {\n const popperOptions = { placement: 'bottom-end' as Placement };\n const { shownLogLevels } = this.state;\n const actions = this.getMenuActions(shownLogLevels);\n return (\n <div className=\"log-pane h-100 w-100\">\n <div className=\"log-pane-menu\">\n <Button\n kind=\"ghost\"\n className=\"btn-clear-logs\"\n onClick={this.handleClearClick}\n icon={dhTrashUndo}\n tooltip=\"Clear log\"\n />\n <Button\n kind=\"ghost\"\n className=\"btn-link-icon btn-overflow\"\n icon={vsGear}\n tooltip=\"Log Settings\"\n onClick={() => {\n // no-op: click is handled in `DropdownMenu'\n }}\n >\n <DropdownMenu\n actions={actions}\n popperClassName=\"log-level-menu-popper\"\n popperOptions={popperOptions}\n />\n </Button>\n </div>\n <div\n className=\"log-pane-editor h-100 w-100\"\n ref={editorContainer => {\n this.editorContainer = editorContainer;\n }}\n />\n </div>\n );\n }\n}\n\nexport default LogView;\n"],"mappings":"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"}
@@ -1,4 +1,6 @@
1
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
2
4
  /**
3
5
  * Completion provider for a code session
4
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"MonacoCompletionProvider.js","names":["PureComponent","monaco","Log","log","module","MonacoCompletionProvider","constructor","props","handleCompletionRequest","bind","componentDidMount","language","registeredCompletionProvider","languages","registerCompletionItemProvider","provideCompletionItems","triggerCharacters","componentWillUnmount","dispose","model","position","context","propModel","session","params","textDocument","uri","version","getVersionId","line","lineNumber","character","column","completionItems","getCompletionItems","debug","monacoCompletionItems","then","items","suggestions","map","item","label","kind","detail","documentation","sortText","filterText","textEdit","insertTextFormat","start","end","range","startLineNumber","startColumn","endLineNumber","endColumn","insertText","text","insertTextRules","incomplete","catch","error","render"],"sources":["../../src/monaco/MonacoCompletionProvider.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 { IdeSession } from '@deephaven/jsapi-shim';\n\nconst log = Log.module('MonacoCompletionProvider');\n\ninterface MonacoCompletionProviderProps {\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 MonacoCompletionProvider extends PureComponent<\n MonacoCompletionProviderProps,\n Record<string, never>\n> {\n constructor(props: MonacoCompletionProviderProps) {\n super(props);\n\n this.handleCompletionRequest = this.handleCompletionRequest.bind(this);\n }\n\n componentDidMount(): void {\n const { language } = this.props;\n this.registeredCompletionProvider = monaco.languages.registerCompletionItemProvider(\n language ?? '',\n {\n provideCompletionItems: this.handleCompletionRequest,\n triggerCharacters: ['\"', '.', \"'\", '(', '[', '{', ','],\n }\n );\n }\n\n componentWillUnmount(): void {\n this.registeredCompletionProvider?.dispose();\n }\n\n registeredCompletionProvider?: 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 // Yes, the Monaco API Position is different than the Position received by the LSP\n // Why? I do not know.\n position: {\n line: position.lineNumber - 1,\n character: position.column - 1,\n },\n context,\n };\n\n const completionItems = session.getCompletionItems(params);\n\n log.debug('Completion items received: ', params, completionItems);\n\n const monacoCompletionItems = completionItems\n .then(items => {\n // Annoying that the LSP protocol returns completion items with a range that's slightly different than what Monaco expects\n // Need to remap the items here\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 const { start, end } = textEdit.range;\n\n // Monaco expects the columns/ranges to start at 1.\n const range = {\n startLineNumber: start.line + 1,\n startColumn: start.character + 1,\n endLineNumber: end.line + 1,\n endColumn: end.character + 1,\n };\n return {\n label,\n kind,\n detail,\n documentation,\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,\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 render(): null {\n return null;\n }\n}\n\nexport default MonacoCompletionProvider;\n"],"mappings":"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"}
1
+ {"version":3,"file":"MonacoCompletionProvider.js","names":["PureComponent","monaco","Log","log","module","MonacoCompletionProvider","constructor","props","handleCompletionRequest","bind","componentDidMount","language","registeredCompletionProvider","languages","registerCompletionItemProvider","provideCompletionItems","triggerCharacters","componentWillUnmount","dispose","model","position","context","propModel","session","params","textDocument","uri","version","getVersionId","line","lineNumber","character","column","completionItems","getCompletionItems","debug","monacoCompletionItems","then","items","suggestions","map","item","label","kind","detail","documentation","sortText","filterText","textEdit","insertTextFormat","start","end","range","startLineNumber","startColumn","endLineNumber","endColumn","insertText","text","insertTextRules","incomplete","catch","error","render"],"sources":["../../src/monaco/MonacoCompletionProvider.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 { IdeSession } from '@deephaven/jsapi-shim';\n\nconst log = Log.module('MonacoCompletionProvider');\n\ninterface MonacoCompletionProviderProps {\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 MonacoCompletionProvider extends PureComponent<\n MonacoCompletionProviderProps,\n Record<string, never>\n> {\n constructor(props: MonacoCompletionProviderProps) {\n super(props);\n\n this.handleCompletionRequest = this.handleCompletionRequest.bind(this);\n }\n\n componentDidMount(): void {\n const { language } = this.props;\n this.registeredCompletionProvider = monaco.languages.registerCompletionItemProvider(\n language ?? '',\n {\n provideCompletionItems: this.handleCompletionRequest,\n triggerCharacters: ['\"', '.', \"'\", '(', '[', '{', ','],\n }\n );\n }\n\n componentWillUnmount(): void {\n this.registeredCompletionProvider?.dispose();\n }\n\n registeredCompletionProvider?: 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 // Yes, the Monaco API Position is different than the Position received by the LSP\n // Why? I do not know.\n position: {\n line: position.lineNumber - 1,\n character: position.column - 1,\n },\n context,\n };\n\n const completionItems = session.getCompletionItems(params);\n\n log.debug('Completion items received: ', params, completionItems);\n\n const monacoCompletionItems = completionItems\n .then(items => {\n // Annoying that the LSP protocol returns completion items with a range that's slightly different than what Monaco expects\n // Need to remap the items here\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 const { start, end } = textEdit.range;\n\n // Monaco expects the columns/ranges to start at 1.\n const range = {\n startLineNumber: start.line + 1,\n startColumn: start.character + 1,\n endLineNumber: end.line + 1,\n endColumn: end.character + 1,\n };\n return {\n label,\n kind,\n detail,\n documentation,\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,\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 render(): null {\n return null;\n }\n}\n\nexport default MonacoCompletionProvider;\n"],"mappings":";;;AAAA;AACA;AACA;AACA,SAASA,aAAa,QAAQ,OAAO;AACrC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAOC,GAAG,MAAM,gBAAgB;AAGhC,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAM,CAAC,0BAA0B,CAAC;AAQlD;AACA;AACA;AACA,MAAMC,wBAAwB,SAASL,aAAa,CAGlD;EACAM,WAAW,CAACC,KAAoC,EAAE;IAChD,KAAK,CAACA,KAAK,CAAC;IAAC;IAEb,IAAI,CAACC,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAACC,IAAI,CAAC,IAAI,CAAC;EACxE;EAEAC,iBAAiB,GAAS;IACxB,IAAM;MAAEC;IAAS,CAAC,GAAG,IAAI,CAACJ,KAAK;IAC/B,IAAI,CAACK,4BAA4B,GAAGX,MAAM,CAACY,SAAS,CAACC,8BAA8B,CACjFH,QAAQ,aAARA,QAAQ,cAARA,QAAQ,GAAI,EAAE,EACd;MACEI,sBAAsB,EAAE,IAAI,CAACP,uBAAuB;MACpDQ,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;IACvD,CAAC,CACF;EACH;EAEAC,oBAAoB,GAAS;IAAA;IAC3B,6BAAI,CAACL,4BAA4B,0DAAjC,sBAAmCM,OAAO,EAAE;EAC9C;EAIAV,uBAAuB,CACrBW,KAA+B,EAC/BC,QAAyB,EACzBC,OAA2C,EACuB;IAClE,IAAM;MAAEF,KAAK,EAAEG,SAAS;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAAChB,KAAK;IAChD,IAAIY,KAAK,KAAKG,SAAS,EAAE;MACvB,OAAO,IAAI;IACb;IAEA,IAAME,MAAM,GAAG;MACbC,YAAY,EAAE;QACZC,GAAG,YAAKP,KAAK,CAACO,GAAG,CAAE;QACnBC,OAAO,EAAER,KAAK,CAACS,YAAY;MAC7B,CAAC;MACD;MACA;MACAR,QAAQ,EAAE;QACRS,IAAI,EAAET,QAAQ,CAACU,UAAU,GAAG,CAAC;QAC7BC,SAAS,EAAEX,QAAQ,CAACY,MAAM,GAAG;MAC/B,CAAC;MACDX;IACF,CAAC;IAED,IAAMY,eAAe,GAAGV,OAAO,CAACW,kBAAkB,CAACV,MAAM,CAAC;IAE1DrB,GAAG,CAACgC,KAAK,CAAC,6BAA6B,EAAEX,MAAM,EAAES,eAAe,CAAC;IAEjE,IAAMG,qBAAqB,GAAGH,eAAe,CAC1CI,IAAI,CAACC,KAAK,IAAI;MACb;MACA;MACA,IAAMC,WAAW,GAAGD,KAAK,CAACE,GAAG,CAACC,IAAI,IAAI;QACpC,IAAM;UACJC,KAAK;UACLC,IAAI;UACJC,MAAM;UACNC,aAAa;UACbC,QAAQ;UACRC,UAAU;UACVC,QAAQ;UACRC;QACF,CAAC,GAAGR,IAAI;QAER,IAAM;UAAES,KAAK;UAAEC;QAAI,CAAC,GAAGH,QAAQ,CAACI,KAAK;;QAErC;QACA,IAAMA,KAAK,GAAG;UACZC,eAAe,EAAEH,KAAK,CAACrB,IAAI,GAAG,CAAC;UAC/ByB,WAAW,EAAEJ,KAAK,CAACnB,SAAS,GAAG,CAAC;UAChCwB,aAAa,EAAEJ,GAAG,CAACtB,IAAI,GAAG,CAAC;UAC3B2B,SAAS,EAAEL,GAAG,CAACpB,SAAS,GAAG;QAC7B,CAAC;QACD,OAAO;UACLW,KAAK;UACLC,IAAI;UACJC,MAAM;UACNC,aAAa;UACbC,QAAQ;UACRC,UAAU;UACVU,UAAU,EAAET,QAAQ,CAACU,IAAI;UACzB;UACA;UACA;UACAC,eAAe,EAAEV,gBAAgB,KAAK,CAAC,GAAG,CAAC,GAAGA,gBAAgB;UAC9DG;QACF,CAAC;MACH,CAAC,CAAC;MAEF,OAAO;QACLQ,UAAU,EAAE,IAAI;QAChBrB;MACF,CAAC;IACH,CAAC,CAAC,CACDsB,KAAK,CAAEC,KAAc,IAAK;MACzB3D,GAAG,CAAC2D,KAAK,CAAC,gDAAgD,EAAEA,KAAK,CAAC;MAClE,OAAO;QAAEvB,WAAW,EAAE;MAAG,CAAC;IAC5B,CAAC,CAAC;IAEJ,OAAOH,qBAAqB;EAC9B;EAEA2B,MAAM,GAAS;IACb,OAAO,IAAI;EACb;AACF;AAEA,eAAe1D,wBAAwB"}
@@ -1,6 +1,8 @@
1
1
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
2
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
6
  /* eslint-disable @typescript-eslint/ban-ts-comment */
5
7
  /**
6
8
  * Exports a function for initializing monaco with the deephaven theme/config
@@ -1 +1 @@
1
- {"version":3,"file":"MonacoUtils.js","names":["assertNotNull","monaco","KeyCodeUtils","Log","MonacoTheme","PyLang","GroovyLang","ScalaLang","DbLang","LogLang","log","module","MonacoUtils","init","getWorker","debug","undefined","registerGetWorker","registerLanguages","removeHashtag","dhDarkRules","token","foreground","string","keyword","delimiter","comment","number","storage","identifier","operator","predefined","substring","dhDarkColors","errorForeground","background","focusBorder","editor","defineTheme","base","inherit","rules","colors","debug2","setTheme","window","MonacoEnvironment","color","languages","languageIds","map","id","getLanguages","filter","includes","forEach","languageParam","language","registerLanguage","register","onLanguage","setLanguageConfiguration","conf","setMonarchTokensProvider","setEOL","eolSequence","EndOfLineSequence","LF","getModel","openDocument","session","model","didOpenDocumentParams","textDocument","uri","languageId","getLanguageId","version","getVersionId","text","getValue","dispose","onDidChangeModelContent","changedEvent","changes","versionId","contentChanges","i","length","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","removeConflictingKeybindings","keybindings","windows","mac","keybinding","removeKeybinding","err","error","_standaloneKeybindingService","_getResolver","_map","get","elem","command","addDynamicKeybinding","warn","getMonacoKeyCodeFromShortcut","shortcut","keyState","keyValue","isMac","metaKey","KeyMod","CtrlCmd","shiftKey","Shift","altKey","Alt","ctrlKey","WinCtrl","fromString"],"sources":["../../src/monaco/MonacoUtils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\n/**\n * Exports a function for initializing monaco with the deephaven theme/config\n */\nimport { Shortcut } from '@deephaven/components';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport { assertNotNull } from '@deephaven/utils';\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 MonacoTheme 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 { registerLanguages, removeHashtag } = MonacoUtils;\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 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': MonacoTheme['editor-line-highlight-bg'],\n 'editorLineNumber.foreground':\n MonacoTheme['editor-line-number-foreground'],\n 'editor.selectionBackground': MonacoTheme['editor-selection-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 'editorSuggestWidget.highlightForeground':\n MonacoTheme['editor-suggest-widget-highlightForeground'],\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 '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 };\n\n monaco.editor.defineTheme('dh-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: dhDarkRules,\n colors: dhDarkColors,\n });\n log.debug2('monaco theme: ', MonacoTheme);\n monaco.editor.setTheme('dh-dark');\n\n registerLanguages([DbLang, PyLang, GroovyLang, LogLang, ScalaLang]);\n\n log.debug('Monaco initialized.');\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 them\n * @param editor The editor to remove the keybindings from\n */\n static removeConflictingKeybindings(\n editor: monaco.editor.IStandaloneCodeEditor\n ): void {\n // Multi-mod key events have a specific order\n // E.g. ctrl+alt+UpArrow is not found, but alt+ctrl+UpArrow is found\n // meta is WindowsKey on Windows and cmd on Mac\n // ctrl is ctrl Windows and ctrl on Mac\n // alt is alt on Windows and option on Mac\n const keybindings = [\n {\n windows: 'ctrl+D',\n mac: 'meta+D',\n },\n {\n windows: 'ctrl+H',\n },\n ];\n\n try {\n keybindings.forEach(keybinding => {\n if (\n (MonacoUtils.isMacPlatform() && keybinding.mac === '') ||\n (!MonacoUtils.isMacPlatform() && keybinding.windows === '')\n ) {\n return;\n }\n MonacoUtils.removeKeybinding(\n editor,\n MonacoUtils.isMacPlatform() ? keybinding.mac : keybinding.windows\n );\n });\n } catch (err) {\n // This is probably only caused by Monaco changing private methods used here\n log.error(err);\n }\n }\n\n /**\n * Remove a keybinding and allow the events to bubble up\n * If you want the keybinding removed for all editors, add it to removeConflictingKeybindings\n * Monaco still captures the event if you choose to override the keybinding with a no-op function\n *\n * Based on the following comment to remove a keybinding and let the event bubble up\n * https://github.com/microsoft/monaco-editor/issues/287#issuecomment-331447475\n * The issue for an API for this has apparently been open since 2016. Link below\n * https://github.com/microsoft/monaco-editor/issues/102\n * @param editor The editor to remove the keybinding from\n * @param keybinding The key string to remove. E.g. 'ctrl+C' for copy on Windows\n */\n static removeKeybinding(\n editor: monaco.editor.IStandaloneCodeEditor,\n keybinding: string | undefined\n ): void {\n if (keybinding === undefined) {\n return;\n }\n\n /* eslint-disable no-underscore-dangle */\n // It's possible a single keybinding has multiple commands depending on context\n // @ts-ignore\n const keybindings = editor._standaloneKeybindingService\n ._getResolver()\n ._map.get(keybinding);\n\n if (keybindings != null) {\n keybindings.forEach((elem: { command: unknown }) => {\n log.debug2(\n `Removing Monaco keybinding ${keybinding} for ${elem.command}`\n );\n // @ts-ignore\n editor._standaloneKeybindingService.addDynamicKeybinding(\n `-${elem.command}`,\n null,\n () => undefined\n );\n });\n } else {\n log.warn(`Did not find any keybindings to remove for ${keybinding}`);\n }\n /* eslint-enable no-underscore-dangle */\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\nexport default MonacoUtils;\n"],"mappings":";;;AAAA;AACA;AACA;AACA;;AAGA,SAASA,aAAa,QAAQ,kBAAkB;AAChD,OAAO,KAAKC,MAAM,MAAM,eAAe;AAEvC;AACA,SAASC,YAAY,QAAQ,8CAA8C;AAC3E,OAAOC,GAAG,MAAM,gBAAgB;AAAC,OAC1BC,WAAW;AAAA,OACXC,MAAM;AAAA,OACNC,UAAU;AAAA,OACVC,SAAS;AAAA,OACTC,MAAM;AAAA,OACNC,OAAO;AAGd,IAAMC,GAAG,GAAGP,GAAG,CAACQ,MAAM,CAAC,aAAa,CAAC;AAQrC,MAAMC,WAAW,CAAC;EAChB;AACF;AACA;AACA;AACA;EACE,OAAOC,IAAI,GAE6C;IAAA,IAF5C;MACVC;IACwC,CAAC,uEAAG,CAAC,CAAC;IAC9CJ,GAAG,CAACK,KAAK,CAAC,wBAAwB,CAAC;IAEnC,IAAID,SAAS,KAAKE,SAAS,EAAE;MAC3BJ,WAAW,CAACK,iBAAiB,CAACH,SAAS,CAAC;IAC1C;IAEA,IAAM;MAAEI,iBAAiB;MAAEC;IAAc,CAAC,GAAGP,WAAW;IAExD,IAAMQ,WAAW,GAAG,CAClB;MAAEC,KAAK,EAAE,EAAE;MAAEC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAACkB,UAAU;IAAE,CAAC,EAChE;MAAED,KAAK,EAAE,QAAQ;MAAEC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAACmB,MAAM;IAAE,CAAC,EAClE;MACEF,KAAK,EAAE,cAAc;MACrBC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAAC,cAAc,CAAC;IACvD,CAAC,EACD;MAAEiB,KAAK,EAAE,SAAS;MAAEC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAACoB,OAAO;IAAE,CAAC,EACpE;MACEH,KAAK,EAAE,eAAe;MACtBC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAAC,eAAe,CAAC;IACxD,CAAC,EACD;MACEiB,KAAK,EAAE,WAAW;MAClBC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAACqB,SAAS;IACjD,CAAC,EACD;MAAEJ,KAAK,EAAE,SAAS;MAAEC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAACsB,OAAO;IAAE,CAAC,EACpE;MAAEL,KAAK,EAAE,QAAQ;MAAEC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAACuB,MAAM;IAAE,CAAC,EAClE;MAAEN,KAAK,EAAE,SAAS;MAAEC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAACwB,OAAO;IAAE,CAAC,EACpE;MACEP,KAAK,EAAE,YAAY;MACnBC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAACyB,UAAU;IAClD,CAAC,EACD;MACER,KAAK,EAAE,sBAAsB;MAC7BC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAAC,sBAAsB,CAAC;IAC/D,CAAC,EACD;MAAEiB,KAAK,EAAE,UAAU;MAAEC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAAC0B,QAAQ;IAAE,CAAC,EACtE;MACET,KAAK,EAAE,YAAY;MACnBC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAAC2B,UAAU;IAClD,CAAC,EACD;MACEV,KAAK,EAAE,WAAW;MAClBC,UAAU,EAAElB,WAAW,CAAC,WAAW,CAAC,CAAC4B,SAAS,CAAC,CAAC;IAClD,CAAC,EACD;MACEX,KAAK,EAAE,UAAU;MACjBC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAAC,UAAU,CAAC;IACnD,CAAC,EACD;MACEiB,KAAK,EAAE,UAAU;MACjBC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAAC,UAAU,CAAC;IACnD,CAAC,EACD;MACEiB,KAAK,EAAE,YAAY;MACnBC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAAC,YAAY,CAAC;IACrD,CAAC,EACD;MACEiB,KAAK,EAAE,WAAW;MAClBC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAAC,WAAW,CAAC;IACpD,CAAC,EACD;MACEiB,KAAK,EAAE,WAAW;MAClBC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAAC,WAAW,CAAC;IACpD,CAAC,EACD;MACEiB,KAAK,EAAE,UAAU;MACjBC,UAAU,EAAEH,aAAa,CAACf,WAAW,CAAC,UAAU,CAAC;IACnD,CAAC,CACF;IAED,IAAM6B,YAAY,GAAG;MACnBC,eAAe,EAAE9B,WAAW,CAAC,kBAAkB,CAAC;MAChD,0BAA0B,EAAEA,WAAW,CAAC,4BAA4B,CAAC;MACrE,mBAAmB,EAAEA,WAAW,CAAC+B,UAAU;MAC3C,mBAAmB,EAAE/B,WAAW,CAACkB,UAAU;MAC3C,gCAAgC,EAAElB,WAAW,CAAC,0BAA0B,CAAC;MACzE,6BAA6B,EAC3BA,WAAW,CAAC,+BAA+B,CAAC;MAC9C,4BAA4B,EAAEA,WAAW,CAAC,6BAA6B,CAAC;MACxE,4BAA4B,EAAEA,WAAW,CAAC,8BAA8B,CAAC;MACzE,qCAAqC,EACnCA,WAAW,CAAC,wCAAwC,CAAC;MACvD,gCAAgC,EAC9BA,WAAW,CAAC,kCAAkC,CAAC;MACjD,4BAA4B,EAAEA,WAAW,CAAC,8BAA8B,CAAC;MACzE,gCAAgC,EAC9BA,WAAW,CAAC,kCAAkC,CAAC;MACjD,wCAAwC,EACtCA,WAAW,CAAC,2CAA2C,CAAC;MAC1D,yCAAyC,EACvCA,WAAW,CAAC,2CAA2C,CAAC;MAC1D,sBAAsB,EAAEA,WAAW,CAAC,uBAAuB,CAAC;MAC5D,qBAAqB,EAAEA,WAAW,CAAC,yBAAyB,CAAC;MAC7D,qBAAqB,EAAEA,WAAW,CAAC,yBAAyB,CAAC;MAC7D,0BAA0B,EAAEA,WAAW,CAAC,2BAA2B,CAAC;MACpE,sBAAsB,EAAEA,WAAW,CAAC,2BAA2B,CAAC;MAChE,yBAAyB,EAAEA,WAAW,CAAC,0BAA0B,CAAC;MAClE,8BAA8B,EAC5BA,WAAW,CAAC,gCAAgC,CAAC;MAC/C,8BAA8B,EAC5BA,WAAW,CAAC,gCAAgC,CAAC;MAC/CgC,WAAW,EAAEhC,WAAW,CAAC,cAAc,CAAC;MACxC,kBAAkB,EAAEA,WAAW,CAAC,kBAAkB,CAAC;MACnD,kBAAkB,EAAEA,WAAW,CAAC,kBAAkB,CAAC;MACnD,cAAc,EAAEA,WAAW,CAAC,cAAc;IAC5C,CAAC;IAEDH,MAAM,CAACoC,MAAM,CAACC,WAAW,CAAC,SAAS,EAAE;MACnCC,IAAI,EAAE,SAAS;MACfC,OAAO,EAAE,IAAI;MACbC,KAAK,EAAErB,WAAW;MAClBsB,MAAM,EAAET;IACV,CAAC,CAAC;IACFvB,GAAG,CAACiC,MAAM,CAAC,gBAAgB,EAAEvC,WAAW,CAAC;IACzCH,MAAM,CAACoC,MAAM,CAACO,QAAQ,CAAC,SAAS,CAAC;IAEjC1B,iBAAiB,CAAC,CAACV,MAAM,EAAEH,MAAM,EAAEC,UAAU,EAAEG,OAAO,EAAEF,SAAS,CAAC,CAAC;IAEnEG,GAAG,CAACK,KAAK,CAAC,qBAAqB,CAAC;EAClC;;EAEA;AACF;AACA;AACA;EACE,OAAOE,iBAAiB,CAACH,SAAmC,EAAQ;IAClE+B,MAAM,CAACC,iBAAiB,mCACnBD,MAAM,CAACC,iBAAiB;MAC3BhC;IAAS,EACV;EACH;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOK,aAAa,CAAC4B,KAAa,EAAU;IAC1C,OAAOA,KAAK,CAACf,SAAS,CAAC,CAAC,CAAC;EAC3B;EAEA,OAAOd,iBAAiB,CAAC8B,SAAqB,EAAQ;IACpD;IACA;IACA,IAAMC,WAAW,GAAGD,SAAS,CAACE,GAAG,CAAC;MAAA,IAAC;QAAEC;MAAG,CAAC;MAAA,OAAKA,EAAE;IAAA,EAAC;IACjDlD,MAAM,CAAC+C,SAAS,CACbI,YAAY,EAAE,CACdC,MAAM,CAAC;MAAA,IAAC;QAAEF;MAAG,CAAC;MAAA,OAAKF,WAAW,CAACK,QAAQ,CAACH,EAAE,CAAC;IAAA,EAAC,CAC5CI,OAAO,CAACC,aAAa,IAAI;MACxB,IAAMC,QAAQ,GAAGD,aAAa;MAC9B9C,GAAG,CAACiC,MAAM,CAAC,qCAAqC,EAAEc,QAAQ,CAACN,EAAE,CAAC;IAChE,CAAC,CAAC;;IAEJ;IACAH,SAAS,CAACO,OAAO,CAACE,QAAQ,IAAI;MAC5B7C,WAAW,CAAC8C,gBAAgB,CAACD,QAAQ,CAAC;IACxC,CAAC,CAAC;EACJ;EAEA,OAAOC,gBAAgB,CAACD,QAAkB,EAAQ;IAChD/C,GAAG,CAACiC,MAAM,CAAC,wBAAwB,EAAEc,QAAQ,CAACN,EAAE,CAAC;IACjDlD,MAAM,CAAC+C,SAAS,CAACW,QAAQ,CAACF,QAAQ,CAAC;IAEnCxD,MAAM,CAAC+C,SAAS,CAACY,UAAU,CAACH,QAAQ,CAACN,EAAE,EAAE,MAAM;MAC7ClD,MAAM,CAAC+C,SAAS,CAACa,wBAAwB,CAACJ,QAAQ,CAACN,EAAE,EAAEM,QAAQ,CAACK,IAAI,CAAC;MACrE7D,MAAM,CAAC+C,SAAS,CAACe,wBAAwB,CAACN,QAAQ,CAACN,EAAE,EAAEM,QAAQ,CAACA,QAAQ,CAAC;IAC3E,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOO,MAAM,CACX3B,MAA2C,EAErC;IAAA;IAAA,IADN4B,WAAW,uEAAGhE,MAAM,CAACoC,MAAM,CAAC6B,iBAAiB,CAACC,EAAE;IAEhD,oBAAA9B,MAAM,CAAC+B,QAAQ,EAAE,qDAAjB,iBAAmBJ,MAAM,CAACC,WAAW,CAAC;EACxC;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOI,YAAY,CACjBhC,MAA2C,EAC3CiC,OAAmB,EACC;IACpB,IAAMC,KAAK,GAAGlC,MAAM,CAAC+B,QAAQ,EAAE;IAC/BpE,aAAa,CAACuE,KAAK,CAAC;IACpB,IAAMC,qBAAqB,GAAG;MAC5BC,YAAY,EAAE;QACZC,GAAG,YAAKH,KAAK,CAACG,GAAG,CAAE;QACnBC,UAAU,EAAEJ,KAAK,CAACK,aAAa,EAAE;QACjCC,OAAO,EAAEN,KAAK,CAACO,YAAY,EAAE;QAC7BC,IAAI,EAAER,KAAK,CAACS,QAAQ;MACtB;IACF,CAAC;IACDtE,GAAG,CAACiC,MAAM,CAAC,yBAAyB,EAAE6B,qBAAqB,CAAC;IAE5DF,OAAO,CAACD,YAAY,CAACG,qBAAqB,CAAC;IAE3C,IAAMS,OAAO,GAAG5C,MAAM,CAAC6C,uBAAuB,CAACC,YAAY,IAAI;MAC7D,IAAM;QAAEC,OAAO;QAAEC;MAAU,CAAC,GAAGF,YAAY;MAE3C,IAAMG,cAAc,GAAG,EAAE;MACzB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,OAAO,CAACI,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;QAC1C,IAAME,MAAM,GAAGL,OAAO,CAACG,CAAC,CAAC;QACzB,IAAM;UAAEG,KAAK;UAAEC,WAAW;UAAEZ;QAAK,CAAC,GAAGU,MAAM;QAC3C,IAAMG,aAAa,GAAG;UACpBF,KAAK,EAAE;YACLG,KAAK,EAAE;cACLC,IAAI,EAAEJ,KAAK,CAACK,eAAe,GAAG,CAAC;cAC/BC,SAAS,EAAEN,KAAK,CAACO,WAAW,GAAG;YACjC,CAAC;YACDC,GAAG,EAAE;cACHJ,IAAI,EAAEJ,KAAK,CAACS,aAAa,GAAG,CAAC;cAC7BH,SAAS,EAAEN,KAAK,CAACU,SAAS,GAAG;YAC/B;UACF,CAAC;UACDT,WAAW;UACXZ;QACF,CAAC;QAEDO,cAAc,CAACe,IAAI,CAACT,aAAa,CAAC;MACpC;MAEA,IAAIN,cAAc,CAACE,MAAM,GAAG,CAAC,EAAE;QAC7B,IAAMc,uBAAuB,GAAG;UAC9B7B,YAAY,EAAE;YACZI,OAAO,EAAEQ,SAAS;YAClBX,GAAG,YAAKH,KAAK,CAACG,GAAG;UACnB,CAAC;UACDY;QACF,CAAC;QACD5E,GAAG,CAACiC,MAAM,CAAC,yBAAyB,EAAE2D,uBAAuB,CAAC;QAC9DhC,OAAO,CAACiC,cAAc,CAACD,uBAAuB,CAAC;MACjD;IACF,CAAC,CAAC;IAEF,OAAOrB,OAAO;EAChB;EAEA,OAAOuB,aAAa,CAClBnE,MAA2C,EAC3CiC,OAAmB,EACb;IACN,IAAMC,KAAK,GAAGlC,MAAM,CAAC+B,QAAQ,EAAE;IAC/BpE,aAAa,CAACuE,KAAK,CAAC;IACpB,IAAMkC,sBAAsB,GAAG;MAC7BhC,YAAY,EAAE;QACZC,GAAG,YAAKH,KAAK,CAACG,GAAG;MACnB;IACF,CAAC;IACDJ,OAAO,CAACkC,aAAa,CAACC,sBAAsB,CAAC;EAC/C;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOC,oBAAoB,CACzBrE,MAA2C,EACrC;IACNA,MAAM,CAACsE,UAAU,CAACC,UAAU,IAAI;MAC9B,IAAMC,WAAW,GAAG,MAAM;MAC1B,IAAMC,YAAY,GAAG,SAAS,CAAC,CAAC;MAChC,IAAMC,aAAa,GAAG,SAAS,CAAC,CAAC;MACjC,IAAMC,WAAW,GAAG3E,MAAM,CAAC+B,QAAQ,EAAE;MACrCpE,aAAa,CAACgH,WAAW,CAAC;MAC1B,IAAMC,UAAU,GAAGD,WAAW,CAACE,eAAe,CAACN,UAAU,CAAClB,KAAK,CAAC;MAChE,IACEmB,WAAW,CAACM,IAAI,CAACF,UAAU,CAAC,IAC5BH,YAAY,CAACK,IAAI,CAACF,UAAU,CAAC,IAC7BF,aAAa,CAACI,IAAI,CAACF,UAAU,CAAC,EAC9B;QACAD,WAAW,CAACI,UAAU,CAAC,CACrB;UACE1B,KAAK,EAAEkB,UAAU,CAAClB,KAAK;UACvBX,IAAI,EAAEkC,UAAU,CACbI,OAAO,CAACR,WAAW,EAAE,GAAG,CAAC,CACzBQ,OAAO,CAACP,YAAY,EAAE,EAAE,CAAC,CACzBO,OAAO,CAACN,aAAa,EAAE,GAAG;QAC/B,CAAC,CACF,CAAC;MACJ;IACF,CAAC,CAAC;EACJ;EAEA,OAAOO,aAAa,GAAY;IAC9B,IAAM;MAAEC;IAAS,CAAC,GAAG1E,MAAM,CAAC2E,SAAS;IACrC,OAAOD,QAAQ,CAACE,UAAU,CAAC,KAAK,CAAC;EACnC;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOC,4BAA4B,CACjCrF,MAA2C,EACrC;IACN;IACA;IACA;IACA;IACA;IACA,IAAMsF,WAAW,GAAG,CAClB;MACEC,OAAO,EAAE,QAAQ;MACjBC,GAAG,EAAE;IACP,CAAC,EACD;MACED,OAAO,EAAE;IACX,CAAC,CACF;IAED,IAAI;MACFD,WAAW,CAACpE,OAAO,CAACuE,UAAU,IAAI;QAChC,IACGlH,WAAW,CAAC0G,aAAa,EAAE,IAAIQ,UAAU,CAACD,GAAG,KAAK,EAAE,IACpD,CAACjH,WAAW,CAAC0G,aAAa,EAAE,IAAIQ,UAAU,CAACF,OAAO,KAAK,EAAG,EAC3D;UACA;QACF;QACAhH,WAAW,CAACmH,gBAAgB,CAC1B1F,MAAM,EACNzB,WAAW,CAAC0G,aAAa,EAAE,GAAGQ,UAAU,CAACD,GAAG,GAAGC,UAAU,CAACF,OAAO,CAClE;MACH,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOI,GAAG,EAAE;MACZ;MACAtH,GAAG,CAACuH,KAAK,CAACD,GAAG,CAAC;IAChB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAOD,gBAAgB,CACrB1F,MAA2C,EAC3CyF,UAA8B,EACxB;IACN,IAAIA,UAAU,KAAK9G,SAAS,EAAE;MAC5B;IACF;;IAEA;IACA;IACA;IACA,IAAM2G,WAAW,GAAGtF,MAAM,CAAC6F,4BAA4B,CACpDC,YAAY,EAAE,CACdC,IAAI,CAACC,GAAG,CAACP,UAAU,CAAC;IAEvB,IAAIH,WAAW,IAAI,IAAI,EAAE;MACvBA,WAAW,CAACpE,OAAO,CAAE+E,IAA0B,IAAK;QAClD5H,GAAG,CAACiC,MAAM,sCACsBmF,UAAU,kBAAQQ,IAAI,CAACC,OAAO,EAC7D;QACD;QACAlG,MAAM,CAAC6F,4BAA4B,CAACM,oBAAoB,YAClDF,IAAI,CAACC,OAAO,GAChB,IAAI,EACJ,MAAMvH,SAAS,CAChB;MACH,CAAC,CAAC;IACJ,CAAC,MAAM;MACLN,GAAG,CAAC+H,IAAI,sDAA+CX,UAAU,EAAG;IACtE;IACA;EACF;;EAEA,OAAOY,4BAA4B,CAACC,QAAkB,EAAU;IAC9D,IAAM;MAAEC;IAAS,CAAC,GAAGD,QAAQ;IAC7B,IAAM;MAAEE;IAAS,CAAC,GAAGD,QAAQ;IAC7B,IAAIC,QAAQ,KAAK,IAAI,EAAE;MACrB,OAAO,CAAC;IACV;IAEA,IAAMC,KAAK,GAAGlI,WAAW,CAAC0G,aAAa,EAAE;IAEzC,IAAIwB,KAAK,EAAE;MACT;QACE;QACA,CAACF,QAAQ,CAACG,OAAO,GAAG9I,MAAM,CAAC+I,MAAM,CAACC,OAAO,GAAG,CAAC,KAC5CL,QAAQ,CAACM,QAAQ,GAAGjJ,MAAM,CAAC+I,MAAM,CAACG,KAAK,GAAG,CAAC,CAAC,IAC5CP,QAAQ,CAACQ,MAAM,GAAGnJ,MAAM,CAAC+I,MAAM,CAACK,GAAG,GAAG,CAAC,CAAC,IACxCT,QAAQ,CAACU,OAAO,GAAGrJ,MAAM,CAAC+I,MAAM,CAACO,OAAO,GAAG,CAAC,CAAC,GAC9CrJ,YAAY,CAACsJ,UAAU,CAACX,QAAQ;MAAC;IAErC;IAEA;MACE;MACA,CAACD,QAAQ,CAACU,OAAO,GAAGrJ,MAAM,CAAC+I,MAAM,CAACC,OAAO,GAAG,CAAC,KAC5CL,QAAQ,CAACM,QAAQ,GAAGjJ,MAAM,CAAC+I,MAAM,CAACG,KAAK,GAAG,CAAC,CAAC,IAC5CP,QAAQ,CAACQ,MAAM,GAAGnJ,MAAM,CAAC+I,MAAM,CAACK,GAAG,GAAG,CAAC,CAAC,IACxCT,QAAQ,CAACG,OAAO,GAAG9I,MAAM,CAAC+I,MAAM,CAACO,OAAO,GAAG,CAAC,CAAC,GAC9CrJ,YAAY,CAACsJ,UAAU,CAACX,QAAQ;IAAC;EAErC;AACF;AAEA,eAAejI,WAAW"}
1
+ {"version":3,"file":"MonacoUtils.js","names":["assertNotNull","monaco","KeyCodeUtils","Log","MonacoTheme","PyLang","GroovyLang","ScalaLang","DbLang","LogLang","log","module","MonacoUtils","init","getWorker","debug","undefined","registerGetWorker","registerLanguages","removeHashtag","dhDarkRules","token","foreground","string","keyword","delimiter","comment","number","storage","identifier","operator","predefined","substring","dhDarkColors","errorForeground","background","focusBorder","editor","defineTheme","base","inherit","rules","colors","debug2","setTheme","window","MonacoEnvironment","color","languages","languageIds","map","id","getLanguages","filter","includes","forEach","languageParam","language","registerLanguage","register","onLanguage","setLanguageConfiguration","conf","setMonarchTokensProvider","setEOL","eolSequence","EndOfLineSequence","LF","getModel","openDocument","session","model","didOpenDocumentParams","textDocument","uri","languageId","getLanguageId","version","getVersionId","text","getValue","dispose","onDidChangeModelContent","changedEvent","changes","versionId","contentChanges","i","length","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","removeConflictingKeybindings","keybindings","windows","mac","keybinding","removeKeybinding","err","error","_standaloneKeybindingService","_getResolver","_map","get","elem","command","addDynamicKeybinding","warn","getMonacoKeyCodeFromShortcut","shortcut","keyState","keyValue","isMac","metaKey","KeyMod","CtrlCmd","shiftKey","Shift","altKey","Alt","ctrlKey","WinCtrl","fromString"],"sources":["../../src/monaco/MonacoUtils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\n/**\n * Exports a function for initializing monaco with the deephaven theme/config\n */\nimport { Shortcut } from '@deephaven/components';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport { assertNotNull } from '@deephaven/utils';\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 MonacoTheme 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 { registerLanguages, removeHashtag } = MonacoUtils;\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 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': MonacoTheme['editor-line-highlight-bg'],\n 'editorLineNumber.foreground':\n MonacoTheme['editor-line-number-foreground'],\n 'editor.selectionBackground': MonacoTheme['editor-selection-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 'editorSuggestWidget.highlightForeground':\n MonacoTheme['editor-suggest-widget-highlightForeground'],\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 '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 };\n\n monaco.editor.defineTheme('dh-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: dhDarkRules,\n colors: dhDarkColors,\n });\n log.debug2('monaco theme: ', MonacoTheme);\n monaco.editor.setTheme('dh-dark');\n\n registerLanguages([DbLang, PyLang, GroovyLang, LogLang, ScalaLang]);\n\n log.debug('Monaco initialized.');\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 them\n * @param editor The editor to remove the keybindings from\n */\n static removeConflictingKeybindings(\n editor: monaco.editor.IStandaloneCodeEditor\n ): void {\n // Multi-mod key events have a specific order\n // E.g. ctrl+alt+UpArrow is not found, but alt+ctrl+UpArrow is found\n // meta is WindowsKey on Windows and cmd on Mac\n // ctrl is ctrl Windows and ctrl on Mac\n // alt is alt on Windows and option on Mac\n const keybindings = [\n {\n windows: 'ctrl+D',\n mac: 'meta+D',\n },\n {\n windows: 'ctrl+H',\n },\n ];\n\n try {\n keybindings.forEach(keybinding => {\n if (\n (MonacoUtils.isMacPlatform() && keybinding.mac === '') ||\n (!MonacoUtils.isMacPlatform() && keybinding.windows === '')\n ) {\n return;\n }\n MonacoUtils.removeKeybinding(\n editor,\n MonacoUtils.isMacPlatform() ? keybinding.mac : keybinding.windows\n );\n });\n } catch (err) {\n // This is probably only caused by Monaco changing private methods used here\n log.error(err);\n }\n }\n\n /**\n * Remove a keybinding and allow the events to bubble up\n * If you want the keybinding removed for all editors, add it to removeConflictingKeybindings\n * Monaco still captures the event if you choose to override the keybinding with a no-op function\n *\n * Based on the following comment to remove a keybinding and let the event bubble up\n * https://github.com/microsoft/monaco-editor/issues/287#issuecomment-331447475\n * The issue for an API for this has apparently been open since 2016. Link below\n * https://github.com/microsoft/monaco-editor/issues/102\n * @param editor The editor to remove the keybinding from\n * @param keybinding The key string to remove. E.g. 'ctrl+C' for copy on Windows\n */\n static removeKeybinding(\n editor: monaco.editor.IStandaloneCodeEditor,\n keybinding: string | undefined\n ): void {\n if (keybinding === undefined) {\n return;\n }\n\n /* eslint-disable no-underscore-dangle */\n // It's possible a single keybinding has multiple commands depending on context\n // @ts-ignore\n const keybindings = editor._standaloneKeybindingService\n ._getResolver()\n ._map.get(keybinding);\n\n if (keybindings != null) {\n keybindings.forEach((elem: { command: unknown }) => {\n log.debug2(\n `Removing Monaco keybinding ${keybinding} for ${elem.command}`\n );\n // @ts-ignore\n editor._standaloneKeybindingService.addDynamicKeybinding(\n `-${elem.command}`,\n null,\n () => undefined\n );\n });\n } else {\n log.warn(`Did not find any keybindings to remove for ${keybinding}`);\n }\n /* eslint-enable no-underscore-dangle */\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\nexport default MonacoUtils;\n"],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
2
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
6
  /**
5
7
  * Editor editor for large blocks of code
6
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Editor.js","names":["React","Component","classNames","monaco","assertNotNull","MonacoUtils","Editor","constructor","props","handleResize","bind","container","state","componentDidMount","initEditor","window","addEventListener","componentWillUnmount","removeEventListener","destroyEditor","setLanguage","language","editor","model","getModel","setModelLanguage","updateDimensions","toggleFind","focus","trigger","undefined","layout","onEditorInitialized","settings","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","lineNumbersMinChars","minimap","enabled","scrollBeyondLastLine","tabCompletion","value","wordWrap","create","addAction","id","label","keybindings","KeyMod","CtrlCmd","KeyCode","KeyF","precondition","keybindingContext","contextMenuGroupId","contextMenuOrder","run","removeConflictingKeybindings","onEditorWillDestroy","dispose","render","className"],"sources":["../../src/notebook/Editor.tsx"],"sourcesContent":["/**\n * Editor editor for large blocks of code\n */\nimport React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport * as monaco from 'monaco-editor';\nimport { assertNotNull } from '@deephaven/utils';\nimport MonacoUtils from '../monaco/MonacoUtils';\n\ninterface EditorProps {\n className: string;\n onEditorInitialized: (editor: monaco.editor.IStandaloneCodeEditor) => void;\n onEditorWillDestroy: (editor: monaco.editor.IStandaloneCodeEditor) => void;\n settings: monaco.editor.IStandaloneEditorConstructionOptions;\n}\n\nclass Editor extends Component<EditorProps, Record<string, never>> {\n static defaultProps = {\n className: 'fill-parent-absolute',\n onEditorInitialized: (): void => undefined,\n onEditorWillDestroy: (): void => undefined,\n settings: {},\n };\n\n constructor(props: EditorProps) {\n super(props);\n\n this.handleResize = this.handleResize.bind(this);\n\n this.container = null;\n this.state = {};\n }\n\n componentDidMount(): void {\n this.initEditor();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('resize', this.handleResize);\n\n this.destroyEditor();\n }\n\n container: HTMLDivElement | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n setLanguage(language: string): void {\n if (this.editor) {\n const model = this.editor.getModel();\n assertNotNull(model);\n monaco.editor.setModelLanguage(model, language);\n }\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n toggleFind(): void {\n if (this.editor) {\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('toggleFind', 'actions.find', undefined);\n }\n }\n\n updateDimensions(): void {\n this.editor?.layout();\n }\n\n initEditor(): void {\n const { onEditorInitialized } = this.props;\n let { settings } = this.props;\n settings = {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: `python`,\n lineNumbersMinChars: 3,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n tabCompletion: 'on',\n value: '',\n wordWrap: 'off',\n ...settings,\n };\n assertNotNull(this.container);\n this.editor = monaco.editor.create(this.container, settings);\n this.editor.addAction({\n id: 'find',\n label: 'Find',\n keybindings: [\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF,\n ],\n precondition: undefined,\n keybindingContext: undefined,\n contextMenuGroupId: 'navigation',\n contextMenuOrder: 1.0,\n\n run: () => {\n this.toggleFind();\n },\n });\n this.editor.layout();\n MonacoUtils.removeConflictingKeybindings(this.editor);\n\n onEditorInitialized(this.editor);\n }\n\n destroyEditor(): void {\n const { onEditorWillDestroy } = this.props;\n assertNotNull(this.editor);\n onEditorWillDestroy(this.editor);\n this.editor.dispose();\n this.editor = undefined;\n }\n\n render(): ReactElement {\n const { className } = this.props;\n return (\n <div\n className={classNames('editor-container', className)}\n ref={container => {\n this.container = container;\n }}\n />\n );\n }\n}\n\nexport default Editor;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Editor.js","names":["React","Component","classNames","monaco","assertNotNull","MonacoUtils","Editor","constructor","props","handleResize","bind","container","state","componentDidMount","initEditor","window","addEventListener","componentWillUnmount","removeEventListener","destroyEditor","setLanguage","language","editor","model","getModel","setModelLanguage","updateDimensions","toggleFind","focus","trigger","undefined","layout","onEditorInitialized","settings","copyWithSyntaxHighlighting","fixedOverflowWidgets","folding","fontFamily","glyphMargin","lineNumbersMinChars","minimap","enabled","scrollBeyondLastLine","tabCompletion","value","wordWrap","create","addAction","id","label","keybindings","KeyMod","CtrlCmd","KeyCode","KeyF","precondition","keybindingContext","contextMenuGroupId","contextMenuOrder","run","removeConflictingKeybindings","onEditorWillDestroy","dispose","render","className"],"sources":["../../src/notebook/Editor.tsx"],"sourcesContent":["/**\n * Editor editor for large blocks of code\n */\nimport React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport * as monaco from 'monaco-editor';\nimport { assertNotNull } from '@deephaven/utils';\nimport MonacoUtils from '../monaco/MonacoUtils';\n\ninterface EditorProps {\n className: string;\n onEditorInitialized: (editor: monaco.editor.IStandaloneCodeEditor) => void;\n onEditorWillDestroy: (editor: monaco.editor.IStandaloneCodeEditor) => void;\n settings: monaco.editor.IStandaloneEditorConstructionOptions;\n}\n\nclass Editor extends Component<EditorProps, Record<string, never>> {\n static defaultProps = {\n className: 'fill-parent-absolute',\n onEditorInitialized: (): void => undefined,\n onEditorWillDestroy: (): void => undefined,\n settings: {},\n };\n\n constructor(props: EditorProps) {\n super(props);\n\n this.handleResize = this.handleResize.bind(this);\n\n this.container = null;\n this.state = {};\n }\n\n componentDidMount(): void {\n this.initEditor();\n\n window.addEventListener('resize', this.handleResize);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('resize', this.handleResize);\n\n this.destroyEditor();\n }\n\n container: HTMLDivElement | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n setLanguage(language: string): void {\n if (this.editor) {\n const model = this.editor.getModel();\n assertNotNull(model);\n monaco.editor.setModelLanguage(model, language);\n }\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n toggleFind(): void {\n if (this.editor) {\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('toggleFind', 'actions.find', undefined);\n }\n }\n\n updateDimensions(): void {\n this.editor?.layout();\n }\n\n initEditor(): void {\n const { onEditorInitialized } = this.props;\n let { settings } = this.props;\n settings = {\n copyWithSyntaxHighlighting: false,\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: `python`,\n lineNumbersMinChars: 3,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n tabCompletion: 'on',\n value: '',\n wordWrap: 'off',\n ...settings,\n };\n assertNotNull(this.container);\n this.editor = monaco.editor.create(this.container, settings);\n this.editor.addAction({\n id: 'find',\n label: 'Find',\n keybindings: [\n // eslint-disable-next-line no-bitwise\n monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF,\n ],\n precondition: undefined,\n keybindingContext: undefined,\n contextMenuGroupId: 'navigation',\n contextMenuOrder: 1.0,\n\n run: () => {\n this.toggleFind();\n },\n });\n this.editor.layout();\n MonacoUtils.removeConflictingKeybindings(this.editor);\n\n onEditorInitialized(this.editor);\n }\n\n destroyEditor(): void {\n const { onEditorWillDestroy } = this.props;\n assertNotNull(this.editor);\n onEditorWillDestroy(this.editor);\n this.editor.dispose();\n this.editor = undefined;\n }\n\n render(): ReactElement {\n const { className } = this.props;\n return (\n <div\n className={classNames('editor-container', className)}\n ref={container => {\n this.container = container;\n }}\n />\n );\n }\n}\n\nexport default Editor;\n"],"mappings":"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"}
@@ -1,4 +1,6 @@
1
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
2
4
  /**
3
5
  * Script editor for large blocks of code
4
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ScriptEditor.js","names":["React","Component","LoadingOverlay","ShortcutRegistry","Log","assertNotNull","editor","Editor","MonacoCompletionProvider","MonacoUtils","SHORTCUTS","log","module","ScriptEditor","constructor","props","handleEditorInitialized","bind","handleEditorWillDestroy","handleRun","handleRunSelected","updateShortcuts","contextActionCleanups","editorComponent","createRef","state","model","componentDidMount","addEventListener","componentDidUpdate","prevProps","sessionLanguage","settings","language","languageChanged","debug","setLanguage","sessionDisconnected","languageMatch","prevLanguageMatch","undefined","deInitContextActions","deInitCodeCompletion","sessionConnected","initContextActions","initCodeCompletion","componentWillUnmount","removeEventListener","getValue","error","getSelectedCommand","range","getSelection","getModel","startLineNumber","endColumn","endLineNumber","startLineMinColumn","getLineMinColumn","endLineMaxColumn","getLineMaxColumn","wholeLineRange","setStartPosition","setEndPosition","getValueInRange","innerEditor","focusOnMount","onChange","onEditorInitialized","session","setState","setEOL","registerPasteHandler","onDidChangeModelContent","focus","onEditorWillDestroy","onRunCommand","command","length","cleanups","push","addAction","id","label","keybindings","getMonacoKeyCodeFromShortcut","NOTEBOOK","RUN","contextMenuGroupId","contextMenuOrder","run","RUN_SELECTED","forEach","cleanup","dispose","completionCleanup","openDocument","closeDocument","append","text","currentText","setValue","lastLine","getLineCount","column","getLineLength","setPosition","lineNumber","updateDimensions","layout","toggleFind","current","render","isLoaded","isLoading","errorMessage","editorLanguage","completionProviderEnabled"],"sources":["../../src/notebook/ScriptEditor.tsx"],"sourcesContent":["/**\n * Script editor for large blocks of code\n */\nimport React, { Component, ReactElement, RefObject } from 'react';\nimport { LoadingOverlay, ShortcutRegistry } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport { assertNotNull } from '@deephaven/utils';\nimport { editor, IDisposable } from 'monaco-editor';\nimport Editor from './Editor';\nimport { MonacoCompletionProvider, MonacoUtils } from '../monaco';\nimport './ScriptEditor.scss';\nimport SHORTCUTS from '../ConsoleShortcuts';\n\nconst log = Log.module('ScriptEditor');\n\ninterface ScriptEditorProps {\n error?: { message?: string };\n isLoading: boolean;\n isLoaded: boolean;\n focusOnMount?: boolean;\n onChange: (e: editor.IModelContentChangedEvent) => void;\n onRunCommand: (command: string) => void;\n onEditorInitialized: (editor: editor.IStandaloneCodeEditor) => void;\n onEditorWillDestroy: (editor: editor.IStandaloneCodeEditor) => void;\n session: IdeSession | null;\n sessionLanguage?: string;\n settings?: editor.IStandaloneEditorConstructionOptions;\n}\n\ninterface ScriptEditorState {\n model: editor.ITextModel | null;\n}\n\nclass ScriptEditor extends Component<ScriptEditorProps, ScriptEditorState> {\n static defaultProps = {\n error: null,\n isLoading: false,\n isLoaded: false,\n focusOnMount: true,\n onChange: (): void => undefined,\n onEditorInitialized: (): void => undefined,\n onEditorWillDestroy: (): void => undefined,\n session: null,\n };\n\n constructor(props: ScriptEditorProps) {\n super(props);\n this.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorWillDestroy = this.handleEditorWillDestroy.bind(this);\n this.handleRun = this.handleRun.bind(this);\n this.handleRunSelected = this.handleRunSelected.bind(this);\n this.updateShortcuts = this.updateShortcuts.bind(this);\n\n this.contextActionCleanups = [];\n this.editorComponent = React.createRef();\n\n this.state = {\n model: null,\n };\n }\n\n componentDidMount(): void {\n ShortcutRegistry.addEventListener('onUpdate', this.updateShortcuts);\n }\n\n componentDidUpdate(prevProps: ScriptEditorProps): void {\n const { sessionLanguage, settings } = this.props;\n\n const language = settings?.language;\n\n const languageChanged = language !== prevProps.settings?.language;\n if (languageChanged) {\n log.debug('Set language', language);\n this.setLanguage(language);\n }\n\n const sessionDisconnected =\n sessionLanguage == null && prevProps.sessionLanguage != null;\n const languageMatch = language === sessionLanguage;\n const prevLanguageMatch =\n prevProps.settings?.language === prevProps.sessionLanguage;\n if (\n sessionDisconnected ||\n (sessionLanguage !== undefined && prevLanguageMatch && !languageMatch)\n ) {\n // Session disconnected or language changed from matching the session language to non-matching\n log.debug('De-init completion and context actions');\n this.deInitContextActions();\n this.deInitCodeCompletion();\n }\n\n const sessionConnected =\n sessionLanguage != null && prevProps.sessionLanguage == null;\n if (\n (sessionConnected && languageMatch) ||\n (sessionLanguage !== undefined && !prevLanguageMatch && languageMatch)\n ) {\n // Session connected with a matching language or notebook language changed to matching\n log.debug('Init completion and context actions');\n this.initContextActions();\n this.initCodeCompletion();\n }\n }\n\n componentWillUnmount(): void {\n ShortcutRegistry.removeEventListener('onUpdate', this.updateShortcuts);\n }\n\n contextActionCleanups: IDisposable[];\n\n completionCleanup?: IDisposable;\n\n editor?: editor.IStandaloneCodeEditor;\n\n editorComponent: RefObject<Editor>;\n\n getValue(): string | null {\n if (this.editor) {\n return this.editor.getValue();\n }\n log.error('Editor not initialized');\n return null;\n }\n\n getSelectedCommand(): string {\n const range = this.editor?.getSelection();\n assertNotNull(range);\n const model = this.editor?.getModel();\n assertNotNull(model);\n const { startLineNumber, endColumn } = range;\n let { endLineNumber } = range;\n if (endColumn === 1 && endLineNumber > startLineNumber) {\n endLineNumber -= 1;\n }\n const startLineMinColumn = model?.getLineMinColumn(startLineNumber);\n const endLineMaxColumn = model?.getLineMaxColumn(endLineNumber);\n const wholeLineRange = range\n .setStartPosition(startLineNumber, startLineMinColumn)\n .setEndPosition(endLineNumber, endLineMaxColumn);\n return model?.getValueInRange(wholeLineRange);\n }\n\n handleEditorInitialized(innerEditor: editor.IStandaloneCodeEditor): void {\n const {\n focusOnMount,\n onChange,\n onEditorInitialized,\n settings,\n session,\n sessionLanguage,\n } = this.props;\n\n log.debug('handleEditorInitialized', sessionLanguage, session, settings);\n\n this.editor = innerEditor;\n this.setState({ model: this.editor.getModel() });\n\n MonacoUtils.setEOL(innerEditor);\n MonacoUtils.registerPasteHandler(innerEditor);\n\n if (session != null && settings && sessionLanguage === settings.language) {\n this.initContextActions();\n this.initCodeCompletion();\n }\n\n innerEditor.onDidChangeModelContent(onChange);\n if (focusOnMount != null && focusOnMount) {\n innerEditor.focus();\n }\n\n onEditorInitialized(this.editor);\n }\n\n handleEditorWillDestroy(innerEditor: editor.IStandaloneCodeEditor): void {\n log.debug('handleEditorWillDestroy');\n const { onEditorWillDestroy } = this.props;\n onEditorWillDestroy(innerEditor);\n this.deInitContextActions();\n this.deInitCodeCompletion();\n this.setState({ model: null });\n this.editor = undefined;\n }\n\n handleRun(): void {\n const { onRunCommand } = this.props;\n const command = this.getValue();\n if (command != null) {\n onRunCommand(command);\n }\n }\n\n handleRunSelected(): void {\n const { onRunCommand } = this.props;\n const command = this.getSelectedCommand();\n onRunCommand(command);\n }\n\n initContextActions(): void {\n if (this.contextActionCleanups.length > 0) {\n log.error('Context actions already initialized.');\n return;\n }\n\n if (!this.editor) {\n return;\n }\n\n const cleanups = [];\n cleanups.push(\n this.editor.addAction({\n id: 'run-code',\n label: 'Run',\n keybindings: [\n MonacoUtils.getMonacoKeyCodeFromShortcut(SHORTCUTS.NOTEBOOK.RUN),\n ],\n contextMenuGroupId: 'navigation',\n contextMenuOrder: 1.5,\n\n run: () => {\n this.handleRun();\n },\n })\n );\n\n cleanups.push(\n this.editor.addAction({\n id: 'run-selected-code',\n label: 'Run Selected',\n keybindings: [\n MonacoUtils.getMonacoKeyCodeFromShortcut(\n SHORTCUTS.NOTEBOOK.RUN_SELECTED\n ),\n ],\n contextMenuGroupId: 'navigation',\n contextMenuOrder: 1.5,\n\n run: () => {\n this.handleRunSelected();\n },\n })\n );\n\n this.contextActionCleanups = cleanups;\n }\n\n deInitContextActions(): void {\n if (this.contextActionCleanups.length > 0) {\n this.contextActionCleanups.forEach(cleanup => cleanup.dispose());\n this.contextActionCleanups = [];\n }\n }\n\n updateShortcuts(): void {\n this.deInitContextActions();\n this.initContextActions();\n }\n\n initCodeCompletion(): void {\n if (this.completionCleanup != null) {\n log.error('Code completion already initialized.');\n return;\n }\n const { session } = this.props;\n log.debug('initCodeCompletion', this.editor, session);\n if (this.editor && session != null) {\n this.completionCleanup = MonacoUtils.openDocument(this.editor, session);\n }\n }\n\n deInitCodeCompletion(): void {\n const { session } = this.props;\n log.debug('deInitCodeCompletion', this.editor, session);\n if (this.completionCleanup) {\n this.completionCleanup.dispose();\n this.completionCleanup = undefined;\n if (this.editor && session != null) {\n MonacoUtils.closeDocument(this.editor, session);\n }\n }\n }\n\n append(text: string, focus = true): void {\n assertNotNull(this.editor);\n const model = this.editor.getModel();\n assertNotNull(model);\n const currentText = model.getValue();\n if (currentText) {\n model.setValue(`${currentText}\\n${text}`);\n } else {\n model.setValue(`${text}`);\n }\n\n const lastLine = model.getLineCount();\n const column = model.getLineLength(lastLine) + 1;\n\n this.editor.setPosition({ lineNumber: lastLine, column });\n\n if (focus) {\n this.editor.focus();\n }\n }\n\n updateDimensions(): void {\n log.debug('updateDimensions');\n if (this.editor) {\n this.editor.layout();\n }\n }\n\n focus(): void {\n log.debug('focus');\n if (this.editor) {\n this.editor.focus();\n }\n }\n\n toggleFind(): void {\n if (this.editorComponent.current) {\n this.editorComponent.current.toggleFind();\n }\n }\n\n setLanguage(language?: string): void {\n if (this.editorComponent.current && language !== undefined) {\n this.editorComponent.current.setLanguage(language);\n }\n }\n\n render(): ReactElement {\n const {\n error,\n isLoaded,\n isLoading,\n session,\n sessionLanguage,\n settings,\n } = this.props;\n const { model } = this.state;\n const errorMessage = error ? `Unable to open document. ${error}` : null;\n const editorLanguage = settings ? settings.language ?? null : null;\n const completionProviderEnabled =\n model && session && editorLanguage === sessionLanguage;\n\n return (\n <>\n {(error || isLoading) && (\n <div className=\"h-100 w-100 position-relative\">\n <LoadingOverlay\n errorMessage={errorMessage}\n isLoading={isLoading}\n isLoaded={isLoaded}\n />\n </div>\n )}\n\n {isLoaded && (\n <div className=\"h-100 w-100 script-editor\">\n {settings && (\n <>\n <Editor\n ref={this.editorComponent}\n settings={settings}\n onEditorInitialized={this.handleEditorInitialized}\n onEditorWillDestroy={this.handleEditorWillDestroy}\n />\n {completionProviderEnabled != null &&\n completionProviderEnabled && (\n <MonacoCompletionProvider\n model={model}\n language={editorLanguage}\n session={session}\n />\n )}\n </>\n )}\n </div>\n )}\n </>\n );\n }\n}\n\nexport default ScriptEditor;\n"],"mappings":";AAAA;AACA;AACA;AACA,OAAOA,KAAK,IAAIC,SAAS,QAAiC,OAAO;AACjE,SAASC,cAAc,EAAEC,gBAAgB,QAAQ,uBAAuB;AACxE,OAAOC,GAAG,MAAM,gBAAgB;AAEhC,SAASC,aAAa,QAAQ,kBAAkB;AAChD,SAASC,MAAM,QAAqB,eAAe;AAAC,OAC7CC,MAAM;AAAA,SACJC,wBAAwB,EAAEC,WAAW;AAAA;AAAA,OAEvCC,SAAS;AAEhB,IAAMC,GAAG,GAAGP,GAAG,CAACQ,MAAM,CAAC,cAAc,CAAC;AAoBtC,MAAMC,YAAY,SAASZ,SAAS,CAAuC;EAYzEa,WAAW,CAACC,KAAwB,EAAE;IACpC,KAAK,CAACA,KAAK,CAAC;IAAC;IAAA;IAAA;IAAA;IACb,IAAI,CAACC,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAACC,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAACC,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAACD,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAACE,SAAS,GAAG,IAAI,CAACA,SAAS,CAACF,IAAI,CAAC,IAAI,CAAC;IAC1C,IAAI,CAACG,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACH,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACI,eAAe,GAAG,IAAI,CAACA,eAAe,CAACJ,IAAI,CAAC,IAAI,CAAC;IAEtD,IAAI,CAACK,qBAAqB,GAAG,EAAE;IAC/B,IAAI,CAACC,eAAe,gBAAGvB,KAAK,CAACwB,SAAS,EAAE;IAExC,IAAI,CAACC,KAAK,GAAG;MACXC,KAAK,EAAE;IACT,CAAC;EACH;EAEAC,iBAAiB,GAAS;IACxBxB,gBAAgB,CAACyB,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAACP,eAAe,CAAC;EACrE;EAEAQ,kBAAkB,CAACC,SAA4B,EAAQ;IAAA;IACrD,IAAM;MAAEC,eAAe;MAAEC;IAAS,CAAC,GAAG,IAAI,CAACjB,KAAK;IAEhD,IAAMkB,QAAQ,GAAGD,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEC,QAAQ;IAEnC,IAAMC,eAAe,GAAGD,QAAQ,6BAAKH,SAAS,CAACE,QAAQ,wDAAlB,oBAAoBC,QAAQ;IACjE,IAAIC,eAAe,EAAE;MACnBvB,GAAG,CAACwB,KAAK,CAAC,cAAc,EAAEF,QAAQ,CAAC;MACnC,IAAI,CAACG,WAAW,CAACH,QAAQ,CAAC;IAC5B;IAEA,IAAMI,mBAAmB,GACvBN,eAAe,IAAI,IAAI,IAAID,SAAS,CAACC,eAAe,IAAI,IAAI;IAC9D,IAAMO,aAAa,GAAGL,QAAQ,KAAKF,eAAe;IAClD,IAAMQ,iBAAiB,GACrB,yBAAAT,SAAS,CAACE,QAAQ,yDAAlB,qBAAoBC,QAAQ,MAAKH,SAAS,CAACC,eAAe;IAC5D,IACEM,mBAAmB,IAClBN,eAAe,KAAKS,SAAS,IAAID,iBAAiB,IAAI,CAACD,aAAc,EACtE;MACA;MACA3B,GAAG,CAACwB,KAAK,CAAC,wCAAwC,CAAC;MACnD,IAAI,CAACM,oBAAoB,EAAE;MAC3B,IAAI,CAACC,oBAAoB,EAAE;IAC7B;IAEA,IAAMC,gBAAgB,GACpBZ,eAAe,IAAI,IAAI,IAAID,SAAS,CAACC,eAAe,IAAI,IAAI;IAC9D,IACGY,gBAAgB,IAAIL,aAAa,IACjCP,eAAe,KAAKS,SAAS,IAAI,CAACD,iBAAiB,IAAID,aAAc,EACtE;MACA;MACA3B,GAAG,CAACwB,KAAK,CAAC,qCAAqC,CAAC;MAChD,IAAI,CAACS,kBAAkB,EAAE;MACzB,IAAI,CAACC,kBAAkB,EAAE;IAC3B;EACF;EAEAC,oBAAoB,GAAS;IAC3B3C,gBAAgB,CAAC4C,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC1B,eAAe,CAAC;EACxE;EAUA2B,QAAQ,GAAkB;IACxB,IAAI,IAAI,CAAC1C,MAAM,EAAE;MACf,OAAO,IAAI,CAACA,MAAM,CAAC0C,QAAQ,EAAE;IAC/B;IACArC,GAAG,CAACsC,KAAK,CAAC,wBAAwB,CAAC;IACnC,OAAO,IAAI;EACb;EAEAC,kBAAkB,GAAW;IAAA;IAC3B,IAAMC,KAAK,mBAAG,IAAI,CAAC7C,MAAM,iDAAX,aAAa8C,YAAY,EAAE;IACzC/C,aAAa,CAAC8C,KAAK,CAAC;IACpB,IAAMzB,KAAK,oBAAG,IAAI,CAACpB,MAAM,kDAAX,cAAa+C,QAAQ,EAAE;IACrChD,aAAa,CAACqB,KAAK,CAAC;IACpB,IAAM;MAAE4B,eAAe;MAAEC;IAAU,CAAC,GAAGJ,KAAK;IAC5C,IAAI;MAAEK;IAAc,CAAC,GAAGL,KAAK;IAC7B,IAAII,SAAS,KAAK,CAAC,IAAIC,aAAa,GAAGF,eAAe,EAAE;MACtDE,aAAa,IAAI,CAAC;IACpB;IACA,IAAMC,kBAAkB,GAAG/B,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEgC,gBAAgB,CAACJ,eAAe,CAAC;IACnE,IAAMK,gBAAgB,GAAGjC,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEkC,gBAAgB,CAACJ,aAAa,CAAC;IAC/D,IAAMK,cAAc,GAAGV,KAAK,CACzBW,gBAAgB,CAACR,eAAe,EAAEG,kBAAkB,CAAC,CACrDM,cAAc,CAACP,aAAa,EAAEG,gBAAgB,CAAC;IAClD,OAAOjC,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEsC,eAAe,CAACH,cAAc,CAAC;EAC/C;EAEA7C,uBAAuB,CAACiD,WAAyC,EAAQ;IACvE,IAAM;MACJC,YAAY;MACZC,QAAQ;MACRC,mBAAmB;MACnBpC,QAAQ;MACRqC,OAAO;MACPtC;IACF,CAAC,GAAG,IAAI,CAAChB,KAAK;IAEdJ,GAAG,CAACwB,KAAK,CAAC,yBAAyB,EAAEJ,eAAe,EAAEsC,OAAO,EAAErC,QAAQ,CAAC;IAExE,IAAI,CAAC1B,MAAM,GAAG2D,WAAW;IACzB,IAAI,CAACK,QAAQ,CAAC;MAAE5C,KAAK,EAAE,IAAI,CAACpB,MAAM,CAAC+C,QAAQ;IAAG,CAAC,CAAC;IAEhD5C,WAAW,CAAC8D,MAAM,CAACN,WAAW,CAAC;IAC/BxD,WAAW,CAAC+D,oBAAoB,CAACP,WAAW,CAAC;IAE7C,IAAII,OAAO,IAAI,IAAI,IAAIrC,QAAQ,IAAID,eAAe,KAAKC,QAAQ,CAACC,QAAQ,EAAE;MACxE,IAAI,CAACW,kBAAkB,EAAE;MACzB,IAAI,CAACC,kBAAkB,EAAE;IAC3B;IAEAoB,WAAW,CAACQ,uBAAuB,CAACN,QAAQ,CAAC;IAC7C,IAAID,YAAY,IAAI,IAAI,IAAIA,YAAY,EAAE;MACxCD,WAAW,CAACS,KAAK,EAAE;IACrB;IAEAN,mBAAmB,CAAC,IAAI,CAAC9D,MAAM,CAAC;EAClC;EAEAY,uBAAuB,CAAC+C,WAAyC,EAAQ;IACvEtD,GAAG,CAACwB,KAAK,CAAC,yBAAyB,CAAC;IACpC,IAAM;MAAEwC;IAAoB,CAAC,GAAG,IAAI,CAAC5D,KAAK;IAC1C4D,mBAAmB,CAACV,WAAW,CAAC;IAChC,IAAI,CAACxB,oBAAoB,EAAE;IAC3B,IAAI,CAACC,oBAAoB,EAAE;IAC3B,IAAI,CAAC4B,QAAQ,CAAC;MAAE5C,KAAK,EAAE;IAAK,CAAC,CAAC;IAC9B,IAAI,CAACpB,MAAM,GAAGkC,SAAS;EACzB;EAEArB,SAAS,GAAS;IAChB,IAAM;MAAEyD;IAAa,CAAC,GAAG,IAAI,CAAC7D,KAAK;IACnC,IAAM8D,OAAO,GAAG,IAAI,CAAC7B,QAAQ,EAAE;IAC/B,IAAI6B,OAAO,IAAI,IAAI,EAAE;MACnBD,YAAY,CAACC,OAAO,CAAC;IACvB;EACF;EAEAzD,iBAAiB,GAAS;IACxB,IAAM;MAAEwD;IAAa,CAAC,GAAG,IAAI,CAAC7D,KAAK;IACnC,IAAM8D,OAAO,GAAG,IAAI,CAAC3B,kBAAkB,EAAE;IACzC0B,YAAY,CAACC,OAAO,CAAC;EACvB;EAEAjC,kBAAkB,GAAS;IACzB,IAAI,IAAI,CAACtB,qBAAqB,CAACwD,MAAM,GAAG,CAAC,EAAE;MACzCnE,GAAG,CAACsC,KAAK,CAAC,sCAAsC,CAAC;MACjD;IACF;IAEA,IAAI,CAAC,IAAI,CAAC3C,MAAM,EAAE;MAChB;IACF;IAEA,IAAMyE,QAAQ,GAAG,EAAE;IACnBA,QAAQ,CAACC,IAAI,CACX,IAAI,CAAC1E,MAAM,CAAC2E,SAAS,CAAC;MACpBC,EAAE,EAAE,UAAU;MACdC,KAAK,EAAE,KAAK;MACZC,WAAW,EAAE,CACX3E,WAAW,CAAC4E,4BAA4B,CAAC3E,SAAS,CAAC4E,QAAQ,CAACC,GAAG,CAAC,CACjE;MACDC,kBAAkB,EAAE,YAAY;MAChCC,gBAAgB,EAAE,GAAG;MAErBC,GAAG,EAAE,MAAM;QACT,IAAI,CAACvE,SAAS,EAAE;MAClB;IACF,CAAC,CAAC,CACH;IAED4D,QAAQ,CAACC,IAAI,CACX,IAAI,CAAC1E,MAAM,CAAC2E,SAAS,CAAC;MACpBC,EAAE,EAAE,mBAAmB;MACvBC,KAAK,EAAE,cAAc;MACrBC,WAAW,EAAE,CACX3E,WAAW,CAAC4E,4BAA4B,CACtC3E,SAAS,CAAC4E,QAAQ,CAACK,YAAY,CAChC,CACF;MACDH,kBAAkB,EAAE,YAAY;MAChCC,gBAAgB,EAAE,GAAG;MAErBC,GAAG,EAAE,MAAM;QACT,IAAI,CAACtE,iBAAiB,EAAE;MAC1B;IACF,CAAC,CAAC,CACH;IAED,IAAI,CAACE,qBAAqB,GAAGyD,QAAQ;EACvC;EAEAtC,oBAAoB,GAAS;IAC3B,IAAI,IAAI,CAACnB,qBAAqB,CAACwD,MAAM,GAAG,CAAC,EAAE;MACzC,IAAI,CAACxD,qBAAqB,CAACsE,OAAO,CAACC,OAAO,IAAIA,OAAO,CAACC,OAAO,EAAE,CAAC;MAChE,IAAI,CAACxE,qBAAqB,GAAG,EAAE;IACjC;EACF;EAEAD,eAAe,GAAS;IACtB,IAAI,CAACoB,oBAAoB,EAAE;IAC3B,IAAI,CAACG,kBAAkB,EAAE;EAC3B;EAEAC,kBAAkB,GAAS;IACzB,IAAI,IAAI,CAACkD,iBAAiB,IAAI,IAAI,EAAE;MAClCpF,GAAG,CAACsC,KAAK,CAAC,sCAAsC,CAAC;MACjD;IACF;IACA,IAAM;MAAEoB;IAAQ,CAAC,GAAG,IAAI,CAACtD,KAAK;IAC9BJ,GAAG,CAACwB,KAAK,CAAC,oBAAoB,EAAE,IAAI,CAAC7B,MAAM,EAAE+D,OAAO,CAAC;IACrD,IAAI,IAAI,CAAC/D,MAAM,IAAI+D,OAAO,IAAI,IAAI,EAAE;MAClC,IAAI,CAAC0B,iBAAiB,GAAGtF,WAAW,CAACuF,YAAY,CAAC,IAAI,CAAC1F,MAAM,EAAE+D,OAAO,CAAC;IACzE;EACF;EAEA3B,oBAAoB,GAAS;IAC3B,IAAM;MAAE2B;IAAQ,CAAC,GAAG,IAAI,CAACtD,KAAK;IAC9BJ,GAAG,CAACwB,KAAK,CAAC,sBAAsB,EAAE,IAAI,CAAC7B,MAAM,EAAE+D,OAAO,CAAC;IACvD,IAAI,IAAI,CAAC0B,iBAAiB,EAAE;MAC1B,IAAI,CAACA,iBAAiB,CAACD,OAAO,EAAE;MAChC,IAAI,CAACC,iBAAiB,GAAGvD,SAAS;MAClC,IAAI,IAAI,CAAClC,MAAM,IAAI+D,OAAO,IAAI,IAAI,EAAE;QAClC5D,WAAW,CAACwF,aAAa,CAAC,IAAI,CAAC3F,MAAM,EAAE+D,OAAO,CAAC;MACjD;IACF;EACF;EAEA6B,MAAM,CAACC,IAAY,EAAsB;IAAA,IAApBzB,KAAK,uEAAG,IAAI;IAC/BrE,aAAa,CAAC,IAAI,CAACC,MAAM,CAAC;IAC1B,IAAMoB,KAAK,GAAG,IAAI,CAACpB,MAAM,CAAC+C,QAAQ,EAAE;IACpChD,aAAa,CAACqB,KAAK,CAAC;IACpB,IAAM0E,WAAW,GAAG1E,KAAK,CAACsB,QAAQ,EAAE;IACpC,IAAIoD,WAAW,EAAE;MACf1E,KAAK,CAAC2E,QAAQ,WAAID,WAAW,eAAKD,IAAI,EAAG;IAC3C,CAAC,MAAM;MACLzE,KAAK,CAAC2E,QAAQ,WAAIF,IAAI,EAAG;IAC3B;IAEA,IAAMG,QAAQ,GAAG5E,KAAK,CAAC6E,YAAY,EAAE;IACrC,IAAMC,MAAM,GAAG9E,KAAK,CAAC+E,aAAa,CAACH,QAAQ,CAAC,GAAG,CAAC;IAEhD,IAAI,CAAChG,MAAM,CAACoG,WAAW,CAAC;MAAEC,UAAU,EAAEL,QAAQ;MAAEE;IAAO,CAAC,CAAC;IAEzD,IAAI9B,KAAK,EAAE;MACT,IAAI,CAACpE,MAAM,CAACoE,KAAK,EAAE;IACrB;EACF;EAEAkC,gBAAgB,GAAS;IACvBjG,GAAG,CAACwB,KAAK,CAAC,kBAAkB,CAAC;IAC7B,IAAI,IAAI,CAAC7B,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACuG,MAAM,EAAE;IACtB;EACF;EAEAnC,KAAK,GAAS;IACZ/D,GAAG,CAACwB,KAAK,CAAC,OAAO,CAAC;IAClB,IAAI,IAAI,CAAC7B,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACoE,KAAK,EAAE;IACrB;EACF;EAEAoC,UAAU,GAAS;IACjB,IAAI,IAAI,CAACvF,eAAe,CAACwF,OAAO,EAAE;MAChC,IAAI,CAACxF,eAAe,CAACwF,OAAO,CAACD,UAAU,EAAE;IAC3C;EACF;EAEA1E,WAAW,CAACH,QAAiB,EAAQ;IACnC,IAAI,IAAI,CAACV,eAAe,CAACwF,OAAO,IAAI9E,QAAQ,KAAKO,SAAS,EAAE;MAC1D,IAAI,CAACjB,eAAe,CAACwF,OAAO,CAAC3E,WAAW,CAACH,QAAQ,CAAC;IACpD;EACF;EAEA+E,MAAM,GAAiB;IAAA;IACrB,IAAM;MACJ/D,KAAK;MACLgE,QAAQ;MACRC,SAAS;MACT7C,OAAO;MACPtC,eAAe;MACfC;IACF,CAAC,GAAG,IAAI,CAACjB,KAAK;IACd,IAAM;MAAEW;IAAM,CAAC,GAAG,IAAI,CAACD,KAAK;IAC5B,IAAM0F,YAAY,GAAGlE,KAAK,sCAA+BA,KAAK,IAAK,IAAI;IACvE,IAAMmE,cAAc,GAAGpF,QAAQ,yBAAGA,QAAQ,CAACC,QAAQ,mEAAI,IAAI,GAAG,IAAI;IAClE,IAAMoF,yBAAyB,GAC7B3F,KAAK,IAAI2C,OAAO,IAAI+C,cAAc,KAAKrF,eAAe;IAExD,oBACE,0CACG,CAACkB,KAAK,IAAIiE,SAAS,kBAClB;MAAK,SAAS,EAAC;IAA+B,gBAC5C,oBAAC,cAAc;MACb,YAAY,EAAEC,YAAa;MAC3B,SAAS,EAAED,SAAU;MACrB,QAAQ,EAAED;IAAS,EACnB,CAEL,EAEAA,QAAQ,iBACP;MAAK,SAAS,EAAC;IAA2B,GACvCjF,QAAQ,iBACP,uDACE,oBAAC,MAAM;MACL,GAAG,EAAE,IAAI,CAACT,eAAgB;MAC1B,QAAQ,EAAES,QAAS;MACnB,mBAAmB,EAAE,IAAI,CAAChB,uBAAwB;MAClD,mBAAmB,EAAE,IAAI,CAACE;IAAwB,EAClD,EACDmG,yBAAyB,IAAI,IAAI,IAChCA,yBAAyB,iBACvB,oBAAC,wBAAwB;MACvB,KAAK,EAAE3F,KAAM;MACb,QAAQ,EAAE0F,cAAe;MACzB,OAAO,EAAE/C;IAAQ,EAEpB,CAEN,CAEJ,CACA;EAEP;AACF;AAAC,gBA3VKxD,YAAY,kBACM;EACpBoC,KAAK,EAAE,IAAI;EACXiE,SAAS,EAAE,KAAK;EAChBD,QAAQ,EAAE,KAAK;EACf/C,YAAY,EAAE,IAAI;EAClBC,QAAQ,EAAE,MAAY3B,SAAS;EAC/B4B,mBAAmB,EAAE,MAAY5B,SAAS;EAC1CmC,mBAAmB,EAAE,MAAYnC,SAAS;EAC1C6B,OAAO,EAAE;AACX,CAAC;AAmVH,eAAexD,YAAY"}
1
+ {"version":3,"file":"ScriptEditor.js","names":["React","Component","LoadingOverlay","ShortcutRegistry","Log","assertNotNull","editor","Editor","MonacoCompletionProvider","MonacoUtils","SHORTCUTS","log","module","ScriptEditor","constructor","props","handleEditorInitialized","bind","handleEditorWillDestroy","handleRun","handleRunSelected","updateShortcuts","contextActionCleanups","editorComponent","createRef","state","model","componentDidMount","addEventListener","componentDidUpdate","prevProps","sessionLanguage","settings","language","languageChanged","debug","setLanguage","sessionDisconnected","languageMatch","prevLanguageMatch","undefined","deInitContextActions","deInitCodeCompletion","sessionConnected","initContextActions","initCodeCompletion","componentWillUnmount","removeEventListener","getValue","error","getSelectedCommand","range","getSelection","getModel","startLineNumber","endColumn","endLineNumber","startLineMinColumn","getLineMinColumn","endLineMaxColumn","getLineMaxColumn","wholeLineRange","setStartPosition","setEndPosition","getValueInRange","innerEditor","focusOnMount","onChange","onEditorInitialized","session","setState","setEOL","registerPasteHandler","onDidChangeModelContent","focus","onEditorWillDestroy","onRunCommand","command","length","cleanups","push","addAction","id","label","keybindings","getMonacoKeyCodeFromShortcut","NOTEBOOK","RUN","contextMenuGroupId","contextMenuOrder","run","RUN_SELECTED","forEach","cleanup","dispose","completionCleanup","openDocument","closeDocument","append","text","currentText","setValue","lastLine","getLineCount","column","getLineLength","setPosition","lineNumber","updateDimensions","layout","toggleFind","current","render","isLoaded","isLoading","errorMessage","editorLanguage","completionProviderEnabled"],"sources":["../../src/notebook/ScriptEditor.tsx"],"sourcesContent":["/**\n * Script editor for large blocks of code\n */\nimport React, { Component, ReactElement, RefObject } from 'react';\nimport { LoadingOverlay, ShortcutRegistry } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport { assertNotNull } from '@deephaven/utils';\nimport { editor, IDisposable } from 'monaco-editor';\nimport Editor from './Editor';\nimport { MonacoCompletionProvider, MonacoUtils } from '../monaco';\nimport './ScriptEditor.scss';\nimport SHORTCUTS from '../ConsoleShortcuts';\n\nconst log = Log.module('ScriptEditor');\n\ninterface ScriptEditorProps {\n error?: { message?: string };\n isLoading: boolean;\n isLoaded: boolean;\n focusOnMount?: boolean;\n onChange: (e: editor.IModelContentChangedEvent) => void;\n onRunCommand: (command: string) => void;\n onEditorInitialized: (editor: editor.IStandaloneCodeEditor) => void;\n onEditorWillDestroy: (editor: editor.IStandaloneCodeEditor) => void;\n session: IdeSession | null;\n sessionLanguage?: string;\n settings?: editor.IStandaloneEditorConstructionOptions;\n}\n\ninterface ScriptEditorState {\n model: editor.ITextModel | null;\n}\n\nclass ScriptEditor extends Component<ScriptEditorProps, ScriptEditorState> {\n static defaultProps = {\n error: null,\n isLoading: false,\n isLoaded: false,\n focusOnMount: true,\n onChange: (): void => undefined,\n onEditorInitialized: (): void => undefined,\n onEditorWillDestroy: (): void => undefined,\n session: null,\n };\n\n constructor(props: ScriptEditorProps) {\n super(props);\n this.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorWillDestroy = this.handleEditorWillDestroy.bind(this);\n this.handleRun = this.handleRun.bind(this);\n this.handleRunSelected = this.handleRunSelected.bind(this);\n this.updateShortcuts = this.updateShortcuts.bind(this);\n\n this.contextActionCleanups = [];\n this.editorComponent = React.createRef();\n\n this.state = {\n model: null,\n };\n }\n\n componentDidMount(): void {\n ShortcutRegistry.addEventListener('onUpdate', this.updateShortcuts);\n }\n\n componentDidUpdate(prevProps: ScriptEditorProps): void {\n const { sessionLanguage, settings } = this.props;\n\n const language = settings?.language;\n\n const languageChanged = language !== prevProps.settings?.language;\n if (languageChanged) {\n log.debug('Set language', language);\n this.setLanguage(language);\n }\n\n const sessionDisconnected =\n sessionLanguage == null && prevProps.sessionLanguage != null;\n const languageMatch = language === sessionLanguage;\n const prevLanguageMatch =\n prevProps.settings?.language === prevProps.sessionLanguage;\n if (\n sessionDisconnected ||\n (sessionLanguage !== undefined && prevLanguageMatch && !languageMatch)\n ) {\n // Session disconnected or language changed from matching the session language to non-matching\n log.debug('De-init completion and context actions');\n this.deInitContextActions();\n this.deInitCodeCompletion();\n }\n\n const sessionConnected =\n sessionLanguage != null && prevProps.sessionLanguage == null;\n if (\n (sessionConnected && languageMatch) ||\n (sessionLanguage !== undefined && !prevLanguageMatch && languageMatch)\n ) {\n // Session connected with a matching language or notebook language changed to matching\n log.debug('Init completion and context actions');\n this.initContextActions();\n this.initCodeCompletion();\n }\n }\n\n componentWillUnmount(): void {\n ShortcutRegistry.removeEventListener('onUpdate', this.updateShortcuts);\n }\n\n contextActionCleanups: IDisposable[];\n\n completionCleanup?: IDisposable;\n\n editor?: editor.IStandaloneCodeEditor;\n\n editorComponent: RefObject<Editor>;\n\n getValue(): string | null {\n if (this.editor) {\n return this.editor.getValue();\n }\n log.error('Editor not initialized');\n return null;\n }\n\n getSelectedCommand(): string {\n const range = this.editor?.getSelection();\n assertNotNull(range);\n const model = this.editor?.getModel();\n assertNotNull(model);\n const { startLineNumber, endColumn } = range;\n let { endLineNumber } = range;\n if (endColumn === 1 && endLineNumber > startLineNumber) {\n endLineNumber -= 1;\n }\n const startLineMinColumn = model?.getLineMinColumn(startLineNumber);\n const endLineMaxColumn = model?.getLineMaxColumn(endLineNumber);\n const wholeLineRange = range\n .setStartPosition(startLineNumber, startLineMinColumn)\n .setEndPosition(endLineNumber, endLineMaxColumn);\n return model?.getValueInRange(wholeLineRange);\n }\n\n handleEditorInitialized(innerEditor: editor.IStandaloneCodeEditor): void {\n const {\n focusOnMount,\n onChange,\n onEditorInitialized,\n settings,\n session,\n sessionLanguage,\n } = this.props;\n\n log.debug('handleEditorInitialized', sessionLanguage, session, settings);\n\n this.editor = innerEditor;\n this.setState({ model: this.editor.getModel() });\n\n MonacoUtils.setEOL(innerEditor);\n MonacoUtils.registerPasteHandler(innerEditor);\n\n if (session != null && settings && sessionLanguage === settings.language) {\n this.initContextActions();\n this.initCodeCompletion();\n }\n\n innerEditor.onDidChangeModelContent(onChange);\n if (focusOnMount != null && focusOnMount) {\n innerEditor.focus();\n }\n\n onEditorInitialized(this.editor);\n }\n\n handleEditorWillDestroy(innerEditor: editor.IStandaloneCodeEditor): void {\n log.debug('handleEditorWillDestroy');\n const { onEditorWillDestroy } = this.props;\n onEditorWillDestroy(innerEditor);\n this.deInitContextActions();\n this.deInitCodeCompletion();\n this.setState({ model: null });\n this.editor = undefined;\n }\n\n handleRun(): void {\n const { onRunCommand } = this.props;\n const command = this.getValue();\n if (command != null) {\n onRunCommand(command);\n }\n }\n\n handleRunSelected(): void {\n const { onRunCommand } = this.props;\n const command = this.getSelectedCommand();\n onRunCommand(command);\n }\n\n initContextActions(): void {\n if (this.contextActionCleanups.length > 0) {\n log.error('Context actions already initialized.');\n return;\n }\n\n if (!this.editor) {\n return;\n }\n\n const cleanups = [];\n cleanups.push(\n this.editor.addAction({\n id: 'run-code',\n label: 'Run',\n keybindings: [\n MonacoUtils.getMonacoKeyCodeFromShortcut(SHORTCUTS.NOTEBOOK.RUN),\n ],\n contextMenuGroupId: 'navigation',\n contextMenuOrder: 1.5,\n\n run: () => {\n this.handleRun();\n },\n })\n );\n\n cleanups.push(\n this.editor.addAction({\n id: 'run-selected-code',\n label: 'Run Selected',\n keybindings: [\n MonacoUtils.getMonacoKeyCodeFromShortcut(\n SHORTCUTS.NOTEBOOK.RUN_SELECTED\n ),\n ],\n contextMenuGroupId: 'navigation',\n contextMenuOrder: 1.5,\n\n run: () => {\n this.handleRunSelected();\n },\n })\n );\n\n this.contextActionCleanups = cleanups;\n }\n\n deInitContextActions(): void {\n if (this.contextActionCleanups.length > 0) {\n this.contextActionCleanups.forEach(cleanup => cleanup.dispose());\n this.contextActionCleanups = [];\n }\n }\n\n updateShortcuts(): void {\n this.deInitContextActions();\n this.initContextActions();\n }\n\n initCodeCompletion(): void {\n if (this.completionCleanup != null) {\n log.error('Code completion already initialized.');\n return;\n }\n const { session } = this.props;\n log.debug('initCodeCompletion', this.editor, session);\n if (this.editor && session != null) {\n this.completionCleanup = MonacoUtils.openDocument(this.editor, session);\n }\n }\n\n deInitCodeCompletion(): void {\n const { session } = this.props;\n log.debug('deInitCodeCompletion', this.editor, session);\n if (this.completionCleanup) {\n this.completionCleanup.dispose();\n this.completionCleanup = undefined;\n if (this.editor && session != null) {\n MonacoUtils.closeDocument(this.editor, session);\n }\n }\n }\n\n append(text: string, focus = true): void {\n assertNotNull(this.editor);\n const model = this.editor.getModel();\n assertNotNull(model);\n const currentText = model.getValue();\n if (currentText) {\n model.setValue(`${currentText}\\n${text}`);\n } else {\n model.setValue(`${text}`);\n }\n\n const lastLine = model.getLineCount();\n const column = model.getLineLength(lastLine) + 1;\n\n this.editor.setPosition({ lineNumber: lastLine, column });\n\n if (focus) {\n this.editor.focus();\n }\n }\n\n updateDimensions(): void {\n log.debug('updateDimensions');\n if (this.editor) {\n this.editor.layout();\n }\n }\n\n focus(): void {\n log.debug('focus');\n if (this.editor) {\n this.editor.focus();\n }\n }\n\n toggleFind(): void {\n if (this.editorComponent.current) {\n this.editorComponent.current.toggleFind();\n }\n }\n\n setLanguage(language?: string): void {\n if (this.editorComponent.current && language !== undefined) {\n this.editorComponent.current.setLanguage(language);\n }\n }\n\n render(): ReactElement {\n const {\n error,\n isLoaded,\n isLoading,\n session,\n sessionLanguage,\n settings,\n } = this.props;\n const { model } = this.state;\n const errorMessage = error ? `Unable to open document. ${error}` : null;\n const editorLanguage = settings ? settings.language ?? null : null;\n const completionProviderEnabled =\n model && session && editorLanguage === sessionLanguage;\n\n return (\n <>\n {(error || isLoading) && (\n <div className=\"h-100 w-100 position-relative\">\n <LoadingOverlay\n errorMessage={errorMessage}\n isLoading={isLoading}\n isLoaded={isLoaded}\n />\n </div>\n )}\n\n {isLoaded && (\n <div className=\"h-100 w-100 script-editor\">\n {settings && (\n <>\n <Editor\n ref={this.editorComponent}\n settings={settings}\n onEditorInitialized={this.handleEditorInitialized}\n onEditorWillDestroy={this.handleEditorWillDestroy}\n />\n {completionProviderEnabled != null &&\n completionProviderEnabled && (\n <MonacoCompletionProvider\n model={model}\n language={editorLanguage}\n session={session}\n />\n )}\n </>\n )}\n </div>\n )}\n </>\n );\n }\n}\n\nexport default ScriptEditor;\n"],"mappings":"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"}