@deephaven/console 0.22.3-beta.18 → 0.22.3-beta.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/Console.js +9 -114
  2. package/dist/Console.js.map +1 -1
  3. package/dist/ConsoleInput.js +14 -90
  4. package/dist/ConsoleInput.js.map +1 -1
  5. package/dist/ConsoleMenu.js +6 -25
  6. package/dist/ConsoleMenu.js.map +1 -1
  7. package/dist/ConsolePropTypes.js.map +1 -1
  8. package/dist/ConsoleShortcuts.js +1 -1
  9. package/dist/ConsoleShortcuts.js.map +1 -1
  10. package/dist/ConsoleStatusBar.js +0 -16
  11. package/dist/ConsoleStatusBar.js.map +1 -1
  12. package/dist/HeapUsage.d.ts +1 -1
  13. package/dist/HeapUsage.d.ts.map +1 -1
  14. package/dist/HeapUsage.js +2 -18
  15. package/dist/HeapUsage.js.map +1 -1
  16. package/dist/StoragePropTypes.js.map +1 -1
  17. package/dist/command-history/CommandHistory.js +1 -49
  18. package/dist/command-history/CommandHistory.js.map +1 -1
  19. package/dist/command-history/CommandHistoryActions.js +0 -6
  20. package/dist/command-history/CommandHistoryActions.js.map +1 -1
  21. package/dist/command-history/CommandHistoryItem.d.ts +4 -4
  22. package/dist/command-history/CommandHistoryItem.d.ts.map +1 -1
  23. package/dist/command-history/CommandHistoryItem.js +3 -6
  24. package/dist/command-history/CommandHistoryItem.js.map +1 -1
  25. package/dist/command-history/CommandHistoryItemTooltip.js +3 -28
  26. package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -1
  27. package/dist/command-history/CommandHistoryViewportUpdater.js +0 -3
  28. package/dist/command-history/CommandHistoryViewportUpdater.js.map +1 -1
  29. package/dist/command-history/index.js.map +1 -1
  30. package/dist/common/Code.js +2 -11
  31. package/dist/common/Code.js.map +1 -1
  32. package/dist/common/ConsoleConstants.js +0 -2
  33. package/dist/common/ConsoleConstants.js.map +1 -1
  34. package/dist/common/ConsoleUtils.js +4 -19
  35. package/dist/common/ConsoleUtils.js.map +1 -1
  36. package/dist/common/ObjectIcon.d.ts +1 -1
  37. package/dist/common/ObjectIcon.d.ts.map +1 -1
  38. package/dist/common/ObjectIcon.js +2 -8
  39. package/dist/common/ObjectIcon.js.map +1 -1
  40. package/dist/common/index.js.map +1 -1
  41. package/dist/console-history/ConsoleHistory.js +0 -8
  42. package/dist/console-history/ConsoleHistory.js.map +1 -1
  43. package/dist/console-history/ConsoleHistoryItem.js +2 -25
  44. package/dist/console-history/ConsoleHistoryItem.js.map +1 -1
  45. package/dist/console-history/ConsoleHistoryItemResult.d.ts +6 -6
  46. package/dist/console-history/ConsoleHistoryItemResult.d.ts.map +1 -1
  47. package/dist/console-history/ConsoleHistoryItemResult.js +2 -4
  48. package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -1
  49. package/dist/console-history/ConsoleHistoryResultErrorMessage.js +0 -22
  50. package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -1
  51. package/dist/console-history/ConsoleHistoryResultInProgress.js +0 -13
  52. package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -1
  53. package/dist/console-history/index.js.map +1 -1
  54. package/dist/csv/CsvFormats.js +0 -9
  55. package/dist/csv/CsvFormats.js.map +1 -1
  56. package/dist/csv/CsvInputBar.js +18 -51
  57. package/dist/csv/CsvInputBar.js.map +1 -1
  58. package/dist/csv/CsvOverlay.js +1 -41
  59. package/dist/csv/CsvOverlay.js.map +1 -1
  60. package/dist/csv/CsvParser.js +10 -73
  61. package/dist/csv/CsvParser.js.map +1 -1
  62. package/dist/csv/CsvTypeParser.js +15 -85
  63. package/dist/csv/CsvTypeParser.js.map +1 -1
  64. package/dist/csv/NewTableColumnTypes.js +0 -9
  65. package/dist/csv/NewTableColumnTypes.js.map +1 -1
  66. package/dist/index.d.ts +3 -2
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +3 -2
  69. package/dist/index.js.map +1 -1
  70. package/dist/log/LogLevel.js.map +1 -1
  71. package/dist/log/LogLevelMenuItem.js +0 -5
  72. package/dist/log/LogLevelMenuItem.js.map +1 -1
  73. package/dist/log/LogView.js +16 -106
  74. package/dist/log/LogView.js.map +1 -1
  75. package/dist/monaco/MonacoCompletionProvider.js +2 -14
  76. package/dist/monaco/MonacoCompletionProvider.js.map +1 -1
  77. package/dist/monaco/MonacoUtils.d.ts.map +1 -1
  78. package/dist/monaco/MonacoUtils.js +21 -49
  79. package/dist/monaco/MonacoUtils.js.map +1 -1
  80. package/dist/monaco/index.js.map +1 -1
  81. package/dist/monaco/lang/db.d.ts.map +1 -1
  82. package/dist/monaco/lang/db.js +22 -13
  83. package/dist/monaco/lang/db.js.map +1 -1
  84. package/dist/monaco/lang/groovy.d.ts.map +1 -1
  85. package/dist/monaco/lang/groovy.js +28 -15
  86. package/dist/monaco/lang/groovy.js.map +1 -1
  87. package/dist/monaco/lang/log.js +1 -0
  88. package/dist/monaco/lang/log.js.map +1 -1
  89. package/dist/monaco/lang/python.d.ts.map +1 -1
  90. package/dist/monaco/lang/python.js +30 -16
  91. package/dist/monaco/lang/python.js.map +1 -1
  92. package/dist/monaco/lang/scala.js +26 -13
  93. package/dist/monaco/lang/scala.js.map +1 -1
  94. package/dist/notebook/Editor.js +2 -21
  95. package/dist/notebook/Editor.js.map +1 -1
  96. package/dist/notebook/ScriptEditor.d.ts +1 -1
  97. package/dist/notebook/ScriptEditor.d.ts.map +1 -1
  98. package/dist/notebook/ScriptEditor.js +0 -57
  99. package/dist/notebook/ScriptEditor.js.map +1 -1
  100. package/dist/notebook/ScriptEditorUtils.js +1 -7
  101. package/dist/notebook/ScriptEditorUtils.js.map +1 -1
  102. package/package.json +11 -11
