@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.
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,13 @@
1
+ import { ValueOf } from '@kepler.gl/types';
2
+ import { AggregationTypes } from '@kepler.gl/constants';
3
+ export declare const getFrequency: (data: any[], accessor?: (any: any) => any) => {
4
+ [key: string]: number;
5
+ [key: number]: number;
6
+ };
7
+ export declare const getMode: (data: any, accessor: any) => string;
8
+ export declare const countUnique: (data: any, accessor?: (d: any) => any) => number;
9
+ export declare const percentMean: (data: any, accessor: any) => number;
10
+ export declare function aggregate(data: any[], technique: ValueOf<AggregationTypes>, accessor?: (any: any) => any): any;
11
+ export declare const AGGREGATION_NAME: {
12
+ [key: string]: string;
13
+ };
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.AGGREGATION_NAME = void 0;
8
+ exports.aggregate = aggregate;
9
+ exports.percentMean = exports.getMode = exports.getFrequency = exports.countUnique = void 0;
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var _d3Array = require("d3-array");
12
+ var _constants = require("@kepler.gl/constants");
13
+ // SPDX-License-Identifier: MIT
14
+ // Copyright contributors to the kepler.gl project
15
+
16
+ var identity = function identity(d) {
17
+ return d;
18
+ };
19
+ var getFrequency = exports.getFrequency = function getFrequency(data) {
20
+ var accessor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : identity;
21
+ var occur = {};
22
+ for (var i = 0; i < data.length; i++) {
23
+ var val = accessor(data[i]);
24
+ occur[val] = (occur[val] || 0) + 1;
25
+ }
26
+ return occur;
27
+ };
28
+ var getMode = exports.getMode = function getMode(data, accessor) {
29
+ var occur = getFrequency(data, accessor);
30
+ return Object.keys(occur).reduce(function (prev, key) {
31
+ return occur[prev] >= occur[key] ? prev : key;
32
+ }, Object.keys(occur)[0]);
33
+ };
34
+ var countUnique = exports.countUnique = function countUnique(data) {
35
+ var accessor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : identity;
36
+ return Object.keys(data.reduce(function (uniques, d) {
37
+ var val = accessor(d);
38
+ uniques[val] = uniques[val] || 0;
39
+ uniques[val] += 1;
40
+ return uniques;
41
+ }, {})).length;
42
+ };
43
+ var percentMean = exports.percentMean = function percentMean(data, accessor) {
44
+ var getNumerator = accessor.getNumerator,
45
+ getDenominator = accessor.getDenominator;
46
+ var denominator = aggregate(data, _constants.AGGREGATION_TYPES.sum, getDenominator);
47
+ if (denominator <= 0) {
48
+ return 0;
49
+ }
50
+ var result = aggregate(data, _constants.AGGREGATION_TYPES.sum, getNumerator) / denominator;
51
+ return result;
52
+ };
53
+ function aggregate(data, technique) {
54
+ var accessor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : identity;
55
+ switch (technique) {
56
+ case _constants.AGGREGATION_TYPES.average:
57
+ return (0, _d3Array.mean)(data, accessor);
58
+ case 'mean_of_percent':
59
+ return percentMean(data, accessor);
60
+ case _constants.AGGREGATION_TYPES.countUnique:
61
+ return countUnique(data, accessor);
62
+ case _constants.AGGREGATION_TYPES.mode:
63
+ return getMode(data, accessor);
64
+ case _constants.AGGREGATION_TYPES.maximum:
65
+ return (0, _d3Array.max)(data, accessor);
66
+ case _constants.AGGREGATION_TYPES.minimum:
67
+ return (0, _d3Array.min)(data, accessor);
68
+ case _constants.AGGREGATION_TYPES.median:
69
+ return (0, _d3Array.median)(data, accessor);
70
+ case _constants.AGGREGATION_TYPES.stdev:
71
+ return (0, _d3Array.deviation)(data, accessor);
72
+ case _constants.AGGREGATION_TYPES.sum:
73
+ return (0, _d3Array.sum)(data, accessor);
74
+ case _constants.AGGREGATION_TYPES.variance:
75
+ return (0, _d3Array.variance)(data, accessor);
76
+ default:
77
+ return data.length;
78
+ }
79
+ }
80
+ var AGGREGATION_NAME = exports.AGGREGATION_NAME = (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"])({}, _constants.AGGREGATION_TYPES.average, 'Average'), _constants.AGGREGATION_TYPES.countUnique, 'Number of Unique'), _constants.AGGREGATION_TYPES.mode, 'Most Often'), _constants.AGGREGATION_TYPES.maximum, 'Max'), _constants.AGGREGATION_TYPES.minimum, 'Min'), _constants.AGGREGATION_TYPES.median, 'Median'), _constants.AGGREGATION_TYPES.stdev, 'Std Deviation'), _constants.AGGREGATION_TYPES.sum, 'Total'), _constants.AGGREGATION_TYPES.variance, 'Variance');
81
+
82
+ // ratio: both denominator & numerator precent
83
+ // average, min, max, median,
84
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZDNBcnJheSIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiaWRlbnRpdHkiLCJkIiwiZ2V0RnJlcXVlbmN5IiwiZXhwb3J0cyIsImRhdGEiLCJhY2Nlc3NvciIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIm9jY3VyIiwiaSIsInZhbCIsImdldE1vZGUiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicHJldiIsImtleSIsImNvdW50VW5pcXVlIiwidW5pcXVlcyIsInBlcmNlbnRNZWFuIiwiZ2V0TnVtZXJhdG9yIiwiZ2V0RGVub21pbmF0b3IiLCJkZW5vbWluYXRvciIsImFnZ3JlZ2F0ZSIsIkFHR1JFR0FUSU9OX1RZUEVTIiwic3VtIiwicmVzdWx0IiwidGVjaG5pcXVlIiwiYXZlcmFnZSIsIm1lYW4iLCJtb2RlIiwibWF4aW11bSIsIm1heCIsIm1pbmltdW0iLCJtaW4iLCJtZWRpYW4iLCJzdGRldiIsImRldmlhdGlvbiIsInZhcmlhbmNlIiwiQUdHUkVHQVRJT05fTkFNRSIsIl9kZWZpbmVQcm9wZXJ0eTIiXSwic291cmNlcyI6WyIuLi9zcmMvYWdncmVnYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtkZXZpYXRpb24sIG1pbiwgbWF4LCBtZWFuLCBtZWRpYW4sIHN1bSwgdmFyaWFuY2V9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCB7VmFsdWVPZn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0FHR1JFR0FUSU9OX1RZUEVTLCBBZ2dyZWdhdGlvblR5cGVzfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5jb25zdCBpZGVudGl0eSA9IGQgPT4gZDtcblxuZXhwb3J0IGNvbnN0IGdldEZyZXF1ZW5jeSA9IChcbiAgZGF0YTogYW55W10sXG4gIGFjY2Vzc29yOiAoYW55OiBhbnkpID0+IGFueSA9IGlkZW50aXR5XG4pOiB7W2tleTogc3RyaW5nIHwgbnVtYmVyXTogbnVtYmVyfSA9PiB7XG4gIGNvbnN0IG9jY3VyID0ge307XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHZhbCA9IGFjY2Vzc29yKGRhdGFbaV0pO1xuICAgIG9jY3VyW3ZhbF0gPSAob2NjdXJbdmFsXSB8fCAwKSArIDE7XG4gIH1cbiAgcmV0dXJuIG9jY3VyO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1vZGUgPSAoZGF0YSwgYWNjZXNzb3IpID0+IHtcbiAgY29uc3Qgb2NjdXIgPSBnZXRGcmVxdWVuY3koZGF0YSwgYWNjZXNzb3IpO1xuICByZXR1cm4gT2JqZWN0LmtleXMob2NjdXIpLnJlZHVjZShcbiAgICAocHJldiwga2V5KSA9PiAob2NjdXJbcHJldl0gPj0gb2NjdXJba2V5XSA/IHByZXYgOiBrZXkpLFxuICAgIE9iamVjdC5rZXlzKG9jY3VyKVswXVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvdW50VW5pcXVlID0gKGRhdGEsIGFjY2Vzc29yID0gaWRlbnRpdHkpID0+IHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKFxuICAgIGRhdGEucmVkdWNlKCh1bmlxdWVzLCBkKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBhY2Nlc3NvcihkKTtcbiAgICAgIHVuaXF1ZXNbdmFsXSA9IHVuaXF1ZXNbdmFsXSB8fCAwO1xuICAgICAgdW5pcXVlc1t2YWxdICs9IDE7XG4gICAgICByZXR1cm4gdW5pcXVlcztcbiAgICB9LCB7fSlcbiAgKS5sZW5ndGg7XG59O1xuXG5leHBvcnQgY29uc3QgcGVyY2VudE1lYW4gPSAoZGF0YSwgYWNjZXNzb3IpID0+IHtcbiAgY29uc3Qge2dldE51bWVyYXRvciwgZ2V0RGVub21pbmF0b3J9ID0gYWNjZXNzb3I7XG4gIGNvbnN0IGRlbm9taW5hdG9yID0gYWdncmVnYXRlKGRhdGEsIEFHR1JFR0FUSU9OX1RZUEVTLnN1bSwgZ2V0RGVub21pbmF0b3IpO1xuICBpZiAoZGVub21pbmF0b3IgPD0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IGFnZ3JlZ2F0ZShkYXRhLCBBR0dSRUdBVElPTl9UWVBFUy5zdW0sIGdldE51bWVyYXRvcikgLyBkZW5vbWluYXRvcjtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhZ2dyZWdhdGUoXG4gIGRhdGE6IGFueVtdLFxuICB0ZWNobmlxdWU6IFZhbHVlT2Y8QWdncmVnYXRpb25UeXBlcz4sXG4gIGFjY2Vzc29yOiAoYW55OiBhbnkpID0+IGFueSA9IGlkZW50aXR5XG4pOiBhbnkge1xuICBzd2l0Y2ggKHRlY2huaXF1ZSkge1xuICAgIGNhc2UgQUdHUkVHQVRJT05fVFlQRVMuYXZlcmFnZTpcbiAgICAgIHJldHVybiBtZWFuKGRhdGEsIGFjY2Vzc29yKTtcbiAgICBjYXNlICdtZWFuX29mX3BlcmNlbnQnOlxuICAgICAgcmV0dXJuIHBlcmNlbnRNZWFuKGRhdGEsIGFjY2Vzc29yKTtcbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLmNvdW50VW5pcXVlOlxuICAgICAgcmV0dXJuIGNvdW50VW5pcXVlKGRhdGEsIGFjY2Vzc29yKTtcbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLm1vZGU6XG4gICAgICByZXR1cm4gZ2V0TW9kZShkYXRhLCBhY2Nlc3Nvcik7XG4gICAgY2FzZSBBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtOlxuICAgICAgcmV0dXJuIG1heChkYXRhLCBhY2Nlc3Nvcik7XG4gICAgY2FzZSBBR0dSRUdBVElPTl9UWVBFUy5taW5pbXVtOlxuICAgICAgcmV0dXJuIG1pbihkYXRhLCBhY2Nlc3Nvcik7XG4gICAgY2FzZSBBR0dSRUdBVElPTl9UWVBFUy5tZWRpYW46XG4gICAgICByZXR1cm4gbWVkaWFuKGRhdGEsIGFjY2Vzc29yKTtcbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLnN0ZGV2OlxuICAgICAgcmV0dXJuIGRldmlhdGlvbihkYXRhLCBhY2Nlc3Nvcik7XG4gICAgY2FzZSBBR0dSRUdBVElPTl9UWVBFUy5zdW06XG4gICAgICByZXR1cm4gc3VtKGRhdGEsIGFjY2Vzc29yKTtcbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLnZhcmlhbmNlOlxuICAgICAgcmV0dXJuIHZhcmlhbmNlKGRhdGEsIGFjY2Vzc29yKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBBR0dSRUdBVElPTl9OQU1FOiB7XG4gIFtrZXk6IHN0cmluZ106IHN0cmluZztcbn0gPSB7XG4gIFtBR0dSRUdBVElPTl9UWVBFUy5hdmVyYWdlXTogJ0F2ZXJhZ2UnLFxuICBbQUdHUkVHQVRJT05fVFlQRVMuY291bnRVbmlxdWVdOiAnTnVtYmVyIG9mIFVuaXF1ZScsXG4gIFtBR0dSRUdBVElPTl9UWVBFUy5tb2RlXTogJ01vc3QgT2Z0ZW4nLFxuICBbQUdHUkVHQVRJT05fVFlQRVMubWF4aW11bV06ICdNYXgnLFxuICBbQUdHUkVHQVRJT05fVFlQRVMubWluaW11bV06ICdNaW4nLFxuICBbQUdHUkVHQVRJT05fVFlQRVMubWVkaWFuXTogJ01lZGlhbicsXG4gIFtBR0dSRUdBVElPTl9UWVBFUy5zdGRldl06ICdTdGQgRGV2aWF0aW9uJyxcbiAgW0FHR1JFR0FUSU9OX1RZUEVTLnN1bV06ICdUb3RhbCcsXG4gIFtBR0dSRUdBVElPTl9UWVBFUy52YXJpYW5jZV06ICdWYXJpYW5jZSdcbn07XG5cbi8vIHJhdGlvOiBib3RoIGRlbm9taW5hdG9yICYgbnVtZXJhdG9yIHByZWNlbnRcbi8vIGF2ZXJhZ2UsIG1pbiwgbWF4LCBtZWRpYW4sXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFMQTtBQUNBOztBQUtBLElBQU1FLFFBQVEsR0FB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
@@ -0,0 +1,25 @@
1
+ import { MapLib } from 'react-map-gl';
2
+ export declare type MapLibInstance = MapLib<any>;
3
+ /**
4
+ * A mechanism to override default Kepler values/settings so that we
5
+ * without having to make application-specific changes to the kepler repo.
6
+ */
7
+ export declare type KeplerApplicationConfig<Map> = {
8
+ /** Default name of export HTML file, can be overridden by user */
9
+ defaultHtmlName?: string;
10
+ defaultImageName?: string;
11
+ defaultJsonName?: string;
12
+ defaultDataName?: string;
13
+ defaultExportJsonSettings?: {
14
+ hasData?: boolean;
15
+ };
16
+ getMapLib?: () => Promise<MapLibInstance>;
17
+ getMap?: (ref: any) => Map;
18
+ mapLibCssClass?: string;
19
+ mapLibName?: string;
20
+ mapLibUrl?: string;
21
+ plugins?: any[];
22
+ table?: any;
23
+ };
24
+ export declare const getApplicationConfig: () => Required<KeplerApplicationConfig<mapboxgl.Map>>;
25
+ export declare function initApplicationConfig<M>(appConfig?: KeplerApplicationConfig<M>): void;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getApplicationConfig = void 0;
8
+ exports.initApplicationConfig = initApplicationConfig;
9
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
10
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
11
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != (0, _typeof2["default"])(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
12
+ // SPDX-License-Identifier: MIT
13
+ // Copyright contributors to the kepler.gl project
14
+
15
+ /**
16
+ * A mechanism to override default Kepler values/settings so that we
17
+ * without having to make application-specific changes to the kepler repo.
18
+ */
19
+
20
+ var DEFAULT_APPLICATION_CONFIG = {
21
+ defaultHtmlName: 'kepler.gl.html',
22
+ defaultImageName: 'kepler.gl.png',
23
+ defaultJsonName: 'kepler.gl.json',
24
+ defaultDataName: 'kepler.gl',
25
+ defaultExportJsonSettings: {
26
+ hasData: true
27
+ },
28
+ getMapLib: function getMapLib() {
29
+ return Promise.resolve().then(function () {
30
+ return _interopRequireWildcard(require('maplibre-gl'));
31
+ });
32
+ },
33
+ getMap: function getMap(mapRef) {
34
+ return mapRef === null || mapRef === void 0 ? void 0 : mapRef.getMap();
35
+ },
36
+ mapLibCssClass: 'maplibregl',
37
+ mapLibName: 'MapLibre',
38
+ mapLibUrl: 'https://www.maplibre.org/',
39
+ plugins: [],
40
+ // The default table class is KeplerTable.
41
+ // TODO include KeplerTable here when the circular dependency with @kepler.gl/table and @kepler.gl/utils are resolved.
42
+ table: null
43
+ };
44
+ var applicationConfig = DEFAULT_APPLICATION_CONFIG;
45
+ var getApplicationConfig = exports.getApplicationConfig = function getApplicationConfig() {
46
+ return applicationConfig;
47
+ };
48
+ function initApplicationConfig() {
49
+ var appConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
50
+ Object.assign(applicationConfig, appConfig);
51
+ }
52
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX0FQUExJQ0FUSU9OX0NPTkZJRyIsImRlZmF1bHRIdG1sTmFtZSIsImRlZmF1bHRJbWFnZU5hbWUiLCJkZWZhdWx0SnNvbk5hbWUiLCJkZWZhdWx0RGF0YU5hbWUiLCJkZWZhdWx0RXhwb3J0SnNvblNldHRpbmdzIiwiaGFzRGF0YSIsImdldE1hcExpYiIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsImdldE1hcCIsIm1hcFJlZiIsIm1hcExpYkNzc0NsYXNzIiwibWFwTGliTmFtZSIsIm1hcExpYlVybCIsInBsdWdpbnMiLCJ0YWJsZSIsImFwcGxpY2F0aW9uQ29uZmlnIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJleHBvcnRzIiwiaW5pdEFwcGxpY2F0aW9uQ29uZmlnIiwiYXBwQ29uZmlnIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiT2JqZWN0IiwiYXNzaWduIl0sInNvdXJjZXMiOlsiLi4vc3JjL2FwcGxpY2F0aW9uLWNvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge01hcExpYiwgTWFwUmVmfSBmcm9tICdyZWFjdC1tYXAtZ2wnO1xuXG5leHBvcnQgdHlwZSBNYXBMaWJJbnN0YW5jZSA9IE1hcExpYjxhbnk+O1xuXG4vKipcbiAqIEEgbWVjaGFuaXNtIHRvIG92ZXJyaWRlIGRlZmF1bHQgS2VwbGVyIHZhbHVlcy9zZXR0aW5ncyBzbyB0aGF0IHdlXG4gKiB3aXRob3V0IGhhdmluZyB0byBtYWtlIGFwcGxpY2F0aW9uLXNwZWNpZmljIGNoYW5nZXMgdG8gdGhlIGtlcGxlciByZXBvLlxuICovXG5leHBvcnQgdHlwZSBLZXBsZXJBcHBsaWNhdGlvbkNvbmZpZzxNYXA+ID0ge1xuICAvKiogRGVmYXVsdCBuYW1lIG9mIGV4cG9ydCBIVE1MIGZpbGUsIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgKi9cbiAgZGVmYXVsdEh0bWxOYW1lPzogc3RyaW5nO1xuICBkZWZhdWx0SW1hZ2VOYW1lPzogc3RyaW5nO1xuICBkZWZhdWx0SnNvbk5hbWU/OiBzdHJpbmc7XG4gIGRlZmF1bHREYXRhTmFtZT86IHN0cmluZztcbiAgZGVmYXVsdEV4cG9ydEpzb25TZXR0aW5ncz86IHtcbiAgICBoYXNEYXRhPzogYm9vbGVhbjtcbiAgfTtcbiAgZ2V0TWFwTGliPzogKCkgPT4gUHJvbWlzZTxNYXBMaWJJbnN0YW5jZT47XG4gIGdldE1hcD86IChyZWY6IGFueSkgPT4gTWFwO1xuICBtYXBMaWJDc3NDbGFzcz86IHN0cmluZztcbiAgbWFwTGliTmFtZT86IHN0cmluZztcbiAgbWFwTGliVXJsPzogc3RyaW5nO1xuICBwbHVnaW5zPzogYW55W107XG4gIC8vIEtlcGxlclRhYmxlIGFsdGVybmF0aXZlXG4gIC8vIFRPRE8gaW1wcm92ZSB0eXBpbmcgYnkgZXhwb3J0aW5nIEtlcGxlclRhYmxlIGludGVyZmFjZSB0byBAa2VwbGVyLmdsL3R5cGVzXG4gIHRhYmxlPzogYW55O1xufTtcblxuY29uc3QgREVGQVVMVF9BUFBMSUNBVElPTl9DT05GSUc6IFJlcXVpcmVkPEtlcGxlckFwcGxpY2F0aW9uQ29uZmlnPG1hcGJveGdsLk1hcD4+ID0ge1xuICBkZWZhdWx0SHRtbE5hbWU6ICdrZXBsZXIuZ2wuaHRtbCcsXG4gIGRlZmF1bHRJbWFnZU5hbWU6ICdrZXBsZXIuZ2wucG5nJyxcbiAgZGVmYXVsdEpzb25OYW1lOiAna2VwbGVyLmdsLmpzb24nLFxuICBkZWZhdWx0RGF0YU5hbWU6ICdrZXBsZXIuZ2wnLFxuICBkZWZhdWx0RXhwb3J0SnNvblNldHRpbmdzOiB7XG4gICAgaGFzRGF0YTogdHJ1ZVxuICB9LFxuICBnZXRNYXBMaWI6ICgpID0+IGltcG9ydCgnbWFwbGlicmUtZ2wnKSxcbiAgZ2V0TWFwOiAobWFwUmVmOiBNYXBSZWYpOiBtYXBib3hnbC5NYXAgPT4gbWFwUmVmPy5nZXRNYXAoKSxcbiAgbWFwTGliQ3NzQ2xhc3M6ICdtYXBsaWJyZWdsJyxcbiAgbWFwTGliTmFtZTogJ01hcExpYnJlJyxcbiAgbWFwTGliVXJsOiAnaHR0cHM6Ly93d3cubWFwbGlicmUub3JnLycsXG4gIHBsdWdpbnM6IFtdLFxuICAvLyBUaGUgZGVmYXVsdCB0YWJsZSBjbGFzcyBpcyBLZXBsZXJUYWJsZS5cbiAgLy8gVE9ETyBpbmNsdWRlIEtlcGxlclRhYmxlIGhlcmUgd2hlbiB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeSB3aXRoIEBrZXBsZXIuZ2wvdGFibGUgYW5kIEBrZXBsZXIuZ2wvdXRpbHMgYXJlIHJlc29sdmVkLlxuICB0YWJsZTogbnVsbFxufTtcblxuY29uc3QgYXBwbGljYXRpb25Db25maWc6IFJlcXVpcmVkPEtlcGxlckFwcGxpY2F0aW9uQ29uZmlnPG1hcGJveGdsLk1hcD4+ID1cbiAgREVGQVVMVF9BUFBMSUNBVElPTl9DT05GSUc7XG5cbmV4cG9ydCBjb25zdCBnZXRBcHBsaWNhdGlvbkNvbmZpZyA9ICgpOiBSZXF1aXJlZDxLZXBsZXJBcHBsaWNhdGlvbkNvbmZpZzxtYXBib3hnbC5NYXA+PiA9PlxuICBhcHBsaWNhdGlvbkNvbmZpZztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRBcHBsaWNhdGlvbkNvbmZpZzxNPihhcHBDb25maWc6IEtlcGxlckFwcGxpY2F0aW9uQ29uZmlnPE0+ID0ge30pIHtcbiAgT2JqZWN0LmFzc2lnbihhcHBsaWNhdGlvbkNvbmZpZywgYXBwQ29uZmlnKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQU1BO0FBQ0E7QUFDQTtBQUNBOztBQXFCQSxJQUFNQSwwQkFBMkUsR0FBRztFQUNsRkMsZUFBZSxFQUFFLGdCQUFnQjtFQUNqQ0MsZ0JBQWdCLEVBQUUsZUFBZTtFQUNqQ0MsZUFBZSxFQUFFLGdCQUFnQjtFQUNqQ0MsZUFBZSxFQUFFLFdBQVc7RUFDNUJDLHlCQUF5QixFQUFFO0lBQ3pCQyxPQUFPLEVBQUU7RUFDWCxDQUFDO0VBQ0RDLFNBQVMsRUFBRSxTQUFYQSxTQUFTQSxDQUFBO0lBQUEsT0FBQUMsT0FBQSxDQUFBQyxPQUFBLEdBQUFDLElBQUE7TUFBQSxPQUFBQyx1QkFBQSxDQUFBQyxPQUFBLENBQWUsYUFBYTtJQUFBO0VBQUEsQ0FBQztFQUN0Q0MsTUFBTSxFQUFFLFNBQVJBLE1BQU1BLENBQUdDLE1BQWM7SUFBQSxPQUFtQkEsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVELE1BQU0sQ0FBQyxDQUFDO0VBQUE7RUFDMURFLGNBQWMsRUFBRSxZQUFZO0VBQzVCQyxVQUFVLEVBQUUsVUFBVTtFQUN0QkMsU0FBUyxFQUFFLDJCQUEyQjtFQUN0Q0MsT0FBTyxFQUFFLEVBQUU7RUFDWDtFQUNBO0VBQ0FDLEtBQUssRUFBRTtBQUNULENBQUM7QUFFRCxJQUFNQyxpQkFBa0UsR0FDdEVwQiwwQkFBMEI7QUFFckIsSUFBTXFCLG9CQUFvQixHQUFBQyxPQUFBLENBQUFELG9CQUFBLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBQTtFQUFBLE9BQy9CRCxpQkFBaUI7QUFBQTtBQUVaLFNBQVNHLHFCQUFxQkEsQ0FBQSxFQUFnRDtFQUFBLElBQTVDQyxTQUFxQyxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFDakZHLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDVCxpQkFBaUIsRUFBRUksU0FBUyxDQUFDO0FBQzdDIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,62 @@
1
+ import * as arrow from 'apache-arrow';
2
+ import { DATA_TYPES as AnalyzerDATA_TYPES } from 'type-analyzer';
3
+ import { ProtoDatasetField } from '@kepler.gl/types';
4
+ import { DataRow, SharedRowOptions } from './data-row';
5
+ import { DataContainerInterface, RangeOptions } from './data-container-interface';
6
+ declare type ArrowDataContainerInput = {
7
+ cols: arrow.Vector[];
8
+ fields?: ProtoDatasetField[];
9
+ };
10
+ /**
11
+ * A data container where all data is stored in raw Arrow table
12
+ */
13
+ export declare class ArrowDataContainer implements DataContainerInterface {
14
+ _cols: arrow.Vector[];
15
+ _numColumns: number;
16
+ _numRows: number;
17
+ _fields: ProtoDatasetField[];
18
+ _numChunks: number;
19
+ /** An arrow table recreated from vectors */
20
+ _arrowTable: arrow.Table;
21
+ constructor(data: ArrowDataContainerInput);
22
+ /**
23
+ * Restores internal Arrow table from vectors.
24
+ * TODO: consider using original arrow table, as it could contain extra metadata, not passed to the fields.
25
+ */
26
+ private _createTable;
27
+ getTable(): arrow.Table<any>;
28
+ update(updateData: arrow.Vector<any>[]): void;
29
+ numChunks(): number;
30
+ numRows(): number;
31
+ numColumns(): number;
32
+ valueAt(rowIndex: number, columnIndex: number): any;
33
+ row(rowIndex: number, sharedRow?: SharedRowOptions): DataRow;
34
+ rowAsArray(rowIndex: number): any[];
35
+ rows(sharedRow: SharedRowOptions): any;
36
+ column(columnIndex: number): Generator<any, void, unknown>;
37
+ getColumn(columnIndex: number): arrow.Vector;
38
+ getField(columnIndex: number): ProtoDatasetField;
39
+ flattenData(): any[][];
40
+ getPlainIndex(): number[];
41
+ map<T>(func: (row: DataRow, index: number) => T, sharedRow?: SharedRowOptions, options?: RangeOptions): T[];
42
+ mapIndex<T>(func: ({ index }: {
43
+ index: any;
44
+ }, dc: DataContainerInterface) => T, options?: RangeOptions): T[];
45
+ find(func: (row: DataRow, index: number) => boolean, sharedRow?: SharedRowOptions): DataRow | undefined;
46
+ reduce<T>(func: (acc: T, row: DataRow, index: number) => T, initialValue: T, sharedRow?: SharedRowOptions): T;
47
+ }
48
+ /**
49
+ * Convert arrow data type to kepler.gl field types
50
+ *
51
+ * @param arrowType the arrow data type
52
+ * @returns corresponding type in `ALL_FIELD_TYPES`
53
+ */
54
+ export declare function arrowDataTypeToFieldType(arrowType: arrow.DataType): string;
55
+ /**
56
+ * Convert arrow data type to analyzer type
57
+ *
58
+ * @param arrowType the arrow data type
59
+ * @returns corresponding type in `AnalyzerDATA_TYPES`
60
+ */
61
+ export declare function arrowDataTypeToAnalyzerDataType(arrowType: arrow.DataType): typeof AnalyzerDATA_TYPES;
62
+ export {};
@@ -0,0 +1,331 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ArrowDataContainer = void 0;
9
+ exports.arrowDataTypeToAnalyzerDataType = arrowDataTypeToAnalyzerDataType;
10
+ exports.arrowDataTypeToFieldType = arrowDataTypeToFieldType;
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
16
+ var arrow = _interopRequireWildcard(require("apache-arrow"));
17
+ var _window = require("global/window");
18
+ var _typeAnalyzer = require("type-analyzer");
19
+ var _constants = require("@kepler.gl/constants");
20
+ var _dataRow = require("./data-row");
21
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
22
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
23
+ var _marked = /*#__PURE__*/_regenerator["default"].mark(rowsIterator),
24
+ _marked2 = /*#__PURE__*/_regenerator["default"].mark(columnIterator); // SPDX-License-Identifier: MIT
25
+ // Copyright contributors to the kepler.gl project
26
+ /**
27
+ * @param dataContainer
28
+ * @param sharedRow
29
+ */
30
+ function rowsIterator(dataContainer, sharedRow) {
31
+ var numRows, rowIndex;
32
+ return _regenerator["default"].wrap(function rowsIterator$(_context) {
33
+ while (1) switch (_context.prev = _context.next) {
34
+ case 0:
35
+ numRows = dataContainer.numRows();
36
+ rowIndex = 0;
37
+ case 2:
38
+ if (!(rowIndex < numRows)) {
39
+ _context.next = 8;
40
+ break;
41
+ }
42
+ _context.next = 5;
43
+ return dataContainer.row(rowIndex, sharedRow);
44
+ case 5:
45
+ ++rowIndex;
46
+ _context.next = 2;
47
+ break;
48
+ case 8:
49
+ case "end":
50
+ return _context.stop();
51
+ }
52
+ }, _marked);
53
+ }
54
+
55
+ /**
56
+ * @param dataContainer
57
+ * @param columnIndex
58
+ */
59
+ function columnIterator(dataContainer, columnIndex) {
60
+ var numRows, rowIndex;
61
+ return _regenerator["default"].wrap(function columnIterator$(_context2) {
62
+ while (1) switch (_context2.prev = _context2.next) {
63
+ case 0:
64
+ numRows = dataContainer.numRows();
65
+ rowIndex = 0;
66
+ case 2:
67
+ if (!(rowIndex < numRows)) {
68
+ _context2.next = 8;
69
+ break;
70
+ }
71
+ _context2.next = 5;
72
+ return dataContainer.valueAt(rowIndex, columnIndex);
73
+ case 5:
74
+ ++rowIndex;
75
+ _context2.next = 2;
76
+ break;
77
+ case 8:
78
+ case "end":
79
+ return _context2.stop();
80
+ }
81
+ }, _marked2);
82
+ }
83
+
84
+ /**
85
+ * A data container where all data is stored in raw Arrow table
86
+ */
87
+ var ArrowDataContainer = exports.ArrowDataContainer = /*#__PURE__*/function () {
88
+ function ArrowDataContainer(data) {
89
+ (0, _classCallCheck2["default"])(this, ArrowDataContainer);
90
+ (0, _defineProperty2["default"])(this, "_cols", void 0);
91
+ (0, _defineProperty2["default"])(this, "_numColumns", void 0);
92
+ (0, _defineProperty2["default"])(this, "_numRows", void 0);
93
+ (0, _defineProperty2["default"])(this, "_fields", void 0);
94
+ (0, _defineProperty2["default"])(this, "_numChunks", void 0);
95
+ // cache column data to make valueAt() faster
96
+ // _colData: any[][];
97
+ /** An arrow table recreated from vectors */
98
+ (0, _defineProperty2["default"])(this, "_arrowTable", void 0);
99
+ if (!data.cols) {
100
+ throw Error('ArrowDataContainer: no columns provided');
101
+ }
102
+ if (!Array.isArray(data.cols)) {
103
+ throw Error("ArrowDataContainer: columns object isn't an array");
104
+ }
105
+ this._cols = data.cols;
106
+ this._numColumns = data.cols.length;
107
+ this._numRows = data.cols[0].length;
108
+ this._fields = data.fields || [];
109
+ this._numChunks = data.cols[0].data.length;
110
+ // this._colData = data.cols.map(c => c.toArray());
111
+
112
+ this._arrowTable = this._createTable();
113
+ }
114
+
115
+ /**
116
+ * Restores internal Arrow table from vectors.
117
+ * TODO: consider using original arrow table, as it could contain extra metadata, not passed to the fields.
118
+ */
119
+ return (0, _createClass2["default"])(ArrowDataContainer, [{
120
+ key: "_createTable",
121
+ value: function _createTable() {
122
+ var _this = this;
123
+ var creaOpts = {};
124
+ this._fields.map(function (field, index) {
125
+ creaOpts[field.name] = _this._cols[index];
126
+ });
127
+ return new arrow.Table(creaOpts);
128
+ }
129
+ }, {
130
+ key: "getTable",
131
+ value: function getTable() {
132
+ return this._arrowTable;
133
+ }
134
+ }, {
135
+ key: "update",
136
+ value: function update(updateData) {
137
+ this._cols = updateData;
138
+ this._numColumns = this._cols.length;
139
+ this._numRows = this._cols[0].length;
140
+ this._numChunks = this._cols[0].data.length;
141
+ this._arrowTable = this._createTable();
142
+
143
+ // cache column data to make valueAt() faster
144
+ // this._colData = this._cols.map(c => c.toArray());
145
+ }
146
+ }, {
147
+ key: "numChunks",
148
+ value: function numChunks() {
149
+ return this._numChunks;
150
+ }
151
+ }, {
152
+ key: "numRows",
153
+ value: function numRows() {
154
+ return this._numRows;
155
+ }
156
+ }, {
157
+ key: "numColumns",
158
+ value: function numColumns() {
159
+ return this._numColumns;
160
+ }
161
+ }, {
162
+ key: "valueAt",
163
+ value: function valueAt(rowIndex, columnIndex) {
164
+ // return this._colData[columnIndex][rowIndex];
165
+ return this._cols[columnIndex].get(rowIndex);
166
+ }
167
+ }, {
168
+ key: "row",
169
+ value: function row(rowIndex, sharedRow) {
170
+ var tSharedRow = _dataRow.DataRow.createSharedRow(sharedRow);
171
+ if (tSharedRow) {
172
+ tSharedRow.setSource(this, rowIndex);
173
+ return tSharedRow;
174
+ }
175
+ return new _dataRow.DataRow(this, rowIndex);
176
+ }
177
+ }, {
178
+ key: "rowAsArray",
179
+ value: function rowAsArray(rowIndex) {
180
+ // return this._colData.map(col => col[rowIndex]);
181
+ return this._cols.map(function (col) {
182
+ return col.get(rowIndex);
183
+ });
184
+ }
185
+ }, {
186
+ key: "rows",
187
+ value: function rows(sharedRow) {
188
+ var tSharedRow = _dataRow.DataRow.createSharedRow(sharedRow);
189
+ return rowsIterator(this, tSharedRow);
190
+ }
191
+ }, {
192
+ key: "column",
193
+ value: function column(columnIndex) {
194
+ return columnIterator(this, columnIndex);
195
+ }
196
+ }, {
197
+ key: "getColumn",
198
+ value: function getColumn(columnIndex) {
199
+ return this._cols[columnIndex];
200
+ }
201
+ }, {
202
+ key: "getField",
203
+ value: function getField(columnIndex) {
204
+ return this._fields[columnIndex];
205
+ }
206
+ }, {
207
+ key: "flattenData",
208
+ value: function flattenData() {
209
+ var data = [];
210
+ for (var i = 0; i < this._numRows; ++i) {
211
+ data.push(this.rowAsArray(i));
212
+ }
213
+ return data;
214
+ }
215
+ }, {
216
+ key: "getPlainIndex",
217
+ value: function getPlainIndex() {
218
+ return (0, _toConsumableArray2["default"])(Array(this._numRows).keys());
219
+ }
220
+ }, {
221
+ key: "map",
222
+ value: function map(func, sharedRow) {
223
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
224
+ var tSharedRow = _dataRow.DataRow.createSharedRow(sharedRow);
225
+ var _options$start = options.start,
226
+ start = _options$start === void 0 ? 0 : _options$start,
227
+ _options$end = options.end,
228
+ end = _options$end === void 0 ? this.numRows() : _options$end;
229
+ var endRow = Math.min(this.numRows(), end);
230
+ var out = [];
231
+ for (var rowIndex = start; rowIndex < endRow; ++rowIndex) {
232
+ var row = this.row(rowIndex, tSharedRow);
233
+ out.push(func(row, rowIndex));
234
+ }
235
+ return out;
236
+ }
237
+ }, {
238
+ key: "mapIndex",
239
+ value: function mapIndex(func) {
240
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
241
+ var _options$start2 = options.start,
242
+ start = _options$start2 === void 0 ? 0 : _options$start2,
243
+ _options$end2 = options.end,
244
+ end = _options$end2 === void 0 ? this.numRows() : _options$end2;
245
+ var endRow = Math.min(this.numRows(), end);
246
+ var out = [];
247
+ for (var rowIndex = start; rowIndex < endRow; ++rowIndex) {
248
+ out.push(func({
249
+ index: rowIndex
250
+ }, this));
251
+ }
252
+ return out;
253
+ }
254
+ }, {
255
+ key: "find",
256
+ value: function find(func, sharedRow) {
257
+ var tSharedRow = _dataRow.DataRow.createSharedRow(sharedRow);
258
+ for (var rowIndex = 0; rowIndex < this._numRows; ++rowIndex) {
259
+ var row = this.row(rowIndex, tSharedRow);
260
+ if (func(row, rowIndex)) {
261
+ return row;
262
+ }
263
+ }
264
+ return undefined;
265
+ }
266
+ }, {
267
+ key: "reduce",
268
+ value: function reduce(func, initialValue, sharedRow) {
269
+ var tSharedRow = _dataRow.DataRow.createSharedRow(sharedRow);
270
+ for (var rowIndex = 0; rowIndex < this._numRows; ++rowIndex) {
271
+ var row = this.row(rowIndex, tSharedRow);
272
+ initialValue = func(initialValue, row, rowIndex);
273
+ }
274
+ return initialValue;
275
+ }
276
+ }]);
277
+ }();
278
+ /**
279
+ * Convert arrow data type to kepler.gl field types
280
+ *
281
+ * @param arrowType the arrow data type
282
+ * @returns corresponding type in `ALL_FIELD_TYPES`
283
+ */
284
+ function arrowDataTypeToFieldType(arrowType) {
285
+ // Note: this function doesn't return ALL_FIELD_TYPES.geojson or ALL_FIELD_TYPES.array, which
286
+ // should be further detected by caller
287
+ if (arrow.DataType.isDate(arrowType)) {
288
+ return _constants.ALL_FIELD_TYPES.date;
289
+ } else if (arrow.DataType.isTimestamp(arrowType) || arrow.DataType.isTime(arrowType)) {
290
+ return _constants.ALL_FIELD_TYPES.timestamp;
291
+ } else if (arrow.DataType.isFloat(arrowType)) {
292
+ return _constants.ALL_FIELD_TYPES.real;
293
+ } else if (arrow.DataType.isInt(arrowType)) {
294
+ return _constants.ALL_FIELD_TYPES.integer;
295
+ } else if (arrow.DataType.isBool(arrowType)) {
296
+ return _constants.ALL_FIELD_TYPES["boolean"];
297
+ } else if (arrow.DataType.isUtf8(arrowType) || arrow.DataType.isNull(arrowType)) {
298
+ return _constants.ALL_FIELD_TYPES.string;
299
+ } else if (arrow.DataType.isBinary(arrowType) || arrow.DataType.isDictionary(arrowType) || arrow.DataType.isFixedSizeBinary(arrowType) || arrow.DataType.isFixedSizeList(arrowType) || arrow.DataType.isList(arrowType) || arrow.DataType.isMap(arrowType) || arrow.DataType.isStruct(arrowType)) {
300
+ return _constants.ALL_FIELD_TYPES.object;
301
+ }
302
+ _window.console.warn("Unsupported arrow type: ".concat(arrowType));
303
+ return _constants.ALL_FIELD_TYPES.string;
304
+ }
305
+
306
+ /**
307
+ * Convert arrow data type to analyzer type
308
+ *
309
+ * @param arrowType the arrow data type
310
+ * @returns corresponding type in `AnalyzerDATA_TYPES`
311
+ */
312
+ function arrowDataTypeToAnalyzerDataType(arrowType) {
313
+ if (arrow.DataType.isDate(arrowType)) {
314
+ return _typeAnalyzer.DATA_TYPES.DATE;
315
+ } else if (arrow.DataType.isTimestamp(arrowType) || arrow.DataType.isTime(arrowType)) {
316
+ return _typeAnalyzer.DATA_TYPES.DATETIME;
317
+ } else if (arrow.DataType.isFloat(arrowType)) {
318
+ return _typeAnalyzer.DATA_TYPES.FLOAT;
319
+ } else if (arrow.DataType.isInt(arrowType)) {
320
+ return _typeAnalyzer.DATA_TYPES.INT;
321
+ } else if (arrow.DataType.isBool(arrowType)) {
322
+ return _typeAnalyzer.DATA_TYPES.BOOLEAN;
323
+ } else if (arrow.DataType.isUtf8(arrowType) || arrow.DataType.isNull(arrowType)) {
324
+ return _typeAnalyzer.DATA_TYPES.STRING;
325
+ } else if (arrow.DataType.isBinary(arrowType) || arrow.DataType.isDictionary(arrowType) || arrow.DataType.isFixedSizeBinary(arrowType) || arrow.DataType.isFixedSizeList(arrowType) || arrow.DataType.isList(arrowType) || arrow.DataType.isMap(arrowType) || arrow.DataType.isStruct(arrowType)) {
326
+ return _typeAnalyzer.DATA_TYPES.OBJECT;
327
+ }
328
+ _window.console.warn("Unsupported arrow type: ".concat(arrowType));
329
+ return _typeAnalyzer.DATA_TYPES.STRING;
330
+ }
331
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl93aW5kb3ciLCJfdHlwZUFuYWx5emVyIiwiX2NvbnN0YW50cyIsIl9kYXRhUm93IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX21hcmtlZCIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJyb3dzSXRlcmF0b3IiLCJfbWFya2VkMiIsImNvbHVtbkl0ZXJhdG9yIiwiZGF0YUNvbnRhaW5lciIsInNoYXJlZFJvdyIsIm51bVJvd3MiLCJyb3dJbmRleCIsIndyYXAiLCJyb3dzSXRlcmF0b3IkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInJvdyIsInN0b3AiLCJjb2x1bW5JbmRleCIsImNvbHVtbkl0ZXJhdG9yJCIsIl9jb250ZXh0MiIsInZhbHVlQXQiLCJBcnJvd0RhdGFDb250YWluZXIiLCJleHBvcnRzIiwiZGF0YSIsIl9jbGFzc0NhbGxDaGVjazIiLCJfZGVmaW5lUHJvcGVydHkyIiwiY29scyIsIkVycm9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX2NvbHMiLCJfbnVtQ29sdW1ucyIsImxlbmd0aCIsIl9udW1Sb3dzIiwiX2ZpZWxkcyIsImZpZWxkcyIsIl9udW1DaHVua3MiLCJfYXJyb3dUYWJsZSIsIl9jcmVhdGVUYWJsZSIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsIl90aGlzIiwiY3JlYU9wdHMiLCJtYXAiLCJmaWVsZCIsImluZGV4IiwibmFtZSIsIlRhYmxlIiwiZ2V0VGFibGUiLCJ1cGRhdGUiLCJ1cGRhdGVEYXRhIiwibnVtQ2h1bmtzIiwibnVtQ29sdW1ucyIsInRTaGFyZWRSb3ciLCJEYXRhUm93IiwiY3JlYXRlU2hhcmVkUm93Iiwic2V0U291cmNlIiwicm93QXNBcnJheSIsImNvbCIsInJvd3MiLCJjb2x1bW4iLCJnZXRDb2x1bW4iLCJnZXRGaWVsZCIsImZsYXR0ZW5EYXRhIiwicHVzaCIsImdldFBsYWluSW5kZXgiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwia2V5cyIsImZ1bmMiLCJvcHRpb25zIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiX29wdGlvbnMkc3RhcnQiLCJzdGFydCIsIl9vcHRpb25zJGVuZCIsImVuZCIsImVuZFJvdyIsIk1hdGgiLCJtaW4iLCJvdXQiLCJtYXBJbmRleCIsIl9vcHRpb25zJHN0YXJ0MiIsIl9vcHRpb25zJGVuZDIiLCJmaW5kIiwicmVkdWNlIiwiaW5pdGlhbFZhbHVlIiwiYXJyb3dEYXRhVHlwZVRvRmllbGRUeXBlIiwiYXJyb3dUeXBlIiwiRGF0YVR5cGUiLCJpc0RhdGUiLCJBTExfRklFTERfVFlQRVMiLCJkYXRlIiwiaXNUaW1lc3RhbXAiLCJpc1RpbWUiLCJ0aW1lc3RhbXAiLCJpc0Zsb2F0IiwicmVhbCIsImlzSW50IiwiaW50ZWdlciIsImlzQm9vbCIsImlzVXRmOCIsImlzTnVsbCIsInN0cmluZyIsImlzQmluYXJ5IiwiaXNEaWN0aW9uYXJ5IiwiaXNGaXhlZFNpemVCaW5hcnkiLCJpc0ZpeGVkU2l6ZUxpc3QiLCJpc0xpc3QiLCJpc01hcCIsImlzU3RydWN0Iiwib2JqZWN0IiwiZ2xvYmFsQ29uc29sZSIsIndhcm4iLCJjb25jYXQiLCJhcnJvd0RhdGFUeXBlVG9BbmFseXplckRhdGFUeXBlIiwiQW5hbHl6ZXJEQVRBX1RZUEVTIiwiREFURSIsIkRBVEVUSU1FIiwiRkxPQVQiLCJJTlQiLCJCT09MRUFOIiwiU1RSSU5HIiwiT0JKRUNUIl0sInNvdXJjZXMiOlsiLi4vc3JjL2Fycm93LWRhdGEtY29udGFpbmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCAqIGFzIGFycm93IGZyb20gJ2FwYWNoZS1hcnJvdyc7XG5pbXBvcnQge2NvbnNvbGUgYXMgZ2xvYmFsQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQge0RBVEFfVFlQRVMgYXMgQW5hbHl6ZXJEQVRBX1RZUEVTfSBmcm9tICd0eXBlLWFuYWx5emVyJztcbmltcG9ydCB7UHJvdG9EYXRhc2V0RmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtBTExfRklFTERfVFlQRVN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IHtEYXRhUm93LCBTaGFyZWRSb3dPcHRpb25zfSBmcm9tICcuL2RhdGEtcm93JztcbmltcG9ydCB7RGF0YUNvbnRhaW5lckludGVyZmFjZSwgUmFuZ2VPcHRpb25zfSBmcm9tICcuL2RhdGEtY29udGFpbmVyLWludGVyZmFjZSc7XG5cbnR5cGUgQXJyb3dEYXRhQ29udGFpbmVySW5wdXQgPSB7XG4gIGNvbHM6IGFycm93LlZlY3RvcltdO1xuICBmaWVsZHM/OiBQcm90b0RhdGFzZXRGaWVsZFtdO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gZGF0YUNvbnRhaW5lclxuICogQHBhcmFtIHNoYXJlZFJvd1xuICovXG5mdW5jdGlvbiogcm93c0l0ZXJhdG9yKGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsIHNoYXJlZFJvdzogU2hhcmVkUm93T3B0aW9ucykge1xuICBjb25zdCBudW1Sb3dzID0gZGF0YUNvbnRhaW5lci5udW1Sb3dzKCk7XG4gIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCBudW1Sb3dzOyArK3Jvd0luZGV4KSB7XG4gICAgeWllbGQgZGF0YUNvbnRhaW5lci5yb3cocm93SW5kZXgsIHNoYXJlZFJvdyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gZGF0YUNvbnRhaW5lclxuICogQHBhcmFtIGNvbHVtbkluZGV4XG4gKi9cbmZ1bmN0aW9uKiBjb2x1bW5JdGVyYXRvcihkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLCBjb2x1bW5JbmRleDogbnVtYmVyKSB7XG4gIGNvbnN0IG51bVJvd3MgPSBkYXRhQ29udGFpbmVyLm51bVJvd3MoKTtcbiAgZm9yIChsZXQgcm93SW5kZXggPSAwOyByb3dJbmRleCA8IG51bVJvd3M7ICsrcm93SW5kZXgpIHtcbiAgICB5aWVsZCBkYXRhQ29udGFpbmVyLnZhbHVlQXQocm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgZGF0YSBjb250YWluZXIgd2hlcmUgYWxsIGRhdGEgaXMgc3RvcmVkIGluIHJhdyBBcnJvdyB0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgQXJyb3dEYXRhQ29udGFpbmVyIGltcGxlbWVudHMgRGF0YUNvbnRhaW5lckludGVyZmFjZSB7XG4gIF9jb2xzOiBhcnJvdy5WZWN0b3JbXTtcbiAgX251bUNvbHVtbnM6IG51bWJlcjtcbiAgX251bVJvd3M6IG51bWJlcjtcbiAgX2ZpZWxkczogUHJvdG9EYXRhc2V0RmllbGRbXTtcbiAgX251bUNodW5rczogbnVtYmVyO1xuICAvLyBjYWNoZSBjb2x1bW4gZGF0YSB0byBtYWtlIHZhbHVlQXQoKSBmYXN0ZXJcbiAgLy8gX2NvbERhdGE6IGFueVtdW107XG5cbiAgLyoqIEFuIGFycm93IHRhYmxlIHJlY3JlYXRlZCBmcm9tIHZlY3RvcnMgKi9cbiAgX2Fycm93VGFibGU6IGFycm93LlRhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IEFycm93RGF0YUNvbnRhaW5lcklucHV0KSB7XG4gICAgaWYgKCFkYXRhLmNvbHMpIHtcbiAgICAgIHRocm93IEVycm9yKCdBcnJvd0RhdGFDb250YWluZXI6IG5vIGNvbHVtbnMgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YS5jb2xzKSkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJBcnJvd0RhdGFDb250YWluZXI6IGNvbHVtbnMgb2JqZWN0IGlzbid0IGFuIGFycmF5XCIpO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbHMgPSBkYXRhLmNvbHM7XG4gICAgdGhpcy5fbnVtQ29sdW1ucyA9IGRhdGEuY29scy5sZW5ndGg7XG4gICAgdGhpcy5fbnVtUm93cyA9IGRhdGEuY29sc1swXS5sZW5ndGg7XG4gICAgdGhpcy5fZmllbGRzID0gZGF0YS5maWVsZHMgfHwgW107XG4gICAgdGhpcy5fbnVtQ2h1bmtzID0gZGF0YS5jb2xzWzBdLmRhdGEubGVuZ3RoO1xuICAgIC8vIHRoaXMuX2NvbERhdGEgPSBkYXRhLmNvbHMubWFwKGMgPT4gYy50b0FycmF5KCkpO1xuXG4gICAgdGhpcy5fYXJyb3dUYWJsZSA9IHRoaXMuX2NyZWF0ZVRhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgaW50ZXJuYWwgQXJyb3cgdGFibGUgZnJvbSB2ZWN0b3JzLlxuICAgKiBUT0RPOiBjb25zaWRlciB1c2luZyBvcmlnaW5hbCBhcnJvdyB0YWJsZSwgYXMgaXQgY291bGQgY29udGFpbiBleHRyYSBtZXRhZGF0YSwgbm90IHBhc3NlZCB0byB0aGUgZmllbGRzLlxuICAgKi9cbiAgcHJpdmF0ZSBfY3JlYXRlVGFibGUoKSB7XG4gICAgY29uc3QgY3JlYU9wdHMgPSB7fTtcbiAgICB0aGlzLl9maWVsZHMubWFwKChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICAgIGNyZWFPcHRzW2ZpZWxkLm5hbWVdID0gdGhpcy5fY29sc1tpbmRleF07XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBhcnJvdy5UYWJsZShjcmVhT3B0cyk7XG4gIH1cblxuICBnZXRUYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJyb3dUYWJsZTtcbiAgfVxuXG4gIHVwZGF0ZSh1cGRhdGVEYXRhOiBhcnJvdy5WZWN0b3I8YW55PltdKSB7XG4gICAgdGhpcy5fY29scyA9IHVwZGF0ZURhdGE7XG4gICAgdGhpcy5fbnVtQ29sdW1ucyA9IHRoaXMuX2NvbHMubGVuZ3RoO1xuICAgIHRoaXMuX251bVJvd3MgPSB0aGlzLl9jb2xzWzBdLmxlbmd0aDtcbiAgICB0aGlzLl9udW1DaHVua3MgPSB0aGlzLl9jb2xzWzBdLmRhdGEubGVuZ3RoO1xuXG4gICAgdGhpcy5fYXJyb3dUYWJsZSA9IHRoaXMuX2NyZWF0ZVRhYmxlKCk7XG5cbiAgICAvLyBjYWNoZSBjb2x1bW4gZGF0YSB0byBtYWtlIHZhbHVlQXQoKSBmYXN0ZXJcbiAgICAvLyB0aGlzLl9jb2xEYXRhID0gdGhpcy5fY29scy5tYXAoYyA9PiBjLnRvQXJyYXkoKSk7XG4gIH1cblxuICBudW1DaHVua3MoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbnVtQ2h1bmtzO1xuICB9XG5cbiAgbnVtUm93cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9udW1Sb3dzO1xuICB9XG5cbiAgbnVtQ29sdW1ucygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9udW1Db2x1bW5zO1xuICB9XG5cbiAgdmFsdWVBdChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTogYW55IHtcbiAgICAvLyByZXR1cm4gdGhpcy5fY29sRGF0YVtjb2x1bW5JbmRleF1bcm93SW5kZXhdO1xuICAgIHJldHVybiB0aGlzLl9jb2xzW2NvbHVtbkluZGV4XS5nZXQocm93SW5kZXgpO1xuICB9XG5cbiAgcm93KHJvd0luZGV4OiBudW1iZXIsIHNoYXJlZFJvdz86IFNoYXJlZFJvd09wdGlvbnMpOiBEYXRhUm93IHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3coc2hhcmVkUm93KTtcbiAgICBpZiAodFNoYXJlZFJvdykge1xuICAgICAgdFNoYXJlZFJvdy5zZXRTb3VyY2UodGhpcywgcm93SW5kZXgpO1xuICAgICAgcmV0dXJuIHRTaGFyZWRSb3c7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEYXRhUm93KHRoaXMsIHJvd0luZGV4KTtcbiAgfVxuXG4gIHJvd0FzQXJyYXkocm93SW5kZXg6IG51bWJlcik6IGFueVtdIHtcbiAgICAvLyByZXR1cm4gdGhpcy5fY29sRGF0YS5tYXAoY29sID0+IGNvbFtyb3dJbmRleF0pO1xuICAgIHJldHVybiB0aGlzLl9jb2xzLm1hcChjb2wgPT4gY29sLmdldChyb3dJbmRleCkpO1xuICB9XG5cbiAgcm93cyhzaGFyZWRSb3c6IFNoYXJlZFJvd09wdGlvbnMpIHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3coc2hhcmVkUm93KTtcbiAgICByZXR1cm4gcm93c0l0ZXJhdG9yKHRoaXMsIHRTaGFyZWRSb3cpO1xuICB9XG5cbiAgY29sdW1uKGNvbHVtbkluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gY29sdW1uSXRlcmF0b3IodGhpcywgY29sdW1uSW5kZXgpO1xuICB9XG5cbiAgZ2V0Q29sdW1uKGNvbHVtbkluZGV4OiBudW1iZXIpOiBhcnJvdy5WZWN0b3Ige1xuICAgIHJldHVybiB0aGlzLl9jb2xzW2NvbHVtbkluZGV4XTtcbiAgfVxuXG4gIGdldEZpZWxkKGNvbHVtbkluZGV4OiBudW1iZXIpOiBQcm90b0RhdGFzZXRGaWVsZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkc1tjb2x1bW5JbmRleF07XG4gIH1cblxuICBmbGF0dGVuRGF0YSgpOiBhbnlbXVtdIHtcbiAgICBjb25zdCBkYXRhOiBhbnlbXVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9udW1Sb3dzOyArK2kpIHtcbiAgICAgIGRhdGEucHVzaCh0aGlzLnJvd0FzQXJyYXkoaSkpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGdldFBsYWluSW5kZXgoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiBbLi4uQXJyYXkodGhpcy5fbnVtUm93cykua2V5cygpXTtcbiAgfVxuXG4gIG1hcDxUPihcbiAgICBmdW5jOiAocm93OiBEYXRhUm93LCBpbmRleDogbnVtYmVyKSA9PiBULFxuICAgIHNoYXJlZFJvdz86IFNoYXJlZFJvd09wdGlvbnMsXG4gICAgb3B0aW9uczogUmFuZ2VPcHRpb25zID0ge31cbiAgKTogVFtdIHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3coc2hhcmVkUm93KTtcblxuICAgIGNvbnN0IHtzdGFydCA9IDAsIGVuZCA9IHRoaXMubnVtUm93cygpfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgZW5kUm93ID0gTWF0aC5taW4odGhpcy5udW1Sb3dzKCksIGVuZCk7XG5cbiAgICBjb25zdCBvdXQ6IFRbXSA9IFtdO1xuICAgIGZvciAobGV0IHJvd0luZGV4ID0gc3RhcnQ7IHJvd0luZGV4IDwgZW5kUm93OyArK3Jvd0luZGV4KSB7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLnJvdyhyb3dJbmRleCwgdFNoYXJlZFJvdyk7XG4gICAgICBvdXQucHVzaChmdW5jKHJvdywgcm93SW5kZXgpKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIG1hcEluZGV4PFQ+KGZ1bmM6ICh7aW5kZXh9LCBkYzogRGF0YUNvbnRhaW5lckludGVyZmFjZSkgPT4gVCwgb3B0aW9uczogUmFuZ2VPcHRpb25zID0ge30pOiBUW10ge1xuICAgIGNvbnN0IHtzdGFydCA9IDAsIGVuZCA9IHRoaXMubnVtUm93cygpfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgZW5kUm93ID0gTWF0aC5taW4odGhpcy5udW1Sb3dzKCksIGVuZCk7XG5cbiAgICBjb25zdCBvdXQ6IFRbXSA9IFtdO1xuICAgIGZvciAobGV0IHJvd0luZGV4ID0gc3RhcnQ7IHJvd0luZGV4IDwgZW5kUm93OyArK3Jvd0luZGV4KSB7XG4gICAgICBvdXQucHVzaChmdW5jKHtpbmRleDogcm93SW5kZXh9LCB0aGlzKSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmaW5kKFxuICAgIGZ1bmM6IChyb3c6IERhdGFSb3csIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgc2hhcmVkUm93PzogU2hhcmVkUm93T3B0aW9uc1xuICApOiBEYXRhUm93IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3coc2hhcmVkUm93KTtcblxuICAgIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCB0aGlzLl9udW1Sb3dzOyArK3Jvd0luZGV4KSB7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLnJvdyhyb3dJbmRleCwgdFNoYXJlZFJvdyk7XG4gICAgICBpZiAoZnVuYyhyb3csIHJvd0luZGV4KSkge1xuICAgICAgICByZXR1cm4gcm93O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmVkdWNlPFQ+KFxuICAgIGZ1bmM6IChhY2M6IFQsIHJvdzogRGF0YVJvdywgaW5kZXg6IG51bWJlcikgPT4gVCxcbiAgICBpbml0aWFsVmFsdWU6IFQsXG4gICAgc2hhcmVkUm93PzogU2hhcmVkUm93T3B0aW9uc1xuICApOiBUIHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3coc2hhcmVkUm93KTtcblxuICAgIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCB0aGlzLl9udW1Sb3dzOyArK3Jvd0luZGV4KSB7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLnJvdyhyb3dJbmRleCwgdFNoYXJlZFJvdyk7XG4gICAgICBpbml0aWFsVmFsdWUgPSBmdW5jKGluaXRpYWxWYWx1ZSwgcm93LCByb3dJbmRleCk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsVmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFycm93IGRhdGEgdHlwZSB0byBrZXBsZXIuZ2wgZmllbGQgdHlwZXNcbiAqXG4gKiBAcGFyYW0gYXJyb3dUeXBlIHRoZSBhcnJvdyBkYXRhIHR5cGVcbiAqIEByZXR1cm5zIGNvcnJlc3BvbmRpbmcgdHlwZSBpbiBgQUxMX0ZJRUxEX1RZUEVTYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyb3dEYXRhVHlwZVRvRmllbGRUeXBlKGFycm93VHlwZTogYXJyb3cuRGF0YVR5cGUpOiBzdHJpbmcge1xuICAvLyBOb3RlOiB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5nZW9qc29uIG9yIEFMTF9GSUVMRF9UWVBFUy5hcnJheSwgd2hpY2hcbiAgLy8gc2hvdWxkIGJlIGZ1cnRoZXIgZGV0ZWN0ZWQgYnkgY2FsbGVyXG4gIGlmIChhcnJvdy5EYXRhVHlwZS5pc0RhdGUoYXJyb3dUeXBlKSkge1xuICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuZGF0ZTtcbiAgfSBlbHNlIGlmIChhcnJvdy5EYXRhVHlwZS5pc1RpbWVzdGFtcChhcnJvd1R5cGUpIHx8IGFycm93LkRhdGFUeXBlLmlzVGltZShhcnJvd1R5cGUpKSB7XG4gICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXA7XG4gIH0gZWxzZSBpZiAoYXJyb3cuRGF0YVR5cGUuaXNGbG9hdChhcnJvd1R5cGUpKSB7XG4gICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5yZWFsO1xuICB9IGVsc2UgaWYgKGFycm93LkRhdGFUeXBlLmlzSW50KGFycm93VHlwZSkpIHtcbiAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI7XG4gIH0gZWxzZSBpZiAoYXJyb3cuRGF0YVR5cGUuaXNCb29sKGFycm93VHlwZSkpIHtcbiAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW47XG4gIH0gZWxzZSBpZiAoYXJyb3cuRGF0YVR5cGUuaXNVdGY4KGFycm93VHlwZSkgfHwgYXJyb3cuRGF0YVR5cGUuaXNOdWxsKGFycm93VHlwZSkpIHtcbiAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLnN0cmluZztcbiAgfSBlbHNlIGlmIChcbiAgICBhcnJvdy5EYXRhVHlwZS5pc0JpbmFyeShhcnJvd1R5cGUpIHx8XG4gICAgYXJyb3cuRGF0YVR5cGUuaXNEaWN0aW9uYXJ5KGFycm93VHlwZSkgfHxcbiAgICBhcnJvdy5EYXRhVHlwZS5pc0ZpeGVkU2l6ZUJpbmFyeShhcnJvd1R5cGUpIHx8XG4gICAgYXJyb3cuRGF0YVR5cGUuaXNGaXhlZFNpemVMaXN0KGFycm93VHlwZSkgfHxcbiAgICBhcnJvdy5EYXRhVHlwZS5pc0xpc3QoYXJyb3dUeXBlKSB8fFxuICAgIGFycm93LkRhdGFUeXBlLmlzTWFwKGFycm93VHlwZSkgfHxcbiAgICBhcnJvdy5EYXRhVHlwZS5pc1N0cnVjdChhcnJvd1R5cGUpXG4gICkge1xuICAgIHJldHVybiBBTExfRklFTERfVFlQRVMub2JqZWN0O1xuICB9XG4gIGdsb2JhbENvbnNvbGUud2FybihgVW5zdXBwb3J0ZWQgYXJyb3cgdHlwZTogJHthcnJvd1R5cGV9YCk7XG4gIHJldHVybiBBTExfRklFTERfVFlQRVMuc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYXJyb3cgZGF0YSB0eXBlIHRvIGFuYWx5emVyIHR5cGVcbiAqXG4gKiBAcGFyYW0gYXJyb3dUeXBlIHRoZSBhcnJvdyBkYXRhIHR5cGVcbiAqIEByZXR1cm5zIGNvcnJlc3BvbmRpbmcgdHlwZSBpbiBgQW5hbHl6ZXJEQVRBX1RZUEVTYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyb3dEYXRhVHlwZVRvQW5hbHl6ZXJEYXRhVHlwZShcbiAgYXJyb3dUeXBlOiBhcnJvdy5EYXRhVHlwZVxuKTogdHlwZW9mIEFuYWx5emVyREFUQV9UWVBFUyB7XG4gIGlmIChhcnJvdy5EYXRhVHlwZS5pc0RhdGUoYXJyb3dUeXBlKSkge1xuICAgIHJldHVybiBBbmFseXplckRBVEFfVFlQRVMuREFURTtcbiAgfSBlbHNlIGlmIChhcnJvdy5EYXRhVHlwZS5pc1RpbWVzdGFtcChhcnJvd1R5cGUpIHx8IGFycm93LkRhdGFUeXBlLmlzVGltZShhcnJvd1R5cGUpKSB7XG4gICAgcmV0dXJuIEFuYWx5emVyREFUQV9UWVBFUy5EQVRFVElNRTtcbiAgfSBlbHNlIGlmIChhcnJvdy5EYXRhVHlwZS5pc0Zsb2F0KGFycm93VHlwZSkpIHtcbiAgICByZXR1cm4gQW5hbHl6ZXJEQVRBX1RZUEVTLkZMT0FUO1xuICB9IGVsc2UgaWYgKGFycm93LkRhdGFUeXBlLmlzSW50KGFycm93VHlwZSkpIHtcbiAgICByZXR1cm4gQW5hbHl6ZXJEQVRBX1RZUEVTLklOVDtcbiAgfSBlbHNlIGlmIChhcnJvdy5EYXRhVHlwZS5pc0Jvb2woYXJyb3dUeXBlKSkge1xuICAgIHJldHVybiBBbmFseXplckRBVEFfVFlQRVMuQk9PTEVBTjtcbiAgfSBlbHNlIGlmIChhcnJvdy5EYXRhVHlwZS5pc1V0ZjgoYXJyb3dUeXBlKSB8fCBhcnJvdy5EYXRhVHlwZS5pc051bGwoYXJyb3dUeXBlKSkge1xuICAgIHJldHVybiBBbmFseXplckRBVEFfVFlQRVMuU1RSSU5HO1xuICB9IGVsc2UgaWYgKFxuICAgIGFycm93LkRhdGFUeXBlLmlzQmluYXJ5KGFycm93VHlwZSkgfHxcbiAgICBhcnJvdy5EYXRhVHlwZS5pc0RpY3Rpb25hcnkoYXJyb3dUeXBlKSB8fFxuICAgIGFycm93LkRhdGFUeXBlLmlzRml4ZWRTaXplQmluYXJ5KGFycm93VHlwZSkgfHxcbiAgICBhcnJvdy5EYXRhVHlwZS5pc0ZpeGVkU2l6ZUxpc3QoYXJyb3dUeXBlKSB8fFxuICAgIGFycm93LkRhdGFUeXBlLmlzTGlzdChhcnJvd1R5cGUpIHx8XG4gICAgYXJyb3cuRGF0YVR5cGUuaXNNYXAoYXJyb3dUeXBlKSB8fFxuICAgIGFycm93LkRhdGFUeXBlLmlzU3RydWN0KGFycm93VHlwZSlcbiAgKSB7XG4gICAgcmV0dXJuIEFuYWx5emVyREFUQV9UWVBFUy5PQkpFQ1Q7XG4gIH1cbiAgZ2xvYmFsQ29uc29sZS53YXJuKGBVbnN1cHBvcnRlZCBhcnJvdyB0eXBlOiAke2Fycm93VHlwZX1gKTtcbiAgcmV0dXJuIEFuYWx5emVyREFUQV9UWVBFUy5TVFJJTkc7XG59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