@kepler.gl/utils 3.1.0-alpha.1 → 3.1.0-alpha.2
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/aggregation.d.ts +13 -0
- package/dist/aggregation.js +84 -0
- package/dist/application-config.d.ts +25 -0
- package/dist/application-config.js +52 -0
- package/dist/arrow-data-container.d.ts +62 -0
- package/dist/arrow-data-container.js +331 -0
- package/dist/color-utils.d.ts +108 -0
- package/dist/color-utils.js +443 -0
- package/dist/data-container-interface.d.ts +138 -0
- package/dist/data-container-interface.js +6 -0
- package/dist/data-container-utils.d.ts +30 -0
- package/dist/data-container-utils.js +74 -0
- package/dist/data-row.d.ts +59 -0
- package/dist/data-row.js +110 -0
- package/dist/data-scale-utils.d.ts +120 -0
- package/dist/data-scale-utils.js +340 -0
- package/dist/data-utils.d.ts +98 -0
- package/dist/data-utils.js +436 -0
- package/dist/dataset-utils.d.ts +45 -0
- package/dist/dataset-utils.js +313 -0
- package/dist/dom-to-image.d.ts +73 -0
- package/dist/dom-to-image.js +421 -0
- package/dist/dom-utils.d.ts +23 -0
- package/dist/dom-utils.js +349 -0
- package/dist/effect-utils.d.ts +24 -0
- package/dist/effect-utils.js +166 -0
- package/dist/export-map-html.d.ts +9 -0
- package/dist/export-map-html.js +25 -0
- package/dist/export-utils.d.ts +40 -0
- package/dist/export-utils.js +201 -0
- package/dist/filter-utils.d.ts +331 -0
- package/dist/filter-utils.js +1214 -0
- package/dist/format.d.ts +3 -0
- package/dist/format.js +38 -0
- package/dist/gl-utils.d.ts +1 -0
- package/dist/gl-utils.js +27 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.js +941 -0
- package/dist/indexed-data-container.d.ts +34 -0
- package/dist/indexed-data-container.js +214 -0
- package/dist/locale-utils.d.ts +2 -0
- package/dist/locale-utils.js +39 -0
- package/dist/map-info-utils.d.ts +1 -0
- package/dist/map-info-utils.js +14 -0
- package/dist/map-style-utils/mapbox-gl-style-editor.d.ts +57 -0
- package/dist/map-style-utils/mapbox-gl-style-editor.js +188 -0
- package/dist/map-style-utils/mapbox-utils.d.ts +14 -0
- package/dist/map-style-utils/mapbox-utils.js +51 -0
- package/dist/map-utils.d.ts +9 -0
- package/dist/map-utils.js +48 -0
- package/dist/mapbox-utils.d.ts +7 -0
- package/dist/mapbox-utils.js +19 -0
- package/dist/noop.d.ts +1 -0
- package/dist/noop.js +13 -0
- package/dist/notifications-utils.d.ts +42 -0
- package/dist/notifications-utils.js +69 -0
- package/dist/observe-dimensions.d.ts +15 -0
- package/dist/observe-dimensions.js +130 -0
- package/dist/plot.d.ts +131 -0
- package/dist/plot.js +615 -0
- package/dist/position-utils.d.ts +6 -0
- package/dist/position-utils.js +26 -0
- package/dist/projection-utils.d.ts +22 -0
- package/dist/projection-utils.js +83 -0
- package/dist/quick-insertion-sort.d.ts +12 -0
- package/dist/quick-insertion-sort.js +132 -0
- package/dist/row-data-container.d.ts +31 -0
- package/dist/row-data-container.js +206 -0
- package/dist/searcher-utils.d.ts +1 -0
- package/dist/searcher-utils.js +25 -0
- package/dist/split-map-utils.d.ts +32 -0
- package/dist/split-map-utils.js +99 -0
- package/dist/strings.d.ts +4 -0
- package/dist/strings.js +16 -0
- package/dist/time.d.ts +54 -0
- package/dist/time.js +325 -0
- package/dist/types.d.ts +18 -0
- package/dist/types.js +6 -0
- package/dist/utils.d.ts +104 -0
- package/dist/utils.js +241 -0
- package/package.json +6 -5
@@ -0,0 +1,436 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
5
|
+
value: true
|
6
|
+
});
|
7
|
+
exports.FIELD_DISPLAY_FORMAT = void 0;
|
8
|
+
exports.applyCustomFormat = applyCustomFormat;
|
9
|
+
exports.applyDefaultFormat = applyDefaultFormat;
|
10
|
+
exports.applyValueMap = applyValueMap;
|
11
|
+
exports.clamp = clamp;
|
12
|
+
exports.datetimeFormatter = datetimeFormatter;
|
13
|
+
exports.floatFormatter = exports.defaultFormatter = void 0;
|
14
|
+
exports.formatNumber = formatNumber;
|
15
|
+
exports.getBooleanFormatter = getBooleanFormatter;
|
16
|
+
exports.getColumnFormatter = getColumnFormatter;
|
17
|
+
exports.getFormatter = getFormatter;
|
18
|
+
exports.getLatLngBounds = getLatLngBounds;
|
19
|
+
exports.getRoundingDecimalFromStep = getRoundingDecimalFromStep;
|
20
|
+
exports.getSampleData = getSampleData;
|
21
|
+
exports.getSortingFunction = getSortingFunction;
|
22
|
+
exports.hasOwnProperty = hasOwnProperty;
|
23
|
+
exports.isNumber = isNumber;
|
24
|
+
exports.normalizeSliderValue = normalizeSliderValue;
|
25
|
+
exports.numberSort = numberSort;
|
26
|
+
exports.parseFieldValue = void 0;
|
27
|
+
exports.preciseRound = preciseRound;
|
28
|
+
exports.reverseFormatNumber = reverseFormatNumber;
|
29
|
+
exports.roundToFour = roundToFour;
|
30
|
+
exports.roundValToStep = roundValToStep;
|
31
|
+
exports.timeToUnixMilli = timeToUnixMilli;
|
32
|
+
exports.unique = unique;
|
33
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
34
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
35
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
36
|
+
var _assert = _interopRequireDefault(require("assert"));
|
37
|
+
var _d3Format = require("d3-format");
|
38
|
+
var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
|
39
|
+
var _constants = require("@kepler.gl/constants");
|
40
|
+
var _commonUtils = require("@kepler.gl/common-utils");
|
41
|
+
var _plot = require("./plot");
|
42
|
+
var _utils = require("./utils");
|
43
|
+
var _FIELD_DISPLAY_FORMAT; // SPDX-License-Identifier: MIT
|
44
|
+
// Copyright contributors to the kepler.gl project
|
45
|
+
/**
|
46
|
+
* simple getting unique values of an array
|
47
|
+
*
|
48
|
+
* @param values
|
49
|
+
* @returns unique values
|
50
|
+
*/
|
51
|
+
function unique(values) {
|
52
|
+
var results = [];
|
53
|
+
var uniqueSet = new Set(values);
|
54
|
+
uniqueSet.forEach(function (v) {
|
55
|
+
if ((0, _commonUtils.notNullorUndefined)(v)) {
|
56
|
+
results.push(v);
|
57
|
+
}
|
58
|
+
});
|
59
|
+
return results;
|
60
|
+
}
|
61
|
+
function getLatLngBounds(points, idx, limit) {
|
62
|
+
var lats = points.map(function (d) {
|
63
|
+
return Number(Array.isArray(d)) && d[idx];
|
64
|
+
}).filter(Number.isFinite).sort(numberSort);
|
65
|
+
if (!lats.length) {
|
66
|
+
return null;
|
67
|
+
}
|
68
|
+
|
69
|
+
// clamp to limit
|
70
|
+
return [Math.max(lats[0], limit[0]), Math.min(lats[lats.length - 1], limit[1])];
|
71
|
+
}
|
72
|
+
function clamp(_ref) {
|
73
|
+
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
74
|
+
min = _ref2[0],
|
75
|
+
max = _ref2[1];
|
76
|
+
var val = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
77
|
+
return val <= min ? min : val >= max ? max : val;
|
78
|
+
}
|
79
|
+
function getSampleData(data) {
|
80
|
+
var sampleSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;
|
81
|
+
var getValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (d) {
|
82
|
+
return d;
|
83
|
+
};
|
84
|
+
var sampleStep = Math.max(Math.floor(data.length / sampleSize), 1);
|
85
|
+
var output = [];
|
86
|
+
for (var i = 0; i < data.length; i += sampleStep) {
|
87
|
+
output.push(getValue(data[i]));
|
88
|
+
}
|
89
|
+
return output;
|
90
|
+
}
|
91
|
+
|
92
|
+
/**
|
93
|
+
* Convert different time format to unix milliseconds
|
94
|
+
*/
|
95
|
+
function timeToUnixMilli(value, format) {
|
96
|
+
if ((0, _commonUtils.notNullorUndefined)(value)) {
|
97
|
+
if (typeof value === 'string') {
|
98
|
+
return _momentTimezone["default"].utc(value, format).valueOf();
|
99
|
+
}
|
100
|
+
if (typeof value === 'number') {
|
101
|
+
return format === 'x' ? value * 1000 : value;
|
102
|
+
}
|
103
|
+
if (value instanceof Date) {
|
104
|
+
return value.valueOf();
|
105
|
+
}
|
106
|
+
}
|
107
|
+
return null;
|
108
|
+
}
|
109
|
+
|
110
|
+
/**
|
111
|
+
* Whether d is a number, this filtered out NaN as well
|
112
|
+
*/
|
113
|
+
function isNumber(d) {
|
114
|
+
return Number.isFinite(d);
|
115
|
+
}
|
116
|
+
|
117
|
+
/**
|
118
|
+
* whether object has property
|
119
|
+
* @param {string} prop
|
120
|
+
* @returns {boolean} - yes or no
|
121
|
+
*/
|
122
|
+
function hasOwnProperty(obj, prop) {
|
123
|
+
return Object.prototype.hasOwnProperty.call(obj, prop);
|
124
|
+
}
|
125
|
+
function numberSort(a, b) {
|
126
|
+
return a - b;
|
127
|
+
}
|
128
|
+
function getSortingFunction(fieldType) {
|
129
|
+
switch (fieldType) {
|
130
|
+
case _constants.ALL_FIELD_TYPES.real:
|
131
|
+
case _constants.ALL_FIELD_TYPES.integer:
|
132
|
+
case _constants.ALL_FIELD_TYPES.timestamp:
|
133
|
+
return numberSort;
|
134
|
+
default:
|
135
|
+
return undefined;
|
136
|
+
}
|
137
|
+
}
|
138
|
+
|
139
|
+
/**
|
140
|
+
* round number with exact number of decimals
|
141
|
+
* return as a string
|
142
|
+
*/
|
143
|
+
function preciseRound(num, decimals) {
|
144
|
+
var t = Math.pow(10, decimals);
|
145
|
+
return (Math.round(num * t + (decimals > 0 ? 1 : 0) * (Math.sign(num) * (10 / Math.pow(100, decimals)))) / t).toFixed(decimals);
|
146
|
+
}
|
147
|
+
|
148
|
+
/**
|
149
|
+
* round a giving number at most 4 decimal places
|
150
|
+
* e.g. 10 -> 10, 1.12345 -> 1.2345, 2.0 -> 2
|
151
|
+
*/
|
152
|
+
function roundToFour(num) {
|
153
|
+
// @ts-expect-error
|
154
|
+
return Number("".concat(Math.round("".concat(num, "e+4")), "e-4"));
|
155
|
+
}
|
156
|
+
/**
|
157
|
+
* get number of decimals to round to for slider from step
|
158
|
+
* @param step
|
159
|
+
* @returns- number of decimal
|
160
|
+
*/
|
161
|
+
function getRoundingDecimalFromStep(step) {
|
162
|
+
if (isNaN(step)) {
|
163
|
+
(0, _assert["default"])('step is not a number');
|
164
|
+
(0, _assert["default"])(step);
|
165
|
+
}
|
166
|
+
var stepStr = step.toString();
|
167
|
+
|
168
|
+
// in case the step is a very small number e.g. 1e-7, return decimal e.g. 7 directly
|
169
|
+
var splitExponential = stepStr.split('e-');
|
170
|
+
if (splitExponential.length === 2) {
|
171
|
+
var coeffZero = splitExponential[0].split('.');
|
172
|
+
var coeffDecimal = coeffZero.length === 1 ? 0 : coeffZero[1].length;
|
173
|
+
return parseInt(splitExponential[1], 10) + coeffDecimal;
|
174
|
+
}
|
175
|
+
var splitZero = stepStr.split('.');
|
176
|
+
if (splitZero.length === 1) {
|
177
|
+
return 0;
|
178
|
+
}
|
179
|
+
return splitZero[1].length;
|
180
|
+
}
|
181
|
+
|
182
|
+
/**
|
183
|
+
* If marks is provided, snap to marks, if not normalize to step
|
184
|
+
* @param val
|
185
|
+
* @param minValue
|
186
|
+
* @param step
|
187
|
+
* @param marks
|
188
|
+
*/
|
189
|
+
function normalizeSliderValue(val, minValue, step, marks) {
|
190
|
+
if (marks && marks.length) {
|
191
|
+
// Use in slider, given a number and an array of numbers, return the nears number from the array
|
192
|
+
return (0, _plot.snapToMarks)(val, marks);
|
193
|
+
}
|
194
|
+
return roundValToStep(minValue, step, val);
|
195
|
+
}
|
196
|
+
|
197
|
+
/**
|
198
|
+
* round the value to step for the slider
|
199
|
+
* @param minValue
|
200
|
+
* @param step
|
201
|
+
* @param val
|
202
|
+
* @returns - rounded number
|
203
|
+
*/
|
204
|
+
function roundValToStep(minValue, step, val) {
|
205
|
+
if (!isNumber(step) || !isNumber(minValue)) {
|
206
|
+
return val;
|
207
|
+
}
|
208
|
+
var decimal = getRoundingDecimalFromStep(step);
|
209
|
+
var steps = Math.floor((val - minValue) / step);
|
210
|
+
var remain = val - (steps * step + minValue);
|
211
|
+
|
212
|
+
// has to round because javascript turns 0.1 into 0.9999999999999987
|
213
|
+
remain = Number(preciseRound(remain, 8));
|
214
|
+
var closest;
|
215
|
+
if (remain === 0) {
|
216
|
+
closest = val;
|
217
|
+
} else if (remain < step / 2) {
|
218
|
+
closest = steps * step + minValue;
|
219
|
+
} else {
|
220
|
+
closest = (steps + 1) * step + minValue;
|
221
|
+
}
|
222
|
+
|
223
|
+
// precise round return a string rounded to the defined decimal
|
224
|
+
var rounded = preciseRound(closest, decimal);
|
225
|
+
return Number(rounded);
|
226
|
+
}
|
227
|
+
|
228
|
+
/**
|
229
|
+
* Get the value format based on field and format options
|
230
|
+
* Used in render tooltip value
|
231
|
+
*/
|
232
|
+
var defaultFormatter = exports.defaultFormatter = function defaultFormatter(v) {
|
233
|
+
return (0, _commonUtils.notNullorUndefined)(v) ? String(v) : '';
|
234
|
+
};
|
235
|
+
var floatFormatter = exports.floatFormatter = function floatFormatter(v) {
|
236
|
+
return isNumber(v) ? String(roundToFour(v)) : '';
|
237
|
+
};
|
238
|
+
var FIELD_DISPLAY_FORMAT = exports.FIELD_DISPLAY_FORMAT = (_FIELD_DISPLAY_FORMAT = {}, (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.string, defaultFormatter), _constants.ALL_FIELD_TYPES.timestamp, defaultFormatter), _constants.ALL_FIELD_TYPES.integer, defaultFormatter), _constants.ALL_FIELD_TYPES.real, defaultFormatter), _constants.ALL_FIELD_TYPES["boolean"], defaultFormatter), _constants.ALL_FIELD_TYPES.date, defaultFormatter), _constants.ALL_FIELD_TYPES.geojson, function (d) {
|
239
|
+
return typeof d === 'string' ? d : (0, _utils.isPlainObject)(d) ? JSON.stringify(d) : Array.isArray(d) ? "[".concat(String(d), "]") : '';
|
240
|
+
}), _constants.ALL_FIELD_TYPES.geoarrow, function (d) {
|
241
|
+
return d;
|
242
|
+
}), _constants.ALL_FIELD_TYPES.object, JSON.stringify), _constants.ALL_FIELD_TYPES.array, JSON.stringify), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.h3, defaultFormatter));
|
243
|
+
|
244
|
+
/**
|
245
|
+
* Parse field value and type and return a string representation
|
246
|
+
*/
|
247
|
+
var parseFieldValue = exports.parseFieldValue = function parseFieldValue(value, type) {
|
248
|
+
if (!(0, _commonUtils.notNullorUndefined)(value)) {
|
249
|
+
return '';
|
250
|
+
}
|
251
|
+
return FIELD_DISPLAY_FORMAT[type] ? FIELD_DISPLAY_FORMAT[type](value) : String(value);
|
252
|
+
};
|
253
|
+
|
254
|
+
/**
|
255
|
+
* Get the value format based on field and format options
|
256
|
+
* Used in render tooltip value
|
257
|
+
* @param format
|
258
|
+
* @param field
|
259
|
+
*/
|
260
|
+
function getFormatter(format, field) {
|
261
|
+
if (!format) {
|
262
|
+
return defaultFormatter;
|
263
|
+
}
|
264
|
+
var tooltipFormat = Object.values(_constants.TOOLTIP_FORMATS).find(function (f) {
|
265
|
+
return f[_constants.TOOLTIP_KEY] === format;
|
266
|
+
});
|
267
|
+
if (tooltipFormat) {
|
268
|
+
return applyDefaultFormat(tooltipFormat);
|
269
|
+
} else if (typeof format === 'string' && field) {
|
270
|
+
return applyCustomFormat(format, field);
|
271
|
+
}
|
272
|
+
return defaultFormatter;
|
273
|
+
}
|
274
|
+
function getColumnFormatter(field) {
|
275
|
+
var format = field.format,
|
276
|
+
displayFormat = field.displayFormat;
|
277
|
+
if (!format && !displayFormat) {
|
278
|
+
return FIELD_DISPLAY_FORMAT[field.type];
|
279
|
+
}
|
280
|
+
var tooltipFormat = Object.values(_constants.TOOLTIP_FORMATS).find(function (f) {
|
281
|
+
return f[_constants.TOOLTIP_KEY] === displayFormat;
|
282
|
+
});
|
283
|
+
if (tooltipFormat) {
|
284
|
+
return applyDefaultFormat(tooltipFormat);
|
285
|
+
} else if (typeof displayFormat === 'string' && field) {
|
286
|
+
return applyCustomFormat(displayFormat, field);
|
287
|
+
} else if ((0, _typeof2["default"])(displayFormat) === 'object') {
|
288
|
+
return applyValueMap(displayFormat);
|
289
|
+
}
|
290
|
+
return defaultFormatter;
|
291
|
+
}
|
292
|
+
function applyValueMap(format) {
|
293
|
+
return function (v) {
|
294
|
+
return format[v];
|
295
|
+
};
|
296
|
+
}
|
297
|
+
function applyDefaultFormat(tooltipFormat) {
|
298
|
+
if (!tooltipFormat || !tooltipFormat.format) {
|
299
|
+
return defaultFormatter;
|
300
|
+
}
|
301
|
+
switch (tooltipFormat.type) {
|
302
|
+
case _constants.TOOLTIP_FORMAT_TYPES.DECIMAL:
|
303
|
+
return (0, _d3Format.format)(tooltipFormat.format);
|
304
|
+
case _constants.TOOLTIP_FORMAT_TYPES.DATE:
|
305
|
+
case _constants.TOOLTIP_FORMAT_TYPES.DATE_TIME:
|
306
|
+
return datetimeFormatter(null)(tooltipFormat.format);
|
307
|
+
case _constants.TOOLTIP_FORMAT_TYPES.PERCENTAGE:
|
308
|
+
return function (v) {
|
309
|
+
return "".concat((0, _d3Format.format)(_constants.TOOLTIP_FORMATS.DECIMAL_DECIMAL_FIXED_2.format)(v), "%");
|
310
|
+
};
|
311
|
+
case _constants.TOOLTIP_FORMAT_TYPES.BOOLEAN:
|
312
|
+
return getBooleanFormatter(tooltipFormat.format);
|
313
|
+
default:
|
314
|
+
return defaultFormatter;
|
315
|
+
}
|
316
|
+
}
|
317
|
+
function getBooleanFormatter(format) {
|
318
|
+
switch (format) {
|
319
|
+
case '01':
|
320
|
+
return function (v) {
|
321
|
+
return v ? '1' : '0';
|
322
|
+
};
|
323
|
+
case 'yn':
|
324
|
+
return function (v) {
|
325
|
+
return v ? 'yes' : 'no';
|
326
|
+
};
|
327
|
+
default:
|
328
|
+
return defaultFormatter;
|
329
|
+
}
|
330
|
+
}
|
331
|
+
// Allow user to specify custom tooltip format via config
|
332
|
+
function applyCustomFormat(format, field) {
|
333
|
+
switch (field.type) {
|
334
|
+
case _constants.ALL_FIELD_TYPES.real:
|
335
|
+
case _constants.ALL_FIELD_TYPES.integer:
|
336
|
+
return (0, _d3Format.format)(format);
|
337
|
+
case _constants.ALL_FIELD_TYPES.date:
|
338
|
+
case _constants.ALL_FIELD_TYPES.timestamp:
|
339
|
+
return datetimeFormatter(null)(format);
|
340
|
+
default:
|
341
|
+
return function (v) {
|
342
|
+
return v;
|
343
|
+
};
|
344
|
+
}
|
345
|
+
}
|
346
|
+
function formatLargeNumber(n) {
|
347
|
+
// SI-prefix with 4 significant digits
|
348
|
+
return (0, _d3Format.format)('.4~s')(n);
|
349
|
+
}
|
350
|
+
function formatNumber(n, type) {
|
351
|
+
switch (type) {
|
352
|
+
case _constants.ALL_FIELD_TYPES.integer:
|
353
|
+
if (n < 0) {
|
354
|
+
return "-".concat(formatNumber(-n, 'integer'));
|
355
|
+
}
|
356
|
+
if (n < 1000) {
|
357
|
+
return "".concat(Math.round(n));
|
358
|
+
}
|
359
|
+
if (n < 10 * 1000) {
|
360
|
+
return (0, _d3Format.format)(',')(Math.round(n));
|
361
|
+
}
|
362
|
+
return formatLargeNumber(n);
|
363
|
+
case _constants.ALL_FIELD_TYPES.real:
|
364
|
+
if (n < 0) {
|
365
|
+
return "-".concat(formatNumber(-n, 'number'));
|
366
|
+
}
|
367
|
+
if (n < 1000) {
|
368
|
+
return (0, _d3Format.format)('.4~r')(n);
|
369
|
+
}
|
370
|
+
if (n < 10 * 1000) {
|
371
|
+
return (0, _d3Format.format)(',.2~f')(n);
|
372
|
+
}
|
373
|
+
return formatLargeNumber(n);
|
374
|
+
default:
|
375
|
+
return formatNumber(n, 'real');
|
376
|
+
}
|
377
|
+
}
|
378
|
+
var transformation = {
|
379
|
+
Y: Math.pow(10, 24),
|
380
|
+
Z: Math.pow(10, 21),
|
381
|
+
E: Math.pow(10, 18),
|
382
|
+
P: Math.pow(10, 15),
|
383
|
+
T: Math.pow(10, 12),
|
384
|
+
G: Math.pow(10, 9),
|
385
|
+
M: Math.pow(10, 6),
|
386
|
+
k: Math.pow(10, 3),
|
387
|
+
h: Math.pow(10, 2),
|
388
|
+
da: Math.pow(10, 1),
|
389
|
+
d: Math.pow(10, -1),
|
390
|
+
c: Math.pow(10, -2),
|
391
|
+
m: Math.pow(10, -3),
|
392
|
+
μ: Math.pow(10, -6),
|
393
|
+
n: Math.pow(10, -9),
|
394
|
+
p: Math.pow(10, -12),
|
395
|
+
f: Math.pow(10, -15),
|
396
|
+
a: Math.pow(10, -18),
|
397
|
+
z: Math.pow(10, -21),
|
398
|
+
y: Math.pow(10, -24)
|
399
|
+
};
|
400
|
+
|
401
|
+
/**
|
402
|
+
* Convert a formatted number from string back to number
|
403
|
+
*/
|
404
|
+
function reverseFormatNumber(str) {
|
405
|
+
var returnValue = null;
|
406
|
+
var strNum = str.trim().replace(/,/g, '');
|
407
|
+
Object.entries(transformation).forEach(function (d) {
|
408
|
+
if (strNum.includes(d[0])) {
|
409
|
+
returnValue = parseFloat(strNum) * d[1];
|
410
|
+
return true;
|
411
|
+
}
|
412
|
+
return false;
|
413
|
+
});
|
414
|
+
|
415
|
+
// if no transformer found, convert to nuber regardless
|
416
|
+
return returnValue === null ? Number(strNum) : returnValue;
|
417
|
+
}
|
418
|
+
|
419
|
+
/**
|
420
|
+
* Format epoch milliseconds with a format string
|
421
|
+
* @type timezone
|
422
|
+
*/
|
423
|
+
function datetimeFormatter(timezone) {
|
424
|
+
return timezone ? function (format) {
|
425
|
+
return function (ts) {
|
426
|
+
return _momentTimezone["default"].utc(ts).tz(timezone).format(format);
|
427
|
+
};
|
428
|
+
} :
|
429
|
+
// return empty string instead of 'Invalid date' if ts is undefined/null
|
430
|
+
function (format) {
|
431
|
+
return function (ts) {
|
432
|
+
return ts ? _momentTimezone["default"].utc(ts).format(format) : '';
|
433
|
+
};
|
434
|
+
};
|
435
|
+
}
|
436
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZDNGb3JtYXQiLCJfbW9tZW50VGltZXpvbmUiLCJfY29uc3RhbnRzIiwiX2NvbW1vblV0aWxzIiwiX3Bsb3QiLCJfdXRpbHMiLCJfRklFTERfRElTUExBWV9GT1JNQVQiLCJ1bmlxdWUiLCJ2YWx1ZXMiLCJyZXN1bHRzIiwidW5pcXVlU2V0IiwiU2V0IiwiZm9yRWFjaCIsInYiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJwdXNoIiwiZ2V0TGF0TG5nQm91bmRzIiwicG9pbnRzIiwiaWR4IiwibGltaXQiLCJsYXRzIiwibWFwIiwiZCIsIk51bWJlciIsIkFycmF5IiwiaXNBcnJheSIsImZpbHRlciIsImlzRmluaXRlIiwic29ydCIsIm51bWJlclNvcnQiLCJsZW5ndGgiLCJNYXRoIiwibWF4IiwibWluIiwiY2xhbXAiLCJfcmVmIiwiX3JlZjIiLCJfc2xpY2VkVG9BcnJheTIiLCJ2YWwiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJnZXRTYW1wbGVEYXRhIiwiZGF0YSIsInNhbXBsZVNpemUiLCJnZXRWYWx1ZSIsInNhbXBsZVN0ZXAiLCJmbG9vciIsIm91dHB1dCIsImkiLCJ0aW1lVG9Vbml4TWlsbGkiLCJ2YWx1ZSIsImZvcm1hdCIsIm1vbWVudCIsInV0YyIsInZhbHVlT2YiLCJEYXRlIiwiaXNOdW1iZXIiLCJoYXNPd25Qcm9wZXJ0eSIsIm9iaiIsInByb3AiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJjYWxsIiwiYSIsImIiLCJnZXRTb3J0aW5nRnVuY3Rpb24iLCJmaWVsZFR5cGUiLCJBTExfRklFTERfVFlQRVMiLCJyZWFsIiwiaW50ZWdlciIsInRpbWVzdGFtcCIsInByZWNpc2VSb3VuZCIsIm51bSIsImRlY2ltYWxzIiwidCIsInBvdyIsInJvdW5kIiwic2lnbiIsInRvRml4ZWQiLCJyb3VuZFRvRm91ciIsImNvbmNhdCIsImdldFJvdW5kaW5nRGVjaW1hbEZyb21TdGVwIiwic3RlcCIsImlzTmFOIiwiYXNzZXJ0Iiwic3RlcFN0ciIsInRvU3RyaW5nIiwic3BsaXRFeHBvbmVudGlhbCIsInNwbGl0IiwiY29lZmZaZXJvIiwiY29lZmZEZWNpbWFsIiwicGFyc2VJbnQiLCJzcGxpdFplcm8iLCJub3JtYWxpemVTbGlkZXJWYWx1ZSIsIm1pblZhbHVlIiwibWFya3MiLCJzbmFwVG9NYXJrcyIsInJvdW5kVmFsVG9TdGVwIiwiZGVjaW1hbCIsInN0ZXBzIiwicmVtYWluIiwiY2xvc2VzdCIsInJvdW5kZWQiLCJkZWZhdWx0Rm9ybWF0dGVyIiwiZXhwb3J0cyIsIlN0cmluZyIsImZsb2F0Rm9ybWF0dGVyIiwiRklFTERfRElTUExBWV9GT1JNQVQiLCJfZGVmaW5lUHJvcGVydHkyIiwic3RyaW5nIiwiZGF0ZSIsImdlb2pzb24iLCJpc1BsYWluT2JqZWN0IiwiSlNPTiIsInN0cmluZ2lmeSIsImdlb2Fycm93Iiwib2JqZWN0IiwiYXJyYXkiLCJoMyIsInBhcnNlRmllbGRWYWx1ZSIsInR5cGUiLCJnZXRGb3JtYXR0ZXIiLCJmaWVsZCIsInRvb2x0aXBGb3JtYXQiLCJUT09MVElQX0ZPUk1BVFMiLCJmaW5kIiwiZiIsIlRPT0xUSVBfS0VZIiwiYXBwbHlEZWZhdWx0Rm9ybWF0IiwiYXBwbHlDdXN0b21Gb3JtYXQiLCJnZXRDb2x1bW5Gb3JtYXR0ZXIiLCJkaXNwbGF5Rm9ybWF0IiwiX3R5cGVvZjIiLCJhcHBseVZhbHVlTWFwIiwiVE9PTFRJUF9GT1JNQVRfVFlQRVMiLCJERUNJTUFMIiwiZDNGb3JtYXQiLCJEQVRFIiwiREFURV9USU1FIiwiZGF0ZXRpbWVGb3JtYXR0ZXIiLCJQRVJDRU5UQUdFIiwiREVDSU1BTF9ERUNJTUFMX0ZJWEVEXzIiLCJCT09MRUFOIiwiZ2V0Qm9vbGVhbkZvcm1hdHRlciIsImZvcm1hdExhcmdlTnVtYmVyIiwibiIsImZvcm1hdE51bWJlciIsInRyYW5zZm9ybWF0aW9uIiwiWSIsIloiLCJFIiwiUCIsIlQiLCJHIiwiTSIsImsiLCJoIiwiZGEiLCJjIiwibSIsIs68IiwicCIsInoiLCJ5IiwicmV2ZXJzZUZvcm1hdE51bWJlciIsInN0ciIsInJldHVyblZhbHVlIiwic3RyTnVtIiwidHJpbSIsInJlcGxhY2UiLCJlbnRyaWVzIiwiaW5jbHVkZXMiLCJwYXJzZUZsb2F0IiwidGltZXpvbmUiLCJ0cyIsInR6Il0sInNvdXJjZXMiOlsiLi4vc3JjL2RhdGEtdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtmb3JtYXQgYXMgZDNGb3JtYXR9IGZyb20gJ2QzLWZvcm1hdCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5cbmltcG9ydCB7XG4gIEFMTF9GSUVMRF9UWVBFUyxcbiAgVE9PTFRJUF9GT1JNQVRTLFxuICBUT09MVElQX0ZPUk1BVF9UWVBFUyxcbiAgVE9PTFRJUF9LRVksXG4gIFRvb2x0aXBGb3JtYXRcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7RmllbGQsIE1pbGxpc2Vjb25kfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtzbmFwVG9NYXJrc30gZnJvbSAnLi9wbG90JztcbmltcG9ydCB7aXNQbGFpbk9iamVjdH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCB0eXBlIEZpZWxkRm9ybWF0dGVyID0gKHZhbHVlOiBhbnkpID0+IHN0cmluZztcblxuLyoqXG4gKiBzaW1wbGUgZ2V0dGluZyB1bmlxdWUgdmFsdWVzIG9mIGFuIGFycmF5XG4gKlxuICogQHBhcmFtIHZhbHVlc1xuICogQHJldHVybnMgdW5pcXVlIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlPFQ+KHZhbHVlczogVFtdKSB7XG4gIGNvbnN0IHJlc3VsdHM6IFRbXSA9IFtdO1xuICBjb25zdCB1bmlxdWVTZXQgPSBuZXcgU2V0KHZhbHVlcyk7XG4gIHVuaXF1ZVNldC5mb3JFYWNoKHYgPT4ge1xuICAgIGlmIChub3ROdWxsb3JVbmRlZmluZWQodikpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh2KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhdExuZ0JvdW5kcyhcbiAgcG9pbnRzOiBudW1iZXJbXVtdLFxuICBpZHg6IG51bWJlcixcbiAgbGltaXQ6IFtudW1iZXIsIG51bWJlcl1cbik6IFtudW1iZXIsIG51bWJlcl0gfCBudWxsIHtcbiAgY29uc3QgbGF0cyA9IHBvaW50c1xuICAgIC5tYXAoZCA9PiBOdW1iZXIoQXJyYXkuaXNBcnJheShkKSkgJiYgZFtpZHhdKVxuICAgIC5maWx0ZXIoTnVtYmVyLmlzRmluaXRlKVxuICAgIC5zb3J0KG51bWJlclNvcnQpO1xuXG4gIGlmICghbGF0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGNsYW1wIHRvIGxpbWl0XG4gIHJldHVybiBbTWF0aC5tYXgobGF0c1swXSwgbGltaXRbMF0pLCBNYXRoLm1pbihsYXRzW2xhdHMubGVuZ3RoIC0gMV0sIGxpbWl0WzFdKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcChbbWluLCBtYXhdOiBbbnVtYmVyLCBudW1iZXJdLCB2YWwgPSAwKTogbnVtYmVyIHtcbiAgcmV0dXJuIHZhbCA8PSBtaW4gPyBtaW4gOiB2YWwgPj0gbWF4ID8gbWF4IDogdmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2FtcGxlRGF0YShkYXRhLCBzYW1wbGVTaXplID0gNTAwLCBnZXRWYWx1ZSA9IGQgPT4gZCkge1xuICBjb25zdCBzYW1wbGVTdGVwID0gTWF0aC5tYXgoTWF0aC5mbG9vcihkYXRhLmxlbmd0aCAvIHNhbXBsZVNpemUpLCAxKTtcbiAgY29uc3Qgb3V0cHV0OiBhbnlbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IHNhbXBsZVN0ZXApIHtcbiAgICBvdXRwdXQucHVzaChnZXRWYWx1ZShkYXRhW2ldKSk7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIENvbnZlcnQgZGlmZmVyZW50IHRpbWUgZm9ybWF0IHRvIHVuaXggbWlsbGlzZWNvbmRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aW1lVG9Vbml4TWlsbGkodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IERhdGUsIGZvcm1hdDogc3RyaW5nKTogTWlsbGlzZWNvbmQgfCBudWxsIHtcbiAgaWYgKG5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG1vbWVudC51dGModmFsdWUsIGZvcm1hdCkudmFsdWVPZigpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGZvcm1hdCA9PT0gJ3gnID8gdmFsdWUgKiAxMDAwIDogdmFsdWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS52YWx1ZU9mKCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgZCBpcyBhIG51bWJlciwgdGhpcyBmaWx0ZXJlZCBvdXQgTmFOIGFzIHdlbGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyKGQ6IHVua25vd24pOiBkIGlzIG51bWJlciB7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUoZCk7XG59XG5cbi8qKlxuICogd2hldGhlciBvYmplY3QgaGFzIHByb3BlcnR5XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcFxuICogQHJldHVybnMge2Jvb2xlYW59IC0geWVzIG9yIG5vXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eTxYIGV4dGVuZHMgb2JqZWN0LCBZIGV4dGVuZHMgUHJvcGVydHlLZXk+KFxuICBvYmo6IFgsXG4gIHByb3A6IFlcbik6IG9iaiBpcyBYICYgUmVjb3JkPFksIHVua25vd24+IHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyU29ydChhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBhIC0gYjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvcnRpbmdGdW5jdGlvbihmaWVsZFR5cGU6IHN0cmluZyk6IHR5cGVvZiBudW1iZXJTb3J0IHwgdW5kZWZpbmVkIHtcbiAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5yZWFsOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wOlxuICAgICAgcmV0dXJuIG51bWJlclNvcnQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiByb3VuZCBudW1iZXIgd2l0aCBleGFjdCBudW1iZXIgb2YgZGVjaW1hbHNcbiAqIHJldHVybiBhcyBhIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlY2lzZVJvdW5kKG51bTogbnVtYmVyLCBkZWNpbWFsczogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgdCA9IE1hdGgucG93KDEwLCBkZWNpbWFscyk7XG4gIHJldHVybiAoXG4gICAgTWF0aC5yb3VuZChcbiAgICAgIG51bSAqIHQgKyAoZGVjaW1hbHMgPiAwID8gMSA6IDApICogKE1hdGguc2lnbihudW0pICogKDEwIC8gTWF0aC5wb3coMTAwLCBkZWNpbWFscykpKVxuICAgICkgLyB0XG4gICkudG9GaXhlZChkZWNpbWFscyk7XG59XG5cbi8qKlxuICogcm91bmQgYSBnaXZpbmcgbnVtYmVyIGF0IG1vc3QgNCBkZWNpbWFsIHBsYWNlc1xuICogZS5nLiAxMCAtPiAxMCwgMS4xMjM0NSAtPiAxLjIzNDUsIDIuMCAtPiAyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3VuZFRvRm91cihudW06IG51bWJlcik6IG51bWJlciB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIE51bWJlcihgJHtNYXRoLnJvdW5kKGAke251bX1lKzRgKX1lLTRgKTtcbn1cbi8qKlxuICogZ2V0IG51bWJlciBvZiBkZWNpbWFscyB0byByb3VuZCB0byBmb3Igc2xpZGVyIGZyb20gc3RlcFxuICogQHBhcmFtIHN0ZXBcbiAqIEByZXR1cm5zLSBudW1iZXIgb2YgZGVjaW1hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um91bmRpbmdEZWNpbWFsRnJvbVN0ZXAoc3RlcDogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKGlzTmFOKHN0ZXApKSB7XG4gICAgYXNzZXJ0KCdzdGVwIGlzIG5vdCBhIG51bWJlcicpO1xuICAgIGFzc2VydChzdGVwKTtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBTdHIgPSBzdGVwLnRvU3RyaW5nKCk7XG5cbiAgLy8gaW4gY2FzZSB0aGUgc3RlcCBpcyBhIHZlcnkgc21hbGwgbnVtYmVyIGUuZy4gMWUtNywgcmV0dXJuIGRlY2ltYWwgZS5nLiA3IGRpcmVjdGx5XG4gIGNvbnN0IHNwbGl0RXhwb25lbnRpYWwgPSBzdGVwU3RyLnNwbGl0KCdlLScpO1xuICBpZiAoc3BsaXRFeHBvbmVudGlhbC5sZW5ndGggPT09IDIpIHtcbiAgICBjb25zdCBjb2VmZlplcm8gPSBzcGxpdEV4cG9uZW50aWFsWzBdLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgY29lZmZEZWNpbWFsID0gY29lZmZaZXJvLmxlbmd0aCA9PT0gMSA/IDAgOiBjb2VmZlplcm9bMV0ubGVuZ3RoO1xuICAgIHJldHVybiBwYXJzZUludChzcGxpdEV4cG9uZW50aWFsWzFdLCAxMCkgKyBjb2VmZkRlY2ltYWw7XG4gIH1cblxuICBjb25zdCBzcGxpdFplcm8gPSBzdGVwU3RyLnNwbGl0KCcuJyk7XG4gIGlmIChzcGxpdFplcm8ubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIHNwbGl0WmVyb1sxXS5sZW5ndGg7XG59XG5cbi8qKlxuICogSWYgbWFya3MgaXMgcHJvdmlkZWQsIHNuYXAgdG8gbWFya3MsIGlmIG5vdCBub3JtYWxpemUgdG8gc3RlcFxuICogQHBhcmFtIHZhbFxuICogQHBhcmFtIG1pblZhbHVlXG4gKiBAcGFyYW0gc3RlcFxuICogQHBhcmFtIG1hcmtzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTbGlkZXJWYWx1ZShcbiAgdmFsOiBudW1iZXIsXG4gIG1pblZhbHVlOiBudW1iZXIsXG4gIHN0ZXA6IG51bWJlcixcbiAgbWFya3M/OiBudW1iZXJbXSB8IG51bGxcbik6IG51bWJlciB7XG4gIGlmIChtYXJrcyAmJiBtYXJrcy5sZW5ndGgpIHtcbiAgICAvLyBVc2UgaW4gc2xpZGVyLCBnaXZlbiBhIG51bWJlciBhbmQgYW4gYXJyYXkgb2YgbnVtYmVycywgcmV0dXJuIHRoZSBuZWFycyBudW1iZXIgZnJvbSB0aGUgYXJyYXlcbiAgICByZXR1cm4gc25hcFRvTWFya3ModmFsLCBtYXJrcyk7XG4gIH1cblxuICByZXR1cm4gcm91bmRWYWxUb1N0ZXAobWluVmFsdWUsIHN0ZXAsIHZhbCk7XG59XG5cbi8qKlxuICogcm91bmQgdGhlIHZhbHVlIHRvIHN0ZXAgZm9yIHRoZSBzbGlkZXJcbiAqIEBwYXJhbSBtaW5WYWx1ZVxuICogQHBhcmFtIHN0ZXBcbiAqIEBwYXJhbSB2YWxcbiAqIEByZXR1cm5zIC0gcm91bmRlZCBudW1iZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kVmFsVG9TdGVwKG1pblZhbHVlOiBudW1iZXIsIHN0ZXA6IG51bWJlciwgdmFsOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoIWlzTnVtYmVyKHN0ZXApIHx8ICFpc051bWJlcihtaW5WYWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgY29uc3QgZGVjaW1hbCA9IGdldFJvdW5kaW5nRGVjaW1hbEZyb21TdGVwKHN0ZXApO1xuICBjb25zdCBzdGVwcyA9IE1hdGguZmxvb3IoKHZhbCAtIG1pblZhbHVlKSAvIHN0ZXApO1xuICBsZXQgcmVtYWluID0gdmFsIC0gKHN0ZXBzICogc3RlcCArIG1pblZhbHVlKTtcblxuICAvLyBoYXMgdG8gcm91bmQgYmVjYXVzZSBqYXZhc2NyaXB0IHR1cm5zIDAuMSBpbnRvIDAuOTk5OTk5OTk5OTk5OTk4N1xuICByZW1haW4gPSBOdW1iZXIocHJlY2lzZVJvdW5kKHJlbWFpbiwgOCkpO1xuXG4gIGxldCBjbG9zZXN0OiBudW1iZXI7XG4gIGlmIChyZW1haW4gPT09IDApIHtcbiAgICBjbG9zZXN0ID0gdmFsO1xuICB9IGVsc2UgaWYgKHJlbWFpbiA8IHN0ZXAgLyAyKSB7XG4gICAgY2xvc2VzdCA9IHN0ZXBzICogc3RlcCArIG1pblZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGNsb3Nlc3QgPSAoc3RlcHMgKyAxKSAqIHN0ZXAgKyBtaW5WYWx1ZTtcbiAgfVxuXG4gIC8vIHByZWNpc2Ugcm91bmQgcmV0dXJuIGEgc3RyaW5nIHJvdW5kZWQgdG8gdGhlIGRlZmluZWQgZGVjaW1hbFxuICBjb25zdCByb3VuZGVkID0gcHJlY2lzZVJvdW5kKGNsb3Nlc3QsIGRlY2ltYWwpO1xuXG4gIHJldHVybiBOdW1iZXIocm91bmRlZCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3JtYXQgYmFzZWQgb24gZmllbGQgYW5kIGZvcm1hdCBvcHRpb25zXG4gKiBVc2VkIGluIHJlbmRlciB0b29sdGlwIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0Rm9ybWF0dGVyOiBGaWVsZEZvcm1hdHRlciA9IHYgPT4gKG5vdE51bGxvclVuZGVmaW5lZCh2KSA/IFN0cmluZyh2KSA6ICcnKTtcblxuZXhwb3J0IGNvbnN0IGZsb2F0Rm9ybWF0dGVyID0gdiA9PiAoaXNOdW1iZXIodikgPyBTdHJpbmcocm91bmRUb0ZvdXIodikpIDogJycpO1xuXG5leHBvcnQgY29uc3QgRklFTERfRElTUExBWV9GT1JNQVQ6IHtcbiAgW2tleTogc3RyaW5nXTogRmllbGRGb3JtYXR0ZXI7XG59ID0ge1xuICBbQUxMX0ZJRUxEX1RZUEVTLnN0cmluZ106IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMudGltZXN0YW1wXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5ib29sZWFuXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5kYXRlXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5nZW9qc29uXTogZCA9PlxuICAgIHR5cGVvZiBkID09PSAnc3RyaW5nJ1xuICAgICAgPyBkXG4gICAgICA6IGlzUGxhaW5PYmplY3QoZClcbiAgICAgID8gSlNPTi5zdHJpbmdpZnkoZClcbiAgICAgIDogQXJyYXkuaXNBcnJheShkKVxuICAgICAgPyBgWyR7U3RyaW5nKGQpfV1gXG4gICAgICA6ICcnLFxuICBbQUxMX0ZJRUxEX1RZUEVTLmdlb2Fycm93XTogZCA9PiBkLFxuICBbQUxMX0ZJRUxEX1RZUEVTLm9iamVjdF06IEpTT04uc3RyaW5naWZ5LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmFycmF5XTogSlNPTi5zdHJpbmdpZnksXG4gIFtBTExfRklFTERfVFlQRVMuaDNdOiBkZWZhdWx0Rm9ybWF0dGVyXG59O1xuXG4vKipcbiAqIFBhcnNlIGZpZWxkIHZhbHVlIGFuZCB0eXBlIGFuZCByZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlRmllbGRWYWx1ZSA9ICh2YWx1ZTogYW55LCB0eXBlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIEZJRUxEX0RJU1BMQVlfRk9STUFUW3R5cGVdID8gRklFTERfRElTUExBWV9GT1JNQVRbdHlwZV0odmFsdWUpIDogU3RyaW5nKHZhbHVlKTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3JtYXQgYmFzZWQgb24gZmllbGQgYW5kIGZvcm1hdCBvcHRpb25zXG4gKiBVc2VkIGluIHJlbmRlciB0b29sdGlwIHZhbHVlXG4gKiBAcGFyYW0gZm9ybWF0XG4gKiBAcGFyYW0gZmllbGRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1hdHRlcihcbiAgZm9ybWF0OiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCxcbiAgZmllbGQ/OiBGaWVsZFxuKTogRmllbGRGb3JtYXR0ZXIge1xuICBpZiAoIWZvcm1hdCkge1xuICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0dGVyO1xuICB9XG4gIGNvbnN0IHRvb2x0aXBGb3JtYXQgPSBPYmplY3QudmFsdWVzKFRPT0xUSVBfRk9STUFUUykuZmluZChmID0+IGZbVE9PTFRJUF9LRVldID09PSBmb3JtYXQpO1xuXG4gIGlmICh0b29sdGlwRm9ybWF0KSB7XG4gICAgcmV0dXJuIGFwcGx5RGVmYXVsdEZvcm1hdCh0b29sdGlwRm9ybWF0IGFzIFRvb2x0aXBGb3JtYXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBmb3JtYXQgPT09ICdzdHJpbmcnICYmIGZpZWxkKSB7XG4gICAgcmV0dXJuIGFwcGx5Q3VzdG9tRm9ybWF0KGZvcm1hdCwgZmllbGQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5Gb3JtYXR0ZXIoXG4gIGZpZWxkOiBQaWNrPEZpZWxkLCAndHlwZSc+ICYgUGFydGlhbDxQaWNrPEZpZWxkLCAnZm9ybWF0JyB8ICdkaXNwbGF5Rm9ybWF0Jz4+XG4pOiBGaWVsZEZvcm1hdHRlciB7XG4gIGNvbnN0IHtmb3JtYXQsIGRpc3BsYXlGb3JtYXR9ID0gZmllbGQ7XG5cbiAgaWYgKCFmb3JtYXQgJiYgIWRpc3BsYXlGb3JtYXQpIHtcbiAgICByZXR1cm4gRklFTERfRElTUExBWV9GT1JNQVRbZmllbGQudHlwZV07XG4gIH1cbiAgY29uc3QgdG9vbHRpcEZvcm1hdCA9IE9iamVjdC52YWx1ZXMoVE9PTFRJUF9GT1JNQVRTKS5maW5kKGYgPT4gZltUT09MVElQX0tFWV0gPT09IGRpc3BsYXlGb3JtYXQpO1xuXG4gIGlmICh0b29sdGlwRm9ybWF0KSB7XG4gICAgcmV0dXJuIGFwcGx5RGVmYXVsdEZvcm1hdCh0b29sdGlwRm9ybWF0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGlzcGxheUZvcm1hdCA9PT0gJ3N0cmluZycgJiYgZmllbGQpIHtcbiAgICByZXR1cm4gYXBwbHlDdXN0b21Gb3JtYXQoZGlzcGxheUZvcm1hdCwgZmllbGQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkaXNwbGF5Rm9ybWF0ID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBhcHBseVZhbHVlTWFwKGRpc3BsYXlGb3JtYXQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVZhbHVlTWFwKGZvcm1hdCkge1xuICByZXR1cm4gdiA9PiBmb3JtYXRbdl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseURlZmF1bHRGb3JtYXQodG9vbHRpcEZvcm1hdDogVG9vbHRpcEZvcm1hdCk6ICh2OiBhbnkpID0+IHN0cmluZyB7XG4gIGlmICghdG9vbHRpcEZvcm1hdCB8fCAhdG9vbHRpcEZvcm1hdC5mb3JtYXQpIHtcbiAgICByZXR1cm4gZGVmYXVsdEZvcm1hdHRlcjtcbiAgfVxuXG4gIHN3aXRjaCAodG9vbHRpcEZvcm1hdC50eXBlKSB7XG4gICAgY2FzZSBUT09MVElQX0ZPUk1BVF9UWVBFUy5ERUNJTUFMOlxuICAgICAgcmV0dXJuIGQzRm9ybWF0KHRvb2x0aXBGb3JtYXQuZm9ybWF0KTtcbiAgICBjYXNlIFRPT0xUSVBfRk9STUFUX1RZUEVTLkRBVEU6XG4gICAgY2FzZSBUT09MVElQX0ZPUk1BVF9UWVBFUy5EQVRFX1RJTUU6XG4gICAgICByZXR1cm4gZGF0ZXRpbWVGb3JtYXR0ZXIobnVsbCkodG9vbHRpcEZvcm1hdC5mb3JtYXQpO1xuICAgIGNhc2UgVE9PTFRJUF9GT1JNQVRfVFlQRVMuUEVSQ0VOVEFHRTpcbiAgICAgIHJldHVybiB2ID0+IGAke2QzRm9ybWF0KFRPT0xUSVBfRk9STUFUUy5ERUNJTUFMX0RFQ0lNQUxfRklYRURfMi5mb3JtYXQpKHYpfSVgO1xuICAgIGNhc2UgVE9PTFRJUF9GT1JNQVRfVFlQRVMuQk9PTEVBTjpcbiAgICAgIHJldHVybiBnZXRCb29sZWFuRm9ybWF0dGVyKHRvb2x0aXBGb3JtYXQuZm9ybWF0KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJvb2xlYW5Gb3JtYXR0ZXIoZm9ybWF0OiBzdHJpbmcpOiBGaWVsZEZvcm1hdHRlciB7XG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSAnMDEnOlxuICAgICAgcmV0dXJuICh2OiBib29sZWFuKSA9PiAodiA/ICcxJyA6ICcwJyk7XG4gICAgY2FzZSAneW4nOlxuICAgICAgcmV0dXJuICh2OiBib29sZWFuKSA9PiAodiA/ICd5ZXMnIDogJ25vJyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0dGVyO1xuICB9XG59XG4vLyBBbGxvdyB1c2VyIHRvIHNwZWNpZnkgY3VzdG9tIHRvb2x0aXAgZm9ybWF0IHZpYSBjb25maWdcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUN1c3RvbUZvcm1hdChmb3JtYXQsIGZpZWxkOiB7dHlwZT86IHN0cmluZ30pOiBGaWVsZEZvcm1hdHRlciB7XG4gIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjpcbiAgICAgIHJldHVybiBkM0Zvcm1hdChmb3JtYXQpO1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmRhdGU6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wOlxuICAgICAgcmV0dXJuIGRhdGV0aW1lRm9ybWF0dGVyKG51bGwpKGZvcm1hdCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB2ID0+IHY7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0TGFyZ2VOdW1iZXIobikge1xuICAvLyBTSS1wcmVmaXggd2l0aCA0IHNpZ25pZmljYW50IGRpZ2l0c1xuICByZXR1cm4gZDNGb3JtYXQoJy40fnMnKShuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE51bWJlcihuOiBudW1iZXIsIHR5cGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyOlxuICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgIHJldHVybiBgLSR7Zm9ybWF0TnVtYmVyKC1uLCAnaW50ZWdlcicpfWA7XG4gICAgICB9XG4gICAgICBpZiAobiA8IDEwMDApIHtcbiAgICAgICAgcmV0dXJuIGAke01hdGgucm91bmQobil9YDtcbiAgICAgIH1cbiAgICAgIGlmIChuIDwgMTAgKiAxMDAwKSB7XG4gICAgICAgIHJldHVybiBkM0Zvcm1hdCgnLCcpKE1hdGgucm91bmQobikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdExhcmdlTnVtYmVyKG4pO1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgICBpZiAobiA8IDApIHtcbiAgICAgICAgcmV0dXJuIGAtJHtmb3JtYXROdW1iZXIoLW4sICdudW1iZXInKX1gO1xuICAgICAgfVxuICAgICAgaWYgKG4gPCAxMDAwKSB7XG4gICAgICAgIHJldHVybiBkM0Zvcm1hdCgnLjR+cicpKG4pO1xuICAgICAgfVxuICAgICAgaWYgKG4gPCAxMCAqIDEwMDApIHtcbiAgICAgICAgcmV0dXJuIGQzRm9ybWF0KCcsLjJ+ZicpKG4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdExhcmdlTnVtYmVyKG4pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXROdW1iZXIobiwgJ3JlYWwnKTtcbiAgfVxufVxuXG5jb25zdCB0cmFuc2Zvcm1hdGlvbiA9IHtcbiAgWTogTWF0aC5wb3coMTAsIDI0KSxcbiAgWjogTWF0aC5wb3coMTAsIDIxKSxcbiAgRTogTWF0aC5wb3coMTAsIDE4KSxcbiAgUDogTWF0aC5wb3coMTAsIDE1KSxcbiAgVDogTWF0aC5wb3coMTAsIDEyKSxcbiAgRzogTWF0aC5wb3coMTAsIDkpLFxuICBNOiBNYXRoLnBvdygxMCwgNiksXG4gIGs6IE1hdGgucG93KDEwLCAzKSxcbiAgaDogTWF0aC5wb3coMTAsIDIpLFxuICBkYTogTWF0aC5wb3coMTAsIDEpLFxuICBkOiBNYXRoLnBvdygxMCwgLTEpLFxuICBjOiBNYXRoLnBvdygxMCwgLTIpLFxuICBtOiBNYXRoLnBvdygxMCwgLTMpLFxuICDOvDogTWF0aC5wb3coMTAsIC02KSxcbiAgbjogTWF0aC5wb3coMTAsIC05KSxcbiAgcDogTWF0aC5wb3coMTAsIC0xMiksXG4gIGY6IE1hdGgucG93KDEwLCAtMTUpLFxuICBhOiBNYXRoLnBvdygxMCwgLTE4KSxcbiAgejogTWF0aC5wb3coMTAsIC0yMSksXG4gIHk6IE1hdGgucG93KDEwLCAtMjQpXG59O1xuXG4vKipcbiAqIENvbnZlcnQgYSBmb3JtYXR0ZWQgbnVtYmVyIGZyb20gc3RyaW5nIGJhY2sgdG8gbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXZlcnNlRm9ybWF0TnVtYmVyKHN0cjogc3RyaW5nKTogbnVtYmVyIHtcbiAgbGV0IHJldHVyblZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgY29uc3Qgc3RyTnVtID0gc3RyLnRyaW0oKS5yZXBsYWNlKC8sL2csICcnKTtcbiAgT2JqZWN0LmVudHJpZXModHJhbnNmb3JtYXRpb24pLmZvckVhY2goZCA9PiB7XG4gICAgaWYgKHN0ck51bS5pbmNsdWRlcyhkWzBdKSkge1xuICAgICAgcmV0dXJuVmFsdWUgPSBwYXJzZUZsb2F0KHN0ck51bSkgKiBkWzFdO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG5cbiAgLy8gaWYgbm8gdHJhbnNmb3JtZXIgZm91bmQsIGNvbnZlcnQgdG8gbnViZXIgcmVnYXJkbGVzc1xuICByZXR1cm4gcmV0dXJuVmFsdWUgPT09IG51bGwgPyBOdW1iZXIoc3RyTnVtKSA6IHJldHVyblZhbHVlO1xufVxuXG4vKipcbiAqIEZvcm1hdCBlcG9jaCBtaWxsaXNlY29uZHMgd2l0aCBhIGZvcm1hdCBzdHJpbmdcbiAqIEB0eXBlIHRpbWV6b25lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRldGltZUZvcm1hdHRlcihcbiAgdGltZXpvbmU/OiBzdHJpbmcgfCBudWxsXG4pOiAoZm9ybWF0Pzogc3RyaW5nKSA9PiAodHM6IG51bWJlcikgPT4gc3RyaW5nIHtcbiAgcmV0dXJuIHRpbWV6b25lXG4gICAgPyBmb3JtYXQgPT4gdHMgPT4gbW9tZW50LnV0Yyh0cykudHoodGltZXpvbmUpLmZvcm1hdChmb3JtYXQpXG4gICAgOiAvLyByZXR1cm4gZW1wdHkgc3RyaW5nIGluc3RlYWQgb2YgJ0ludmFsaWQgZGF0ZScgaWYgdHMgaXMgdW5kZWZpbmVkL251bGxcbiAgICAgIGZvcm1hdCA9PiB0cyA9PiB0cyA/IG1vbWVudC51dGModHMpLmZvcm1hdChmb3JtYXQpIDogJyc7XG59XG4iXSwi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
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import { ProcessorResult, RGBColor, Field, FieldPair, TimeLabelFormat, TooltipFields, ProtoDataset } from '@kepler.gl/types';
|
2
|
+
import { TooltipFormat } from '@kepler.gl/constants';
|
3
|
+
export declare const datasetColorMaker: Generator<RGBColor, any, unknown>;
|
4
|
+
/**
|
5
|
+
* Choose a field to use as the default color field of a layer.
|
6
|
+
*
|
7
|
+
* The heuristic is:
|
8
|
+
*
|
9
|
+
* First, exclude fields that are on the exclusion list and don't
|
10
|
+
* have names that suggest they contain metrics. Also exclude
|
11
|
+
* field names that are blank.
|
12
|
+
*
|
13
|
+
* Next, look for a field that is of real type and contains one
|
14
|
+
* of the preferred names (in order of the preferred names).
|
15
|
+
*
|
16
|
+
* Next, look for a field that is of integer type and contains
|
17
|
+
* one of the preferred names (in order of the preferred names).
|
18
|
+
*
|
19
|
+
* Next, look for the first field that is of real type (in order
|
20
|
+
* of field index).
|
21
|
+
*
|
22
|
+
* Next, look for the first field that is of integer type (in
|
23
|
+
* order of field index).
|
24
|
+
*
|
25
|
+
* It's possible no field will be chosen (i.e. because all fields
|
26
|
+
* are strings.)
|
27
|
+
*
|
28
|
+
* @param dataset
|
29
|
+
*/
|
30
|
+
export declare function findDefaultColorField({ fields, fieldPairs }: {
|
31
|
+
fields: Field[];
|
32
|
+
fieldPairs: FieldPair[];
|
33
|
+
}): null | Field;
|
34
|
+
/**
|
35
|
+
* Validate input data, adding missing field types, rename duplicate columns
|
36
|
+
*/
|
37
|
+
export declare function validateInputData(data: ProtoDataset['data']): ProcessorResult;
|
38
|
+
export declare const addTimeLabel: (formats: TimeLabelFormat[]) => {
|
39
|
+
label: string;
|
40
|
+
id: string;
|
41
|
+
format: string | null;
|
42
|
+
type: string;
|
43
|
+
}[];
|
44
|
+
export declare function getFieldFormatLabels(fieldType?: string): TooltipFormat[];
|
45
|
+
export declare const getFormatLabels: (fields: TooltipFields[], fieldName: string) => TooltipFormat[];
|