@kepler.gl/utils 3.1.0-alpha.0 → 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.
Files changed (81) hide show
  1. package/dist/aggregation.d.ts +13 -0
  2. package/dist/aggregation.js +84 -0
  3. package/dist/application-config.d.ts +25 -0
  4. package/dist/application-config.js +52 -0
  5. package/dist/arrow-data-container.d.ts +62 -0
  6. package/dist/arrow-data-container.js +331 -0
  7. package/dist/color-utils.d.ts +108 -0
  8. package/dist/color-utils.js +443 -0
  9. package/dist/data-container-interface.d.ts +138 -0
  10. package/dist/data-container-interface.js +6 -0
  11. package/dist/data-container-utils.d.ts +30 -0
  12. package/dist/data-container-utils.js +74 -0
  13. package/dist/data-row.d.ts +59 -0
  14. package/dist/data-row.js +110 -0
  15. package/dist/data-scale-utils.d.ts +120 -0
  16. package/dist/data-scale-utils.js +340 -0
  17. package/dist/data-utils.d.ts +98 -0
  18. package/dist/data-utils.js +436 -0
  19. package/dist/dataset-utils.d.ts +45 -0
  20. package/dist/dataset-utils.js +313 -0
  21. package/dist/dom-to-image.d.ts +73 -0
  22. package/dist/dom-to-image.js +421 -0
  23. package/dist/dom-utils.d.ts +23 -0
  24. package/dist/dom-utils.js +349 -0
  25. package/dist/effect-utils.d.ts +24 -0
  26. package/dist/effect-utils.js +166 -0
  27. package/dist/export-map-html.d.ts +9 -0
  28. package/dist/export-map-html.js +25 -0
  29. package/dist/export-utils.d.ts +40 -0
  30. package/dist/export-utils.js +201 -0
  31. package/dist/filter-utils.d.ts +331 -0
  32. package/dist/filter-utils.js +1214 -0
  33. package/dist/format.d.ts +3 -0
  34. package/dist/format.js +38 -0
  35. package/dist/gl-utils.d.ts +1 -0
  36. package/dist/gl-utils.js +27 -0
  37. package/dist/index.d.ts +41 -0
  38. package/dist/index.js +941 -0
  39. package/dist/indexed-data-container.d.ts +34 -0
  40. package/dist/indexed-data-container.js +214 -0
  41. package/dist/locale-utils.d.ts +2 -0
  42. package/dist/locale-utils.js +39 -0
  43. package/dist/map-info-utils.d.ts +1 -0
  44. package/dist/map-info-utils.js +14 -0
  45. package/dist/map-style-utils/mapbox-gl-style-editor.d.ts +57 -0
  46. package/dist/map-style-utils/mapbox-gl-style-editor.js +188 -0
  47. package/dist/map-style-utils/mapbox-utils.d.ts +14 -0
  48. package/dist/map-style-utils/mapbox-utils.js +51 -0
  49. package/dist/map-utils.d.ts +9 -0
  50. package/dist/map-utils.js +48 -0
  51. package/dist/mapbox-utils.d.ts +7 -0
  52. package/dist/mapbox-utils.js +19 -0
  53. package/dist/noop.d.ts +1 -0
  54. package/dist/noop.js +13 -0
  55. package/dist/notifications-utils.d.ts +42 -0
  56. package/dist/notifications-utils.js +69 -0
  57. package/dist/observe-dimensions.d.ts +15 -0
  58. package/dist/observe-dimensions.js +130 -0
  59. package/dist/plot.d.ts +131 -0
  60. package/dist/plot.js +615 -0
  61. package/dist/position-utils.d.ts +6 -0
  62. package/dist/position-utils.js +26 -0
  63. package/dist/projection-utils.d.ts +22 -0
  64. package/dist/projection-utils.js +83 -0
  65. package/dist/quick-insertion-sort.d.ts +12 -0
  66. package/dist/quick-insertion-sort.js +132 -0
  67. package/dist/row-data-container.d.ts +31 -0
  68. package/dist/row-data-container.js +206 -0
  69. package/dist/searcher-utils.d.ts +1 -0
  70. package/dist/searcher-utils.js +25 -0
  71. package/dist/split-map-utils.d.ts +32 -0
  72. package/dist/split-map-utils.js +99 -0
  73. package/dist/strings.d.ts +4 -0
  74. package/dist/strings.js +16 -0
  75. package/dist/time.d.ts +54 -0
  76. package/dist/time.js +325 -0
  77. package/dist/types.d.ts +18 -0
  78. package/dist/types.js +6 -0
  79. package/dist/utils.d.ts +104 -0
  80. package/dist/utils.js +241 -0
  81. package/package.json +6 -5
