@deephaven/console 0.33.0 → 0.33.1-auth-plugins.25

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.
@@ -8,7 +8,7 @@ import classNames from 'classnames';
8
8
  import * as monaco from 'monaco-editor';
9
9
  import Log from '@deephaven/log';
10
10
  import { assertNotNull, PromiseUtils } from '@deephaven/utils';
11
- import { MonacoCompletionProvider, MonacoTheme, MonacoUtils } from "./monaco/index.js";
11
+ import { MonacoProviders, MonacoTheme, MonacoUtils } from "./monaco/index.js";
12
12
  import "./ConsoleInput.css";
13
13
  var log = Log.module('ConsoleInput');
14
14
  var LINE_HEIGHT = parseInt(MonacoTheme['line-height'], 10);
@@ -425,7 +425,7 @@ export class ConsoleInput extends PureComponent {
425
425
  style: {
426
426
  height: commandEditorHeight
427
427
  }
428
- }), model && /*#__PURE__*/React.createElement(MonacoCompletionProvider, {
428
+ }), model && /*#__PURE__*/React.createElement(MonacoProviders, {
429
429
  model: model,
430
430
  language: language,
431
431
  session: session
@@ -1 +1 @@
1
- {"version":3,"file":"ConsoleInput.js","names":["React","PureComponent","classNames","monaco","Log","assertNotNull","PromiseUtils","MonacoCompletionProvider","MonacoTheme","MonacoUtils","log","module","LINE_HEIGHT","parseInt","TOP_PADDING","BOTTOM_PADDING","MIN_INPUT_HEIGHT","BUFFER_SIZE","ConsoleInput","constructor","props","handleWindowResize","bind","commandContainer","createRef","commandHistoryIndex","timestamp","Date","now","bufferIndex","history","modifiedCommands","Map","state","commandEditorHeight","isFocused","model","componentDidMount","initCommandEditor","window","addEventListener","loadMoreHistory","componentDidUpdate","layoutEditor","componentWillUnmount","removeEventListener","loadingPromise","cancel","destroyCommandEditor","setConsoleText","text","focus","execute","debug","commandEditor","setValue","focusEnd","updateDimensions","processCommand","language","session","commandSettings","copyWithSyntaxHighlighting","cursorStyle","fixedOverflowWidgets","folding","fontFamily","glyphMargin","lineHeight","lineDecorationsWidth","lineNumbers","minimap","enabled","renderLineHighlight","scrollBeyondLastLine","scrollbar","arrowSize","horizontal","horizontalScrollbarSize","padding","top","bottom","tabCompletion","value","wordWrap","element","current","editor","create","setEOL","openDocument","onDidChangeModelContent","getValue","set","onDidFocusEditorText","setState","onDidBlurEditorText","onKeyDown","keyEvent","position","getPosition","lineNumber","getModel","code","isSuggestionMenuPopulated","loadCommand","focusStart","stopPropagation","preventDefault","getLineCount","altKey","shiftKey","metaKey","keyCode","KeyCode","Enter","command","trim","undefined","Tab","isSuggestionMenuActive","trigger","addCommand","KeyMod","CtrlCmd","KeyF","removeConflictingKeybindings","registerPasteHandler","closeDocument","dispose","commandSuggestionContainer","getDomNode","querySelector","classList","contains","childElementCount","column","getLineLength","firstCharTop","getTopForPosition","setPosition","setScrollTop","lastLine","lastCharTop","clear","layout","index","length","modifiedValue","get","historyValue","commandHistoryStorage","scope","makeCancelable","getTable","resolved","close","table","setReversed","setViewport","getViewportData","viewportData","size","items","filter","pos","arr","name","map","reverse","err","isCanceled","debug2","error","push","onSubmit","maxHeight","contentHeight","getContentHeight","Math","max","min","shouldScroll","options","overviewRulerLanes","updateOptions","render","disabled","INPUT_CLASS_NAME","height"],"sources":["../src/ConsoleInput.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement, RefObject } from 'react';\nimport classNames from 'classnames';\nimport * as monaco from 'monaco-editor';\nimport Log from '@deephaven/log';\nimport {\n assertNotNull,\n CancelablePromise,\n PromiseUtils,\n} from '@deephaven/utils';\nimport { ViewportData } from '@deephaven/storage';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport {\n CommandHistoryStorage,\n CommandHistoryStorageItem,\n CommandHistoryTable,\n} from './command-history';\nimport { MonacoCompletionProvider, MonacoTheme, MonacoUtils } from './monaco';\nimport './ConsoleInput.scss';\n\nconst log = Log.module('ConsoleInput');\n\nconst LINE_HEIGHT = parseInt(MonacoTheme['line-height'], 10);\nconst TOP_PADDING = 6;\nconst BOTTOM_PADDING = 6;\nconst MIN_INPUT_HEIGHT = LINE_HEIGHT + TOP_PADDING + BOTTOM_PADDING;\nconst BUFFER_SIZE = 100;\n\ninterface ConsoleInputProps {\n session: IdeSession;\n language: string;\n scope?: string;\n commandHistoryStorage: CommandHistoryStorage;\n onSubmit: (command: string) => void;\n maxHeight?: number;\n disabled?: boolean;\n}\n\ninterface ConsoleInputState {\n commandEditorHeight: number;\n isFocused: boolean;\n model: monaco.editor.ITextModel | null;\n}\n\n/**\n * Component for input in a console session. Handles loading the recent command history\n */\nexport class ConsoleInput extends PureComponent<\n ConsoleInputProps,\n ConsoleInputState\n> {\n static defaultProps = {\n maxHeight: LINE_HEIGHT * 10,\n scope: null,\n disabled: false,\n };\n\n static INPUT_CLASS_NAME = 'console-input';\n\n constructor(props: ConsoleInputProps) {\n super(props);\n\n this.handleWindowResize = this.handleWindowResize.bind(this);\n\n this.commandContainer = React.createRef();\n this.commandHistoryIndex = null;\n this.timestamp = Date.now();\n this.bufferIndex = 0;\n this.history = [];\n // Tracks every command that has been modified by its commandHistoryIndex. Cleared on any command being executed\n this.modifiedCommands = new Map();\n\n this.state = {\n commandEditorHeight: LINE_HEIGHT,\n isFocused: false,\n model: null,\n };\n }\n\n componentDidMount(): void {\n this.initCommandEditor();\n\n window.addEventListener('resize', this.handleWindowResize);\n\n this.loadMoreHistory();\n }\n\n componentDidUpdate(): void {\n this.layoutEditor();\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('resize', this.handleWindowResize);\n\n if (this.loadingPromise != null) {\n this.loadingPromise.cancel();\n }\n\n this.destroyCommandEditor();\n }\n\n cancelListener?: () => void;\n\n commandContainer: RefObject<HTMLDivElement>;\n\n commandEditor?: monaco.editor.IStandaloneCodeEditor;\n\n commandHistoryIndex: number | null;\n\n commandSuggestionContainer?: Element | null;\n\n loadingPromise?:\n | CancelablePromise<ViewportData<CommandHistoryStorageItem>>\n | CancelablePromise<CommandHistoryTable>;\n\n timestamp: number;\n\n bufferIndex: number | null;\n\n history: string[];\n\n // Tracks every command that has been modified by its commandHistoryIndex. Cleared on any command being executed\n modifiedCommands: Map<number | null, string | null>;\n\n /**\n * Sets the console text from an external source.\n * Sets commandHistoryIndex to null since the source is not part of the history\n * @param text The text to set in the input\n * @param focus If the input should be focused\n * @param execute If the input should be executed\n * @returns void\n */\n setConsoleText(text: string, focus = true, execute = false): void {\n if (!text) {\n return;\n }\n\n log.debug('Command received: ', text);\n\n // Only set the console text if we're not running this command\n if (!execute) {\n // Need to set commandHistoryIndex before value\n // On value change, modified commands map updates\n this.commandHistoryIndex = null;\n this.commandEditor?.setValue(text);\n }\n\n if (focus) {\n this.focusEnd();\n }\n\n this.updateDimensions();\n\n if (execute) {\n this.processCommand(text);\n }\n }\n\n initCommandEditor(): void {\n const { language, session } = this.props;\n const commandSettings = {\n copyWithSyntaxHighlighting: false,\n cursorStyle: 'block',\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language,\n lineHeight: LINE_HEIGHT,\n lineDecorationsWidth: 3,\n lineNumbers: 'off',\n minimap: { enabled: false },\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n scrollbar: {\n arrowSize: 0,\n horizontal: 'hidden',\n horizontalScrollbarSize: 0,\n },\n padding: {\n top: TOP_PADDING,\n bottom: BOTTOM_PADDING,\n },\n tabCompletion: 'on',\n value: '',\n wordWrap: 'on',\n } as const;\n\n const element = this.commandContainer.current;\n assertNotNull(element);\n this.commandEditor = monaco.editor.create(element, commandSettings);\n\n MonacoUtils.setEOL(this.commandEditor);\n MonacoUtils.openDocument(this.commandEditor, session);\n\n this.commandEditor.onDidChangeModelContent(() => {\n const value = this.commandEditor?.getValue();\n this.modifiedCommands.set(this.commandHistoryIndex, value ?? null);\n this.updateDimensions();\n });\n\n this.commandEditor.onDidFocusEditorText(() => {\n this.setState({ isFocused: true });\n });\n\n this.commandEditor.onDidBlurEditorText(() => {\n this.setState({ isFocused: false });\n });\n\n /**\n * Register for keydown events to capture the `Enter` key.\n * Need to do it this way instead of using `addCommand`, because that would eat the Enter key in all situations, which is not what we want.\n * Can't do it in `onDidChangeModelContent` either, since we want to stop the Enter action from modifying the command.\n */\n this.commandEditor.onKeyDown(keyEvent => {\n const { commandEditor, commandHistoryIndex } = this;\n const position = commandEditor?.getPosition();\n assertNotNull(position);\n const { lineNumber } = position;\n const model = commandEditor?.getModel();\n if (\n keyEvent.code === 'ArrowUp' &&\n !this.isSuggestionMenuPopulated() &&\n lineNumber === 1\n ) {\n if (commandHistoryIndex != null) {\n this.loadCommand(commandHistoryIndex + 1);\n } else {\n this.loadCommand(0);\n }\n\n this.focusStart();\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n return;\n }\n\n if (\n keyEvent.code === 'ArrowDown' &&\n !this.isSuggestionMenuPopulated() &&\n lineNumber === model?.getLineCount()\n ) {\n if (commandHistoryIndex != null && commandHistoryIndex > 0) {\n this.loadCommand(commandHistoryIndex - 1);\n } else {\n this.loadCommand(null);\n }\n\n this.focusEnd();\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n return;\n }\n\n if (!keyEvent.altKey && !keyEvent.shiftKey && !keyEvent.metaKey) {\n if (keyEvent.keyCode === monaco.KeyCode.Enter) {\n if (!this.isSuggestionMenuPopulated()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n const command = this.commandEditor?.getValue().trim();\n if (command !== undefined) {\n this.processCommand(command);\n this.commandEditor?.setValue('');\n }\n }\n } else if (keyEvent.keyCode === monaco.KeyCode.Tab) {\n if (!this.isSuggestionMenuActive()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n this.commandEditor?.trigger(\n 'Tab key trigger suggestions',\n 'editor.action.triggerSuggest',\n {}\n );\n } else if (!this.isSuggestionMenuPopulated()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n }\n }\n }\n });\n\n // Override the Ctrl+F functionality so that the find window doesn't appear\n this.commandEditor.addCommand(\n monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF, // eslint-disable-line no-bitwise\n () => undefined\n );\n\n MonacoUtils.removeConflictingKeybindings(this.commandEditor);\n\n MonacoUtils.registerPasteHandler(this.commandEditor);\n\n this.commandEditor.focus();\n\n this.updateDimensions();\n\n this.setState({ model: this.commandEditor.getModel() });\n }\n\n destroyCommandEditor(): void {\n const { session } = this.props;\n if (this.commandEditor) {\n MonacoUtils.closeDocument(this.commandEditor, session);\n this.commandEditor.dispose();\n this.commandEditor = undefined;\n }\n }\n\n handleWindowResize(): void {\n this.updateDimensions();\n }\n\n isSuggestionMenuActive(): boolean {\n if (!this.commandSuggestionContainer) {\n this.commandSuggestionContainer = this.commandEditor\n ?.getDomNode()\n ?.querySelector('.suggest-widget');\n }\n\n return (\n (this.commandSuggestionContainer &&\n this.commandSuggestionContainer.classList.contains('visible')) ??\n false\n );\n }\n\n isSuggestionMenuPopulated(): boolean {\n return (\n this.isSuggestionMenuActive() &&\n (this.commandSuggestionContainer?.querySelector('.monaco-list-rows')\n ?.childElementCount ?? 0) > 0\n );\n }\n\n focus(): void {\n this.commandEditor?.focus();\n }\n\n focusStart(): void {\n const model = this.commandEditor?.getModel();\n assertNotNull(model);\n const column = model.getLineLength(1) + 1; // Length of 1st line\n const firstCharTop = this.commandEditor?.getTopForPosition(1, column);\n assertNotNull(firstCharTop);\n this.commandEditor?.setPosition({ lineNumber: 1, column });\n this.commandEditor?.setScrollTop(firstCharTop);\n this.commandEditor?.focus();\n }\n\n focusEnd(): void {\n const model = this.commandEditor?.getModel();\n assertNotNull(model);\n const lastLine = model.getLineCount();\n const column = model.getLineLength(lastLine) + 1;\n const lastCharTop = this.commandEditor?.getTopForPosition(lastLine, column);\n assertNotNull(lastCharTop);\n this.commandEditor?.setPosition({ lineNumber: lastLine, column });\n this.commandEditor?.setScrollTop(lastCharTop);\n this.commandEditor?.focus();\n }\n\n clear(): void {\n this.commandEditor?.focus();\n this.commandEditor?.getModel()?.setValue('');\n this.commandHistoryIndex = null;\n }\n\n layoutEditor(): void {\n if (this.commandEditor) {\n this.commandEditor.layout();\n }\n }\n\n /**\n * Loads the given command from history\n * If edits have been made to the command since last run command, loads the modified version\n * @param index The index to load. Null to load command started in the editor and not in the history\n */\n loadCommand(index: number | null): void {\n if (index !== null && index >= this.history.length) {\n return;\n }\n\n const modifiedValue = this.modifiedCommands.get(index);\n const historyValue =\n index === null ? '' : this.history[this.history.length - index - 1];\n\n this.commandHistoryIndex = index;\n this.commandEditor?.getModel()?.setValue(modifiedValue ?? historyValue);\n\n if (index !== null && index > this.history.length - BUFFER_SIZE) {\n this.loadMoreHistory();\n }\n }\n\n async loadMoreHistory(): Promise<void> {\n try {\n if (this.loadingPromise != null || this.bufferIndex == null) {\n return;\n }\n\n const { commandHistoryStorage, language, scope } = this.props;\n\n this.loadingPromise = PromiseUtils.makeCancelable(\n commandHistoryStorage.getTable(language, scope ?? '', this.timestamp),\n resolved => resolved.close()\n );\n\n const table = await this.loadingPromise;\n table.setReversed(true);\n table.setViewport({\n top: this.bufferIndex,\n bottom: this.bufferIndex + BUFFER_SIZE - 1,\n });\n\n this.loadingPromise = PromiseUtils.makeCancelable(\n table.getViewportData(),\n () => table.close()\n );\n const viewportData = await this.loadingPromise;\n this.bufferIndex += BUFFER_SIZE;\n if (this.bufferIndex >= table.size) {\n // We've loaded the full history, no need to load any more\n this.bufferIndex = null;\n }\n this.history = [\n ...viewportData.items\n .filter(\n ({ name }, pos, arr) => pos === 0 || name !== arr[pos - 1].name\n )\n .map(({ name }) => name)\n .reverse(),\n ...this.history,\n ];\n\n this.loadingPromise = undefined;\n\n table.close();\n } catch (err) {\n this.loadingPromise = undefined;\n if (PromiseUtils.isCanceled(err)) {\n log.debug2('Promise canceled, not loading history');\n return;\n }\n\n log.error('Error fetching history', err);\n }\n }\n\n processCommand(command: string): void {\n this.commandHistoryIndex = null;\n this.modifiedCommands.clear();\n\n assertNotNull(command);\n if (\n command !== '' &&\n (this.history.length === 0 ||\n command !== this.history[this.history.length - 1])\n ) {\n this.history.push(command);\n }\n this.updateDimensions();\n\n const { onSubmit } = this.props;\n onSubmit(command);\n }\n\n updateDimensions(): void {\n if (!this.commandEditor) {\n return;\n }\n\n const { maxHeight } = this.props;\n assertNotNull(maxHeight);\n const contentHeight = this.commandEditor.getContentHeight();\n const commandEditorHeight = Math.max(\n Math.min(contentHeight, maxHeight),\n MIN_INPUT_HEIGHT\n );\n\n // Only show the overview ruler (markings overlapping sroll bar area) if the scrollbar will show\n const shouldScroll = contentHeight > commandEditorHeight;\n\n const options = { overviewRulerLanes: shouldScroll ? undefined : 0 };\n\n this.setState(\n {\n commandEditorHeight,\n },\n () => {\n this.commandEditor?.updateOptions(options);\n this.commandEditor?.layout();\n }\n );\n }\n\n render(): ReactElement {\n const { disabled, language, session } = this.props;\n const { commandEditorHeight, isFocused, model } = this.state;\n return (\n <div className={classNames('console-input-wrapper', { disabled })}>\n <div\n className={classNames('console-input-inner-wrapper', {\n focus: isFocused,\n })}\n >\n <div\n className={ConsoleInput.INPUT_CLASS_NAME}\n ref={this.commandContainer}\n style={{ height: commandEditorHeight }}\n />\n {model && (\n <MonacoCompletionProvider\n model={model}\n language={language}\n session={session}\n />\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default ConsoleInput;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ConsoleInput.js","names":["React","PureComponent","classNames","monaco","Log","assertNotNull","PromiseUtils","MonacoProviders","MonacoTheme","MonacoUtils","log","module","LINE_HEIGHT","parseInt","TOP_PADDING","BOTTOM_PADDING","MIN_INPUT_HEIGHT","BUFFER_SIZE","ConsoleInput","constructor","props","handleWindowResize","bind","commandContainer","createRef","commandHistoryIndex","timestamp","Date","now","bufferIndex","history","modifiedCommands","Map","state","commandEditorHeight","isFocused","model","componentDidMount","initCommandEditor","window","addEventListener","loadMoreHistory","componentDidUpdate","layoutEditor","componentWillUnmount","removeEventListener","loadingPromise","cancel","destroyCommandEditor","setConsoleText","text","focus","execute","debug","commandEditor","setValue","focusEnd","updateDimensions","processCommand","language","session","commandSettings","copyWithSyntaxHighlighting","cursorStyle","fixedOverflowWidgets","folding","fontFamily","glyphMargin","lineHeight","lineDecorationsWidth","lineNumbers","minimap","enabled","renderLineHighlight","scrollBeyondLastLine","scrollbar","arrowSize","horizontal","horizontalScrollbarSize","padding","top","bottom","tabCompletion","value","wordWrap","element","current","editor","create","setEOL","openDocument","onDidChangeModelContent","getValue","set","onDidFocusEditorText","setState","onDidBlurEditorText","onKeyDown","keyEvent","position","getPosition","lineNumber","getModel","code","isSuggestionMenuPopulated","loadCommand","focusStart","stopPropagation","preventDefault","getLineCount","altKey","shiftKey","metaKey","keyCode","KeyCode","Enter","command","trim","undefined","Tab","isSuggestionMenuActive","trigger","addCommand","KeyMod","CtrlCmd","KeyF","removeConflictingKeybindings","registerPasteHandler","closeDocument","dispose","commandSuggestionContainer","getDomNode","querySelector","classList","contains","childElementCount","column","getLineLength","firstCharTop","getTopForPosition","setPosition","setScrollTop","lastLine","lastCharTop","clear","layout","index","length","modifiedValue","get","historyValue","commandHistoryStorage","scope","makeCancelable","getTable","resolved","close","table","setReversed","setViewport","getViewportData","viewportData","size","items","filter","pos","arr","name","map","reverse","err","isCanceled","debug2","error","push","onSubmit","maxHeight","contentHeight","getContentHeight","Math","max","min","shouldScroll","options","overviewRulerLanes","updateOptions","render","disabled","INPUT_CLASS_NAME","height"],"sources":["../src/ConsoleInput.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement, RefObject } from 'react';\nimport classNames from 'classnames';\nimport * as monaco from 'monaco-editor';\nimport Log from '@deephaven/log';\nimport {\n assertNotNull,\n CancelablePromise,\n PromiseUtils,\n} from '@deephaven/utils';\nimport { ViewportData } from '@deephaven/storage';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport {\n CommandHistoryStorage,\n CommandHistoryStorageItem,\n CommandHistoryTable,\n} from './command-history';\nimport { MonacoProviders, MonacoTheme, MonacoUtils } from './monaco';\nimport './ConsoleInput.scss';\n\nconst log = Log.module('ConsoleInput');\n\nconst LINE_HEIGHT = parseInt(MonacoTheme['line-height'], 10);\nconst TOP_PADDING = 6;\nconst BOTTOM_PADDING = 6;\nconst MIN_INPUT_HEIGHT = LINE_HEIGHT + TOP_PADDING + BOTTOM_PADDING;\nconst BUFFER_SIZE = 100;\n\ninterface ConsoleInputProps {\n session: IdeSession;\n language: string;\n scope?: string;\n commandHistoryStorage: CommandHistoryStorage;\n onSubmit: (command: string) => void;\n maxHeight?: number;\n disabled?: boolean;\n}\n\ninterface ConsoleInputState {\n commandEditorHeight: number;\n isFocused: boolean;\n model: monaco.editor.ITextModel | null;\n}\n\n/**\n * Component for input in a console session. Handles loading the recent command history\n */\nexport class ConsoleInput extends PureComponent<\n ConsoleInputProps,\n ConsoleInputState\n> {\n static defaultProps = {\n maxHeight: LINE_HEIGHT * 10,\n scope: null,\n disabled: false,\n };\n\n static INPUT_CLASS_NAME = 'console-input';\n\n constructor(props: ConsoleInputProps) {\n super(props);\n\n this.handleWindowResize = this.handleWindowResize.bind(this);\n\n this.commandContainer = React.createRef();\n this.commandHistoryIndex = null;\n this.timestamp = Date.now();\n this.bufferIndex = 0;\n this.history = [];\n // Tracks every command that has been modified by its commandHistoryIndex. Cleared on any command being executed\n this.modifiedCommands = new Map();\n\n this.state = {\n commandEditorHeight: LINE_HEIGHT,\n isFocused: false,\n model: null,\n };\n }\n\n componentDidMount(): void {\n this.initCommandEditor();\n\n window.addEventListener('resize', this.handleWindowResize);\n\n this.loadMoreHistory();\n }\n\n componentDidUpdate(): void {\n this.layoutEditor();\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('resize', this.handleWindowResize);\n\n if (this.loadingPromise != null) {\n this.loadingPromise.cancel();\n }\n\n this.destroyCommandEditor();\n }\n\n cancelListener?: () => void;\n\n commandContainer: RefObject<HTMLDivElement>;\n\n commandEditor?: monaco.editor.IStandaloneCodeEditor;\n\n commandHistoryIndex: number | null;\n\n commandSuggestionContainer?: Element | null;\n\n loadingPromise?:\n | CancelablePromise<ViewportData<CommandHistoryStorageItem>>\n | CancelablePromise<CommandHistoryTable>;\n\n timestamp: number;\n\n bufferIndex: number | null;\n\n history: string[];\n\n // Tracks every command that has been modified by its commandHistoryIndex. Cleared on any command being executed\n modifiedCommands: Map<number | null, string | null>;\n\n /**\n * Sets the console text from an external source.\n * Sets commandHistoryIndex to null since the source is not part of the history\n * @param text The text to set in the input\n * @param focus If the input should be focused\n * @param execute If the input should be executed\n * @returns void\n */\n setConsoleText(text: string, focus = true, execute = false): void {\n if (!text) {\n return;\n }\n\n log.debug('Command received: ', text);\n\n // Only set the console text if we're not running this command\n if (!execute) {\n // Need to set commandHistoryIndex before value\n // On value change, modified commands map updates\n this.commandHistoryIndex = null;\n this.commandEditor?.setValue(text);\n }\n\n if (focus) {\n this.focusEnd();\n }\n\n this.updateDimensions();\n\n if (execute) {\n this.processCommand(text);\n }\n }\n\n initCommandEditor(): void {\n const { language, session } = this.props;\n const commandSettings = {\n copyWithSyntaxHighlighting: false,\n cursorStyle: 'block',\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language,\n lineHeight: LINE_HEIGHT,\n lineDecorationsWidth: 3,\n lineNumbers: 'off',\n minimap: { enabled: false },\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n scrollbar: {\n arrowSize: 0,\n horizontal: 'hidden',\n horizontalScrollbarSize: 0,\n },\n padding: {\n top: TOP_PADDING,\n bottom: BOTTOM_PADDING,\n },\n tabCompletion: 'on',\n value: '',\n wordWrap: 'on',\n } as const;\n\n const element = this.commandContainer.current;\n assertNotNull(element);\n this.commandEditor = monaco.editor.create(element, commandSettings);\n\n MonacoUtils.setEOL(this.commandEditor);\n MonacoUtils.openDocument(this.commandEditor, session);\n\n this.commandEditor.onDidChangeModelContent(() => {\n const value = this.commandEditor?.getValue();\n this.modifiedCommands.set(this.commandHistoryIndex, value ?? null);\n this.updateDimensions();\n });\n\n this.commandEditor.onDidFocusEditorText(() => {\n this.setState({ isFocused: true });\n });\n\n this.commandEditor.onDidBlurEditorText(() => {\n this.setState({ isFocused: false });\n });\n\n /**\n * Register for keydown events to capture the `Enter` key.\n * Need to do it this way instead of using `addCommand`, because that would eat the Enter key in all situations, which is not what we want.\n * Can't do it in `onDidChangeModelContent` either, since we want to stop the Enter action from modifying the command.\n */\n this.commandEditor.onKeyDown(keyEvent => {\n const { commandEditor, commandHistoryIndex } = this;\n const position = commandEditor?.getPosition();\n assertNotNull(position);\n const { lineNumber } = position;\n const model = commandEditor?.getModel();\n if (\n keyEvent.code === 'ArrowUp' &&\n !this.isSuggestionMenuPopulated() &&\n lineNumber === 1\n ) {\n if (commandHistoryIndex != null) {\n this.loadCommand(commandHistoryIndex + 1);\n } else {\n this.loadCommand(0);\n }\n\n this.focusStart();\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n return;\n }\n\n if (\n keyEvent.code === 'ArrowDown' &&\n !this.isSuggestionMenuPopulated() &&\n lineNumber === model?.getLineCount()\n ) {\n if (commandHistoryIndex != null && commandHistoryIndex > 0) {\n this.loadCommand(commandHistoryIndex - 1);\n } else {\n this.loadCommand(null);\n }\n\n this.focusEnd();\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n return;\n }\n\n if (!keyEvent.altKey && !keyEvent.shiftKey && !keyEvent.metaKey) {\n if (keyEvent.keyCode === monaco.KeyCode.Enter) {\n if (!this.isSuggestionMenuPopulated()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n const command = this.commandEditor?.getValue().trim();\n if (command !== undefined) {\n this.processCommand(command);\n this.commandEditor?.setValue('');\n }\n }\n } else if (keyEvent.keyCode === monaco.KeyCode.Tab) {\n if (!this.isSuggestionMenuActive()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n this.commandEditor?.trigger(\n 'Tab key trigger suggestions',\n 'editor.action.triggerSuggest',\n {}\n );\n } else if (!this.isSuggestionMenuPopulated()) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n }\n }\n }\n });\n\n // Override the Ctrl+F functionality so that the find window doesn't appear\n this.commandEditor.addCommand(\n monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF, // eslint-disable-line no-bitwise\n () => undefined\n );\n\n MonacoUtils.removeConflictingKeybindings(this.commandEditor);\n\n MonacoUtils.registerPasteHandler(this.commandEditor);\n\n this.commandEditor.focus();\n\n this.updateDimensions();\n\n this.setState({ model: this.commandEditor.getModel() });\n }\n\n destroyCommandEditor(): void {\n const { session } = this.props;\n if (this.commandEditor) {\n MonacoUtils.closeDocument(this.commandEditor, session);\n this.commandEditor.dispose();\n this.commandEditor = undefined;\n }\n }\n\n handleWindowResize(): void {\n this.updateDimensions();\n }\n\n isSuggestionMenuActive(): boolean {\n if (!this.commandSuggestionContainer) {\n this.commandSuggestionContainer = this.commandEditor\n ?.getDomNode()\n ?.querySelector('.suggest-widget');\n }\n\n return (\n (this.commandSuggestionContainer &&\n this.commandSuggestionContainer.classList.contains('visible')) ??\n false\n );\n }\n\n isSuggestionMenuPopulated(): boolean {\n return (\n this.isSuggestionMenuActive() &&\n (this.commandSuggestionContainer?.querySelector('.monaco-list-rows')\n ?.childElementCount ?? 0) > 0\n );\n }\n\n focus(): void {\n this.commandEditor?.focus();\n }\n\n focusStart(): void {\n const model = this.commandEditor?.getModel();\n assertNotNull(model);\n const column = model.getLineLength(1) + 1; // Length of 1st line\n const firstCharTop = this.commandEditor?.getTopForPosition(1, column);\n assertNotNull(firstCharTop);\n this.commandEditor?.setPosition({ lineNumber: 1, column });\n this.commandEditor?.setScrollTop(firstCharTop);\n this.commandEditor?.focus();\n }\n\n focusEnd(): void {\n const model = this.commandEditor?.getModel();\n assertNotNull(model);\n const lastLine = model.getLineCount();\n const column = model.getLineLength(lastLine) + 1;\n const lastCharTop = this.commandEditor?.getTopForPosition(lastLine, column);\n assertNotNull(lastCharTop);\n this.commandEditor?.setPosition({ lineNumber: lastLine, column });\n this.commandEditor?.setScrollTop(lastCharTop);\n this.commandEditor?.focus();\n }\n\n clear(): void {\n this.commandEditor?.focus();\n this.commandEditor?.getModel()?.setValue('');\n this.commandHistoryIndex = null;\n }\n\n layoutEditor(): void {\n if (this.commandEditor) {\n this.commandEditor.layout();\n }\n }\n\n /**\n * Loads the given command from history\n * If edits have been made to the command since last run command, loads the modified version\n * @param index The index to load. Null to load command started in the editor and not in the history\n */\n loadCommand(index: number | null): void {\n if (index !== null && index >= this.history.length) {\n return;\n }\n\n const modifiedValue = this.modifiedCommands.get(index);\n const historyValue =\n index === null ? '' : this.history[this.history.length - index - 1];\n\n this.commandHistoryIndex = index;\n this.commandEditor?.getModel()?.setValue(modifiedValue ?? historyValue);\n\n if (index !== null && index > this.history.length - BUFFER_SIZE) {\n this.loadMoreHistory();\n }\n }\n\n async loadMoreHistory(): Promise<void> {\n try {\n if (this.loadingPromise != null || this.bufferIndex == null) {\n return;\n }\n\n const { commandHistoryStorage, language, scope } = this.props;\n\n this.loadingPromise = PromiseUtils.makeCancelable(\n commandHistoryStorage.getTable(language, scope ?? '', this.timestamp),\n resolved => resolved.close()\n );\n\n const table = await this.loadingPromise;\n table.setReversed(true);\n table.setViewport({\n top: this.bufferIndex,\n bottom: this.bufferIndex + BUFFER_SIZE - 1,\n });\n\n this.loadingPromise = PromiseUtils.makeCancelable(\n table.getViewportData(),\n () => table.close()\n );\n const viewportData = await this.loadingPromise;\n this.bufferIndex += BUFFER_SIZE;\n if (this.bufferIndex >= table.size) {\n // We've loaded the full history, no need to load any more\n this.bufferIndex = null;\n }\n this.history = [\n ...viewportData.items\n .filter(\n ({ name }, pos, arr) => pos === 0 || name !== arr[pos - 1].name\n )\n .map(({ name }) => name)\n .reverse(),\n ...this.history,\n ];\n\n this.loadingPromise = undefined;\n\n table.close();\n } catch (err) {\n this.loadingPromise = undefined;\n if (PromiseUtils.isCanceled(err)) {\n log.debug2('Promise canceled, not loading history');\n return;\n }\n\n log.error('Error fetching history', err);\n }\n }\n\n processCommand(command: string): void {\n this.commandHistoryIndex = null;\n this.modifiedCommands.clear();\n\n assertNotNull(command);\n if (\n command !== '' &&\n (this.history.length === 0 ||\n command !== this.history[this.history.length - 1])\n ) {\n this.history.push(command);\n }\n this.updateDimensions();\n\n const { onSubmit } = this.props;\n onSubmit(command);\n }\n\n updateDimensions(): void {\n if (!this.commandEditor) {\n return;\n }\n\n const { maxHeight } = this.props;\n assertNotNull(maxHeight);\n const contentHeight = this.commandEditor.getContentHeight();\n const commandEditorHeight = Math.max(\n Math.min(contentHeight, maxHeight),\n MIN_INPUT_HEIGHT\n );\n\n // Only show the overview ruler (markings overlapping sroll bar area) if the scrollbar will show\n const shouldScroll = contentHeight > commandEditorHeight;\n\n const options = { overviewRulerLanes: shouldScroll ? undefined : 0 };\n\n this.setState(\n {\n commandEditorHeight,\n },\n () => {\n this.commandEditor?.updateOptions(options);\n this.commandEditor?.layout();\n }\n );\n }\n\n render(): ReactElement {\n const { disabled, language, session } = this.props;\n const { commandEditorHeight, isFocused, model } = this.state;\n return (\n <div className={classNames('console-input-wrapper', { disabled })}>\n <div\n className={classNames('console-input-inner-wrapper', {\n focus: isFocused,\n })}\n >\n <div\n className={ConsoleInput.INPUT_CLASS_NAME}\n ref={this.commandContainer}\n style={{ height: commandEditorHeight }}\n />\n {model && (\n <MonacoProviders\n model={model}\n language={language}\n session={session}\n />\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default ConsoleInput;\n"],"mappings":";;;;;AAAA,OAAOA,KAAK,IAAIC,aAAa,QAAiC,OAAO;AACrE,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SACEC,aAAa,EAEbC,YAAY,QACP,kBAAkB;AAAC,SAQjBC,eAAe,EAAEC,WAAW,EAAEC,WAAW;AAAA;AAGlD,IAAMC,GAAG,GAAGN,GAAG,CAACO,MAAM,CAAC,cAAc,CAAC;AAEtC,IAAMC,WAAW,GAAGC,QAAQ,CAACL,WAAW,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;AAC5D,IAAMM,WAAW,GAAG,CAAC;AACrB,IAAMC,cAAc,GAAG,CAAC;AACxB,IAAMC,gBAAgB,GAAGJ,WAAW,GAAGE,WAAW,GAAGC,cAAc;AACnE,IAAME,WAAW,GAAG,GAAG;AAkBvB;AACA;AACA;AACA,OAAO,MAAMC,YAAY,SAASjB,aAAa,CAG7C;EASAkB,WAAW,CAACC,KAAwB,EAAE;IACpC,KAAK,CAACA,KAAK,CAAC;IAAC;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAEb,IAAI,CAACC,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACC,IAAI,CAAC,IAAI,CAAC;IAE5D,IAAI,CAACC,gBAAgB,gBAAGvB,KAAK,CAACwB,SAAS,EAAE;IACzC,IAAI,CAACC,mBAAmB,GAAG,IAAI;IAC/B,IAAI,CAACC,SAAS,GAAGC,IAAI,CAACC,GAAG,EAAE;IAC3B,IAAI,CAACC,WAAW,GAAG,CAAC;IACpB,IAAI,CAACC,OAAO,GAAG,EAAE;IACjB;IACA,IAAI,CAACC,gBAAgB,GAAG,IAAIC,GAAG,EAAE;IAEjC,IAAI,CAACC,KAAK,GAAG;MACXC,mBAAmB,EAAEtB,WAAW;MAChCuB,SAAS,EAAE,KAAK;MAChBC,KAAK,EAAE;IACT,CAAC;EACH;EAEAC,iBAAiB,GAAS;IACxB,IAAI,CAACC,iBAAiB,EAAE;IAExBC,MAAM,CAACC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAACnB,kBAAkB,CAAC;IAE1D,IAAI,CAACoB,eAAe,EAAE;EACxB;EAEAC,kBAAkB,GAAS;IACzB,IAAI,CAACC,YAAY,EAAE;EACrB;EAEAC,oBAAoB,GAAS;IAC3BL,MAAM,CAACM,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAACxB,kBAAkB,CAAC;IAE7D,IAAI,IAAI,CAACyB,cAAc,IAAI,IAAI,EAAE;MAC/B,IAAI,CAACA,cAAc,CAACC,MAAM,EAAE;IAC9B;IAEA,IAAI,CAACC,oBAAoB,EAAE;EAC7B;EAyBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,cAAc,CAACC,IAAY,EAAuC;IAAA,IAArCC,KAAK,uEAAG,IAAI;IAAA,IAAEC,OAAO,uEAAG,KAAK;IACxD,IAAI,CAACF,IAAI,EAAE;MACT;IACF;IAEAxC,GAAG,CAAC2C,KAAK,CAAC,oBAAoB,EAAEH,IAAI,CAAC;;IAErC;IACA,IAAI,CAACE,OAAO,EAAE;MAAA;MACZ;MACA;MACA,IAAI,CAAC3B,mBAAmB,GAAG,IAAI;MAC/B,2BAAI,CAAC6B,aAAa,wDAAlB,oBAAoBC,QAAQ,CAACL,IAAI,CAAC;IACpC;IAEA,IAAIC,KAAK,EAAE;MACT,IAAI,CAACK,QAAQ,EAAE;IACjB;IAEA,IAAI,CAACC,gBAAgB,EAAE;IAEvB,IAAIL,OAAO,EAAE;MACX,IAAI,CAACM,cAAc,CAACR,IAAI,CAAC;IAC3B;EACF;EAEAZ,iBAAiB,GAAS;IACxB,IAAM;MAAEqB,QAAQ;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAACxC,KAAK;IACxC,IAAMyC,eAAe,GAAG;MACtBC,0BAA0B,EAAE,KAAK;MACjCC,WAAW,EAAE,OAAO;MACpBC,oBAAoB,EAAE,IAAI;MAC1BC,OAAO,EAAE,KAAK;MACdC,UAAU,EAAE,WAAW;MACvBC,WAAW,EAAE,KAAK;MAClBR,QAAQ;MACRS,UAAU,EAAExD,WAAW;MACvByD,oBAAoB,EAAE,CAAC;MACvBC,WAAW,EAAE,KAAK;MAClBC,OAAO,EAAE;QAAEC,OAAO,EAAE;MAAM,CAAC;MAC3BC,mBAAmB,EAAE,MAAM;MAC3BC,oBAAoB,EAAE,KAAK;MAC3BC,SAAS,EAAE;QACTC,SAAS,EAAE,CAAC;QACZC,UAAU,EAAE,QAAQ;QACpBC,uBAAuB,EAAE;MAC3B,CAAC;MACDC,OAAO,EAAE;QACPC,GAAG,EAAElE,WAAW;QAChBmE,MAAM,EAAElE;MACV,CAAC;MACDmE,aAAa,EAAE,IAAI;MACnBC,KAAK,EAAE,EAAE;MACTC,QAAQ,EAAE;IACZ,CAAU;IAEV,IAAMC,OAAO,GAAG,IAAI,CAAC9D,gBAAgB,CAAC+D,OAAO;IAC7CjF,aAAa,CAACgF,OAAO,CAAC;IACtB,IAAI,CAAC/B,aAAa,GAAGnD,MAAM,CAACoF,MAAM,CAACC,MAAM,CAACH,OAAO,EAAExB,eAAe,CAAC;IAEnEpD,WAAW,CAACgF,MAAM,CAAC,IAAI,CAACnC,aAAa,CAAC;IACtC7C,WAAW,CAACiF,YAAY,CAAC,IAAI,CAACpC,aAAa,EAAEM,OAAO,CAAC;IAErD,IAAI,CAACN,aAAa,CAACqC,uBAAuB,CAAC,MAAM;MAAA;MAC/C,IAAMR,KAAK,2BAAG,IAAI,CAAC7B,aAAa,yDAAlB,qBAAoBsC,QAAQ,EAAE;MAC5C,IAAI,CAAC7D,gBAAgB,CAAC8D,GAAG,CAAC,IAAI,CAACpE,mBAAmB,EAAE0D,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,IAAI,CAAC;MAClE,IAAI,CAAC1B,gBAAgB,EAAE;IACzB,CAAC,CAAC;IAEF,IAAI,CAACH,aAAa,CAACwC,oBAAoB,CAAC,MAAM;MAC5C,IAAI,CAACC,QAAQ,CAAC;QAAE5D,SAAS,EAAE;MAAK,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,IAAI,CAACmB,aAAa,CAAC0C,mBAAmB,CAAC,MAAM;MAC3C,IAAI,CAACD,QAAQ,CAAC;QAAE5D,SAAS,EAAE;MAAM,CAAC,CAAC;IACrC,CAAC,CAAC;;IAEF;AACJ;AACA;AACA;AACA;IACI,IAAI,CAACmB,aAAa,CAAC2C,SAAS,CAACC,QAAQ,IAAI;MACvC,IAAM;QAAE5C,aAAa;QAAE7B;MAAoB,CAAC,GAAG,IAAI;MACnD,IAAM0E,QAAQ,GAAG7C,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAE8C,WAAW,EAAE;MAC7C/F,aAAa,CAAC8F,QAAQ,CAAC;MACvB,IAAM;QAAEE;MAAW,CAAC,GAAGF,QAAQ;MAC/B,IAAM/D,KAAK,GAAGkB,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEgD,QAAQ,EAAE;MACvC,IACEJ,QAAQ,CAACK,IAAI,KAAK,SAAS,IAC3B,CAAC,IAAI,CAACC,yBAAyB,EAAE,IACjCH,UAAU,KAAK,CAAC,EAChB;QACA,IAAI5E,mBAAmB,IAAI,IAAI,EAAE;UAC/B,IAAI,CAACgF,WAAW,CAAChF,mBAAmB,GAAG,CAAC,CAAC;QAC3C,CAAC,MAAM;UACL,IAAI,CAACgF,WAAW,CAAC,CAAC,CAAC;QACrB;QAEA,IAAI,CAACC,UAAU,EAAE;QACjBR,QAAQ,CAACS,eAAe,EAAE;QAC1BT,QAAQ,CAACU,cAAc,EAAE;QAEzB;MACF;MAEA,IACEV,QAAQ,CAACK,IAAI,KAAK,WAAW,IAC7B,CAAC,IAAI,CAACC,yBAAyB,EAAE,IACjCH,UAAU,MAAKjE,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEyE,YAAY,EAAE,GACpC;QACA,IAAIpF,mBAAmB,IAAI,IAAI,IAAIA,mBAAmB,GAAG,CAAC,EAAE;UAC1D,IAAI,CAACgF,WAAW,CAAChF,mBAAmB,GAAG,CAAC,CAAC;QAC3C,CAAC,MAAM;UACL,IAAI,CAACgF,WAAW,CAAC,IAAI,CAAC;QACxB;QAEA,IAAI,CAACjD,QAAQ,EAAE;QACf0C,QAAQ,CAACS,eAAe,EAAE;QAC1BT,QAAQ,CAACU,cAAc,EAAE;QAEzB;MACF;MAEA,IAAI,CAACV,QAAQ,CAACY,MAAM,IAAI,CAACZ,QAAQ,CAACa,QAAQ,IAAI,CAACb,QAAQ,CAACc,OAAO,EAAE;QAC/D,IAAId,QAAQ,CAACe,OAAO,KAAK9G,MAAM,CAAC+G,OAAO,CAACC,KAAK,EAAE;UAC7C,IAAI,CAAC,IAAI,CAACX,yBAAyB,EAAE,EAAE;YAAA;YACrCN,QAAQ,CAACS,eAAe,EAAE;YAC1BT,QAAQ,CAACU,cAAc,EAAE;YAEzB,IAAMQ,QAAO,2BAAG,IAAI,CAAC9D,aAAa,yDAAlB,qBAAoBsC,QAAQ,EAAE,CAACyB,IAAI,EAAE;YACrD,IAAID,QAAO,KAAKE,SAAS,EAAE;cAAA;cACzB,IAAI,CAAC5D,cAAc,CAAC0D,QAAO,CAAC;cAC5B,4BAAI,CAAC9D,aAAa,yDAAlB,qBAAoBC,QAAQ,CAAC,EAAE,CAAC;YAClC;UACF;QACF,CAAC,MAAM,IAAI2C,QAAQ,CAACe,OAAO,KAAK9G,MAAM,CAAC+G,OAAO,CAACK,GAAG,EAAE;UAClD,IAAI,CAAC,IAAI,CAACC,sBAAsB,EAAE,EAAE;YAAA;YAClCtB,QAAQ,CAACS,eAAe,EAAE;YAC1BT,QAAQ,CAACU,cAAc,EAAE;YAEzB,4BAAI,CAACtD,aAAa,yDAAlB,qBAAoBmE,OAAO,CACzB,6BAA6B,EAC7B,8BAA8B,EAC9B,CAAC,CAAC,CACH;UACH,CAAC,MAAM,IAAI,CAAC,IAAI,CAACjB,yBAAyB,EAAE,EAAE;YAC5CN,QAAQ,CAACS,eAAe,EAAE;YAC1BT,QAAQ,CAACU,cAAc,EAAE;UAC3B;QACF;MACF;IACF,CAAC,CAAC;;IAEF;IACA,IAAI,CAACtD,aAAa,CAACoE,UAAU,CAC3BvH,MAAM,CAACwH,MAAM,CAACC,OAAO,GAAGzH,MAAM,CAAC+G,OAAO,CAACW,IAAI;IAAE;IAC7C,MAAMP,SAAS,CAChB;IAED7G,WAAW,CAACqH,4BAA4B,CAAC,IAAI,CAACxE,aAAa,CAAC;IAE5D7C,WAAW,CAACsH,oBAAoB,CAAC,IAAI,CAACzE,aAAa,CAAC;IAEpD,IAAI,CAACA,aAAa,CAACH,KAAK,EAAE;IAE1B,IAAI,CAACM,gBAAgB,EAAE;IAEvB,IAAI,CAACsC,QAAQ,CAAC;MAAE3D,KAAK,EAAE,IAAI,CAACkB,aAAa,CAACgD,QAAQ;IAAG,CAAC,CAAC;EACzD;EAEAtD,oBAAoB,GAAS;IAC3B,IAAM;MAAEY;IAAQ,CAAC,GAAG,IAAI,CAACxC,KAAK;IAC9B,IAAI,IAAI,CAACkC,aAAa,EAAE;MACtB7C,WAAW,CAACuH,aAAa,CAAC,IAAI,CAAC1E,aAAa,EAAEM,OAAO,CAAC;MACtD,IAAI,CAACN,aAAa,CAAC2E,OAAO,EAAE;MAC5B,IAAI,CAAC3E,aAAa,GAAGgE,SAAS;IAChC;EACF;EAEAjG,kBAAkB,GAAS;IACzB,IAAI,CAACoC,gBAAgB,EAAE;EACzB;EAEA+D,sBAAsB,GAAY;IAAA;IAChC,IAAI,CAAC,IAAI,CAACU,0BAA0B,EAAE;MAAA;MACpC,IAAI,CAACA,0BAA0B,2BAAG,IAAI,CAAC5E,aAAa,kFAAlB,qBAC9B6E,UAAU,EAAE,0DADkB,sBAE9BC,aAAa,CAAC,iBAAiB,CAAC;IACtC;IAEA,eACG,IAAI,CAACF,0BAA0B,IAC9B,IAAI,CAACA,0BAA0B,CAACG,SAAS,CAACC,QAAQ,CAAC,SAAS,CAAC,uCAC/D,KAAK;EAET;EAEA9B,yBAAyB,GAAY;IAAA;IACnC,OACE,IAAI,CAACgB,sBAAsB,EAAE,IAC7B,oDAAC,IAAI,CAACU,0BAA0B,qFAA/B,uBAAiCE,aAAa,CAAC,mBAAmB,CAAC,2DAAnE,uBACGG,iBAAiB,yEAAI,CAAC,IAAI,CAAC;EAEnC;EAEApF,KAAK,GAAS;IAAA;IACZ,4BAAI,CAACG,aAAa,yDAAlB,qBAAoBH,KAAK,EAAE;EAC7B;EAEAuD,UAAU,GAAS;IAAA;IACjB,IAAMtE,KAAK,2BAAG,IAAI,CAACkB,aAAa,yDAAlB,qBAAoBgD,QAAQ,EAAE;IAC5CjG,aAAa,CAAC+B,KAAK,CAAC;IACpB,IAAMoG,MAAM,GAAGpG,KAAK,CAACqG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAMC,YAAY,2BAAG,IAAI,CAACpF,aAAa,yDAAlB,qBAAoBqF,iBAAiB,CAAC,CAAC,EAAEH,MAAM,CAAC;IACrEnI,aAAa,CAACqI,YAAY,CAAC;IAC3B,6BAAI,CAACpF,aAAa,0DAAlB,sBAAoBsF,WAAW,CAAC;MAAEvC,UAAU,EAAE,CAAC;MAAEmC;IAAO,CAAC,CAAC;IAC1D,6BAAI,CAAClF,aAAa,0DAAlB,sBAAoBuF,YAAY,CAACH,YAAY,CAAC;IAC9C,6BAAI,CAACpF,aAAa,0DAAlB,sBAAoBH,KAAK,EAAE;EAC7B;EAEAK,QAAQ,GAAS;IAAA;IACf,IAAMpB,KAAK,4BAAG,IAAI,CAACkB,aAAa,0DAAlB,sBAAoBgD,QAAQ,EAAE;IAC5CjG,aAAa,CAAC+B,KAAK,CAAC;IACpB,IAAM0G,QAAQ,GAAG1G,KAAK,CAACyE,YAAY,EAAE;IACrC,IAAM2B,MAAM,GAAGpG,KAAK,CAACqG,aAAa,CAACK,QAAQ,CAAC,GAAG,CAAC;IAChD,IAAMC,WAAW,4BAAG,IAAI,CAACzF,aAAa,0DAAlB,sBAAoBqF,iBAAiB,CAACG,QAAQ,EAAEN,MAAM,CAAC;IAC3EnI,aAAa,CAAC0I,WAAW,CAAC;IAC1B,6BAAI,CAACzF,aAAa,0DAAlB,sBAAoBsF,WAAW,CAAC;MAAEvC,UAAU,EAAEyC,QAAQ;MAAEN;IAAO,CAAC,CAAC;IACjE,6BAAI,CAAClF,aAAa,0DAAlB,sBAAoBuF,YAAY,CAACE,WAAW,CAAC;IAC7C,6BAAI,CAACzF,aAAa,0DAAlB,sBAAoBH,KAAK,EAAE;EAC7B;EAEA6F,KAAK,GAAS;IAAA;IACZ,6BAAI,CAAC1F,aAAa,0DAAlB,sBAAoBH,KAAK,EAAE;IAC3B,6BAAI,CAACG,aAAa,mFAAlB,sBAAoBgD,QAAQ,EAAE,0DAA9B,sBAAgC/C,QAAQ,CAAC,EAAE,CAAC;IAC5C,IAAI,CAAC9B,mBAAmB,GAAG,IAAI;EACjC;EAEAkB,YAAY,GAAS;IACnB,IAAI,IAAI,CAACW,aAAa,EAAE;MACtB,IAAI,CAACA,aAAa,CAAC2F,MAAM,EAAE;IAC7B;EACF;;EAEA;AACF;AACA;AACA;AACA;EACExC,WAAW,CAACyC,KAAoB,EAAQ;IAAA;IACtC,IAAIA,KAAK,KAAK,IAAI,IAAIA,KAAK,IAAI,IAAI,CAACpH,OAAO,CAACqH,MAAM,EAAE;MAClD;IACF;IAEA,IAAMC,aAAa,GAAG,IAAI,CAACrH,gBAAgB,CAACsH,GAAG,CAACH,KAAK,CAAC;IACtD,IAAMI,YAAY,GAChBJ,KAAK,KAAK,IAAI,GAAG,EAAE,GAAG,IAAI,CAACpH,OAAO,CAAC,IAAI,CAACA,OAAO,CAACqH,MAAM,GAAGD,KAAK,GAAG,CAAC,CAAC;IAErE,IAAI,CAACzH,mBAAmB,GAAGyH,KAAK;IAChC,6BAAI,CAAC5F,aAAa,mFAAlB,sBAAoBgD,QAAQ,EAAE,0DAA9B,sBAAgC/C,QAAQ,CAAC6F,aAAa,aAAbA,aAAa,cAAbA,aAAa,GAAIE,YAAY,CAAC;IAEvE,IAAIJ,KAAK,KAAK,IAAI,IAAIA,KAAK,GAAG,IAAI,CAACpH,OAAO,CAACqH,MAAM,GAAGlI,WAAW,EAAE;MAC/D,IAAI,CAACwB,eAAe,EAAE;IACxB;EACF;EAEMA,eAAe,GAAkB;IAAA;IAAA;MACrC,IAAI;QACF,IAAI,KAAI,CAACK,cAAc,IAAI,IAAI,IAAI,KAAI,CAACjB,WAAW,IAAI,IAAI,EAAE;UAC3D;QACF;QAEA,IAAM;UAAE0H,qBAAqB;UAAE5F,QAAQ;UAAE6F;QAAM,CAAC,GAAG,KAAI,CAACpI,KAAK;QAE7D,KAAI,CAAC0B,cAAc,GAAGxC,YAAY,CAACmJ,cAAc,CAC/CF,qBAAqB,CAACG,QAAQ,CAAC/F,QAAQ,EAAE6F,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,EAAE,EAAE,KAAI,CAAC9H,SAAS,CAAC,EACrEiI,QAAQ,IAAIA,QAAQ,CAACC,KAAK,EAAE,CAC7B;QAED,IAAMC,KAAK,SAAS,KAAI,CAAC/G,cAAc;QACvC+G,KAAK,CAACC,WAAW,CAAC,IAAI,CAAC;QACvBD,KAAK,CAACE,WAAW,CAAC;UAChB/E,GAAG,EAAE,KAAI,CAACnD,WAAW;UACrBoD,MAAM,EAAE,KAAI,CAACpD,WAAW,GAAGZ,WAAW,GAAG;QAC3C,CAAC,CAAC;QAEF,KAAI,CAAC6B,cAAc,GAAGxC,YAAY,CAACmJ,cAAc,CAC/CI,KAAK,CAACG,eAAe,EAAE,EACvB,MAAMH,KAAK,CAACD,KAAK,EAAE,CACpB;QACD,IAAMK,YAAY,SAAS,KAAI,CAACnH,cAAc;QAC9C,KAAI,CAACjB,WAAW,IAAIZ,WAAW;QAC/B,IAAI,KAAI,CAACY,WAAW,IAAIgI,KAAK,CAACK,IAAI,EAAE;UAClC;UACA,KAAI,CAACrI,WAAW,GAAG,IAAI;QACzB;QACA,KAAI,CAACC,OAAO,GAAG,CACb,GAAGmI,YAAY,CAACE,KAAK,CAClBC,MAAM,CACL,QAAWC,GAAG,EAAEC,GAAG;UAAA,IAAlB;YAAEC;UAAK,CAAC;UAAA,OAAeF,GAAG,KAAK,CAAC,IAAIE,IAAI,KAAKD,GAAG,CAACD,GAAG,GAAG,CAAC,CAAC,CAACE,IAAI;QAAA,EAChE,CACAC,GAAG,CAAC;UAAA,IAAC;YAAED;UAAK,CAAC;UAAA,OAAKA,IAAI;QAAA,EAAC,CACvBE,OAAO,EAAE,EACZ,GAAG,KAAI,CAAC3I,OAAO,CAChB;QAED,KAAI,CAACgB,cAAc,GAAGwE,SAAS;QAE/BuC,KAAK,CAACD,KAAK,EAAE;MACf,CAAC,CAAC,OAAOc,GAAG,EAAE;QACZ,KAAI,CAAC5H,cAAc,GAAGwE,SAAS;QAC/B,IAAIhH,YAAY,CAACqK,UAAU,CAACD,GAAG,CAAC,EAAE;UAChChK,GAAG,CAACkK,MAAM,CAAC,uCAAuC,CAAC;UACnD;QACF;QAEAlK,GAAG,CAACmK,KAAK,CAAC,wBAAwB,EAAEH,GAAG,CAAC;MAC1C;IAAC;EACH;EAEAhH,cAAc,CAAC0D,OAAe,EAAQ;IACpC,IAAI,CAAC3F,mBAAmB,GAAG,IAAI;IAC/B,IAAI,CAACM,gBAAgB,CAACiH,KAAK,EAAE;IAE7B3I,aAAa,CAAC+G,OAAO,CAAC;IACtB,IACEA,OAAO,KAAK,EAAE,KACb,IAAI,CAACtF,OAAO,CAACqH,MAAM,KAAK,CAAC,IACxB/B,OAAO,KAAK,IAAI,CAACtF,OAAO,CAAC,IAAI,CAACA,OAAO,CAACqH,MAAM,GAAG,CAAC,CAAC,CAAC,EACpD;MACA,IAAI,CAACrH,OAAO,CAACgJ,IAAI,CAAC1D,OAAO,CAAC;IAC5B;IACA,IAAI,CAAC3D,gBAAgB,EAAE;IAEvB,IAAM;MAAEsH;IAAS,CAAC,GAAG,IAAI,CAAC3J,KAAK;IAC/B2J,QAAQ,CAAC3D,OAAO,CAAC;EACnB;EAEA3D,gBAAgB,GAAS;IACvB,IAAI,CAAC,IAAI,CAACH,aAAa,EAAE;MACvB;IACF;IAEA,IAAM;MAAE0H;IAAU,CAAC,GAAG,IAAI,CAAC5J,KAAK;IAChCf,aAAa,CAAC2K,SAAS,CAAC;IACxB,IAAMC,aAAa,GAAG,IAAI,CAAC3H,aAAa,CAAC4H,gBAAgB,EAAE;IAC3D,IAAMhJ,mBAAmB,GAAGiJ,IAAI,CAACC,GAAG,CAClCD,IAAI,CAACE,GAAG,CAACJ,aAAa,EAAED,SAAS,CAAC,EAClChK,gBAAgB,CACjB;;IAED;IACA,IAAMsK,YAAY,GAAGL,aAAa,GAAG/I,mBAAmB;IAExD,IAAMqJ,OAAO,GAAG;MAAEC,kBAAkB,EAAEF,YAAY,GAAGhE,SAAS,GAAG;IAAE,CAAC;IAEpE,IAAI,CAACvB,QAAQ,CACX;MACE7D;IACF,CAAC,EACD,MAAM;MAAA;MACJ,6BAAI,CAACoB,aAAa,0DAAlB,sBAAoBmI,aAAa,CAACF,OAAO,CAAC;MAC1C,6BAAI,CAACjI,aAAa,0DAAlB,sBAAoB2F,MAAM,EAAE;IAC9B,CAAC,CACF;EACH;EAEAyC,MAAM,GAAiB;IACrB,IAAM;MAAEC,QAAQ;MAAEhI,QAAQ;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAACxC,KAAK;IAClD,IAAM;MAAEc,mBAAmB;MAAEC,SAAS;MAAEC;IAAM,CAAC,GAAG,IAAI,CAACH,KAAK;IAC5D,oBACE;MAAK,SAAS,EAAE/B,UAAU,CAAC,uBAAuB,EAAE;QAAEyL;MAAS,CAAC;IAAE,gBAChE;MACE,SAAS,EAAEzL,UAAU,CAAC,6BAA6B,EAAE;QACnDiD,KAAK,EAAEhB;MACT,CAAC;IAAE,gBAEH;MACE,SAAS,EAAEjB,YAAY,CAAC0K,gBAAiB;MACzC,GAAG,EAAE,IAAI,CAACrK,gBAAiB;MAC3B,KAAK,EAAE;QAAEsK,MAAM,EAAE3J;MAAoB;IAAE,EACvC,EACDE,KAAK,iBACJ,oBAAC,eAAe;MACd,KAAK,EAAEA,KAAM;MACb,QAAQ,EAAEuB,QAAS;MACnB,OAAO,EAAEC;IAAQ,EAEpB,CACG,CACF;EAEV;AACF;AAAC,gBA/dY1C,YAAY,kBAID;EACpB8J,SAAS,EAAEpK,WAAW,GAAG,EAAE;EAC3B4I,KAAK,EAAE,IAAI;EACXmC,QAAQ,EAAE;AACZ,CAAC;AAAA,gBARUzK,YAAY,sBAUG,eAAe;AAud3C,eAAeA,YAAY"}
@@ -1,5 +1,5 @@
1
- import { QueryConnectable } from '@deephaven/jsapi-shim';
2
1
  import { ReactElement } from 'react';
2
+ import { QueryConnectable } from '@deephaven/jsapi-shim';
3
3
  import './HeapUsage.scss';
4
4
  interface HeapUsageProps {
5
5
  connection: QueryConnectable;
@@ -1 +1 @@
1
- {"version":3,"file":"HeapUsage.d.ts","sourceRoot":"","sources":["../src/HeapUsage.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAc,EAAuB,YAAY,EAAU,MAAM,OAAO,CAAC;AAEzE,OAAO,kBAAkB,CAAC;AAG1B,UAAU,cAAc;IACtB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,iBAAS,SAAS,CAAC,EACjB,UAAU,EACV,qBAAqB,EACrB,mBAAmB,EACnB,YAAmB,EACnB,eAAe,GAChB,EAAE,cAAc,GAAG,YAAY,CAgL/B;AAED,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"HeapUsage.d.ts","sourceRoot":"","sources":["../src/HeapUsage.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAuB,YAAY,EAAU,MAAM,OAAO,CAAC;AAGzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,kBAAkB,CAAC;AAI1B,UAAU,cAAc;IACtB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,iBAAS,SAAS,CAAC,EACjB,UAAU,EACV,qBAAqB,EACrB,mBAAmB,EACnB,YAAmB,EACnB,eAAe,GAChB,EAAE,cAAc,GAAG,YAAY,CAoL/B;AAED,eAAe,SAAS,CAAC"}
package/dist/HeapUsage.js CHANGED
@@ -1,10 +1,12 @@
1
1
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
2
2
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
3
- import { Tooltip } from '@deephaven/components';
4
3
  import React, { useEffect, useState, useRef } from 'react';
4
+ import classNames from 'classnames';
5
+ import { Tooltip } from '@deephaven/components';
5
6
  import { Plot, ChartTheme } from '@deephaven/chart';
7
+ import Log from '@deephaven/log';
6
8
  import "./HeapUsage.css";
7
- import classNames from 'classnames';
9
+ var log = Log.module('HeapUsage');
8
10
  function HeapUsage(_ref) {
9
11
  var _timestamps2;
10
12
  var {
@@ -27,26 +29,30 @@ function HeapUsage(_ref) {
27
29
  useEffect(function setUsageUpdateInterval() {
28
30
  var fetchAndUpdate = /*#__PURE__*/function () {
29
31
  var _ref2 = _asyncToGenerator(function* () {
30
- var newUsage = yield connection.getWorkerHeapInfo();
31
- setMemoryUsage(newUsage);
32
- if (bgMonitoring || isOpen) {
33
- var currentUsage = (newUsage.totalHeapSize - newUsage.freeMemory) / newUsage.maximumHeapSize;
34
- var currentTime = Date.now();
35
- var {
36
- timestamps: _timestamps,
37
- usages: _usages
38
- } = historyUsage.current;
39
- while (_timestamps.length !== 0 && currentTime - _timestamps[0] > monitorDuration * 1.5) {
40
- _timestamps.shift();
41
- _usages.shift();
32
+ try {
33
+ var newUsage = yield connection.getWorkerHeapInfo();
34
+ setMemoryUsage(newUsage);
35
+ if (bgMonitoring || isOpen) {
36
+ var currentUsage = (newUsage.totalHeapSize - newUsage.freeMemory) / newUsage.maximumHeapSize;
37
+ var currentTime = Date.now();
38
+ var {
39
+ timestamps: _timestamps,
40
+ usages: _usages
41
+ } = historyUsage.current;
42
+ while (_timestamps.length !== 0 && currentTime - _timestamps[0] > monitorDuration * 1.5) {
43
+ _timestamps.shift();
44
+ _usages.shift();
45
+ }
46
+ _timestamps.push(currentTime);
47
+ _usages.push(currentUsage);
48
+ } else {
49
+ historyUsage.current = {
50
+ timestamps: [],
51
+ usages: []
52
+ };
42
53
  }
43
- _timestamps.push(currentTime);
44
- _usages.push(currentUsage);
45
- } else {
46
- historyUsage.current = {
47
- timestamps: [],
48
- usages: []
49
- };
54
+ } catch (e) {
55
+ log.warn('Unable to get heap usage', e);
50
56
  }
51
57
  });
52
58
  return function fetchAndUpdate() {
@@ -1 +1 @@
1
- {"version":3,"file":"HeapUsage.js","names":["Tooltip","React","useEffect","useState","useRef","Plot","ChartTheme","classNames","HeapUsage","connection","defaultUpdateInterval","hoverUpdateInterval","bgMonitoring","monitorDuration","memoryUsage","setMemoryUsage","freeMemory","maximumHeapSize","totalHeapSize","isOpen","setIsOpen","historyUsage","timestamps","usages","setUsageUpdateInterval","fetchAndUpdate","newUsage","getWorkerHeapInfo","currentUsage","currentTime","Date","now","current","length","shift","push","updateUsage","setInterval","clearInterval","toDecimalPlace","num","dec","Math","round","decimalPlace","GbToByte","freeMemoryGB","totalHeapGB","maxHeapGB","inUseGB","getRow","text","size","bottomBorder","lastTimestamp","totalPercentage","usedPercentage","width","toFixed","x","y","type","mode","staticPlot","responsive","height","legend","margin","l","t","r","b","plot_bgcolor","paper_bgcolor","colorway","xaxis","dtick","gridcolor","linecolor","range","linewidth","mirror","yaxis"],"sources":["../src/HeapUsage.tsx"],"sourcesContent":["import { Tooltip } from '@deephaven/components';\nimport { QueryConnectable } from '@deephaven/jsapi-shim';\nimport React, { useEffect, useState, ReactElement, useRef } from 'react';\nimport { Plot, ChartTheme } from '@deephaven/chart';\nimport './HeapUsage.scss';\nimport classNames from 'classnames';\n\ninterface HeapUsageProps {\n connection: QueryConnectable;\n defaultUpdateInterval: number;\n hoverUpdateInterval: number;\n bgMonitoring?: boolean;\n\n // in millis\n monitorDuration: number;\n}\n\nfunction HeapUsage({\n connection,\n defaultUpdateInterval,\n hoverUpdateInterval,\n bgMonitoring = true,\n monitorDuration,\n}: HeapUsageProps): ReactElement {\n const [memoryUsage, setMemoryUsage] = useState({\n freeMemory: 0,\n maximumHeapSize: 999,\n totalHeapSize: 0,\n });\n\n const [isOpen, setIsOpen] = useState(false);\n\n const historyUsage = useRef<{ timestamps: number[]; usages: number[] }>({\n timestamps: [],\n usages: [],\n });\n\n useEffect(\n function setUsageUpdateInterval() {\n const fetchAndUpdate = async () => {\n const newUsage = await connection.getWorkerHeapInfo();\n setMemoryUsage(newUsage);\n\n if (bgMonitoring || isOpen) {\n const currentUsage =\n (newUsage.totalHeapSize - newUsage.freeMemory) /\n newUsage.maximumHeapSize;\n const currentTime = Date.now();\n\n const { timestamps, usages } = historyUsage.current;\n while (\n timestamps.length !== 0 &&\n currentTime - timestamps[0] > monitorDuration * 1.5\n ) {\n timestamps.shift();\n usages.shift();\n }\n\n timestamps.push(currentTime);\n usages.push(currentUsage);\n } else {\n historyUsage.current = { timestamps: [], usages: [] };\n }\n };\n fetchAndUpdate();\n\n const updateUsage = setInterval(\n fetchAndUpdate,\n isOpen ? hoverUpdateInterval : defaultUpdateInterval\n );\n return () => {\n clearInterval(updateUsage);\n };\n },\n [\n isOpen,\n hoverUpdateInterval,\n connection,\n defaultUpdateInterval,\n monitorDuration,\n bgMonitoring,\n ]\n );\n\n const toDecimalPlace = (num: number, dec: number) =>\n Math.round(num * 10 ** dec) / 10 ** dec;\n\n const decimalPlace = 2;\n const GbToByte = 1024 ** 3;\n\n const { freeMemory, totalHeapSize, maximumHeapSize } = memoryUsage;\n\n const freeMemoryGB = toDecimalPlace(freeMemory / GbToByte, decimalPlace);\n const totalHeapGB = toDecimalPlace(totalHeapSize / GbToByte, decimalPlace);\n const maxHeapGB = toDecimalPlace(maximumHeapSize / GbToByte, decimalPlace);\n const inUseGB = totalHeapGB - freeMemoryGB;\n\n const getRow = (text: string, size: string, bottomBorder = false) => (\n <div\n className={classNames(`heap-usage-info-row`, {\n 'heading-bottom-border': bottomBorder,\n })}\n >\n <div className=\"font-weight-bold\">{text}</div>\n <div>{size}</div>\n </div>\n );\n\n const { timestamps, usages } = historyUsage.current;\n\n const lastTimestamp = timestamps[timestamps.length - 1] ?? 0;\n\n const totalPercentage = totalHeapSize / maximumHeapSize;\n const usedPercentage = (totalHeapSize - freeMemory) / maximumHeapSize;\n\n return (\n <>\n <div className=\"max-memory\">\n <div\n className=\"total-memory\"\n style={{\n width: `calc(${totalPercentage * 100}% - ${totalPercentage * 2}px`,\n }}\n />\n <div\n className={classNames('used-memory', {\n 'heap-overflow':\n (totalHeapSize - freeMemory) / maximumHeapSize > 0.95,\n })}\n style={{\n width: `calc(${usedPercentage * 100}% - ${usedPercentage * 2}px`,\n }}\n />\n <div className=\"memory-text\">{maxHeapGB.toFixed(1)} GB</div>\n </div>\n\n <Tooltip\n onEntered={() => setIsOpen(true)}\n onExited={() => setIsOpen(false)}\n interactive\n >\n <div className=\"heap-tooltip\">\n {getRow(\n 'In use:',\n `${inUseGB.toFixed(decimalPlace)} of ${maxHeapGB.toFixed(\n decimalPlace\n )} GB`,\n true\n )}\n {getRow('Free:', `${freeMemoryGB.toFixed(decimalPlace)} GB`)}\n {getRow('Total:', `${totalHeapGB.toFixed(decimalPlace)} GB`)}\n {getRow('Max:', `${maxHeapGB.toFixed(decimalPlace)} GB`)}\n <div className=\"heap-plot\">\n <Plot\n data={[\n {\n x: [...timestamps],\n y: [...usages],\n type: 'scatter',\n mode: 'lines',\n },\n ]}\n config={{ staticPlot: true, responsive: true }}\n style={{\n width: '196px',\n height: '100px',\n }}\n layout={{\n legend: false,\n margin: { l: 2, t: 2, r: 2, b: 2 },\n plot_bgcolor: 'transparent',\n paper_bgcolor: 'transparent',\n colorway: ['#4878ea'],\n xaxis: {\n dtick: Math.round(monitorDuration / 6),\n gridcolor: ChartTheme.linecolor,\n range: [lastTimestamp - monitorDuration, lastTimestamp],\n linecolor: ChartTheme.linecolor,\n linewidth: 2,\n mirror: true,\n },\n yaxis: {\n dtick: 0.2,\n gridcolor: ChartTheme.linecolor,\n range: [0, 1],\n linecolor: ChartTheme.linecolor,\n linewidth: 2,\n mirror: true,\n },\n }}\n />\n </div>\n <div className=\"heap-utilisation-text\">\n % utilization over {Math.round(monitorDuration / 1000 / 60)} min.\n </div>\n </div>\n </Tooltip>\n </>\n );\n}\n\nexport default HeapUsage;\n"],"mappings":"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"}
1
+ {"version":3,"file":"HeapUsage.js","names":["React","useEffect","useState","useRef","classNames","Tooltip","Plot","ChartTheme","Log","log","module","HeapUsage","connection","defaultUpdateInterval","hoverUpdateInterval","bgMonitoring","monitorDuration","memoryUsage","setMemoryUsage","freeMemory","maximumHeapSize","totalHeapSize","isOpen","setIsOpen","historyUsage","timestamps","usages","setUsageUpdateInterval","fetchAndUpdate","newUsage","getWorkerHeapInfo","currentUsage","currentTime","Date","now","current","length","shift","push","e","warn","updateUsage","setInterval","clearInterval","toDecimalPlace","num","dec","Math","round","decimalPlace","GbToByte","freeMemoryGB","totalHeapGB","maxHeapGB","inUseGB","getRow","text","size","bottomBorder","lastTimestamp","totalPercentage","usedPercentage","width","toFixed","x","y","type","mode","staticPlot","responsive","height","legend","margin","l","t","r","b","plot_bgcolor","paper_bgcolor","colorway","xaxis","dtick","gridcolor","linecolor","range","linewidth","mirror","yaxis"],"sources":["../src/HeapUsage.tsx"],"sourcesContent":["import React, { useEffect, useState, ReactElement, useRef } from 'react';\nimport classNames from 'classnames';\nimport { Tooltip } from '@deephaven/components';\nimport { QueryConnectable } from '@deephaven/jsapi-shim';\nimport { Plot, ChartTheme } from '@deephaven/chart';\nimport Log from '@deephaven/log';\nimport './HeapUsage.scss';\n\nconst log = Log.module('HeapUsage');\n\ninterface HeapUsageProps {\n connection: QueryConnectable;\n defaultUpdateInterval: number;\n hoverUpdateInterval: number;\n bgMonitoring?: boolean;\n\n // in millis\n monitorDuration: number;\n}\n\nfunction HeapUsage({\n connection,\n defaultUpdateInterval,\n hoverUpdateInterval,\n bgMonitoring = true,\n monitorDuration,\n}: HeapUsageProps): ReactElement {\n const [memoryUsage, setMemoryUsage] = useState({\n freeMemory: 0,\n maximumHeapSize: 999,\n totalHeapSize: 0,\n });\n\n const [isOpen, setIsOpen] = useState(false);\n\n const historyUsage = useRef<{ timestamps: number[]; usages: number[] }>({\n timestamps: [],\n usages: [],\n });\n\n useEffect(\n function setUsageUpdateInterval() {\n const fetchAndUpdate = async () => {\n try {\n const newUsage = await connection.getWorkerHeapInfo();\n setMemoryUsage(newUsage);\n\n if (bgMonitoring || isOpen) {\n const currentUsage =\n (newUsage.totalHeapSize - newUsage.freeMemory) /\n newUsage.maximumHeapSize;\n const currentTime = Date.now();\n\n const { timestamps, usages } = historyUsage.current;\n while (\n timestamps.length !== 0 &&\n currentTime - timestamps[0] > monitorDuration * 1.5\n ) {\n timestamps.shift();\n usages.shift();\n }\n\n timestamps.push(currentTime);\n usages.push(currentUsage);\n } else {\n historyUsage.current = { timestamps: [], usages: [] };\n }\n } catch (e) {\n log.warn('Unable to get heap usage', e);\n }\n };\n fetchAndUpdate();\n\n const updateUsage = setInterval(\n fetchAndUpdate,\n isOpen ? hoverUpdateInterval : defaultUpdateInterval\n );\n return () => {\n clearInterval(updateUsage);\n };\n },\n [\n isOpen,\n hoverUpdateInterval,\n connection,\n defaultUpdateInterval,\n monitorDuration,\n bgMonitoring,\n ]\n );\n\n const toDecimalPlace = (num: number, dec: number) =>\n Math.round(num * 10 ** dec) / 10 ** dec;\n\n const decimalPlace = 2;\n const GbToByte = 1024 ** 3;\n\n const { freeMemory, totalHeapSize, maximumHeapSize } = memoryUsage;\n\n const freeMemoryGB = toDecimalPlace(freeMemory / GbToByte, decimalPlace);\n const totalHeapGB = toDecimalPlace(totalHeapSize / GbToByte, decimalPlace);\n const maxHeapGB = toDecimalPlace(maximumHeapSize / GbToByte, decimalPlace);\n const inUseGB = totalHeapGB - freeMemoryGB;\n\n const getRow = (text: string, size: string, bottomBorder = false) => (\n <div\n className={classNames(`heap-usage-info-row`, {\n 'heading-bottom-border': bottomBorder,\n })}\n >\n <div className=\"font-weight-bold\">{text}</div>\n <div>{size}</div>\n </div>\n );\n\n const { timestamps, usages } = historyUsage.current;\n\n const lastTimestamp = timestamps[timestamps.length - 1] ?? 0;\n\n const totalPercentage = totalHeapSize / maximumHeapSize;\n const usedPercentage = (totalHeapSize - freeMemory) / maximumHeapSize;\n\n return (\n <>\n <div className=\"max-memory\">\n <div\n className=\"total-memory\"\n style={{\n width: `calc(${totalPercentage * 100}% - ${totalPercentage * 2}px`,\n }}\n />\n <div\n className={classNames('used-memory', {\n 'heap-overflow':\n (totalHeapSize - freeMemory) / maximumHeapSize > 0.95,\n })}\n style={{\n width: `calc(${usedPercentage * 100}% - ${usedPercentage * 2}px`,\n }}\n />\n <div className=\"memory-text\">{maxHeapGB.toFixed(1)} GB</div>\n </div>\n\n <Tooltip\n onEntered={() => setIsOpen(true)}\n onExited={() => setIsOpen(false)}\n interactive\n >\n <div className=\"heap-tooltip\">\n {getRow(\n 'In use:',\n `${inUseGB.toFixed(decimalPlace)} of ${maxHeapGB.toFixed(\n decimalPlace\n )} GB`,\n true\n )}\n {getRow('Free:', `${freeMemoryGB.toFixed(decimalPlace)} GB`)}\n {getRow('Total:', `${totalHeapGB.toFixed(decimalPlace)} GB`)}\n {getRow('Max:', `${maxHeapGB.toFixed(decimalPlace)} GB`)}\n <div className=\"heap-plot\">\n <Plot\n data={[\n {\n x: [...timestamps],\n y: [...usages],\n type: 'scatter',\n mode: 'lines',\n },\n ]}\n config={{ staticPlot: true, responsive: true }}\n style={{\n width: '196px',\n height: '100px',\n }}\n layout={{\n legend: false,\n margin: { l: 2, t: 2, r: 2, b: 2 },\n plot_bgcolor: 'transparent',\n paper_bgcolor: 'transparent',\n colorway: ['#4878ea'],\n xaxis: {\n dtick: Math.round(monitorDuration / 6),\n gridcolor: ChartTheme.linecolor,\n range: [lastTimestamp - monitorDuration, lastTimestamp],\n linecolor: ChartTheme.linecolor,\n linewidth: 2,\n mirror: true,\n },\n yaxis: {\n dtick: 0.2,\n gridcolor: ChartTheme.linecolor,\n range: [0, 1],\n linecolor: ChartTheme.linecolor,\n linewidth: 2,\n mirror: true,\n },\n }}\n />\n </div>\n <div className=\"heap-utilisation-text\">\n % utilization over {Math.round(monitorDuration / 1000 / 60)} min.\n </div>\n </div>\n </Tooltip>\n </>\n );\n}\n\nexport default HeapUsage;\n"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,EAAgBC,MAAM,QAAQ,OAAO;AACxE,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,OAAO,QAAQ,uBAAuB;AAE/C,SAASC,IAAI,EAAEC,UAAU,QAAQ,kBAAkB;AACnD,OAAOC,GAAG,MAAM,gBAAgB;AAAC;AAGjC,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAM,CAAC,WAAW,CAAC;AAYnC,SAASC,SAAS,OAMe;EAAA;EAAA,IANd;IACjBC,UAAU;IACVC,qBAAqB;IACrBC,mBAAmB;IACnBC,YAAY,GAAG,IAAI;IACnBC;EACc,CAAC;EACf,IAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAGhB,QAAQ,CAAC;IAC7CiB,UAAU,EAAE,CAAC;IACbC,eAAe,EAAE,GAAG;IACpBC,aAAa,EAAE;EACjB,CAAC,CAAC;EAEF,IAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGrB,QAAQ,CAAC,KAAK,CAAC;EAE3C,IAAMsB,YAAY,GAAGrB,MAAM,CAA6C;IACtEsB,UAAU,EAAE,EAAE;IACdC,MAAM,EAAE;EACV,CAAC,CAAC;EAEFzB,SAAS,CACP,SAAS0B,sBAAsB,GAAG;IAChC,IAAMC,cAAc;MAAA,8BAAG,aAAY;QACjC,IAAI;UACF,IAAMC,QAAQ,SAASjB,UAAU,CAACkB,iBAAiB,EAAE;UACrDZ,cAAc,CAACW,QAAQ,CAAC;UAExB,IAAId,YAAY,IAAIO,MAAM,EAAE;YAC1B,IAAMS,YAAY,GAChB,CAACF,QAAQ,CAACR,aAAa,GAAGQ,QAAQ,CAACV,UAAU,IAC7CU,QAAQ,CAACT,eAAe;YAC1B,IAAMY,WAAW,GAAGC,IAAI,CAACC,GAAG,EAAE;YAE9B,IAAM;cAAET,UAAU,EAAVA,WAAU;cAAEC,MAAM,EAANA;YAAO,CAAC,GAAGF,YAAY,CAACW,OAAO;YACnD,OACEV,WAAU,CAACW,MAAM,KAAK,CAAC,IACvBJ,WAAW,GAAGP,WAAU,CAAC,CAAC,CAAC,GAAGT,eAAe,GAAG,GAAG,EACnD;cACAS,WAAU,CAACY,KAAK,EAAE;cAClBX,OAAM,CAACW,KAAK,EAAE;YAChB;YAEAZ,WAAU,CAACa,IAAI,CAACN,WAAW,CAAC;YAC5BN,OAAM,CAACY,IAAI,CAACP,YAAY,CAAC;UAC3B,CAAC,MAAM;YACLP,YAAY,CAACW,OAAO,GAAG;cAAEV,UAAU,EAAE,EAAE;cAAEC,MAAM,EAAE;YAAG,CAAC;UACvD;QACF,CAAC,CAAC,OAAOa,CAAC,EAAE;UACV9B,GAAG,CAAC+B,IAAI,CAAC,0BAA0B,EAAED,CAAC,CAAC;QACzC;MACF,CAAC;MAAA,gBA5BKX,cAAc;QAAA;MAAA;IAAA,GA4BnB;IACDA,cAAc,EAAE;IAEhB,IAAMa,WAAW,GAAGC,WAAW,CAC7Bd,cAAc,EACdN,MAAM,GAAGR,mBAAmB,GAAGD,qBAAqB,CACrD;IACD,OAAO,MAAM;MACX8B,aAAa,CAACF,WAAW,CAAC;IAC5B,CAAC;EACH,CAAC,EACD,CACEnB,MAAM,EACNR,mBAAmB,EACnBF,UAAU,EACVC,qBAAqB,EACrBG,eAAe,EACfD,YAAY,CACb,CACF;EAED,IAAM6B,cAAc,GAAG,CAACC,GAAW,EAAEC,GAAW,KAC9CC,IAAI,CAACC,KAAK,CAACH,GAAG,GAAG,EAAE,IAAIC,GAAG,CAAC,GAAG,EAAE,IAAIA,GAAG;EAEzC,IAAMG,YAAY,GAAG,CAAC;EACtB,IAAMC,QAAQ,GAAG,IAAI,IAAI,CAAC;EAE1B,IAAM;IAAE/B,UAAU;IAAEE,aAAa;IAAED;EAAgB,CAAC,GAAGH,WAAW;EAElE,IAAMkC,YAAY,GAAGP,cAAc,CAACzB,UAAU,GAAG+B,QAAQ,EAAED,YAAY,CAAC;EACxE,IAAMG,WAAW,GAAGR,cAAc,CAACvB,aAAa,GAAG6B,QAAQ,EAAED,YAAY,CAAC;EAC1E,IAAMI,SAAS,GAAGT,cAAc,CAACxB,eAAe,GAAG8B,QAAQ,EAAED,YAAY,CAAC;EAC1E,IAAMK,OAAO,GAAGF,WAAW,GAAGD,YAAY;EAE1C,IAAMI,MAAM,GAAG,SAATA,MAAM,CAAIC,IAAY,EAAEC,IAAY;IAAA,IAAEC,YAAY,uEAAG,KAAK;IAAA,oBAC9D;MACE,SAAS,EAAEtD,UAAU,wBAAwB;QAC3C,uBAAuB,EAAEsD;MAC3B,CAAC;IAAE,gBAEH;MAAK,SAAS,EAAC;IAAkB,GAAEF,IAAI,CAAO,eAC9C,iCAAMC,IAAI,CAAO,CACb;EAAA,CACP;EAED,IAAM;IAAEhC,UAAU;IAAEC;EAAO,CAAC,GAAGF,YAAY,CAACW,OAAO;EAEnD,IAAMwB,aAAa,mBAAGlC,UAAU,CAACA,UAAU,CAACW,MAAM,GAAG,CAAC,CAAC,uDAAI,CAAC;EAE5D,IAAMwB,eAAe,GAAGvC,aAAa,GAAGD,eAAe;EACvD,IAAMyC,cAAc,GAAG,CAACxC,aAAa,GAAGF,UAAU,IAAIC,eAAe;EAErE,oBACE,uDACE;IAAK,SAAS,EAAC;EAAY,gBACzB;IACE,SAAS,EAAC,cAAc;IACxB,KAAK,EAAE;MACL0C,KAAK,iBAAUF,eAAe,GAAG,GAAG,iBAAOA,eAAe,GAAG,CAAC;IAChE;EAAE,EACF,eACF;IACE,SAAS,EAAExD,UAAU,CAAC,aAAa,EAAE;MACnC,eAAe,EACb,CAACiB,aAAa,GAAGF,UAAU,IAAIC,eAAe,GAAG;IACrD,CAAC,CAAE;IACH,KAAK,EAAE;MACL0C,KAAK,iBAAUD,cAAc,GAAG,GAAG,iBAAOA,cAAc,GAAG,CAAC;IAC9D;EAAE,EACF,eACF;IAAK,SAAS,EAAC;EAAa,GAAER,SAAS,CAACU,OAAO,CAAC,CAAC,CAAC,EAAC,KAAG,CAAM,CACxD,eAEN,oBAAC,OAAO;IACN,SAAS,EAAE,MAAMxC,SAAS,CAAC,IAAI,CAAE;IACjC,QAAQ,EAAE,MAAMA,SAAS,CAAC,KAAK,CAAE;IACjC,WAAW;EAAA,gBAEX;IAAK,SAAS,EAAC;EAAc,GAC1BgC,MAAM,CACL,SAAS,YACND,OAAO,CAACS,OAAO,CAACd,YAAY,CAAC,iBAAOI,SAAS,CAACU,OAAO,CACtDd,YAAY,CACb,UACD,IAAI,CACL,EACAM,MAAM,CAAC,OAAO,YAAKJ,YAAY,CAACY,OAAO,CAACd,YAAY,CAAC,SAAM,EAC3DM,MAAM,CAAC,QAAQ,YAAKH,WAAW,CAACW,OAAO,CAACd,YAAY,CAAC,SAAM,EAC3DM,MAAM,CAAC,MAAM,YAAKF,SAAS,CAACU,OAAO,CAACd,YAAY,CAAC,SAAM,eACxD;IAAK,SAAS,EAAC;EAAW,gBACxB,oBAAC,IAAI;IACH,IAAI,EAAE,CACJ;MACEe,CAAC,EAAE,CAAC,GAAGvC,UAAU,CAAC;MAClBwC,CAAC,EAAE,CAAC,GAAGvC,MAAM,CAAC;MACdwC,IAAI,EAAE,SAAS;MACfC,IAAI,EAAE;IACR,CAAC,CACD;IACF,MAAM,EAAE;MAAEC,UAAU,EAAE,IAAI;MAAEC,UAAU,EAAE;IAAK,CAAE;IAC/C,KAAK,EAAE;MACLP,KAAK,EAAE,OAAO;MACdQ,MAAM,EAAE;IACV,CAAE;IACF,MAAM,EAAE;MACNC,MAAM,EAAE,KAAK;MACbC,MAAM,EAAE;QAAEC,CAAC,EAAE,CAAC;QAAEC,CAAC,EAAE,CAAC;QAAEC,CAAC,EAAE,CAAC;QAAEC,CAAC,EAAE;MAAE,CAAC;MAClCC,YAAY,EAAE,aAAa;MAC3BC,aAAa,EAAE,aAAa;MAC5BC,QAAQ,EAAE,CAAC,SAAS,CAAC;MACrBC,KAAK,EAAE;QACLC,KAAK,EAAElC,IAAI,CAACC,KAAK,CAAChC,eAAe,GAAG,CAAC,CAAC;QACtCkE,SAAS,EAAE3E,UAAU,CAAC4E,SAAS;QAC/BC,KAAK,EAAE,CAACzB,aAAa,GAAG3C,eAAe,EAAE2C,aAAa,CAAC;QACvDwB,SAAS,EAAE5E,UAAU,CAAC4E,SAAS;QAC/BE,SAAS,EAAE,CAAC;QACZC,MAAM,EAAE;MACV,CAAC;MACDC,KAAK,EAAE;QACLN,KAAK,EAAE,GAAG;QACVC,SAAS,EAAE3E,UAAU,CAAC4E,SAAS;QAC/BC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACbD,SAAS,EAAE5E,UAAU,CAAC4E,SAAS;QAC/BE,SAAS,EAAE,CAAC;QACZC,MAAM,EAAE;MACV;IACF;EAAE,EACF,CACE,eACN;IAAK,SAAS,EAAC;EAAuB,GAAC,qBAClB,EAACvC,IAAI,CAACC,KAAK,CAAChC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC,EAAC,OAC9D,CAAM,CACF,CACE,CACT;AAEP;AAEA,eAAeL,SAAS"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Completion provider for a code session
3
+ */
4
+ import { PureComponent } from 'react';
5
+ import * as monaco from 'monaco-editor';
6
+ import { DocumentRange, IdeSession, Position } from '@deephaven/jsapi-shim';
7
+ interface MonacoProviderProps {
8
+ model: monaco.editor.ITextModel;
9
+ session: IdeSession;
10
+ language: string;
11
+ }
12
+ /**
13
+ * Registers a completion provider with monaco for the language and session provided.
14
+ */
15
+ declare class MonacoProviders extends PureComponent<MonacoProviderProps, Record<string, never>> {
16
+ /**
17
+ * Converts LSP CompletionItemKind to Monaco CompletionItemKind
18
+ * Defaults to Variable if no LSP kind was provided
19
+ * https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#completionItemKind
20
+ *
21
+ * @param kind The LSP kind
22
+ * @returns Monaco kind
23
+ */
24
+ static lspToMonacoKind(kind: number | undefined): number;
25
+ /**
26
+ * Converts an LSP document range to a monaco range
27
+ * Accounts for LSP indexing from 0 and monaco indexing from 1
28
+ *
29
+ * @param range The LSP document range to convert
30
+ * @returns The corresponding monaco range
31
+ */
32
+ static lspToMonacoRange(range: DocumentRange): monaco.IRange;
33
+ /**
34
+ * Converts a monaco position to an LSP position
35
+ * Accounts for LSP indexing from 0 and monaco indexing from 1
36
+ *
37
+ * @param position The monaco position
38
+ * @returns The corresponding LSP position
39
+ */
40
+ static monacoToLspPosition(position: monaco.IPosition): Position;
41
+ constructor(props: MonacoProviderProps);
42
+ componentDidMount(): void;
43
+ componentWillUnmount(): void;
44
+ registeredCompletionProvider?: monaco.IDisposable;
45
+ registeredSignatureProvider?: monaco.IDisposable;
46
+ registeredHoverProvider?: monaco.IDisposable;
47
+ handleCompletionRequest(model: monaco.editor.ITextModel, position: monaco.Position, context: monaco.languages.CompletionContext): monaco.languages.ProviderResult<monaco.languages.CompletionList>;
48
+ handleSignatureRequest(model: monaco.editor.ITextModel, position: monaco.Position, token: monaco.CancellationToken, context: monaco.languages.SignatureHelpContext): monaco.languages.ProviderResult<monaco.languages.SignatureHelpResult>;
49
+ handleHoverRequest(model: monaco.editor.ITextModel, position: monaco.Position): monaco.languages.ProviderResult<monaco.languages.Hover>;
50
+ render(): null;
51
+ }
52
+ export default MonacoProviders;
53
+ //# sourceMappingURL=MonacoProviders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MonacoProviders.d.ts","sourceRoot":"","sources":["../../src/monaco/MonacoProviders.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAI5E,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;IAChC,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,cAAM,eAAgB,SAAQ,aAAa,CACzC,mBAAmB,EACnB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC;;;;;;;OAOG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM;IA0DxD;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM;IAY5D;;;;;;OAMG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,GAAG,QAAQ;gBAQpD,KAAK,EAAE,mBAAmB;IAQtC,iBAAiB,IAAI,IAAI;IA+BzB,oBAAoB,IAAI,IAAI;IAM5B,4BAA4B,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAElD,2BAA2B,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAEjD,uBAAuB,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAE7C,uBAAuB,CACrB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAC1C,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;IAkEnE,sBAAsB,CACpB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,KAAK,EAAE,MAAM,CAAC,iBAAiB,EAC/B,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,oBAAoB,GAC7C,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC;IAwExE,kBAAkB,CAChB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,GACxB,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;IAkC1D,MAAM,IAAI,IAAI;CAGf;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,314 @@
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); }
4
+ /**
5
+ * Completion provider for a code session
6
+ */
7
+ import { PureComponent } from 'react';
8
+ import * as monaco from 'monaco-editor';
9
+ import Log from '@deephaven/log';
10
+ var log = Log.module('MonacoCompletionProvider');
11
+ /**
12
+ * Registers a completion provider with monaco for the language and session provided.
13
+ */
14
+ class MonacoProviders extends PureComponent {
15
+ /**
16
+ * Converts LSP CompletionItemKind to Monaco CompletionItemKind
17
+ * Defaults to Variable if no LSP kind was provided
18
+ * https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#completionItemKind
19
+ *
20
+ * @param kind The LSP kind
21
+ * @returns Monaco kind
22
+ */
23
+ static lspToMonacoKind(kind) {
24
+ var monacoKinds = monaco.languages.CompletionItemKind;
25
+ switch (kind) {
26
+ case 1:
27
+ return monacoKinds.Text;
28
+ case 2:
29
+ return monacoKinds.Method;
30
+ case 3:
31
+ return monacoKinds.Function;
32
+ case 4:
33
+ return monacoKinds.Constructor;
34
+ case 5:
35
+ return monacoKinds.Field;
36
+ case 6:
37
+ return monacoKinds.Variable;
38
+ case 7:
39
+ return monacoKinds.Class;
40
+ case 8:
41
+ return monacoKinds.Interface;
42
+ case 9:
43
+ return monacoKinds.Module;
44
+ case 10:
45
+ return monacoKinds.Property;
46
+ case 11:
47
+ return monacoKinds.Unit;
48
+ case 12:
49
+ return monacoKinds.Value;
50
+ case 13:
51
+ return monacoKinds.Enum;
52
+ case 14:
53
+ return monacoKinds.Keyword;
54
+ case 15:
55
+ return monacoKinds.Snippet;
56
+ case 16:
57
+ return monacoKinds.Color;
58
+ case 17:
59
+ return monacoKinds.File;
60
+ case 18:
61
+ return monacoKinds.Reference;
62
+ case 19:
63
+ return monacoKinds.Folder;
64
+ case 20:
65
+ return monacoKinds.EnumMember;
66
+ case 21:
67
+ return monacoKinds.Constant;
68
+ case 22:
69
+ return monacoKinds.Struct;
70
+ case 23:
71
+ return monacoKinds.Event;
72
+ case 24:
73
+ return monacoKinds.Operator;
74
+ case 25:
75
+ return monacoKinds.TypeParameter;
76
+ default:
77
+ return monacoKinds.Variable;
78
+ }
79
+ }
80
+
81
+ /**
82
+ * Converts an LSP document range to a monaco range
83
+ * Accounts for LSP indexing from 0 and monaco indexing from 1
84
+ *
85
+ * @param range The LSP document range to convert
86
+ * @returns The corresponding monaco range
87
+ */
88
+ static lspToMonacoRange(range) {
89
+ var {
90
+ start,
91
+ end
92
+ } = range;
93
+
94
+ // Monaco expects the columns/ranges to start at 1. LSP starts at 0
95
+ return {
96
+ startLineNumber: start.line + 1,
97
+ startColumn: start.character + 1,
98
+ endLineNumber: end.line + 1,
99
+ endColumn: end.character + 1
100
+ };
101
+ }
102
+
103
+ /**
104
+ * Converts a monaco position to an LSP position
105
+ * Accounts for LSP indexing from 0 and monaco indexing from 1
106
+ *
107
+ * @param position The monaco position
108
+ * @returns The corresponding LSP position
109
+ */
110
+ static monacoToLspPosition(position) {
111
+ // Monaco 1-indexes Position. LSP 0-indexes Position
112
+ return {
113
+ line: position.lineNumber - 1,
114
+ character: position.column - 1
115
+ };
116
+ }
117
+ constructor(props) {
118
+ super(props);
119
+ _defineProperty(this, "registeredCompletionProvider", void 0);
120
+ _defineProperty(this, "registeredSignatureProvider", void 0);
121
+ _defineProperty(this, "registeredHoverProvider", void 0);
122
+ this.handleCompletionRequest = this.handleCompletionRequest.bind(this);
123
+ this.handleSignatureRequest = this.handleSignatureRequest.bind(this);
124
+ this.handleHoverRequest = this.handleHoverRequest.bind(this);
125
+ }
126
+ componentDidMount() {
127
+ var {
128
+ language,
129
+ session
130
+ } = this.props;
131
+ this.registeredCompletionProvider = monaco.languages.registerCompletionItemProvider(language, {
132
+ provideCompletionItems: this.handleCompletionRequest,
133
+ triggerCharacters: ['.', '"', "'"]
134
+ });
135
+ if (session.getSignatureHelp) {
136
+ this.registeredSignatureProvider = monaco.languages.registerSignatureHelpProvider(language, {
137
+ provideSignatureHelp: this.handleSignatureRequest,
138
+ signatureHelpTriggerCharacters: ['(', ',']
139
+ });
140
+ }
141
+ if (session.getHover) {
142
+ this.registeredHoverProvider = monaco.languages.registerHoverProvider(language, {
143
+ provideHover: this.handleHoverRequest
144
+ });
145
+ }
146
+ }
147
+ componentWillUnmount() {
148
+ var _this$registeredCompl, _this$registeredSigna, _this$registeredHover;
149
+ (_this$registeredCompl = this.registeredCompletionProvider) === null || _this$registeredCompl === void 0 ? void 0 : _this$registeredCompl.dispose();
150
+ (_this$registeredSigna = this.registeredSignatureProvider) === null || _this$registeredSigna === void 0 ? void 0 : _this$registeredSigna.dispose();
151
+ (_this$registeredHover = this.registeredHoverProvider) === null || _this$registeredHover === void 0 ? void 0 : _this$registeredHover.dispose();
152
+ }
153
+ handleCompletionRequest(model, position, context) {
154
+ var {
155
+ model: propModel,
156
+ session
157
+ } = this.props;
158
+ if (model !== propModel) {
159
+ return null;
160
+ }
161
+ var params = {
162
+ textDocument: {
163
+ uri: "".concat(model.uri),
164
+ version: model.getVersionId()
165
+ },
166
+ position: MonacoProviders.monacoToLspPosition(position),
167
+ context
168
+ };
169
+ var completionItems = session.getCompletionItems(params);
170
+ log.debug('Requested completion items', params);
171
+ var monacoCompletionItems = completionItems.then(items => {
172
+ log.debug('Completion items received: ', params, items);
173
+ var suggestions = items.map(item => {
174
+ var {
175
+ label,
176
+ kind,
177
+ detail,
178
+ documentation,
179
+ sortText,
180
+ filterText,
181
+ textEdit,
182
+ insertTextFormat
183
+ } = item;
184
+ return {
185
+ label,
186
+ kind: MonacoProviders.lspToMonacoKind(kind),
187
+ detail,
188
+ documentation: (documentation === null || documentation === void 0 ? void 0 : documentation.kind) === 'markdown' ? documentation : documentation === null || documentation === void 0 ? void 0 : documentation.value,
189
+ sortText,
190
+ filterText,
191
+ insertText: textEdit.text,
192
+ // We are basically guessing that LSP's insertTextFormat===2 is
193
+ // semantically equivalent to monaco's insertTextRules===4.
194
+ // Why microsoft is using almost-but-not-LSP apis is beyond me....
195
+ insertTextRules: insertTextFormat === 2 ? 4 : insertTextFormat,
196
+ range: MonacoProviders.lspToMonacoRange(textEdit.range)
197
+ };
198
+ });
199
+ return {
200
+ incomplete: true,
201
+ suggestions
202
+ };
203
+ }).catch(error => {
204
+ log.error('There was an error retrieving completion items', error);
205
+ return {
206
+ suggestions: []
207
+ };
208
+ });
209
+ return monacoCompletionItems;
210
+ }
211
+ handleSignatureRequest(model, position, token, context) {
212
+ var defaultResult = {
213
+ value: {
214
+ signatures: [],
215
+ activeSignature: 0,
216
+ activeParameter: 0
217
+ },
218
+ dispose: () => {
219
+ /* no-op */
220
+ }
221
+ };
222
+ var {
223
+ model: propModel,
224
+ session
225
+ } = this.props;
226
+ if (model !== propModel || !session.getSignatureHelp) {
227
+ return null;
228
+ }
229
+ var params = {
230
+ textDocument: {
231
+ uri: "".concat(model.uri),
232
+ version: model.getVersionId()
233
+ },
234
+ position: MonacoProviders.monacoToLspPosition(position),
235
+ context
236
+ };
237
+ var signatureItems = session.getSignatureHelp(params);
238
+ log.debug('Requested signature help', params);
239
+ var monacoSignatures = signatureItems.then(items => {
240
+ log.debug('Signatures received: ', params, signatureItems);
241
+ var signatures = items.map(item => {
242
+ var {
243
+ label,
244
+ documentation,
245
+ parameters
246
+ } = item;
247
+ return {
248
+ documentation: (documentation === null || documentation === void 0 ? void 0 : documentation.kind) === 'markdown' ? documentation : documentation === null || documentation === void 0 ? void 0 : documentation.value,
249
+ label,
250
+ parameters: parameters !== null && parameters !== void 0 ? parameters : []
251
+ };
252
+ });
253
+ if (signatures.length === 0) {
254
+ return defaultResult;
255
+ }
256
+
257
+ // For now we will assume we only autocomplete Python w/ 1 signature
258
+ // For multiple signatures, this may need to be sent through the request as context
259
+ var activeSignature = 0;
260
+ return {
261
+ value: {
262
+ signatures,
263
+ activeSignature,
264
+ activeParameter: items[activeSignature].activeParameter
265
+ },
266
+ dispose: () => {
267
+ /* no-op */
268
+ }
269
+ };
270
+ }).catch(error => {
271
+ log.error('There was an error retrieving completion items', error);
272
+ return defaultResult;
273
+ });
274
+ return monacoSignatures;
275
+ }
276
+ handleHoverRequest(model, position) {
277
+ var {
278
+ model: propModel,
279
+ session
280
+ } = this.props;
281
+ if (model !== propModel || !session.getHover) {
282
+ return null;
283
+ }
284
+ var params = {
285
+ textDocument: {
286
+ uri: "".concat(model.uri),
287
+ version: model.getVersionId()
288
+ },
289
+ position: MonacoProviders.monacoToLspPosition(position)
290
+ };
291
+ var hover = session.getHover(params);
292
+ log.debug('Requested hover', params);
293
+ var monacoHover = hover.then(hoverItem => {
294
+ log.debug('Hover received: ', params, hoverItem);
295
+ var {
296
+ contents: hoverContents
297
+ } = hoverItem;
298
+ return {
299
+ contents: hoverContents ? [hoverContents] : []
300
+ };
301
+ }).catch(error => {
302
+ log.error('There was an error retrieving hover', error);
303
+ return {
304
+ contents: []
305
+ };
306
+ });
307
+ return monacoHover;
308
+ }
309
+ render() {
310
+ return null;
311
+ }
312
+ }
313
+ export default MonacoProviders;
314
+ //# sourceMappingURL=MonacoProviders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MonacoProviders.js","names":["PureComponent","monaco","Log","log","module","MonacoProviders","lspToMonacoKind","kind","monacoKinds","languages","CompletionItemKind","Text","Method","Function","Constructor","Field","Variable","Class","Interface","Module","Property","Unit","Value","Enum","Keyword","Snippet","Color","File","Reference","Folder","EnumMember","Constant","Struct","Event","Operator","TypeParameter","lspToMonacoRange","range","start","end","startLineNumber","line","startColumn","character","endLineNumber","endColumn","monacoToLspPosition","position","lineNumber","column","constructor","props","handleCompletionRequest","bind","handleSignatureRequest","handleHoverRequest","componentDidMount","language","session","registeredCompletionProvider","registerCompletionItemProvider","provideCompletionItems","triggerCharacters","getSignatureHelp","registeredSignatureProvider","registerSignatureHelpProvider","provideSignatureHelp","signatureHelpTriggerCharacters","getHover","registeredHoverProvider","registerHoverProvider","provideHover","componentWillUnmount","dispose","model","context","propModel","params","textDocument","uri","version","getVersionId","completionItems","getCompletionItems","debug","monacoCompletionItems","then","items","suggestions","map","item","label","detail","documentation","sortText","filterText","textEdit","insertTextFormat","value","insertText","text","insertTextRules","incomplete","catch","error","token","defaultResult","signatures","activeSignature","activeParameter","signatureItems","monacoSignatures","parameters","length","hover","monacoHover","hoverItem","contents","hoverContents","render"],"sources":["../../src/monaco/MonacoProviders.tsx"],"sourcesContent":["/**\n * Completion provider for a code session\n */\nimport { PureComponent } from 'react';\nimport * as monaco from 'monaco-editor';\nimport Log from '@deephaven/log';\nimport { DocumentRange, IdeSession, Position } from '@deephaven/jsapi-shim';\n\nconst log = Log.module('MonacoCompletionProvider');\n\ninterface MonacoProviderProps {\n model: monaco.editor.ITextModel;\n session: IdeSession;\n language: string;\n}\n\n/**\n * Registers a completion provider with monaco for the language and session provided.\n */\nclass MonacoProviders extends PureComponent<\n MonacoProviderProps,\n Record<string, never>\n> {\n /**\n * Converts LSP CompletionItemKind to Monaco CompletionItemKind\n * Defaults to Variable if no LSP kind was provided\n * https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#completionItemKind\n *\n * @param kind The LSP kind\n * @returns Monaco kind\n */\n static lspToMonacoKind(kind: number | undefined): number {\n const monacoKinds = monaco.languages.CompletionItemKind;\n switch (kind) {\n case 1:\n return monacoKinds.Text;\n case 2:\n return monacoKinds.Method;\n case 3:\n return monacoKinds.Function;\n case 4:\n return monacoKinds.Constructor;\n case 5:\n return monacoKinds.Field;\n case 6:\n return monacoKinds.Variable;\n case 7:\n return monacoKinds.Class;\n case 8:\n return monacoKinds.Interface;\n case 9:\n return monacoKinds.Module;\n case 10:\n return monacoKinds.Property;\n case 11:\n return monacoKinds.Unit;\n case 12:\n return monacoKinds.Value;\n case 13:\n return monacoKinds.Enum;\n case 14:\n return monacoKinds.Keyword;\n case 15:\n return monacoKinds.Snippet;\n case 16:\n return monacoKinds.Color;\n case 17:\n return monacoKinds.File;\n case 18:\n return monacoKinds.Reference;\n case 19:\n return monacoKinds.Folder;\n case 20:\n return monacoKinds.EnumMember;\n case 21:\n return monacoKinds.Constant;\n case 22:\n return monacoKinds.Struct;\n case 23:\n return monacoKinds.Event;\n case 24:\n return monacoKinds.Operator;\n case 25:\n return monacoKinds.TypeParameter;\n default:\n return monacoKinds.Variable;\n }\n }\n\n /**\n * Converts an LSP document range to a monaco range\n * Accounts for LSP indexing from 0 and monaco indexing from 1\n *\n * @param range The LSP document range to convert\n * @returns The corresponding monaco range\n */\n static lspToMonacoRange(range: DocumentRange): monaco.IRange {\n const { start, end } = range;\n\n // Monaco expects the columns/ranges to start at 1. LSP starts at 0\n return {\n startLineNumber: start.line + 1,\n startColumn: start.character + 1,\n endLineNumber: end.line + 1,\n endColumn: end.character + 1,\n };\n }\n\n /**\n * Converts a monaco position to an LSP position\n * Accounts for LSP indexing from 0 and monaco indexing from 1\n *\n * @param position The monaco position\n * @returns The corresponding LSP position\n */\n static monacoToLspPosition(position: monaco.IPosition): Position {\n // Monaco 1-indexes Position. LSP 0-indexes Position\n return {\n line: position.lineNumber - 1,\n character: position.column - 1,\n };\n }\n\n constructor(props: MonacoProviderProps) {\n super(props);\n\n this.handleCompletionRequest = this.handleCompletionRequest.bind(this);\n this.handleSignatureRequest = this.handleSignatureRequest.bind(this);\n this.handleHoverRequest = this.handleHoverRequest.bind(this);\n }\n\n componentDidMount(): void {\n const { language, session } = this.props;\n\n this.registeredCompletionProvider = monaco.languages.registerCompletionItemProvider(\n language,\n {\n provideCompletionItems: this.handleCompletionRequest,\n triggerCharacters: ['.', '\"', \"'\"],\n }\n );\n\n if (session.getSignatureHelp) {\n this.registeredSignatureProvider = monaco.languages.registerSignatureHelpProvider(\n language,\n {\n provideSignatureHelp: this.handleSignatureRequest,\n signatureHelpTriggerCharacters: ['(', ','],\n }\n );\n }\n\n if (session.getHover) {\n this.registeredHoverProvider = monaco.languages.registerHoverProvider(\n language,\n {\n provideHover: this.handleHoverRequest,\n }\n );\n }\n }\n\n componentWillUnmount(): void {\n this.registeredCompletionProvider?.dispose();\n this.registeredSignatureProvider?.dispose();\n this.registeredHoverProvider?.dispose();\n }\n\n registeredCompletionProvider?: monaco.IDisposable;\n\n registeredSignatureProvider?: monaco.IDisposable;\n\n registeredHoverProvider?: monaco.IDisposable;\n\n handleCompletionRequest(\n model: monaco.editor.ITextModel,\n position: monaco.Position,\n context: monaco.languages.CompletionContext\n ): monaco.languages.ProviderResult<monaco.languages.CompletionList> {\n const { model: propModel, session } = this.props;\n if (model !== propModel) {\n return null;\n }\n\n const params = {\n textDocument: {\n uri: `${model.uri}`,\n version: model.getVersionId(),\n },\n position: MonacoProviders.monacoToLspPosition(position),\n context,\n };\n\n const completionItems = session.getCompletionItems(params);\n log.debug('Requested completion items', params);\n\n const monacoCompletionItems = completionItems\n .then(items => {\n log.debug('Completion items received: ', params, items);\n\n const suggestions = items.map(item => {\n const {\n label,\n kind,\n detail,\n documentation,\n sortText,\n filterText,\n textEdit,\n insertTextFormat,\n } = item;\n\n return {\n label,\n kind: MonacoProviders.lspToMonacoKind(kind),\n detail,\n documentation:\n documentation?.kind === 'markdown'\n ? documentation\n : documentation?.value,\n sortText,\n filterText,\n insertText: textEdit.text,\n // We are basically guessing that LSP's insertTextFormat===2 is\n // semantically equivalent to monaco's insertTextRules===4.\n // Why microsoft is using almost-but-not-LSP apis is beyond me....\n insertTextRules: insertTextFormat === 2 ? 4 : insertTextFormat,\n range: MonacoProviders.lspToMonacoRange(textEdit.range),\n };\n });\n\n return {\n incomplete: true,\n suggestions,\n };\n })\n .catch((error: unknown) => {\n log.error('There was an error retrieving completion items', error);\n return { suggestions: [] };\n });\n\n return monacoCompletionItems;\n }\n\n handleSignatureRequest(\n model: monaco.editor.ITextModel,\n position: monaco.Position,\n token: monaco.CancellationToken,\n context: monaco.languages.SignatureHelpContext\n ): monaco.languages.ProviderResult<monaco.languages.SignatureHelpResult> {\n const defaultResult: monaco.languages.SignatureHelpResult = {\n value: {\n signatures: [],\n activeSignature: 0,\n activeParameter: 0,\n },\n dispose: () => {\n /* no-op */\n },\n };\n\n const { model: propModel, session } = this.props;\n if (model !== propModel || !session.getSignatureHelp) {\n return null;\n }\n\n const params = {\n textDocument: {\n uri: `${model.uri}`,\n version: model.getVersionId(),\n },\n position: MonacoProviders.monacoToLspPosition(position),\n context,\n };\n\n const signatureItems = session.getSignatureHelp(params);\n log.debug('Requested signature help', params);\n\n const monacoSignatures = signatureItems\n .then(items => {\n log.debug('Signatures received: ', params, signatureItems);\n const signatures = items.map(item => {\n const { label, documentation, parameters } = item;\n\n return {\n documentation:\n documentation?.kind === 'markdown'\n ? documentation\n : documentation?.value,\n label,\n parameters: parameters ?? [],\n };\n });\n\n if (signatures.length === 0) {\n return defaultResult;\n }\n\n // For now we will assume we only autocomplete Python w/ 1 signature\n // For multiple signatures, this may need to be sent through the request as context\n const activeSignature = 0;\n\n return {\n value: {\n signatures,\n activeSignature,\n activeParameter: items[activeSignature].activeParameter,\n },\n dispose: () => {\n /* no-op */\n },\n };\n })\n .catch((error: unknown) => {\n log.error('There was an error retrieving completion items', error);\n return defaultResult;\n });\n\n return monacoSignatures;\n }\n\n handleHoverRequest(\n model: monaco.editor.ITextModel,\n position: monaco.Position\n ): monaco.languages.ProviderResult<monaco.languages.Hover> {\n const { model: propModel, session } = this.props;\n if (model !== propModel || !session.getHover) {\n return null;\n }\n\n const params = {\n textDocument: {\n uri: `${model.uri}`,\n version: model.getVersionId(),\n },\n position: MonacoProviders.monacoToLspPosition(position),\n };\n\n const hover = session.getHover(params);\n log.debug('Requested hover', params);\n\n const monacoHover = hover\n .then(hoverItem => {\n log.debug('Hover received: ', params, hoverItem);\n const { contents: hoverContents } = hoverItem;\n\n return {\n contents: hoverContents ? [hoverContents] : [],\n };\n })\n .catch((error: unknown) => {\n log.error('There was an error retrieving hover', error);\n return { contents: [] };\n });\n\n return monacoHover;\n }\n\n render(): null {\n return null;\n }\n}\n\nexport default MonacoProviders;\n"],"mappings":";;;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,eAAe,SAASL,aAAa,CAGzC;EACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAOM,eAAe,CAACC,IAAwB,EAAU;IACvD,IAAMC,WAAW,GAAGP,MAAM,CAACQ,SAAS,CAACC,kBAAkB;IACvD,QAAQH,IAAI;MACV,KAAK,CAAC;QACJ,OAAOC,WAAW,CAACG,IAAI;MACzB,KAAK,CAAC;QACJ,OAAOH,WAAW,CAACI,MAAM;MAC3B,KAAK,CAAC;QACJ,OAAOJ,WAAW,CAACK,QAAQ;MAC7B,KAAK,CAAC;QACJ,OAAOL,WAAW,CAACM,WAAW;MAChC,KAAK,CAAC;QACJ,OAAON,WAAW,CAACO,KAAK;MAC1B,KAAK,CAAC;QACJ,OAAOP,WAAW,CAACQ,QAAQ;MAC7B,KAAK,CAAC;QACJ,OAAOR,WAAW,CAACS,KAAK;MAC1B,KAAK,CAAC;QACJ,OAAOT,WAAW,CAACU,SAAS;MAC9B,KAAK,CAAC;QACJ,OAAOV,WAAW,CAACW,MAAM;MAC3B,KAAK,EAAE;QACL,OAAOX,WAAW,CAACY,QAAQ;MAC7B,KAAK,EAAE;QACL,OAAOZ,WAAW,CAACa,IAAI;MACzB,KAAK,EAAE;QACL,OAAOb,WAAW,CAACc,KAAK;MAC1B,KAAK,EAAE;QACL,OAAOd,WAAW,CAACe,IAAI;MACzB,KAAK,EAAE;QACL,OAAOf,WAAW,CAACgB,OAAO;MAC5B,KAAK,EAAE;QACL,OAAOhB,WAAW,CAACiB,OAAO;MAC5B,KAAK,EAAE;QACL,OAAOjB,WAAW,CAACkB,KAAK;MAC1B,KAAK,EAAE;QACL,OAAOlB,WAAW,CAACmB,IAAI;MACzB,KAAK,EAAE;QACL,OAAOnB,WAAW,CAACoB,SAAS;MAC9B,KAAK,EAAE;QACL,OAAOpB,WAAW,CAACqB,MAAM;MAC3B,KAAK,EAAE;QACL,OAAOrB,WAAW,CAACsB,UAAU;MAC/B,KAAK,EAAE;QACL,OAAOtB,WAAW,CAACuB,QAAQ;MAC7B,KAAK,EAAE;QACL,OAAOvB,WAAW,CAACwB,MAAM;MAC3B,KAAK,EAAE;QACL,OAAOxB,WAAW,CAACyB,KAAK;MAC1B,KAAK,EAAE;QACL,OAAOzB,WAAW,CAAC0B,QAAQ;MAC7B,KAAK,EAAE;QACL,OAAO1B,WAAW,CAAC2B,aAAa;MAClC;QACE,OAAO3B,WAAW,CAACQ,QAAQ;IAAC;EAElC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,OAAOoB,gBAAgB,CAACC,KAAoB,EAAiB;IAC3D,IAAM;MAAEC,KAAK;MAAEC;IAAI,CAAC,GAAGF,KAAK;;IAE5B;IACA,OAAO;MACLG,eAAe,EAAEF,KAAK,CAACG,IAAI,GAAG,CAAC;MAC/BC,WAAW,EAAEJ,KAAK,CAACK,SAAS,GAAG,CAAC;MAChCC,aAAa,EAAEL,GAAG,CAACE,IAAI,GAAG,CAAC;MAC3BI,SAAS,EAAEN,GAAG,CAACI,SAAS,GAAG;IAC7B,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,OAAOG,mBAAmB,CAACC,QAA0B,EAAY;IAC/D;IACA,OAAO;MACLN,IAAI,EAAEM,QAAQ,CAACC,UAAU,GAAG,CAAC;MAC7BL,SAAS,EAAEI,QAAQ,CAACE,MAAM,GAAG;IAC/B,CAAC;EACH;EAEAC,WAAW,CAACC,KAA0B,EAAE;IACtC,KAAK,CAACA,KAAK,CAAC;IAAC;IAAA;IAAA;IAEb,IAAI,CAACC,uBAAuB,GAAG,IAAI,CAACA,uBAAuB,CAACC,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAACC,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACD,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACE,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACF,IAAI,CAAC,IAAI,CAAC;EAC9D;EAEAG,iBAAiB,GAAS;IACxB,IAAM;MAAEC,QAAQ;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAACP,KAAK;IAExC,IAAI,CAACQ,4BAA4B,GAAG1D,MAAM,CAACQ,SAAS,CAACmD,8BAA8B,CACjFH,QAAQ,EACR;MACEI,sBAAsB,EAAE,IAAI,CAACT,uBAAuB;MACpDU,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG;IACnC,CAAC,CACF;IAED,IAAIJ,OAAO,CAACK,gBAAgB,EAAE;MAC5B,IAAI,CAACC,2BAA2B,GAAG/D,MAAM,CAACQ,SAAS,CAACwD,6BAA6B,CAC/ER,QAAQ,EACR;QACES,oBAAoB,EAAE,IAAI,CAACZ,sBAAsB;QACjDa,8BAA8B,EAAE,CAAC,GAAG,EAAE,GAAG;MAC3C,CAAC,CACF;IACH;IAEA,IAAIT,OAAO,CAACU,QAAQ,EAAE;MACpB,IAAI,CAACC,uBAAuB,GAAGpE,MAAM,CAACQ,SAAS,CAAC6D,qBAAqB,CACnEb,QAAQ,EACR;QACEc,YAAY,EAAE,IAAI,CAAChB;MACrB,CAAC,CACF;IACH;EACF;EAEAiB,oBAAoB,GAAS;IAAA;IAC3B,6BAAI,CAACb,4BAA4B,0DAAjC,sBAAmCc,OAAO,EAAE;IAC5C,6BAAI,CAACT,2BAA2B,0DAAhC,sBAAkCS,OAAO,EAAE;IAC3C,6BAAI,CAACJ,uBAAuB,0DAA5B,sBAA8BI,OAAO,EAAE;EACzC;EAQArB,uBAAuB,CACrBsB,KAA+B,EAC/B3B,QAAyB,EACzB4B,OAA2C,EACuB;IAClE,IAAM;MAAED,KAAK,EAAEE,SAAS;MAAElB;IAAQ,CAAC,GAAG,IAAI,CAACP,KAAK;IAChD,IAAIuB,KAAK,KAAKE,SAAS,EAAE;MACvB,OAAO,IAAI;IACb;IAEA,IAAMC,MAAM,GAAG;MACbC,YAAY,EAAE;QACZC,GAAG,YAAKL,KAAK,CAACK,GAAG,CAAE;QACnBC,OAAO,EAAEN,KAAK,CAACO,YAAY;MAC7B,CAAC;MACDlC,QAAQ,EAAE1C,eAAe,CAACyC,mBAAmB,CAACC,QAAQ,CAAC;MACvD4B;IACF,CAAC;IAED,IAAMO,eAAe,GAAGxB,OAAO,CAACyB,kBAAkB,CAACN,MAAM,CAAC;IAC1D1E,GAAG,CAACiF,KAAK,CAAC,4BAA4B,EAAEP,MAAM,CAAC;IAE/C,IAAMQ,qBAAqB,GAAGH,eAAe,CAC1CI,IAAI,CAACC,KAAK,IAAI;MACbpF,GAAG,CAACiF,KAAK,CAAC,6BAA6B,EAAEP,MAAM,EAAEU,KAAK,CAAC;MAEvD,IAAMC,WAAW,GAAGD,KAAK,CAACE,GAAG,CAACC,IAAI,IAAI;QACpC,IAAM;UACJC,KAAK;UACLpF,IAAI;UACJqF,MAAM;UACNC,aAAa;UACbC,QAAQ;UACRC,UAAU;UACVC,QAAQ;UACRC;QACF,CAAC,GAAGP,IAAI;QAER,OAAO;UACLC,KAAK;UACLpF,IAAI,EAAEF,eAAe,CAACC,eAAe,CAACC,IAAI,CAAC;UAC3CqF,MAAM;UACNC,aAAa,EACX,CAAAA,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEtF,IAAI,MAAK,UAAU,GAC9BsF,aAAa,GACbA,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEK,KAAK;UAC1BJ,QAAQ;UACRC,UAAU;UACVI,UAAU,EAAEH,QAAQ,CAACI,IAAI;UACzB;UACA;UACA;UACAC,eAAe,EAAEJ,gBAAgB,KAAK,CAAC,GAAG,CAAC,GAAGA,gBAAgB;UAC9D5D,KAAK,EAAEhC,eAAe,CAAC+B,gBAAgB,CAAC4D,QAAQ,CAAC3D,KAAK;QACxD,CAAC;MACH,CAAC,CAAC;MAEF,OAAO;QACLiE,UAAU,EAAE,IAAI;QAChBd;MACF,CAAC;IACH,CAAC,CAAC,CACDe,KAAK,CAAEC,KAAc,IAAK;MACzBrG,GAAG,CAACqG,KAAK,CAAC,gDAAgD,EAAEA,KAAK,CAAC;MAClE,OAAO;QAAEhB,WAAW,EAAE;MAAG,CAAC;IAC5B,CAAC,CAAC;IAEJ,OAAOH,qBAAqB;EAC9B;EAEA/B,sBAAsB,CACpBoB,KAA+B,EAC/B3B,QAAyB,EACzB0D,KAA+B,EAC/B9B,OAA8C,EACyB;IACvE,IAAM+B,aAAmD,GAAG;MAC1DR,KAAK,EAAE;QACLS,UAAU,EAAE,EAAE;QACdC,eAAe,EAAE,CAAC;QAClBC,eAAe,EAAE;MACnB,CAAC;MACDpC,OAAO,EAAE,MAAM;QACb;MAAA;IAEJ,CAAC;IAED,IAAM;MAAEC,KAAK,EAAEE,SAAS;MAAElB;IAAQ,CAAC,GAAG,IAAI,CAACP,KAAK;IAChD,IAAIuB,KAAK,KAAKE,SAAS,IAAI,CAAClB,OAAO,CAACK,gBAAgB,EAAE;MACpD,OAAO,IAAI;IACb;IAEA,IAAMc,MAAM,GAAG;MACbC,YAAY,EAAE;QACZC,GAAG,YAAKL,KAAK,CAACK,GAAG,CAAE;QACnBC,OAAO,EAAEN,KAAK,CAACO,YAAY;MAC7B,CAAC;MACDlC,QAAQ,EAAE1C,eAAe,CAACyC,mBAAmB,CAACC,QAAQ,CAAC;MACvD4B;IACF,CAAC;IAED,IAAMmC,cAAc,GAAGpD,OAAO,CAACK,gBAAgB,CAACc,MAAM,CAAC;IACvD1E,GAAG,CAACiF,KAAK,CAAC,0BAA0B,EAAEP,MAAM,CAAC;IAE7C,IAAMkC,gBAAgB,GAAGD,cAAc,CACpCxB,IAAI,CAACC,KAAK,IAAI;MACbpF,GAAG,CAACiF,KAAK,CAAC,uBAAuB,EAAEP,MAAM,EAAEiC,cAAc,CAAC;MAC1D,IAAMH,UAAU,GAAGpB,KAAK,CAACE,GAAG,CAACC,IAAI,IAAI;QACnC,IAAM;UAAEC,KAAK;UAAEE,aAAa;UAAEmB;QAAW,CAAC,GAAGtB,IAAI;QAEjD,OAAO;UACLG,aAAa,EACX,CAAAA,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEtF,IAAI,MAAK,UAAU,GAC9BsF,aAAa,GACbA,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEK,KAAK;UAC1BP,KAAK;UACLqB,UAAU,EAAEA,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAI;QAC5B,CAAC;MACH,CAAC,CAAC;MAEF,IAAIL,UAAU,CAACM,MAAM,KAAK,CAAC,EAAE;QAC3B,OAAOP,aAAa;MACtB;;MAEA;MACA;MACA,IAAME,eAAe,GAAG,CAAC;MAEzB,OAAO;QACLV,KAAK,EAAE;UACLS,UAAU;UACVC,eAAe;UACfC,eAAe,EAAEtB,KAAK,CAACqB,eAAe,CAAC,CAACC;QAC1C,CAAC;QACDpC,OAAO,EAAE,MAAM;UACb;QAAA;MAEJ,CAAC;IACH,CAAC,CAAC,CACD8B,KAAK,CAAEC,KAAc,IAAK;MACzBrG,GAAG,CAACqG,KAAK,CAAC,gDAAgD,EAAEA,KAAK,CAAC;MAClE,OAAOE,aAAa;IACtB,CAAC,CAAC;IAEJ,OAAOK,gBAAgB;EACzB;EAEAxD,kBAAkB,CAChBmB,KAA+B,EAC/B3B,QAAyB,EACgC;IACzD,IAAM;MAAE2B,KAAK,EAAEE,SAAS;MAAElB;IAAQ,CAAC,GAAG,IAAI,CAACP,KAAK;IAChD,IAAIuB,KAAK,KAAKE,SAAS,IAAI,CAAClB,OAAO,CAACU,QAAQ,EAAE;MAC5C,OAAO,IAAI;IACb;IAEA,IAAMS,MAAM,GAAG;MACbC,YAAY,EAAE;QACZC,GAAG,YAAKL,KAAK,CAACK,GAAG,CAAE;QACnBC,OAAO,EAAEN,KAAK,CAACO,YAAY;MAC7B,CAAC;MACDlC,QAAQ,EAAE1C,eAAe,CAACyC,mBAAmB,CAACC,QAAQ;IACxD,CAAC;IAED,IAAMmE,KAAK,GAAGxD,OAAO,CAACU,QAAQ,CAACS,MAAM,CAAC;IACtC1E,GAAG,CAACiF,KAAK,CAAC,iBAAiB,EAAEP,MAAM,CAAC;IAEpC,IAAMsC,WAAW,GAAGD,KAAK,CACtB5B,IAAI,CAAC8B,SAAS,IAAI;MACjBjH,GAAG,CAACiF,KAAK,CAAC,kBAAkB,EAAEP,MAAM,EAAEuC,SAAS,CAAC;MAChD,IAAM;QAAEC,QAAQ,EAAEC;MAAc,CAAC,GAAGF,SAAS;MAE7C,OAAO;QACLC,QAAQ,EAAEC,aAAa,GAAG,CAACA,aAAa,CAAC,GAAG;MAC9C,CAAC;IACH,CAAC,CAAC,CACDf,KAAK,CAAEC,KAAc,IAAK;MACzBrG,GAAG,CAACqG,KAAK,CAAC,qCAAqC,EAAEA,KAAK,CAAC;MACvD,OAAO;QAAEa,QAAQ,EAAE;MAAG,CAAC;IACzB,CAAC,CAAC;IAEJ,OAAOF,WAAW;EACpB;EAEAI,MAAM,GAAS;IACb,OAAO,IAAI;EACb;AACF;AAEA,eAAelH,eAAe"}
@@ -1,4 +1,4 @@
1
1
  export { default as MonacoUtils } from './MonacoUtils';
2
- export { default as MonacoCompletionProvider } from './MonacoCompletionProvider';
2
+ export { default as MonacoProviders } from './MonacoProviders';
3
3
  export { default as MonacoTheme } from './MonacoTheme.module.scss';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/monaco/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/monaco/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export { default as MonacoUtils } from "./MonacoUtils.js";
2
- export { default as MonacoCompletionProvider } from "./MonacoCompletionProvider.js";
2
+ export { default as MonacoProviders } from "./MonacoProviders.js";
3
3
  export { default as MonacoTheme } from "./MonacoTheme.module.css";
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","MonacoUtils","MonacoCompletionProvider","MonacoTheme"],"sources":["../../src/monaco/index.ts"],"sourcesContent":["export { default as MonacoUtils } from './MonacoUtils';\nexport { default as MonacoCompletionProvider } from './MonacoCompletionProvider';\nexport { default as MonacoTheme } from './MonacoTheme.module.scss';\n"],"mappings":"SAASA,OAAO,IAAIC,WAAW;AAAA,SACtBD,OAAO,IAAIE,wBAAwB;AAAA,SACnCF,OAAO,IAAIG,WAAW"}
1
+ {"version":3,"file":"index.js","names":["default","MonacoUtils","MonacoProviders","MonacoTheme"],"sources":["../../src/monaco/index.ts"],"sourcesContent":["export { default as MonacoUtils } from './MonacoUtils';\nexport { default as MonacoProviders } from './MonacoProviders';\nexport { default as MonacoTheme } from './MonacoTheme.module.scss';\n"],"mappings":"SAASA,OAAO,IAAIC,WAAW;AAAA,SACtBD,OAAO,IAAIE,eAAe;AAAA,SAC1BF,OAAO,IAAIG,WAAW"}
@@ -10,7 +10,7 @@ import Log from '@deephaven/log';
10
10
  import { assertNotNull } from '@deephaven/utils';
11
11
  import { editor } from 'monaco-editor';
12
12
  import Editor from "./Editor.js";
13
- import { MonacoCompletionProvider, MonacoUtils } from "../monaco/index.js";
13
+ import { MonacoProviders, MonacoUtils } from "../monaco/index.js";
14
14
  import "./ScriptEditor.css";
15
15
  import SHORTCUTS from "../ConsoleShortcuts.js";
16
16
  var log = Log.module('ScriptEditor');
@@ -289,7 +289,7 @@ class ScriptEditor extends Component {
289
289
  settings: settings,
290
290
  onEditorInitialized: this.handleEditorInitialized,
291
291
  onEditorWillDestroy: this.handleEditorWillDestroy
292
- }), completionProviderEnabled != null && completionProviderEnabled && /*#__PURE__*/React.createElement(MonacoCompletionProvider, {
292
+ }), completionProviderEnabled != null && completionProviderEnabled && /*#__PURE__*/React.createElement(MonacoProviders, {
293
293
  model: model,
294
294
  language: editorLanguage,
295
295
  session: session
@@ -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":"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"}
1
+ {"version":3,"file":"ScriptEditor.js","names":["React","Component","LoadingOverlay","ShortcutRegistry","Log","assertNotNull","editor","Editor","MonacoProviders","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 { MonacoProviders, 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 <MonacoProviders\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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/console",
3
- "version": "0.33.0",
3
+ "version": "0.33.1-auth-plugins.25+2a689a65",
4
4
  "description": "Deephaven Console",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -23,13 +23,13 @@
23
23
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
24
24
  },
25
25
  "dependencies": {
26
- "@deephaven/chart": "^0.33.0",
27
- "@deephaven/components": "^0.33.0",
28
- "@deephaven/icons": "^0.33.0",
29
- "@deephaven/jsapi-shim": "^0.33.0",
30
- "@deephaven/log": "^0.33.0",
31
- "@deephaven/storage": "^0.33.0",
32
- "@deephaven/utils": "^0.33.0",
26
+ "@deephaven/chart": "^0.33.1-auth-plugins.25+2a689a65",
27
+ "@deephaven/components": "^0.33.1-auth-plugins.25+2a689a65",
28
+ "@deephaven/icons": "^0.33.1-auth-plugins.25+2a689a65",
29
+ "@deephaven/jsapi-shim": "^0.33.1-auth-plugins.25+2a689a65",
30
+ "@deephaven/log": "^0.33.1-auth-plugins.25+2a689a65",
31
+ "@deephaven/storage": "^0.33.1-auth-plugins.25+2a689a65",
32
+ "@deephaven/utils": "^0.33.1-auth-plugins.25+2a689a65",
33
33
  "@fortawesome/react-fontawesome": "^0.2.0",
34
34
  "classnames": "^2.3.1",
35
35
  "linkifyjs": "^4.1.0",
@@ -48,8 +48,8 @@
48
48
  "react-dom": "^17.x"
49
49
  },
50
50
  "devDependencies": {
51
- "@deephaven/mocks": "^0.33.0",
52
- "@deephaven/tsconfig": "^0.33.0"
51
+ "@deephaven/mocks": "^0.33.1-auth-plugins.25+2a689a65",
52
+ "@deephaven/tsconfig": "^0.33.1-auth-plugins.25+2a689a65"
53
53
  },
54
54
  "files": [
55
55
  "dist"
@@ -60,5 +60,5 @@
60
60
  "publishConfig": {
61
61
  "access": "public"
62
62
  },
63
- "gitHead": "778346cf8a96f20e04dbad0f6cab75d5fad4b541"
63
+ "gitHead": "2a689a654f019c33259582f8196ea9acf64497e9"
64
64
  }
@@ -1,24 +0,0 @@
1
- /**
2
- * Completion provider for a code session
3
- */
4
- import { PureComponent } from 'react';
5
- import * as monaco from 'monaco-editor';
6
- import { IdeSession } from '@deephaven/jsapi-shim';
7
- interface MonacoCompletionProviderProps {
8
- model: monaco.editor.ITextModel;
9
- session: IdeSession;
10
- language: string;
11
- }
12
- /**
13
- * Registers a completion provider with monaco for the language and session provided.
14
- */
15
- declare class MonacoCompletionProvider extends PureComponent<MonacoCompletionProviderProps, Record<string, never>> {
16
- constructor(props: MonacoCompletionProviderProps);
17
- componentDidMount(): void;
18
- componentWillUnmount(): void;
19
- registeredCompletionProvider?: monaco.IDisposable;
20
- handleCompletionRequest(model: monaco.editor.ITextModel, position: monaco.Position, context: monaco.languages.CompletionContext): monaco.languages.ProviderResult<monaco.languages.CompletionList>;
21
- render(): null;
22
- }
23
- export default MonacoCompletionProvider;
24
- //# sourceMappingURL=MonacoCompletionProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MonacoCompletionProvider.d.ts","sourceRoot":"","sources":["../../src/monaco/MonacoCompletionProvider.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAInD,UAAU,6BAA6B;IACrC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;IAChC,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,cAAM,wBAAyB,SAAQ,aAAa,CAClD,6BAA6B,EAC7B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;gBACa,KAAK,EAAE,6BAA6B;IAMhD,iBAAiB,IAAI,IAAI;IAWzB,oBAAoB,IAAI,IAAI;IAI5B,4BAA4B,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAElD,uBAAuB,CACrB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAC1C,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;IA8EnE,MAAM,IAAI,IAAI;CAGf;AAED,eAAe,wBAAwB,CAAC"}
@@ -1,114 +0,0 @@
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); }
4
- /**
5
- * Completion provider for a code session
6
- */
7
- import { PureComponent } from 'react';
8
- import * as monaco from 'monaco-editor';
9
- import Log from '@deephaven/log';
10
- var log = Log.module('MonacoCompletionProvider');
11
- /**
12
- * Registers a completion provider with monaco for the language and session provided.
13
- */
14
- class MonacoCompletionProvider extends PureComponent {
15
- constructor(props) {
16
- super(props);
17
- _defineProperty(this, "registeredCompletionProvider", void 0);
18
- this.handleCompletionRequest = this.handleCompletionRequest.bind(this);
19
- }
20
- componentDidMount() {
21
- var {
22
- language
23
- } = this.props;
24
- this.registeredCompletionProvider = monaco.languages.registerCompletionItemProvider(language !== null && language !== void 0 ? language : '', {
25
- provideCompletionItems: this.handleCompletionRequest,
26
- triggerCharacters: ['"', '.', "'", '(', '[', '{', ',']
27
- });
28
- }
29
- componentWillUnmount() {
30
- var _this$registeredCompl;
31
- (_this$registeredCompl = this.registeredCompletionProvider) === null || _this$registeredCompl === void 0 ? void 0 : _this$registeredCompl.dispose();
32
- }
33
- handleCompletionRequest(model, position, context) {
34
- var {
35
- model: propModel,
36
- session
37
- } = this.props;
38
- if (model !== propModel) {
39
- return null;
40
- }
41
- var params = {
42
- textDocument: {
43
- uri: "".concat(model.uri),
44
- version: model.getVersionId()
45
- },
46
- // Yes, the Monaco API Position is different than the Position received by the LSP
47
- // Why? I do not know.
48
- position: {
49
- line: position.lineNumber - 1,
50
- character: position.column - 1
51
- },
52
- context
53
- };
54
- var completionItems = session.getCompletionItems(params);
55
- log.debug('Completion items received: ', params, completionItems);
56
- var monacoCompletionItems = completionItems.then(items => {
57
- // Annoying that the LSP protocol returns completion items with a range that's slightly different than what Monaco expects
58
- // Need to remap the items here
59
- var suggestions = items.map(item => {
60
- var {
61
- label,
62
- kind,
63
- detail,
64
- documentation,
65
- sortText,
66
- filterText,
67
- textEdit,
68
- insertTextFormat
69
- } = item;
70
- var {
71
- start,
72
- end
73
- } = textEdit.range;
74
-
75
- // Monaco expects the columns/ranges to start at 1.
76
- var range = {
77
- startLineNumber: start.line + 1,
78
- startColumn: start.character + 1,
79
- endLineNumber: end.line + 1,
80
- endColumn: end.character + 1
81
- };
82
- return {
83
- label,
84
- kind,
85
- detail,
86
- documentation,
87
- sortText,
88
- filterText,
89
- insertText: textEdit.text,
90
- // We are basically guessing that LSP's insertTextFormat===2 is
91
- // semantically equivalent to monaco's insertTextRules===4.
92
- // Why microsoft is using almost-but-not-LSP apis is beyond me....
93
- insertTextRules: insertTextFormat === 2 ? 4 : insertTextFormat,
94
- range
95
- };
96
- });
97
- return {
98
- incomplete: true,
99
- suggestions
100
- };
101
- }).catch(error => {
102
- log.error('There was an error retrieving completion items', error);
103
- return {
104
- suggestions: []
105
- };
106
- });
107
- return monacoCompletionItems;
108
- }
109
- render() {
110
- return null;
111
- }
112
- }
113
- export default MonacoCompletionProvider;
114
- //# sourceMappingURL=MonacoCompletionProvider.js.map
@@ -1 +0,0 @@
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"}