@deephaven/console 0.22.3-beta.15 → 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.
- package/dist/Console.d.ts +3 -3
- package/dist/Console.d.ts.map +1 -1
- package/dist/Console.js +9 -114
- package/dist/Console.js.map +1 -1
- package/dist/ConsoleInput.js +14 -90
- package/dist/ConsoleInput.js.map +1 -1
- package/dist/ConsoleMenu.js +6 -25
- package/dist/ConsoleMenu.js.map +1 -1
- package/dist/ConsolePropTypes.js.map +1 -1
- package/dist/ConsoleShortcuts.js +1 -1
- package/dist/ConsoleShortcuts.js.map +1 -1
- package/dist/ConsoleStatusBar.js +0 -16
- package/dist/ConsoleStatusBar.js.map +1 -1
- package/dist/HeapUsage.d.ts +1 -1
- package/dist/HeapUsage.d.ts.map +1 -1
- package/dist/HeapUsage.js +2 -18
- package/dist/HeapUsage.js.map +1 -1
- package/dist/StoragePropTypes.js.map +1 -1
- package/dist/command-history/CommandHistory.js +1 -49
- package/dist/command-history/CommandHistory.js.map +1 -1
- package/dist/command-history/CommandHistoryActions.js +0 -6
- package/dist/command-history/CommandHistoryActions.js.map +1 -1
- package/dist/command-history/CommandHistoryItem.d.ts +4 -4
- package/dist/command-history/CommandHistoryItem.d.ts.map +1 -1
- package/dist/command-history/CommandHistoryItem.js +3 -6
- package/dist/command-history/CommandHistoryItem.js.map +1 -1
- package/dist/command-history/CommandHistoryItemTooltip.d.ts +1 -1
- package/dist/command-history/CommandHistoryItemTooltip.d.ts.map +1 -1
- package/dist/command-history/CommandHistoryItemTooltip.js +3 -28
- package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -1
- package/dist/command-history/CommandHistoryViewportUpdater.js +0 -3
- package/dist/command-history/CommandHistoryViewportUpdater.js.map +1 -1
- package/dist/command-history/index.js.map +1 -1
- package/dist/common/Code.js +2 -11
- package/dist/common/Code.js.map +1 -1
- package/dist/common/ConsoleConstants.js +0 -2
- package/dist/common/ConsoleConstants.js.map +1 -1
- package/dist/common/ConsoleUtils.js +4 -19
- package/dist/common/ConsoleUtils.js.map +1 -1
- package/dist/common/ObjectIcon.d.ts +1 -1
- package/dist/common/ObjectIcon.d.ts.map +1 -1
- package/dist/common/ObjectIcon.js +2 -8
- package/dist/common/ObjectIcon.js.map +1 -1
- package/dist/common/index.js.map +1 -1
- package/dist/console-history/ConsoleHistory.js +0 -8
- package/dist/console-history/ConsoleHistory.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItem.js +2 -25
- package/dist/console-history/ConsoleHistoryItem.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItemResult.d.ts +6 -6
- package/dist/console-history/ConsoleHistoryItemResult.d.ts.map +1 -1
- package/dist/console-history/ConsoleHistoryItemResult.js +2 -4
- package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -1
- package/dist/console-history/ConsoleHistoryResultErrorMessage.js +0 -22
- package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -1
- package/dist/console-history/ConsoleHistoryResultInProgress.js +0 -13
- package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -1
- package/dist/console-history/index.js.map +1 -1
- package/dist/csv/CsvFormats.js +0 -9
- package/dist/csv/CsvFormats.js.map +1 -1
- package/dist/csv/CsvInputBar.js +18 -51
- package/dist/csv/CsvInputBar.js.map +1 -1
- package/dist/csv/CsvOverlay.d.ts +2 -2
- package/dist/csv/CsvOverlay.d.ts.map +1 -1
- package/dist/csv/CsvOverlay.js +1 -41
- package/dist/csv/CsvOverlay.js.map +1 -1
- package/dist/csv/CsvParser.js +10 -73
- package/dist/csv/CsvParser.js.map +1 -1
- package/dist/csv/CsvTypeParser.js +15 -85
- package/dist/csv/CsvTypeParser.js.map +1 -1
- package/dist/csv/NewTableColumnTypes.js +0 -9
- package/dist/csv/NewTableColumnTypes.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/log/LogLevel.js.map +1 -1
- package/dist/log/LogLevelMenuItem.js +0 -5
- package/dist/log/LogLevelMenuItem.js.map +1 -1
- package/dist/log/LogView.js +16 -106
- package/dist/log/LogView.js.map +1 -1
- package/dist/monaco/MonacoCompletionProvider.js +2 -14
- package/dist/monaco/MonacoCompletionProvider.js.map +1 -1
- package/dist/monaco/MonacoUtils.d.ts.map +1 -1
- package/dist/monaco/MonacoUtils.js +21 -49
- package/dist/monaco/MonacoUtils.js.map +1 -1
- package/dist/monaco/index.js.map +1 -1
- package/dist/monaco/lang/db.d.ts.map +1 -1
- package/dist/monaco/lang/db.js +22 -13
- package/dist/monaco/lang/db.js.map +1 -1
- package/dist/monaco/lang/groovy.d.ts.map +1 -1
- package/dist/monaco/lang/groovy.js +28 -15
- package/dist/monaco/lang/groovy.js.map +1 -1
- package/dist/monaco/lang/log.js +1 -0
- package/dist/monaco/lang/log.js.map +1 -1
- package/dist/monaco/lang/python.d.ts.map +1 -1
- package/dist/monaco/lang/python.js +30 -16
- package/dist/monaco/lang/python.js.map +1 -1
- package/dist/monaco/lang/scala.js +26 -13
- package/dist/monaco/lang/scala.js.map +1 -1
- package/dist/notebook/Editor.js +2 -21
- package/dist/notebook/Editor.js.map +1 -1
- package/dist/notebook/ScriptEditor.d.ts +1 -1
- package/dist/notebook/ScriptEditor.d.ts.map +1 -1
- package/dist/notebook/ScriptEditor.js +0 -57
- package/dist/notebook/ScriptEditor.js.map +1 -1
- package/dist/notebook/ScriptEditorUtils.js +1 -7
- package/dist/notebook/ScriptEditorUtils.js.map +1 -1
- package/package.json +11 -11
|
@@ -1,198 +1,143 @@
|
|
|
1
1
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
2
|
-
|
|
3
2
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
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 { assertNotNull } from '@deephaven/utils';
|
|
8
|
-
import Papa from 'papaparse';
|
|
9
|
-
|
|
5
|
+
import Papa from 'papaparse';
|
|
6
|
+
// Intentionally using isNaN rather than Number.isNaN
|
|
10
7
|
/* eslint-disable no-restricted-globals */
|
|
11
|
-
|
|
12
8
|
import NewTableColumnTypes from "./NewTableColumnTypes.js"; // Initially column types start al unknown
|
|
13
|
-
|
|
14
9
|
var UNKNOWN = 'unknown';
|
|
15
10
|
var MAX_INT = 2147483647;
|
|
16
11
|
var MIN_INT = -2147483648;
|
|
17
12
|
var DATE_TIME_REGEX = /^[0-9]{4}-[0-1][0-9]-[0-3][0-9][ T][0-2][0-9]:[0-5][0-9]:[0-6][0-9](?:\.[0-9]{1,9})?(?: [a-zA-Z]+)?$/;
|
|
18
13
|
var LOCAL_TIME_REGEX = /^([0-9]+T)?([0-9]+):([0-9]+)(:[0-9]+)?(?:\.[0-9]{1,9})?$/;
|
|
14
|
+
|
|
19
15
|
/**
|
|
20
16
|
* Determines the type of each column in a CSV file by parsing it and looking at every value.
|
|
21
17
|
*/
|
|
22
|
-
|
|
23
18
|
class CsvTypeParser {
|
|
24
19
|
static determineType(value, type, nullString) {
|
|
25
20
|
if (!value || value === nullString) {
|
|
26
21
|
// A null tells us nothing about the type
|
|
27
22
|
return type;
|
|
28
23
|
}
|
|
29
|
-
|
|
30
24
|
switch (type) {
|
|
31
25
|
case NewTableColumnTypes.STRING:
|
|
32
26
|
// Strings never get promoted
|
|
33
27
|
return NewTableColumnTypes.STRING;
|
|
34
|
-
|
|
35
28
|
case NewTableColumnTypes.INTEGER:
|
|
36
29
|
return CsvTypeParser.checkInteger(value);
|
|
37
|
-
|
|
38
30
|
case NewTableColumnTypes.LONG:
|
|
39
31
|
return CsvTypeParser.checkLong(value);
|
|
40
|
-
|
|
41
32
|
case NewTableColumnTypes.DOUBLE:
|
|
42
33
|
return CsvTypeParser.checkDouble(value);
|
|
43
|
-
|
|
44
34
|
case NewTableColumnTypes.BOOLEAN:
|
|
45
35
|
return CsvTypeParser.checkBoolean(value);
|
|
46
|
-
|
|
47
36
|
case NewTableColumnTypes.DATE_TIME:
|
|
48
37
|
return CsvTypeParser.checkDateTime(value);
|
|
49
|
-
|
|
50
38
|
case NewTableColumnTypes.LOCAL_TIME:
|
|
51
39
|
return CsvTypeParser.checkLocalTime(value);
|
|
52
|
-
|
|
53
40
|
default:
|
|
54
41
|
return CsvTypeParser.getTypeFromUnknown(value);
|
|
55
42
|
}
|
|
56
|
-
}
|
|
57
|
-
|
|
43
|
+
}
|
|
58
44
|
|
|
45
|
+
// Allows for cusomt rules in addition to isNaN
|
|
59
46
|
static isNotParsableNumber(s) {
|
|
60
47
|
return isNaN(s) || s === 'Infinity' || s === '-Infinity';
|
|
61
48
|
}
|
|
62
|
-
|
|
63
49
|
static checkInteger(value) {
|
|
64
50
|
var noCommas = value.replace(/,/g, '');
|
|
65
|
-
|
|
66
51
|
if (CsvTypeParser.isNotParsableNumber(noCommas)) {
|
|
67
52
|
return NewTableColumnTypes.STRING;
|
|
68
53
|
}
|
|
69
|
-
|
|
70
54
|
return CsvTypeParser.getNumberType(noCommas);
|
|
71
55
|
}
|
|
72
|
-
|
|
73
56
|
static checkLong(value) {
|
|
74
57
|
var noCommas = value.replace(/,/g, '');
|
|
75
|
-
|
|
76
58
|
if (CsvTypeParser.isNotParsableNumber(noCommas)) {
|
|
77
59
|
return NewTableColumnTypes.STRING;
|
|
78
60
|
}
|
|
79
|
-
|
|
80
61
|
if (noCommas.includes('.')) {
|
|
81
62
|
return NewTableColumnTypes.DOUBLE;
|
|
82
63
|
}
|
|
83
|
-
|
|
84
64
|
return NewTableColumnTypes.LONG;
|
|
85
65
|
}
|
|
86
|
-
|
|
87
66
|
static checkDouble(value) {
|
|
88
67
|
var noCommas = value.replace(/,/g, '');
|
|
89
|
-
|
|
90
68
|
if (CsvTypeParser.isNotParsableNumber(noCommas)) {
|
|
91
69
|
return NewTableColumnTypes.STRING;
|
|
92
70
|
}
|
|
93
|
-
|
|
94
71
|
return NewTableColumnTypes.DOUBLE;
|
|
95
72
|
}
|
|
96
|
-
|
|
97
73
|
static checkBoolean(value) {
|
|
98
74
|
var lower = value.toLowerCase();
|
|
99
|
-
|
|
100
75
|
if (lower === 'true' || lower === 'false') {
|
|
101
76
|
return NewTableColumnTypes.BOOLEAN;
|
|
102
77
|
}
|
|
103
|
-
|
|
104
78
|
return NewTableColumnTypes.STRING;
|
|
105
79
|
}
|
|
106
|
-
|
|
107
80
|
static checkDateTime(value) {
|
|
108
81
|
if (DATE_TIME_REGEX.test(value)) {
|
|
109
82
|
return NewTableColumnTypes.DATE_TIME;
|
|
110
83
|
}
|
|
111
|
-
|
|
112
84
|
return NewTableColumnTypes.STRING;
|
|
113
85
|
}
|
|
114
|
-
|
|
115
86
|
static checkLocalTime(value) {
|
|
116
87
|
if (LOCAL_TIME_REGEX.test(value)) {
|
|
117
88
|
return NewTableColumnTypes.LOCAL_TIME;
|
|
118
89
|
}
|
|
119
|
-
|
|
120
90
|
return NewTableColumnTypes.STRING;
|
|
121
91
|
}
|
|
122
|
-
|
|
123
92
|
static getTypeFromUnknown(value) {
|
|
124
93
|
var noCommas = value.replace(/,/g, '');
|
|
125
|
-
|
|
126
94
|
if (CsvTypeParser.isNotParsableNumber(noCommas)) {
|
|
127
95
|
var lower = value.toLowerCase();
|
|
128
|
-
|
|
129
96
|
if (lower === 'true' || lower === 'false') {
|
|
130
97
|
return NewTableColumnTypes.BOOLEAN;
|
|
131
98
|
}
|
|
132
|
-
|
|
133
99
|
if (DATE_TIME_REGEX.test(value) && value.includes(':')) {
|
|
134
100
|
return NewTableColumnTypes.DATE_TIME;
|
|
135
101
|
}
|
|
136
|
-
|
|
137
102
|
if (LOCAL_TIME_REGEX.test(value)) {
|
|
138
103
|
return NewTableColumnTypes.LOCAL_TIME;
|
|
139
104
|
}
|
|
140
|
-
|
|
141
105
|
return NewTableColumnTypes.STRING;
|
|
142
106
|
}
|
|
143
|
-
|
|
144
107
|
return CsvTypeParser.getNumberType(noCommas);
|
|
145
108
|
}
|
|
146
|
-
|
|
147
109
|
static getNumberType(value) {
|
|
148
110
|
if (value.includes('.')) {
|
|
149
111
|
return NewTableColumnTypes.DOUBLE;
|
|
150
|
-
}
|
|
151
|
-
|
|
112
|
+
}
|
|
152
113
|
|
|
114
|
+
// Fast length check
|
|
153
115
|
var maxIntLength = value.startsWith('-') ? 11 : 10;
|
|
154
|
-
|
|
155
116
|
if (value.length > maxIntLength) {
|
|
156
117
|
return NewTableColumnTypes.LONG;
|
|
157
|
-
}
|
|
158
|
-
|
|
118
|
+
}
|
|
159
119
|
|
|
120
|
+
// Slower parseInt check
|
|
160
121
|
var intValue = parseInt(value, 10);
|
|
161
|
-
|
|
162
122
|
if (intValue > MAX_INT || intValue < MIN_INT) {
|
|
163
123
|
return NewTableColumnTypes.LONG;
|
|
164
124
|
}
|
|
165
|
-
|
|
166
125
|
return NewTableColumnTypes.INTEGER;
|
|
167
126
|
}
|
|
168
|
-
|
|
169
127
|
constructor(onFileCompleted, file, readHeaders, parentConfig, nullString, onProgress, onError, totalChunks, isZip, shouldTrim) {
|
|
170
128
|
_defineProperty(this, "onFileCompleted", void 0);
|
|
171
|
-
|
|
172
129
|
_defineProperty(this, "file", void 0);
|
|
173
|
-
|
|
174
130
|
_defineProperty(this, "readHeaders", void 0);
|
|
175
|
-
|
|
176
131
|
_defineProperty(this, "nullString", void 0);
|
|
177
|
-
|
|
178
132
|
_defineProperty(this, "onProgress", void 0);
|
|
179
|
-
|
|
180
133
|
_defineProperty(this, "onError", void 0);
|
|
181
|
-
|
|
182
134
|
_defineProperty(this, "types", void 0);
|
|
183
|
-
|
|
184
135
|
_defineProperty(this, "chunks", void 0);
|
|
185
|
-
|
|
186
136
|
_defineProperty(this, "totalChunks", void 0);
|
|
187
|
-
|
|
188
137
|
_defineProperty(this, "isZip", void 0);
|
|
189
|
-
|
|
190
138
|
_defineProperty(this, "shouldTrim", void 0);
|
|
191
|
-
|
|
192
139
|
_defineProperty(this, "zipProgress", void 0);
|
|
193
|
-
|
|
194
140
|
_defineProperty(this, "config", void 0);
|
|
195
|
-
|
|
196
141
|
this.onFileCompleted = onFileCompleted;
|
|
197
142
|
this.file = file;
|
|
198
143
|
this.readHeaders = readHeaders;
|
|
@@ -214,34 +159,29 @@ class CsvTypeParser {
|
|
|
214
159
|
complete: this.handleComplete
|
|
215
160
|
});
|
|
216
161
|
}
|
|
217
|
-
|
|
218
162
|
parse() {
|
|
219
|
-
var toParse = this.isZip ? this.file.nodeStream(
|
|
163
|
+
var toParse = this.isZip ? this.file.nodeStream(
|
|
164
|
+
// JsZip types are incorrect, thus the funny casting
|
|
220
165
|
// Actual parameter is 'nodebuffer'
|
|
221
166
|
'nodebuffer', this.handleNodeUpdate) : this.file;
|
|
222
167
|
Papa.parse(toParse, this.config);
|
|
223
168
|
}
|
|
224
|
-
|
|
225
169
|
handleChunk(result, parser) {
|
|
226
170
|
var {
|
|
227
171
|
data
|
|
228
172
|
} = result;
|
|
229
|
-
|
|
230
173
|
if (!this.types) {
|
|
231
174
|
if (data == null || data.length === 0) {
|
|
232
175
|
parser.abort();
|
|
233
176
|
this.onError('Error parsing CSV: no data in file.');
|
|
234
177
|
return;
|
|
235
178
|
}
|
|
236
|
-
|
|
237
179
|
this.types = new Array(data[0].length).fill(UNKNOWN);
|
|
238
|
-
|
|
239
180
|
if (this.readHeaders) {
|
|
240
181
|
// If headers are being read from the file, remove them from type analysis
|
|
241
182
|
data = data.slice(1);
|
|
242
183
|
}
|
|
243
184
|
}
|
|
244
|
-
|
|
245
185
|
assertNotNull(this.types);
|
|
246
186
|
var cloneTypes = [...this.types];
|
|
247
187
|
data.forEach(row => {
|
|
@@ -249,55 +189,45 @@ class CsvTypeParser {
|
|
|
249
189
|
for (var i = 0; i < cloneTypes.length; i += 1) {
|
|
250
190
|
cloneTypes[i] = CsvTypeParser.determineType(this.shouldTrim ? row[i].trim() : row[i], cloneTypes[i], this.nullString);
|
|
251
191
|
}
|
|
252
|
-
|
|
253
192
|
this.types = cloneTypes;
|
|
254
193
|
} else {
|
|
255
194
|
parser.abort();
|
|
256
195
|
this.onError("Error parsing CSV: Insufficient data in row.\nExpected length ".concat(cloneTypes.length, " but found ").concat(row.length, ".\nRow = ").concat(row));
|
|
257
196
|
}
|
|
258
197
|
});
|
|
259
|
-
this.chunks += 1;
|
|
260
|
-
|
|
198
|
+
this.chunks += 1;
|
|
199
|
+
// 50 because the type parsing accounts for 50% of the parsing
|
|
261
200
|
var progress = 0;
|
|
262
|
-
|
|
263
201
|
if (this.totalChunks > 0) {
|
|
264
202
|
progress = Math.round(this.chunks / this.totalChunks * 50);
|
|
265
203
|
} else {
|
|
266
204
|
progress = Math.round(this.zipProgress / 2);
|
|
267
205
|
}
|
|
268
|
-
|
|
269
206
|
var isCancelled = this.onProgress(progress);
|
|
270
|
-
|
|
271
207
|
if (isCancelled) {
|
|
272
208
|
parser.abort();
|
|
273
209
|
}
|
|
274
210
|
}
|
|
275
|
-
|
|
276
211
|
handleComplete(results) {
|
|
277
212
|
var {
|
|
278
213
|
types,
|
|
279
214
|
onFileCompleted
|
|
280
|
-
} = this;
|
|
281
|
-
|
|
215
|
+
} = this;
|
|
216
|
+
// results is undefined for a succesful parse, but has meta data for an abort
|
|
282
217
|
assertNotNull(types);
|
|
283
|
-
|
|
284
218
|
if (results == null || !results.meta.aborted) {
|
|
285
219
|
onFileCompleted(types.map(type => type === UNKNOWN ? NewTableColumnTypes.STRING : type));
|
|
286
220
|
}
|
|
287
221
|
}
|
|
288
|
-
|
|
289
222
|
handleError(error) {
|
|
290
223
|
var {
|
|
291
224
|
onError
|
|
292
225
|
} = this;
|
|
293
226
|
onError(error);
|
|
294
227
|
}
|
|
295
|
-
|
|
296
228
|
handleNodeUpdate(metadata) {
|
|
297
229
|
this.zipProgress = metadata.percent;
|
|
298
230
|
}
|
|
299
|
-
|
|
300
231
|
}
|
|
301
|
-
|
|
302
232
|
export default CsvTypeParser;
|
|
303
233
|
//# sourceMappingURL=CsvTypeParser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CsvTypeParser.js","names":["assertNotNull","Papa","NewTableColumnTypes","UNKNOWN","MAX_INT","MIN_INT","DATE_TIME_REGEX","LOCAL_TIME_REGEX","CsvTypeParser","determineType","value","type","nullString","STRING","INTEGER","checkInteger","LONG","checkLong","DOUBLE","checkDouble","BOOLEAN","checkBoolean","DATE_TIME","checkDateTime","LOCAL_TIME","checkLocalTime","getTypeFromUnknown","isNotParsableNumber","s","isNaN","noCommas","replace","getNumberType","includes","lower","toLowerCase","test","maxIntLength","startsWith","length","intValue","parseInt","constructor","onFileCompleted","file","readHeaders","parentConfig","onProgress","onError","totalChunks","isZip","shouldTrim","chunks","zipProgress","handleChunk","bind","handleComplete","handleError","handleNodeUpdate","config","error","chunk","complete","parse","toParse","nodeStream","result","parser","data","types","abort","Array","fill","slice","cloneTypes","forEach","row","i","trim","progress","Math","round","isCancelled","results","meta","aborted","map","metadata","percent"],"sources":["../../src/csv/CsvTypeParser.ts"],"sourcesContent":["import type { JSZipObject } from 'jszip';\nimport { assertNotNull } from '@deephaven/utils';\nimport Papa, { Parser, ParseResult, ParseLocalConfig } from 'papaparse';\n// Intentionally using isNaN rather than Number.isNaN\n/* eslint-disable no-restricted-globals */\nimport NewTableColumnTypes from './NewTableColumnTypes';\n\n// Initially column types start al unknown\nconst UNKNOWN = 'unknown';\n\nconst MAX_INT = 2147483647;\nconst MIN_INT = -2147483648;\n\nconst DATE_TIME_REGEX = /^[0-9]{4}-[0-1][0-9]-[0-3][0-9][ T][0-2][0-9]:[0-5][0-9]:[0-6][0-9](?:\\.[0-9]{1,9})?(?: [a-zA-Z]+)?$/;\nconst LOCAL_TIME_REGEX = /^([0-9]+T)?([0-9]+):([0-9]+)(:[0-9]+)?(?:\\.[0-9]{1,9})?$/;\n\n/**\n * Determines the type of each column in a CSV file by parsing it and looking at every value.\n */\nclass CsvTypeParser {\n static determineType(\n value: string,\n type: string,\n nullString: string | null\n ): string {\n if (!value || value === nullString) {\n // A null tells us nothing about the type\n return type;\n }\n\n switch (type) {\n case NewTableColumnTypes.STRING:\n // Strings never get promoted\n return NewTableColumnTypes.STRING;\n case NewTableColumnTypes.INTEGER:\n return CsvTypeParser.checkInteger(value);\n case NewTableColumnTypes.LONG:\n return CsvTypeParser.checkLong(value);\n case NewTableColumnTypes.DOUBLE:\n return CsvTypeParser.checkDouble(value);\n case NewTableColumnTypes.BOOLEAN:\n return CsvTypeParser.checkBoolean(value);\n case NewTableColumnTypes.DATE_TIME:\n return CsvTypeParser.checkDateTime(value);\n case NewTableColumnTypes.LOCAL_TIME:\n return CsvTypeParser.checkLocalTime(value);\n default:\n return CsvTypeParser.getTypeFromUnknown(value);\n }\n }\n\n // Allows for cusomt rules in addition to isNaN\n static isNotParsableNumber(s: string): boolean {\n return (\n isNaN((s as unknown) as number) || s === 'Infinity' || s === '-Infinity'\n );\n }\n\n static checkInteger(value: string): string {\n const noCommas = value.replace(/,/g, '');\n if (CsvTypeParser.isNotParsableNumber(noCommas)) {\n return NewTableColumnTypes.STRING;\n }\n\n return CsvTypeParser.getNumberType(noCommas);\n }\n\n static checkLong(value: string): string {\n const noCommas = value.replace(/,/g, '');\n if (CsvTypeParser.isNotParsableNumber(noCommas)) {\n return NewTableColumnTypes.STRING;\n }\n\n if (noCommas.includes('.')) {\n return NewTableColumnTypes.DOUBLE;\n }\n\n return NewTableColumnTypes.LONG;\n }\n\n static checkDouble(value: string): string {\n const noCommas = value.replace(/,/g, '');\n if (CsvTypeParser.isNotParsableNumber(noCommas)) {\n return NewTableColumnTypes.STRING;\n }\n\n return NewTableColumnTypes.DOUBLE;\n }\n\n static checkBoolean(value: string): string {\n const lower = value.toLowerCase();\n if (lower === 'true' || lower === 'false') {\n return NewTableColumnTypes.BOOLEAN;\n }\n return NewTableColumnTypes.STRING;\n }\n\n static checkDateTime(value: string): string {\n if (DATE_TIME_REGEX.test(value)) {\n return NewTableColumnTypes.DATE_TIME;\n }\n\n return NewTableColumnTypes.STRING;\n }\n\n static checkLocalTime(value: string): string {\n if (LOCAL_TIME_REGEX.test(value)) {\n return NewTableColumnTypes.LOCAL_TIME;\n }\n\n return NewTableColumnTypes.STRING;\n }\n\n static getTypeFromUnknown(value: string): string {\n const noCommas = value.replace(/,/g, '');\n if (CsvTypeParser.isNotParsableNumber(noCommas)) {\n const lower = value.toLowerCase();\n if (lower === 'true' || lower === 'false') {\n return NewTableColumnTypes.BOOLEAN;\n }\n\n if (DATE_TIME_REGEX.test(value) && value.includes(':')) {\n return NewTableColumnTypes.DATE_TIME;\n }\n\n if (LOCAL_TIME_REGEX.test(value)) {\n return NewTableColumnTypes.LOCAL_TIME;\n }\n\n return NewTableColumnTypes.STRING;\n }\n\n return CsvTypeParser.getNumberType(noCommas);\n }\n\n static getNumberType(value: string): string {\n if (value.includes('.')) {\n return NewTableColumnTypes.DOUBLE;\n }\n\n // Fast length check\n const maxIntLength = value.startsWith('-') ? 11 : 10;\n if (value.length > maxIntLength) {\n return NewTableColumnTypes.LONG;\n }\n\n // Slower parseInt check\n const intValue = parseInt(value, 10);\n if (intValue > MAX_INT || intValue < MIN_INT) {\n return NewTableColumnTypes.LONG;\n }\n\n return NewTableColumnTypes.INTEGER;\n }\n\n constructor(\n onFileCompleted: (types: string[]) => void,\n file: Blob | JSZipObject,\n readHeaders: boolean,\n parentConfig: ParseLocalConfig<unknown, Blob | NodeJS.ReadableStream>,\n nullString: string | null,\n onProgress: (progressValue: number) => boolean,\n onError: (e: unknown) => void,\n totalChunks: number,\n isZip: boolean,\n shouldTrim: boolean\n ) {\n this.onFileCompleted = onFileCompleted;\n this.file = file;\n this.readHeaders = readHeaders;\n this.nullString = nullString;\n this.onProgress = onProgress;\n this.onError = onError;\n this.chunks = 0;\n this.totalChunks = totalChunks;\n this.isZip = isZip;\n this.shouldTrim = shouldTrim;\n this.zipProgress = 0;\n\n this.handleChunk = this.handleChunk.bind(this);\n this.handleComplete = this.handleComplete.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleNodeUpdate = this.handleNodeUpdate.bind(this);\n\n this.config = {\n ...parentConfig,\n error: this.handleError,\n chunk: this.handleChunk,\n complete: this.handleComplete,\n };\n }\n\n onFileCompleted: (types: string[]) => void;\n\n file: Blob | JSZipObject;\n\n readHeaders: boolean;\n\n nullString: string | null;\n\n onProgress: (progressValue: number) => boolean;\n\n onError: (e: unknown) => void;\n\n types?: string[];\n\n chunks: number;\n\n totalChunks: number;\n\n isZip: boolean;\n\n shouldTrim: boolean;\n\n zipProgress: number;\n\n config: ParseLocalConfig<unknown, Blob | NodeJS.ReadableStream>;\n\n parse(): void {\n const toParse = this.isZip\n ? (this.file as JSZipObject).nodeStream(\n // JsZip types are incorrect, thus the funny casting\n // Actual parameter is 'nodebuffer'\n 'nodebuffer' as 'nodestream',\n this.handleNodeUpdate\n )\n : (this.file as Blob);\n Papa.parse(toParse, this.config);\n }\n\n handleChunk(result: ParseResult<string[]>, parser: Parser): void {\n let { data } = result;\n if (!this.types) {\n if (data == null || data.length === 0) {\n parser.abort();\n this.onError('Error parsing CSV: no data in file.');\n return;\n }\n this.types = new Array(data[0].length).fill(UNKNOWN);\n if (this.readHeaders) {\n // If headers are being read from the file, remove them from type analysis\n data = data.slice(1);\n }\n }\n\n assertNotNull(this.types);\n\n const cloneTypes = [...this.types];\n\n data.forEach(row => {\n if (row.length >= cloneTypes.length) {\n for (let i = 0; i < cloneTypes.length; i += 1) {\n cloneTypes[i] = CsvTypeParser.determineType(\n this.shouldTrim ? row[i].trim() : row[i],\n cloneTypes[i],\n this.nullString\n );\n }\n this.types = cloneTypes;\n } else {\n parser.abort();\n this.onError(\n `Error parsing CSV: Insufficient data in row.\\nExpected length ${cloneTypes.length} but found ${row.length}.\\nRow = ${row}`\n );\n }\n });\n\n this.chunks += 1;\n // 50 because the type parsing accounts for 50% of the parsing\n let progress = 0;\n if (this.totalChunks > 0) {\n progress = Math.round((this.chunks / this.totalChunks) * 50);\n } else {\n progress = Math.round(this.zipProgress / 2);\n }\n const isCancelled = this.onProgress(progress);\n if (isCancelled) {\n parser.abort();\n }\n }\n\n handleComplete(results: ParseResult<unknown>): void {\n const { types, onFileCompleted } = this;\n // results is undefined for a succesful parse, but has meta data for an abort\n assertNotNull(types);\n if (results == null || !results.meta.aborted) {\n onFileCompleted(\n types.map(type =>\n type === UNKNOWN ? NewTableColumnTypes.STRING : type\n )\n );\n }\n }\n\n handleError(error: unknown): void {\n const { onError } = this;\n onError(error);\n }\n\n handleNodeUpdate(metadata: { percent: number }): void {\n this.zipProgress = metadata.percent;\n }\n}\n\nexport default CsvTypeParser;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CsvTypeParser.js","names":["assertNotNull","Papa","NewTableColumnTypes","UNKNOWN","MAX_INT","MIN_INT","DATE_TIME_REGEX","LOCAL_TIME_REGEX","CsvTypeParser","determineType","value","type","nullString","STRING","INTEGER","checkInteger","LONG","checkLong","DOUBLE","checkDouble","BOOLEAN","checkBoolean","DATE_TIME","checkDateTime","LOCAL_TIME","checkLocalTime","getTypeFromUnknown","isNotParsableNumber","s","isNaN","noCommas","replace","getNumberType","includes","lower","toLowerCase","test","maxIntLength","startsWith","length","intValue","parseInt","constructor","onFileCompleted","file","readHeaders","parentConfig","onProgress","onError","totalChunks","isZip","shouldTrim","chunks","zipProgress","handleChunk","bind","handleComplete","handleError","handleNodeUpdate","config","error","chunk","complete","parse","toParse","nodeStream","result","parser","data","types","abort","Array","fill","slice","cloneTypes","forEach","row","i","trim","progress","Math","round","isCancelled","results","meta","aborted","map","metadata","percent"],"sources":["../../src/csv/CsvTypeParser.ts"],"sourcesContent":["import type { JSZipObject } from 'jszip';\nimport { assertNotNull } from '@deephaven/utils';\nimport Papa, { Parser, ParseResult, ParseLocalConfig } from 'papaparse';\n// Intentionally using isNaN rather than Number.isNaN\n/* eslint-disable no-restricted-globals */\nimport NewTableColumnTypes from './NewTableColumnTypes';\n\n// Initially column types start al unknown\nconst UNKNOWN = 'unknown';\n\nconst MAX_INT = 2147483647;\nconst MIN_INT = -2147483648;\n\nconst DATE_TIME_REGEX = /^[0-9]{4}-[0-1][0-9]-[0-3][0-9][ T][0-2][0-9]:[0-5][0-9]:[0-6][0-9](?:\\.[0-9]{1,9})?(?: [a-zA-Z]+)?$/;\nconst LOCAL_TIME_REGEX = /^([0-9]+T)?([0-9]+):([0-9]+)(:[0-9]+)?(?:\\.[0-9]{1,9})?$/;\n\n/**\n * Determines the type of each column in a CSV file by parsing it and looking at every value.\n */\nclass CsvTypeParser {\n static determineType(\n value: string,\n type: string,\n nullString: string | null\n ): string {\n if (!value || value === nullString) {\n // A null tells us nothing about the type\n return type;\n }\n\n switch (type) {\n case NewTableColumnTypes.STRING:\n // Strings never get promoted\n return NewTableColumnTypes.STRING;\n case NewTableColumnTypes.INTEGER:\n return CsvTypeParser.checkInteger(value);\n case NewTableColumnTypes.LONG:\n return CsvTypeParser.checkLong(value);\n case NewTableColumnTypes.DOUBLE:\n return CsvTypeParser.checkDouble(value);\n case NewTableColumnTypes.BOOLEAN:\n return CsvTypeParser.checkBoolean(value);\n case NewTableColumnTypes.DATE_TIME:\n return CsvTypeParser.checkDateTime(value);\n case NewTableColumnTypes.LOCAL_TIME:\n return CsvTypeParser.checkLocalTime(value);\n default:\n return CsvTypeParser.getTypeFromUnknown(value);\n }\n }\n\n // Allows for cusomt rules in addition to isNaN\n static isNotParsableNumber(s: string): boolean {\n return (\n isNaN((s as unknown) as number) || s === 'Infinity' || s === '-Infinity'\n );\n }\n\n static checkInteger(value: string): string {\n const noCommas = value.replace(/,/g, '');\n if (CsvTypeParser.isNotParsableNumber(noCommas)) {\n return NewTableColumnTypes.STRING;\n }\n\n return CsvTypeParser.getNumberType(noCommas);\n }\n\n static checkLong(value: string): string {\n const noCommas = value.replace(/,/g, '');\n if (CsvTypeParser.isNotParsableNumber(noCommas)) {\n return NewTableColumnTypes.STRING;\n }\n\n if (noCommas.includes('.')) {\n return NewTableColumnTypes.DOUBLE;\n }\n\n return NewTableColumnTypes.LONG;\n }\n\n static checkDouble(value: string): string {\n const noCommas = value.replace(/,/g, '');\n if (CsvTypeParser.isNotParsableNumber(noCommas)) {\n return NewTableColumnTypes.STRING;\n }\n\n return NewTableColumnTypes.DOUBLE;\n }\n\n static checkBoolean(value: string): string {\n const lower = value.toLowerCase();\n if (lower === 'true' || lower === 'false') {\n return NewTableColumnTypes.BOOLEAN;\n }\n return NewTableColumnTypes.STRING;\n }\n\n static checkDateTime(value: string): string {\n if (DATE_TIME_REGEX.test(value)) {\n return NewTableColumnTypes.DATE_TIME;\n }\n\n return NewTableColumnTypes.STRING;\n }\n\n static checkLocalTime(value: string): string {\n if (LOCAL_TIME_REGEX.test(value)) {\n return NewTableColumnTypes.LOCAL_TIME;\n }\n\n return NewTableColumnTypes.STRING;\n }\n\n static getTypeFromUnknown(value: string): string {\n const noCommas = value.replace(/,/g, '');\n if (CsvTypeParser.isNotParsableNumber(noCommas)) {\n const lower = value.toLowerCase();\n if (lower === 'true' || lower === 'false') {\n return NewTableColumnTypes.BOOLEAN;\n }\n\n if (DATE_TIME_REGEX.test(value) && value.includes(':')) {\n return NewTableColumnTypes.DATE_TIME;\n }\n\n if (LOCAL_TIME_REGEX.test(value)) {\n return NewTableColumnTypes.LOCAL_TIME;\n }\n\n return NewTableColumnTypes.STRING;\n }\n\n return CsvTypeParser.getNumberType(noCommas);\n }\n\n static getNumberType(value: string): string {\n if (value.includes('.')) {\n return NewTableColumnTypes.DOUBLE;\n }\n\n // Fast length check\n const maxIntLength = value.startsWith('-') ? 11 : 10;\n if (value.length > maxIntLength) {\n return NewTableColumnTypes.LONG;\n }\n\n // Slower parseInt check\n const intValue = parseInt(value, 10);\n if (intValue > MAX_INT || intValue < MIN_INT) {\n return NewTableColumnTypes.LONG;\n }\n\n return NewTableColumnTypes.INTEGER;\n }\n\n constructor(\n onFileCompleted: (types: string[]) => void,\n file: Blob | JSZipObject,\n readHeaders: boolean,\n parentConfig: ParseLocalConfig<unknown, Blob | NodeJS.ReadableStream>,\n nullString: string | null,\n onProgress: (progressValue: number) => boolean,\n onError: (e: unknown) => void,\n totalChunks: number,\n isZip: boolean,\n shouldTrim: boolean\n ) {\n this.onFileCompleted = onFileCompleted;\n this.file = file;\n this.readHeaders = readHeaders;\n this.nullString = nullString;\n this.onProgress = onProgress;\n this.onError = onError;\n this.chunks = 0;\n this.totalChunks = totalChunks;\n this.isZip = isZip;\n this.shouldTrim = shouldTrim;\n this.zipProgress = 0;\n\n this.handleChunk = this.handleChunk.bind(this);\n this.handleComplete = this.handleComplete.bind(this);\n this.handleError = this.handleError.bind(this);\n this.handleNodeUpdate = this.handleNodeUpdate.bind(this);\n\n this.config = {\n ...parentConfig,\n error: this.handleError,\n chunk: this.handleChunk,\n complete: this.handleComplete,\n };\n }\n\n onFileCompleted: (types: string[]) => void;\n\n file: Blob | JSZipObject;\n\n readHeaders: boolean;\n\n nullString: string | null;\n\n onProgress: (progressValue: number) => boolean;\n\n onError: (e: unknown) => void;\n\n types?: string[];\n\n chunks: number;\n\n totalChunks: number;\n\n isZip: boolean;\n\n shouldTrim: boolean;\n\n zipProgress: number;\n\n config: ParseLocalConfig<unknown, Blob | NodeJS.ReadableStream>;\n\n parse(): void {\n const toParse = this.isZip\n ? (this.file as JSZipObject).nodeStream(\n // JsZip types are incorrect, thus the funny casting\n // Actual parameter is 'nodebuffer'\n 'nodebuffer' as 'nodestream',\n this.handleNodeUpdate\n )\n : (this.file as Blob);\n Papa.parse(toParse, this.config);\n }\n\n handleChunk(result: ParseResult<string[]>, parser: Parser): void {\n let { data } = result;\n if (!this.types) {\n if (data == null || data.length === 0) {\n parser.abort();\n this.onError('Error parsing CSV: no data in file.');\n return;\n }\n this.types = new Array(data[0].length).fill(UNKNOWN);\n if (this.readHeaders) {\n // If headers are being read from the file, remove them from type analysis\n data = data.slice(1);\n }\n }\n\n assertNotNull(this.types);\n\n const cloneTypes = [...this.types];\n\n data.forEach(row => {\n if (row.length >= cloneTypes.length) {\n for (let i = 0; i < cloneTypes.length; i += 1) {\n cloneTypes[i] = CsvTypeParser.determineType(\n this.shouldTrim ? row[i].trim() : row[i],\n cloneTypes[i],\n this.nullString\n );\n }\n this.types = cloneTypes;\n } else {\n parser.abort();\n this.onError(\n `Error parsing CSV: Insufficient data in row.\\nExpected length ${cloneTypes.length} but found ${row.length}.\\nRow = ${row}`\n );\n }\n });\n\n this.chunks += 1;\n // 50 because the type parsing accounts for 50% of the parsing\n let progress = 0;\n if (this.totalChunks > 0) {\n progress = Math.round((this.chunks / this.totalChunks) * 50);\n } else {\n progress = Math.round(this.zipProgress / 2);\n }\n const isCancelled = this.onProgress(progress);\n if (isCancelled) {\n parser.abort();\n }\n }\n\n handleComplete(results: ParseResult<unknown>): void {\n const { types, onFileCompleted } = this;\n // results is undefined for a succesful parse, but has meta data for an abort\n assertNotNull(types);\n if (results == null || !results.meta.aborted) {\n onFileCompleted(\n types.map(type =>\n type === UNKNOWN ? NewTableColumnTypes.STRING : type\n )\n );\n }\n }\n\n handleError(error: unknown): void {\n const { onError } = this;\n onError(error);\n }\n\n handleNodeUpdate(metadata: { percent: number }): void {\n this.zipProgress = metadata.percent;\n }\n}\n\nexport default CsvTypeParser;\n"],"mappings":"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"}
|
|
@@ -1,23 +1,14 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
/**
|
|
4
3
|
* Valid column types to be used for a call to newTable.
|
|
5
4
|
*/
|
|
6
5
|
class NewTableColumnTypes {}
|
|
7
|
-
|
|
8
6
|
_defineProperty(NewTableColumnTypes, "INTEGER", 'int');
|
|
9
|
-
|
|
10
7
|
_defineProperty(NewTableColumnTypes, "LONG", 'long');
|
|
11
|
-
|
|
12
8
|
_defineProperty(NewTableColumnTypes, "DOUBLE", 'double');
|
|
13
|
-
|
|
14
9
|
_defineProperty(NewTableColumnTypes, "BOOLEAN", 'bool');
|
|
15
|
-
|
|
16
10
|
_defineProperty(NewTableColumnTypes, "STRING", 'string');
|
|
17
|
-
|
|
18
11
|
_defineProperty(NewTableColumnTypes, "DATE_TIME", 'datetime');
|
|
19
|
-
|
|
20
12
|
_defineProperty(NewTableColumnTypes, "LOCAL_TIME", 'localtime');
|
|
21
|
-
|
|
22
13
|
export default NewTableColumnTypes;
|
|
23
14
|
//# sourceMappingURL=NewTableColumnTypes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NewTableColumnTypes.js","names":["NewTableColumnTypes"],"sources":["../../src/csv/NewTableColumnTypes.ts"],"sourcesContent":["/**\n * Valid column types to be used for a call to newTable.\n */\nclass NewTableColumnTypes {\n static INTEGER = 'int';\n\n static LONG = 'long';\n\n static DOUBLE = 'double';\n\n static BOOLEAN = 'bool';\n\n static STRING = 'string';\n\n static DATE_TIME = 'datetime';\n\n static LOCAL_TIME = 'localtime';\n}\n\nexport default NewTableColumnTypes;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"NewTableColumnTypes.js","names":["NewTableColumnTypes"],"sources":["../../src/csv/NewTableColumnTypes.ts"],"sourcesContent":["/**\n * Valid column types to be used for a call to newTable.\n */\nclass NewTableColumnTypes {\n static INTEGER = 'int';\n\n static LONG = 'long';\n\n static DOUBLE = 'double';\n\n static BOOLEAN = 'bool';\n\n static STRING = 'string';\n\n static DATE_TIME = 'datetime';\n\n static LOCAL_TIME = 'localtime';\n}\n\nexport default NewTableColumnTypes;\n"],"mappings":";AAAA;AACA;AACA;AACA,MAAMA,mBAAmB,CAAC;AAczB,gBAdKA,mBAAmB,aACN,KAAK;AAAA,gBADlBA,mBAAmB,UAGT,MAAM;AAAA,gBAHhBA,mBAAmB,YAKP,QAAQ;AAAA,gBALpBA,mBAAmB,aAON,MAAM;AAAA,gBAPnBA,mBAAmB,YASP,QAAQ;AAAA,gBATpBA,mBAAmB,eAWJ,UAAU;AAAA,gBAXzBA,mBAAmB,gBAaH,WAAW;AAGjC,eAAeA,mBAAmB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import Console from './Console';
|
|
2
|
+
export default Console;
|
|
3
|
+
export { Console };
|
|
2
4
|
export { default as ConsoleInput } from './ConsoleInput';
|
|
3
5
|
export { default as ConsoleMenu } from './ConsoleMenu';
|
|
4
6
|
export { default as SHORTCUTS } from './ConsoleShortcuts';
|
|
@@ -13,5 +15,4 @@ export * from './console-history';
|
|
|
13
15
|
export { default as LogView } from './log/LogView';
|
|
14
16
|
export { default as HeapUsage } from './HeapUsage';
|
|
15
17
|
export { default as NewTableColumnTypes } from './csv/NewTableColumnTypes';
|
|
16
|
-
export { default } from './Console';
|
|
17
18
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAEhC,eAAe,OAAO,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,CAAC;AACnB,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import Console from "./Console.js";
|
|
2
|
+
export default Console;
|
|
3
|
+
export { Console };
|
|
2
4
|
export { default as ConsoleInput } from "./ConsoleInput.js";
|
|
3
5
|
export { default as ConsoleMenu } from "./ConsoleMenu.js";
|
|
4
6
|
export { default as SHORTCUTS } from "./ConsoleShortcuts.js";
|
|
@@ -13,5 +15,4 @@ export * from "./console-history/index.js";
|
|
|
13
15
|
export { default as LogView } from "./log/LogView.js";
|
|
14
16
|
export { default as HeapUsage } from "./HeapUsage.js";
|
|
15
17
|
export { default as NewTableColumnTypes } from "./csv/NewTableColumnTypes.js";
|
|
16
|
-
export { default } from "./Console.js";
|
|
17
18
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["
|
|
1
|
+
{"version":3,"file":"index.js","names":["Console","default","ConsoleInput","ConsoleMenu","SHORTCUTS","ConsoleStatusBar","MonacoUtils","Editor","ScriptEditor","ScriptEditorUtils","LogView","HeapUsage","NewTableColumnTypes"],"sources":["../src/index.ts"],"sourcesContent":["import Console from './Console';\n\nexport default Console;\nexport { Console };\nexport { default as ConsoleInput } from './ConsoleInput';\nexport { default as ConsoleMenu } from './ConsoleMenu';\nexport { default as SHORTCUTS } from './ConsoleShortcuts';\nexport { default as ConsoleStatusBar } from './ConsoleStatusBar';\nexport { default as MonacoUtils } from './monaco/MonacoUtils';\nexport { default as Editor } from './notebook/Editor';\nexport { default as ScriptEditor } from './notebook/ScriptEditor';\nexport { default as ScriptEditorUtils } from './notebook/ScriptEditorUtils';\nexport * from './common';\nexport * from './command-history';\nexport * from './console-history';\nexport { default as LogView } from './log/LogView';\nexport { default as HeapUsage } from './HeapUsage';\nexport { default as NewTableColumnTypes } from './csv/NewTableColumnTypes';\n"],"mappings":"OAAOA,OAAO;AAEd,eAAeA,OAAO;AACtB,SAASA,OAAO;AAAG,SACVC,OAAO,IAAIC,YAAY;AAAA,SACvBD,OAAO,IAAIE,WAAW;AAAA,SACtBF,OAAO,IAAIG,SAAS;AAAA,SACpBH,OAAO,IAAII,gBAAgB;AAAA,SAC3BJ,OAAO,IAAIK,WAAW;AAAA,SACtBL,OAAO,IAAIM,MAAM;AAAA,SACjBN,OAAO,IAAIO,YAAY;AAAA,SACvBP,OAAO,IAAIQ,iBAAiB;AAAA;AAAA;AAAA;AAAA,SAI5BR,OAAO,IAAIS,OAAO;AAAA,SAClBT,OAAO,IAAIU,SAAS;AAAA,SACpBV,OAAO,IAAIW,mBAAmB"}
|
package/dist/log/LogLevel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogLevel.js","names":["Object","freeze","FATAL","STDERR","ERROR","WARN","STDOUT","INFO","DEBUG","TRACE"],"sources":["../../src/log/LogLevel.ts"],"sourcesContent":["export default Object.freeze({\n FATAL: 'FATAL',\n STDERR: 'STDERR',\n ERROR: 'ERROR',\n WARN: 'WARN',\n STDOUT: 'STDOUT',\n INFO: 'INFO',\n DEBUG: 'DEBUG',\n TRACE: 'TRACE',\n});\n"],"mappings":"AAAA,eAAeA,MAAM,CAACC,
|
|
1
|
+
{"version":3,"file":"LogLevel.js","names":["Object","freeze","FATAL","STDERR","ERROR","WARN","STDOUT","INFO","DEBUG","TRACE"],"sources":["../../src/log/LogLevel.ts"],"sourcesContent":["export default Object.freeze({\n FATAL: 'FATAL',\n STDERR: 'STDERR',\n ERROR: 'ERROR',\n WARN: 'WARN',\n STDOUT: 'STDOUT',\n INFO: 'INFO',\n DEBUG: 'DEBUG',\n TRACE: 'TRACE',\n});\n"],"mappings":"AAAA,eAAeA,MAAM,CAACC,MAAM,CAAC;EAC3BC,KAAK,EAAE,OAAO;EACdC,MAAM,EAAE,QAAQ;EAChBC,KAAK,EAAE,OAAO;EACdC,IAAI,EAAE,MAAM;EACZC,MAAM,EAAE,QAAQ;EAChBC,IAAI,EAAE,MAAM;EACZC,KAAK,EAAE,OAAO;EACdC,KAAK,EAAE;AACT,CAAC,CAAC"}
|
|
@@ -3,13 +3,11 @@ import React, { PureComponent } from 'react';
|
|
|
3
3
|
import classNames from 'classnames';
|
|
4
4
|
import { UISwitch } from '@deephaven/components';
|
|
5
5
|
import "./LogLevelMenuItem.css";
|
|
6
|
-
|
|
7
6
|
class LogLevelMenuItem extends PureComponent {
|
|
8
7
|
constructor(props) {
|
|
9
8
|
super(props);
|
|
10
9
|
this.handleSwitchClick = this.handleSwitchClick.bind(this);
|
|
11
10
|
}
|
|
12
|
-
|
|
13
11
|
handleSwitchClick() {
|
|
14
12
|
var {
|
|
15
13
|
logLevel,
|
|
@@ -17,7 +15,6 @@ class LogLevelMenuItem extends PureComponent {
|
|
|
17
15
|
} = this.props;
|
|
18
16
|
onClick(logLevel);
|
|
19
17
|
}
|
|
20
|
-
|
|
21
18
|
render() {
|
|
22
19
|
var {
|
|
23
20
|
logLevel,
|
|
@@ -30,8 +27,6 @@ class LogLevelMenuItem extends PureComponent {
|
|
|
30
27
|
onClick: this.handleSwitchClick
|
|
31
28
|
}), logLevel);
|
|
32
29
|
}
|
|
33
|
-
|
|
34
30
|
}
|
|
35
|
-
|
|
36
31
|
export default LogLevelMenuItem;
|
|
37
32
|
//# sourceMappingURL=LogLevelMenuItem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogLevelMenuItem.js","names":["React","PureComponent","classNames","UISwitch","LogLevelMenuItem","constructor","props","handleSwitchClick","bind","logLevel","onClick","render","on"],"sources":["../../src/log/LogLevelMenuItem.tsx"],"sourcesContent":["// Port of https://github.com/react-bootstrap/react-bootstrap/blob/master/src/Collapse.js\nimport React, { PureComponent, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { UISwitch } from '@deephaven/components';\nimport './LogLevelMenuItem.scss';\n\ninterface LogLevelMenuItemProps {\n logLevel: string;\n on: boolean;\n onClick: (logLevel: string) => void;\n}\n\nclass LogLevelMenuItem extends PureComponent<\n LogLevelMenuItemProps,\n Record<string, never>\n> {\n constructor(props: LogLevelMenuItemProps) {\n super(props);\n\n this.handleSwitchClick = this.handleSwitchClick.bind(this);\n }\n\n handleSwitchClick(): void {\n const { logLevel, onClick } = this.props;\n onClick(logLevel);\n }\n\n render(): ReactElement {\n const { logLevel, on } = this.props;\n return (\n <div className={classNames('log-level-menu-item', logLevel)}>\n <UISwitch on={on} onClick={this.handleSwitchClick} />\n {logLevel}\n </div>\n );\n }\n}\n\nexport default LogLevelMenuItem;\n"],"mappings":"AAAA;AACA,OAAOA,
|
|
1
|
+
{"version":3,"file":"LogLevelMenuItem.js","names":["React","PureComponent","classNames","UISwitch","LogLevelMenuItem","constructor","props","handleSwitchClick","bind","logLevel","onClick","render","on"],"sources":["../../src/log/LogLevelMenuItem.tsx"],"sourcesContent":["// Port of https://github.com/react-bootstrap/react-bootstrap/blob/master/src/Collapse.js\nimport React, { PureComponent, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { UISwitch } from '@deephaven/components';\nimport './LogLevelMenuItem.scss';\n\ninterface LogLevelMenuItemProps {\n logLevel: string;\n on: boolean;\n onClick: (logLevel: string) => void;\n}\n\nclass LogLevelMenuItem extends PureComponent<\n LogLevelMenuItemProps,\n Record<string, never>\n> {\n constructor(props: LogLevelMenuItemProps) {\n super(props);\n\n this.handleSwitchClick = this.handleSwitchClick.bind(this);\n }\n\n handleSwitchClick(): void {\n const { logLevel, onClick } = this.props;\n onClick(logLevel);\n }\n\n render(): ReactElement {\n const { logLevel, on } = this.props;\n return (\n <div className={classNames('log-level-menu-item', logLevel)}>\n <UISwitch on={on} onClick={this.handleSwitchClick} />\n {logLevel}\n </div>\n );\n }\n}\n\nexport default LogLevelMenuItem;\n"],"mappings":"AAAA;AACA,OAAOA,KAAK,IAAIC,aAAa,QAAsB,OAAO;AAC1D,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,QAAQ,QAAQ,uBAAuB;AAAC;AASjD,MAAMC,gBAAgB,SAASH,aAAa,CAG1C;EACAI,WAAW,CAACC,KAA4B,EAAE;IACxC,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACC,IAAI,CAAC,IAAI,CAAC;EAC5D;EAEAD,iBAAiB,GAAS;IACxB,IAAM;MAAEE,QAAQ;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAACJ,KAAK;IACxCI,OAAO,CAACD,QAAQ,CAAC;EACnB;EAEAE,MAAM,GAAiB;IACrB,IAAM;MAAEF,QAAQ;MAAEG;IAAG,CAAC,GAAG,IAAI,CAACN,KAAK;IACnC,oBACE;MAAK,SAAS,EAAEJ,UAAU,CAAC,qBAAqB,EAAEO,QAAQ;IAAE,gBAC1D,oBAAC,QAAQ;MAAC,EAAE,EAAEG,EAAG;MAAC,OAAO,EAAE,IAAI,CAACL;IAAkB,EAAG,EACpDE,QAAQ,CACL;EAEV;AACF;AAEA,eAAeL,gBAAgB"}
|