@@ -1,9 +1,6 @@
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
-
3
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); }); }; }
4
-
5
3
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
-
7
4
  import React, { PureComponent } from 'react';
8
5
  import classNames from 'classnames';
9
6
  import * as monaco from 'monaco-editor';
@@ -17,41 +14,29 @@ var TOP_PADDING = 6;
17
14
  var BOTTOM_PADDING = 6;
18
15
  var MIN_INPUT_HEIGHT = LINE_HEIGHT + TOP_PADDING + BOTTOM_PADDING;
19
16
  var BUFFER_SIZE = 100;
20
-
21
17
  /**
22
18
  * Component for input in a console session. Handles loading the recent command history
23
19
  */
24
20
  export class ConsoleInput extends PureComponent {
25
21
  constructor(props) {
26
22
  super(props);
27
-
28
23
  _defineProperty(this, "cancelListener", void 0);
29
-
30
24
  _defineProperty(this, "commandContainer", void 0);
31
-
32
25
  _defineProperty(this, "commandEditor", void 0);
33
-
34
26
  _defineProperty(this, "commandHistoryIndex", void 0);
35
-
36
27
  _defineProperty(this, "commandSuggestionContainer", void 0);
37
-
38
28
  _defineProperty(this, "loadingPromise", void 0);
39
-
40
29
  _defineProperty(this, "timestamp", void 0);
41
-
42
30
  _defineProperty(this, "bufferIndex", void 0);
43
-
44
31
  _defineProperty(this, "history", void 0);
45
-
46
32
  _defineProperty(this, "modifiedCommands", void 0);
47
-
48
33
  this.handleWindowResize = this.handleWindowResize.bind(this);
49
34
  this.commandContainer = /*#__PURE__*/React.createRef();
50
35
  this.commandHistoryIndex = null;
51
36
  this.timestamp = Date.now();
52
37
  this.bufferIndex = 0;
53
- this.history = []; // Tracks every command that has been modified by its commandHistoryIndex. Cleared on any command being executed
54
-
38
+ this.history = [];
39
+ // Tracks every command that has been modified by its commandHistoryIndex. Cleared on any command being executed
55
40
  this.modifiedCommands = new Map();
56
41
  this.state = {
57
42
  commandEditorHeight: LINE_HEIGHT,
@@ -59,27 +44,21 @@ export class ConsoleInput extends PureComponent {
59
44
  model: null
60
45
  };
61
46
  }
62
-
63
47
  componentDidMount() {
64
48
  this.initCommandEditor();
65
49
  window.addEventListener('resize', this.handleWindowResize);
66
50
  this.loadMoreHistory();
67
51
  }
68
-
69
52
  componentDidUpdate() {
70
53
  this.layoutEditor();
71
54
  }
72
-
73
55
  componentWillUnmount() {
74
56
  window.removeEventListener('resize', this.handleWindowResize);
75
-
76
57
  if (this.loadingPromise != null) {
77
58
  this.loadingPromise.cancel();
78
59
  }
79
-
80
60
  this.destroyCommandEditor();
81
61
  }
82
-
83
62
  /**
84
63
  * Sets the console text from an external source.
85
64
  * Sets commandHistoryIndex to null since the source is not part of the history
@@ -91,33 +70,27 @@ export class ConsoleInput extends PureComponent {
91
70
  setConsoleText(text) {
92
71
  var focus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
93
72
  var execute = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
94
-
95
73
  if (!text) {
96
74
  return;
97
75
  }
76
+ log.debug('Command received: ', text);
98
77
 
99
- log.debug('Command received: ', text); // Only set the console text if we're not running this command
100
-
78
+ // Only set the console text if we're not running this command
101
79
  if (!execute) {
102
80
  var _this$commandEditor;
103
-
104
81
  // Need to set commandHistoryIndex before value
105
82
  // On value change, modified commands map updates
106
83
  this.commandHistoryIndex = null;
107
84
  (_this$commandEditor = this.commandEditor) === null || _this$commandEditor === void 0 ? void 0 : _this$commandEditor.setValue(text);
108
85
  }
109
-
110
86
  if (focus) {
111
87
  this.focusEnd();
112
88
  }
113
-
114
89
  this.updateDimensions();
115
-
116
90
  if (execute) {
117
91
  this.processCommand(text);
118
92
  }
119
93
  }
120
-
121
94
  initCommandEditor() {
122
95
  var {
123
96
  language,
@@ -159,7 +132,6 @@ export class ConsoleInput extends PureComponent {
159
132
  MonacoUtils.openDocument(this.commandEditor, session);
160
133
  this.commandEditor.onDidChangeModelContent(() => {
161
134
  var _this$commandEditor2;
162
-
163
135
  var value = (_this$commandEditor2 = this.commandEditor) === null || _this$commandEditor2 === void 0 ? void 0 : _this$commandEditor2.getValue();
164
136
  this.modifiedCommands.set(this.commandHistoryIndex, value !== null && value !== void 0 ? value : null);
165
137
  this.updateDimensions();
@@ -174,12 +146,12 @@ export class ConsoleInput extends PureComponent {
174
146
  isFocused: false
175
147
  });
176
148
  });
149
+
177
150
  /**
178
151
  * Register for keydown events to capture the `Enter` key.
179
152
  * 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.
180
153
  * Can't do it in `onDidChangeModelContent` either, since we want to stop the Enter action from modifying the command.
181
154
  */
182
-
183
155
  this.commandEditor.onKeyDown(keyEvent => {
184
156
  var {
185
157
  commandEditor,
@@ -191,46 +163,37 @@ export class ConsoleInput extends PureComponent {
191
163
  lineNumber
192
164
  } = position;
193
165
  var model = commandEditor === null || commandEditor === void 0 ? void 0 : commandEditor.getModel();
194
-
195
166
  if (keyEvent.keyCode === monaco.KeyCode.UpArrow && !this.isSuggestionMenuPopulated() && lineNumber === 1) {
196
167
  if (commandHistoryIndex != null) {
197
168
  this.loadCommand(commandHistoryIndex + 1);
198
169
  } else {
199
170
  this.loadCommand(0);
200
171
  }
201
-
202
172
  this.focusStart();
203
173
  keyEvent.stopPropagation();
204
174
  keyEvent.preventDefault();
205
175
  return;
206
176
  }
207
-
208
177
  if (keyEvent.keyCode === monaco.KeyCode.DownArrow && !this.isSuggestionMenuPopulated() && lineNumber === (model === null || model === void 0 ? void 0 : model.getLineCount())) {
209
178
  if (commandHistoryIndex != null && commandHistoryIndex > 0) {
210
179
  this.loadCommand(commandHistoryIndex - 1);
211
180
  } else {
212
181
  this.loadCommand(null);
213
182
  }
214
-
215
183
  this.focusEnd();
216
184
  keyEvent.stopPropagation();
217
185
  keyEvent.preventDefault();
218
186
  return;
219
187
  }
220
-
221
188
  if (!keyEvent.altKey && !keyEvent.shiftKey && !keyEvent.metaKey) {
222
189
  if (keyEvent.keyCode === monaco.KeyCode.Enter) {
223
190
  if (!this.isSuggestionMenuPopulated()) {
224
191
  var _this$commandEditor3;
225
-
226
192
  keyEvent.stopPropagation();
227
193
  keyEvent.preventDefault();
228
-
229
194
  var _command = (_this$commandEditor3 = this.commandEditor) === null || _this$commandEditor3 === void 0 ? void 0 : _this$commandEditor3.getValue().trim();
230
-
231
195
  if (_command !== undefined) {
232
196
  var _this$commandEditor4;
233
-
234
197
  this.processCommand(_command);
235
198
  (_this$commandEditor4 = this.commandEditor) === null || _this$commandEditor4 === void 0 ? void 0 : _this$commandEditor4.setValue('');
236
199
  }
@@ -238,7 +201,6 @@ export class ConsoleInput extends PureComponent {
238
201
  } else if (keyEvent.keyCode === monaco.KeyCode.Tab) {
239
202
  if (!this.isSuggestionMenuActive()) {
240
203
  var _this$commandEditor5;
241
-
242
204
  keyEvent.stopPropagation();
243
205
  keyEvent.preventDefault();
244
206
  (_this$commandEditor5 = this.commandEditor) === null || _this$commandEditor5 === void 0 ? void 0 : _this$commandEditor5.trigger('Tab key trigger suggestions', 'editor.action.triggerSuggest', {});
@@ -248,9 +210,11 @@ export class ConsoleInput extends PureComponent {
248
210
  }
249
211
  }
250
212
  }
251
- }); // Override the Ctrl+F functionality so that the find window doesn't appear
213
+ });
252
214
 
253
- this.commandEditor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF, // eslint-disable-line no-bitwise
215
+ // Override the Ctrl+F functionality so that the find window doesn't appear
216
+ this.commandEditor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF,
217
+ // eslint-disable-line no-bitwise
254
218
  () => undefined);
255
219
  MonacoUtils.removeConflictingKeybindings(this.commandEditor);
256
220
  MonacoUtils.registerPasteHandler(this.commandEditor);
@@ -260,54 +224,40 @@ export class ConsoleInput extends PureComponent {
260
224
  model: this.commandEditor.getModel()
261
225
  });
262
226
  }
263
-
264
227
  destroyCommandEditor() {
265
228
  var {
266
229
  session
267
230
  } = this.props;
268
-
269
231
  if (this.commandEditor) {
270
232
  MonacoUtils.closeDocument(this.commandEditor, session);
271
233
  this.commandEditor.dispose();
272
234
  this.commandEditor = undefined;
273
235
  }
274
236
  }
275
-
276
237
  handleWindowResize() {
277
238
  this.updateDimensions();
278
239
  }
279
-
280
240
  isSuggestionMenuActive() {
281
241
  var _ref;
282
-
283
242
  if (!this.commandSuggestionContainer) {
284
243
  var _this$commandEditor6, _this$commandEditor6$;
285
-
286
244
  this.commandSuggestionContainer = (_this$commandEditor6 = this.commandEditor) === null || _this$commandEditor6 === void 0 ? void 0 : (_this$commandEditor6$ = _this$commandEditor6.getDomNode()) === null || _this$commandEditor6$ === void 0 ? void 0 : _this$commandEditor6$.querySelector('.suggest-widget');
287
245
  }
288
-
289
246
  return (_ref = this.commandSuggestionContainer && this.commandSuggestionContainer.classList.contains('visible')) !== null && _ref !== void 0 ? _ref : false;
290
247
  }
291
-
292
248
  isSuggestionMenuPopulated() {
293
249
  var _this$commandSuggesti, _this$commandSuggesti2, _this$commandSuggesti3;
294
-
295
250
  return this.isSuggestionMenuActive() && ((_this$commandSuggesti = (_this$commandSuggesti2 = this.commandSuggestionContainer) === null || _this$commandSuggesti2 === void 0 ? void 0 : (_this$commandSuggesti3 = _this$commandSuggesti2.querySelector('.monaco-list-rows')) === null || _this$commandSuggesti3 === void 0 ? void 0 : _this$commandSuggesti3.childElementCount) !== null && _this$commandSuggesti !== void 0 ? _this$commandSuggesti : 0) > 0;
296
251
  }
297
-
298
252
  focus() {
299
253
  var _this$commandEditor7;
300
-
301
254
  (_this$commandEditor7 = this.commandEditor) === null || _this$commandEditor7 === void 0 ? void 0 : _this$commandEditor7.focus();
302
255
  }
303
-
304
256
  focusStart() {
305
257
  var _this$commandEditor8, _this$commandEditor9, _this$commandEditor10, _this$commandEditor11, _this$commandEditor12;
306
-
307
258
  var model = (_this$commandEditor8 = this.commandEditor) === null || _this$commandEditor8 === void 0 ? void 0 : _this$commandEditor8.getModel();
308
259
  assertNotNull(model);
309
260
  var column = model.getLineLength(1) + 1; // Length of 1st line
310
-
311
261
  var firstCharTop = (_this$commandEditor9 = this.commandEditor) === null || _this$commandEditor9 === void 0 ? void 0 : _this$commandEditor9.getTopForPosition(1, column);
312
262
  assertNotNull(firstCharTop);
313
263
  (_this$commandEditor10 = this.commandEditor) === null || _this$commandEditor10 === void 0 ? void 0 : _this$commandEditor10.setPosition({
@@ -317,10 +267,8 @@ export class ConsoleInput extends PureComponent {
317
267
  (_this$commandEditor11 = this.commandEditor) === null || _this$commandEditor11 === void 0 ? void 0 : _this$commandEditor11.setScrollTop(firstCharTop);
318
268
  (_this$commandEditor12 = this.commandEditor) === null || _this$commandEditor12 === void 0 ? void 0 : _this$commandEditor12.focus();
319
269
  }
320
-
321
270
  focusEnd() {
322
271
  var _this$commandEditor13, _this$commandEditor14, _this$commandEditor15, _this$commandEditor16, _this$commandEditor17;
323
-
324
272
  var model = (_this$commandEditor13 = this.commandEditor) === null || _this$commandEditor13 === void 0 ? void 0 : _this$commandEditor13.getModel();
325
273
  assertNotNull(model);
326
274
  var lastLine = model.getLineCount();
@@ -334,53 +282,43 @@ export class ConsoleInput extends PureComponent {
334
282
  (_this$commandEditor16 = this.commandEditor) === null || _this$commandEditor16 === void 0 ? void 0 : _this$commandEditor16.setScrollTop(lastCharTop);
335
283
  (_this$commandEditor17 = this.commandEditor) === null || _this$commandEditor17 === void 0 ? void 0 : _this$commandEditor17.focus();
336
284
  }
337
-
338
285
  clear() {
339
286
  var _this$commandEditor18, _this$commandEditor19, _this$commandEditor20;
340
-
341
287
  (_this$commandEditor18 = this.commandEditor) === null || _this$commandEditor18 === void 0 ? void 0 : _this$commandEditor18.focus();
342
288
  (_this$commandEditor19 = this.commandEditor) === null || _this$commandEditor19 === void 0 ? void 0 : (_this$commandEditor20 = _this$commandEditor19.getModel()) === null || _this$commandEditor20 === void 0 ? void 0 : _this$commandEditor20.setValue('');
343
289
  this.commandHistoryIndex = null;
344
290
  }
345
-
346
291
  layoutEditor() {
347
292
  if (this.commandEditor) {
348
293
  this.commandEditor.layout();
349
294
  }
350
295
  }
296
+
351
297
  /**
352
298
  * Loads the given command from history
353
299
  * If edits have been made to the command since last run command, loads the modified version
354
300
  * @param index The index to load. Null to load command started in the editor and not in the history
355
301
  */
356
-
357
-
358
302
  loadCommand(index) {
359
303
  var _this$commandEditor21, _this$commandEditor22;
360
-
361
304
  if (index === null || index >= this.history.length) {
362
305
  return;
363
306
  }
364
-
365
307
  var modifiedValue = this.modifiedCommands.get(index);
366
308
  var historyValue = index === null ? '' : this.history[this.history.length - index - 1];
367
309
  this.commandHistoryIndex = index;
368
310
  (_this$commandEditor21 = this.commandEditor) === null || _this$commandEditor21 === void 0 ? void 0 : (_this$commandEditor22 = _this$commandEditor21.getModel()) === null || _this$commandEditor22 === void 0 ? void 0 : _this$commandEditor22.setValue(modifiedValue !== null && modifiedValue !== void 0 ? modifiedValue : historyValue);
369
-
370
311
  if (index !== null && index > this.history.length - BUFFER_SIZE) {
371
312
  this.loadMoreHistory();
372
313
  }
373
314
  }
374
-
375
315
  loadMoreHistory() {
376
316
  var _this = this;
377
-
378
317
  return _asyncToGenerator(function* () {
379
318
  try {
380
319
  if (_this.loadingPromise != null || _this.bufferIndex == null) {
381
320
  return;
382
321
  }
383
-
384
322
  var {
385
323
  commandHistoryStorage,
386
324
  language,
@@ -396,13 +334,11 @@ export class ConsoleInput extends PureComponent {
396
334
  _this.loadingPromise = PromiseUtils.makeCancelable(table.getViewportData(), () => table.close());
397
335
  var viewportData = yield _this.loadingPromise;
398
336
  _this.bufferIndex += BUFFER_SIZE;
399
-
400
337
  if (_this.bufferIndex >= table.size) {
401
338
  // We've loaded the full history, no need to load any more
402
339
  _this.bufferIndex = null;
403
340
  }
404
-
405
- _this.history = [...(viewportData === null || viewportData === void 0 ? void 0 : viewportData.items.filter((_ref2, pos, arr) => {
341
+ _this.history = [...viewportData.items.filter((_ref2, pos, arr) => {
406
342
  var {
407
343
  name
408
344
  } = _ref2;
@@ -412,50 +348,44 @@ export class ConsoleInput extends PureComponent {
412
348
  name
413
349
  } = _ref3;
414
350
  return name;
415
- }).reverse()), ..._this.history];
351
+ }).reverse(), ..._this.history];
416
352
  _this.loadingPromise = undefined;
417
353
  table.close();
418
354
  } catch (err) {
419
355
  _this.loadingPromise = undefined;
420
-
421
356
  if (PromiseUtils.isCanceled(err)) {
422
357
  log.debug2('Promise canceled, not loading history');
423
358
  return;
424
359
  }
425
-
426
360
  log.error('Error fetching history', err);
427
361
  }
428
362
  })();
429
363
  }
430
-
431
364
  processCommand(command) {
432
365
  this.commandHistoryIndex = null;
433
366
  this.modifiedCommands.clear();
434
367
  assertNotNull(command);
435
-
436
368
  if (command !== '' && (this.history.length === 0 || command !== this.history[this.history.length - 1])) {
437
369
  this.history.push(command);
438
370
  }
439
-
440
371
  this.updateDimensions();
441
372
  var {
442
373
  onSubmit
443
374
  } = this.props;
444
375
  onSubmit(command);
445
376
  }
446
-
447
377
  updateDimensions() {
448
378
  if (!this.commandEditor) {
449
379
  return;
450
380
  }
451
-
452
381
  var {
453
382
  maxHeight
454
383
  } = this.props;
455
384
  assertNotNull(maxHeight);
456
385
  var contentHeight = this.commandEditor.getContentHeight();
457
- var commandEditorHeight = Math.max(Math.min(contentHeight, maxHeight), MIN_INPUT_HEIGHT); // Only show the overview ruler (markings overlapping sroll bar area) if the scrollbar will show
386
+ var commandEditorHeight = Math.max(Math.min(contentHeight, maxHeight), MIN_INPUT_HEIGHT);
458
387
 
388
+ // Only show the overview ruler (markings overlapping sroll bar area) if the scrollbar will show
459
389
  var shouldScroll = contentHeight > commandEditorHeight;
460
390
  var options = {
461
391
  overviewRulerLanes: shouldScroll ? undefined : 0
@@ -464,12 +394,10 @@ export class ConsoleInput extends PureComponent {
464
394
  commandEditorHeight
465
395
  }, () => {
466
396
  var _this$commandEditor23, _this$commandEditor24;
467
-
468
397
  (_this$commandEditor23 = this.commandEditor) === null || _this$commandEditor23 === void 0 ? void 0 : _this$commandEditor23.updateOptions(options);
469
398
  (_this$commandEditor24 = this.commandEditor) === null || _this$commandEditor24 === void 0 ? void 0 : _this$commandEditor24.layout();
470
399
  });
471
400
  }
472
-
473
401
  render() {
474
402
  var {
475
403
  disabled,
@@ -501,16 +429,12 @@ export class ConsoleInput extends PureComponent {
501
429
  session: session
502
430
  })));
503
431
  }
504
-
505
432
  }
506
-
507
433
  _defineProperty(ConsoleInput, "defaultProps", {
508
434
  maxHeight: LINE_HEIGHT * 10,
509
435
  scope: null,
510
436
  disabled: false
511
437
  });
512
-
513
438
  _defineProperty(ConsoleInput, "INPUT_CLASS_NAME", 'console-input');
514
-
515
439
  export default ConsoleInput;
516
440
  //# sourceMappingURL=ConsoleInput.js.map
@@ -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","keyCode","KeyCode","UpArrow","isSuggestionMenuPopulated","loadCommand","focusStart","stopPropagation","preventDefault","DownArrow","getLineCount","altKey","shiftKey","metaKey","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.keyCode === monaco.KeyCode.UpArrow &&\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.keyCode === monaco.KeyCode.DownArrow &&\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","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","keyCode","KeyCode","UpArrow","isSuggestionMenuPopulated","loadCommand","focusStart","stopPropagation","preventDefault","DownArrow","getLineCount","altKey","shiftKey","metaKey","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.keyCode === monaco.KeyCode.UpArrow &&\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.keyCode === monaco.KeyCode.DownArrow &&\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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"}