@@ -0,0 +1,340 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.colorBreaksToColorMap = colorBreaksToColorMap;
8
+ exports.colorMapToColorBreaks = colorMapToColorBreaks;
9
+ exports.getDomainStepsbyZoom = getDomainStepsbyZoom;
10
+ exports.getLayerColorScale = getLayerColorScale;
11
+ exports.getLegendOfScale = getLegendOfScale;
12
+ exports.getLinearDomain = getLinearDomain;
13
+ exports.getLogDomain = getLogDomain;
14
+ exports.getOrdinalDomain = getOrdinalDomain;
15
+ exports.getOrdinalLegends = getOrdinalLegends;
16
+ exports.getQuantLabelFormat = getQuantLabelFormat;
17
+ exports.getQuantLegends = getQuantLegends;
18
+ exports.getQuantileDomain = getQuantileDomain;
19
+ exports.getScaleFunction = getScaleFunction;
20
+ exports.getThresholdsFromQuantiles = getThresholdsFromQuantiles;
21
+ exports.getVisualChannelScaleByZoom = getVisualChannelScaleByZoom;
22
+ exports.initializeLayerColorMap = initializeLayerColorMap;
23
+ exports.isDomainQuantile = isDomainQuantile;
24
+ exports.isDomainStops = isDomainStops;
25
+ exports.isNumericColorBreaks = isNumericColorBreaks;
26
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
27
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
28
+ var _d3Array = require("d3-array");
29
+ var _moment = _interopRequireDefault(require("moment"));
30
+ var _commonUtils = require("@kepler.gl/common-utils");
31
+ var _constants = require("@kepler.gl/constants");
32
+ var _colorUtils = require("./color-utils");
33
+ var _dataUtils = require("./data-utils");
34
+ var _filterUtils = require("./filter-utils");
35
+ var _utils = require("./utils");
36
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
37
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
38
+ // Copyright contributors to the kepler.gl project
39
+ // import {Layer, VisualChannel, VisualChannelDomain} from '@kepler.gl/layers';
40
+ // TODO isolate types - depends on @kepler.gl/layers
41
+
42
+ /**
43
+ * return quantile domain for an array of data
44
+ */
45
+ function getQuantileDomain(data, valueAccessor, sortFunc) {
46
+ var values = typeof valueAccessor === 'function' ? data.map(valueAccessor) : data;
47
+ return values.filter(_commonUtils.notNullorUndefined).sort(sortFunc);
48
+ }
49
+
50
+ /**
51
+ * return ordinal domain for a data container
52
+ */
53
+ function getOrdinalDomain(dataContainer, valueAccessor) {
54
+ var values = dataContainer.mapIndex(valueAccessor);
55
+ return (0, _dataUtils.unique)(values).filter(_commonUtils.notNullorUndefined).sort();
56
+ }
57
+
58
+ /**
59
+ * return linear domain for an array of data
60
+ */
61
+ function getLinearDomain(data, valueAccessor) {
62
+ var range = typeof valueAccessor === 'function' ? (0, _d3Array.extent)(data, valueAccessor) : (0, _d3Array.extent)(data);
63
+ return range.map(function (d, i) {
64
+ return d === undefined ? i : d;
65
+ });
66
+ }
67
+
68
+ /**
69
+ * return linear domain for an array of data. A log scale domain cannot contain 0
70
+ */
71
+ function getLogDomain(data, valueAccessor) {
72
+ var _getLinearDomain = getLinearDomain(data, valueAccessor),
73
+ _getLinearDomain2 = (0, _slicedToArray2["default"])(_getLinearDomain, 2),
74
+ d0 = _getLinearDomain2[0],
75
+ d1 = _getLinearDomain2[1];
76
+ return [d0 === 0 ? 1e-5 : d0, d1];
77
+ }
78
+ /**
79
+ * whether field domain is stops
80
+ */
81
+ function isDomainStops(domain) {
82
+ return (0, _utils.isPlainObject)(domain) && Array.isArray(domain.stops) && Array.isArray(domain.z);
83
+ }
84
+ /**
85
+ * whether field domain is quantiles
86
+ */
87
+ function isDomainQuantile(domain) {
88
+ return (0, _utils.isPlainObject)(domain) && Array.isArray(domain.quantiles) && Array.isArray(domain.z);
89
+ }
90
+
91
+ /**
92
+ * get the domain at zoom
93
+ */
94
+ function getThresholdsFromQuantiles(quantiles, buckets) {
95
+ var thresholds = [];
96
+ if (!Number.isFinite(buckets) || buckets < 1) {
97
+ return [quantiles[0], quantiles[quantiles.length - 1]];
98
+ }
99
+ for (var i = 1; i < buckets; i++) {
100
+ // position in sorted array
101
+ var position = i / buckets;
102
+ // @ts-ignore
103
+ thresholds.push((0, _d3Array.quantileSorted)(quantiles, position));
104
+ }
105
+ return thresholds;
106
+ }
107
+
108
+ /**
109
+ * get the domain at zoom
110
+ */
111
+ function getDomainStepsbyZoom(domain, steps, z) {
112
+ var i = (0, _d3Array.bisectLeft)(steps, z);
113
+ if (steps[i] === z) {
114
+ // If z is an integer value exactly matching a step, return the corresponding domain
115
+ return domain[i];
116
+ }
117
+ // Otherwise, return the next coarsest domain
118
+ return domain[Math.max(i - 1, 0)];
119
+ }
120
+
121
+ /**
122
+ * Get d3 scale function
123
+ */
124
+ function getScaleFunction(scale, range, domain, fixed) {
125
+ var scaleFunction = _constants.SCALE_FUNC[fixed ? 'linear' : scale]().domain(domain).range(fixed ? domain : range);
126
+ scaleFunction.scaleType = fixed ? 'linear' : scale;
127
+ return scaleFunction;
128
+ }
129
+
130
+ /**
131
+ * Get threshold scale color labels
132
+ */
133
+ function getThresholdLabels(scale, labelFormat) {
134
+ var genLength = scale.range().length;
135
+ return scale.range().map(function (d, i) {
136
+ var invert = scale.invertExtent(d);
137
+ var inputs = [i === 0 ? null : (0, _dataUtils.reverseFormatNumber)(labelFormat(invert[0])), i === genLength - 1 ? null : (0, _dataUtils.reverseFormatNumber)(labelFormat(invert[1]))];
138
+ return {
139
+ // raw value
140
+ range: invert,
141
+ // formatted value
142
+ inputs: inputs,
143
+ label: i === 0 ? "Less than ".concat(labelFormat(invert[1])) : i === genLength - 1 ? "".concat(labelFormat(invert[0]), " or more") : "".concat(labelFormat(invert[0]), " to ").concat(labelFormat(invert[1]))
144
+ };
145
+ });
146
+ }
147
+
148
+ /**
149
+ * Get linear / quant scale color labels
150
+ */
151
+ function getScaleLabels(scale, labelFormat) {
152
+ return scale.range().map(function (d, i) {
153
+ // @ts-ignore
154
+ var invert = scale.invertExtent(d);
155
+ var inputs = [(0, _dataUtils.reverseFormatNumber)(labelFormat(invert[0])), (0, _dataUtils.reverseFormatNumber)(labelFormat(invert[1]))];
156
+ return {
157
+ label: "".concat(labelFormat(invert[0]), " to ").concat(labelFormat(invert[1])),
158
+ // raw value
159
+ range: invert,
160
+ // formatted value
161
+ inputs: inputs
162
+ };
163
+ });
164
+ }
165
+ var customScaleLabelFormat = function customScaleLabelFormat(n) {
166
+ return n ? (0, _dataUtils.formatNumber)(n, 'real') : 'no value';
167
+ };
168
+ /**
169
+ * Get linear / quant scale color breaks
170
+ */
171
+ function getQuantLegends(scale, labelFormat) {
172
+ if (typeof scale.invertExtent !== 'function') {
173
+ return [];
174
+ }
175
+ var labels = scale.scaleType === 'threshold' || scale.scaleType === 'custom' ? getThresholdLabels(scale, scale.scaleType === 'custom' ? customScaleLabelFormat : function (n) {
176
+ return n ? (0, _dataUtils.formatNumber)(n) : 'no value';
177
+ }) : getScaleLabels(scale, labelFormat);
178
+ var data = scale.range();
179
+ return labels.map(function (label, index) {
180
+ return _objectSpread({
181
+ data: Array.isArray(data[index]) ? (0, _colorUtils.rgbToHex)(data[index]) : data[index]
182
+ }, label);
183
+ });
184
+ }
185
+
186
+ /**
187
+ * Get ordinal color scale legends
188
+ */
189
+ function getOrdinalLegends(scale) {
190
+ var domain = scale.domain();
191
+ var labels = scale.domain();
192
+ var data = domain.map(scale);
193
+ return data.map(function (datum, index) {
194
+ return {
195
+ data: (0, _colorUtils.isRgbColor)(datum) ? (0, _colorUtils.rgbToHex)(datum) : datum,
196
+ label: labels[index]
197
+ };
198
+ });
199
+ }
200
+ var defaultFormat = function defaultFormat(d) {
201
+ return d;
202
+ };
203
+ var getTimeLabelFormat = function getTimeLabelFormat(domain) {
204
+ var formatter = (0, _filterUtils.getTimeWidgetHintFormatter)(domain);
205
+ return function (val) {
206
+ return _moment["default"].utc(val).format(formatter);
207
+ };
208
+ };
209
+ function getQuantLabelFormat(domain, fieldType) {
210
+ // quant scale can only be assigned to linear Fields: real, timestamp, integer
211
+ return fieldType === _constants.ALL_FIELD_TYPES.timestamp ? getTimeLabelFormat(domain) : !fieldType ? defaultFormat : function (n) {
212
+ return (0, _dataUtils.isNumber)(n) ? (0, _dataUtils.formatNumber)(n, fieldType) : 'no value';
213
+ };
214
+ }
215
+
216
+ /**
217
+ * Get legends for scale
218
+ */
219
+ function getLegendOfScale(_ref) {
220
+ var scale = _ref.scale,
221
+ scaleType = _ref.scaleType,
222
+ labelFormat = _ref.labelFormat,
223
+ fieldType = _ref.fieldType;
224
+ if (!scale || scale.byZoom) {
225
+ return [];
226
+ }
227
+ if (scaleType === _constants.SCALE_TYPES.ordinal) {
228
+ return getOrdinalLegends(scale);
229
+ }
230
+ var formatLabel = labelFormat || getQuantLabelFormat(scale.domain(), fieldType);
231
+ return getQuantLegends(scale, formatLabel);
232
+ }
233
+
234
+ /**
235
+ * Get color scale function
236
+ */
237
+ function getLayerColorScale(_ref2) {
238
+ var range = _ref2.range,
239
+ domain = _ref2.domain,
240
+ scaleType = _ref2.scaleType,
241
+ layer = _ref2.layer;
242
+ if (range && domain && scaleType) {
243
+ return layer.getColorScale(scaleType, domain, range);
244
+ }
245
+ return null;
246
+ }
247
+
248
+ /**
249
+ * Convert colorRange.colorMap into color breaks UI input
250
+ */
251
+ function initializeLayerColorMap(layer, visualChannel) {
252
+ var domain = layer.config[visualChannel.domain];
253
+ var range = layer.config.visConfig[visualChannel.range];
254
+ var scaleType = layer.config[visualChannel.scale];
255
+ var field = layer.config[visualChannel.field];
256
+ var scale = getLayerColorScale({
257
+ range: range,
258
+ domain: domain,
259
+ scaleType: scaleType,
260
+ layer: layer
261
+ });
262
+ var colorBreaks = getLegendOfScale({
263
+ scale: scale !== null && scale !== void 0 && scale.byZoom ? scale(0) : scale,
264
+ scaleType: scaleType,
265
+ fieldType: field.type
266
+ });
267
+ return colorBreaksToColorMap(colorBreaks);
268
+ }
269
+
270
+ /**
271
+ * Get visual chanel scale function if it's based on zoom
272
+ */
273
+ function getVisualChannelScaleByZoom(_ref3) {
274
+ var _scale;
275
+ var scale = _ref3.scale,
276
+ layer = _ref3.layer,
277
+ mapState = _ref3.mapState;
278
+ if ((_scale = scale) !== null && _scale !== void 0 && _scale.byZoom) {
279
+ var _layer$meta;
280
+ var z = (_layer$meta = layer.meta) !== null && _layer$meta !== void 0 && _layer$meta.getZoom ? layer.meta.getZoom(mapState) : mapState === null || mapState === void 0 ? void 0 : mapState.zoom;
281
+ scale = Number.isFinite(z) ? scale(z) : null;
282
+ }
283
+ return scale;
284
+ }
285
+
286
+ /**
287
+ * Convert color breaks UI input into colorRange.colorMap
288
+ */
289
+ function colorBreaksToColorMap(colorBreaks) {
290
+ var colorMap = colorBreaks.map(function (colorBreak, i) {
291
+ // [value, hex]
292
+ return [colorBreak.inputs ? i === colorBreaks.length - 1 ? null // last
293
+ : colorBreak.inputs[1] : colorBreak.label, colorBreak.data];
294
+ });
295
+
296
+ // @ts-ignore tuple
297
+ return colorMap;
298
+ }
299
+
300
+ /**
301
+ * Convert colorRange.colorMap into color breaks UI input
302
+ */
303
+ function colorMapToColorBreaks(colorMap) {
304
+ if (!colorMap) {
305
+ return null;
306
+ }
307
+ var colorBreaks = colorMap.map(function (_ref4, i) {
308
+ var _ref5 = (0, _slicedToArray2["default"])(_ref4, 2),
309
+ value = _ref5[0],
310
+ color = _ref5[1];
311
+ var range = i === 0 ?
312
+ // first
313
+ [-Infinity, value] :
314
+ // last
315
+ i === colorMap.length - 1 ? [colorMap[i - 1][0], Infinity] :
316
+ // else
317
+ [colorMap[i - 1][0], value];
318
+ return {
319
+ data: color,
320
+ range: range,
321
+ inputs: range,
322
+ label:
323
+ // first
324
+ i === 0 ? "Less than ".concat(value) :
325
+ // last
326
+ i === colorMap.length - 1 ? "".concat(colorMap[i - 1][0], " or more") : "".concat(colorMap[i - 1][0], " to ").concat(value)
327
+ };
328
+ });
329
+
330
+ // @ts-ignore implement conversion for ordinal
331
+ return colorBreaks;
332
+ }
333
+
334
+ /**
335
+ * Whether color breaks is for numeric field
336
+ */
337
+ function isNumericColorBreaks(colorBreaks) {
338
+ return Array.isArray(colorBreaks) && colorBreaks.length && colorBreaks[0].inputs;
339
+ }
340
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZDNBcnJheSIsInJlcXVpcmUiLCJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfY29sb3JVdGlscyIsIl9kYXRhVXRpbHMiLCJfZmlsdGVyVXRpbHMiLCJfdXRpbHMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImdldFF1YW50aWxlRG9tYWluIiwiZGF0YSIsInZhbHVlQWNjZXNzb3IiLCJzb3J0RnVuYyIsInZhbHVlcyIsIm1hcCIsIm5vdE51bGxvclVuZGVmaW5lZCIsInNvcnQiLCJnZXRPcmRpbmFsRG9tYWluIiwiZGF0YUNvbnRhaW5lciIsIm1hcEluZGV4IiwidW5pcXVlIiwiZ2V0TGluZWFyRG9tYWluIiwicmFuZ2UiLCJleHRlbnQiLCJkIiwiaSIsInVuZGVmaW5lZCIsImdldExvZ0RvbWFpbiIsIl9nZXRMaW5lYXJEb21haW4iLCJfZ2V0TGluZWFyRG9tYWluMiIsIl9zbGljZWRUb0FycmF5MiIsImQwIiwiZDEiLCJpc0RvbWFpblN0b3BzIiwiZG9tYWluIiwiaXNQbGFpbk9iamVjdCIsIkFycmF5IiwiaXNBcnJheSIsInN0b3BzIiwieiIsImlzRG9tYWluUXVhbnRpbGUiLCJxdWFudGlsZXMiLCJnZXRUaHJlc2hvbGRzRnJvbVF1YW50aWxlcyIsImJ1Y2tldHMiLCJ0aHJlc2hvbGRzIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJwb3NpdGlvbiIsImQzUXVhbnRpbGUiLCJnZXREb21haW5TdGVwc2J5Wm9vbSIsInN0ZXBzIiwiYmlzZWN0TGVmdCIsIk1hdGgiLCJtYXgiLCJnZXRTY2FsZUZ1bmN0aW9uIiwic2NhbGUiLCJmaXhlZCIsInNjYWxlRnVuY3Rpb24iLCJTQ0FMRV9GVU5DIiwic2NhbGVUeXBlIiwiZ2V0VGhyZXNob2xkTGFiZWxzIiwibGFiZWxGb3JtYXQiLCJnZW5MZW5ndGgiLCJpbnZlcnQiLCJpbnZlcnRFeHRlbnQiLCJpbnB1dHMiLCJyZXZlcnNlRm9ybWF0TnVtYmVyIiwibGFiZWwiLCJjb25jYXQiLCJnZXRTY2FsZUxhYmVscyIsImN1c3RvbVNjYWxlTGFiZWxGb3JtYXQiLCJuIiwiZm9ybWF0TnVtYmVyIiwiZ2V0UXVhbnRMZWdlbmRzIiwibGFiZWxzIiwiaW5kZXgiLCJyZ2JUb0hleCIsImdldE9yZGluYWxMZWdlbmRzIiwiZGF0dW0iLCJpc1JnYkNvbG9yIiwiZGVmYXVsdEZvcm1hdCIsImdldFRpbWVMYWJlbEZvcm1hdCIsImZvcm1hdHRlciIsImdldFRpbWVXaWRnZXRIaW50Rm9ybWF0dGVyIiwidmFsIiwibW9tZW50IiwidXRjIiwiZm9ybWF0IiwiZ2V0UXVhbnRMYWJlbEZvcm1hdCIsImZpZWxkVHlwZSIsIkFMTF9GSUVMRF9UWVBFUyIsInRpbWVzdGFtcCIsImlzTnVtYmVyIiwiZ2V0TGVnZW5kT2ZTY2FsZSIsIl9yZWYiLCJieVpvb20iLCJTQ0FMRV9UWVBFUyIsIm9yZGluYWwiLCJmb3JtYXRMYWJlbCIsImdldExheWVyQ29sb3JTY2FsZSIsIl9yZWYyIiwibGF5ZXIiLCJnZXRDb2xvclNjYWxlIiwiaW5pdGlhbGl6ZUxheWVyQ29sb3JNYXAiLCJ2aXN1YWxDaGFubmVsIiwiY29uZmlnIiwidmlzQ29uZmlnIiwiZmllbGQiLCJjb2xvckJyZWFrcyIsInR5cGUiLCJjb2xvckJyZWFrc1RvQ29sb3JNYXAiLCJnZXRWaXN1YWxDaGFubmVsU2NhbGVCeVpvb20iLCJfcmVmMyIsIl9zY2FsZSIsIm1hcFN0YXRlIiwiX2xheWVyJG1ldGEiLCJtZXRhIiwiZ2V0Wm9vbSIsInpvb20iLCJjb2xvck1hcCIsImNvbG9yQnJlYWsiLCJjb2xvck1hcFRvQ29sb3JCcmVha3MiLCJfcmVmNCIsIl9yZWY1IiwidmFsdWUiLCJjb2xvciIsIkluZmluaXR5IiwiaXNOdW1lcmljQ29sb3JCcmVha3MiXSwic291cmNlcyI6WyIuLi9zcmMvZGF0YS1zY2FsZS11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2Jpc2VjdExlZnQsIHF1YW50aWxlU29ydGVkIGFzIGQzUXVhbnRpbGUsIGV4dGVudH0gZnJvbSAnZDMtYXJyYXknO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtBTExfRklFTERfVFlQRVMsIENvbG9yTWFwLCBDb2xvclJhbmdlLCBTQ0FMRV9GVU5DLCBTQ0FMRV9UWVBFU30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuLy8gaW1wb3J0IHtMYXllciwgVmlzdWFsQ2hhbm5lbCwgVmlzdWFsQ2hhbm5lbERvbWFpbn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtIZXhDb2xvciwgTWFwU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5pbXBvcnQge2lzUmdiQ29sb3IsIHJnYlRvSGV4fSBmcm9tICcuL2NvbG9yLXV0aWxzJztcbmltcG9ydCB7RGF0YUNvbnRhaW5lckludGVyZmFjZX0gZnJvbSAnLi9kYXRhLWNvbnRhaW5lci1pbnRlcmZhY2UnO1xuaW1wb3J0IHtmb3JtYXROdW1iZXIsIGlzTnVtYmVyLCByZXZlcnNlRm9ybWF0TnVtYmVyLCB1bmlxdWV9IGZyb20gJy4vZGF0YS11dGlscyc7XG5pbXBvcnQge2dldFRpbWVXaWRnZXRIaW50Rm9ybWF0dGVyfSBmcm9tICcuL2ZpbHRlci11dGlscyc7XG5pbXBvcnQge2lzUGxhaW5PYmplY3R9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgdHlwZSBDb2xvckJyZWFrID0ge1xuICBkYXRhOiBIZXhDb2xvcjtcbiAgbGFiZWw6IHN0cmluZztcbiAgcmFuZ2U6IG51bWJlcltdO1xuICBpbnB1dHM6IG51bWJlcltdO1xufTtcbmV4cG9ydCB0eXBlIENvbG9yQnJlYWtPcmRpbmFsID0ge1xuICBkYXRhOiBIZXhDb2xvcjtcbiAgbGFiZWw6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEQzU2NhbGVGdW5jdGlvbiA9IFJlY29yZDxzdHJpbmcsIGFueT4gJiAoKHg6IGFueSkgPT4gYW55KTtcblxuLy8gVE9ETyBpc29sYXRlIHR5cGVzIC0gZGVwZW5kcyBvbiBAa2VwbGVyLmdsL2xheWVyc1xudHlwZSBMYXllciA9IGFueTtcbnR5cGUgVmlzdWFsQ2hhbm5lbCA9IGFueTtcbnR5cGUgVmlzdWFsQ2hhbm5lbERvbWFpbiA9IGFueTtcblxuZXhwb3J0IHR5cGUgTGFiZWxGb3JtYXQgPSAobjogbnVtYmVyKSA9PiBzdHJpbmc7XG50eXBlIGRhdGFWYWx1ZUFjY2Vzc29yID0gPFQ+KHBhcmFtOiBUKSA9PiBUO1xudHlwZSBkYXRhQ29udGFpbmVyVmFsdWVBY2Nlc3NvciA9IChkOiB7aW5kZXg6IG51bWJlcn0sIGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PiBhbnk7XG50eXBlIHNvcnQgPSAoYTogYW55LCBiOiBhbnkpID0+IGFueTtcbi8qKlxuICogcmV0dXJuIHF1YW50aWxlIGRvbWFpbiBmb3IgYW4gYXJyYXkgb2YgZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UXVhbnRpbGVEb21haW4oXG4gIGRhdGE6IGFueVtdLFxuICB2YWx1ZUFjY2Vzc29yPzogZGF0YVZhbHVlQWNjZXNzb3IsXG4gIHNvcnRGdW5jPzogc29ydFxuKTogbnVtYmVyW10ge1xuICBjb25zdCB2YWx1ZXMgPSB0eXBlb2YgdmFsdWVBY2Nlc3NvciA9PT0gJ2Z1bmN0aW9uJyA/IGRhdGEubWFwKHZhbHVlQWNjZXNzb3IpIDogZGF0YTtcblxuICByZXR1cm4gdmFsdWVzLmZpbHRlcihub3ROdWxsb3JVbmRlZmluZWQpLnNvcnQoc29ydEZ1bmMpO1xufVxuXG4vKipcbiAqIHJldHVybiBvcmRpbmFsIGRvbWFpbiBmb3IgYSBkYXRhIGNvbnRhaW5lclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JkaW5hbERvbWFpbihcbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgdmFsdWVBY2Nlc3NvcjogZGF0YUNvbnRhaW5lclZhbHVlQWNjZXNzb3Jcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgdmFsdWVzID0gZGF0YUNvbnRhaW5lci5tYXBJbmRleCh2YWx1ZUFjY2Vzc29yKTtcblxuICByZXR1cm4gdW5pcXVlKHZhbHVlcykuZmlsdGVyKG5vdE51bGxvclVuZGVmaW5lZCkuc29ydCgpO1xufVxuXG4vKipcbiAqIHJldHVybiBsaW5lYXIgZG9tYWluIGZvciBhbiBhcnJheSBvZiBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5lYXJEb21haW4oXG4gIGRhdGE6IG51bWJlcltdLFxuICB2YWx1ZUFjY2Vzc29yPzogZGF0YVZhbHVlQWNjZXNzb3Jcbik6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCByYW5nZSA9IHR5cGVvZiB2YWx1ZUFjY2Vzc29yID09PSAnZnVuY3Rpb24nID8gZXh0ZW50KGRhdGEsIHZhbHVlQWNjZXNzb3IpIDogZXh0ZW50KGRhdGEpO1xuICByZXR1cm4gcmFuZ2UubWFwKChkOiB1bmRlZmluZWQgfCBudW1iZXIsIGk6IG51bWJlcikgPT4gKGQgPT09IHVuZGVmaW5lZCA/IGkgOiBkKSkgYXMgW1xuICAgIG51bWJlcixcbiAgICBudW1iZXJcbiAgXTtcbn1cblxuLyoqXG4gKiByZXR1cm4gbGluZWFyIGRvbWFpbiBmb3IgYW4gYXJyYXkgb2YgZGF0YS4gQSBsb2cgc2NhbGUgZG9tYWluIGNhbm5vdCBjb250YWluIDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExvZ0RvbWFpbihkYXRhOiBhbnlbXSwgdmFsdWVBY2Nlc3NvcjogZGF0YVZhbHVlQWNjZXNzb3IpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgW2QwLCBkMV0gPSBnZXRMaW5lYXJEb21haW4oZGF0YSwgdmFsdWVBY2Nlc3Nvcik7XG4gIHJldHVybiBbZDAgPT09IDAgPyAxZS01IDogZDAsIGQxXTtcbn1cblxuZXhwb3J0IHR5cGUgRG9tYWluU3RvcHMgPSB7XG4gIHN0b3BzOiBudW1iZXJbXTtcbiAgejogbnVtYmVyW107XG59O1xuXG4vKipcbiAqIHdoZXRoZXIgZmllbGQgZG9tYWluIGlzIHN0b3BzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RvbWFpblN0b3BzKGRvbWFpbjogdW5rbm93bik6IGRvbWFpbiBpcyBEb21haW5TdG9wcyB7XG4gIHJldHVybiBpc1BsYWluT2JqZWN0KGRvbWFpbikgJiYgQXJyYXkuaXNBcnJheShkb21haW4uc3RvcHMpICYmIEFycmF5LmlzQXJyYXkoZG9tYWluLnopO1xufVxuXG5leHBvcnQgdHlwZSBEb21haW5RdWFudGlsZXMgPSB7XG4gIHF1YW50aWxlczogbnVtYmVyW107XG4gIHo6IG51bWJlcltdO1xufTtcblxuLyoqXG4gKiB3aGV0aGVyIGZpZWxkIGRvbWFpbiBpcyBxdWFudGlsZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRG9tYWluUXVhbnRpbGUoZG9tYWluOiBhbnkpOiBkb21haW4gaXMgRG9tYWluUXVhbnRpbGVzIHtcbiAgcmV0dXJuIGlzUGxhaW5PYmplY3QoZG9tYWluKSAmJiBBcnJheS5pc0FycmF5KGRvbWFpbi5xdWFudGlsZXMpICYmIEFycmF5LmlzQXJyYXkoZG9tYWluLnopO1xufVxuXG4vKipcbiAqIGdldCB0aGUgZG9tYWluIGF0IHpvb21cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRocmVzaG9sZHNGcm9tUXVhbnRpbGVzKFxuICBxdWFudGlsZXM6IG51bWJlcltdLFxuICBidWNrZXRzOiBudW1iZXJcbik6IChudW1iZXIgfCB1bmRlZmluZWQpW10ge1xuICBjb25zdCB0aHJlc2hvbGRzID0gW107XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGJ1Y2tldHMpIHx8IGJ1Y2tldHMgPCAxKSB7XG4gICAgcmV0dXJuIFtxdWFudGlsZXNbMF0sIHF1YW50aWxlc1txdWFudGlsZXMubGVuZ3RoIC0gMV1dO1xuICB9XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYnVja2V0czsgaSsrKSB7XG4gICAgLy8gcG9zaXRpb24gaW4gc29ydGVkIGFycmF5XG4gICAgY29uc3QgcG9zaXRpb24gPSBpIC8gYnVja2V0cztcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhyZXNob2xkcy5wdXNoKGQzUXVhbnRpbGUocXVhbnRpbGVzLCBwb3NpdGlvbikpO1xuICB9XG5cbiAgcmV0dXJuIHRocmVzaG9sZHM7XG59XG5cbi8qKlxuICogZ2V0IHRoZSBkb21haW4gYXQgem9vbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9tYWluU3RlcHNieVpvb20oZG9tYWluOiBhbnlbXSwgc3RlcHM6IG51bWJlcltdLCB6OiBudW1iZXIpOiBhbnkge1xuICBjb25zdCBpID0gYmlzZWN0TGVmdChzdGVwcywgeik7XG5cbiAgaWYgKHN0ZXBzW2ldID09PSB6KSB7XG4gICAgLy8gSWYgeiBpcyBhbiBpbnRlZ2VyIHZhbHVlIGV4YWN0bHkgbWF0Y2hpbmcgYSBzdGVwLCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgZG9tYWluXG4gICAgcmV0dXJuIGRvbWFpbltpXTtcbiAgfVxuICAvLyBPdGhlcndpc2UsIHJldHVybiB0aGUgbmV4dCBjb2Fyc2VzdCBkb21haW5cbiAgcmV0dXJuIGRvbWFpbltNYXRoLm1heChpIC0gMSwgMCldO1xufVxuXG4vKipcbiAqIEdldCBkMyBzY2FsZSBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGVGdW5jdGlvbihcbiAgc2NhbGU6IHN0cmluZyxcbiAgcmFuZ2U6IGFueVtdIHwgSXRlcmFibGVJdGVyYXRvcjxhbnk+LFxuICBkb21haW46IChudW1iZXIgfCB1bmRlZmluZWQpW10gfCBzdHJpbmdbXSB8IEl0ZXJhYmxlSXRlcmF0b3I8YW55PixcbiAgZml4ZWQ/OiBib29sZWFuXG4pOiBEM1NjYWxlRnVuY3Rpb24ge1xuICBjb25zdCBzY2FsZUZ1bmN0aW9uID0gU0NBTEVfRlVOQ1tmaXhlZCA/ICdsaW5lYXInIDogc2NhbGVdKClcbiAgICAuZG9tYWluKGRvbWFpbilcbiAgICAucmFuZ2UoZml4ZWQgPyBkb21haW4gOiByYW5nZSk7XG4gIHNjYWxlRnVuY3Rpb24uc2NhbGVUeXBlID0gZml4ZWQgPyAnbGluZWFyJyA6IHNjYWxlO1xuICByZXR1cm4gc2NhbGVGdW5jdGlvbjtcbn1cblxuLyoqXG4gKiBHZXQgdGhyZXNob2xkIHNjYWxlIGNvbG9yIGxhYmVsc1xuICovXG5mdW5jdGlvbiBnZXRUaHJlc2hvbGRMYWJlbHMoXG4gIHNjYWxlOiBEM1NjYWxlRnVuY3Rpb24sXG4gIGxhYmVsRm9ybWF0OiBMYWJlbEZvcm1hdFxuKTogT21pdDxDb2xvckJyZWFrLCAnZGF0YSc+W10ge1xuICBjb25zdCBnZW5MZW5ndGggPSBzY2FsZS5yYW5nZSgpLmxlbmd0aDtcbiAgcmV0dXJuIHNjYWxlLnJhbmdlKCkubWFwKChkLCBpKSA9PiB7XG4gICAgY29uc3QgaW52ZXJ0ID0gc2NhbGUuaW52ZXJ0RXh0ZW50KGQpO1xuICAgIGNvbnN0IGlucHV0cyA9IFtcbiAgICAgIGkgPT09IDAgPyBudWxsIDogcmV2ZXJzZUZvcm1hdE51bWJlcihsYWJlbEZvcm1hdChpbnZlcnRbMF0pKSxcbiAgICAgIGkgPT09IGdlbkxlbmd0aCAtIDEgPyBudWxsIDogcmV2ZXJzZUZvcm1hdE51bWJlcihsYWJlbEZvcm1hdChpbnZlcnRbMV0pKVxuICAgIF07XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIHJhdyB2YWx1ZVxuICAgICAgcmFuZ2U6IGludmVydCxcbiAgICAgIC8vIGZvcm1hdHRlZCB2YWx1ZVxuICAgICAgaW5wdXRzLFxuICAgICAgbGFiZWw6XG4gICAgICAgIGkgPT09IDBcbiAgICAgICAgICA/IGBMZXNzIHRoYW4gJHtsYWJlbEZvcm1hdChpbnZlcnRbMV0pfWBcbiAgICAgICAgICA6IGkgPT09IGdlbkxlbmd0aCAtIDFcbiAgICAgICAgICA/IGAke2xhYmVsRm9ybWF0KGludmVydFswXSl9IG9yIG1vcmVgXG4gICAgICAgICAgOiBgJHtsYWJlbEZvcm1hdChpbnZlcnRbMF0pfSB0byAke2xhYmVsRm9ybWF0KGludmVydFsxXSl9YFxuICAgIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBsaW5lYXIgLyBxdWFudCBzY2FsZSBjb2xvciBsYWJlbHNcbiAqL1xuZnVuY3Rpb24gZ2V0U2NhbGVMYWJlbHMoXG4gIHNjYWxlOiBEM1NjYWxlRnVuY3Rpb24sXG4gIGxhYmVsRm9ybWF0OiBMYWJlbEZvcm1hdFxuKTogT21pdDxDb2xvckJyZWFrLCAnZGF0YSc+W10ge1xuICByZXR1cm4gc2NhbGUucmFuZ2UoKS5tYXAoKGQsIGkpID0+IHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW52ZXJ0ID0gc2NhbGUuaW52ZXJ0RXh0ZW50KGQpO1xuICAgIGNvbnN0IGlucHV0cyA9IFtcbiAgICAgIHJldmVyc2VGb3JtYXROdW1iZXIobGFiZWxGb3JtYXQoaW52ZXJ0WzBdKSksXG4gICAgICByZXZlcnNlRm9ybWF0TnVtYmVyKGxhYmVsRm9ybWF0KGludmVydFsxXSkpXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYCR7bGFiZWxGb3JtYXQoaW52ZXJ0WzBdKX0gdG8gJHtsYWJlbEZvcm1hdChpbnZlcnRbMV0pfWAsXG4gICAgICAvLyByYXcgdmFsdWVcbiAgICAgIHJhbmdlOiBpbnZlcnQsXG4gICAgICAvLyBmb3JtYXR0ZWQgdmFsdWVcbiAgICAgIGlucHV0c1xuICAgIH07XG4gIH0pO1xufVxuXG5jb25zdCBjdXN0b21TY2FsZUxhYmVsRm9ybWF0ID0gbiA9PiAobiA/IGZvcm1hdE51bWJlcihuLCAncmVhbCcpIDogJ25vIHZhbHVlJyk7XG4vKipcbiAqIEdldCBsaW5lYXIgLyBxdWFudCBzY2FsZSBjb2xvciBicmVha3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFF1YW50TGVnZW5kcyhzY2FsZTogRDNTY2FsZUZ1bmN0aW9uLCBsYWJlbEZvcm1hdDogTGFiZWxGb3JtYXQpOiBDb2xvckJyZWFrW10ge1xuICBpZiAodHlwZW9mIHNjYWxlLmludmVydEV4dGVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBsYWJlbHMgPVxuICAgIHNjYWxlLnNjYWxlVHlwZSA9PT0gJ3RocmVzaG9sZCcgfHwgc2NhbGUuc2NhbGVUeXBlID09PSAnY3VzdG9tJ1xuICAgICAgPyBnZXRUaHJlc2hvbGRMYWJlbHMoXG4gICAgICAgICAgc2NhbGUsXG4gICAgICAgICAgc2NhbGUuc2NhbGVUeXBlID09PSAnY3VzdG9tJ1xuICAgICAgICAgICAgPyBjdXN0b21TY2FsZUxhYmVsRm9ybWF0XG4gICAgICAgICAgICA6IG4gPT4gKG4gPyBmb3JtYXROdW1iZXIobikgOiAnbm8gdmFsdWUnKVxuICAgICAgICApXG4gICAgICA6IGdldFNjYWxlTGFiZWxzKHNjYWxlLCBsYWJlbEZvcm1hdCk7XG5cbiAgY29uc3QgZGF0YSA9IHNjYWxlLnJhbmdlKCk7XG5cbiAgcmV0dXJuIGxhYmVscy5tYXAoKGxhYmVsLCBpbmRleCkgPT4gKHtcbiAgICBkYXRhOiBBcnJheS5pc0FycmF5KGRhdGFbaW5kZXhdKSA/IHJnYlRvSGV4KGRhdGFbaW5kZXhdKSA6IGRhdGFbaW5kZXhdLFxuICAgIC4uLmxhYmVsXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBHZXQgb3JkaW5hbCBjb2xvciBzY2FsZSBsZWdlbmRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcmRpbmFsTGVnZW5kcyhzY2FsZTogRDNTY2FsZUZ1bmN0aW9uKTogQ29sb3JCcmVha09yZGluYWxbXSB7XG4gIGNvbnN0IGRvbWFpbiA9IHNjYWxlLmRvbWFpbigpO1xuICBjb25zdCBsYWJlbHMgPSBzY2FsZS5kb21haW4oKTtcbiAgY29uc3QgZGF0YSA9IGRvbWFpbi5tYXAoc2NhbGUpO1xuXG4gIHJldHVybiBkYXRhLm1hcCgoZGF0dW0sIGluZGV4KSA9PiAoe1xuICAgIGRhdGE6IGlzUmdiQ29sb3IoZGF0dW0pID8gcmdiVG9IZXgoZGF0dW0pIDogZGF0dW0sXG4gICAgbGFiZWw6IGxhYmVsc1tpbmRleF1cbiAgfSkpO1xufVxuXG5jb25zdCBkZWZhdWx0Rm9ybWF0ID0gZCA9PiBkO1xuXG5jb25zdCBnZXRUaW1lTGFiZWxGb3JtYXQgPSBkb21haW4gPT4ge1xuICBjb25zdCBmb3JtYXR0ZXIgPSBnZXRUaW1lV2lkZ2V0SGludEZvcm1hdHRlcihkb21haW4pO1xuICByZXR1cm4gdmFsID0+IG1vbWVudC51dGModmFsKS5mb3JtYXQoZm9ybWF0dGVyKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRRdWFudExhYmVsRm9ybWF0KGRvbWFpbiwgZmllbGRUeXBlKSB7XG4gIC8vIHF1YW50IHNjYWxlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIHRvIGxpbmVhciBGaWVsZHM6IHJlYWwsIHRpbWVzdGFtcCwgaW50ZWdlclxuICByZXR1cm4gZmllbGRUeXBlID09PSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wXG4gICAgPyBnZXRUaW1lTGFiZWxGb3JtYXQoZG9tYWluKVxuICAgIDogIWZpZWxkVHlwZVxuICAgID8gZGVmYXVsdEZvcm1hdFxuICAgIDogbiA9PiAoaXNOdW1iZXIobikgPyBmb3JtYXROdW1iZXIobiwgZmllbGRUeXBlKSA6ICdubyB2YWx1ZScpO1xufVxuXG4vKipcbiAqIEdldCBsZWdlbmRzIGZvciBzY2FsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGVnZW5kT2ZTY2FsZSh7XG4gIHNjYWxlLFxuICBzY2FsZVR5cGUsXG4gIGxhYmVsRm9ybWF0LFxuICBmaWVsZFR5cGVcbn06IHtcbiAgc2NhbGU/OiBEM1NjYWxlRnVuY3Rpb24gfCBudWxsO1xuICBzY2FsZVR5cGU6IHN0cmluZztcbiAgbGFiZWxGb3JtYXQ/OiBMYWJlbEZvcm1hdDtcbiAgZmllbGRUeXBlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xufSk6IENvbG9yQnJlYWtbXSB8IENvbG9yQnJlYWtPcmRpbmFsW10ge1xuICBpZiAoIXNjYWxlIHx8IHNjYWxlLmJ5Wm9vbSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoc2NhbGVUeXBlID09PSBTQ0FMRV9UWVBFUy5vcmRpbmFsKSB7XG4gICAgcmV0dXJuIGdldE9yZGluYWxMZWdlbmRzKHNjYWxlKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdExhYmVsID0gbGFiZWxGb3JtYXQgfHwgZ2V0UXVhbnRMYWJlbEZvcm1hdChzY2FsZS5kb21haW4oKSwgZmllbGRUeXBlKTtcblxuICByZXR1cm4gZ2V0UXVhbnRMZWdlbmRzKHNjYWxlLCBmb3JtYXRMYWJlbCk7XG59XG5cbi8qKlxuICogR2V0IGNvbG9yIHNjYWxlIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXllckNvbG9yU2NhbGUoe1xuICByYW5nZSxcbiAgZG9tYWluLFxuICBzY2FsZVR5cGUsXG4gIGxheWVyXG59OiB7XG4gIHJhbmdlOiBDb2xvclJhbmdlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgZG9tYWluOiBWaXN1YWxDaGFubmVsRG9tYWluO1xuICBzY2FsZVR5cGU6IHN0cmluZztcbiAgbGF5ZXI6IExheWVyO1xuICBpc0ZpeGVkPzogYm9vbGVhbjtcbn0pOiBEM1NjYWxlRnVuY3Rpb24gfCBudWxsIHtcbiAgaWYgKHJhbmdlICYmIGRvbWFpbiAmJiBzY2FsZVR5cGUpIHtcbiAgICByZXR1cm4gbGF5ZXIuZ2V0Q29sb3JTY2FsZShzY2FsZVR5cGUsIGRvbWFpbiwgcmFuZ2UpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIENvbnZlcnQgY29sb3JSYW5nZS5jb2xvck1hcCBpbnRvIGNvbG9yIGJyZWFrcyBVSSBpbnB1dFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZUxheWVyQ29sb3JNYXAobGF5ZXI6IExheWVyLCB2aXN1YWxDaGFubmVsOiBWaXN1YWxDaGFubmVsKTogQ29sb3JNYXAge1xuICBjb25zdCBkb21haW4gPSBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbC5kb21haW5dO1xuICBjb25zdCByYW5nZSA9IGxheWVyLmNvbmZpZy52aXNDb25maWdbdmlzdWFsQ2hhbm5lbC5yYW5nZV07XG4gIGNvbnN0IHNjYWxlVHlwZSA9IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsLnNjYWxlXTtcbiAgY29uc3QgZmllbGQgPSBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF07XG5cbiAgY29uc3Qgc2NhbGUgPSBnZXRMYXllckNvbG9yU2NhbGUoe1xuICAgIHJhbmdlLFxuICAgIGRvbWFpbixcbiAgICBzY2FsZVR5cGUsXG4gICAgbGF5ZXJcbiAgfSk7XG5cbiAgY29uc3QgY29sb3JCcmVha3MgPSBnZXRMZWdlbmRPZlNjYWxlKHtcbiAgICBzY2FsZTogc2NhbGU/LmJ5Wm9vbSA/IHNjYWxlKDApIDogc2NhbGUsXG4gICAgc2NhbGVUeXBlLFxuICAgIGZpZWxkVHlwZTogZmllbGQudHlwZVxuICB9KTtcbiAgcmV0dXJuIGNvbG9yQnJlYWtzVG9Db2xvck1hcChjb2xvckJyZWFrcyk7XG59XG5cbi8qKlxuICogR2V0IHZpc3VhbCBjaGFuZWwgc2NhbGUgZnVuY3Rpb24gaWYgaXQncyBiYXNlZCBvbiB6b29tXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaXN1YWxDaGFubmVsU2NhbGVCeVpvb20oe1xuICBzY2FsZSxcbiAgbGF5ZXIsXG4gIG1hcFN0YXRlXG59OiB7XG4gIHNjYWxlOiBEM1NjYWxlRnVuY3Rpb24gfCBudWxsO1xuICBsYXllcjogTGF5ZXI7XG4gIG1hcFN0YXRlPzogTWFwU3RhdGU7XG59KTogRDNTY2FsZUZ1bmN0aW9uIHwgbnVsbCB7XG4gIGlmIChzY2FsZT8uYnlab29tKSB7XG4gICAgY29uc3QgeiA9IGxheWVyLm1ldGE/LmdldFpvb20gPyBsYXllci5tZXRhLmdldFpvb20obWFwU3RhdGUpIDogbWFwU3RhdGU/Lnpvb207XG4gICAgc2NhbGUgPSBOdW1iZXIuaXNGaW5pdGUoeikgPyBzY2FsZSh6KSA6IG51bGw7XG4gIH1cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG4vKipcbiAqIENvbnZlcnQgY29sb3IgYnJlYWtzIFVJIGlucHV0IGludG8gY29sb3JSYW5nZS5jb2xvck1hcFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sb3JCcmVha3NUb0NvbG9yTWFwKGNvbG9yQnJlYWtzOiBDb2xvckJyZWFrW10gfCBDb2xvckJyZWFrT3JkaW5hbFtdKTogQ29sb3JNYXAge1xuICBjb25zdCBjb2xvck1hcCA9IGNvbG9yQnJlYWtzLm1hcCgoY29sb3JCcmVhaywgaSkgPT4ge1xuICAgIC8vIFt2YWx1ZSwgaGV4XVxuICAgIHJldHVybiBbXG4gICAgICBjb2xvckJyZWFrLmlucHV0c1xuICAgICAgICA/IGkgPT09IGNvbG9yQnJlYWtzLmxlbmd0aCAtIDFcbiAgICAgICAgICA/IG51bGwgLy8gbGFzdFxuICAgICAgICAgIDogY29sb3JCcmVhay5pbnB1dHNbMV1cbiAgICAgICAgOiBjb2xvckJyZWFrLmxhYmVsLFxuICAgICAgY29sb3JCcmVhay5kYXRhXG4gICAgXTtcbiAgfSk7XG5cbiAgLy8gQHRzLWlnbm9yZSB0dXBsZVxuICByZXR1cm4gY29sb3JNYXA7XG59XG5cbi8qKlxuICogQ29udmVydCBjb2xvclJhbmdlLmNvbG9yTWFwIGludG8gY29sb3IgYnJlYWtzIFVJIGlucHV0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xvck1hcFRvQ29sb3JCcmVha3MoY29sb3JNYXA/OiBDb2xvck1hcCk6IENvbG9yQnJlYWtbXSB8IG51bGwge1xuICBpZiAoIWNvbG9yTWFwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgY29sb3JCcmVha3MgPSBjb2xvck1hcC5tYXAoKFt2YWx1ZSwgY29sb3JdLCBpKSA9PiB7XG4gICAgY29uc3QgcmFuZ2UgPVxuICAgICAgaSA9PT0gMFxuICAgICAgICA/IC8vIGZpcnN0XG4gICAgICAgICAgWy1JbmZpbml0eSwgdmFsdWVdXG4gICAgICAgIDogLy8gbGFzdFxuICAgICAgICBpID09PSBjb2xvck1hcC5sZW5ndGggLSAxXG4gICAgICAgID8gW2NvbG9yTWFwW2kgLSAxXVswXSwgSW5maW5pdHldXG4gICAgICAgIDogLy8gZWxzZVxuICAgICAgICAgIFtjb2xvck1hcFtpIC0gMV1bMF0sIHZhbHVlXTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogY29sb3IsXG4gICAgICByYW5nZSxcbiAgICAgIGlucHV0czogcmFuZ2UsXG4gICAgICBsYWJlbDpcbiAgICAgICAgLy8gZmlyc3RcbiAgICAgICAgaSA9PT0gMFxuICAgICAgICAgID8gYExlc3MgdGhhbiAke3ZhbHVlfWBcbiAgICAgICAgICA6IC8vIGxhc3RcbiAgICAgICAgICBpID09PSBjb2xvck1hcC5sZW5ndGggLSAxXG4gICAgICAgICAgPyBgJHtjb2xvck1hcFtpIC0gMV1bMF19IG9yIG1vcmVgXG4gICAgICAgICAgOiBgJHtjb2xvck1hcFtpIC0gMV1bMF19IHRvICR7dmFsdWV9YFxuICAgIH07XG4gIH0pO1xuXG4gIC8vIEB0cy1pZ25vcmUgaW1wbGVtZW50IGNvbnZlcnNpb24gZm9yIG9yZGluYWxcbiAgcmV0dXJuIGNvbG9yQnJlYWtzO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgY29sb3IgYnJlYWtzIGlzIGZvciBudW1lcmljIGZpZWxkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNDb2xvckJyZWFrcyhjb2xvckJyZWFrczogdW5rbm93bik6IGNvbG9yQnJlYWtzIGlzIENvbG9yQnJlYWtbXSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGNvbG9yQnJlYWtzKSAmJiBjb2xvckJyZWFrcy5sZW5ndGggJiYgY29sb3JCcmVha3NbMF0uaW5wdXRzO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBRyxZQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFKLE9BQUE7QUFJQSxJQUFBSyxXQUFBLEdBQUFMLE9BQUE7QUFFQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxZQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxNQUFBLEdBQUFSLE9BQUE7QUFBc0MsU0FBQVMsUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9BQUEsV0FBQWQsQ0FBQSxRQUFBZSxnQkFBQSxhQUFBaEIsQ0FBQSxFQUFBQyxD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
@@ -0,0 +1,98 @@
1
+ import { TooltipFormat } from '@kepler.gl/constants';
2
+ import { Field, Millisecond } from '@kepler.gl/types';
3
+ export declare type FieldFormatter = (value: any) => string;
4
+ /**
5
+ * simple getting unique values of an array
6
+ *
7
+ * @param values
8
+ * @returns unique values
9
+ */
10
+ export declare function unique<T>(values: T[]): T[];
11
+ export declare function getLatLngBounds(points: number[][], idx: number, limit: [number, number]): [number, number] | null;
12
+ export declare function clamp([min, max]: [number, number], val?: number): number;
13
+ export declare function getSampleData(data: any, sampleSize?: number, getValue?: (d: any) => any): any[];
14
+ /**
15
+ * Convert different time format to unix milliseconds
16
+ */
17
+ export declare function timeToUnixMilli(value: string | number | Date, format: string): Millisecond | null;
18
+ /**
19
+ * Whether d is a number, this filtered out NaN as well
20
+ */
21
+ export declare function isNumber(d: unknown): d is number;
22
+ /**
23
+ * whether object has property
24
+ * @param {string} prop
25
+ * @returns {boolean} - yes or no
26
+ */
27
+ export declare function hasOwnProperty<X extends object, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown>;
28
+ export declare function numberSort(a: number, b: number): number;
29
+ export declare function getSortingFunction(fieldType: string): typeof numberSort | undefined;
30
+ /**
31
+ * round number with exact number of decimals
32
+ * return as a string
33
+ */
34
+ export declare function preciseRound(num: number, decimals: number): string;
35
+ /**
36
+ * round a giving number at most 4 decimal places
37
+ * e.g. 10 -> 10, 1.12345 -> 1.2345, 2.0 -> 2
38
+ */
39
+ export declare function roundToFour(num: number): number;
40
+ /**
41
+ * get number of decimals to round to for slider from step
42
+ * @param step
43
+ * @returns- number of decimal
44
+ */
45
+ export declare function getRoundingDecimalFromStep(step: number): number;
46
+ /**
47
+ * If marks is provided, snap to marks, if not normalize to step
48
+ * @param val
49
+ * @param minValue
50
+ * @param step
51
+ * @param marks
52
+ */
53
+ export declare function normalizeSliderValue(val: number, minValue: number, step: number, marks?: number[] | null): number;
54
+ /**
55
+ * round the value to step for the slider
56
+ * @param minValue
57
+ * @param step
58
+ * @param val
59
+ * @returns - rounded number
60
+ */
61
+ export declare function roundValToStep(minValue: number, step: number, val: number): number;
62
+ /**
63
+ * Get the value format based on field and format options
64
+ * Used in render tooltip value
65
+ */
66
+ export declare const defaultFormatter: FieldFormatter;
67
+ export declare const floatFormatter: (v: any) => string;
68
+ export declare const FIELD_DISPLAY_FORMAT: {
69
+ [key: string]: FieldFormatter;
70
+ };
71
+ /**
72
+ * Parse field value and type and return a string representation
73
+ */
74
+ export declare const parseFieldValue: (value: any, type: string) => string;
75
+ /**
76
+ * Get the value format based on field and format options
77
+ * Used in render tooltip value
78
+ * @param format
79
+ * @param field
80
+ */
81
+ export declare function getFormatter(format: string | Record<string, string> | null, field?: Field): FieldFormatter;
82
+ export declare function getColumnFormatter(field: Pick<Field, 'type'> & Partial<Pick<Field, 'format' | 'displayFormat'>>): FieldFormatter;
83
+ export declare function applyValueMap(format: any): (v: any) => any;
84
+ export declare function applyDefaultFormat(tooltipFormat: TooltipFormat): (v: any) => string;
85
+ export declare function getBooleanFormatter(format: string): FieldFormatter;
86
+ export declare function applyCustomFormat(format: any, field: {
87
+ type?: string;
88
+ }): FieldFormatter;
89
+ export declare function formatNumber(n: number, type?: string): string;
90
+ /**
91
+ * Convert a formatted number from string back to number
92
+ */
93
+ export declare function reverseFormatNumber(str: string): number;
94
+ /**
95
+ * Format epoch milliseconds with a format string
96
+ * @type timezone
97
+ */
98
+ export declare function datetimeFormatter(timezone?: string | null): (format?: string) => (ts: number) => string;