@deephaven/console 0.5.2-matplotlib.2 → 0.6.1-demo.8
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 -0
- package/dist/Console.d.ts.map +1 -1
- package/dist/Console.js +807 -871
- package/dist/Console.js.map +1 -1
- package/dist/ConsoleInput.d.ts +1 -38
- package/dist/ConsoleInput.d.ts.map +1 -1
- package/dist/ConsoleInput.js +331 -436
- package/dist/ConsoleInput.js.map +1 -1
- package/dist/ConsoleMenu.js +159 -215
- package/dist/ConsoleMenu.js.map +1 -1
- package/dist/ConsolePropTypes.js +1 -1
- package/dist/ConsolePropTypes.js.map +1 -1
- package/dist/ConsoleShortcuts.js +2 -2
- package/dist/ConsoleShortcuts.js.map +1 -1
- package/dist/ConsoleStatusBar.js +85 -125
- package/dist/ConsoleStatusBar.js.map +1 -1
- package/dist/StoragePropTypes.js +2 -2
- package/dist/StoragePropTypes.js.map +1 -1
- package/dist/command-history/CommandHistory.css +5 -2
- package/dist/command-history/CommandHistory.css.map +1 -1
- package/dist/command-history/CommandHistory.d.ts +5 -0
- package/dist/command-history/CommandHistory.d.ts.map +1 -1
- package/dist/command-history/CommandHistory.js +303 -391
- package/dist/command-history/CommandHistory.js.map +1 -1
- package/dist/command-history/CommandHistoryActions.css +4 -0
- package/dist/command-history/CommandHistoryActions.css.map +1 -1
- package/dist/command-history/CommandHistoryActions.d.ts.map +1 -1
- package/dist/command-history/CommandHistoryActions.js +40 -79
- package/dist/command-history/CommandHistoryActions.js.map +1 -1
- package/dist/command-history/CommandHistoryItem.css +1 -1
- package/dist/command-history/CommandHistoryItem.d.ts +5 -0
- package/dist/command-history/CommandHistoryItem.d.ts.map +1 -1
- package/dist/command-history/CommandHistoryItem.js +15 -9
- package/dist/command-history/CommandHistoryItem.js.map +1 -1
- package/dist/command-history/CommandHistoryItemTooltip.d.ts +1 -40
- package/dist/command-history/CommandHistoryItemTooltip.d.ts.map +1 -1
- package/dist/command-history/CommandHistoryItemTooltip.js +139 -189
- package/dist/command-history/CommandHistoryItemTooltip.js.map +1 -1
- package/dist/command-history/CommandHistoryViewportUpdater.js +30 -35
- package/dist/command-history/CommandHistoryViewportUpdater.js.map +1 -1
- package/dist/command-history/index.js +5 -5
- package/dist/command-history/index.js.map +1 -1
- package/dist/common/Code.js +34 -70
- package/dist/common/Code.js.map +1 -1
- package/dist/common/ConsoleConstants.js +3 -24
- package/dist/common/ConsoleConstants.js.map +1 -1
- package/dist/common/ConsoleUtils.d.ts +1 -3
- package/dist/common/ConsoleUtils.d.ts.map +1 -1
- package/dist/common/ConsoleUtils.js +60 -94
- package/dist/common/ConsoleUtils.js.map +1 -1
- package/dist/common/ObjectIcon.js +4 -2
- package/dist/common/ObjectIcon.js.map +1 -1
- package/dist/common/index.d.js +1 -34
- package/dist/common/index.d.js.map +1 -1
- package/dist/common/index.js +4 -4
- package/dist/common/index.js.map +1 -1
- package/dist/console-history/ConsoleHistory.js +27 -63
- package/dist/console-history/ConsoleHistory.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItem.js +116 -154
- package/dist/console-history/ConsoleHistoryItem.js.map +1 -1
- package/dist/console-history/ConsoleHistoryItemResult.js +4 -2
- package/dist/console-history/ConsoleHistoryItemResult.js.map +1 -1
- package/dist/console-history/ConsoleHistoryResultErrorMessage.js +94 -132
- package/dist/console-history/ConsoleHistoryResultErrorMessage.js.map +1 -1
- package/dist/console-history/ConsoleHistoryResultInProgress.js +42 -76
- package/dist/console-history/ConsoleHistoryResultInProgress.js.map +1 -1
- package/dist/console-history/index.js +5 -5
- package/dist/console-history/index.js.map +1 -1
- package/dist/csv/CsvFormats.js +14 -28
- package/dist/csv/CsvFormats.js.map +1 -1
- package/dist/csv/CsvInputBar.css +25 -23
- package/dist/csv/CsvInputBar.css.map +1 -1
- package/dist/csv/CsvInputBar.d.ts +2 -45
- package/dist/csv/CsvInputBar.d.ts.map +1 -1
- package/dist/csv/CsvInputBar.js +298 -372
- package/dist/csv/CsvInputBar.js.map +1 -1
- package/dist/csv/CsvOverlay.js +197 -243
- package/dist/csv/CsvOverlay.js.map +1 -1
- package/dist/csv/CsvParser.js +186 -209
- package/dist/csv/CsvParser.js.map +1 -1
- package/dist/csv/CsvTypeParser.js +185 -210
- package/dist/csv/CsvTypeParser.js.map +1 -1
- package/dist/csv/NewTableColumnTypes.js +1 -5
- package/dist/csv/NewTableColumnTypes.js.map +1 -1
- package/dist/index.js +14 -14
- package/dist/index.js.map +1 -1
- package/dist/log/LogLevelMenuItem.js +24 -58
- package/dist/log/LogLevelMenuItem.js.map +1 -1
- package/dist/log/LogView.js +429 -484
- package/dist/log/LogView.js.map +1 -1
- package/dist/monaco/MonacoCompletionProvider.js +92 -124
- package/dist/monaco/MonacoCompletionProvider.js.map +1 -1
- package/dist/monaco/MonacoUtils.js +315 -331
- package/dist/monaco/MonacoUtils.js.map +1 -1
- package/dist/monaco/index.js +2 -2
- package/dist/monaco/index.js.map +1 -1
- package/dist/monaco/lang/db.js +3 -3
- package/dist/monaco/lang/db.js.map +1 -1
- package/dist/monaco/lang/groovy.js +3 -3
- package/dist/monaco/lang/groovy.js.map +1 -1
- package/dist/monaco/lang/log.js +3 -3
- package/dist/monaco/lang/log.js.map +1 -1
- package/dist/monaco/lang/python.js +3 -3
- package/dist/monaco/lang/python.js.map +1 -1
- package/dist/monaco/lang/scala.js +5 -5
- package/dist/monaco/lang/scala.js.map +1 -1
- package/dist/notebook/Editor.js +101 -141
- package/dist/notebook/Editor.js.map +1 -1
- package/dist/notebook/ScriptEditor.js +261 -301
- package/dist/notebook/ScriptEditor.js.map +1 -1
- package/dist/notebook/ScriptEditorUtils.js +26 -42
- package/dist/notebook/ScriptEditorUtils.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +26 -56
|
@@ -4,17 +4,11 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
4
4
|
|
|
5
5
|
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
6
|
|
|
7
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
8
|
-
|
|
9
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
10
|
-
|
|
11
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
12
|
-
|
|
13
7
|
// Intentionally using isNaN rather than Number.isNaN
|
|
14
8
|
|
|
15
9
|
/* eslint-disable no-restricted-globals */
|
|
16
10
|
import Papa from 'papaparse';
|
|
17
|
-
import NewTableColumnTypes from
|
|
11
|
+
import NewTableColumnTypes from "./NewTableColumnTypes.js"; // Initially column types start al unknown
|
|
18
12
|
|
|
19
13
|
var UNKNOWN = 'unknown';
|
|
20
14
|
var MAX_INT = 2147483647;
|
|
@@ -25,270 +19,251 @@ var LOCAL_TIME_REGEX = /^([0-9]+T)?([0-9]+):([0-9]+)(:[0-9]+)?(?:\.[0-9]{1,9})?$
|
|
|
25
19
|
* Determines the type of each column in a CSV file by parsing it and looking at every value.
|
|
26
20
|
*/
|
|
27
21
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
this.file = file;
|
|
34
|
-
this.readHeaders = readHeaders;
|
|
35
|
-
this.nullString = nullString;
|
|
36
|
-
this.onProgress = onProgress;
|
|
37
|
-
this.onError = onError;
|
|
38
|
-
this.types = null;
|
|
39
|
-
this.chunks = 0;
|
|
40
|
-
this.totalChunks = totalChunks;
|
|
41
|
-
this.isZip = isZip;
|
|
42
|
-
this.shouldTrim = shouldTrim;
|
|
43
|
-
this.zipProgress = 0;
|
|
44
|
-
this.handleChunk = this.handleChunk.bind(this);
|
|
45
|
-
this.handleComplete = this.handleComplete.bind(this);
|
|
46
|
-
this.handleError = this.handleError.bind(this);
|
|
47
|
-
this.handleNodeUpdate = this.handleNodeUpdate.bind(this);
|
|
48
|
-
this.config = _objectSpread(_objectSpread({}, parentConfig), {}, {
|
|
49
|
-
error: this.handleError,
|
|
50
|
-
chunk: this.handleChunk,
|
|
51
|
-
complete: this.handleComplete
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
_createClass(CsvTypeParser, [{
|
|
56
|
-
key: "parse",
|
|
57
|
-
value: function parse() {
|
|
58
|
-
var toParse = this.isZip ? this.file.nodeStream('nodebuffer', this.handleNodeUpdate) : this.file;
|
|
59
|
-
Papa.parse(toParse, this.config);
|
|
22
|
+
class CsvTypeParser {
|
|
23
|
+
static determineType(value, type, nullString) {
|
|
24
|
+
if (!value || value === nullString) {
|
|
25
|
+
// A null tells us nothing about the type
|
|
26
|
+
return type;
|
|
60
27
|
}
|
|
61
|
-
}, {
|
|
62
|
-
key: "handleChunk",
|
|
63
|
-
value: function handleChunk(result, parser) {
|
|
64
|
-
var _this = this;
|
|
65
|
-
|
|
66
|
-
var data = result.data;
|
|
67
|
-
|
|
68
|
-
if (!this.types) {
|
|
69
|
-
if (!data || data.length === 0) {
|
|
70
|
-
parser.abort();
|
|
71
|
-
this.onError('Error parsing CSV: no data in file.');
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
28
|
|
|
75
|
-
|
|
29
|
+
switch (type) {
|
|
30
|
+
case NewTableColumnTypes.STRING:
|
|
31
|
+
// Strings never get promoted
|
|
32
|
+
return NewTableColumnTypes.STRING;
|
|
76
33
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
data = data.slice(1);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
34
|
+
case NewTableColumnTypes.INTEGER:
|
|
35
|
+
return CsvTypeParser.checkInteger(value);
|
|
82
36
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
for (var i = 0; i < _this.types.length; i += 1) {
|
|
86
|
-
_this.types[i] = CsvTypeParser.determineType(_this.shouldTrim ? row[i].trim() : row[i], _this.types[i], _this.nullString);
|
|
87
|
-
}
|
|
88
|
-
} else {
|
|
89
|
-
parser.abort();
|
|
37
|
+
case NewTableColumnTypes.LONG:
|
|
38
|
+
return CsvTypeParser.checkLong(value);
|
|
90
39
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
});
|
|
94
|
-
this.chunks += 1; // 50 because the type parsing accounts for 50% of the parsing
|
|
40
|
+
case NewTableColumnTypes.DOUBLE:
|
|
41
|
+
return CsvTypeParser.checkDouble(value);
|
|
95
42
|
|
|
96
|
-
|
|
43
|
+
case NewTableColumnTypes.BOOLEAN:
|
|
44
|
+
return CsvTypeParser.checkBoolean(value);
|
|
97
45
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
} else {
|
|
101
|
-
progress = Math.round(this.zipProgress / 2);
|
|
102
|
-
}
|
|
46
|
+
case NewTableColumnTypes.DATE_TIME:
|
|
47
|
+
return CsvTypeParser.checkDateTime(value);
|
|
103
48
|
|
|
104
|
-
|
|
49
|
+
case NewTableColumnTypes.LOCAL_TIME:
|
|
50
|
+
return CsvTypeParser.checkLocalTime(value);
|
|
105
51
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}, {
|
|
111
|
-
key: "handleComplete",
|
|
112
|
-
value: function handleComplete(results) {
|
|
113
|
-
var types = this.types,
|
|
114
|
-
onFileCompleted = this.onFileCompleted; // results is undefined for a succesful parse, but has meta data for an abort
|
|
115
|
-
|
|
116
|
-
if (!results || !results.meta.aborted) {
|
|
117
|
-
onFileCompleted(types.map(function (type) {
|
|
118
|
-
return type === UNKNOWN ? NewTableColumnTypes.STRING : type;
|
|
119
|
-
}));
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}, {
|
|
123
|
-
key: "handleError",
|
|
124
|
-
value: function handleError(error) {
|
|
125
|
-
var onError = this.onError;
|
|
126
|
-
onError(error);
|
|
52
|
+
default:
|
|
53
|
+
return CsvTypeParser.getTypeFromUnknown(value);
|
|
127
54
|
}
|
|
128
|
-
}
|
|
129
|
-
key: "handleNodeUpdate",
|
|
130
|
-
value: function handleNodeUpdate(metadata) {
|
|
131
|
-
this.zipProgress = metadata.percent;
|
|
132
|
-
}
|
|
133
|
-
}], [{
|
|
134
|
-
key: "determineType",
|
|
135
|
-
value: function determineType(value, type, nullString) {
|
|
136
|
-
if (!value || value === nullString) {
|
|
137
|
-
// A null tells us nothing about the type
|
|
138
|
-
return type;
|
|
139
|
-
}
|
|
55
|
+
} // Allows for cusomt rules in addition to isNaN
|
|
140
56
|
|
|
141
|
-
switch (type) {
|
|
142
|
-
case NewTableColumnTypes.STRING:
|
|
143
|
-
// Strings never get promoted
|
|
144
|
-
return NewTableColumnTypes.STRING;
|
|
145
57
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
case NewTableColumnTypes.LONG:
|
|
150
|
-
return CsvTypeParser.checkLong(value);
|
|
58
|
+
static isNotParsableNumber(s) {
|
|
59
|
+
return isNaN(s) || s === 'Infinity' || s === '-Infinity';
|
|
60
|
+
}
|
|
151
61
|
|
|
152
|
-
|
|
153
|
-
|
|
62
|
+
static checkInteger(value) {
|
|
63
|
+
var noCommas = value.replace(/,/g, '');
|
|
154
64
|
|
|
155
|
-
|
|
156
|
-
|
|
65
|
+
if (CsvTypeParser.isNotParsableNumber(noCommas)) {
|
|
66
|
+
return NewTableColumnTypes.STRING;
|
|
67
|
+
}
|
|
157
68
|
|
|
158
|
-
|
|
159
|
-
|
|
69
|
+
return CsvTypeParser.getNumberType(noCommas);
|
|
70
|
+
}
|
|
160
71
|
|
|
161
|
-
|
|
162
|
-
|
|
72
|
+
static checkLong(value) {
|
|
73
|
+
var noCommas = value.replace(/,/g, '');
|
|
163
74
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
} // Allows for cusomt rules in addition to isNaN
|
|
75
|
+
if (CsvTypeParser.isNotParsableNumber(noCommas)) {
|
|
76
|
+
return NewTableColumnTypes.STRING;
|
|
77
|
+
}
|
|
168
78
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
value: function isNotParsableNumber(s) {
|
|
172
|
-
return isNaN(s) || s === 'Infinity' || s === '-Infinity';
|
|
79
|
+
if (noCommas.includes('.')) {
|
|
80
|
+
return NewTableColumnTypes.DOUBLE;
|
|
173
81
|
}
|
|
174
|
-
}, {
|
|
175
|
-
key: "checkInteger",
|
|
176
|
-
value: function checkInteger(value) {
|
|
177
|
-
var noCommas = value.replace(/,/g, '');
|
|
178
82
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
}
|
|
83
|
+
return NewTableColumnTypes.LONG;
|
|
84
|
+
}
|
|
182
85
|
|
|
183
|
-
|
|
86
|
+
static checkDouble(value) {
|
|
87
|
+
var noCommas = value.replace(/,/g, '');
|
|
88
|
+
|
|
89
|
+
if (CsvTypeParser.isNotParsableNumber(noCommas)) {
|
|
90
|
+
return NewTableColumnTypes.STRING;
|
|
184
91
|
}
|
|
185
|
-
}, {
|
|
186
|
-
key: "checkLong",
|
|
187
|
-
value: function checkLong(value) {
|
|
188
|
-
var noCommas = value.replace(/,/g, '');
|
|
189
92
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
}
|
|
93
|
+
return NewTableColumnTypes.DOUBLE;
|
|
94
|
+
}
|
|
193
95
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
}
|
|
96
|
+
static checkBoolean(value) {
|
|
97
|
+
var lower = value.toLowerCase();
|
|
197
98
|
|
|
198
|
-
|
|
99
|
+
if (lower === 'true' || lower === 'false') {
|
|
100
|
+
return NewTableColumnTypes.BOOLEAN;
|
|
199
101
|
}
|
|
200
|
-
}, {
|
|
201
|
-
key: "checkDouble",
|
|
202
|
-
value: function checkDouble(value) {
|
|
203
|
-
var noCommas = value.replace(/,/g, '');
|
|
204
102
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
}
|
|
103
|
+
return NewTableColumnTypes.STRING;
|
|
104
|
+
}
|
|
208
105
|
|
|
209
|
-
|
|
106
|
+
static checkDateTime(value) {
|
|
107
|
+
if (DATE_TIME_REGEX.test(value)) {
|
|
108
|
+
return NewTableColumnTypes.DATE_TIME;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return NewTableColumnTypes.STRING;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
static checkLocalTime(value) {
|
|
115
|
+
if (LOCAL_TIME_REGEX.test(value)) {
|
|
116
|
+
return NewTableColumnTypes.LOCAL_TIME;
|
|
210
117
|
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
118
|
+
|
|
119
|
+
return NewTableColumnTypes.STRING;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
static getTypeFromUnknown(value) {
|
|
123
|
+
var noCommas = value.replace(/,/g, '');
|
|
124
|
+
|
|
125
|
+
if (CsvTypeParser.isNotParsableNumber(noCommas)) {
|
|
214
126
|
var lower = value.toLowerCase();
|
|
215
127
|
|
|
216
128
|
if (lower === 'true' || lower === 'false') {
|
|
217
129
|
return NewTableColumnTypes.BOOLEAN;
|
|
218
130
|
}
|
|
219
131
|
|
|
220
|
-
|
|
221
|
-
}
|
|
222
|
-
}, {
|
|
223
|
-
key: "checkDateTime",
|
|
224
|
-
value: function checkDateTime(value) {
|
|
225
|
-
if (DATE_TIME_REGEX.test(value)) {
|
|
132
|
+
if (DATE_TIME_REGEX.test(value) && value.includes(':')) {
|
|
226
133
|
return NewTableColumnTypes.DATE_TIME;
|
|
227
134
|
}
|
|
228
135
|
|
|
229
|
-
return NewTableColumnTypes.STRING;
|
|
230
|
-
}
|
|
231
|
-
}, {
|
|
232
|
-
key: "checkLocalTime",
|
|
233
|
-
value: function checkLocalTime(value) {
|
|
234
136
|
if (LOCAL_TIME_REGEX.test(value)) {
|
|
235
137
|
return NewTableColumnTypes.LOCAL_TIME;
|
|
236
138
|
}
|
|
237
139
|
|
|
238
140
|
return NewTableColumnTypes.STRING;
|
|
239
141
|
}
|
|
240
|
-
}, {
|
|
241
|
-
key: "getTypeFromUnknown",
|
|
242
|
-
value: function getTypeFromUnknown(value) {
|
|
243
|
-
var noCommas = value.replace(/,/g, '');
|
|
244
142
|
|
|
245
|
-
|
|
246
|
-
|
|
143
|
+
return CsvTypeParser.getNumberType(noCommas);
|
|
144
|
+
}
|
|
247
145
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
146
|
+
static getNumberType(value) {
|
|
147
|
+
if (value.includes('.')) {
|
|
148
|
+
return NewTableColumnTypes.DOUBLE;
|
|
149
|
+
} // Fast length check
|
|
251
150
|
|
|
252
|
-
if (DATE_TIME_REGEX.test(value) && value.includes(':')) {
|
|
253
|
-
return NewTableColumnTypes.DATE_TIME;
|
|
254
|
-
}
|
|
255
151
|
|
|
256
|
-
|
|
257
|
-
return NewTableColumnTypes.LOCAL_TIME;
|
|
258
|
-
}
|
|
152
|
+
var maxIntLength = value.startsWith('-') ? 11 : 10;
|
|
259
153
|
|
|
260
|
-
|
|
261
|
-
|
|
154
|
+
if (value.length > maxIntLength) {
|
|
155
|
+
return NewTableColumnTypes.LONG;
|
|
156
|
+
} // Slower parseInt check
|
|
262
157
|
|
|
263
|
-
|
|
158
|
+
|
|
159
|
+
var intValue = parseInt(value, 10);
|
|
160
|
+
|
|
161
|
+
if (intValue > MAX_INT || intValue < MIN_INT) {
|
|
162
|
+
return NewTableColumnTypes.LONG;
|
|
264
163
|
}
|
|
265
|
-
}, {
|
|
266
|
-
key: "getNumberType",
|
|
267
|
-
value: function getNumberType(value) {
|
|
268
|
-
if (value.includes('.')) {
|
|
269
|
-
return NewTableColumnTypes.DOUBLE;
|
|
270
|
-
} // Fast length check
|
|
271
164
|
|
|
165
|
+
return NewTableColumnTypes.INTEGER;
|
|
166
|
+
}
|
|
272
167
|
|
|
273
|
-
|
|
168
|
+
constructor(onFileCompleted, file, readHeaders, parentConfig, nullString, onProgress, onError, totalChunks, isZip, shouldTrim) {
|
|
169
|
+
this.onFileCompleted = onFileCompleted;
|
|
170
|
+
this.file = file;
|
|
171
|
+
this.readHeaders = readHeaders;
|
|
172
|
+
this.nullString = nullString;
|
|
173
|
+
this.onProgress = onProgress;
|
|
174
|
+
this.onError = onError;
|
|
175
|
+
this.types = null;
|
|
176
|
+
this.chunks = 0;
|
|
177
|
+
this.totalChunks = totalChunks;
|
|
178
|
+
this.isZip = isZip;
|
|
179
|
+
this.shouldTrim = shouldTrim;
|
|
180
|
+
this.zipProgress = 0;
|
|
181
|
+
this.handleChunk = this.handleChunk.bind(this);
|
|
182
|
+
this.handleComplete = this.handleComplete.bind(this);
|
|
183
|
+
this.handleError = this.handleError.bind(this);
|
|
184
|
+
this.handleNodeUpdate = this.handleNodeUpdate.bind(this);
|
|
185
|
+
this.config = _objectSpread(_objectSpread({}, parentConfig), {}, {
|
|
186
|
+
error: this.handleError,
|
|
187
|
+
chunk: this.handleChunk,
|
|
188
|
+
complete: this.handleComplete
|
|
189
|
+
});
|
|
190
|
+
}
|
|
274
191
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
192
|
+
parse() {
|
|
193
|
+
var toParse = this.isZip ? this.file.nodeStream('nodebuffer', this.handleNodeUpdate) : this.file;
|
|
194
|
+
Papa.parse(toParse, this.config);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
handleChunk(result, parser) {
|
|
198
|
+
var {
|
|
199
|
+
data
|
|
200
|
+
} = result;
|
|
278
201
|
|
|
202
|
+
if (!this.types) {
|
|
203
|
+
if (!data || data.length === 0) {
|
|
204
|
+
parser.abort();
|
|
205
|
+
this.onError('Error parsing CSV: no data in file.');
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
279
208
|
|
|
280
|
-
|
|
209
|
+
this.types = new Array(data[0].length).fill(UNKNOWN);
|
|
281
210
|
|
|
282
|
-
if (
|
|
283
|
-
|
|
211
|
+
if (this.readHeaders) {
|
|
212
|
+
// If headers are being read from the file, remove them from type analysis
|
|
213
|
+
data = data.slice(1);
|
|
284
214
|
}
|
|
215
|
+
}
|
|
285
216
|
|
|
286
|
-
|
|
217
|
+
data.forEach(row => {
|
|
218
|
+
if (row.length >= this.types.length) {
|
|
219
|
+
for (var i = 0; i < this.types.length; i += 1) {
|
|
220
|
+
this.types[i] = CsvTypeParser.determineType(this.shouldTrim ? row[i].trim() : row[i], this.types[i], this.nullString);
|
|
221
|
+
}
|
|
222
|
+
} else {
|
|
223
|
+
parser.abort();
|
|
224
|
+
this.onError("Error parsing CSV: Insufficient data in row.\nExpected length ".concat(this.types.length, " but found ").concat(row.length, ".\nRow = ").concat(row));
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
this.chunks += 1; // 50 because the type parsing accounts for 50% of the parsing
|
|
228
|
+
|
|
229
|
+
var progress = 0;
|
|
230
|
+
|
|
231
|
+
if (this.totalChunks > 0) {
|
|
232
|
+
progress = Math.round(this.chunks / this.totalChunks * 50);
|
|
233
|
+
} else {
|
|
234
|
+
progress = Math.round(this.zipProgress / 2);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
var isCancelled = this.onProgress(progress);
|
|
238
|
+
|
|
239
|
+
if (isCancelled) {
|
|
240
|
+
parser.abort();
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
handleComplete(results) {
|
|
245
|
+
var {
|
|
246
|
+
types,
|
|
247
|
+
onFileCompleted
|
|
248
|
+
} = this; // results is undefined for a succesful parse, but has meta data for an abort
|
|
249
|
+
|
|
250
|
+
if (!results || !results.meta.aborted) {
|
|
251
|
+
onFileCompleted(types.map(type => type === UNKNOWN ? NewTableColumnTypes.STRING : type));
|
|
287
252
|
}
|
|
288
|
-
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
handleError(error) {
|
|
256
|
+
var {
|
|
257
|
+
onError
|
|
258
|
+
} = this;
|
|
259
|
+
onError(error);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
handleNodeUpdate(metadata) {
|
|
263
|
+
this.zipProgress = metadata.percent;
|
|
264
|
+
}
|
|
289
265
|
|
|
290
|
-
|
|
291
|
-
}();
|
|
266
|
+
}
|
|
292
267
|
|
|
293
268
|
export default CsvTypeParser;
|
|
294
269
|
//# sourceMappingURL=CsvTypeParser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/csv/CsvTypeParser.js"],"names":["Papa","NewTableColumnTypes","UNKNOWN","MAX_INT","MIN_INT","DATE_TIME_REGEX","LOCAL_TIME_REGEX","CsvTypeParser","onFileCompleted","file","readHeaders","parentConfig","nullString","onProgress","onError","totalChunks","isZip","shouldTrim","types","chunks","zipProgress","handleChunk","bind","handleComplete","handleError","handleNodeUpdate","config","error","chunk","complete","toParse","nodeStream","parse","result","parser","data","length","abort","Array","fill","slice","forEach","row","i","determineType","trim","progress","Math","round","isCancelled","results","meta","aborted","map","type","STRING","metadata","percent","value","INTEGER","checkInteger","LONG","checkLong","DOUBLE","checkDouble","BOOLEAN","checkBoolean","DATE_TIME","checkDateTime","LOCAL_TIME","checkLocalTime","getTypeFromUnknown","s","isNaN","noCommas","replace","isNotParsableNumber","getNumberType","includes","lower","toLowerCase","test","maxIntLength","startsWith","intValue","parseInt"],"mappings":"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","sourcesContent":["// Intentionally using isNaN rather than Number.isNaN\n/* eslint-disable no-restricted-globals */\nimport Papa from 'papaparse';\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(value, type, nullString) {\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) {\n return isNaN(s) || s === 'Infinity' || s === '-Infinity';\n }\n\n static checkInteger(value) {\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) {\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) {\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) {\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) {\n if (DATE_TIME_REGEX.test(value)) {\n return NewTableColumnTypes.DATE_TIME;\n }\n\n return NewTableColumnTypes.STRING;\n }\n\n static checkLocalTime(value) {\n if (LOCAL_TIME_REGEX.test(value)) {\n return NewTableColumnTypes.LOCAL_TIME;\n }\n\n return NewTableColumnTypes.STRING;\n }\n\n static getTypeFromUnknown(value) {\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) {\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,\n file,\n readHeaders,\n parentConfig,\n nullString,\n onProgress,\n onError,\n totalChunks,\n isZip,\n shouldTrim\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.types = null;\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 parse() {\n const toParse = this.isZip\n ? this.file.nodeStream('nodebuffer', this.handleNodeUpdate)\n : this.file;\n Papa.parse(toParse, this.config);\n }\n\n handleChunk(result, parser) {\n let { data } = result;\n if (!this.types) {\n if (!data || 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 data.forEach(row => {\n if (row.length >= this.types.length) {\n for (let i = 0; i < this.types.length; i += 1) {\n this.types[i] = CsvTypeParser.determineType(\n this.shouldTrim ? row[i].trim() : row[i],\n this.types[i],\n this.nullString\n );\n }\n } else {\n parser.abort();\n this.onError(\n `Error parsing CSV: Insufficient data in row.\\nExpected length ${this.types.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) {\n const { types, onFileCompleted } = this;\n // results is undefined for a succesful parse, but has meta data for an abort\n if (!results || !results.meta.aborted) {\n onFileCompleted(\n types.map(type =>\n type === UNKNOWN ? NewTableColumnTypes.STRING : type\n )\n );\n }\n }\n\n handleError(error) {\n const { onError } = this;\n onError(error);\n }\n\n handleNodeUpdate(metadata) {\n this.zipProgress = metadata.percent;\n }\n}\n\nexport default CsvTypeParser;\n"],"file":"CsvTypeParser.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/csv/CsvTypeParser.js"],"names":["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","types","chunks","zipProgress","handleChunk","bind","handleComplete","handleError","handleNodeUpdate","config","error","chunk","complete","parse","toParse","nodeStream","result","parser","data","abort","Array","fill","slice","forEach","row","i","trim","progress","Math","round","isCancelled","results","meta","aborted","map","metadata","percent"],"mappings":"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","sourcesContent":["// Intentionally using isNaN rather than Number.isNaN\n/* eslint-disable no-restricted-globals */\nimport Papa from 'papaparse';\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(value, type, nullString) {\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) {\n return isNaN(s) || s === 'Infinity' || s === '-Infinity';\n }\n\n static checkInteger(value) {\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) {\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) {\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) {\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) {\n if (DATE_TIME_REGEX.test(value)) {\n return NewTableColumnTypes.DATE_TIME;\n }\n\n return NewTableColumnTypes.STRING;\n }\n\n static checkLocalTime(value) {\n if (LOCAL_TIME_REGEX.test(value)) {\n return NewTableColumnTypes.LOCAL_TIME;\n }\n\n return NewTableColumnTypes.STRING;\n }\n\n static getTypeFromUnknown(value) {\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) {\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,\n file,\n readHeaders,\n parentConfig,\n nullString,\n onProgress,\n onError,\n totalChunks,\n isZip,\n shouldTrim\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.types = null;\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 parse() {\n const toParse = this.isZip\n ? this.file.nodeStream('nodebuffer', this.handleNodeUpdate)\n : this.file;\n Papa.parse(toParse, this.config);\n }\n\n handleChunk(result, parser) {\n let { data } = result;\n if (!this.types) {\n if (!data || 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 data.forEach(row => {\n if (row.length >= this.types.length) {\n for (let i = 0; i < this.types.length; i += 1) {\n this.types[i] = CsvTypeParser.determineType(\n this.shouldTrim ? row[i].trim() : row[i],\n this.types[i],\n this.nullString\n );\n }\n } else {\n parser.abort();\n this.onError(\n `Error parsing CSV: Insufficient data in row.\\nExpected length ${this.types.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) {\n const { types, onFileCompleted } = this;\n // results is undefined for a succesful parse, but has meta data for an abort\n if (!results || !results.meta.aborted) {\n onFileCompleted(\n types.map(type =>\n type === UNKNOWN ? NewTableColumnTypes.STRING : type\n )\n );\n }\n }\n\n handleError(error) {\n const { onError } = this;\n onError(error);\n }\n\n handleNodeUpdate(metadata) {\n this.zipProgress = metadata.percent;\n }\n}\n\nexport default CsvTypeParser;\n"],"file":"CsvTypeParser.js"}
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
2
|
-
|
|
3
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; }
|
|
4
2
|
|
|
5
3
|
/**
|
|
6
4
|
* Valid column types to be used for a call to newTable.
|
|
7
5
|
*/
|
|
8
|
-
|
|
9
|
-
_classCallCheck(this, NewTableColumnTypes);
|
|
10
|
-
};
|
|
6
|
+
class NewTableColumnTypes {}
|
|
11
7
|
|
|
12
8
|
_defineProperty(NewTableColumnTypes, "INTEGER", 'int');
|
|
13
9
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/csv/NewTableColumnTypes.js"],"names":["NewTableColumnTypes"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/csv/NewTableColumnTypes.js"],"names":["NewTableColumnTypes"],"mappings":";;AAAA;AACA;AACA;AACA,MAAMA,mBAAN,CAA0B;;gBAApBA,mB,aACa,K;;gBADbA,mB,UAGU,M;;gBAHVA,mB,YAKY,Q;;gBALZA,mB,aAOa,M;;gBAPbA,mB,YASY,Q;;gBATZA,mB,eAWe,U;;gBAXfA,mB,gBAagB,W;;AAGtB,eAAeA,mBAAf","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"],"file":"NewTableColumnTypes.js"}
|
package/dist/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export { default as Console } from
|
|
2
|
-
export { default as ConsoleInput } from
|
|
3
|
-
export { default as ConsoleMenu } from
|
|
4
|
-
export { default as SHORTCUTS } from
|
|
5
|
-
export { default as ConsoleStatusBar } from
|
|
6
|
-
export { default as MonacoUtils } from
|
|
7
|
-
export { default as Editor } from
|
|
8
|
-
export { default as ScriptEditor } from
|
|
9
|
-
export { default as ScriptEditorUtils } from
|
|
10
|
-
export * from
|
|
11
|
-
export * from
|
|
12
|
-
export * from
|
|
13
|
-
export { default as LogView } from
|
|
14
|
-
export { default } from
|
|
1
|
+
export { default as Console } from "./Console.js";
|
|
2
|
+
export { default as ConsoleInput } from "./ConsoleInput.js";
|
|
3
|
+
export { default as ConsoleMenu } from "./ConsoleMenu.js";
|
|
4
|
+
export { default as SHORTCUTS } from "./ConsoleShortcuts.js";
|
|
5
|
+
export { default as ConsoleStatusBar } from "./ConsoleStatusBar.js";
|
|
6
|
+
export { default as MonacoUtils } from "./monaco/MonacoUtils.js";
|
|
7
|
+
export { default as Editor } from "./notebook/Editor.js";
|
|
8
|
+
export { default as ScriptEditor } from "./notebook/ScriptEditor.js";
|
|
9
|
+
export { default as ScriptEditorUtils } from "./notebook/ScriptEditorUtils.js";
|
|
10
|
+
export * from "./common/index.js";
|
|
11
|
+
export * from "./command-history/index.js";
|
|
12
|
+
export * from "./console-history/index.js";
|
|
13
|
+
export { default as LogView } from "./log/LogView.js";
|
|
14
|
+
export { default } from "./Console.js";
|
|
15
15
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["default","Console","ConsoleInput","ConsoleMenu","SHORTCUTS","ConsoleStatusBar","MonacoUtils","Editor","ScriptEditor","ScriptEditorUtils","LogView"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["default","Console","ConsoleInput","ConsoleMenu","SHORTCUTS","ConsoleStatusBar","MonacoUtils","Editor","ScriptEditor","ScriptEditorUtils","LogView"],"mappings":"SAASA,OAAO,IAAIC,O;SACXD,OAAO,IAAIE,Y;SACXF,OAAO,IAAIG,W;SACXH,OAAO,IAAII,S;SACXJ,OAAO,IAAIK,gB;SACXL,OAAO,IAAIM,W;SACXN,OAAO,IAAIO,M;SACXP,OAAO,IAAIQ,Y;SACXR,OAAO,IAAIS,iB;;;;SAIXT,OAAO,IAAIU,O;SAEXV,O","sourcesContent":["export { default as Console } from './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';\n\nexport { default } from './Console';\n"],"file":"index.js"}
|