@kepler.gl/deckgl-arrow-layers 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/constants.d.ts +13 -0
- package/dist/constants.js +26 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +34 -0
- package/dist/layers/geo-arrow-arc-layer.d.ts +62 -0
- package/dist/layers/geo-arrow-arc-layer.js +146 -0
- package/dist/layers/geo-arrow-scatterplot-layer.d.ts +56 -0
- package/dist/layers/geo-arrow-scatterplot-layer.js +223 -0
- package/dist/layers/geo-arrow-text-layer.d.ts +80 -0
- package/dist/layers/geo-arrow-text-layer.js +175 -0
- package/dist/types.d.ts +62 -0
- package/dist/types.js +6 -0
- package/dist/utils/picking.d.ts +16 -0
- package/dist/utils/picking.js +54 -0
- package/dist/utils/utils.d.ts +54 -0
- package/dist/utils/utils.js +307 -0
- package/dist/utils/validate.d.ts +12 -0
- package/dist/utils/validate.js +103 -0
- package/package.json +2 -2
@@ -0,0 +1,223 @@
|
|
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.GeoArrowScatterplotLayer = void 0;
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
11
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
12
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
13
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
14
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
16
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
17
|
+
var _typed = require("@deck.gl/core/typed");
|
18
|
+
var _typed2 = require("@deck.gl/layers/typed");
|
19
|
+
var ga = _interopRequireWildcard(require("@geoarrow/geoarrow-js"));
|
20
|
+
var _utils = require("../utils/utils");
|
21
|
+
var _picking = require("../utils/picking");
|
22
|
+
var _constants = require("../constants");
|
23
|
+
var _validate = require("../utils/validate");
|
24
|
+
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); }
|
25
|
+
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; }
|
26
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
27
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
28
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
29
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
|
30
|
+
// Copyright contributors to the kepler.gl project
|
31
|
+
// deck.gl-community
|
32
|
+
// SPDX-License-Identifier: MIT
|
33
|
+
// Copyright (c) vis.gl contributors
|
34
|
+
/** All properties supported by GeoArrowScatterplotLayer */
|
35
|
+
|
36
|
+
/** Properties added by GeoArrowScatterplotLayer */
|
37
|
+
|
38
|
+
// Remove data and getPosition from the upstream default props
|
39
|
+
var _ScatterplotLayer$def = _typed2.ScatterplotLayer.defaultProps,
|
40
|
+
_data = _ScatterplotLayer$def.data,
|
41
|
+
_getPosition = _ScatterplotLayer$def.getPosition,
|
42
|
+
_upstreamDefaultProps = (0, _objectWithoutProperties2["default"])(_ScatterplotLayer$def, ["data", "getPosition"]);
|
43
|
+
|
44
|
+
// Default props added by us
|
45
|
+
var ourDefaultProps = {
|
46
|
+
_validate: true
|
47
|
+
};
|
48
|
+
|
49
|
+
// @ts-expect-error
|
50
|
+
var defaultProps = _objectSpread(_objectSpread({}, _upstreamDefaultProps), ourDefaultProps);
|
51
|
+
var GeoArrowScatterplotLayer = exports.GeoArrowScatterplotLayer = /*#__PURE__*/function (_CompositeLayer) {
|
52
|
+
function GeoArrowScatterplotLayer() {
|
53
|
+
(0, _classCallCheck2["default"])(this, GeoArrowScatterplotLayer);
|
54
|
+
return _callSuper(this, GeoArrowScatterplotLayer, arguments);
|
55
|
+
}
|
56
|
+
(0, _inherits2["default"])(GeoArrowScatterplotLayer, _CompositeLayer);
|
57
|
+
return (0, _createClass2["default"])(GeoArrowScatterplotLayer, [{
|
58
|
+
key: "getPickingInfo",
|
59
|
+
value: function getPickingInfo(params) {
|
60
|
+
return (0, _picking.getPickingInfo)(params, this.props.data);
|
61
|
+
}
|
62
|
+
}, {
|
63
|
+
key: "renderLayers",
|
64
|
+
value: function renderLayers() {
|
65
|
+
var table = this.props.data;
|
66
|
+
if (this.props.getPosition !== undefined) {
|
67
|
+
var geometryColumn = this.props.getPosition;
|
68
|
+
if (geometryColumn !== undefined && ga.vector.isPointVector(geometryColumn)) {
|
69
|
+
return this._renderLayersPoint(geometryColumn);
|
70
|
+
}
|
71
|
+
if (geometryColumn !== undefined && ga.vector.isMultiPointVector(geometryColumn)) {
|
72
|
+
return this._renderLayersMultiPoint(geometryColumn);
|
73
|
+
}
|
74
|
+
throw new Error('getPosition should pass in an arrow Vector of Point or MultiPoint type');
|
75
|
+
} else {
|
76
|
+
var pointVector = (0, _utils.getGeometryVector)(table, _constants.EXTENSION_NAME.POINT);
|
77
|
+
if (pointVector !== null) {
|
78
|
+
return this._renderLayersPoint(pointVector);
|
79
|
+
}
|
80
|
+
var multiPointVector = (0, _utils.getGeometryVector)(table, _constants.EXTENSION_NAME.MULTIPOINT);
|
81
|
+
if (multiPointVector !== null) {
|
82
|
+
return this._renderLayersMultiPoint(multiPointVector);
|
83
|
+
}
|
84
|
+
}
|
85
|
+
throw new Error('getPosition not GeoArrow point or multipoint');
|
86
|
+
}
|
87
|
+
}, {
|
88
|
+
key: "_renderLayersPoint",
|
89
|
+
value: function _renderLayersPoint(geometryColumn) {
|
90
|
+
var table = this.props.data;
|
91
|
+
if (this.props._validate) {
|
92
|
+
(0, _typed.assert)(ga.vector.isPointVector(geometryColumn));
|
93
|
+
(0, _validate.validateAccessors)(this.props, table);
|
94
|
+
}
|
95
|
+
|
96
|
+
// Exclude manually-set accessors
|
97
|
+
var _extractAccessorsFrom = (0, _utils.extractAccessorsFromProps)(this.props, ['getPosition']),
|
98
|
+
_extractAccessorsFrom2 = (0, _slicedToArray2["default"])(_extractAccessorsFrom, 2),
|
99
|
+
accessors = _extractAccessorsFrom2[0],
|
100
|
+
otherProps = _extractAccessorsFrom2[1];
|
101
|
+
var tableOffsets = (0, _picking.computeChunkOffsets)(table.data);
|
102
|
+
var layers = [];
|
103
|
+
for (var recordBatchIdx = 0; recordBatchIdx < table.batches.length; recordBatchIdx++) {
|
104
|
+
var geometryData = geometryColumn.data[recordBatchIdx];
|
105
|
+
var flatCoordsData = ga.child.getPointChild(geometryData);
|
106
|
+
var flatCoordinateArray = flatCoordsData.values;
|
107
|
+
|
108
|
+
// @ts-expect-error how to properly retrieve batch offset?
|
109
|
+
var batchOffset = geometryColumn._offsets[recordBatchIdx];
|
110
|
+
var props = _objectSpread(_objectSpread(_objectSpread({}, ourDefaultProps), otherProps), {}, {
|
111
|
+
// used for picking purposes
|
112
|
+
recordBatchIdx: recordBatchIdx,
|
113
|
+
tableOffsets: tableOffsets,
|
114
|
+
id: "".concat(this.props.id, "-geoarrow-scatterplot-").concat(recordBatchIdx),
|
115
|
+
data: {
|
116
|
+
// @ts-expect-error
|
117
|
+
data: table.batches[recordBatchIdx],
|
118
|
+
length: geometryData.length,
|
119
|
+
attributes: {
|
120
|
+
getPosition: {
|
121
|
+
value: flatCoordinateArray,
|
122
|
+
size: geometryData.type.listSize
|
123
|
+
}
|
124
|
+
}
|
125
|
+
}
|
126
|
+
});
|
127
|
+
for (var _i = 0, _Object$entries = Object.entries(accessors); _i < _Object$entries.length; _i++) {
|
128
|
+
var _Object$entries$_i = (0, _slicedToArray2["default"])(_Object$entries[_i], 2),
|
129
|
+
propName = _Object$entries$_i[0],
|
130
|
+
propInput = _Object$entries$_i[1];
|
131
|
+
(0, _utils.assignAccessor)({
|
132
|
+
props: props,
|
133
|
+
propName: propName,
|
134
|
+
propInput: propInput,
|
135
|
+
chunkIdx: recordBatchIdx,
|
136
|
+
batchOffset: batchOffset
|
137
|
+
});
|
138
|
+
}
|
139
|
+
var layer = new _typed2.ScatterplotLayer(_objectSpread(_objectSpread({}, this.getSubLayerProps(props)), {}, {
|
140
|
+
// preserve binded accessors, as they are overwriten back by pass-through accessors from extensions
|
141
|
+
getFiltered: props.getFiltered,
|
142
|
+
getFilterValue: props.getFilterValue
|
143
|
+
}));
|
144
|
+
layers.push(layer);
|
145
|
+
}
|
146
|
+
return layers;
|
147
|
+
}
|
148
|
+
}, {
|
149
|
+
key: "_renderLayersMultiPoint",
|
150
|
+
value: function _renderLayersMultiPoint(geometryColumn) {
|
151
|
+
var table = this.props.data;
|
152
|
+
|
153
|
+
// TODO: validate that if nested, accessor props have the same nesting
|
154
|
+
// structure as the main geometry column.
|
155
|
+
if (this.props._validate) {
|
156
|
+
(0, _typed.assert)(ga.vector.isMultiPointVector(geometryColumn));
|
157
|
+
(0, _validate.validateAccessors)(this.props, table);
|
158
|
+
}
|
159
|
+
|
160
|
+
// Exclude manually-set accessors
|
161
|
+
var _extractAccessorsFrom3 = (0, _utils.extractAccessorsFromProps)(this.props, ['getPosition']),
|
162
|
+
_extractAccessorsFrom4 = (0, _slicedToArray2["default"])(_extractAccessorsFrom3, 2),
|
163
|
+
accessors = _extractAccessorsFrom4[0],
|
164
|
+
otherProps = _extractAccessorsFrom4[1];
|
165
|
+
var tableOffsets = (0, _picking.computeChunkOffsets)(table.data);
|
166
|
+
var layers = [];
|
167
|
+
for (var recordBatchIdx = 0; recordBatchIdx < table.batches.length; recordBatchIdx++) {
|
168
|
+
var multiPointData = geometryColumn.data[recordBatchIdx];
|
169
|
+
var pointData = ga.child.getMultiPointChild(multiPointData);
|
170
|
+
var geomOffsets = multiPointData.valueOffsets;
|
171
|
+
var flatCoordsData = ga.child.getPointChild(pointData);
|
172
|
+
var flatCoordinateArray = flatCoordsData.values;
|
173
|
+
|
174
|
+
// @ts-expect-error how to properly retrieve batch offset?
|
175
|
+
var batchOffset = geometryColumn._offsets[recordBatchIdx];
|
176
|
+
var props = _objectSpread(_objectSpread(_objectSpread({}, ourDefaultProps), otherProps), {}, {
|
177
|
+
// used for picking purposes
|
178
|
+
recordBatchIdx: recordBatchIdx,
|
179
|
+
tableOffsets: tableOffsets,
|
180
|
+
id: "".concat(this.props.id, "-geoarrow-scatterplot-").concat(recordBatchIdx),
|
181
|
+
data: {
|
182
|
+
// @ts-expect-error
|
183
|
+
data: table.batches[recordBatchIdx],
|
184
|
+
// Map from expanded multi-geometry index to original index
|
185
|
+
// Used both in picking and for function callbacks
|
186
|
+
invertedGeomOffsets: (0, _utils.invertOffsets)(geomOffsets),
|
187
|
+
// Note: this needs to be the length one level down.
|
188
|
+
length: pointData.length,
|
189
|
+
attributes: {
|
190
|
+
getPosition: {
|
191
|
+
value: flatCoordinateArray,
|
192
|
+
size: pointData.type.listSize
|
193
|
+
}
|
194
|
+
}
|
195
|
+
}
|
196
|
+
});
|
197
|
+
for (var _i2 = 0, _Object$entries2 = Object.entries(accessors); _i2 < _Object$entries2.length; _i2++) {
|
198
|
+
var _Object$entries2$_i = (0, _slicedToArray2["default"])(_Object$entries2[_i2], 2),
|
199
|
+
propName = _Object$entries2$_i[0],
|
200
|
+
propInput = _Object$entries2$_i[1];
|
201
|
+
(0, _utils.assignAccessor)({
|
202
|
+
props: props,
|
203
|
+
propName: propName,
|
204
|
+
propInput: propInput,
|
205
|
+
chunkIdx: recordBatchIdx,
|
206
|
+
geomCoordOffsets: geomOffsets,
|
207
|
+
batchOffset: batchOffset
|
208
|
+
});
|
209
|
+
}
|
210
|
+
var layer = new _typed2.ScatterplotLayer(_objectSpread(_objectSpread({}, this.getSubLayerProps(props)), {}, {
|
211
|
+
// preserve binded accessors, as they are overwriten back by pass-through accessors from extensions
|
212
|
+
getFiltered: props.getFiltered,
|
213
|
+
getFilterValue: props.getFilterValue
|
214
|
+
}));
|
215
|
+
layers.push(layer);
|
216
|
+
}
|
217
|
+
return layers;
|
218
|
+
}
|
219
|
+
}]);
|
220
|
+
}(_typed.CompositeLayer);
|
221
|
+
(0, _defineProperty2["default"])(GeoArrowScatterplotLayer, "defaultProps", defaultProps);
|
222
|
+
(0, _defineProperty2["default"])(GeoArrowScatterplotLayer, "layerName", 'GeoArrowScatterplotLayer');
|
223
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZWQiLCJyZXF1aXJlIiwiX3R5cGVkMiIsImdhIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfdXRpbHMiLCJfcGlja2luZyIsIl9jb25zdGFudHMiLCJfdmFsaWRhdGUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfY2FsbFN1cGVyIiwibyIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiYXBwbHkiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9TY2F0dGVycGxvdExheWVyJGRlZiIsIlNjYXR0ZXJwbG90TGF5ZXIiLCJkZWZhdWx0UHJvcHMiLCJfZGF0YSIsImRhdGEiLCJfZ2V0UG9zaXRpb24iLCJnZXRQb3NpdGlvbiIsIl91cHN0cmVhbURlZmF1bHRQcm9wcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJvdXJEZWZhdWx0UHJvcHMiLCJHZW9BcnJvd1NjYXR0ZXJwbG90TGF5ZXIiLCJleHBvcnRzIiwiX0NvbXBvc2l0ZUxheWVyIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJnZXRQaWNraW5nSW5mbyIsInBhcmFtcyIsInByb3BzIiwicmVuZGVyTGF5ZXJzIiwidGFibGUiLCJ1bmRlZmluZWQiLCJnZW9tZXRyeUNvbHVtbiIsInZlY3RvciIsImlzUG9pbnRWZWN0b3IiLCJfcmVuZGVyTGF5ZXJzUG9pbnQiLCJpc011bHRpUG9pbnRWZWN0b3IiLCJfcmVuZGVyTGF5ZXJzTXVsdGlQb2ludCIsIkVycm9yIiwicG9pbnRWZWN0b3IiLCJnZXRHZW9tZXRyeVZlY3RvciIsIkVYVEVOU0lPTl9OQU1FIiwiUE9JTlQiLCJtdWx0aVBvaW50VmVjdG9yIiwiTVVMVElQT0lOVCIsImFzc2VydCIsInZhbGlkYXRlQWNjZXNzb3JzIiwiX2V4dHJhY3RBY2Nlc3NvcnNGcm9tIiwiZXh0cmFjdEFjY2Vzc29yc0Zyb21Qcm9wcyIsIl9leHRyYWN0QWNjZXNzb3JzRnJvbTIiLCJfc2xpY2VkVG9BcnJheTIiLCJhY2Nlc3NvcnMiLCJvdGhlclByb3BzIiwidGFibGVPZmZzZXRzIiwiY29tcHV0ZUNodW5rT2Zmc2V0cyIsImxheWVycyIsInJlY29yZEJhdGNoSWR4IiwiYmF0Y2hlcyIsImdlb21ldHJ5RGF0YSIsImZsYXRDb29yZHNEYXRhIiwiY2hpbGQiLCJnZXRQb2ludENoaWxkIiwiZmxhdENvb3JkaW5hdGVBcnJheSIsInZhbHVlcyIsImJhdGNoT2Zmc2V0IiwiX29mZnNldHMiLCJpZCIsImNvbmNhdCIsImF0dHJpYnV0ZXMiLCJzaXplIiwidHlwZSIsImxpc3RTaXplIiwiX2kiLCJfT2JqZWN0JGVudHJpZXMiLCJlbnRyaWVzIiwiX09iamVjdCRlbnRyaWVzJF9pIiwicHJvcE5hbWUiLCJwcm9wSW5wdXQiLCJhc3NpZ25BY2Nlc3NvciIsImNodW5rSWR4IiwibGF5ZXIiLCJnZXRTdWJMYXllclByb3BzIiwiZ2V0RmlsdGVyZWQiLCJnZXRGaWx0ZXJWYWx1ZSIsIl9leHRyYWN0QWNjZXNzb3JzRnJvbTMiLCJfZXh0cmFjdEFjY2Vzc29yc0Zyb200IiwibXVsdGlQb2ludERhdGEiLCJwb2ludERhdGEiLCJnZXRNdWx0aVBvaW50Q2hpbGQiLCJnZW9tT2Zmc2V0cyIsInZhbHVlT2Zmc2V0cyIsImludmVydGVkR2VvbU9mZnNldHMiLCJpbnZlcnRPZmZzZXRzIiwiX2kyIiwiX09iamVjdCRlbnRyaWVzMiIsIl9PYmplY3QkZW50cmllczIkX2kiLCJnZW9tQ29vcmRPZmZzZXRzIiwiQ29tcG9zaXRlTGF5ZXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGF5ZXJzL2dlby1hcnJvdy1zY2F0dGVycGxvdC1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vLyBkZWNrLmdsLWNvbW11bml0eVxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IChjKSB2aXMuZ2wgY29udHJpYnV0b3JzXG5cbmltcG9ydCB7XG4gIENvbXBvc2l0ZUxheWVyLFxuICBDb21wb3NpdGVMYXllclByb3BzLFxuICBEZWZhdWx0UHJvcHMsXG4gIEdldFBpY2tpbmdJbmZvUGFyYW1zLFxuICBMYXllcixcbiAgTGF5ZXJzTGlzdCxcbiAgYXNzZXJ0XG59IGZyb20gJ0BkZWNrLmdsL2NvcmUvdHlwZWQnO1xuaW1wb3J0IHtTY2F0dGVycGxvdExheWVyfSBmcm9tICdAZGVjay5nbC9sYXllcnMvdHlwZWQnO1xuaW1wb3J0IHR5cGUge1NjYXR0ZXJwbG90TGF5ZXJQcm9wc30gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzL3R5cGVkJztcbmltcG9ydCAqIGFzIGFycm93IGZyb20gJ2FwYWNoZS1hcnJvdyc7XG5pbXBvcnQgKiBhcyBnYSBmcm9tICdAZ2VvYXJyb3cvZ2VvYXJyb3ctanMnO1xuaW1wb3J0IHtcbiAgYXNzaWduQWNjZXNzb3IsXG4gIGV4dHJhY3RBY2Nlc3NvcnNGcm9tUHJvcHMsXG4gIGdldEdlb21ldHJ5VmVjdG9yLFxuICBpbnZlcnRPZmZzZXRzXG59IGZyb20gJy4uL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7R2VvQXJyb3dFeHRyYVBpY2tpbmdQcm9wcywgY29tcHV0ZUNodW5rT2Zmc2V0cywgZ2V0UGlja2luZ0luZm99IGZyb20gJy4uL3V0aWxzL3BpY2tpbmcnO1xuaW1wb3J0IHtDb2xvckFjY2Vzc29yLCBGbG9hdEFjY2Vzc29yLCBHZW9BcnJvd1BpY2tpbmdJbmZvLCBFeHRlbnNpb25Qcm9wc30gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtFWFRFTlNJT05fTkFNRX0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7dmFsaWRhdGVBY2Nlc3NvcnN9IGZyb20gJy4uL3V0aWxzL3ZhbGlkYXRlJztcblxuLyoqIEFsbCBwcm9wZXJ0aWVzIHN1cHBvcnRlZCBieSBHZW9BcnJvd1NjYXR0ZXJwbG90TGF5ZXIgKi9cbmV4cG9ydCB0eXBlIEdlb0Fycm93U2NhdHRlcnBsb3RMYXllclByb3BzID0gT21pdDxcbiAgU2NhdHRlcnBsb3RMYXllclByb3BzPGFycm93LlRhYmxlPixcbiAgJ2RhdGEnIHwgJ2dldFBvc2l0aW9uJyB8ICdnZXRSYWRpdXMnIHwgJ2dldEZpbGxDb2xvcicgfCAnZ2V0TGluZUNvbG9yJ1xuPiAmXG4gIF9HZW9BcnJvd1NjYXR0ZXJwbG90TGF5ZXJQcm9wcyAmXG4gIENvbXBvc2l0ZUxheWVyUHJvcHM7XG5cbi8qKiBQcm9wZXJ0aWVzIGFkZGVkIGJ5IEdlb0Fycm93U2NhdHRlcnBsb3RMYXllciAqL1xudHlwZSBfR2VvQXJyb3dTY2F0dGVycGxvdExheWVyUHJvcHMgPSB7XG4gIGRhdGE6IGFycm93LlRhYmxlO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHZhbGlkYXRlIHRoZSBhcnJheXMgcHJvdmlkZWQgKGUuZy4gY2h1bmsgbGVuZ3RocylcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgX3ZhbGlkYXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENlbnRlciBwb3NpdGlvbiBhY2Nlc3Nvci5cbiAgICogSWYgbm90IHByb3ZpZGVkLCB3aWxsIGJlIGluZmVycmVkIGJ5IGZpbmRpbmcgYSBjb2x1bW4gd2l0aCBleHRlbnNpb24gdHlwZVxuICAgKiBgXCJnZW9hcnJvdy5wb2ludFwiYCBvciBgXCJnZW9hcnJvdy5tdWx0aXBvaW50XCJgLlxuICAgKi9cbiAgZ2V0UG9zaXRpb24/OiBnYS52ZWN0b3IuUG9pbnRWZWN0b3IgfCBnYS52ZWN0b3IuTXVsdGlQb2ludFZlY3RvcjtcbiAgLyoqXG4gICAqIFJhZGl1cyBhY2Nlc3Nvci5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgZ2V0UmFkaXVzPzogRmxvYXRBY2Nlc3NvcjtcbiAgLyoqXG4gICAqIEZpbGwgY29sb3IgYWNjZXNzb3IuXG4gICAqIEBkZWZhdWx0IFswLCAwLCAwLCAyNTVdXG4gICAqL1xuICBnZXRGaWxsQ29sb3I/OiBDb2xvckFjY2Vzc29yO1xuICAvKipcbiAgICogU3Ryb2tlIGNvbG9yIGFjY2Vzc29yLlxuICAgKiBAZGVmYXVsdCBbMCwgMCwgMCwgMjU1XVxuICAgKi9cbiAgZ2V0TGluZUNvbG9yPzogQ29sb3JBY2Nlc3NvcjtcbiAgLyoqXG4gICAqIFN0cm9rZSB3aWR0aCBhY2Nlc3Nvci5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgZ2V0TGluZVdpZHRoPzogRmxvYXRBY2Nlc3Nvcjtcbn07XG5cbi8vIFJlbW92ZSBkYXRhIGFuZCBnZXRQb3NpdGlvbiBmcm9tIHRoZSB1cHN0cmVhbSBkZWZhdWx0IHByb3BzXG5jb25zdCB7XG4gIGRhdGE6IF9kYXRhLFxuICBnZXRQb3NpdGlvbjogX2dldFBvc2l0aW9uLFxuICAuLi5fdXBzdHJlYW1EZWZhdWx0UHJvcHNcbn0gPSBTY2F0dGVycGxvdExheWVyLmRlZmF1bHRQcm9wcztcblxuLy8gRGVmYXVsdCBwcm9wcyBhZGRlZCBieSB1c1xuY29uc3Qgb3VyRGVmYXVsdFByb3BzID0ge1xuICBfdmFsaWRhdGU6IHRydWVcbn07XG5cbi8vIEB0cy1leHBlY3QtZXJyb3JcbmNvbnN0IGRlZmF1bHRQcm9wczogRGVmYXVsdFByb3BzPEdlb0Fycm93U2NhdHRlcnBsb3RMYXllclByb3BzPiA9IHtcbiAgLi4uX3Vwc3RyZWFtRGVmYXVsdFByb3BzLFxuICAuLi5vdXJEZWZhdWx0UHJvcHNcbn07XG5cbmV4cG9ydCBjbGFzcyBHZW9BcnJvd1NjYXR0ZXJwbG90TGF5ZXI8RXh0cmFQcm9wcyBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4gZXh0ZW5kcyBDb21wb3NpdGVMYXllcjxcbiAgR2VvQXJyb3dTY2F0dGVycGxvdExheWVyUHJvcHMgJiBFeHRyYVByb3BzXG4+IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbiAgc3RhdGljIGxheWVyTmFtZSA9ICdHZW9BcnJvd1NjYXR0ZXJwbG90TGF5ZXInO1xuXG4gIGdldFBpY2tpbmdJbmZvKFxuICAgIHBhcmFtczogR2V0UGlja2luZ0luZm9QYXJhbXMgJiB7XG4gICAgICBzb3VyY2VMYXllcjoge3Byb3BzOiBHZW9BcnJvd0V4dHJhUGlja2luZ1Byb3BzfTtcbiAgICB9XG4gICk6IEdlb0Fycm93UGlja2luZ0luZm8ge1xuICAgIHJldHVybiBnZXRQaWNraW5nSW5mbyhwYXJhbXMsIHRoaXMucHJvcHMuZGF0YSk7XG4gIH1cblxuICByZW5kZXJMYXllcnMoKTogTGF5ZXI8b2JqZWN0PiB8IExheWVyc0xpc3QgfCBudWxsIHtcbiAgICBjb25zdCB7ZGF0YTogdGFibGV9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmICh0aGlzLnByb3BzLmdldFBvc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGdlb21ldHJ5Q29sdW1uID0gdGhpcy5wcm9wcy5nZXRQb3NpdGlvbjtcbiAgICAgIGlmIChnZW9tZXRyeUNvbHVtbiAhPT0gdW5kZWZpbmVkICYmIGdhLnZlY3Rvci5pc1BvaW50VmVjdG9yKGdlb21ldHJ5Q29sdW1uKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyTGF5ZXJzUG9pbnQoZ2VvbWV0cnlDb2x1bW4pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2VvbWV0cnlDb2x1bW4gIT09IHVuZGVmaW5lZCAmJiBnYS52ZWN0b3IuaXNNdWx0aVBvaW50VmVjdG9yKGdlb21ldHJ5Q29sdW1uKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyTGF5ZXJzTXVsdGlQb2ludChnZW9tZXRyeUNvbHVtbik7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0UG9zaXRpb24gc2hvdWxkIHBhc3MgaW4gYW4gYXJyb3cgVmVjdG9yIG9mIFBvaW50IG9yIE11bHRpUG9pbnQgdHlwZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwb2ludFZlY3RvciA9IGdldEdlb21ldHJ5VmVjdG9yKHRhYmxlLCBFWFRFTlNJT05fTkFNRS5QT0lOVCk7XG4gICAgICBpZiAocG9pbnRWZWN0b3IgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckxheWVyc1BvaW50KHBvaW50VmVjdG9yKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbXVsdGlQb2ludFZlY3RvciA9IGdldEdlb21ldHJ5VmVjdG9yKHRhYmxlLCBFWFRFTlNJT05fTkFNRS5NVUxUSVBPSU5UKTtcbiAgICAgIGlmIChtdWx0aVBvaW50VmVjdG9yICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJMYXllcnNNdWx0aVBvaW50KG11bHRpUG9pbnRWZWN0b3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignZ2V0UG9zaXRpb24gbm90IEdlb0Fycm93IHBvaW50IG9yIG11bHRpcG9pbnQnKTtcbiAgfVxuXG4gIF9yZW5kZXJMYXllcnNQb2ludChnZW9tZXRyeUNvbHVtbjogZ2EudmVjdG9yLlBvaW50VmVjdG9yKTogTGF5ZXI8b2JqZWN0PiB8IExheWVyc0xpc3QgfCBudWxsIHtcbiAgICBjb25zdCB7ZGF0YTogdGFibGV9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmICh0aGlzLnByb3BzLl92YWxpZGF0ZSkge1xuICAgICAgYXNzZXJ0KGdhLnZlY3Rvci5pc1BvaW50VmVjdG9yKGdlb21ldHJ5Q29sdW1uKSk7XG4gICAgICB2YWxpZGF0ZUFjY2Vzc29ycyh0aGlzLnByb3BzLCB0YWJsZSk7XG4gICAgfVxuXG4gICAgLy8gRXhjbHVkZSBtYW51YWxseS1zZXQgYWNjZXNzb3JzXG4gICAgY29uc3QgW2FjY2Vzc29ycywgb3RoZXJQcm9wc10gPSBleHRyYWN0QWNjZXNzb3JzRnJvbVByb3BzKHRoaXMucHJvcHMsIFsnZ2V0UG9zaXRpb24nXSk7XG4gICAgY29uc3QgdGFibGVPZmZzZXRzID0gY29tcHV0ZUNodW5rT2Zmc2V0cyh0YWJsZS5kYXRhKTtcblxuICAgIGNvbnN0IGxheWVyczogU2NhdHRlcnBsb3RMYXllcjxhbnk+W10gPSBbXTtcbiAgICBmb3IgKGxldCByZWNvcmRCYXRjaElkeCA9IDA7IHJlY29yZEJhdGNoSWR4IDwgdGFibGUuYmF0Y2hlcy5sZW5ndGg7IHJlY29yZEJhdGNoSWR4KyspIHtcbiAgICAgIGNvbnN0IGdlb21ldHJ5RGF0YSA9IGdlb21ldHJ5Q29sdW1uLmRhdGFbcmVjb3JkQmF0Y2hJZHhdO1xuICAgICAgY29uc3QgZmxhdENvb3Jkc0RhdGEgPSBnYS5jaGlsZC5nZXRQb2ludENoaWxkKGdlb21ldHJ5RGF0YSk7XG4gICAgICBjb25zdCBmbGF0Q29vcmRpbmF0ZUFycmF5ID0gZmxhdENvb3Jkc0RhdGEudmFsdWVzO1xuXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGhvdyB0byBwcm9wZXJseSByZXRyaWV2ZSBiYXRjaCBvZmZzZXQ/XG4gICAgICBjb25zdCBiYXRjaE9mZnNldCA9IGdlb21ldHJ5Q29sdW1uLl9vZmZzZXRzW3JlY29yZEJhdGNoSWR4XTtcblxuICAgICAgY29uc3QgcHJvcHM6IFNjYXR0ZXJwbG90TGF5ZXJQcm9wczxhbnk+ICYgRXh0ZW5zaW9uUHJvcHMgPSB7XG4gICAgICAgIC8vIE5vdGU6IGJlY2F1c2UgdGhpcyBpcyBhIGNvbXBvc2l0ZSBsYXllciBhbmQgbm90IGRvaW5nIHRoZSByZW5kZXJpbmdcbiAgICAgICAgLy8gaXRzZWxmLCB3ZSBzdGlsbCBoYXZlIHRvIHBhc3MgaW4gb3VyIGRlZmF1bHRQcm9wc1xuICAgICAgICAuLi5vdXJEZWZhdWx0UHJvcHMsXG4gICAgICAgIC4uLm90aGVyUHJvcHMsXG5cbiAgICAgICAgLy8gdXNlZCBmb3IgcGlja2luZyBwdXJwb3Nlc1xuICAgICAgICByZWNvcmRCYXRjaElkeCxcbiAgICAgICAgdGFibGVPZmZzZXRzLFxuXG4gICAgICAgIGlkOiBgJHt0aGlzLnByb3BzLmlkfS1nZW9hcnJvdy1zY2F0dGVycGxvdC0ke3JlY29yZEJhdGNoSWR4fWAsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgZGF0YTogdGFibGUuYmF0Y2hlc1tyZWNvcmRCYXRjaElkeF0sXG4gICAgICAgICAgbGVuZ3RoOiBnZW9tZXRyeURhdGEubGVuZ3RoLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIGdldFBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBmbGF0Q29vcmRpbmF0ZUFycmF5LFxuICAgICAgICAgICAgICBzaXplOiBnZW9tZXRyeURhdGEudHlwZS5saXN0U2l6ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yIChjb25zdCBbcHJvcE5hbWUsIHByb3BJbnB1dF0gb2YgT2JqZWN0LmVudHJpZXMoYWNjZXNzb3JzKSkge1xuICAgICAgICBhc3NpZ25BY2Nlc3Nvcih7XG4gICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgcHJvcE5hbWUsXG4gICAgICAgICAgcHJvcElucHV0LFxuICAgICAgICAgIGNodW5rSWR4OiByZWNvcmRCYXRjaElkeCxcbiAgICAgICAgICBiYXRjaE9mZnNldFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgU2NhdHRlcnBsb3RMYXllcih7XG4gICAgICAgIC4uLnRoaXMuZ2V0U3ViTGF5ZXJQcm9wcyhwcm9wcyksXG4gICAgICAgIC8vIHByZXNlcnZlIGJpbmRlZCBhY2Nlc3NvcnMsIGFzIHRoZXkgYXJlIG92ZXJ3cml0ZW4gYmFjayBieSBwYXNzLXRocm91Z2ggYWNjZXNzb3JzIGZyb20gZXh0ZW5zaW9uc1xuICAgICAgICBnZXRGaWx0ZXJlZDogcHJvcHMuZ2V0RmlsdGVyZWQsXG4gICAgICAgIGdldEZpbHRlclZhbHVlOiBwcm9wcy5nZXRGaWx0ZXJWYWx1ZVxuICAgICAgfSk7XG4gICAgICBsYXllcnMucHVzaChsYXllcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxheWVycztcbiAgfVxuXG4gIF9yZW5kZXJMYXllcnNNdWx0aVBvaW50KFxuICAgIGdlb21ldHJ5Q29sdW1uOiBnYS52ZWN0b3IuTXVsdGlQb2ludFZlY3RvclxuICApOiBMYXllcjxvYmplY3Q+IHwgTGF5ZXJzTGlzdCB8IG51bGwge1xuICAgIGNvbnN0IHtkYXRhOiB0YWJsZX0gPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gVE9ETzogdmFsaWRhdGUgdGhhdCBpZiBuZXN0ZWQsIGFjY2Vzc29yIHByb3BzIGhhdmUgdGhlIHNhbWUgbmVzdGluZ1xuICAgIC8vIHN0cnVjdHVyZSBhcyB0aGUgbWFpbiBnZW9tZXRyeSBjb2x1bW4uXG4gICAgaWYgKHRoaXMucHJvcHMuX3ZhbGlkYXRlKSB7XG4gICAgICBhc3NlcnQoZ2EudmVjdG9yLmlzTXVsdGlQb2ludFZlY3RvcihnZW9tZXRyeUNvbHVtbikpO1xuICAgICAgdmFsaWRhdGVBY2Nlc3NvcnModGhpcy5wcm9wcywgdGFibGUpO1xuICAgIH1cblxuICAgIC8vIEV4Y2x1ZGUgbWFudWFsbHktc2V0IGFjY2Vzc29yc1xuICAgIGNvbnN0IFthY2Nlc3NvcnMsIG90aGVyUHJvcHNdID0gZXh0cmFjdEFjY2Vzc29yc0Zyb21Qcm9wcyh0aGlzLnByb3BzLCBbJ2dldFBvc2l0aW9uJ10pO1xuICAgIGNvbnN0IHRhYmxlT2Zmc2V0cyA9IGNvbXB1dGVDaHVua09mZnNldHModGFibGUuZGF0YSk7XG5cbiAgICBjb25zdCBsYXllcnM6IFNjYXR0ZXJwbG90TGF5ZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IHJlY29yZEJhdGNoSWR4ID0gMDsgcmVjb3JkQmF0Y2hJZHggPCB0YWJsZS5iYXRjaGVzLmxlbmd0aDsgcmVjb3JkQmF0Y2hJZHgrKykge1xuICAgICAgY29uc3QgbXVsdGlQb2ludERhdGEgPSBnZW9tZXRyeUNvbHVtbi5kYXRhW3JlY29yZEJhdGNoSWR4XTtcbiAgICAgIGNvbnN0IHBvaW50RGF0YSA9IGdhLmNoaWxkLmdldE11bHRpUG9pbnRDaGlsZChtdWx0aVBvaW50RGF0YSk7XG4gICAgICBjb25zdCBnZW9tT2Zmc2V0cyA9IG11bHRpUG9pbnREYXRhLnZhbHVlT2Zmc2V0cztcbiAgICAgIGNvbnN0IGZsYXRDb29yZHNEYXRhID0gZ2EuY2hpbGQuZ2V0UG9pbnRDaGlsZChwb2ludERhdGEpO1xuICAgICAgY29uc3QgZmxhdENvb3JkaW5hdGVBcnJheSA9IGZsYXRDb29yZHNEYXRhLnZhbHVlcztcblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBob3cgdG8gcHJvcGVybHkgcmV0cmlldmUgYmF0Y2ggb2Zmc2V0P1xuICAgICAgY29uc3QgYmF0Y2hPZmZzZXQgPSBnZW9tZXRyeUNvbHVtbi5fb2Zmc2V0c1tyZWNvcmRCYXRjaElkeF07XG5cbiAgICAgIGNvbnN0IHByb3BzOiBTY2F0dGVycGxvdExheWVyUHJvcHMgJiBFeHRlbnNpb25Qcm9wcyA9IHtcbiAgICAgICAgLy8gTm90ZTogYmVjYXVzZSB0aGlzIGlzIGEgY29tcG9zaXRlIGxheWVyIGFuZCBub3QgZG9pbmcgdGhlIHJlbmRlcmluZ1xuICAgICAgICAvLyBpdHNlbGYsIHdlIHN0aWxsIGhhdmUgdG8gcGFzcyBpbiBvdXIgZGVmYXVsdFByb3BzXG4gICAgICAgIC4uLm91ckRlZmF1bHRQcm9wcyxcbiAgICAgICAgLi4ub3RoZXJQcm9wcyxcblxuICAgICAgICAvLyB1c2VkIGZvciBwaWNraW5nIHB1cnBvc2VzXG4gICAgICAgIHJlY29yZEJhdGNoSWR4LFxuICAgICAgICB0YWJsZU9mZnNldHMsXG5cbiAgICAgICAgaWQ6IGAke3RoaXMucHJvcHMuaWR9LWdlb2Fycm93LXNjYXR0ZXJwbG90LSR7cmVjb3JkQmF0Y2hJZHh9YCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICBkYXRhOiB0YWJsZS5iYXRjaGVzW3JlY29yZEJhdGNoSWR4XSxcbiAgICAgICAgICAvLyBNYXAgZnJvbSBleHBhbmRlZCBtdWx0aS1nZW9tZXRyeSBpbmRleCB0byBvcmlnaW5hbCBpbmRleFxuICAgICAgICAgIC8vIFVzZWQgYm90aCBpbiBwaWNraW5nIGFuZCBmb3IgZnVuY3Rpb24gY2FsbGJhY2tzXG4gICAgICAgICAgaW52ZXJ0ZWRHZW9tT2Zmc2V0czogaW52ZXJ0T2Zmc2V0cyhnZW9tT2Zmc2V0cyksXG4gICAgICAgICAgLy8gTm90ZTogdGhpcyBuZWVkcyB0byBiZSB0aGUgbGVuZ3RoIG9uZSBsZXZlbCBkb3duLlxuICAgICAgICAgIGxlbmd0aDogcG9pbnREYXRhLmxlbmd0aCxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICBnZXRQb3NpdGlvbjoge1xuICAgICAgICAgICAgICB2YWx1ZTogZmxhdENvb3JkaW5hdGVBcnJheSxcbiAgICAgICAgICAgICAgc2l6ZTogcG9pbnREYXRhLnR5cGUubGlzdFNpemVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAoY29uc3QgW3Byb3BOYW1lLCBwcm9wSW5wdXRdIG9mIE9iamVjdC5lbnRyaWVzKGFjY2Vzc29ycykpIHtcbiAgICAgICAgYXNzaWduQWNjZXNzb3Ioe1xuICAgICAgICAgIHByb3BzLFxuICAgICAgICAgIHByb3BOYW1lLFxuICAgICAgICAgIHByb3BJbnB1dCxcbiAgICAgICAgICBjaHVua0lkeDogcmVjb3JkQmF0Y2hJZHgsXG4gICAgICAgICAgZ2VvbUNvb3JkT2Zmc2V0czogZ2VvbU9mZnNldHMsXG4gICAgICAgICAgYmF0Y2hPZmZzZXRcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxheWVyID0gbmV3IFNjYXR0ZXJwbG90TGF5ZXIoe1xuICAgICAgICAuLi50aGlzLmdldFN1YkxheWVyUHJvcHMocHJvcHMpLFxuICAgICAgICAvLyBwcmVzZXJ2ZSBiaW5kZWQgYWNjZXNzb3JzLCBhcyB0aGV5IGFyZSBvdmVyd3JpdGVuIGJhY2sgYnkgcGFzcy10aHJvdWdoIGFjY2Vzc29ycyBmcm9tIGV4dGVuc2lvbnNcbiAgICAgICAgZ2V0RmlsdGVyZWQ6IHByb3BzLmdldEZpbHRlcmVkLFxuICAgICAgICBnZXRGaWx0ZXJWYWx1ZTogcHJvcHMuZ2V0RmlsdGVyVmFsdWVcbiAgICAgIH0pO1xuICAgICAgbGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBsYXllcnM7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQU9BLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQVNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUdBLElBQUFFLEVBQUEsR0FBQUMsdUJBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQU1BLElBQUFLLFFBQUEsR0FBQUwsT0FBQTtBQUVBLElBQUFNLFVBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFNBQUEsR0FBQVAsT0FBQTtBQUFvRCxTQUFBUSx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFB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
|
@@ -0,0 +1,80 @@
|
|
1
|
+
/// <reference types="deck.gl" />
|
2
|
+
import { CompositeLayer, CompositeLayerProps, DefaultProps, GetPickingInfoParams, Layer, LayersList } from '@deck.gl/core/typed';
|
3
|
+
import type { TextLayerProps } from '@deck.gl/layers';
|
4
|
+
import * as arrow from 'apache-arrow';
|
5
|
+
import * as ga from '@geoarrow/geoarrow-js';
|
6
|
+
import { GeoArrowExtraPickingProps } from '../utils/picking';
|
7
|
+
import { ColorAccessor, FloatAccessor, GeoArrowPickingInfo } from '../types';
|
8
|
+
/** All properties supported by GeoArrowTextLayer */
|
9
|
+
export declare type GeoArrowTextLayerProps = Omit<TextLayerProps<arrow.Table>, 'background' | 'data' | 'getBackgroundColor' | 'getBorderColor' | 'getBorderWidth' | 'getText' | 'getPosition' | 'getColor' | 'getSize' | 'getAngle' | 'getTextAnchor' | 'getAlignmentBaseline' | 'getPixelOffset'> & _GeoArrowTextLayerProps & CompositeLayerProps;
|
10
|
+
/** Properties added by GeoArrowTextLayer */
|
11
|
+
declare type _GeoArrowTextLayerProps = {
|
12
|
+
data: arrow.Table;
|
13
|
+
/** Background color accessor.
|
14
|
+
* @default [255, 255, 255, 255]
|
15
|
+
*/
|
16
|
+
getBackgroundColor?: ColorAccessor;
|
17
|
+
/** Border color accessor.
|
18
|
+
* @default [0, 0, 0, 255]
|
19
|
+
*/
|
20
|
+
getBorderColor?: ColorAccessor;
|
21
|
+
/** Border width accessor.
|
22
|
+
* @default 0
|
23
|
+
*/
|
24
|
+
getBorderWidth?: FloatAccessor;
|
25
|
+
/**
|
26
|
+
* Label text accessor
|
27
|
+
*/
|
28
|
+
getText: arrow.Vector<arrow.Utf8>;
|
29
|
+
/**
|
30
|
+
* Anchor position accessor
|
31
|
+
*/
|
32
|
+
getPosition?: ga.vector.PointVector;
|
33
|
+
/**
|
34
|
+
* Label color accessor
|
35
|
+
* @default [0, 0, 0, 255]
|
36
|
+
*/
|
37
|
+
getColor?: ColorAccessor;
|
38
|
+
/**
|
39
|
+
* Label size accessor
|
40
|
+
* @default 32
|
41
|
+
*/
|
42
|
+
getSize?: FloatAccessor;
|
43
|
+
/**
|
44
|
+
* Label rotation accessor, in degrees
|
45
|
+
* @default 0
|
46
|
+
*/
|
47
|
+
getAngle?: FloatAccessor;
|
48
|
+
/**
|
49
|
+
* Horizontal alignment accessor
|
50
|
+
* @default 'middle'
|
51
|
+
*/
|
52
|
+
getTextAnchor?: arrow.Vector<arrow.Utf8> | 'start' | 'middle' | 'end';
|
53
|
+
/**
|
54
|
+
* Vertical alignment accessor
|
55
|
+
* @default 'center'
|
56
|
+
*/
|
57
|
+
getAlignmentBaseline?: arrow.Vector<arrow.Utf8> | 'top' | 'center' | 'bottom';
|
58
|
+
/**
|
59
|
+
* Label offset from the anchor position, [x, y] in pixels
|
60
|
+
* @default [0, 0]
|
61
|
+
*/
|
62
|
+
getPixelOffset?: arrow.Vector<arrow.FixedSizeList<arrow.Int>> | [number, number];
|
63
|
+
/**
|
64
|
+
* If `true`, validate the arrays provided (e.g. chunk lengths)
|
65
|
+
* @default true
|
66
|
+
*/
|
67
|
+
_validate?: boolean;
|
68
|
+
};
|
69
|
+
export declare class GeoArrowTextLayer<ExtraProps extends object = object> extends CompositeLayer<GeoArrowTextLayerProps & ExtraProps> {
|
70
|
+
static defaultProps: DefaultProps<GeoArrowTextLayerProps>;
|
71
|
+
static layerName: string;
|
72
|
+
getPickingInfo(params: GetPickingInfoParams & {
|
73
|
+
sourceLayer: {
|
74
|
+
props: GeoArrowExtraPickingProps;
|
75
|
+
};
|
76
|
+
}): GeoArrowPickingInfo;
|
77
|
+
renderLayers(): Layer<object> | LayersList | null;
|
78
|
+
_renderLayersPoint(geometryColumn: ga.vector.PointVector): Layer<object> | LayersList | null;
|
79
|
+
}
|
80
|
+
export {};
|
@@ -0,0 +1,175 @@
|
|
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.GeoArrowTextLayer = void 0;
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
11
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
12
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
13
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
14
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
16
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
17
|
+
var _typed = require("@deck.gl/core/typed");
|
18
|
+
var _typed2 = require("@deck.gl/layers/typed");
|
19
|
+
var ga = _interopRequireWildcard(require("@geoarrow/geoarrow-js"));
|
20
|
+
var _utils = require("../utils/utils");
|
21
|
+
var _picking = require("../utils/picking");
|
22
|
+
var _constants = require("../constants");
|
23
|
+
var _validate = require("../utils/validate");
|
24
|
+
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); }
|
25
|
+
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; }
|
26
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
27
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
28
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
29
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
|
30
|
+
// Copyright contributors to the kepler.gl project
|
31
|
+
// deck.gl-community
|
32
|
+
// SPDX-License-Identifier: MIT
|
33
|
+
// Copyright (c) vis.gl contributors
|
34
|
+
/** All properties supported by GeoArrowTextLayer */
|
35
|
+
|
36
|
+
/** Properties added by GeoArrowTextLayer */
|
37
|
+
|
38
|
+
// Remove data and getPosition from the upstream default props
|
39
|
+
var _TextLayer$defaultPro = _typed2.TextLayer.defaultProps,
|
40
|
+
_data = _TextLayer$defaultPro.data,
|
41
|
+
_getPosition = _TextLayer$defaultPro.getPosition,
|
42
|
+
_getText = _TextLayer$defaultPro.getText,
|
43
|
+
_getTextAnchor = _TextLayer$defaultPro.getTextAnchor,
|
44
|
+
_getAlignmentBaseline = _TextLayer$defaultPro.getAlignmentBaseline,
|
45
|
+
_getPixelOffset = _TextLayer$defaultPro.getPixelOffset,
|
46
|
+
_defaultProps = (0, _objectWithoutProperties2["default"])(_TextLayer$defaultPro, ["data", "getPosition", "getText", "getTextAnchor", "getAlignmentBaseline", "getPixelOffset"]);
|
47
|
+
|
48
|
+
// Default props added by us
|
49
|
+
var ourDefaultProps = {
|
50
|
+
getTextAnchor: 'middle',
|
51
|
+
getAlignmentBaseline: 'center',
|
52
|
+
getPixelOffset: [0, 0],
|
53
|
+
_validate: true
|
54
|
+
};
|
55
|
+
|
56
|
+
// @ts-expect-error Type 'Uint8Array' is not assignable to type 'RGBAColor'
|
57
|
+
var defaultProps = _objectSpread(_objectSpread({}, _defaultProps), ourDefaultProps);
|
58
|
+
var GeoArrowTextLayer = exports.GeoArrowTextLayer = /*#__PURE__*/function (_CompositeLayer) {
|
59
|
+
function GeoArrowTextLayer() {
|
60
|
+
(0, _classCallCheck2["default"])(this, GeoArrowTextLayer);
|
61
|
+
return _callSuper(this, GeoArrowTextLayer, arguments);
|
62
|
+
}
|
63
|
+
(0, _inherits2["default"])(GeoArrowTextLayer, _CompositeLayer);
|
64
|
+
return (0, _createClass2["default"])(GeoArrowTextLayer, [{
|
65
|
+
key: "getPickingInfo",
|
66
|
+
value: function getPickingInfo(params) {
|
67
|
+
return (0, _picking.getPickingInfo)(params, this.props.data);
|
68
|
+
}
|
69
|
+
}, {
|
70
|
+
key: "renderLayers",
|
71
|
+
value: function renderLayers() {
|
72
|
+
var table = this.props.data;
|
73
|
+
if (this.props.getPosition !== undefined) {
|
74
|
+
var geometryColumn = this.props.getPosition;
|
75
|
+
if (geometryColumn !== undefined && ga.vector.isPointVector(geometryColumn)) {
|
76
|
+
return this._renderLayersPoint(geometryColumn);
|
77
|
+
}
|
78
|
+
throw new Error('getPosition should pass in an arrow Vector of Point type');
|
79
|
+
} else {
|
80
|
+
var pointVector = (0, _utils.getGeometryVector)(table, _constants.EXTENSION_NAME.POINT);
|
81
|
+
if (pointVector !== null) {
|
82
|
+
return this._renderLayersPoint(pointVector);
|
83
|
+
}
|
84
|
+
}
|
85
|
+
throw new Error('getPosition not GeoArrow point');
|
86
|
+
}
|
87
|
+
}, {
|
88
|
+
key: "_renderLayersPoint",
|
89
|
+
value: function _renderLayersPoint(geometryColumn) {
|
90
|
+
var table = this.props.data;
|
91
|
+
if (this.props._validate) {
|
92
|
+
(0, _typed.assert)(ga.vector.isPointVector(geometryColumn));
|
93
|
+
(0, _validate.validateAccessors)(this.props, table);
|
94
|
+
}
|
95
|
+
|
96
|
+
// Exclude manually-set accessors
|
97
|
+
var _extractAccessorsFrom = (0, _utils.extractAccessorsFromProps)(this.props, ['getPosition', 'getText']),
|
98
|
+
_extractAccessorsFrom2 = (0, _slicedToArray2["default"])(_extractAccessorsFrom, 2),
|
99
|
+
accessors = _extractAccessorsFrom2[0],
|
100
|
+
otherProps = _extractAccessorsFrom2[1];
|
101
|
+
var tableOffsets = (0, _picking.computeChunkOffsets)(table.data);
|
102
|
+
var layers = [];
|
103
|
+
for (var recordBatchIdx = 0; recordBatchIdx < table.batches.length; recordBatchIdx++) {
|
104
|
+
var geometryData = geometryColumn.data[recordBatchIdx];
|
105
|
+
var flatCoordsData = ga.child.getPointChild(geometryData);
|
106
|
+
var flatCoordinateArray = flatCoordsData.values;
|
107
|
+
var textData = this.props.getText.data[recordBatchIdx];
|
108
|
+
var textValues = textData.values;
|
109
|
+
// ! TODO valueOffsets are only present for string columns
|
110
|
+
var characterOffsets = textData.valueOffsets;
|
111
|
+
|
112
|
+
// @ts-expect-error how to properly retrieve batch offset?
|
113
|
+
var batchOffset = geometryColumn._offsets[recordBatchIdx];
|
114
|
+
var props = _objectSpread(_objectSpread(_objectSpread({}, ourDefaultProps), otherProps), {}, {
|
115
|
+
// used for picking purposes
|
116
|
+
// @ts-expect-error
|
117
|
+
recordBatchIdx: recordBatchIdx,
|
118
|
+
tableOffsets: tableOffsets,
|
119
|
+
id: "".concat(this.props.id, "-geoarrow-text-layer-").concat(recordBatchIdx),
|
120
|
+
data: {
|
121
|
+
data: table.batches[recordBatchIdx],
|
122
|
+
length: geometryData.length,
|
123
|
+
startIndices: characterOffsets,
|
124
|
+
attributes: {
|
125
|
+
// Positions need to be expanded to be one per character!
|
126
|
+
getPosition: {
|
127
|
+
value: (0, _utils.expandArrayToCoords)(flatCoordinateArray, geometryData.type.listSize, characterOffsets),
|
128
|
+
size: geometryData.type.listSize
|
129
|
+
},
|
130
|
+
// TODO: support non-ascii characters
|
131
|
+
getText: {
|
132
|
+
value: textValues
|
133
|
+
// size: 1,
|
134
|
+
}
|
135
|
+
}
|
136
|
+
},
|
137
|
+
// TODO privide more robust data comparators
|
138
|
+
dataComparator: function dataComparator(d1, d2) {
|
139
|
+
return d1.data === d2.data;
|
140
|
+
},
|
141
|
+
_subLayerProps: {
|
142
|
+
characters: {
|
143
|
+
dataComparator: function dataComparator(d1, d2) {
|
144
|
+
return d1.data === d2.data;
|
145
|
+
}
|
146
|
+
}
|
147
|
+
}
|
148
|
+
});
|
149
|
+
for (var _i = 0, _Object$entries = Object.entries(accessors); _i < _Object$entries.length; _i++) {
|
150
|
+
var _Object$entries$_i = (0, _slicedToArray2["default"])(_Object$entries[_i], 2),
|
151
|
+
propName = _Object$entries$_i[0],
|
152
|
+
propInput = _Object$entries$_i[1];
|
153
|
+
(0, _utils.assignAccessor)({
|
154
|
+
props: props,
|
155
|
+
propName: propName,
|
156
|
+
propInput: propInput,
|
157
|
+
chunkIdx: recordBatchIdx,
|
158
|
+
geomCoordOffsets: characterOffsets,
|
159
|
+
batchOffset: batchOffset
|
160
|
+
});
|
161
|
+
}
|
162
|
+
var layer = new _typed2.TextLayer(_objectSpread(_objectSpread({}, this.getSubLayerProps(props)), {}, {
|
163
|
+
// preserve binded accessors, as they are overwriten back by pass-through accessors from extensions
|
164
|
+
getFiltered: props.getFiltered,
|
165
|
+
getFilterValue: props.getFilterValue
|
166
|
+
}));
|
167
|
+
layers.push(layer);
|
168
|
+
}
|
169
|
+
return layers;
|
170
|
+
}
|
171
|
+
}]);
|
172
|
+
}(_typed.CompositeLayer);
|
173
|
+
(0, _defineProperty2["default"])(GeoArrowTextLayer, "defaultProps", defaultProps);
|
174
|
+
(0, _defineProperty2["default"])(GeoArrowTextLayer, "layerName", 'GeoArrowTextLayer');
|
175
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZWQiLCJyZXF1aXJlIiwiX3R5cGVkMiIsImdhIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfdXRpbHMiLCJfcGlja2luZyIsIl9jb25zdGFudHMiLCJfdmFsaWRhdGUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfY2FsbFN1cGVyIiwibyIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiYXBwbHkiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9UZXh0TGF5ZXIkZGVmYXVsdFBybyIsIlRleHRMYXllciIsImRlZmF1bHRQcm9wcyIsIl9kYXRhIiwiZGF0YSIsIl9nZXRQb3NpdGlvbiIsImdldFBvc2l0aW9uIiwiX2dldFRleHQiLCJnZXRUZXh0IiwiX2dldFRleHRBbmNob3IiLCJnZXRUZXh0QW5jaG9yIiwiX2dldEFsaWdubWVudEJhc2VsaW5lIiwiZ2V0QWxpZ25tZW50QmFzZWxpbmUiLCJfZ2V0UGl4ZWxPZmZzZXQiLCJnZXRQaXhlbE9mZnNldCIsIl9kZWZhdWx0UHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwib3VyRGVmYXVsdFByb3BzIiwiR2VvQXJyb3dUZXh0TGF5ZXIiLCJleHBvcnRzIiwiX0NvbXBvc2l0ZUxheWVyIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJnZXRQaWNraW5nSW5mbyIsInBhcmFtcyIsInByb3BzIiwicmVuZGVyTGF5ZXJzIiwidGFibGUiLCJ1bmRlZmluZWQiLCJnZW9tZXRyeUNvbHVtbiIsInZlY3RvciIsImlzUG9pbnRWZWN0b3IiLCJfcmVuZGVyTGF5ZXJzUG9pbnQiLCJFcnJvciIsInBvaW50VmVjdG9yIiwiZ2V0R2VvbWV0cnlWZWN0b3IiLCJFWFRFTlNJT05fTkFNRSIsIlBPSU5UIiwiYXNzZXJ0IiwidmFsaWRhdGVBY2Nlc3NvcnMiLCJfZXh0cmFjdEFjY2Vzc29yc0Zyb20iLCJleHRyYWN0QWNjZXNzb3JzRnJvbVByb3BzIiwiX2V4dHJhY3RBY2Nlc3NvcnNGcm9tMiIsIl9zbGljZWRUb0FycmF5MiIsImFjY2Vzc29ycyIsIm90aGVyUHJvcHMiLCJ0YWJsZU9mZnNldHMiLCJjb21wdXRlQ2h1bmtPZmZzZXRzIiwibGF5ZXJzIiwicmVjb3JkQmF0Y2hJZHgiLCJiYXRjaGVzIiwiZ2VvbWV0cnlEYXRhIiwiZmxhdENvb3Jkc0RhdGEiLCJjaGlsZCIsImdldFBvaW50Q2hpbGQiLCJmbGF0Q29vcmRpbmF0ZUFycmF5IiwidmFsdWVzIiwidGV4dERhdGEiLCJ0ZXh0VmFsdWVzIiwiY2hhcmFjdGVyT2Zmc2V0cyIsInZhbHVlT2Zmc2V0cyIsImJhdGNoT2Zmc2V0IiwiX29mZnNldHMiLCJpZCIsImNvbmNhdCIsInN0YXJ0SW5kaWNlcyIsImF0dHJpYnV0ZXMiLCJleHBhbmRBcnJheVRvQ29vcmRzIiwidHlwZSIsImxpc3RTaXplIiwic2l6ZSIsImRhdGFDb21wYXJhdG9yIiwiZDEiLCJkMiIsIl9zdWJMYXllclByb3BzIiwiY2hhcmFjdGVycyIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsInByb3BOYW1lIiwicHJvcElucHV0IiwiYXNzaWduQWNjZXNzb3IiLCJjaHVua0lkeCIsImdlb21Db29yZE9mZnNldHMiLCJsYXllciIsImdldFN1YkxheWVyUHJvcHMiLCJnZXRGaWx0ZXJlZCIsImdldEZpbHRlclZhbHVlIiwiQ29tcG9zaXRlTGF5ZXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGF5ZXJzL2dlby1hcnJvdy10ZXh0LWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGRlY2suZ2wtY29tbXVuaXR5XG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgKGMpIHZpcy5nbCBjb250cmlidXRvcnNcblxuaW1wb3J0IHtcbiAgQ29tcG9zaXRlTGF5ZXIsXG4gIENvbXBvc2l0ZUxheWVyUHJvcHMsXG4gIERlZmF1bHRQcm9wcyxcbiAgR2V0UGlja2luZ0luZm9QYXJhbXMsXG4gIExheWVyLFxuICBMYXllcnNMaXN0LFxuICBhc3NlcnRcbn0gZnJvbSAnQGRlY2suZ2wvY29yZS90eXBlZCc7XG5pbXBvcnQge1RleHRMYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzL3R5cGVkJztcbmltcG9ydCB0eXBlIHtUZXh0TGF5ZXJQcm9wc30gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcbmltcG9ydCAqIGFzIGFycm93IGZyb20gJ2FwYWNoZS1hcnJvdyc7XG5pbXBvcnQgKiBhcyBnYSBmcm9tICdAZ2VvYXJyb3cvZ2VvYXJyb3ctanMnO1xuaW1wb3J0IHtcbiAgYXNzaWduQWNjZXNzb3IsXG4gIGV4cGFuZEFycmF5VG9Db29yZHMsXG4gIGV4dHJhY3RBY2Nlc3NvcnNGcm9tUHJvcHMsXG4gIGdldEdlb21ldHJ5VmVjdG9yXG59IGZyb20gJy4uL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7R2VvQXJyb3dFeHRyYVBpY2tpbmdQcm9wcywgY29tcHV0ZUNodW5rT2Zmc2V0cywgZ2V0UGlja2luZ0luZm99IGZyb20gJy4uL3V0aWxzL3BpY2tpbmcnO1xuaW1wb3J0IHtDb2xvckFjY2Vzc29yLCBGbG9hdEFjY2Vzc29yLCBHZW9BcnJvd1BpY2tpbmdJbmZvLCBFeHRlbnNpb25Qcm9wc30gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtFWFRFTlNJT05fTkFNRX0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7dmFsaWRhdGVBY2Nlc3NvcnN9IGZyb20gJy4uL3V0aWxzL3ZhbGlkYXRlJztcblxuLyoqIEFsbCBwcm9wZXJ0aWVzIHN1cHBvcnRlZCBieSBHZW9BcnJvd1RleHRMYXllciAqL1xuZXhwb3J0IHR5cGUgR2VvQXJyb3dUZXh0TGF5ZXJQcm9wcyA9IE9taXQ8XG4gIFRleHRMYXllclByb3BzPGFycm93LlRhYmxlPixcbiAgLy8gV2UgcmVtb3ZlIGJhY2tncm91bmQgZm9yIG5vdyBiZWNhdXNlIHRoZXJlIGFyZSBzcGVjaWFsIHJlcXVpcmVtZW50cyBmb3JcbiAgLy8gdXNpbmcgYmluYXJ5IGF0dHJpYnV0ZXMgd2l0aCBiYWNrZ3JvdW5kXG4gIC8vIGh0dHBzOi8vZGVjay5nbC9kb2NzL2FwaS1yZWZlcmVuY2UvbGF5ZXJzL3RleHQtbGF5ZXIjdXNlLWJpbmFyeS1hdHRyaWJ1dGVzLXdpdGgtYmFja2dyb3VuZFxuICB8ICdiYWNrZ3JvdW5kJ1xuICB8ICdkYXRhJ1xuICB8ICdnZXRCYWNrZ3JvdW5kQ29sb3InXG4gIHwgJ2dldEJvcmRlckNvbG9yJ1xuICB8ICdnZXRCb3JkZXJXaWR0aCdcbiAgfCAnZ2V0VGV4dCdcbiAgfCAnZ2V0UG9zaXRpb24nXG4gIHwgJ2dldENvbG9yJ1xuICB8ICdnZXRTaXplJ1xuICB8ICdnZXRBbmdsZSdcbiAgfCAnZ2V0VGV4dEFuY2hvcidcbiAgfCAnZ2V0QWxpZ25tZW50QmFzZWxpbmUnXG4gIHwgJ2dldFBpeGVsT2Zmc2V0J1xuPiAmXG4gIF9HZW9BcnJvd1RleHRMYXllclByb3BzICZcbiAgQ29tcG9zaXRlTGF5ZXJQcm9wcztcblxuLyoqIFByb3BlcnRpZXMgYWRkZWQgYnkgR2VvQXJyb3dUZXh0TGF5ZXIgKi9cbnR5cGUgX0dlb0Fycm93VGV4dExheWVyUHJvcHMgPSB7XG4gIGRhdGE6IGFycm93LlRhYmxlO1xuXG4gIC8qKiBCYWNrZ3JvdW5kIGNvbG9yIGFjY2Vzc29yLlxuICAgKiBAZGVmYXVsdCBbMjU1LCAyNTUsIDI1NSwgMjU1XVxuICAgKi9cbiAgZ2V0QmFja2dyb3VuZENvbG9yPzogQ29sb3JBY2Nlc3NvcjtcbiAgLyoqIEJvcmRlciBjb2xvciBhY2Nlc3Nvci5cbiAgICogQGRlZmF1bHQgWzAsIDAsIDAsIDI1NV1cbiAgICovXG4gIGdldEJvcmRlckNvbG9yPzogQ29sb3JBY2Nlc3NvcjtcbiAgLyoqIEJvcmRlciB3aWR0aCBhY2Nlc3Nvci5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgZ2V0Qm9yZGVyV2lkdGg/OiBGbG9hdEFjY2Vzc29yO1xuICAvKipcbiAgICogTGFiZWwgdGV4dCBhY2Nlc3NvclxuICAgKi9cbiAgZ2V0VGV4dDogYXJyb3cuVmVjdG9yPGFycm93LlV0Zjg+O1xuICAvKipcbiAgICogQW5jaG9yIHBvc2l0aW9uIGFjY2Vzc29yXG4gICAqL1xuICBnZXRQb3NpdGlvbj86IGdhLnZlY3Rvci5Qb2ludFZlY3RvcjtcbiAgLyoqXG4gICAqIExhYmVsIGNvbG9yIGFjY2Vzc29yXG4gICAqIEBkZWZhdWx0IFswLCAwLCAwLCAyNTVdXG4gICAqL1xuICBnZXRDb2xvcj86IENvbG9yQWNjZXNzb3I7XG4gIC8qKlxuICAgKiBMYWJlbCBzaXplIGFjY2Vzc29yXG4gICAqIEBkZWZhdWx0IDMyXG4gICAqL1xuICBnZXRTaXplPzogRmxvYXRBY2Nlc3NvcjtcbiAgLyoqXG4gICAqIExhYmVsIHJvdGF0aW9uIGFjY2Vzc29yLCBpbiBkZWdyZWVzXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGdldEFuZ2xlPzogRmxvYXRBY2Nlc3NvcjtcbiAgLyoqXG4gICAqIEhvcml6b250YWwgYWxpZ25tZW50IGFjY2Vzc29yXG4gICAqIEBkZWZhdWx0ICdtaWRkbGUnXG4gICAqL1xuICBnZXRUZXh0QW5jaG9yPzogYXJyb3cuVmVjdG9yPGFycm93LlV0Zjg+IHwgJ3N0YXJ0JyB8ICdtaWRkbGUnIHwgJ2VuZCc7XG4gIC8qKlxuICAgKiBWZXJ0aWNhbCBhbGlnbm1lbnQgYWNjZXNzb3JcbiAgICogQGRlZmF1bHQgJ2NlbnRlcidcbiAgICovXG4gIGdldEFsaWdubWVudEJhc2VsaW5lPzogYXJyb3cuVmVjdG9yPGFycm93LlV0Zjg+IHwgJ3RvcCcgfCAnY2VudGVyJyB8ICdib3R0b20nO1xuICAvKipcbiAgICogTGFiZWwgb2Zmc2V0IGZyb20gdGhlIGFuY2hvciBwb3NpdGlvbiwgW3gsIHldIGluIHBpeGVsc1xuICAgKiBAZGVmYXVsdCBbMCwgMF1cbiAgICovXG4gIGdldFBpeGVsT2Zmc2V0PzogYXJyb3cuVmVjdG9yPGFycm93LkZpeGVkU2l6ZUxpc3Q8YXJyb3cuSW50Pj4gfCBbbnVtYmVyLCBudW1iZXJdO1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHZhbGlkYXRlIHRoZSBhcnJheXMgcHJvdmlkZWQgKGUuZy4gY2h1bmsgbGVuZ3RocylcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgX3ZhbGlkYXRlPzogYm9vbGVhbjtcbn07XG5cbi8vIFJlbW92ZSBkYXRhIGFuZCBnZXRQb3NpdGlvbiBmcm9tIHRoZSB1cHN0cmVhbSBkZWZhdWx0IHByb3BzXG5jb25zdCB7XG4gIGRhdGE6IF9kYXRhLFxuICBnZXRQb3NpdGlvbjogX2dldFBvc2l0aW9uLFxuICBnZXRUZXh0OiBfZ2V0VGV4dCxcbiAgZ2V0VGV4dEFuY2hvcjogX2dldFRleHRBbmNob3IsXG4gIGdldEFsaWdubWVudEJhc2VsaW5lOiBfZ2V0QWxpZ25tZW50QmFzZWxpbmUsXG4gIGdldFBpeGVsT2Zmc2V0OiBfZ2V0UGl4ZWxPZmZzZXQsXG4gIC4uLl9kZWZhdWx0UHJvcHNcbn0gPSBUZXh0TGF5ZXIuZGVmYXVsdFByb3BzO1xuXG4vLyBEZWZhdWx0IHByb3BzIGFkZGVkIGJ5IHVzXG5jb25zdCBvdXJEZWZhdWx0UHJvcHM6IFBpY2s8XG4gIEdlb0Fycm93VGV4dExheWVyUHJvcHMsXG4gICdnZXRUZXh0QW5jaG9yJyB8ICdnZXRBbGlnbm1lbnRCYXNlbGluZScgfCAnZ2V0UGl4ZWxPZmZzZXQnIHwgJ192YWxpZGF0ZSdcbj4gPSB7XG4gIGdldFRleHRBbmNob3I6ICdtaWRkbGUnLFxuICBnZXRBbGlnbm1lbnRCYXNlbGluZTogJ2NlbnRlcicsXG4gIGdldFBpeGVsT2Zmc2V0OiBbMCwgMF0sXG4gIF92YWxpZGF0ZTogdHJ1ZVxufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlICdVaW50OEFycmF5JyBpcyBub3QgYXNzaWduYWJsZSB0byB0eXBlICdSR0JBQ29sb3InXG5jb25zdCBkZWZhdWx0UHJvcHM6IERlZmF1bHRQcm9wczxHZW9BcnJvd1RleHRMYXllclByb3BzPiA9IHtcbiAgLi4uX2RlZmF1bHRQcm9wcyxcbiAgLi4ub3VyRGVmYXVsdFByb3BzXG59O1xuXG5leHBvcnQgY2xhc3MgR2VvQXJyb3dUZXh0TGF5ZXI8RXh0cmFQcm9wcyBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4gZXh0ZW5kcyBDb21wb3NpdGVMYXllcjxcbiAgR2VvQXJyb3dUZXh0TGF5ZXJQcm9wcyAmIEV4dHJhUHJvcHNcbj4ge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuICBzdGF0aWMgbGF5ZXJOYW1lID0gJ0dlb0Fycm93VGV4dExheWVyJztcblxuICBnZXRQaWNraW5nSW5mbyhcbiAgICBwYXJhbXM6IEdldFBpY2tpbmdJbmZvUGFyYW1zICYge1xuICAgICAgc291cmNlTGF5ZXI6IHtwcm9wczogR2VvQXJyb3dFeHRyYVBpY2tpbmdQcm9wc307XG4gICAgfVxuICApOiBHZW9BcnJvd1BpY2tpbmdJbmZvIHtcbiAgICByZXR1cm4gZ2V0UGlja2luZ0luZm8ocGFyYW1zLCB0aGlzLnByb3BzLmRhdGEpO1xuICB9XG5cbiAgcmVuZGVyTGF5ZXJzKCk6IExheWVyPG9iamVjdD4gfCBMYXllcnNMaXN0IHwgbnVsbCB7XG4gICAgY29uc3Qge2RhdGE6IHRhYmxlfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5nZXRQb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBnZW9tZXRyeUNvbHVtbiA9IHRoaXMucHJvcHMuZ2V0UG9zaXRpb247XG4gICAgICBpZiAoZ2VvbWV0cnlDb2x1bW4gIT09IHVuZGVmaW5lZCAmJiBnYS52ZWN0b3IuaXNQb2ludFZlY3RvcihnZW9tZXRyeUNvbHVtbikpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckxheWVyc1BvaW50KGdlb21ldHJ5Q29sdW1uKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRQb3NpdGlvbiBzaG91bGQgcGFzcyBpbiBhbiBhcnJvdyBWZWN0b3Igb2YgUG9pbnQgdHlwZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwb2ludFZlY3RvciA9IGdldEdlb21ldHJ5VmVjdG9yKHRhYmxlLCBFWFRFTlNJT05fTkFNRS5QT0lOVCk7XG4gICAgICBpZiAocG9pbnRWZWN0b3IgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckxheWVyc1BvaW50KHBvaW50VmVjdG9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldFBvc2l0aW9uIG5vdCBHZW9BcnJvdyBwb2ludCcpO1xuICB9XG5cbiAgX3JlbmRlckxheWVyc1BvaW50KGdlb21ldHJ5Q29sdW1uOiBnYS52ZWN0b3IuUG9pbnRWZWN0b3IpOiBMYXllcjxvYmplY3Q+IHwgTGF5ZXJzTGlzdCB8IG51bGwge1xuICAgIGNvbnN0IHtkYXRhOiB0YWJsZX0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuX3ZhbGlkYXRlKSB7XG4gICAgICBhc3NlcnQoZ2EudmVjdG9yLmlzUG9pbnRWZWN0b3IoZ2VvbWV0cnlDb2x1bW4pKTtcbiAgICAgIHZhbGlkYXRlQWNjZXNzb3JzKHRoaXMucHJvcHMsIHRhYmxlKTtcbiAgICB9XG5cbiAgICAvLyBFeGNsdWRlIG1hbnVhbGx5LXNldCBhY2Nlc3NvcnNcbiAgICBjb25zdCBbYWNjZXNzb3JzLCBvdGhlclByb3BzXSA9IGV4dHJhY3RBY2Nlc3NvcnNGcm9tUHJvcHModGhpcy5wcm9wcywgW1xuICAgICAgJ2dldFBvc2l0aW9uJyxcbiAgICAgICdnZXRUZXh0J1xuICAgIF0pO1xuICAgIGNvbnN0IHRhYmxlT2Zmc2V0cyA9IGNvbXB1dGVDaHVua09mZnNldHModGFibGUuZGF0YSk7XG5cbiAgICBjb25zdCBsYXllcnM6IFRleHRMYXllcjxhbnk+W10gPSBbXTtcbiAgICBmb3IgKGxldCByZWNvcmRCYXRjaElkeCA9IDA7IHJlY29yZEJhdGNoSWR4IDwgdGFibGUuYmF0Y2hlcy5sZW5ndGg7IHJlY29yZEJhdGNoSWR4KyspIHtcbiAgICAgIGNvbnN0IGdlb21ldHJ5RGF0YSA9IGdlb21ldHJ5Q29sdW1uLmRhdGFbcmVjb3JkQmF0Y2hJZHhdO1xuICAgICAgY29uc3QgZmxhdENvb3Jkc0RhdGEgPSBnYS5jaGlsZC5nZXRQb2ludENoaWxkKGdlb21ldHJ5RGF0YSk7XG4gICAgICBjb25zdCBmbGF0Q29vcmRpbmF0ZUFycmF5ID0gZmxhdENvb3Jkc0RhdGEudmFsdWVzO1xuICAgICAgY29uc3QgdGV4dERhdGEgPSB0aGlzLnByb3BzLmdldFRleHQuZGF0YVtyZWNvcmRCYXRjaElkeF07XG4gICAgICBjb25zdCB0ZXh0VmFsdWVzID0gdGV4dERhdGEudmFsdWVzO1xuICAgICAgLy8gISBUT0RPIHZhbHVlT2Zmc2V0cyBhcmUgb25seSBwcmVzZW50IGZvciBzdHJpbmcgY29sdW1uc1xuICAgICAgY29uc3QgY2hhcmFjdGVyT2Zmc2V0cyA9IHRleHREYXRhLnZhbHVlT2Zmc2V0cztcblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBob3cgdG8gcHJvcGVybHkgcmV0cmlldmUgYmF0Y2ggb2Zmc2V0P1xuICAgICAgY29uc3QgYmF0Y2hPZmZzZXQgPSBnZW9tZXRyeUNvbHVtbi5fb2Zmc2V0c1tyZWNvcmRCYXRjaElkeF07XG5cbiAgICAgIGNvbnN0IHByb3BzOiBUZXh0TGF5ZXJQcm9wczxhbnk+ICYgRXh0ZW5zaW9uUHJvcHMgPSB7XG4gICAgICAgIC8vIE5vdGU6IGJlY2F1c2UgdGhpcyBpcyBhIGNvbXBvc2l0ZSBsYXllciBhbmQgbm90IGRvaW5nIHRoZSByZW5kZXJpbmdcbiAgICAgICAgLy8gaXRzZWxmLCB3ZSBzdGlsbCBoYXZlIHRvIHBhc3MgaW4gb3VyIGRlZmF1bHRQcm9wc1xuICAgICAgICAuLi5vdXJEZWZhdWx0UHJvcHMsXG4gICAgICAgIC4uLm90aGVyUHJvcHMsXG5cbiAgICAgICAgLy8gdXNlZCBmb3IgcGlja2luZyBwdXJwb3Nlc1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJlY29yZEJhdGNoSWR4LFxuICAgICAgICB0YWJsZU9mZnNldHMsXG5cbiAgICAgICAgaWQ6IGAke3RoaXMucHJvcHMuaWR9LWdlb2Fycm93LXRleHQtbGF5ZXItJHtyZWNvcmRCYXRjaElkeH1gLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZGF0YTogdGFibGUuYmF0Y2hlc1tyZWNvcmRCYXRjaElkeF0sXG4gICAgICAgICAgbGVuZ3RoOiBnZW9tZXRyeURhdGEubGVuZ3RoLFxuICAgICAgICAgIHN0YXJ0SW5kaWNlczogY2hhcmFjdGVyT2Zmc2V0cyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAvLyBQb3NpdGlvbnMgbmVlZCB0byBiZSBleHBhbmRlZCB0byBiZSBvbmUgcGVyIGNoYXJhY3RlciFcbiAgICAgICAgICAgIGdldFBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBleHBhbmRBcnJheVRvQ29vcmRzKFxuICAgICAgICAgICAgICAgIGZsYXRDb29yZGluYXRlQXJyYXksXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnlEYXRhLnR5cGUubGlzdFNpemUsXG4gICAgICAgICAgICAgICAgY2hhcmFjdGVyT2Zmc2V0c1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBzaXplOiBnZW9tZXRyeURhdGEudHlwZS5saXN0U2l6ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIFRPRE86IHN1cHBvcnQgbm9uLWFzY2lpIGNoYXJhY3RlcnNcbiAgICAgICAgICAgIGdldFRleHQ6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHRleHRWYWx1ZXNcbiAgICAgICAgICAgICAgLy8gc2l6ZTogMSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFRPRE8gcHJpdmlkZSBtb3JlIHJvYnVzdCBkYXRhIGNvbXBhcmF0b3JzXG4gICAgICAgIGRhdGFDb21wYXJhdG9yOiAoZDEsIGQyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGQxLmRhdGEgPT09IGQyLmRhdGE7XG4gICAgICAgIH0sXG4gICAgICAgIF9zdWJMYXllclByb3BzOiB7XG4gICAgICAgICAgY2hhcmFjdGVyczoge1xuICAgICAgICAgICAgZGF0YUNvbXBhcmF0b3I6IChkMSwgZDIpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGQxLmRhdGEgPT09IGQyLmRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKGNvbnN0IFtwcm9wTmFtZSwgcHJvcElucHV0XSBvZiBPYmplY3QuZW50cmllcyhhY2Nlc3NvcnMpKSB7XG4gICAgICAgIGFzc2lnbkFjY2Vzc29yKHtcbiAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICBwcm9wSW5wdXQsXG4gICAgICAgICAgY2h1bmtJZHg6IHJlY29yZEJhdGNoSWR4LFxuICAgICAgICAgIGdlb21Db29yZE9mZnNldHM6IGNoYXJhY3Rlck9mZnNldHMsXG4gICAgICAgICAgYmF0Y2hPZmZzZXRcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxheWVyID0gbmV3IFRleHRMYXllcih7XG4gICAgICAgIC4uLnRoaXMuZ2V0U3ViTGF5ZXJQcm9wcyhwcm9wcyksXG4gICAgICAgIC8vIHByZXNlcnZlIGJpbmRlZCBhY2Nlc3NvcnMsIGFzIHRoZXkgYXJlIG92ZXJ3cml0ZW4gYmFjayBieSBwYXNzLXRocm91Z2ggYWNjZXNzb3JzIGZyb20gZXh0ZW5zaW9uc1xuICAgICAgICBnZXRGaWx0ZXJlZDogcHJvcHMuZ2V0RmlsdGVyZWQsXG4gICAgICAgIGdldEZpbHRlclZhbHVlOiBwcm9wcy5nZXRGaWx0ZXJWYWx1ZVxuICAgICAgfSk7XG4gICAgICBsYXllcnMucHVzaChsYXllcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxheWVycztcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBT0EsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBU0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBR0EsSUFBQUUsRUFBQSxHQUFBQyx1QkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBTUEsSUFBQUssUUFBQSxHQUFBTCxPQUFBO0FBRUEsSUFBQU0sVUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sU0FBQSxHQUFBUCxPQUFBO0FBQW9ELFNBQUFRLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFB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
|
package/dist/types.d.ts
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
/// <reference types="node" />
|
2
|
+
import type { BinaryAttribute, Color, PickingInfo } from '@deck.gl/core/typed';
|
3
|
+
import { TypedArray } from '@math.gl/types';
|
4
|
+
import * as arrow from 'apache-arrow';
|
5
|
+
/**
|
6
|
+
* An individual layer's data
|
7
|
+
*/
|
8
|
+
export declare type GeoArrowLayerData<T> = {
|
9
|
+
data: T;
|
10
|
+
length: number;
|
11
|
+
attributes?: Record<string, TypedArray | Buffer | BinaryAttribute>;
|
12
|
+
};
|
13
|
+
/**
|
14
|
+
* Internal type for layer data handling, used in `wrapAccessorFunction`.
|
15
|
+
*/
|
16
|
+
export declare type _GeoArrowInternalLayerData<T> = GeoArrowLayerData<T> & {
|
17
|
+
/**
|
18
|
+
* A lookup table from expanded multi-geometry index to original index.
|
19
|
+
*
|
20
|
+
* This is omitted from the user-facing type because in `wrapAccessorFunction`
|
21
|
+
* in `utils.ts` we apply the lookup from "exploded" row to "original" row.
|
22
|
+
*/
|
23
|
+
invertedGeomOffsets?: Uint8Array | Uint16Array | Uint32Array;
|
24
|
+
};
|
25
|
+
export declare type AccessorContext<T> = {
|
26
|
+
/** The current row index of the current iteration */
|
27
|
+
index: number;
|
28
|
+
/** The value of the `data` prop */
|
29
|
+
data: GeoArrowLayerData<T>;
|
30
|
+
/** A pre-allocated array. The accessor function can optionally fill data into this array and return it,
|
31
|
+
* instead of creating a new array for every object. In some browsers this improves performance significantly
|
32
|
+
* by reducing garbage collection. */
|
33
|
+
target: number[];
|
34
|
+
};
|
35
|
+
/**
|
36
|
+
* Internal type for layer data handling, used in `wrapAccessorFunction`.
|
37
|
+
*/
|
38
|
+
export declare type _InternalAccessorContext<T> = AccessorContext<T> & {
|
39
|
+
/** The value of the `data` prop */
|
40
|
+
data: _GeoArrowInternalLayerData<T>;
|
41
|
+
};
|
42
|
+
/** Function that returns a value for each object. */
|
43
|
+
export declare type AccessorFunction<In, Out> = (
|
44
|
+
/** Contextual information of the current element. */
|
45
|
+
objectInfo: AccessorContext<In>) => Out;
|
46
|
+
/** Either a uniform value for all objects, or a function that returns a value for each object. */
|
47
|
+
export declare type Accessor<In, Out> = Out | AccessorFunction<In, Out>;
|
48
|
+
export declare type GeoArrowPickingInfo = PickingInfo & {
|
49
|
+
object?: arrow.StructRowProxy;
|
50
|
+
};
|
51
|
+
export declare type FloatAccessor = arrow.Vector<arrow.Float> | Accessor<arrow.RecordBatch, number>;
|
52
|
+
export declare type TimestampAccessor = arrow.Vector<arrow.List<arrow.Float>>;
|
53
|
+
export declare type ColorAccessor = arrow.Vector<arrow.FixedSizeList<arrow.Uint8>> | Accessor<arrow.RecordBatch, Color | Color[]>;
|
54
|
+
export declare type NormalAccessor = arrow.Vector<arrow.FixedSizeList<arrow.Float32>> | Accessor<arrow.Table, arrow.Vector<arrow.FixedSizeList<arrow.Float32>>>;
|
55
|
+
export declare type ExtensionProps = {
|
56
|
+
getFiltered?: ({ index: number }: {
|
57
|
+
index: any;
|
58
|
+
}) => number;
|
59
|
+
getFilterValue?: (d: any, objectInfo?: {
|
60
|
+
index: number;
|
61
|
+
}) => (number | number[])[];
|
62
|
+
};
|