@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.
- package/dist/aggregation.d.ts +13 -0
- package/dist/aggregation.js +84 -0
- package/dist/application-config.d.ts +25 -0
- package/dist/application-config.js +52 -0
- package/dist/arrow-data-container.d.ts +62 -0
- package/dist/arrow-data-container.js +331 -0
- package/dist/color-utils.d.ts +108 -0
- package/dist/color-utils.js +443 -0
- package/dist/data-container-interface.d.ts +138 -0
- package/dist/data-container-interface.js +6 -0
- package/dist/data-container-utils.d.ts +30 -0
- package/dist/data-container-utils.js +74 -0
- package/dist/data-row.d.ts +59 -0
- package/dist/data-row.js +110 -0
- package/dist/data-scale-utils.d.ts +120 -0
- package/dist/data-scale-utils.js +340 -0
- package/dist/data-utils.d.ts +98 -0
- package/dist/data-utils.js +436 -0
- package/dist/dataset-utils.d.ts +45 -0
- package/dist/dataset-utils.js +313 -0
- package/dist/dom-to-image.d.ts +73 -0
- package/dist/dom-to-image.js +421 -0
- package/dist/dom-utils.d.ts +23 -0
- package/dist/dom-utils.js +349 -0
- package/dist/effect-utils.d.ts +24 -0
- package/dist/effect-utils.js +166 -0
- package/dist/export-map-html.d.ts +9 -0
- package/dist/export-map-html.js +25 -0
- package/dist/export-utils.d.ts +40 -0
- package/dist/export-utils.js +201 -0
- package/dist/filter-utils.d.ts +331 -0
- package/dist/filter-utils.js +1214 -0
- package/dist/format.d.ts +3 -0
- package/dist/format.js +38 -0
- package/dist/gl-utils.d.ts +1 -0
- package/dist/gl-utils.js +27 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.js +941 -0
- package/dist/indexed-data-container.d.ts +34 -0
- package/dist/indexed-data-container.js +214 -0
- package/dist/locale-utils.d.ts +2 -0
- package/dist/locale-utils.js +39 -0
- package/dist/map-info-utils.d.ts +1 -0
- package/dist/map-info-utils.js +14 -0
- package/dist/map-style-utils/mapbox-gl-style-editor.d.ts +57 -0
- package/dist/map-style-utils/mapbox-gl-style-editor.js +188 -0
- package/dist/map-style-utils/mapbox-utils.d.ts +14 -0
- package/dist/map-style-utils/mapbox-utils.js +51 -0
- package/dist/map-utils.d.ts +9 -0
- package/dist/map-utils.js +48 -0
- package/dist/mapbox-utils.d.ts +7 -0
- package/dist/mapbox-utils.js +19 -0
- package/dist/noop.d.ts +1 -0
- package/dist/noop.js +13 -0
- package/dist/notifications-utils.d.ts +42 -0
- package/dist/notifications-utils.js +69 -0
- package/dist/observe-dimensions.d.ts +15 -0
- package/dist/observe-dimensions.js +130 -0
- package/dist/plot.d.ts +131 -0
- package/dist/plot.js +615 -0
- package/dist/position-utils.d.ts +6 -0
- package/dist/position-utils.js +26 -0
- package/dist/projection-utils.d.ts +22 -0
- package/dist/projection-utils.js +83 -0
- package/dist/quick-insertion-sort.d.ts +12 -0
- package/dist/quick-insertion-sort.js +132 -0
- package/dist/row-data-container.d.ts +31 -0
- package/dist/row-data-container.js +206 -0
- package/dist/searcher-utils.d.ts +1 -0
- package/dist/searcher-utils.js +25 -0
- package/dist/split-map-utils.d.ts +32 -0
- package/dist/split-map-utils.js +99 -0
- package/dist/strings.d.ts +4 -0
- package/dist/strings.js +16 -0
- package/dist/time.d.ts +54 -0
- package/dist/time.js +325 -0
- package/dist/types.d.ts +18 -0
- package/dist/types.js +6 -0
- package/dist/utils.d.ts +104 -0
- package/dist/utils.js +241 -0
- package/package.json +6 -5
@@ -0,0 +1,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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
|