@kepler.gl/deckgl-arrow-layers 3.1.0-alpha.1 → 3.1.0-alpha.3

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.
@@ -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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
@@ -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
+ };