@kepler.gl/utils 3.0.0-alpha.0 → 3.0.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/aggregate-utils.js +1 -21
- package/dist/arrow-data-container.d.ts +54 -0
- package/dist/arrow-data-container.js +360 -0
- package/dist/color-utils.d.ts +8 -0
- package/dist/color-utils.js +38 -22
- package/dist/data-container-interface.d.ts +18 -0
- package/dist/data-container-interface.js +0 -20
- package/dist/data-container-utils.d.ts +1 -0
- package/dist/data-container-utils.js +10 -22
- package/dist/data-row.js +7 -22
- package/dist/data-scale-utils.js +7 -22
- package/dist/data-utils.d.ts +10 -12
- package/dist/data-utils.js +121 -63
- package/dist/dataset-utils.d.ts +13 -2
- package/dist/dataset-utils.js +85 -33
- package/dist/dom-to-image.d.ts +14 -14
- package/dist/dom-to-image.js +28 -89
- package/dist/dom-utils.d.ts +3 -0
- package/dist/dom-utils.js +33 -23
- package/dist/effect-utils.d.ts +23 -0
- package/dist/effect-utils.js +196 -0
- package/dist/export-map-html.js +7 -23
- package/dist/export-utils.js +12 -23
- package/dist/filter-utils.d.ts +11 -9
- package/dist/filter-utils.js +70 -55
- package/dist/format.d.ts +1 -0
- package/dist/format.js +17 -0
- package/dist/gl-utils.js +1 -21
- package/dist/h3-utils.d.ts +2 -1
- package/dist/h3-utils.js +9 -24
- package/dist/index.d.ts +16 -10
- package/dist/index.js +250 -558
- package/dist/indexed-data-container.js +1 -21
- package/dist/locale-utils.js +1 -21
- package/dist/map-info-utils.js +6 -22
- package/dist/map-style-utils/mapbox-gl-style-editor.d.ts +2 -1
- package/dist/map-style-utils/mapbox-gl-style-editor.js +8 -22
- package/dist/map-style-utils/mapbox-utils.js +7 -22
- package/dist/map-utils.d.ts +8 -2
- package/dist/map-utils.js +23 -26
- package/dist/mapbox-utils.js +7 -22
- package/dist/noop.d.ts +1 -0
- package/dist/noop.js +11 -0
- package/dist/notifications-utils.d.ts +14 -26
- package/dist/notifications-utils.js +8 -30
- package/dist/observe-dimensions.d.ts +1 -1
- package/dist/observe-dimensions.js +13 -29
- package/dist/plot.d.ts +6 -0
- package/dist/plot.js +31 -0
- package/dist/projection-utils.d.ts +9 -0
- package/dist/projection-utils.js +40 -22
- package/dist/row-data-container.js +1 -21
- package/dist/searcher-utils.js +7 -22
- package/dist/split-map-utils.d.ts +4 -1
- package/dist/split-map-utils.js +9 -23
- package/dist/time.d.ts +16 -0
- package/dist/time.js +89 -0
- package/dist/utils.d.ts +42 -10
- package/dist/utils.js +64 -26
- package/package.json +14 -13
package/dist/aggregate-utils.js
CHANGED
@@ -1,23 +1,3 @@
|
|
1
|
-
// Copyright (c) 2022 Uber Technologies, Inc.
|
2
|
-
//
|
3
|
-
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
-
// of this software and associated documentation files (the "Software"), to deal
|
5
|
-
// in the Software without restriction, including without limitation the rights
|
6
|
-
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
-
// copies of the Software, and to permit persons to whom the Software is
|
8
|
-
// furnished to do so, subject to the following conditions:
|
9
|
-
//
|
10
|
-
// The above copyright notice and this permission notice shall be included in
|
11
|
-
// all copies or substantial portions of the Software.
|
12
|
-
//
|
13
|
-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
-
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
-
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
-
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
-
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
-
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
-
// THE SOFTWARE.
|
20
|
-
|
21
1
|
"use strict";
|
22
2
|
|
23
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
@@ -92,4 +72,4 @@ function aggregate(data, technique) {
|
|
92
72
|
return data.length;
|
93
73
|
}
|
94
74
|
}
|
95
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
75
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hZ2dyZWdhdGUtdXRpbHMudHMiXSwibmFtZXMiOlsiZ2V0RnJlcXVlbmN5IiwiZGF0YSIsInJlZHVjZSIsInVuaXF1ZXMiLCJ2YWwiLCJnZXRNb2RlIiwib2NjdXIiLCJPYmplY3QiLCJrZXlzIiwicHJldiIsImtleSIsImFnZ3JlZ2F0ZSIsInRlY2huaXF1ZSIsIkFHR1JFR0FUSU9OX1RZUEVTIiwiYXZlcmFnZSIsImNvdW50VW5pcXVlIiwibGVuZ3RoIiwibW9kZSIsIm1heGltdW0iLCJtaW5pbXVtIiwibWVkaWFuIiwic3RkZXYiLCJzdW0iLCJ2YXJpYW5jZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR0E7O0FBQ0E7Ozs7OztBQUVPLElBQU1BLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUFDLElBQUk7QUFBQSxTQUM5QkEsSUFBSSxDQUFDQyxNQUFMLENBQ0UsVUFBQ0MsT0FBRCxFQUFVQyxHQUFWO0FBQUEsMkNBQ0tELE9BREwsNENBRUdDLEdBRkgsRUFFUyxDQUFDRCxPQUFPLENBQUNDLEdBQUQsQ0FBUCxJQUFnQixDQUFqQixJQUFzQixDQUYvQjtBQUFBLEdBREYsRUFLRSxFQUxGLENBRDhCO0FBQUEsQ0FBekI7Ozs7QUFTQSxJQUFNQyxPQUFPLEdBQUcsU0FBVkEsT0FBVSxDQUFBSixJQUFJLEVBQUk7QUFDN0IsTUFBTUssS0FBSyxHQUFHTixZQUFZLENBQUNDLElBQUQsQ0FBMUI7QUFDQSxTQUFPTSxNQUFNLENBQUNDLElBQVAsQ0FBWUYsS0FBWixFQUFtQkosTUFBbkIsQ0FDTCxVQUFDTyxJQUFELEVBQU9DLEdBQVA7QUFBQSxXQUFnQkosS0FBSyxDQUFDRyxJQUFELENBQUwsSUFBZUgsS0FBSyxDQUFDSSxHQUFELENBQXBCLEdBQTRCRCxJQUE1QixHQUFtQ0MsR0FBbkQ7QUFBQSxHQURLLEVBRUxILE1BQU0sQ0FBQ0MsSUFBUCxDQUFZRixLQUFaLEVBQW1CLENBQW5CLENBRkssQ0FBUDtBQUlELENBTk07Ozs7QUFRQSxTQUFTSyxTQUFULENBQW1CVixJQUFuQixFQUF5QlcsU0FBekIsRUFBb0M7QUFDekMsVUFBUUEsU0FBUjtBQUNFLFNBQUtDLDZCQUFrQkMsT0FBdkI7QUFDRSxhQUFPLG1CQUFLYixJQUFMLENBQVA7O0FBQ0YsU0FBS1ksNkJBQWtCRSxXQUF2QjtBQUNFLGFBQU9SLE1BQU0sQ0FBQ0MsSUFBUCxDQUNMUCxJQUFJLENBQUNDLE1BQUwsQ0FBWSxVQUFDQyxPQUFELEVBQVVDLEdBQVYsRUFBa0I7QUFDNUJELFFBQUFBLE9BQU8sQ0FBQ0MsR0FBRCxDQUFQLEdBQWVELE9BQU8sQ0FBQ0MsR0FBRCxDQUFQLElBQWdCLENBQS9CO0FBQ0FELFFBQUFBLE9BQU8sQ0FBQ0MsR0FBRCxDQUFQLElBQWdCLENBQWhCO0FBQ0EsZUFBT0QsT0FBUDtBQUNELE9BSkQsRUFJRyxFQUpILENBREssRUFNTGEsTUFORjs7QUFPRixTQUFLSCw2QkFBa0JJLElBQXZCO0FBQ0UsYUFBT1osT0FBTyxDQUFDSixJQUFELENBQWQ7O0FBRUYsU0FBS1ksNkJBQWtCSyxPQUF2QjtBQUNFLGFBQU8sa0JBQUlqQixJQUFKLENBQVA7O0FBQ0YsU0FBS1ksNkJBQWtCTSxPQUF2QjtBQUNFLGFBQU8sa0JBQUlsQixJQUFKLENBQVA7O0FBQ0YsU0FBS1ksNkJBQWtCTyxNQUF2QjtBQUNFLGFBQU8scUJBQU9uQixJQUFQLENBQVA7O0FBQ0YsU0FBS1ksNkJBQWtCUSxLQUF2QjtBQUNFLGFBQU8sd0JBQVVwQixJQUFWLENBQVA7O0FBQ0YsU0FBS1ksNkJBQWtCUyxHQUF2QjtBQUNFLGFBQU8sa0JBQUlyQixJQUFKLENBQVA7O0FBQ0YsU0FBS1ksNkJBQWtCVSxRQUF2QjtBQUNFLGFBQU8sdUJBQVN0QixJQUFULENBQVA7O0FBQ0Y7QUFDRSxhQUFPQSxJQUFJLENBQUNlLE1BQVo7QUEzQko7QUE2QkQiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2RldmlhdGlvbiwgbWluLCBtYXgsIG1lYW4sIG1lZGlhbiwgc3VtLCB2YXJpYW5jZX0gZnJvbSAnZDMtYXJyYXknO1xuaW1wb3J0IHtBR0dSRUdBVElPTl9UWVBFU30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgZ2V0RnJlcXVlbmN5ID0gZGF0YSA9PlxuICBkYXRhLnJlZHVjZShcbiAgICAodW5pcXVlcywgdmFsKSA9PiAoe1xuICAgICAgLi4udW5pcXVlcyxcbiAgICAgIFt2YWxdOiAodW5pcXVlc1t2YWxdIHx8IDApICsgMVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbmV4cG9ydCBjb25zdCBnZXRNb2RlID0gZGF0YSA9PiB7XG4gIGNvbnN0IG9jY3VyID0gZ2V0RnJlcXVlbmN5KGRhdGEpO1xuICByZXR1cm4gT2JqZWN0LmtleXMob2NjdXIpLnJlZHVjZShcbiAgICAocHJldiwga2V5KSA9PiAob2NjdXJbcHJldl0gPj0gb2NjdXJba2V5XSA/IHByZXYgOiBrZXkpLFxuICAgIE9iamVjdC5rZXlzKG9jY3VyKVswXVxuICApO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFnZ3JlZ2F0ZShkYXRhLCB0ZWNobmlxdWUpIHtcbiAgc3dpdGNoICh0ZWNobmlxdWUpIHtcbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLmF2ZXJhZ2U6XG4gICAgICByZXR1cm4gbWVhbihkYXRhKTtcbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLmNvdW50VW5pcXVlOlxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKFxuICAgICAgICBkYXRhLnJlZHVjZSgodW5pcXVlcywgdmFsKSA9PiB7XG4gICAgICAgICAgdW5pcXVlc1t2YWxdID0gdW5pcXVlc1t2YWxdIHx8IDA7XG4gICAgICAgICAgdW5pcXVlc1t2YWxdICs9IDE7XG4gICAgICAgICAgcmV0dXJuIHVuaXF1ZXM7XG4gICAgICAgIH0sIHt9KVxuICAgICAgKS5sZW5ndGg7XG4gICAgY2FzZSBBR0dSRUdBVElPTl9UWVBFUy5tb2RlOlxuICAgICAgcmV0dXJuIGdldE1vZGUoZGF0YSk7XG5cbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLm1heGltdW06XG4gICAgICByZXR1cm4gbWF4KGRhdGEpO1xuICAgIGNhc2UgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bTpcbiAgICAgIHJldHVybiBtaW4oZGF0YSk7XG4gICAgY2FzZSBBR0dSRUdBVElPTl9UWVBFUy5tZWRpYW46XG4gICAgICByZXR1cm4gbWVkaWFuKGRhdGEpO1xuICAgIGNhc2UgQUdHUkVHQVRJT05fVFlQRVMuc3RkZXY6XG4gICAgICByZXR1cm4gZGV2aWF0aW9uKGRhdGEpO1xuICAgIGNhc2UgQUdHUkVHQVRJT05fVFlQRVMuc3VtOlxuICAgICAgcmV0dXJuIHN1bShkYXRhKTtcbiAgICBjYXNlIEFHR1JFR0FUSU9OX1RZUEVTLnZhcmlhbmNlOlxuICAgICAgcmV0dXJuIHZhcmlhbmNlKGRhdGEpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZGF0YS5sZW5ndGg7XG4gIH1cbn1cbiJdfQ==
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import * as arrow from 'apache-arrow';
|
2
|
+
import { DATA_TYPES as AnalyzerDATA_TYPES } from 'type-analyzer';
|
3
|
+
import { Field } 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?: Field[];
|
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: Field[];
|
18
|
+
_numChunks: number;
|
19
|
+
constructor(data: ArrowDataContainerInput);
|
20
|
+
update(updateData: arrow.Vector<any>[]): void;
|
21
|
+
numChunks(): number;
|
22
|
+
numRows(): number;
|
23
|
+
numColumns(): number;
|
24
|
+
valueAt(rowIndex: number, columnIndex: number): any;
|
25
|
+
row(rowIndex: number, sharedRow?: SharedRowOptions): DataRow;
|
26
|
+
rowAsArray(rowIndex: number): any[];
|
27
|
+
rows(sharedRow: SharedRowOptions): any;
|
28
|
+
column(columnIndex: number): Generator<any, void, unknown>;
|
29
|
+
getColumn(columnIndex: number): arrow.Vector;
|
30
|
+
getField(columnIndex: number): Field;
|
31
|
+
flattenData(): any[][];
|
32
|
+
getPlainIndex(): number[];
|
33
|
+
map<T>(func: (row: DataRow, index: number) => T, sharedRow?: SharedRowOptions, options?: RangeOptions): T[];
|
34
|
+
mapIndex<T>(func: ({ index }: {
|
35
|
+
index: any;
|
36
|
+
}, dc: DataContainerInterface) => T, options?: RangeOptions): T[];
|
37
|
+
find(func: (row: DataRow, index: number) => boolean, sharedRow?: SharedRowOptions): DataRow | undefined;
|
38
|
+
reduce<T>(func: (acc: T, row: DataRow, index: number) => T, initialValue: T, sharedRow?: SharedRowOptions): T;
|
39
|
+
}
|
40
|
+
/**
|
41
|
+
* Convert arrow data type to kepler.gl field types
|
42
|
+
*
|
43
|
+
* @param arrowType the arrow data type
|
44
|
+
* @returns corresponding type in `ALL_FIELD_TYPES`
|
45
|
+
*/
|
46
|
+
export declare function arrowDataTypeToFieldType(arrowType: arrow.DataType): string;
|
47
|
+
/**
|
48
|
+
* Convert arrow data type to analyzer type
|
49
|
+
*
|
50
|
+
* @param arrowType the arrow data type
|
51
|
+
* @returns corresponding type in `AnalyzerDATA_TYPES`
|
52
|
+
*/
|
53
|
+
export declare function arrowDataTypeToAnalyzerDataType(arrowType: arrow.DataType): typeof AnalyzerDATA_TYPES;
|
54
|
+
export {};
|
@@ -0,0 +1,360 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
4
|
+
|
5
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
6
|
+
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
8
|
+
value: true
|
9
|
+
});
|
10
|
+
exports.arrowDataTypeToFieldType = arrowDataTypeToFieldType;
|
11
|
+
exports.arrowDataTypeToAnalyzerDataType = arrowDataTypeToAnalyzerDataType;
|
12
|
+
exports.ArrowDataContainer = void 0;
|
13
|
+
|
14
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
15
|
+
|
16
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
17
|
+
|
18
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
19
|
+
|
20
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
21
|
+
|
22
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
23
|
+
|
24
|
+
var arrow = _interopRequireWildcard(require("apache-arrow"));
|
25
|
+
|
26
|
+
var _window = require("global/window");
|
27
|
+
|
28
|
+
var _typeAnalyzer = require("type-analyzer");
|
29
|
+
|
30
|
+
var _constants = require("@kepler.gl/constants");
|
31
|
+
|
32
|
+
var _dataRow = require("./data-row");
|
33
|
+
|
34
|
+
var _marked = /*#__PURE__*/_regenerator["default"].mark(rowsIterator),
|
35
|
+
_marked2 = /*#__PURE__*/_regenerator["default"].mark(columnIterator);
|
36
|
+
|
37
|
+
/**
|
38
|
+
* @param dataContainer
|
39
|
+
* @param sharedRow
|
40
|
+
*/
|
41
|
+
function rowsIterator(dataContainer, sharedRow) {
|
42
|
+
var numRows, rowIndex;
|
43
|
+
return _regenerator["default"].wrap(function rowsIterator$(_context) {
|
44
|
+
while (1) {
|
45
|
+
switch (_context.prev = _context.next) {
|
46
|
+
case 0:
|
47
|
+
numRows = dataContainer.numRows();
|
48
|
+
rowIndex = 0;
|
49
|
+
|
50
|
+
case 2:
|
51
|
+
if (!(rowIndex < numRows)) {
|
52
|
+
_context.next = 8;
|
53
|
+
break;
|
54
|
+
}
|
55
|
+
|
56
|
+
_context.next = 5;
|
57
|
+
return dataContainer.row(rowIndex, sharedRow);
|
58
|
+
|
59
|
+
case 5:
|
60
|
+
++rowIndex;
|
61
|
+
_context.next = 2;
|
62
|
+
break;
|
63
|
+
|
64
|
+
case 8:
|
65
|
+
case "end":
|
66
|
+
return _context.stop();
|
67
|
+
}
|
68
|
+
}
|
69
|
+
}, _marked);
|
70
|
+
}
|
71
|
+
/**
|
72
|
+
* @param dataContainer
|
73
|
+
* @param columnIndex
|
74
|
+
*/
|
75
|
+
|
76
|
+
|
77
|
+
function columnIterator(dataContainer, columnIndex) {
|
78
|
+
var numRows, rowIndex;
|
79
|
+
return _regenerator["default"].wrap(function columnIterator$(_context2) {
|
80
|
+
while (1) {
|
81
|
+
switch (_context2.prev = _context2.next) {
|
82
|
+
case 0:
|
83
|
+
numRows = dataContainer.numRows();
|
84
|
+
rowIndex = 0;
|
85
|
+
|
86
|
+
case 2:
|
87
|
+
if (!(rowIndex < numRows)) {
|
88
|
+
_context2.next = 8;
|
89
|
+
break;
|
90
|
+
}
|
91
|
+
|
92
|
+
_context2.next = 5;
|
93
|
+
return dataContainer.valueAt(rowIndex, columnIndex);
|
94
|
+
|
95
|
+
case 5:
|
96
|
+
++rowIndex;
|
97
|
+
_context2.next = 2;
|
98
|
+
break;
|
99
|
+
|
100
|
+
case 8:
|
101
|
+
case "end":
|
102
|
+
return _context2.stop();
|
103
|
+
}
|
104
|
+
}
|
105
|
+
}, _marked2);
|
106
|
+
}
|
107
|
+
/**
|
108
|
+
* A data container where all data is stored in raw Arrow table
|
109
|
+
*/
|
110
|
+
|
111
|
+
|
112
|
+
var ArrowDataContainer = /*#__PURE__*/function () {
|
113
|
+
// cache column data to make valueAt() faster
|
114
|
+
// _colData: any[][];
|
115
|
+
function ArrowDataContainer(data) {
|
116
|
+
(0, _classCallCheck2["default"])(this, ArrowDataContainer);
|
117
|
+
(0, _defineProperty2["default"])(this, "_cols", void 0);
|
118
|
+
(0, _defineProperty2["default"])(this, "_numColumns", void 0);
|
119
|
+
(0, _defineProperty2["default"])(this, "_numRows", void 0);
|
120
|
+
(0, _defineProperty2["default"])(this, "_fields", void 0);
|
121
|
+
(0, _defineProperty2["default"])(this, "_numChunks", void 0);
|
122
|
+
|
123
|
+
if (!data.cols) {
|
124
|
+
throw Error('ArrowDataContainer: no columns provided');
|
125
|
+
}
|
126
|
+
|
127
|
+
if (!Array.isArray(data.cols)) {
|
128
|
+
throw Error("ArrowDataContainer: columns object isn't an array");
|
129
|
+
}
|
130
|
+
|
131
|
+
this._cols = data.cols;
|
132
|
+
this._numColumns = data.cols.length;
|
133
|
+
this._numRows = data.cols[0].length;
|
134
|
+
this._fields = data.fields || [];
|
135
|
+
this._numChunks = data.cols[0].data.length; // this._colData = data.cols.map(c => c.toArray());
|
136
|
+
}
|
137
|
+
|
138
|
+
(0, _createClass2["default"])(ArrowDataContainer, [{
|
139
|
+
key: "update",
|
140
|
+
value: function update(updateData) {
|
141
|
+
this._cols = updateData;
|
142
|
+
this._numColumns = this._cols.length;
|
143
|
+
this._numRows = this._cols[0].length;
|
144
|
+
this._numChunks = this._cols[0].data.length; // cache column data to make valueAt() faster
|
145
|
+
// this._colData = this._cols.map(c => c.toArray());
|
146
|
+
}
|
147
|
+
}, {
|
148
|
+
key: "numChunks",
|
149
|
+
value: function numChunks() {
|
150
|
+
return this._numChunks;
|
151
|
+
}
|
152
|
+
}, {
|
153
|
+
key: "numRows",
|
154
|
+
value: function numRows() {
|
155
|
+
return this._numRows;
|
156
|
+
}
|
157
|
+
}, {
|
158
|
+
key: "numColumns",
|
159
|
+
value: function numColumns() {
|
160
|
+
return this._numColumns;
|
161
|
+
}
|
162
|
+
}, {
|
163
|
+
key: "valueAt",
|
164
|
+
value: function valueAt(rowIndex, columnIndex) {
|
165
|
+
// return this._colData[columnIndex][rowIndex];
|
166
|
+
return this._cols[columnIndex].get(rowIndex);
|
167
|
+
}
|
168
|
+
}, {
|
169
|
+
key: "row",
|
170
|
+
value: function row(rowIndex, sharedRow) {
|
171
|
+
var tSharedRow = _dataRow.DataRow.createSharedRow(sharedRow);
|
172
|
+
|
173
|
+
if (tSharedRow) {
|
174
|
+
tSharedRow.setSource(this, rowIndex);
|
175
|
+
return tSharedRow;
|
176
|
+
}
|
177
|
+
|
178
|
+
return new _dataRow.DataRow(this, rowIndex);
|
179
|
+
}
|
180
|
+
}, {
|
181
|
+
key: "rowAsArray",
|
182
|
+
value: function rowAsArray(rowIndex) {
|
183
|
+
// return this._colData.map(col => col[rowIndex]);
|
184
|
+
return this._cols.map(function (col) {
|
185
|
+
return col.get(rowIndex);
|
186
|
+
});
|
187
|
+
}
|
188
|
+
}, {
|
189
|
+
key: "rows",
|
190
|
+
value: function rows(sharedRow) {
|
191
|
+
var tSharedRow = _dataRow.DataRow.createSharedRow(sharedRow);
|
192
|
+
|
193
|
+
return rowsIterator(this, tSharedRow);
|
194
|
+
}
|
195
|
+
}, {
|
196
|
+
key: "column",
|
197
|
+
value: function column(columnIndex) {
|
198
|
+
return columnIterator(this, columnIndex);
|
199
|
+
}
|
200
|
+
}, {
|
201
|
+
key: "getColumn",
|
202
|
+
value: function getColumn(columnIndex) {
|
203
|
+
return this._cols[columnIndex];
|
204
|
+
}
|
205
|
+
}, {
|
206
|
+
key: "getField",
|
207
|
+
value: function getField(columnIndex) {
|
208
|
+
return this._fields[columnIndex];
|
209
|
+
}
|
210
|
+
}, {
|
211
|
+
key: "flattenData",
|
212
|
+
value: function flattenData() {
|
213
|
+
var data = [];
|
214
|
+
|
215
|
+
for (var i = 0; i < this._numRows; ++i) {
|
216
|
+
data.push(this.rowAsArray(i));
|
217
|
+
}
|
218
|
+
|
219
|
+
return data;
|
220
|
+
}
|
221
|
+
}, {
|
222
|
+
key: "getPlainIndex",
|
223
|
+
value: function getPlainIndex() {
|
224
|
+
return (0, _toConsumableArray2["default"])(Array(this._numRows).keys());
|
225
|
+
}
|
226
|
+
}, {
|
227
|
+
key: "map",
|
228
|
+
value: function map(func, sharedRow) {
|
229
|
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
230
|
+
|
231
|
+
var tSharedRow = _dataRow.DataRow.createSharedRow(sharedRow);
|
232
|
+
|
233
|
+
var _options$start = options.start,
|
234
|
+
start = _options$start === void 0 ? 0 : _options$start,
|
235
|
+
_options$end = options.end,
|
236
|
+
end = _options$end === void 0 ? this.numRows() : _options$end;
|
237
|
+
var endRow = Math.min(this.numRows(), end);
|
238
|
+
var out = [];
|
239
|
+
|
240
|
+
for (var rowIndex = start; rowIndex < endRow; ++rowIndex) {
|
241
|
+
var _row = this.row(rowIndex, tSharedRow);
|
242
|
+
|
243
|
+
out.push(func(_row, rowIndex));
|
244
|
+
}
|
245
|
+
|
246
|
+
return out;
|
247
|
+
}
|
248
|
+
}, {
|
249
|
+
key: "mapIndex",
|
250
|
+
value: function mapIndex(func) {
|
251
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
252
|
+
var _options$start2 = options.start,
|
253
|
+
start = _options$start2 === void 0 ? 0 : _options$start2,
|
254
|
+
_options$end2 = options.end,
|
255
|
+
end = _options$end2 === void 0 ? this.numRows() : _options$end2;
|
256
|
+
var endRow = Math.min(this.numRows(), end);
|
257
|
+
var out = [];
|
258
|
+
|
259
|
+
for (var rowIndex = start; rowIndex < endRow; ++rowIndex) {
|
260
|
+
out.push(func({
|
261
|
+
index: rowIndex
|
262
|
+
}, this));
|
263
|
+
}
|
264
|
+
|
265
|
+
return out;
|
266
|
+
}
|
267
|
+
}, {
|
268
|
+
key: "find",
|
269
|
+
value: function find(func, sharedRow) {
|
270
|
+
var tSharedRow = _dataRow.DataRow.createSharedRow(sharedRow);
|
271
|
+
|
272
|
+
for (var rowIndex = 0; rowIndex < this._numRows; ++rowIndex) {
|
273
|
+
var _row2 = this.row(rowIndex, tSharedRow);
|
274
|
+
|
275
|
+
if (func(_row2, rowIndex)) {
|
276
|
+
return _row2;
|
277
|
+
}
|
278
|
+
}
|
279
|
+
|
280
|
+
return undefined;
|
281
|
+
}
|
282
|
+
}, {
|
283
|
+
key: "reduce",
|
284
|
+
value: function reduce(func, initialValue, sharedRow) {
|
285
|
+
var tSharedRow = _dataRow.DataRow.createSharedRow(sharedRow);
|
286
|
+
|
287
|
+
for (var rowIndex = 0; rowIndex < this._numRows; ++rowIndex) {
|
288
|
+
var _row3 = this.row(rowIndex, tSharedRow);
|
289
|
+
|
290
|
+
initialValue = func(initialValue, _row3, rowIndex);
|
291
|
+
}
|
292
|
+
|
293
|
+
return initialValue;
|
294
|
+
}
|
295
|
+
}]);
|
296
|
+
return ArrowDataContainer;
|
297
|
+
}();
|
298
|
+
/**
|
299
|
+
* Convert arrow data type to kepler.gl field types
|
300
|
+
*
|
301
|
+
* @param arrowType the arrow data type
|
302
|
+
* @returns corresponding type in `ALL_FIELD_TYPES`
|
303
|
+
*/
|
304
|
+
|
305
|
+
|
306
|
+
exports.ArrowDataContainer = ArrowDataContainer;
|
307
|
+
|
308
|
+
function arrowDataTypeToFieldType(arrowType) {
|
309
|
+
// Note: this function doesn't return ALL_FIELD_TYPES.geojson or ALL_FIELD_TYPES.array, which
|
310
|
+
// should be further detected by caller
|
311
|
+
if (arrow.DataType.isDate(arrowType)) {
|
312
|
+
return _constants.ALL_FIELD_TYPES.date;
|
313
|
+
} else if (arrow.DataType.isTimestamp(arrowType) || arrow.DataType.isTime(arrowType)) {
|
314
|
+
return _constants.ALL_FIELD_TYPES.timestamp;
|
315
|
+
} else if (arrow.DataType.isFloat(arrowType)) {
|
316
|
+
return _constants.ALL_FIELD_TYPES.real;
|
317
|
+
} else if (arrow.DataType.isInt(arrowType)) {
|
318
|
+
return _constants.ALL_FIELD_TYPES.integer;
|
319
|
+
} else if (arrow.DataType.isBool(arrowType)) {
|
320
|
+
return _constants.ALL_FIELD_TYPES["boolean"];
|
321
|
+
} else if (arrow.DataType.isUtf8(arrowType) || arrow.DataType.isNull(arrowType)) {
|
322
|
+
return _constants.ALL_FIELD_TYPES.string;
|
323
|
+
} 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)) {
|
324
|
+
return _constants.ALL_FIELD_TYPES.object;
|
325
|
+
} else {
|
326
|
+
_window.console.warn("Unsupported arrow type: ".concat(arrowType));
|
327
|
+
|
328
|
+
return _constants.ALL_FIELD_TYPES.string;
|
329
|
+
}
|
330
|
+
}
|
331
|
+
/**
|
332
|
+
* Convert arrow data type to analyzer type
|
333
|
+
*
|
334
|
+
* @param arrowType the arrow data type
|
335
|
+
* @returns corresponding type in `AnalyzerDATA_TYPES`
|
336
|
+
*/
|
337
|
+
|
338
|
+
|
339
|
+
function arrowDataTypeToAnalyzerDataType(arrowType) {
|
340
|
+
if (arrow.DataType.isDate(arrowType)) {
|
341
|
+
return _typeAnalyzer.DATA_TYPES.DATE;
|
342
|
+
} else if (arrow.DataType.isTimestamp(arrowType) || arrow.DataType.isTime(arrowType)) {
|
343
|
+
return _typeAnalyzer.DATA_TYPES.DATETIME;
|
344
|
+
} else if (arrow.DataType.isFloat(arrowType)) {
|
345
|
+
return _typeAnalyzer.DATA_TYPES.FLOAT;
|
346
|
+
} else if (arrow.DataType.isInt(arrowType)) {
|
347
|
+
return _typeAnalyzer.DATA_TYPES.INT;
|
348
|
+
} else if (arrow.DataType.isBool(arrowType)) {
|
349
|
+
return _typeAnalyzer.DATA_TYPES.BOOLEAN;
|
350
|
+
} else if (arrow.DataType.isUtf8(arrowType) || arrow.DataType.isNull(arrowType)) {
|
351
|
+
return _typeAnalyzer.DATA_TYPES.STRING;
|
352
|
+
} 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)) {
|
353
|
+
return _typeAnalyzer.DATA_TYPES.OBJECT;
|
354
|
+
} else {
|
355
|
+
_window.console.warn("Unsupported arrow type: ".concat(arrowType));
|
356
|
+
|
357
|
+
return _typeAnalyzer.DATA_TYPES.STRING;
|
358
|
+
}
|
359
|
+
}
|
360
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hcnJvdy1kYXRhLWNvbnRhaW5lci50cyJdLCJuYW1lcyI6WyJyb3dzSXRlcmF0b3IiLCJjb2x1bW5JdGVyYXRvciIsImRhdGFDb250YWluZXIiLCJzaGFyZWRSb3ciLCJudW1Sb3dzIiwicm93SW5kZXgiLCJyb3ciLCJjb2x1bW5JbmRleCIsInZhbHVlQXQiLCJBcnJvd0RhdGFDb250YWluZXIiLCJkYXRhIiwiY29scyIsIkVycm9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX2NvbHMiLCJfbnVtQ29sdW1ucyIsImxlbmd0aCIsIl9udW1Sb3dzIiwiX2ZpZWxkcyIsImZpZWxkcyIsIl9udW1DaHVua3MiLCJ1cGRhdGVEYXRhIiwiZ2V0IiwidFNoYXJlZFJvdyIsIkRhdGFSb3ciLCJjcmVhdGVTaGFyZWRSb3ciLCJzZXRTb3VyY2UiLCJtYXAiLCJjb2wiLCJpIiwicHVzaCIsInJvd0FzQXJyYXkiLCJrZXlzIiwiZnVuYyIsIm9wdGlvbnMiLCJzdGFydCIsImVuZCIsImVuZFJvdyIsIk1hdGgiLCJtaW4iLCJvdXQiLCJpbmRleCIsInVuZGVmaW5lZCIsImluaXRpYWxWYWx1ZSIsImFycm93RGF0YVR5cGVUb0ZpZWxkVHlwZSIsImFycm93VHlwZSIsImFycm93IiwiRGF0YVR5cGUiLCJpc0RhdGUiLCJBTExfRklFTERfVFlQRVMiLCJkYXRlIiwiaXNUaW1lc3RhbXAiLCJpc1RpbWUiLCJ0aW1lc3RhbXAiLCJpc0Zsb2F0IiwicmVhbCIsImlzSW50IiwiaW50ZWdlciIsImlzQm9vbCIsImlzVXRmOCIsImlzTnVsbCIsInN0cmluZyIsImlzQmluYXJ5IiwiaXNEaWN0aW9uYXJ5IiwiaXNGaXhlZFNpemVCaW5hcnkiLCJpc0ZpeGVkU2l6ZUxpc3QiLCJpc0xpc3QiLCJpc01hcCIsImlzU3RydWN0Iiwib2JqZWN0IiwiZ2xvYmFsQ29uc29sZSIsIndhcm4iLCJhcnJvd0RhdGFUeXBlVG9BbmFseXplckRhdGFUeXBlIiwiQW5hbHl6ZXJEQVRBX1RZUEVTIiwi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QkFBbUJNLE1BQTFCO0FBQ0Q7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCAqIGFzIGFycm93IGZyb20gJ2FwYWNoZS1hcnJvdyc7XG5pbXBvcnQge2NvbnNvbGUgYXMgZ2xvYmFsQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQge0RBVEFfVFlQRVMgYXMgQW5hbHl6ZXJEQVRBX1RZUEVTfSBmcm9tICd0eXBlLWFuYWx5emVyJztcbmltcG9ydCB7RmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtBTExfRklFTERfVFlQRVN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IHtEYXRhUm93LCBTaGFyZWRSb3dPcHRpb25zfSBmcm9tICcuL2RhdGEtcm93JztcbmltcG9ydCB7RGF0YUNvbnRhaW5lckludGVyZmFjZSwgUmFuZ2VPcHRpb25zfSBmcm9tICcuL2RhdGEtY29udGFpbmVyLWludGVyZmFjZSc7XG5cbnR5cGUgQXJyb3dEYXRhQ29udGFpbmVySW5wdXQgPSB7XG4gIGNvbHM6IGFycm93LlZlY3RvcltdO1xuICBmaWVsZHM/OiBGaWVsZFtdO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gZGF0YUNvbnRhaW5lclxuICogQHBhcmFtIHNoYXJlZFJvd1xuICovXG5mdW5jdGlvbiogcm93c0l0ZXJhdG9yKGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsIHNoYXJlZFJvdzogU2hhcmVkUm93T3B0aW9ucykge1xuICBjb25zdCBudW1Sb3dzID0gZGF0YUNvbnRhaW5lci5udW1Sb3dzKCk7XG4gIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCBudW1Sb3dzOyArK3Jvd0luZGV4KSB7XG4gICAgeWllbGQgZGF0YUNvbnRhaW5lci5yb3cocm93SW5kZXgsIHNoYXJlZFJvdyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gZGF0YUNvbnRhaW5lclxuICogQHBhcmFtIGNvbHVtbkluZGV4XG4gKi9cbmZ1bmN0aW9uKiBjb2x1bW5JdGVyYXRvcihkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLCBjb2x1bW5JbmRleDogbnVtYmVyKSB7XG4gIGNvbnN0IG51bVJvd3MgPSBkYXRhQ29udGFpbmVyLm51bVJvd3MoKTtcbiAgZm9yIChsZXQgcm93SW5kZXggPSAwOyByb3dJbmRleCA8IG51bVJvd3M7ICsrcm93SW5kZXgpIHtcbiAgICB5aWVsZCBkYXRhQ29udGFpbmVyLnZhbHVlQXQocm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgZGF0YSBjb250YWluZXIgd2hlcmUgYWxsIGRhdGEgaXMgc3RvcmVkIGluIHJhdyBBcnJvdyB0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgQXJyb3dEYXRhQ29udGFpbmVyIGltcGxlbWVudHMgRGF0YUNvbnRhaW5lckludGVyZmFjZSB7XG4gIF9jb2xzOiBhcnJvdy5WZWN0b3JbXTtcbiAgX251bUNvbHVtbnM6IG51bWJlcjtcbiAgX251bVJvd3M6IG51bWJlcjtcbiAgX2ZpZWxkczogRmllbGRbXTtcbiAgX251bUNodW5rczogbnVtYmVyO1xuICAvLyBjYWNoZSBjb2x1bW4gZGF0YSB0byBtYWtlIHZhbHVlQXQoKSBmYXN0ZXJcbiAgLy8gX2NvbERhdGE6IGFueVtdW107XG5cbiAgY29uc3RydWN0b3IoZGF0YTogQXJyb3dEYXRhQ29udGFpbmVySW5wdXQpIHtcbiAgICBpZiAoIWRhdGEuY29scykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0Fycm93RGF0YUNvbnRhaW5lcjogbm8gY29sdW1ucyBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhLmNvbHMpKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIkFycm93RGF0YUNvbnRhaW5lcjogY29sdW1ucyBvYmplY3QgaXNuJ3QgYW4gYXJyYXlcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fY29scyA9IGRhdGEuY29scztcbiAgICB0aGlzLl9udW1Db2x1bW5zID0gZGF0YS5jb2xzLmxlbmd0aDtcbiAgICB0aGlzLl9udW1Sb3dzID0gZGF0YS5jb2xzWzBdLmxlbmd0aDtcbiAgICB0aGlzLl9maWVsZHMgPSBkYXRhLmZpZWxkcyB8fCBbXTtcbiAgICB0aGlzLl9udW1DaHVua3MgPSBkYXRhLmNvbHNbMF0uZGF0YS5sZW5ndGg7XG4gICAgLy8gdGhpcy5fY29sRGF0YSA9IGRhdGEuY29scy5tYXAoYyA9PiBjLnRvQXJyYXkoKSk7XG4gIH1cblxuICB1cGRhdGUodXBkYXRlRGF0YTogYXJyb3cuVmVjdG9yPGFueT5bXSkge1xuICAgIHRoaXMuX2NvbHMgPSB1cGRhdGVEYXRhO1xuICAgIHRoaXMuX251bUNvbHVtbnMgPSB0aGlzLl9jb2xzLmxlbmd0aDtcbiAgICB0aGlzLl9udW1Sb3dzID0gdGhpcy5fY29sc1swXS5sZW5ndGg7XG4gICAgdGhpcy5fbnVtQ2h1bmtzID0gdGhpcy5fY29sc1swXS5kYXRhLmxlbmd0aDtcbiAgICAvLyBjYWNoZSBjb2x1bW4gZGF0YSB0byBtYWtlIHZhbHVlQXQoKSBmYXN0ZXJcbiAgICAvLyB0aGlzLl9jb2xEYXRhID0gdGhpcy5fY29scy5tYXAoYyA9PiBjLnRvQXJyYXkoKSk7XG4gIH1cblxuICBudW1DaHVua3MoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbnVtQ2h1bmtzO1xuICB9XG5cbiAgbnVtUm93cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9udW1Sb3dzO1xuICB9XG5cbiAgbnVtQ29sdW1ucygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9udW1Db2x1bW5zO1xuICB9XG5cbiAgdmFsdWVBdChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTogYW55IHtcbiAgICAvLyByZXR1cm4gdGhpcy5fY29sRGF0YVtjb2x1bW5JbmRleF1bcm93SW5kZXhdO1xuICAgIHJldHVybiB0aGlzLl9jb2xzW2NvbHVtbkluZGV4XS5nZXQocm93SW5kZXgpO1xuICB9XG5cbiAgcm93KHJvd0luZGV4OiBudW1iZXIsIHNoYXJlZFJvdz86IFNoYXJlZFJvd09wdGlvbnMpOiBEYXRhUm93IHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3coc2hhcmVkUm93KTtcbiAgICBpZiAodFNoYXJlZFJvdykge1xuICAgICAgdFNoYXJlZFJvdy5zZXRTb3VyY2UodGhpcywgcm93SW5kZXgpO1xuICAgICAgcmV0dXJuIHRTaGFyZWRSb3c7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEYXRhUm93KHRoaXMsIHJvd0luZGV4KTtcbiAgfVxuXG4gIHJvd0FzQXJyYXkocm93SW5kZXg6IG51bWJlcik6IGFueVtdIHtcbiAgICAvLyByZXR1cm4gdGhpcy5fY29sRGF0YS5tYXAoY29sID0+IGNvbFtyb3dJbmRleF0pO1xuICAgIHJldHVybiB0aGlzLl9jb2xzLm1hcChjb2wgPT4gY29sLmdldChyb3dJbmRleCkpO1xuICB9XG5cbiAgcm93cyhzaGFyZWRSb3c6IFNoYXJlZFJvd09wdGlvbnMpIHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3coc2hhcmVkUm93KTtcbiAgICByZXR1cm4gcm93c0l0ZXJhdG9yKHRoaXMsIHRTaGFyZWRSb3cpO1xuICB9XG5cbiAgY29sdW1uKGNvbHVtbkluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gY29sdW1uSXRlcmF0b3IodGhpcywgY29sdW1uSW5kZXgpO1xuICB9XG5cbiAgZ2V0Q29sdW1uKGNvbHVtbkluZGV4OiBudW1iZXIpOiBhcnJvdy5WZWN0b3Ige1xuICAgIHJldHVybiB0aGlzLl9jb2xzW2NvbHVtbkluZGV4XTtcbiAgfVxuXG4gIGdldEZpZWxkKGNvbHVtbkluZGV4OiBudW1iZXIpOiBGaWVsZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkc1tjb2x1bW5JbmRleF07XG4gIH1cblxuICBmbGF0dGVuRGF0YSgpOiBhbnlbXVtdIHtcbiAgICBjb25zdCBkYXRhOiBhbnlbXVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9udW1Sb3dzOyArK2kpIHtcbiAgICAgIGRhdGEucHVzaCh0aGlzLnJvd0FzQXJyYXkoaSkpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGdldFBsYWluSW5kZXgoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiBbLi4uQXJyYXkodGhpcy5fbnVtUm93cykua2V5cygpXTtcbiAgfVxuXG4gIG1hcDxUPihcbiAgICBmdW5jOiAocm93OiBEYXRhUm93LCBpbmRleDogbnVtYmVyKSA9PiBULFxuICAgIHNoYXJlZFJvdz86IFNoYXJlZFJvd09wdGlvbnMsXG4gICAgb3B0aW9uczogUmFuZ2VPcHRpb25zID0ge31cbiAgKTogVFtdIHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3coc2hhcmVkUm93KTtcblxuICAgIGNvbnN0IHtzdGFydCA9IDAsIGVuZCA9IHRoaXMubnVtUm93cygpfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgZW5kUm93ID0gTWF0aC5taW4odGhpcy5udW1Sb3dzKCksIGVuZCk7XG5cbiAgICBjb25zdCBvdXQ6IFRbXSA9IFtdO1xuICAgIGZvciAobGV0IHJvd0luZGV4ID0gc3RhcnQ7IHJvd0luZGV4IDwgZW5kUm93OyArK3Jvd0luZGV4KSB7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLnJvdyhyb3dJbmRleCwgdFNoYXJlZFJvdyk7XG4gICAgICBvdXQucHVzaChmdW5jKHJvdywgcm93SW5kZXgpKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIG1hcEluZGV4PFQ+KGZ1bmM6ICh7aW5kZXh9LCBkYzogRGF0YUNvbnRhaW5lckludGVyZmFjZSkgPT4gVCwgb3B0aW9uczogUmFuZ2VPcHRpb25zID0ge30pOiBUW10ge1xuICAgIGNvbnN0IHtzdGFydCA9IDAsIGVuZCA9IHRoaXMubnVtUm93cygpfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgZW5kUm93ID0gTWF0aC5taW4odGhpcy5udW1Sb3dzKCksIGVuZCk7XG5cbiAgICBjb25zdCBvdXQ6IFRbXSA9IFtdO1xuICAgIGZvciAobGV0IHJvd0luZGV4ID0gc3RhcnQ7IHJvd0luZGV4IDwgZW5kUm93OyArK3Jvd0luZGV4KSB7XG4gICAgICBvdXQucHVzaChmdW5jKHtpbmRleDogcm93SW5kZXh9LCB0aGlzKSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmaW5kKFxuICAgIGZ1bmM6IChyb3c6IERhdGFSb3csIGluZGV4OiBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgc2hhcmVkUm93PzogU2hhcmVkUm93T3B0aW9uc1xuICApOiBEYXRhUm93IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3coc2hhcmVkUm93KTtcblxuICAgIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCB0aGlzLl9udW1Sb3dzOyArK3Jvd0luZGV4KSB7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLnJvdyhyb3dJbmRleCwgdFNoYXJlZFJvdyk7XG4gICAgICBpZiAoZnVuYyhyb3csIHJvd0luZGV4KSkge1xuICAgICAgICByZXR1cm4gcm93O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmVkdWNlPFQ+KFxuICAgIGZ1bmM6IChhY2M6IFQsIHJvdzogRGF0YVJvdywgaW5kZXg6IG51bWJlcikgPT4gVCxcbiAgICBpbml0aWFsVmFsdWU6IFQsXG4gICAgc2hhcmVkUm93PzogU2hhcmVkUm93T3B0aW9uc1xuICApOiBUIHtcbiAgICBjb25zdCB0U2hhcmVkUm93ID0gRGF0YVJvdy5jcmVhdGVTaGFyZWRSb3coc2hhcmVkUm93KTtcblxuICAgIGZvciAobGV0IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCB0aGlzLl9udW1Sb3dzOyArK3Jvd0luZGV4KSB7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLnJvdyhyb3dJbmRleCwgdFNoYXJlZFJvdyk7XG4gICAgICBpbml0aWFsVmFsdWUgPSBmdW5jKGluaXRpYWxWYWx1ZSwgcm93LCByb3dJbmRleCk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsVmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFycm93IGRhdGEgdHlwZSB0byBrZXBsZXIuZ2wgZmllbGQgdHlwZXNcbiAqXG4gKiBAcGFyYW0gYXJyb3dUeXBlIHRoZSBhcnJvdyBkYXRhIHR5cGVcbiAqIEByZXR1cm5zIGNvcnJlc3BvbmRpbmcgdHlwZSBpbiBgQUxMX0ZJRUxEX1RZUEVTYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyb3dEYXRhVHlwZVRvRmllbGRUeXBlKGFycm93VHlwZTogYXJyb3cuRGF0YVR5cGUpOiBzdHJpbmcge1xuICAvLyBOb3RlOiB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5nZW9qc29uIG9yIEFMTF9GSUVMRF9UWVBFUy5hcnJheSwgd2hpY2hcbiAgLy8gc2hvdWxkIGJlIGZ1cnRoZXIgZGV0ZWN0ZWQgYnkgY2FsbGVyXG4gIGlmIChhcnJvdy5EYXRhVHlwZS5pc0RhdGUoYXJyb3dUeXBlKSkge1xuICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuZGF0ZTtcbiAgfSBlbHNlIGlmIChhcnJvdy5EYXRhVHlwZS5pc1RpbWVzdGFtcChhcnJvd1R5cGUpIHx8IGFycm93LkRhdGFUeXBlLmlzVGltZShhcnJvd1R5cGUpKSB7XG4gICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXA7XG4gIH0gZWxzZSBpZiAoYXJyb3cuRGF0YVR5cGUuaXNGbG9hdChhcnJvd1R5cGUpKSB7XG4gICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5yZWFsO1xuICB9IGVsc2UgaWYgKGFycm93LkRhdGFUeXBlLmlzSW50KGFycm93VHlwZSkpIHtcbiAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI7XG4gIH0gZWxzZSBpZiAoYXJyb3cuRGF0YVR5cGUuaXNCb29sKGFycm93VHlwZSkpIHtcbiAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW47XG4gIH0gZWxzZSBpZiAoYXJyb3cuRGF0YVR5cGUuaXNVdGY4KGFycm93VHlwZSkgfHwgYXJyb3cuRGF0YVR5cGUuaXNOdWxsKGFycm93VHlwZSkpIHtcbiAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLnN0cmluZztcbiAgfSBlbHNlIGlmIChcbiAgICBhcnJvdy5EYXRhVHlwZS5pc0JpbmFyeShhcnJvd1R5cGUpIHx8XG4gICAgYXJyb3cuRGF0YVR5cGUuaXNEaWN0aW9uYXJ5KGFycm93VHlwZSkgfHxcbiAgICBhcnJvdy5EYXRhVHlwZS5pc0ZpeGVkU2l6ZUJpbmFyeShhcnJvd1R5cGUpIHx8XG4gICAgYXJyb3cuRGF0YVR5cGUuaXNGaXhlZFNpemVMaXN0KGFycm93VHlwZSkgfHxcbiAgICBhcnJvdy5EYXRhVHlwZS5pc0xpc3QoYXJyb3dUeXBlKSB8fFxuICAgIGFycm93LkRhdGFUeXBlLmlzTWFwKGFycm93VHlwZSkgfHxcbiAgICBhcnJvdy5EYXRhVHlwZS5pc1N0cnVjdChhcnJvd1R5cGUpXG4gICkge1xuICAgIHJldHVybiBBTExfRklFTERfVFlQRVMub2JqZWN0O1xuICB9IGVsc2Uge1xuICAgIGdsb2JhbENvbnNvbGUud2FybihgVW5zdXBwb3J0ZWQgYXJyb3cgdHlwZTogJHthcnJvd1R5cGV9YCk7XG4gICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5zdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFycm93IGRhdGEgdHlwZSB0byBhbmFseXplciB0eXBlXG4gKlxuICogQHBhcmFtIGFycm93VHlwZSB0aGUgYXJyb3cgZGF0YSB0eXBlXG4gKiBAcmV0dXJucyBjb3JyZXNwb25kaW5nIHR5cGUgaW4gYEFuYWx5emVyREFUQV9UWVBFU2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFycm93RGF0YVR5cGVUb0FuYWx5emVyRGF0YVR5cGUoXG4gIGFycm93VHlwZTogYXJyb3cuRGF0YVR5cGVcbik6IHR5cGVvZiBBbmFseXplckRBVEFfVFlQRVMge1xuICBpZiAoYXJyb3cuRGF0YVR5cGUuaXNEYXRlKGFycm93VHlwZSkpIHtcbiAgICByZXR1cm4gQW5hbHl6ZXJEQVRBX1RZUEVTLkRBVEU7XG4gIH0gZWxzZSBpZiAoYXJyb3cuRGF0YVR5cGUuaXNUaW1lc3RhbXAoYXJyb3dUeXBlKSB8fCBhcnJvdy5EYXRhVHlwZS5pc1RpbWUoYXJyb3dUeXBlKSkge1xuICAgIHJldHVybiBBbmFseXplckRBVEFfVFlQRVMuREFURVRJTUU7XG4gIH0gZWxzZSBpZiAoYXJyb3cuRGF0YVR5cGUuaXNGbG9hdChhcnJvd1R5cGUpKSB7XG4gICAgcmV0dXJuIEFuYWx5emVyREFUQV9UWVBFUy5GTE9BVDtcbiAgfSBlbHNlIGlmIChhcnJvdy5EYXRhVHlwZS5pc0ludChhcnJvd1R5cGUpKSB7XG4gICAgcmV0dXJuIEFuYWx5emVyREFUQV9UWVBFUy5JTlQ7XG4gIH0gZWxzZSBpZiAoYXJyb3cuRGF0YVR5cGUuaXNCb29sKGFycm93VHlwZSkpIHtcbiAgICByZXR1cm4gQW5hbHl6ZXJEQVRBX1RZUEVTLkJPT0xFQU47XG4gIH0gZWxzZSBpZiAoYXJyb3cuRGF0YVR5cGUuaXNVdGY4KGFycm93VHlwZSkgfHwgYXJyb3cuRGF0YVR5cGUuaXNOdWxsKGFycm93VHlwZSkpIHtcbiAgICByZXR1cm4gQW5hbHl6ZXJEQVRBX1RZUEVTLlNUUklORztcbiAgfSBlbHNlIGlmIChcbiAgICBhcnJvdy5EYXRhVHlwZS5pc0JpbmFyeShhcnJvd1R5cGUpIHx8XG4gICAgYXJyb3cuRGF0YVR5cGUuaXNEaWN0aW9uYXJ5KGFycm93VHlwZSkgfHxcbiAgICBhcnJvdy5EYXRhVHlwZS5pc0ZpeGVkU2l6ZUJpbmFyeShhcnJvd1R5cGUpIHx8XG4gICAgYXJyb3cuRGF0YVR5cGUuaXNGaXhlZFNpemVMaXN0KGFycm93VHlwZSkgfHxcbiAgICBhcnJvdy5EYXRhVHlwZS5pc0xpc3QoYXJyb3dUeXBlKSB8fFxuICAgIGFycm93LkRhdGFUeXBlLmlzTWFwKGFycm93VHlwZSkgfHxcbiAgICBhcnJvdy5EYXRhVHlwZS5pc1N0cnVjdChhcnJvd1R5cGUpXG4gICkge1xuICAgIHJldHVybiBBbmFseXplckRBVEFfVFlQRVMuT0JKRUNUO1xuICB9IGVsc2Uge1xuICAgIGdsb2JhbENvbnNvbGUud2FybihgVW5zdXBwb3J0ZWQgYXJyb3cgdHlwZTogJHthcnJvd1R5cGV9YCk7XG4gICAgcmV0dXJuIEFuYWx5emVyREFUQV9UWVBFUy5TVFJJTkc7XG4gIH1cbn1cbiJdfQ==
|
package/dist/color-utils.d.ts
CHANGED
@@ -36,8 +36,16 @@ export declare function reverseColorRange(reversed: boolean, colorRange: ColorRa
|
|
36
36
|
* @return
|
37
37
|
*/
|
38
38
|
export declare function createLinearGradient(direction: string, colors: RGBColor[]): string;
|
39
|
+
/**
|
40
|
+
* Convert color to RGB
|
41
|
+
*/
|
42
|
+
export declare function colorMaybeToRGB(color: unknown): RGBColor | null;
|
39
43
|
/**
|
40
44
|
* Whether color is rgb
|
41
45
|
* @returns
|
42
46
|
*/
|
43
47
|
export declare function isRgbColor(color: unknown): boolean;
|
48
|
+
/**
|
49
|
+
* Take color values in 0-255 range and map to [0, 1]
|
50
|
+
*/
|
51
|
+
export declare function normalizeColor(color: number[]): number[];
|
package/dist/color-utils.js
CHANGED
@@ -1,23 +1,3 @@
|
|
1
|
-
// Copyright (c) 2022 Uber Technologies, Inc.
|
2
|
-
//
|
3
|
-
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
-
// of this software and associated documentation files (the "Software"), to deal
|
5
|
-
// in the Software without restriction, including without limitation the rights
|
6
|
-
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
-
// copies of the Software, and to permit persons to whom the Software is
|
8
|
-
// furnished to do so, subject to the following conditions:
|
9
|
-
//
|
10
|
-
// The above copyright notice and this permission notice shall be included in
|
11
|
-
// all copies or substantial portions of the Software.
|
12
|
-
//
|
13
|
-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
-
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
-
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
-
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
-
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
-
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
-
// THE SOFTWARE.
|
20
|
-
|
21
1
|
"use strict";
|
22
2
|
|
23
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
@@ -31,15 +11,21 @@ exports.rgbToHex = rgbToHex;
|
|
31
11
|
exports.getColorGroupByName = getColorGroupByName;
|
32
12
|
exports.reverseColorRange = reverseColorRange;
|
33
13
|
exports.createLinearGradient = createLinearGradient;
|
14
|
+
exports.colorMaybeToRGB = colorMaybeToRGB;
|
34
15
|
exports.isRgbColor = isRgbColor;
|
16
|
+
exports.normalizeColor = normalizeColor;
|
35
17
|
|
36
18
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
37
19
|
|
38
20
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
39
21
|
|
22
|
+
var _d3Color = require("d3-color");
|
23
|
+
|
40
24
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
41
25
|
|
42
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
26
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
27
|
+
|
28
|
+
/**
|
43
29
|
* get r g b from hex code
|
44
30
|
*
|
45
31
|
* @param hex
|
@@ -131,6 +117,26 @@ function createLinearGradient(direction, colors) {
|
|
131
117
|
});
|
132
118
|
return "linear-gradient(to ".concat(direction, ", ").concat(bands.join(','), ")");
|
133
119
|
}
|
120
|
+
/**
|
121
|
+
* Convert color to RGB
|
122
|
+
*/
|
123
|
+
|
124
|
+
|
125
|
+
function colorMaybeToRGB(color) {
|
126
|
+
if (isRgbColor(color)) {
|
127
|
+
return color;
|
128
|
+
}
|
129
|
+
|
130
|
+
if (typeof color === 'string') {
|
131
|
+
var rgbObj = (0, _d3Color.rgb)(color);
|
132
|
+
|
133
|
+
if (Number.isFinite(rgbObj === null || rgbObj === void 0 ? void 0 : rgbObj.r) && Number.isFinite(rgbObj === null || rgbObj === void 0 ? void 0 : rgbObj.g) && Number.isFinite(rgbObj === null || rgbObj === void 0 ? void 0 : rgbObj.b)) {
|
134
|
+
return [rgbObj.r, rgbObj.g, rgbObj.b];
|
135
|
+
}
|
136
|
+
}
|
137
|
+
|
138
|
+
return null;
|
139
|
+
}
|
134
140
|
/**
|
135
141
|
* Whether color is rgb
|
136
142
|
* @returns
|
@@ -142,4 +148,14 @@ function isRgbColor(color) {
|
|
142
148
|
return Number.isFinite(n) && n <= 255 && n >= 0;
|
143
149
|
}));
|
144
150
|
}
|
145
|
-
|
151
|
+
/**
|
152
|
+
* Take color values in 0-255 range and map to [0, 1]
|
153
|
+
*/
|
154
|
+
|
155
|
+
|
156
|
+
function normalizeColor(color) {
|
157
|
+
return color.map(function (component) {
|
158
|
+
return component / 255.0;
|
159
|
+
});
|
160
|
+
}
|
161
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2xvci11dGlscy50cyJdLCJuYW1lcyI6WyJoZXhUb1JnYiIsImhleCIsInJlc3VsdCIsImlzSGV4Q29sb3IiLCJyIiwicGFyc2VJbnQiLCJnIiwiYiIsImV4ZWMiLCJQYWROdW0iLCJjIiwidG9TdHJpbmciLCJsZW5ndGgiLCJyZ2JUb0hleCIsIm1hcCIsIm4iLCJqb2luIiwidG9VcHBlckNhc2UiLCJnZXRDb2xvckdyb3VwQnlOYW1lIiwiY29sb3JSYW5nZSIsIm5hbWUiLCJyZXBsYWNlIiwicmV2ZXJzZUNvbG9yUmFuZ2UiLCJyZXZlcnNlZCIsImNvbG9ycyIsInNsaWNlIiwicmV2ZXJzZSIsImNyZWF0ZUxpbmVhckdyYWRpZW50IiwiZGlyZWN0aW9uIiwic3RlcCIsInBhcnNlRmxvYXQiLCJ0b0ZpeGVkIiwiYmFuZHMiLCJyZ2IiLCJpbmRleCIsImNvbG9yTWF5YmVUb1JHQiIsImNvbG9yIiwiaXNSZ2JDb2xvciIsInJnYk9iaiIsIk51bWJlciIsImlzRmluaXRlIiwiQm9vbGVhbiIsIkFycmF5IiwiaXNBcnJheSIsImV2ZXJ5Iiwibm9ybWFsaXplQ29sb3IiLCJjb21wb25lbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBOzs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQSxRQUFULENBQWtCQyxHQUFsQixFQUF5QztBQUM5QyxNQUFNQyxNQUFNLEdBQUdDLFVBQVUsQ0FBQ0YsR0FBRCxDQUF6Qjs7QUFFQSxNQUFJLENBQUNDLE1BQUwsRUFBYTtBQUNYLFdBQU8sQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLENBQVAsQ0FBUDtBQUNEOztBQUVELE1BQU1FLENBQUMsR0FBR0MsUUFBUSxDQUFDSCxNQUFNLENBQUMsQ0FBRCxDQUFQLEVBQVksRUFBWixDQUFsQjtBQUNBLE1BQU1JLENBQUMsR0FBR0QsUUFBUSxDQUFDSCxNQUFNLENBQUMsQ0FBRCxDQUFQLEVBQVksRUFBWixDQUFs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ZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7cmdiIGFzIGQzUmdifSBmcm9tICdkMy1jb2xvcic7XG5pbXBvcnQge0NvbG9yUmFuZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7SGV4Q29sb3IsIFJHQkNvbG9yfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuLyoqXG4gKiBnZXQgciBnIGIgZnJvbSBoZXggY29kZVxuICpcbiAqIEBwYXJhbSBoZXhcbiAqIEByZXR1cm5zIGFycmF5IG9mIHIgZyBic1xuICovXG5leHBvcnQgZnVuY3Rpb24gaGV4VG9SZ2IoaGV4OiBzdHJpbmcpOiBSR0JDb2xvciB7XG4gIGNvbnN0IHJlc3VsdCA9IGlzSGV4Q29sb3IoaGV4KTtcblxuICBpZiAoIXJlc3VsdCkge1xuICAgIHJldHVybiBbMCwgMCwgMF07XG4gIH1cblxuICBjb25zdCByID0gcGFyc2VJbnQocmVzdWx0WzFdLCAxNik7XG4gIGNvbnN0IGcgPSBwYXJzZUludChyZXN1bHRbMl0sIDE2KTtcbiAgY29uc3QgYiA9IHBhcnNlSW50KHJlc3VsdFszXSwgMTYpO1xuXG4gIHJldHVybiBbciwgZywgYl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hleENvbG9yKGhleDogc3RyaW5nKTogUmVnRXhwRXhlY0FycmF5IHwgbnVsbCB7XG4gIGNvbnN0IHJlc3VsdCA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2kuZXhlYyhoZXgpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIFBhZE51bShjKSB7XG4gIGNvbnN0IGhleCA9IGMudG9TdHJpbmcoMTYpO1xuICByZXR1cm4gaGV4Lmxlbmd0aCA9PT0gMSA/IGAwJHtoZXh9YCA6IGhleDtcbn1cblxuLyoqXG4gKiBnZXQgaGV4IGZyb20gciBnIGJcbiAqXG4gKiBAcGFyYW0gcmdiXG4gKiBAcmV0dXJucyBoZXggc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZ2JUb0hleChbciwgZywgYl06IFJHQkNvbG9yKTogSGV4Q29sb3Ige1xuICByZXR1cm4gYCMke1tyLCBnLCBiXS5tYXAobiA9PiBQYWROdW0obikpLmpvaW4oJycpfWAudG9VcHBlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBHZXQgY29sb3IgZ3JvdXAgbmFtZSBieSBwYXJzaW5nIG5hbWUsIGRpc2NhcmQgc3RlcCBpbiB0aGUgbmFtZVxuICogZS5nLiBHbG9iYWwgV2FybWluZyA2IC0+IEdsb2JhbCBXYXJtaW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbG9yUmFuZ2VcbiAqIEByZXR1cm4ge3N0cmluZyB8IG51bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2xvckdyb3VwQnlOYW1lKGNvbG9yUmFuZ2U6IENvbG9yUmFuZ2UpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFjb2xvclJhbmdlIHx8IHR5cGVvZiBjb2xvclJhbmdlLm5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gY29sb3JSYW5nZS5uYW1lLnJlcGxhY2UoL1xcYlteYS16QS1aXSskLywgJycpO1xufVxuXG4vKipcbiAqIEdldCBhIHJldmVyc2VkIGNvbG9yUmFuZ2VcbiAqIEBwYXJhbSByZXZlcnNlZFxuICogQHBhcmFtIGNvbG9yUmFuZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJldmVyc2VDb2xvclJhbmdlKHJldmVyc2VkOiBib29sZWFuLCBjb2xvclJhbmdlOiBDb2xvclJhbmdlKTogQ29sb3JSYW5nZSB8IG51bGwge1xuICBpZiAoIWNvbG9yUmFuZ2UpIHJldHVybiBudWxsO1xuICAvLyBpZiAoY29sb3JSYW5nZS5yZXZlcnNlZCkgcmV0dXJuIGNvbG9yUmFuZ2U7XG4gIHJldHVybiB7XG4gICAgLi4uY29sb3JSYW5nZSxcbiAgICByZXZlcnNlZCxcbiAgICBjb2xvcnM6IGNvbG9yUmFuZ2UuY29sb3JzLnNsaWNlKCkucmV2ZXJzZSgpXG4gIH07XG59XG5cbi8qKlxuICogZ2l2ZW4gYSBsaXN0IG9mIHJnYiBhcnJheXMgaXQgd2lsbCBnZW5lcmF0ZSBhIGxpbmVhciBncmFkaWVudCBjc3MgcnVsZVxuICogQHBhcmFtIGRpcmVjdGlvblxuICogQHBhcmFtIGNvbG9yc1xuICogQHJldHVyblxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGluZWFyR3JhZGllbnQoZGlyZWN0aW9uOiBzdHJpbmcsIGNvbG9yczogUkdCQ29sb3JbXSkge1xuICBjb25zdCBzdGVwID0gcGFyc2VGbG9hdCgoMTAwLjAgLyBjb2xvcnMubGVuZ3RoKS50b0ZpeGVkKDIpKTtcbiAgY29uc3QgYmFuZHMgPSBjb2xvcnMubWFwKChyZ2IsIGluZGV4KSA9PiB7XG4gICAgcmV0dXJuIGByZ2JhKCR7cmdiLmpvaW4oJywnKX0sIDEpICR7c3RlcCAqIGluZGV4fSUsIHJnYmEoJHtyZ2Iuam9pbignLCcpfSwgMSkgJHtzdGVwICpcbiAgICAgIChpbmRleCArIDEpfSVgO1xuICB9KTtcblxuICByZXR1cm4gYGxpbmVhci1ncmFkaWVudCh0byAke2RpcmVjdGlvbn0sICR7YmFuZHMuam9pbignLCcpfSlgO1xufVxuXG4vKipcbiAqIENvbnZlcnQgY29sb3IgdG8gUkdCXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xvck1heWJlVG9SR0IoY29sb3I6IHVua25vd24pOiBSR0JDb2xvciB8IG51bGwge1xuICBpZiAoaXNSZ2JDb2xvcihjb2xvcikpIHtcbiAgICByZXR1cm4gY29sb3IgYXMgUkdCQ29sb3I7XG4gIH1cblxuICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IHJnYk9iaiA9IGQzUmdiKGNvbG9yKTtcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHJnYk9iaj8ucikgJiYgTnVtYmVyLmlzRmluaXRlKHJnYk9iaj8uZykgJiYgTnVtYmVyLmlzRmluaXRlKHJnYk9iaj8uYikpIHtcbiAgICAgIHJldHVybiBbcmdiT2JqLnIsIHJnYk9iai5nLCByZ2JPYmouYl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogV2hldGhlciBjb2xvciBpcyByZ2JcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JnYkNvbG9yKGNvbG9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGNvbG9yICYmXG4gICAgICBBcnJheS5pc0FycmF5KGNvbG9yKSAmJlxuICAgICAgY29sb3IubGVuZ3RoID09PSAzICYmXG4gICAgICBjb2xvci5ldmVyeShuID0+IE51bWJlci5pc0Zpbml0ZShuKSAmJiBuIDw9IDI1NSAmJiBuID49IDApXG4gICk7XG59XG5cbi8qKlxuICogVGFrZSBjb2xvciB2YWx1ZXMgaW4gMC0yNTUgcmFuZ2UgYW5kIG1hcCB0byBbMCwgMV1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbG9yKGNvbG9yOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgcmV0dXJuIGNvbG9yLm1hcChjb21wb25lbnQgPT4gY29tcG9uZW50IC8gMjU1LjApO1xufVxuIl19
|