@kepler.gl/utils 3.0.0 → 3.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/package.json +14 -10
  2. package/dist/aggregate-utils.d.ts +0 -3
  3. package/dist/aggregate-utils.js +0 -75
  4. package/dist/arrow-data-container.d.ts +0 -54
  5. package/dist/arrow-data-container.js +0 -360
  6. package/dist/color-utils.d.ts +0 -51
  7. package/dist/color-utils.js +0 -161
  8. package/dist/data-container-interface.d.ts +0 -133
  9. package/dist/data-container-interface.js +0 -6
  10. package/dist/data-container-utils.d.ts +0 -30
  11. package/dist/data-container-utils.js +0 -88
  12. package/dist/data-row.d.ts +0 -59
  13. package/dist/data-row.js +0 -126
  14. package/dist/data-scale-utils.d.ts +0 -23
  15. package/dist/data-scale-utils.js +0 -62
  16. package/dist/data-utils.d.ts +0 -103
  17. package/dist/data-utils.js +0 -502
  18. package/dist/dataset-utils.d.ts +0 -116
  19. package/dist/dataset-utils.js +0 -614
  20. package/dist/dom-to-image.d.ts +0 -73
  21. package/dist/dom-to-image.js +0 -489
  22. package/dist/dom-utils.d.ts +0 -23
  23. package/dist/dom-utils.js +0 -434
  24. package/dist/effect-utils.d.ts +0 -23
  25. package/dist/effect-utils.js +0 -196
  26. package/dist/export-map-html.d.ts +0 -9
  27. package/dist/export-map-html.js +0 -28
  28. package/dist/export-utils.d.ts +0 -53
  29. package/dist/export-utils.js +0 -262
  30. package/dist/filter-utils.d.ts +0 -326
  31. package/dist/filter-utils.js +0 -1333
  32. package/dist/format.d.ts +0 -1
  33. package/dist/format.js +0 -17
  34. package/dist/gl-utils.d.ts +0 -1
  35. package/dist/gl-utils.js +0 -35
  36. package/dist/h3-utils.d.ts +0 -21
  37. package/dist/h3-utils.js +0 -81
  38. package/dist/index.d.ts +0 -36
  39. package/dist/index.js +0 -772
  40. package/dist/indexed-data-container.d.ts +0 -34
  41. package/dist/indexed-data-container.js +0 -254
  42. package/dist/locale-utils.d.ts +0 -2
  43. package/dist/locale-utils.js +0 -54
  44. package/dist/map-info-utils.d.ts +0 -1
  45. package/dist/map-info-utils.js +0 -15
  46. package/dist/map-style-utils/mapbox-gl-style-editor.d.ts +0 -65
  47. package/dist/map-style-utils/mapbox-gl-style-editor.js +0 -218
  48. package/dist/map-style-utils/mapbox-utils.d.ts +0 -9
  49. package/dist/map-style-utils/mapbox-utils.js +0 -48
  50. package/dist/map-utils.d.ts +0 -9
  51. package/dist/map-utils.js +0 -65
  52. package/dist/mapbox-utils.d.ts +0 -7
  53. package/dist/mapbox-utils.js +0 -22
  54. package/dist/noop.d.ts +0 -1
  55. package/dist/noop.js +0 -11
  56. package/dist/notifications-utils.d.ts +0 -42
  57. package/dist/notifications-utils.js +0 -85
  58. package/dist/observe-dimensions.d.ts +0 -15
  59. package/dist/observe-dimensions.js +0 -151
  60. package/dist/plot.d.ts +0 -6
  61. package/dist/plot.js +0 -31
  62. package/dist/projection-utils.d.ts +0 -21
  63. package/dist/projection-utils.js +0 -100
  64. package/dist/row-data-container.d.ts +0 -31
  65. package/dist/row-data-container.js +0 -252
  66. package/dist/searcher-utils.d.ts +0 -1
  67. package/dist/searcher-utils.js +0 -28
  68. package/dist/split-map-utils.d.ts +0 -32
  69. package/dist/split-map-utils.js +0 -114
  70. package/dist/time.d.ts +0 -16
  71. package/dist/time.js +0 -89
  72. package/dist/utils.d.ts +0 -116
  73. package/dist/utils.js +0 -305
@@ -1,502 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.unique = unique;
9
- exports.getLatLngBounds = getLatLngBounds;
10
- exports.clamp = clamp;
11
- exports.getSampleData = getSampleData;
12
- exports.timeToUnixMilli = timeToUnixMilli;
13
- exports.notNullorUndefined = notNullorUndefined;
14
- exports.isNumber = isNumber;
15
- exports.hasOwnProperty = hasOwnProperty;
16
- exports.numberSort = numberSort;
17
- exports.getSortingFunction = getSortingFunction;
18
- exports.preciseRound = preciseRound;
19
- exports.roundToFour = roundToFour;
20
- exports.getRoundingDecimalFromStep = getRoundingDecimalFromStep;
21
- exports.normalizeSliderValue = normalizeSliderValue;
22
- exports.roundValToStep = roundValToStep;
23
- exports.getFormatter = getFormatter;
24
- exports.getColumnFormatter = getColumnFormatter;
25
- exports.applyValueMap = applyValueMap;
26
- exports.applyDefaultFormat = applyDefaultFormat;
27
- exports.getBooleanFormatter = getBooleanFormatter;
28
- exports.applyCustomFormat = applyCustomFormat;
29
- exports.formatNumber = formatNumber;
30
- exports.datetimeFormatter = datetimeFormatter;
31
- exports.arrayMove = exports.parseFieldValue = exports.FIELD_DISPLAY_FORMAT = exports.floatFormatter = exports.defaultFormatter = void 0;
32
-
33
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
34
-
35
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
36
-
37
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
38
-
39
- var _assert = _interopRequireDefault(require("assert"));
40
-
41
- var _d3Format = require("d3-format");
42
-
43
- var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
44
-
45
- var _constants = require("@kepler.gl/constants");
46
-
47
- var _plot = require("./plot");
48
-
49
- var _utils = require("./utils");
50
-
51
- var _FIELD_DISPLAY_FORMAT;
52
-
53
- /**
54
- * simple getting unique values of an array
55
- *
56
- * @param values
57
- * @returns unique values
58
- */
59
- function unique(values) {
60
- var results = [];
61
- var uniqueSet = new Set(values);
62
- uniqueSet.forEach(function (v) {
63
- if (notNullorUndefined(v)) {
64
- results.push(v);
65
- }
66
- });
67
- return results;
68
- }
69
-
70
- function getLatLngBounds(points, idx, limit) {
71
- var lats = points.map(function (d) {
72
- return Number(Array.isArray(d)) && d[idx];
73
- }).filter(Number.isFinite).sort(numberSort);
74
-
75
- if (!lats.length) {
76
- return null;
77
- } // clamp to limit
78
-
79
-
80
- return [Math.max(lats[0], limit[0]), Math.min(lats[lats.length - 1], limit[1])];
81
- }
82
-
83
- function clamp(_ref) {
84
- var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
85
- min = _ref2[0],
86
- max = _ref2[1];
87
-
88
- var val = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
89
- return val <= min ? min : val >= max ? max : val;
90
- }
91
-
92
- function getSampleData(data) {
93
- var sampleSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;
94
- var getValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (d) {
95
- return d;
96
- };
97
- var sampleStep = Math.max(Math.floor(data.length / sampleSize), 1);
98
- var output = [];
99
-
100
- for (var i = 0; i < data.length; i += sampleStep) {
101
- output.push(getValue(data[i]));
102
- }
103
-
104
- return output;
105
- }
106
- /**
107
- * Convert different time format to unix milliseconds
108
- */
109
-
110
-
111
- function timeToUnixMilli(value, format) {
112
- if (notNullorUndefined(value)) {
113
- if (typeof value === 'string') {
114
- return _momentTimezone["default"].utc(value, format).valueOf();
115
- }
116
-
117
- if (typeof value === 'number') {
118
- return format === 'x' ? value * 1000 : value;
119
- }
120
-
121
- if (value instanceof Date) {
122
- return value.valueOf();
123
- }
124
- }
125
-
126
- return null;
127
- }
128
- /**
129
- * whether null or undefined
130
- */
131
-
132
-
133
- function notNullorUndefined(d) {
134
- return d !== undefined && d !== null;
135
- }
136
- /**
137
- * Whether d is a number, this filtered out NaN as well
138
- */
139
-
140
-
141
- function isNumber(d) {
142
- return Number.isFinite(d);
143
- }
144
- /**
145
- * whether object has property
146
- * @param {string} prop
147
- * @returns {boolean} - yes or no
148
- */
149
-
150
-
151
- function hasOwnProperty(obj, prop) {
152
- return obj.hasOwnProperty(prop);
153
- }
154
-
155
- function numberSort(a, b) {
156
- return a - b;
157
- }
158
-
159
- function getSortingFunction(fieldType) {
160
- switch (fieldType) {
161
- case _constants.ALL_FIELD_TYPES.real:
162
- case _constants.ALL_FIELD_TYPES.integer:
163
- case _constants.ALL_FIELD_TYPES.timestamp:
164
- return numberSort;
165
-
166
- default:
167
- return undefined;
168
- }
169
- }
170
- /**
171
- * round number with exact number of decimals
172
- * return as a string
173
- */
174
-
175
-
176
- function preciseRound(num, decimals) {
177
- var t = Math.pow(10, decimals);
178
- return (Math.round(num * t + (decimals > 0 ? 1 : 0) * (Math.sign(num) * (10 / Math.pow(100, decimals)))) / t).toFixed(decimals);
179
- }
180
- /**
181
- * round a giving number at most 4 decimal places
182
- * e.g. 10 -> 10, 1.12345 -> 1.2345, 2.0 -> 2
183
- */
184
-
185
-
186
- function roundToFour(num) {
187
- // @ts-expect-error
188
- return Number("".concat(Math.round("".concat(num, "e+4")), "e-4"));
189
- }
190
- /**
191
- * get number of decimals to round to for slider from step
192
- * @param step
193
- * @returns- number of decimal
194
- */
195
-
196
-
197
- function getRoundingDecimalFromStep(step) {
198
- if (isNaN(step)) {
199
- (0, _assert["default"])('step is not a number');
200
- (0, _assert["default"])(step);
201
- }
202
-
203
- var stepStr = step.toString(); // in case the step is a very small number e.g. 1e-7, return decimal e.g. 7 directly
204
-
205
- var splitExponential = stepStr.split('e-');
206
-
207
- if (splitExponential.length === 2) {
208
- var coeffZero = splitExponential[0].split('.');
209
- var coeffDecimal = coeffZero.length === 1 ? 0 : coeffZero[1].length;
210
- return parseInt(splitExponential[1], 10) + coeffDecimal;
211
- }
212
-
213
- var splitZero = stepStr.split('.');
214
-
215
- if (splitZero.length === 1) {
216
- return 0;
217
- }
218
-
219
- return splitZero[1].length;
220
- }
221
- /**
222
- * If marks is provided, snap to marks, if not normalize to step
223
- * @param val
224
- * @param minValue
225
- * @param step
226
- * @param marks
227
- */
228
-
229
-
230
- function normalizeSliderValue(val, minValue, step, marks) {
231
- if (marks && marks.length) {
232
- // Use in slider, given a number and an array of numbers, return the nears number from the array
233
- return (0, _plot.snapToMarks)(val, marks);
234
- }
235
-
236
- return roundValToStep(minValue, step, val);
237
- }
238
- /**
239
- * round the value to step for the slider
240
- * @param minValue
241
- * @param step
242
- * @param val
243
- * @returns - rounded number
244
- */
245
-
246
-
247
- function roundValToStep(minValue, step, val) {
248
- if (!isNumber(step) || !isNumber(minValue)) {
249
- return val;
250
- }
251
-
252
- var decimal = getRoundingDecimalFromStep(step);
253
- var steps = Math.floor((val - minValue) / step);
254
- var remain = val - (steps * step + minValue); // has to round because javascript turns 0.1 into 0.9999999999999987
255
-
256
- remain = Number(preciseRound(remain, 8));
257
- var closest;
258
-
259
- if (remain === 0) {
260
- closest = val;
261
- } else if (remain < step / 2) {
262
- closest = steps * step + minValue;
263
- } else {
264
- closest = (steps + 1) * step + minValue;
265
- } // precise round return a string rounded to the defined decimal
266
-
267
-
268
- var rounded = preciseRound(closest, decimal);
269
- return Number(rounded);
270
- }
271
- /**
272
- * Get the value format based on field and format options
273
- * Used in render tooltip value
274
- */
275
-
276
-
277
- var defaultFormatter = function defaultFormatter(v) {
278
- return notNullorUndefined(v) ? String(v) : '';
279
- };
280
-
281
- exports.defaultFormatter = defaultFormatter;
282
-
283
- var floatFormatter = function floatFormatter(v) {
284
- return isNumber(v) ? String(roundToFour(v)) : '';
285
- };
286
-
287
- exports.floatFormatter = floatFormatter;
288
- var FIELD_DISPLAY_FORMAT = (_FIELD_DISPLAY_FORMAT = {}, (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.string, defaultFormatter), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.timestamp, defaultFormatter), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.integer, defaultFormatter), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.real, defaultFormatter), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES["boolean"], defaultFormatter), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.date, defaultFormatter), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.geojson, function (d) {
289
- return typeof d === 'string' ? d : (0, _utils.isPlainObject)(d) ? JSON.stringify(d) : Array.isArray(d) ? "[".concat(String(d), "]") : '';
290
- }), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.geoarrow, function (d) {
291
- return d;
292
- }), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.object, JSON.stringify), (0, _defineProperty2["default"])(_FIELD_DISPLAY_FORMAT, _constants.ALL_FIELD_TYPES.array, JSON.stringify), _FIELD_DISPLAY_FORMAT);
293
- /**
294
- * Parse field value and type and return a string representation
295
- */
296
-
297
- exports.FIELD_DISPLAY_FORMAT = FIELD_DISPLAY_FORMAT;
298
-
299
- var parseFieldValue = function parseFieldValue(value, type) {
300
- if (!notNullorUndefined(value)) {
301
- return '';
302
- }
303
-
304
- return FIELD_DISPLAY_FORMAT[type] ? FIELD_DISPLAY_FORMAT[type](value) : String(value);
305
- };
306
-
307
- exports.parseFieldValue = parseFieldValue;
308
-
309
- var arrayMoveMutate = function arrayMoveMutate(array, from, to) {
310
- array.splice(to < 0 ? array.length + to : to, 0, array.splice(from, 1)[0]);
311
- };
312
- /**
313
- *
314
- * @param array
315
- * @param from
316
- * @param to
317
- */
318
-
319
-
320
- var arrayMove = function arrayMove(array, from, to) {
321
- array = array.slice();
322
- arrayMoveMutate(array, from, to);
323
- return array;
324
- };
325
- /**
326
- * Get the value format based on field and format options
327
- * Used in render tooltip value
328
- * @param format
329
- * @param field
330
- */
331
-
332
-
333
- exports.arrayMove = arrayMove;
334
-
335
- function getFormatter(format, field) {
336
- if (!format) {
337
- return defaultFormatter;
338
- }
339
-
340
- var tooltipFormat = Object.values(_constants.TOOLTIP_FORMATS).find(function (f) {
341
- return f[_constants.TOOLTIP_KEY] === format;
342
- });
343
-
344
- if (tooltipFormat) {
345
- return applyDefaultFormat(tooltipFormat);
346
- } else if (typeof format === 'string' && field) {
347
- return applyCustomFormat(format, field);
348
- }
349
-
350
- return defaultFormatter;
351
- }
352
-
353
- function getColumnFormatter(colMeta) {
354
- var format = colMeta.format,
355
- displayFormat = colMeta.displayFormat;
356
-
357
- if (!format && !displayFormat) {
358
- return FIELD_DISPLAY_FORMAT[colMeta.type];
359
- }
360
-
361
- var tooltipFormat = Object.values(_constants.TOOLTIP_FORMATS).find(function (f) {
362
- return f[_constants.TOOLTIP_KEY] === displayFormat;
363
- });
364
-
365
- if (tooltipFormat) {
366
- return applyDefaultFormat(tooltipFormat);
367
- } else if (typeof displayFormat === 'string' && colMeta) {
368
- return applyCustomFormat(displayFormat, colMeta);
369
- } else if ((0, _typeof2["default"])(displayFormat) === 'object') {
370
- return applyValueMap(displayFormat);
371
- }
372
-
373
- return defaultFormatter;
374
- }
375
-
376
- function applyValueMap(format) {
377
- return function (v) {
378
- return format[v];
379
- };
380
- }
381
-
382
- function applyDefaultFormat(tooltipFormat) {
383
- if (!tooltipFormat || !tooltipFormat.format) {
384
- return defaultFormatter;
385
- }
386
-
387
- switch (tooltipFormat.type) {
388
- case _constants.TOOLTIP_FORMAT_TYPES.DECIMAL:
389
- return (0, _d3Format.format)(tooltipFormat.format);
390
-
391
- case _constants.TOOLTIP_FORMAT_TYPES.DATE:
392
- case _constants.TOOLTIP_FORMAT_TYPES.DATE_TIME:
393
- return datetimeFormatter(null)(tooltipFormat.format);
394
-
395
- case _constants.TOOLTIP_FORMAT_TYPES.PERCENTAGE:
396
- return function (v) {
397
- return "".concat((0, _d3Format.format)(_constants.TOOLTIP_FORMATS.DECIMAL_DECIMAL_FIXED_2.format)(v), "%");
398
- };
399
-
400
- case _constants.TOOLTIP_FORMAT_TYPES.BOOLEAN:
401
- return getBooleanFormatter(tooltipFormat.format);
402
-
403
- default:
404
- return defaultFormatter;
405
- }
406
- }
407
-
408
- function getBooleanFormatter(format) {
409
- switch (format) {
410
- case '01':
411
- return function (v) {
412
- return v ? '1' : '0';
413
- };
414
-
415
- case 'yn':
416
- return function (v) {
417
- return v ? 'yes' : 'no';
418
- };
419
-
420
- default:
421
- return defaultFormatter;
422
- }
423
- } // Allow user to specify custom tooltip format via config
424
-
425
-
426
- function applyCustomFormat(format, field) {
427
- switch (field.type) {
428
- case _constants.ALL_FIELD_TYPES.real:
429
- case _constants.ALL_FIELD_TYPES.integer:
430
- return (0, _d3Format.format)(format);
431
-
432
- case _constants.ALL_FIELD_TYPES.date:
433
- case _constants.ALL_FIELD_TYPES.timestamp:
434
- return datetimeFormatter(null)(format);
435
-
436
- default:
437
- return function (v) {
438
- return v;
439
- };
440
- }
441
- }
442
-
443
- function formatLargeNumber(n) {
444
- // SI-prefix with 4 significant digits
445
- return (0, _d3Format.format)('.4~s')(n);
446
- }
447
-
448
- function formatNumber(n, type) {
449
- switch (type) {
450
- case _constants.ALL_FIELD_TYPES.integer:
451
- if (n < 0) {
452
- return "-".concat(formatNumber(-n, 'integer'));
453
- }
454
-
455
- if (n < 1000) {
456
- return "".concat(Math.round(n));
457
- }
458
-
459
- if (n < 10 * 1000) {
460
- return (0, _d3Format.format)(',')(Math.round(n));
461
- }
462
-
463
- return formatLargeNumber(n);
464
-
465
- case _constants.ALL_FIELD_TYPES.real:
466
- if (n < 0) {
467
- return "-".concat(formatNumber(-n, 'number'));
468
- }
469
-
470
- if (n < 1000) {
471
- return (0, _d3Format.format)('.4~r')(n);
472
- }
473
-
474
- if (n < 10 * 1000) {
475
- return (0, _d3Format.format)(',.2~f')(n);
476
- }
477
-
478
- return formatLargeNumber(n);
479
-
480
- default:
481
- return formatNumber(n, 'real');
482
- }
483
- }
484
- /**
485
- * Format epoch milliseconds with a format string
486
- * @type timezone
487
- */
488
-
489
-
490
- function datetimeFormatter(timezone) {
491
- return timezone ? function (format) {
492
- return function (ts) {
493
- return _momentTimezone["default"].utc(ts).tz(timezone).format(format);
494
- };
495
- } : // return empty string instead of 'Invalid date' if ts is undefined/null
496
- function (format) {
497
- return function (ts) {
498
- return ts ? _momentTimezone["default"].utc(ts).format(format) : '';
499
- };
500
- };
501
- }
502
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhLXV0aWxzLnRzIl0sIm5hbWVzIjpbInVuaXF1ZSIsInZhbHVlcyIsInJlc3VsdHMiLCJ1bmlxdWVTZXQiLCJTZXQiLCJmb3JFYWNoIiwidiIsIm5vdE51bGxvclVuZGVmaW5lZCIsInB1c2giLCJnZXRMYXRMbmdCb3VuZHMiLCJwb2ludHMiLCJpZHgiLCJsaW1pdCIsImxhdHMiLCJtYXAiLCJkIiwiTnVtYmVyIiwiQXJyYXkiLCJpc0FycmF5IiwiZmlsdGVyIiwiaXNGaW5pdGUiLCJzb3J0IiwibnVtYmVyU29ydCIsImxlbmd0aCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJjbGFtcCIsInZhbCIsImdldFNhbXBsZURhdGEiLCJkYXRhIiwic2FtcGxlU2l6ZSIsImdldFZhbHVlIiwic2FtcGxlU3RlcCIsImZsb29yIiwib3V0cHV0IiwiaSIsInRpbWVUb1VuaXhNaWxsaSIsInZhbHVlIiwiZm9ybWF0IiwibW9tZW50IiwidXRjIiwidmFsdWVPZiIsIkRhdGUiLCJ1bmRlZmluZWQiLCJpc051bWJlciIsImhhc093blByb3BlcnR5Iiwib2JqIiwicHJvcCIsImEiLCJiIiwiZ2V0U29ydGluZ0Z1bmN0aW9uIiwiZmllbGRUeXBlIiwiQUxMX0ZJRUxEX1RZUEVTIiwicmVhbCIsImludGVnZXIiLCJ0aW1lc3RhbXAiLCJwcmVjaXNlUm91bmQiLCJudW0iLCJkZWNpbWFscyIsInQiLCJwb3ciLCJyb3VuZCIsInNpZ24iLCJ0b0ZpeGVkIiwicm91bmRUb0ZvdXIiLCJnZXRSb3VuZGluZ0RlY2ltYWxGcm9tU3RlcCIsInN0ZXAiLCJpc05hTiIsInN0ZXBTdHIiLCJ0b1N0cmluZyIsInNwbGl0RXhwb25lbnRpYWwiLCJzcGxpdCIsImNvZWZmWmVybyIsImNvZWZmRGVjaW1hbCIsInBhcnNlSW50Iiwic3BsaXRaZXJvIiwibm9ybWFsaXplU2xpZGVyVmFsdWUiLCJtaW5WYWx1ZSIsIm1hcmtzIiwicm91bmRWYWxUb1N0ZXAiLCJkZWNpbWFsIiwic3RlcHMiLCJyZW1haW4iLCJjbG9zZXN0Iiwicm91bmRlZCIsImRlZmF1bHRGb3JtYXR0ZXIiLCJTdHJpbmciLCJmbG9hdEZvcm1hdHRlciIsIkZJRUxEX0RJU1BMQVlfRk9STUFUIiwic3RyaW5nIiwiZGF0ZSIsImdlb2pzb24iLCJKU09OIiwic3RyaW5naWZ5IiwiZ2VvYXJyb3ciLCJvYmplY3QiLCJhcnJheSIsInBhcnNlRmllbGRWYWx1ZSIsInR5cGUiLCJhcnJheU1vdmVNdXRhdGUiLCJmcm9tIiwidG8iLCJzcGxpY2UiLCJhcnJheU1vdmUiLCJzbGljZSIsImdldEZvcm1hdHRlciIsImZpZWxkIiwidG9vbHRpcEZvcm1hdCIsIk9iamVjdCIsIlRPT0xUSVBfRk9STUFUUyIsImZpbmQiLCJmIiwiVE9PTFRJUF9LRVkiLCJhcHBseURlZmF1bHRGb3JtYXQiLCJhcHBseUN1c3RvbUZvcm1hdCIsImdldENvbHVtbkZvcm1hdHRlciIsImNvbE1ldGEiLCJkaXNwbGF5Rm9ybWF0IiwiYXBwbHlWYWx1ZU1hcCIsIlRPT0xUSVBfRk9STUFUX1RZUEVTIiwiREVDSU1BTCIsIkRBVEUiLCJEQVRFX1RJTUUiLCJkYXRldGltZUZvcm1hdHRlciIsIlBFUkNFTlRBR0UiLCJERUNJTUFMX0RFQ0lNQUxfRklYRURfMiIsIkJPT0xFQU4iLCJnZXRCb29sZWFuRm9ybWF0dGVyIiwiZm9ybWF0TGFyZ2VOdW1iZXIiLCJuIiwiZm9ybWF0TnVtYmVyIiwidGltZXpvbmUiLCJ0cyIsInR6Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBOztBQUNBOztBQUNBOztBQUVBOztBQVNBOztBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0EsTUFBVCxDQUFtQkMsTUFBbkIsRUFBZ0M7QUFDckMsTUFBTUMsT0FBWSxHQUFHLEVBQXJCO0FBQ0EsTUFBTUMsU0FBUyxHQUFHLElBQUlDLEdBQUosQ0FBUUgsTUFBUixDQUFsQjtBQUNBRSxFQUFBQSxTQUFT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LE1BQU07QUFBQSxXQUFJLFVBQUE4RixFQUFFO0FBQUEsYUFDVjdGLDJCQUNHQyxHQURILENBQ080RixFQURQLEVBRUdDLEVBRkgsQ0FFTUYsUUFGTixFQUdHN0YsTUFISCxDQUdVQSxNQUhWLENBRFU7QUFBQSxLQUFOO0FBQUEsR0FESyxHQU1YO0FBQ0EsWUFBQUEsTUFBTTtBQUFBLFdBQUksVUFBQThGLEVBQUU7QUFBQSxhQUFLQSxFQUFFLEdBQUc3RiwyQkFBT0MsR0FBUCxDQUFXNEYsRUFBWCxFQUFlOUYsTUFBZixDQUFzQkEsTUFBdEIsQ0FBSCxHQUFtQyxFQUExQztBQUFBLEtBQU47QUFBQSxHQVBWO0FBUUQiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge2Zvcm1hdCBhcyBkM0Zvcm1hdH0gZnJvbSAnZDMtZm9ybWF0JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcblxuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBUT09MVElQX0ZPUk1BVFMsXG4gIFRPT0xUSVBfRk9STUFUX1RZUEVTLFxuICBUT09MVElQX0tFWSxcbiAgVG9vbHRpcEZvcm1hdFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge01pbGxpc2Vjb25kLCBGaWVsZCwgQ29sTWV0YVByb3BzfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtzbmFwVG9NYXJrc30gZnJvbSAnLi9wbG90JztcbmltcG9ydCB7aXNQbGFpbk9iamVjdH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCB0eXBlIEZpZWxkRm9ybWF0dGVyID0gKHZhbHVlOiBhbnkpID0+IHN0cmluZztcblxuLyoqXG4gKiBzaW1wbGUgZ2V0dGluZyB1bmlxdWUgdmFsdWVzIG9mIGFuIGFycmF5XG4gKlxuICogQHBhcmFtIHZhbHVlc1xuICogQHJldHVybnMgdW5pcXVlIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlPFQ+KHZhbHVlczogVFtdKSB7XG4gIGNvbnN0IHJlc3VsdHM6IFRbXSA9IFtdO1xuICBjb25zdCB1bmlxdWVTZXQgPSBuZXcgU2V0KHZhbHVlcyk7XG4gIHVuaXF1ZVNldC5mb3JFYWNoKHYgPT4ge1xuICAgIGlmIChub3ROdWxsb3JVbmRlZmluZWQodikpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh2KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhdExuZ0JvdW5kcyhcbiAgcG9pbnRzOiBudW1iZXJbXVtdLFxuICBpZHg6IG51bWJlcixcbiAgbGltaXQ6IFtudW1iZXIsIG51bWJlcl1cbik6IFtudW1iZXIsIG51bWJlcl0gfCBudWxsIHtcbiAgY29uc3QgbGF0cyA9IHBvaW50c1xuICAgIC5tYXAoZCA9PiBOdW1iZXIoQXJyYXkuaXNBcnJheShkKSkgJiYgZFtpZHhdKVxuICAgIC5maWx0ZXIoTnVtYmVyLmlzRmluaXRlKVxuICAgIC5zb3J0KG51bWJlclNvcnQpO1xuXG4gIGlmICghbGF0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGNsYW1wIHRvIGxpbWl0XG4gIHJldHVybiBbTWF0aC5tYXgobGF0c1swXSwgbGltaXRbMF0pLCBNYXRoLm1pbihsYXRzW2xhdHMubGVuZ3RoIC0gMV0sIGxpbWl0WzFdKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcChbbWluLCBtYXhdOiBbbnVtYmVyLCBudW1iZXJdLCB2YWw6IG51bWJlciA9IDApOiBudW1iZXIge1xuICByZXR1cm4gdmFsIDw9IG1pbiA/IG1pbiA6IHZhbCA+PSBtYXggPyBtYXggOiB2YWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTYW1wbGVEYXRhKGRhdGEsIHNhbXBsZVNpemUgPSA1MDAsIGdldFZhbHVlID0gZCA9PiBkKSB7XG4gIGNvbnN0IHNhbXBsZVN0ZXAgPSBNYXRoLm1heChNYXRoLmZsb29yKGRhdGEubGVuZ3RoIC8gc2FtcGxlU2l6ZSksIDEpO1xuICBjb25zdCBvdXRwdXQ6IGFueVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKz0gc2FtcGxlU3RlcCkge1xuICAgIG91dHB1dC5wdXNoKGdldFZhbHVlKGRhdGFbaV0pKTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogQ29udmVydCBkaWZmZXJlbnQgdGltZSBmb3JtYXQgdG8gdW5peCBtaWxsaXNlY29uZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbWVUb1VuaXhNaWxsaSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSwgZm9ybWF0OiBzdHJpbmcpOiBNaWxsaXNlY29uZCB8IG51bGwge1xuICBpZiAobm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbW9tZW50LnV0Yyh2YWx1ZSwgZm9ybWF0KS52YWx1ZU9mKCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZm9ybWF0ID09PSAneCcgPyB2YWx1ZSAqIDEwMDAgOiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlT2YoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogd2hldGhlciBudWxsIG9yIHVuZGVmaW5lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm90TnVsbG9yVW5kZWZpbmVkPFQgZXh0ZW5kcyBOb25OdWxsYWJsZTxhbnk+PihkOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGQgaXMgVCB7XG4gIHJldHVybiBkICE9PSB1bmRlZmluZWQgJiYgZCAhPT0gbnVsbDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGQgaXMgYSBudW1iZXIsIHRoaXMgZmlsdGVyZWQgb3V0IE5hTiBhcyB3ZWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcihkOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShkKTtcbn1cblxuLyoqXG4gKiB3aGV0aGVyIG9iamVjdCBoYXMgcHJvcGVydHlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB5ZXMgb3Igbm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc093blByb3BlcnR5PFggZXh0ZW5kcyB7fSwgWSBleHRlbmRzIFByb3BlcnR5S2V5PihcbiAgb2JqOiBYLFxuICBwcm9wOiBZXG4pOiBvYmogaXMgWCAmIFJlY29yZDxZLCB1bmtub3duPiB7XG4gIHJldHVybiBvYmouaGFzT3duUHJvcGVydHkocHJvcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJTb3J0KGE6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGEgLSBiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U29ydGluZ0Z1bmN0aW9uKGZpZWxkVHlwZTogc3RyaW5nKTogdHlwZW9mIG51bWJlclNvcnQgfCB1bmRlZmluZWQge1xuICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjpcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXA6XG4gICAgICByZXR1cm4gbnVtYmVyU29ydDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIHJvdW5kIG51bWJlciB3aXRoIGV4YWN0IG51bWJlciBvZiBkZWNpbWFsc1xuICogcmV0dXJuIGFzIGEgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVjaXNlUm91bmQobnVtOiBudW1iZXIsIGRlY2ltYWxzOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCB0ID0gTWF0aC5wb3coMTAsIGRlY2ltYWxzKTtcbiAgcmV0dXJuIChcbiAgICBNYXRoLnJvdW5kKFxuICAgICAgbnVtICogdCArIChkZWNpbWFscyA+IDAgPyAxIDogMCkgKiAoTWF0aC5zaWduKG51bSkgKiAoMTAgLyBNYXRoLnBvdygxMDAsIGRlY2ltYWxzKSkpXG4gICAgKSAvIHRcbiAgKS50b0ZpeGVkKGRlY2ltYWxzKTtcbn1cblxuLyoqXG4gKiByb3VuZCBhIGdpdmluZyBudW1iZXIgYXQgbW9zdCA0IGRlY2ltYWwgcGxhY2VzXG4gKiBlLmcuIDEwIC0+IDEwLCAxLjEyMzQ1IC0+IDEuMjM0NSwgMi4wIC0+IDJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kVG9Gb3VyKG51bTogbnVtYmVyKTogbnVtYmVyIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICByZXR1cm4gTnVtYmVyKGAke01hdGgucm91bmQoYCR7bnVtfWUrNGApfWUtNGApO1xufVxuLyoqXG4gKiBnZXQgbnVtYmVyIG9mIGRlY2ltYWxzIHRvIHJvdW5kIHRvIGZvciBzbGlkZXIgZnJvbSBzdGVwXG4gKiBAcGFyYW0gc3RlcFxuICogQHJldHVybnMtIG51bWJlciBvZiBkZWNpbWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3VuZGluZ0RlY2ltYWxGcm9tU3RlcChzdGVwOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoaXNOYU4oc3RlcCkpIHtcbiAgICBhc3NlcnQoJ3N0ZXAgaXMgbm90IGEgbnVtYmVyJyk7XG4gICAgYXNzZXJ0KHN0ZXApO1xuICB9XG5cbiAgY29uc3Qgc3RlcFN0ciA9IHN0ZXAudG9TdHJpbmcoKTtcblxuICAvLyBpbiBjYXNlIHRoZSBzdGVwIGlzIGEgdmVyeSBzbWFsbCBudW1iZXIgZS5nLiAxZS03LCByZXR1cm4gZGVjaW1hbCBlLmcuIDcgZGlyZWN0bHlcbiAgY29uc3Qgc3BsaXRFeHBvbmVudGlhbCA9IHN0ZXBTdHIuc3BsaXQoJ2UtJyk7XG4gIGlmIChzcGxpdEV4cG9uZW50aWFsLmxlbmd0aCA9PT0gMikge1xuICAgIGNvbnN0IGNvZWZmWmVybyA9IHNwbGl0RXhwb25lbnRpYWxbMF0uc3BsaXQoJy4nKTtcbiAgICBjb25zdCBjb2VmZkRlY2ltYWwgPSBjb2VmZlplcm8ubGVuZ3RoID09PSAxID8gMCA6IGNvZWZmWmVyb1sxXS5sZW5ndGg7XG4gICAgcmV0dXJuIHBhcnNlSW50KHNwbGl0RXhwb25lbnRpYWxbMV0sIDEwKSArIGNvZWZmRGVjaW1hbDtcbiAgfVxuXG4gIGNvbnN0IHNwbGl0WmVybyA9IHN0ZXBTdHIuc3BsaXQoJy4nKTtcbiAgaWYgKHNwbGl0WmVyby5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gc3BsaXRaZXJvWzFdLmxlbmd0aDtcbn1cblxuLyoqXG4gKiBJZiBtYXJrcyBpcyBwcm92aWRlZCwgc25hcCB0byBtYXJrcywgaWYgbm90IG5vcm1hbGl6ZSB0byBzdGVwXG4gKiBAcGFyYW0gdmFsXG4gKiBAcGFyYW0gbWluVmFsdWVcbiAqIEBwYXJhbSBzdGVwXG4gKiBAcGFyYW0gbWFya3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVNsaWRlclZhbHVlKFxuICB2YWw6IG51bWJlcixcbiAgbWluVmFsdWU6IG51bWJlcixcbiAgc3RlcDogbnVtYmVyLFxuICBtYXJrcz86IG51bWJlcltdXG4pOiBudW1iZXIge1xuICBpZiAobWFya3MgJiYgbWFya3MubGVuZ3RoKSB7XG4gICAgLy8gVXNlIGluIHNsaWRlciwgZ2l2ZW4gYSBudW1iZXIgYW5kIGFuIGFycmF5IG9mIG51bWJlcnMsIHJldHVybiB0aGUgbmVhcnMgbnVtYmVyIGZyb20gdGhlIGFycmF5XG4gICAgcmV0dXJuIHNuYXBUb01hcmtzKHZhbCwgbWFya3MpO1xuICB9XG5cbiAgcmV0dXJuIHJvdW5kVmFsVG9TdGVwKG1pblZhbHVlLCBzdGVwLCB2YWwpO1xufVxuXG4vKipcbiAqIHJvdW5kIHRoZSB2YWx1ZSB0byBzdGVwIGZvciB0aGUgc2xpZGVyXG4gKiBAcGFyYW0gbWluVmFsdWVcbiAqIEBwYXJhbSBzdGVwXG4gKiBAcGFyYW0gdmFsXG4gKiBAcmV0dXJucyAtIHJvdW5kZWQgbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3VuZFZhbFRvU3RlcChtaW5WYWx1ZTogbnVtYmVyLCBzdGVwOiBudW1iZXIsIHZhbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKCFpc051bWJlcihzdGVwKSB8fCAhaXNOdW1iZXIobWluVmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIGNvbnN0IGRlY2ltYWwgPSBnZXRSb3VuZGluZ0RlY2ltYWxGcm9tU3RlcChzdGVwKTtcbiAgY29uc3Qgc3RlcHMgPSBNYXRoLmZsb29yKCh2YWwgLSBtaW5WYWx1ZSkgLyBzdGVwKTtcbiAgbGV0IHJlbWFpbiA9IHZhbCAtIChzdGVwcyAqIHN0ZXAgKyBtaW5WYWx1ZSk7XG5cbiAgLy8gaGFzIHRvIHJvdW5kIGJlY2F1c2UgamF2YXNjcmlwdCB0dXJucyAwLjEgaW50byAwLjk5OTk5OTk5OTk5OTk5ODdcbiAgcmVtYWluID0gTnVtYmVyKHByZWNpc2VSb3VuZChyZW1haW4sIDgpKTtcblxuICBsZXQgY2xvc2VzdDogbnVtYmVyO1xuICBpZiAocmVtYWluID09PSAwKSB7XG4gICAgY2xvc2VzdCA9IHZhbDtcbiAgfSBlbHNlIGlmIChyZW1haW4gPCBzdGVwIC8gMikge1xuICAgIGNsb3Nlc3QgPSBzdGVwcyAqIHN0ZXAgKyBtaW5WYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBjbG9zZXN0ID0gKHN0ZXBzICsgMSkgKiBzdGVwICsgbWluVmFsdWU7XG4gIH1cblxuICAvLyBwcmVjaXNlIHJvdW5kIHJldHVybiBhIHN0cmluZyByb3VuZGVkIHRvIHRoZSBkZWZpbmVkIGRlY2ltYWxcbiAgY29uc3Qgcm91bmRlZCA9IHByZWNpc2VSb3VuZChjbG9zZXN0LCBkZWNpbWFsKTtcblxuICByZXR1cm4gTnVtYmVyKHJvdW5kZWQpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZm9ybWF0IGJhc2VkIG9uIGZpZWxkIGFuZCBmb3JtYXQgb3B0aW9uc1xuICogVXNlZCBpbiByZW5kZXIgdG9vbHRpcCB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdEZvcm1hdHRlcjogRmllbGRGb3JtYXR0ZXIgPSB2ID0+IChub3ROdWxsb3JVbmRlZmluZWQodikgPyBTdHJpbmcodikgOiAnJyk7XG5cbmV4cG9ydCBjb25zdCBmbG9hdEZvcm1hdHRlciA9IHYgPT4gKGlzTnVtYmVyKHYpID8gU3RyaW5nKHJvdW5kVG9Gb3VyKHYpKSA6ICcnKTtcblxuZXhwb3J0IGNvbnN0IEZJRUxEX0RJU1BMQVlfRk9STUFUOiB7XG4gIFtrZXk6IHN0cmluZ106IEZpZWxkRm9ybWF0dGVyO1xufSA9IHtcbiAgW0FMTF9GSUVMRF9UWVBFUy5zdHJpbmddOiBkZWZhdWx0Rm9ybWF0dGVyLFxuICBbQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcF06IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMuaW50ZWdlcl06IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMucmVhbF06IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMuYm9vbGVhbl06IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMuZGF0ZV06IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMuZ2VvanNvbl06IGQgPT5cbiAgICB0eXBlb2YgZCA9PT0gJ3N0cmluZydcbiAgICAgID8gZFxuICAgICAgOiBpc1BsYWluT2JqZWN0KGQpXG4gICAgICA/IEpTT04uc3RyaW5naWZ5KGQpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoZClcbiAgICAgID8gYFske1N0cmluZyhkKX1dYFxuICAgICAgOiAnJyxcbiAgW0FMTF9GSUVMRF9UWVBFUy5nZW9hcnJvd106IGQgPT4gZCxcbiAgW0FMTF9GSUVMRF9UWVBFUy5vYmplY3RdOiBKU09OLnN0cmluZ2lmeSxcbiAgW0FMTF9GSUVMRF9UWVBFUy5hcnJheV06IEpTT04uc3RyaW5naWZ5XG59O1xuXG4vKipcbiAqIFBhcnNlIGZpZWxkIHZhbHVlIGFuZCB0eXBlIGFuZCByZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlRmllbGRWYWx1ZSA9ICh2YWx1ZTogYW55LCB0eXBlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIEZJRUxEX0RJU1BMQVlfRk9STUFUW3R5cGVdID8gRklFTERfRElTUExBWV9GT1JNQVRbdHlwZV0odmFsdWUpIDogU3RyaW5nKHZhbHVlKTtcbn07XG5cbmNvbnN0IGFycmF5TW92ZU11dGF0ZSA9IDxUPihhcnJheTogVFtdLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpID0+IHtcbiAgYXJyYXkuc3BsaWNlKHRvIDwgMCA/IGFycmF5Lmxlbmd0aCArIHRvIDogdG8sIDAsIGFycmF5LnNwbGljZShmcm9tLCAxKVswXSk7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gYXJyYXlcbiAqIEBwYXJhbSBmcm9tXG4gKiBAcGFyYW0gdG9cbiAqL1xuZXhwb3J0IGNvbnN0IGFycmF5TW92ZSA9IDxUPihhcnJheTogVFtdLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpOiBUW10gPT4ge1xuICBhcnJheSA9IGFycmF5LnNsaWNlKCk7XG4gIGFycmF5TW92ZU11dGF0ZShhcnJheSwgZnJvbSwgdG8pO1xuICByZXR1cm4gYXJyYXk7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZm9ybWF0IGJhc2VkIG9uIGZpZWxkIGFuZCBmb3JtYXQgb3B0aW9uc1xuICogVXNlZCBpbiByZW5kZXIgdG9vbHRpcCB2YWx1ZVxuICogQHBhcmFtIGZvcm1hdFxuICogQHBhcmFtIGZpZWxkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXR0ZXIoXG4gIGZvcm1hdDogc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgZmllbGQ/OiBGaWVsZFxuKTogRmllbGRGb3JtYXR0ZXIge1xuICBpZiAoIWZvcm1hdCkge1xuICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0dGVyO1xuICB9XG4gIGNvbnN0IHRvb2x0aXBGb3JtYXQgPSBPYmplY3QudmFsdWVzKFRPT0xUSVBfRk9STUFUUykuZmluZChmID0+IGZbVE9PTFRJUF9LRVldID09PSBmb3JtYXQpO1xuXG4gIGlmICh0b29sdGlwRm9ybWF0KSB7XG4gICAgcmV0dXJuIGFwcGx5RGVmYXVsdEZvcm1hdCh0b29sdGlwRm9ybWF0IGFzIFRvb2x0aXBGb3JtYXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBmb3JtYXQgPT09ICdzdHJpbmcnICYmIGZpZWxkKSB7XG4gICAgcmV0dXJuIGFwcGx5Q3VzdG9tRm9ybWF0KGZvcm1hdCwgZmllbGQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5Gb3JtYXR0ZXIoY29sTWV0YTogQ29sTWV0YVByb3BzKTogRmllbGRGb3JtYXR0ZXIge1xuICBjb25zdCB7Zm9ybWF0LCBkaXNwbGF5Rm9ybWF0fSA9IGNvbE1ldGE7XG5cbiAgaWYgKCFmb3JtYXQgJiYgIWRpc3BsYXlGb3JtYXQpIHtcbiAgICByZXR1cm4gRklFTERfRElTUExBWV9GT1JNQVRbY29sTWV0YS50eXBlXTtcbiAgfVxuICBjb25zdCB0b29sdGlwRm9ybWF0ID0gT2JqZWN0LnZhbHVlcyhUT09MVElQX0ZPUk1BVFMpLmZpbmQoZiA9PiBmW1RPT0xUSVBfS0VZXSA9PT0gZGlzcGxheUZvcm1hdCk7XG5cbiAgaWYgKHRvb2x0aXBGb3JtYXQpIHtcbiAgICByZXR1cm4gYXBwbHlEZWZhdWx0Rm9ybWF0KHRvb2x0aXBGb3JtYXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkaXNwbGF5Rm9ybWF0ID09PSAnc3RyaW5nJyAmJiBjb2xNZXRhKSB7XG4gICAgcmV0dXJuIGFwcGx5Q3VzdG9tRm9ybWF0KGRpc3BsYXlGb3JtYXQsIGNvbE1ldGEpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkaXNwbGF5Rm9ybWF0ID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBhcHBseVZhbHVlTWFwKGRpc3BsYXlGb3JtYXQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVZhbHVlTWFwKGZvcm1hdCkge1xuICByZXR1cm4gdiA9PiBmb3JtYXRbdl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseURlZmF1bHRGb3JtYXQodG9vbHRpcEZvcm1hdDogVG9vbHRpcEZvcm1hdCk6ICh2OiBhbnkpID0+IHN0cmluZyB7XG4gIGlmICghdG9vbHRpcEZvcm1hdCB8fCAhdG9vbHRpcEZvcm1hdC5mb3JtYXQpIHtcbiAgICByZXR1cm4gZGVmYXVsdEZvcm1hdHRlcjtcbiAgfVxuXG4gIHN3aXRjaCAodG9vbHRpcEZvcm1hdC50eXBlKSB7XG4gICAgY2FzZSBUT09MVElQX0ZPUk1BVF9UWVBFUy5ERUNJTUFMOlxuICAgICAgcmV0dXJuIGQzRm9ybWF0KHRvb2x0aXBGb3JtYXQuZm9ybWF0KTtcbiAgICBjYXNlIFRPT0xUSVBfRk9STUFUX1RZUEVTLkRBVEU6XG4gICAgY2FzZSBUT09MVElQX0ZPUk1BVF9UWVBFUy5EQVRFX1RJTUU6XG4gICAgICByZXR1cm4gZGF0ZXRpbWVGb3JtYXR0ZXIobnVsbCkodG9vbHRpcEZvcm1hdC5mb3JtYXQpO1xuICAgIGNhc2UgVE9PTFRJUF9GT1JNQVRfVFlQRVMuUEVSQ0VOVEFHRTpcbiAgICAgIHJldHVybiB2ID0+IGAke2QzRm9ybWF0KFRPT0xUSVBfRk9STUFUUy5ERUNJTUFMX0RFQ0lNQUxfRklYRURfMi5mb3JtYXQpKHYpfSVgO1xuICAgIGNhc2UgVE9PTFRJUF9GT1JNQVRfVFlQRVMuQk9PTEVBTjpcbiAgICAgIHJldHVybiBnZXRCb29sZWFuRm9ybWF0dGVyKHRvb2x0aXBGb3JtYXQuZm9ybWF0KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJvb2xlYW5Gb3JtYXR0ZXIoZm9ybWF0OiBzdHJpbmcpOiBGaWVsZEZvcm1hdHRlciB7XG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSAnMDEnOlxuICAgICAgcmV0dXJuICh2OiBCb29sZWFuKSA9PiAodiA/ICcxJyA6ICcwJyk7XG4gICAgY2FzZSAneW4nOlxuICAgICAgcmV0dXJuICh2OiBCb29sZWFuKSA9PiAodiA/ICd5ZXMnIDogJ25vJyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0dGVyO1xuICB9XG59XG4vLyBBbGxvdyB1c2VyIHRvIHNwZWNpZnkgY3VzdG9tIHRvb2x0aXAgZm9ybWF0IHZpYSBjb25maWdcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUN1c3RvbUZvcm1hdChmb3JtYXQsIGZpZWxkKTogRmllbGRGb3JtYXR0ZXIge1xuICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5yZWFsOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgICByZXR1cm4gZDNGb3JtYXQoZm9ybWF0KTtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5kYXRlOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDpcbiAgICAgIHJldHVybiBkYXRldGltZUZvcm1hdHRlcihudWxsKShmb3JtYXQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdiA9PiB2O1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExhcmdlTnVtYmVyKG4pIHtcbiAgLy8gU0ktcHJlZml4IHdpdGggNCBzaWduaWZpY2FudCBkaWdpdHNcbiAgcmV0dXJuIGQzRm9ybWF0KCcuNH5zJykobik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROdW1iZXIobjogbnVtYmVyLCB0eXBlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjpcbiAgICAgIGlmIChuIDwgMCkge1xuICAgICAgICByZXR1cm4gYC0ke2Zvcm1hdE51bWJlcigtbiwgJ2ludGVnZXInKX1gO1xuICAgICAgfVxuICAgICAgaWYgKG4gPCAxMDAwKSB7XG4gICAgICAgIHJldHVybiBgJHtNYXRoLnJvdW5kKG4pfWA7XG4gICAgICB9XG4gICAgICBpZiAobiA8IDEwICogMTAwMCkge1xuICAgICAgICByZXR1cm4gZDNGb3JtYXQoJywnKShNYXRoLnJvdW5kKG4pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtYXRMYXJnZU51bWJlcihuKTtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5yZWFsOlxuICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgIHJldHVybiBgLSR7Zm9ybWF0TnVtYmVyKC1uLCAnbnVtYmVyJyl9YDtcbiAgICAgIH1cbiAgICAgIGlmIChuIDwgMTAwMCkge1xuICAgICAgICByZXR1cm4gZDNGb3JtYXQoJy40fnInKShuKTtcbiAgICAgIH1cbiAgICAgIGlmIChuIDwgMTAgKiAxMDAwKSB7XG4gICAgICAgIHJldHVybiBkM0Zvcm1hdCgnLC4yfmYnKShuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtYXRMYXJnZU51bWJlcihuKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKG4sICdyZWFsJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3JtYXQgZXBvY2ggbWlsbGlzZWNvbmRzIHdpdGggYSBmb3JtYXQgc3RyaW5nXG4gKiBAdHlwZSB0aW1lem9uZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0ZXRpbWVGb3JtYXR0ZXIoXG4gIHRpbWV6b25lPzogc3RyaW5nIHwgbnVsbFxuKTogKGZvcm1hdD86IHN0cmluZykgPT4gKHRzOiBudW1iZXIpID0+IHN0cmluZyB7XG4gIHJldHVybiB0aW1lem9uZVxuICAgID8gZm9ybWF0ID0+IHRzID0+XG4gICAgICAgIG1vbWVudFxuICAgICAgICAgIC51dGModHMpXG4gICAgICAgICAgLnR6KHRpbWV6b25lKVxuICAgICAgICAgIC5mb3JtYXQoZm9ybWF0KVxuICAgIDogLy8gcmV0dXJuIGVtcHR5IHN0cmluZyBpbnN0ZWFkIG9mICdJbnZhbGlkIGRhdGUnIGlmIHRzIGlzIHVuZGVmaW5lZC9udWxsXG4gICAgICBmb3JtYXQgPT4gdHMgPT4gKHRzID8gbW9tZW50LnV0Yyh0cykuZm9ybWF0KGZvcm1hdCkgOiAnJyk7XG59XG4iXX0=
@@ -1,116 +0,0 @@
1
- import { ProcessorResult, RGBColor, RowData, Field, FieldPair, 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
- export declare const ACCEPTED_ANALYZER_TYPES: any[];
35
- /**
36
- * Validate input data, adding missing field types, rename duplicate columns
37
- */
38
- export declare function validateInputData(data: ProtoDataset['data']): ProcessorResult;
39
- /**
40
- * Getting sample data for analyzing field type.
41
- */
42
- export declare function getSampleForTypeAnalyze({ fields, rows, sampleCount }: {
43
- fields: string[];
44
- rows: unknown[][];
45
- sampleCount?: number;
46
- }): RowData;
47
- /**
48
- * Check if string is a valid Well-known binary (WKB) in HEX format
49
- * https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry
50
- *
51
- * @param str input string
52
- * @returns true if string is a valid WKB in HEX format
53
- */
54
- export declare function isHexWkb(str: string | null): boolean;
55
- /**
56
- * Analyze field types from data in `string` format, e.g. uploaded csv.
57
- * Assign `type`, `fieldIdx` and `format` (timestamp only) to each field
58
- *
59
- * @param data array of row object
60
- * @param fieldOrder array of field names as string
61
- * @returns formatted fields
62
- * @public
63
- * @example
64
- *
65
- * import {getFieldsFromData} from 'kepler.gl/processors';
66
- * const data = [{
67
- * time: '2016-09-17 00:09:55',
68
- * value: '4',
69
- * surge: '1.2',
70
- * isTrip: 'true',
71
- * zeroOnes: '0'
72
- * }, {
73
- * time: '2016-09-17 00:30:08',
74
- * value: '3',
75
- * surge: null,
76
- * isTrip: 'false',
77
- * zeroOnes: '1'
78
- * }, {
79
- * time: null,
80
- * value: '2',
81
- * surge: '1.3',
82
- * isTrip: null,
83
- * zeroOnes: '1'
84
- * }];
85
- *
86
- * const fieldOrder = ['time', 'value', 'surge', 'isTrip', 'zeroOnes'];
87
- * const fields = getFieldsFromData(data, fieldOrder);
88
- * // fields = [
89
- * // {name: 'time', format: 'YYYY-M-D H:m:s', fieldIdx: 1, type: 'timestamp'},
90
- * // {name: 'value', format: '', fieldIdx: 4, type: 'integer'},
91
- * // {name: 'surge', format: '', fieldIdx: 5, type: 'real'},
92
- * // {name: 'isTrip', format: '', fieldIdx: 6, type: 'boolean'},
93
- * // {name: 'zeroOnes', format: '', fieldIdx: 7, type: 'integer'}];
94
- *
95
- */
96
- export declare function getFieldsFromData(data: RowData, fieldOrder: string[]): Field[];
97
- /**
98
- * pass in an array of field names, rename duplicated one
99
- * and return a map from old field index to new name
100
- *
101
- * @param fieldOrder
102
- * @returns new field name by index
103
- */
104
- export declare function renameDuplicateFields(fieldOrder: string[]): {
105
- allNames: string[];
106
- fieldByIndex: string[];
107
- };
108
- /**
109
- * Convert type-analyzer output to kepler.gl field types
110
- *
111
- * @param aType
112
- * @returns corresponding type in `ALL_FIELD_TYPES`
113
- */
114
- export declare function analyzerTypeToFieldType(aType: string): string;
115
- export declare function getFieldFormatLabels(fieldType?: string): TooltipFormat[];
116
- export declare function getFormatLabels(fields: TooltipFields[], fieldName: string): TooltipFormat[];