@kepler.gl/deckgl-layers 3.3.0-alpha.1 → 3.3.0-alpha.11
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/cjs/3d-building-layer/3d-building-layer.js +66 -0
- package/dist/cjs/3d-building-layer/3d-building-utils.js +166 -0
- package/dist/cjs/3d-building-layer/types.js +6 -0
- package/dist/cjs/cluster-layer/cluster-layer.js +292 -0
- package/dist/cjs/column-layer/enhanced-column-layer.js +160 -0
- package/dist/{deckgl-extensions → cjs/deckgl-extensions}/filter-arrow-layer.js +1 -1
- package/dist/cjs/deckgl-extensions/filter-shader-module.js +26 -0
- package/dist/cjs/globe/atmosphere-layer.js +341 -0
- package/dist/cjs/globe/enhanced-multi-icon-layer.js +63 -0
- package/dist/cjs/globe/globe-depth-disk-layer.js +145 -0
- package/dist/cjs/globe/globe-layers.js +574 -0
- package/dist/cjs/globe/globe-stars-layer.js +99 -0
- package/dist/cjs/globe/globe-stars-layer.spec.js +42 -0
- package/dist/cjs/globe/globe-view.js +404 -0
- package/dist/cjs/globe/index.js +140 -0
- package/dist/cjs/globe/mvt-label-layer.js +190 -0
- package/dist/cjs/grid-layer/enhanced-cpu-grid-layer.js +116 -0
- package/dist/cjs/hexagon-layer/enhanced-hexagon-layer.js +134 -0
- package/dist/cjs/index.js +163 -0
- package/dist/cjs/layer-utils/aggregation-utils.js +181 -0
- package/dist/cjs/layer-utils/cluster-utils.js +95 -0
- package/dist/cjs/layer-utils/cpu-aggregator.js +798 -0
- package/dist/cjs/layer-utils/globe-cell-utils.js +203 -0
- package/dist/cjs/layer-utils/globe-cell-utils.spec.js +118 -0
- package/dist/cjs/layer-utils/shader-utils.js +38 -0
- package/dist/cjs/line-layer/line-layer.js +95 -0
- package/dist/cjs/raster/images.js +271 -0
- package/dist/cjs/raster/pipeline-validation-patch.js +101 -0
- package/dist/cjs/raster/raster-layer/raster-layer-shaders.js +163 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl1.fs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl1.vs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl2.fs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer-webgl2.vs.js +10 -0
- package/dist/cjs/raster/raster-layer/raster-layer.js +287 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +38 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +10 -0
- package/dist/cjs/raster/raster-mesh-layer/raster-mesh-layer.js +321 -0
- package/dist/cjs/raster/raster-processing-uniforms.js +124 -0
- package/dist/cjs/raster/types.js +6 -0
- package/dist/cjs/raster/util.js +139 -0
- package/dist/cjs/raster/webgl/color/colormap.js +45 -0
- package/dist/cjs/raster/webgl/color/filter.js +58 -0
- package/dist/cjs/raster/webgl/color/gamma-contrast.js +68 -0
- package/dist/cjs/raster/webgl/color/linear-rescale.js +35 -0
- package/dist/cjs/raster/webgl/color/saturation.js +42 -0
- package/dist/cjs/raster/webgl/color/sigmoidal-contrast.js +68 -0
- package/dist/{raster → cjs/raster}/webgl/index.js +1 -1
- package/dist/cjs/raster/webgl/pansharpen/pansharpen-brovey.js +46 -0
- package/dist/cjs/raster/webgl/spectral-indices/evi.js +26 -0
- package/dist/cjs/raster/webgl/spectral-indices/msavi.js +25 -0
- package/dist/cjs/raster/webgl/spectral-indices/normalized-difference.js +19 -0
- package/dist/cjs/raster/webgl/spectral-indices/savi.js +21 -0
- package/dist/cjs/raster/webgl/texture/combine-bands.js +65 -0
- package/dist/{raster → cjs/raster}/webgl/texture/mask.js +5 -2
- package/dist/cjs/raster/webgl/texture/reorder-bands.js +72 -0
- package/dist/cjs/raster/webgl/texture/rgba-image.js +34 -0
- package/dist/cjs/raster/webgl/types.js +6 -0
- package/dist/cjs/svg-icon-layer/scatterplot-icon-layer.js +88 -0
- package/dist/cjs/svg-icon-layer/svg-icon-layer.js +104 -0
- package/dist/cjs/wms/wms-layer.js +624 -0
- package/dist/esm/3d-building-layer/3d-building-layer.js +62 -0
- package/dist/esm/3d-building-layer/3d-building-utils.js +157 -0
- package/dist/esm/3d-building-layer/types.js +3 -0
- package/dist/esm/cluster-layer/cluster-layer.js +286 -0
- package/dist/esm/column-layer/enhanced-column-layer.js +156 -0
- package/dist/esm/deckgl-extensions/filter-arrow-layer.js +64 -0
- package/dist/esm/deckgl-extensions/filter-shader-module.js +20 -0
- package/dist/esm/globe/atmosphere-layer.js +335 -0
- package/dist/esm/globe/enhanced-multi-icon-layer.js +60 -0
- package/dist/esm/globe/globe-depth-disk-layer.js +140 -0
- package/dist/esm/globe/globe-layers.js +566 -0
- package/dist/esm/globe/globe-stars-layer.js +92 -0
- package/dist/esm/globe/globe-stars-layer.spec.js +40 -0
- package/dist/esm/globe/globe-view.js +398 -0
- package/dist/esm/globe/index.js +26 -0
- package/dist/esm/globe/mvt-label-layer.js +187 -0
- package/dist/esm/grid-layer/enhanced-cpu-grid-layer.js +112 -0
- package/dist/esm/hexagon-layer/enhanced-hexagon-layer.js +130 -0
- package/dist/esm/index.js +22 -0
- package/dist/esm/layer-utils/aggregation-utils.js +172 -0
- package/dist/esm/layer-utils/cluster-utils.js +89 -0
- package/dist/esm/layer-utils/cpu-aggregator.js +788 -0
- package/dist/esm/layer-utils/globe-cell-utils.js +197 -0
- package/dist/esm/layer-utils/globe-cell-utils.spec.js +115 -0
- package/dist/esm/layer-utils/shader-utils.js +32 -0
- package/dist/esm/line-layer/line-layer.js +91 -0
- package/dist/esm/raster/images.js +267 -0
- package/dist/esm/raster/pipeline-validation-patch.js +94 -0
- package/dist/esm/raster/raster-layer/raster-layer-shaders.js +153 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl1.fs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl1.vs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl2.fs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer-webgl2.vs.js +5 -0
- package/dist/esm/raster/raster-layer/raster-layer.js +283 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +30 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +5 -0
- package/dist/esm/raster/raster-mesh-layer/raster-mesh-layer.js +318 -0
- package/dist/esm/raster/raster-processing-uniforms.js +118 -0
- package/dist/esm/raster/types.js +3 -0
- package/dist/esm/raster/util.js +134 -0
- package/dist/esm/raster/webgl/color/colormap.js +39 -0
- package/dist/esm/raster/webgl/color/filter.js +52 -0
- package/dist/esm/raster/webgl/color/gamma-contrast.js +62 -0
- package/dist/esm/raster/webgl/color/linear-rescale.js +29 -0
- package/dist/esm/raster/webgl/color/saturation.js +36 -0
- package/dist/esm/raster/webgl/color/sigmoidal-contrast.js +62 -0
- package/dist/esm/raster/webgl/index.js +26 -0
- package/dist/esm/raster/webgl/pansharpen/pansharpen-brovey.js +40 -0
- package/dist/esm/raster/webgl/spectral-indices/evi.js +20 -0
- package/dist/esm/raster/webgl/spectral-indices/msavi.js +19 -0
- package/dist/esm/raster/webgl/spectral-indices/normalized-difference.js +13 -0
- package/dist/esm/raster/webgl/spectral-indices/savi.js +15 -0
- package/dist/esm/raster/webgl/texture/combine-bands.js +58 -0
- package/dist/esm/raster/webgl/texture/mask.js +47 -0
- package/dist/esm/raster/webgl/texture/reorder-bands.js +65 -0
- package/dist/esm/raster/webgl/texture/rgba-image.js +28 -0
- package/dist/esm/raster/webgl/types.js +3 -0
- package/dist/esm/svg-icon-layer/scatterplot-icon-layer.js +84 -0
- package/dist/esm/svg-icon-layer/svg-icon-layer.js +101 -0
- package/dist/esm/wms/wms-layer.js +619 -0
- package/dist/globe/atmosphere-layer.d.ts +58 -0
- package/dist/globe/enhanced-multi-icon-layer.d.ts +6 -0
- package/dist/globe/globe-depth-disk-layer.d.ts +19 -0
- package/dist/globe/globe-layers.d.ts +108 -0
- package/dist/globe/globe-stars-layer.d.ts +10 -0
- package/dist/globe/globe-stars-layer.spec.d.ts +1 -0
- package/dist/globe/globe-view.d.ts +23 -0
- package/dist/globe/index.d.ts +8 -0
- package/dist/globe/mvt-label-layer.d.ts +7928 -0
- package/dist/grid-layer/enhanced-cpu-grid-layer.d.ts +138 -56
- package/dist/hexagon-layer/enhanced-hexagon-layer.d.ts +138 -56
- package/dist/index.d.ts +1 -0
- package/dist/layer-utils/cluster-utils.d.ts +6 -1
- package/dist/layer-utils/globe-cell-utils.d.ts +30 -0
- package/dist/layer-utils/globe-cell-utils.spec.d.ts +1 -0
- package/dist/raster/images.d.ts +10 -1
- package/dist/raster/raster-layer/raster-layer.d.ts +4 -0
- package/dist/raster/raster-mesh-layer/raster-mesh-layer.d.ts +4 -0
- package/dist/svg-icon-layer/scatterplot-icon-layer.d.ts +4 -1
- package/dist/wms/wms-layer.d.ts +27 -0
- package/package.json +22 -13
- package/dist/3d-building-layer/3d-building-layer.js +0 -66
- package/dist/3d-building-layer/3d-building-utils.js +0 -166
- package/dist/3d-building-layer/types.js +0 -6
- package/dist/cluster-layer/cluster-layer.js +0 -293
- package/dist/column-layer/enhanced-column-layer.js +0 -135
- package/dist/deckgl-extensions/filter-shader-module.js +0 -26
- package/dist/grid-layer/enhanced-cpu-grid-layer.js +0 -90
- package/dist/hexagon-layer/enhanced-hexagon-layer.js +0 -108
- package/dist/index.js +0 -152
- package/dist/layer-utils/aggregation-utils.js +0 -181
- package/dist/layer-utils/cluster-utils.js +0 -93
- package/dist/layer-utils/cpu-aggregator.js +0 -798
- package/dist/layer-utils/shader-utils.js +0 -38
- package/dist/line-layer/line-layer.js +0 -95
- package/dist/raster/images.js +0 -259
- package/dist/raster/pipeline-validation-patch.js +0 -101
- package/dist/raster/raster-layer/raster-layer-shaders.js +0 -163
- package/dist/raster/raster-layer/raster-layer-webgl1.fs.js +0 -10
- package/dist/raster/raster-layer/raster-layer-webgl1.vs.js +0 -10
- package/dist/raster/raster-layer/raster-layer-webgl2.fs.js +0 -10
- package/dist/raster/raster-layer/raster-layer-webgl2.vs.js +0 -10
- package/dist/raster/raster-layer/raster-layer.js +0 -237
- package/dist/raster/raster-mesh-layer/matrix.d.ts +0 -4
- package/dist/raster/raster-mesh-layer/matrix.js +0 -18
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +0 -38
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.fs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl1.vs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.fs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer-webgl2.vs.js +0 -10
- package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +0 -271
- package/dist/raster/raster-processing-uniforms.js +0 -124
- package/dist/raster/types.js +0 -6
- package/dist/raster/util.js +0 -139
- package/dist/raster/webgl/color/colormap.js +0 -45
- package/dist/raster/webgl/color/filter.js +0 -58
- package/dist/raster/webgl/color/gamma-contrast.js +0 -68
- package/dist/raster/webgl/color/linear-rescale.js +0 -35
- package/dist/raster/webgl/color/saturation.js +0 -42
- package/dist/raster/webgl/color/sigmoidal-contrast.js +0 -68
- package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +0 -46
- package/dist/raster/webgl/spectral-indices/evi.js +0 -26
- package/dist/raster/webgl/spectral-indices/msavi.js +0 -25
- package/dist/raster/webgl/spectral-indices/normalized-difference.js +0 -19
- package/dist/raster/webgl/spectral-indices/savi.js +0 -21
- package/dist/raster/webgl/texture/combine-bands.js +0 -65
- package/dist/raster/webgl/texture/reorder-bands.js +0 -72
- package/dist/raster/webgl/texture/rgba-image.js +0 -34
- package/dist/raster/webgl/types.js +0 -6
- package/dist/svg-icon-layer/scatterplot-icon-layer.js +0 -51
- package/dist/svg-icon-layer/svg-icon-layer.js +0 -104
- package/dist/wms/wms-layer.js +0 -424
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
10
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
11
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
12
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
13
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
14
|
+
var _core = require("@deck.gl/core");
|
|
15
|
+
var _geoLayers = require("@deck.gl/geo-layers");
|
|
16
|
+
var _layers = require("@deck.gl/layers");
|
|
17
|
+
var _constants = require("@kepler.gl/constants");
|
|
18
|
+
var _dBuildingUtils = require("./3d-building-utils");
|
|
19
|
+
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; }
|
|
20
|
+
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; }
|
|
21
|
+
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)); }
|
|
22
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } // SPDX-License-Identifier: MIT
|
|
23
|
+
// Copyright contributors to the kepler.gl project
|
|
24
|
+
var ThreeDBuildingLayer = exports["default"] = /*#__PURE__*/function (_CompositeLayer) {
|
|
25
|
+
function ThreeDBuildingLayer() {
|
|
26
|
+
(0, _classCallCheck2["default"])(this, ThreeDBuildingLayer);
|
|
27
|
+
return _callSuper(this, ThreeDBuildingLayer, arguments);
|
|
28
|
+
}
|
|
29
|
+
(0, _inherits2["default"])(ThreeDBuildingLayer, _CompositeLayer);
|
|
30
|
+
return (0, _createClass2["default"])(ThreeDBuildingLayer, [{
|
|
31
|
+
key: "renderSubLayers",
|
|
32
|
+
value:
|
|
33
|
+
// this layer add its subLayers to the redux store, and push sample data
|
|
34
|
+
|
|
35
|
+
function renderSubLayers(props) {
|
|
36
|
+
return new _layers.SolidPolygonLayer(_objectSpread(_objectSpread({}, props), {}, {
|
|
37
|
+
parameters: _constants.BLEND_PARAMS_ALPHA,
|
|
38
|
+
extruded: true,
|
|
39
|
+
opacity: 1,
|
|
40
|
+
filled: true,
|
|
41
|
+
getElevation: function getElevation(feature) {
|
|
42
|
+
return feature.properties.height || 0;
|
|
43
|
+
},
|
|
44
|
+
getPolygon: function getPolygon(feature) {
|
|
45
|
+
return feature.coordinates;
|
|
46
|
+
},
|
|
47
|
+
getFillColor: this.props.threeDBuildingColor
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
}, {
|
|
51
|
+
key: "renderLayers",
|
|
52
|
+
value: function renderLayers() {
|
|
53
|
+
var _this = this;
|
|
54
|
+
return [new _geoLayers.TileLayer({
|
|
55
|
+
id: "".concat(this.id, "-deck-3d-building"),
|
|
56
|
+
getTileData: function getTileData(tile) {
|
|
57
|
+
return (0, _dBuildingUtils.getTileData)(_this.props.mapboxApiUrl, _this.props.mapboxApiAccessToken, tile);
|
|
58
|
+
},
|
|
59
|
+
minZoom: 13,
|
|
60
|
+
renderSubLayers: this.renderSubLayers.bind(this),
|
|
61
|
+
updateTriggers: this.props.updateTriggers
|
|
62
|
+
})];
|
|
63
|
+
}
|
|
64
|
+
}]);
|
|
65
|
+
}(_core.CompositeLayer);
|
|
66
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfZ2VvTGF5ZXJzIiwiX2xheWVycyIsIl9jb25zdGFudHMiLCJfZEJ1aWxkaW5nVXRpbHMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIlRocmVlREJ1aWxkaW5nTGF5ZXIiLCJleHBvcnRzIiwiX0NvbXBvc2l0ZUxheWVyIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJyZW5kZXJTdWJMYXllcnMiLCJwcm9wcyIsIlNvbGlkUG9seWdvbkxheWVyIiwicGFyYW1ldGVycyIsIkJMRU5EX1BBUkFNU19BTFBIQSIsImV4dHJ1ZGVkIiwib3BhY2l0eSIsImZpbGxlZCIsImdldEVsZXZhdGlvbiIsImZlYXR1cmUiLCJwcm9wZXJ0aWVzIiwiaGVpZ2h0IiwiZ2V0UG9seWdvbiIsImNvb3JkaW5hdGVzIiwiZ2V0RmlsbENvbG9yIiwidGhyZWVEQnVpbGRpbmdDb2xvciIsInJlbmRlckxheWVycyIsIl90aGlzIiwiRGVja0dMVGlsZUxheWVyIiwiaWQiLCJjb25jYXQiLCJnZXRUaWxlRGF0YSIsInRpbGUiLCJtYXBib3hBcGlVcmwiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1pblpvb20iLCJiaW5kIiwidXBkYXRlVHJpZ2dlcnMiLCJDb21wb3NpdGVMYXllciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy8zZC1idWlsZGluZy1sYXllci8zZC1idWlsZGluZy1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0NvbXBvc2l0ZUxheWVyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCB7VGlsZUxheWVyIGFzIERlY2tHTFRpbGVMYXllcn0gZnJvbSAnQGRlY2suZ2wvZ2VvLWxheWVycyc7XG5pbXBvcnQge1NvbGlkUG9seWdvbkxheWVyLCBTb2xpZFBvbHlnb25MYXllclByb3BzfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuaW1wb3J0IHtCTEVORF9QQVJBTVNfQUxQSEF9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IHtnZXRUaWxlRGF0YX0gZnJvbSAnLi8zZC1idWlsZGluZy11dGlscyc7XG5pbXBvcnQge1RocmVlREJ1aWxkaW5nTGF5ZXJQcm9wcywgVGlsZURhdGFJdGVtLCBUaWxlTG9hZFByb3BzfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGhyZWVEQnVpbGRpbmdMYXllciBleHRlbmRzIENvbXBvc2l0ZUxheWVyPFRocmVlREJ1aWxkaW5nTGF5ZXJQcm9wcz4ge1xuICAvLyB0aGlzIGxheWVyIGFkZCBpdHMgc3ViTGF5ZXJzIHRvIHRoZSByZWR1eCBzdG9yZSwgYW5kIHB1c2ggc2FtcGxlIGRhdGFcblxuICByZW5kZXJTdWJMYXllcnMocHJvcHM6IFNvbGlkUG9seWdvbkxheWVyUHJvcHM8YW55Pikge1xuICAgIHJldHVybiBuZXcgU29saWRQb2x5Z29uTGF5ZXI8VGlsZURhdGFJdGVtPih7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHBhcmFtZXRlcnM6IEJMRU5EX1BBUkFNU19BTFBIQSxcbiAgICAgIGV4dHJ1ZGVkOiB0cnVlLFxuICAgICAgb3BhY2l0eTogMSxcbiAgICAgIGZpbGxlZDogdHJ1ZSxcbiAgICAgIGdldEVsZXZhdGlvbjogKGZlYXR1cmU6IFRpbGVEYXRhSXRlbSkgPT4gZmVhdHVyZS5wcm9wZXJ0aWVzLmhlaWdodCB8fCAwLFxuICAgICAgZ2V0UG9seWdvbjogKGZlYXR1cmU6IFRpbGVEYXRhSXRlbSkgPT4gZmVhdHVyZS5jb29yZGluYXRlcyxcbiAgICAgIGdldEZpbGxDb2xvcjogdGhpcy5wcm9wcy50aHJlZURCdWlsZGluZ0NvbG9yXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXJMYXllcnMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBEZWNrR0xUaWxlTGF5ZXIoe1xuICAgICAgICBpZDogYCR7dGhpcy5pZH0tZGVjay0zZC1idWlsZGluZ2AgYXMgc3RyaW5nLFxuICAgICAgICBnZXRUaWxlRGF0YTogKHRpbGU6IFRpbGVMb2FkUHJvcHMpID0+XG4gICAgICAgICAgZ2V0VGlsZURhdGEodGhpcy5wcm9wcy5tYXBib3hBcGlVcmwsIHRoaXMucHJvcHMubWFwYm94QXBpQWNjZXNzVG9rZW4sIHRpbGUpLFxuICAgICAgICBtaW5ab29tOiAxMyxcbiAgICAgICAgcmVuZGVyU3ViTGF5ZXJzOiB0aGlzLnJlbmRlclN1YkxheWVycy5iaW5kKHRoaXMpLFxuICAgICAgICB1cGRhdGVUcmlnZ2VyczogdGhpcy5wcm9wcy51cGRhdGVUcmlnZ2Vyc1xuICAgICAgfSlcbiAgICBdO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxVQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxlQUFBLEdBQUFKLE9BQUE7QUFBZ0QsU0FBQUssUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9BQUEsV0FBQWQsQ0FBQSxRQUFBZSxnQkFBQSxhQUFBaEIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsQ0FBQUQsQ0FBQSxTQUFBRSxNQUFBLENBQUFjLHlCQUFBLEdBQUFkLE1BQUEsQ0FBQWUsZ0JBQUEsQ0FBQWxCLENBQUEsRUFBQUcsTUFBQSxDQUFBYyx5QkFBQSxDQUFBZixDQUFBLEtBQUFILE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLEdBQUFhLE9BQUEsV0FBQWQsQ0FBQSxJQUFBRSxNQUFBLENBQUFnQixjQUFBLENBQUFuQixDQUFBLEVBQUFDLENBQUEsRUFBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBTixDQUFBLEVBQUFELENBQUEsaUJBQUFELENBQUE7QUFBQSxTQUFBb0IsV0FBQWxCLENBQUEsRUFBQUksQ0FBQSxFQUFBTixDQUFBLFdBQUFNLENBQUEsT0FBQWUsZ0JBQUEsYUFBQWYsQ0FBQSxPQUFBZ0IsMkJBQUEsYUFBQXBCLENBQUEsRUFBQXFCLHlCQUFBLEtBQUFDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBbkIsQ0FBQSxFQUFBTixDQUFBLFlBQUFxQixnQkFBQSxhQUFBbkIsQ0FBQSxFQUFBd0IsV0FBQSxJQUFBcEIsQ0FBQSxDQUFBSyxLQUFBLENBQUFULENBQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUF1QiwwQkFBQSxjQUFBckIsQ0FBQSxJQUFBeUIsT0FBQSxDQUFBQyxTQUFBLENBQUFDLE9BQUEsQ0FBQUMsSUFBQSxDQUFBTixPQUFBLENBQUFDLFNBQUEsQ0FBQUUsT0FBQSxpQ0FBQXpCLENBQUEsYUFBQXFCLHlCQUFBLFlBQUFBLDBCQUFBLGFBQUFyQixDQUFBLFVBUmhEO0FBQ0E7QUFBQSxJQVVxQjZCLG1CQUFtQixHQUFBQyxPQUFBLHFDQUFBQyxlQUFBO0VBQUEsU0FBQUYsb0JBQUE7SUFBQSxJQUFBRyxnQkFBQSxtQkFBQUgsbUJBQUE7SUFBQSxPQUFBWCxVQUFBLE9BQUFXLG1CQUFBLEVBQUFsQixTQUFBO0VBQUE7RUFBQSxJQUFBc0IsVUFBQSxhQUFBSixtQkFBQSxFQUFBRSxlQUFBO0VBQUEsV0FBQUcsYUFBQSxhQUFBTCxtQkFBQTtJQUFBTSxHQUFBO0lBQUFDLEtBQUE7SUFDdEM7O0lBRUEsU0FBQUMsZUFBZUEsQ0FBQ0MsS0FBa0MsRUFBRTtNQUNsRCxPQUFPLElBQUlDLHlCQUFpQixDQUFBN0IsYUFBQSxDQUFBQSxhQUFBLEtBQ3ZCNEIsS0FBSztRQUNSRSxVQUFVLEVBQUVDLDZCQUFrQjtRQUM5QkMsUUFBUSxFQUFFLElBQUk7UUFDZEMsT0FBTyxFQUFFLENBQUM7UUFDVkMsTUFBTSxFQUFFLElBQUk7UUFDWkMsWUFBWSxFQUFFLFNBQWRBLFlBQVlBLENBQUdDLE9BQXFCO1VBQUEsT0FBS0EsT0FBTyxDQUFDQyxVQUFVLENBQUNDLE1BQU0sSUFBSSxDQUFDO1FBQUE7UUFDdkVDLFVBQVUsRUFBRSxTQUFaQSxVQUFVQSxDQUFHSCxPQUFxQjtVQUFBLE9BQUtBLE9BQU8sQ0FBQ0ksV0FBVztRQUFBO1FBQzFEQyxZQUFZLEVBQUUsSUFBSSxDQUFDYixLQUFLLENBQUNjO01BQW1CLEVBQzdDLENBQUM7SUFDSjtFQUFDO0lBQUFqQixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBaUIsWUFBWUEsQ0FBQSxFQUFHO01BQUEsSUFBQUMsS0FBQTtNQUNiLE9BQU8sQ0FDTCxJQUFJQyxvQkFBZSxDQUFDO1FBQ2xCQyxFQUFFLEtBQUFDLE1BQUEsQ0FBSyxJQUFJLENBQUNELEVBQUUsc0JBQTZCO1FBQzNDRSxXQUFXLEVBQUUsU0FBYkEsV0FBV0EsQ0FBR0MsSUFBbUI7VUFBQSxPQUMvQixJQUFBRCwyQkFBVyxFQUFDSixLQUFJLENBQUNoQixLQUFLLENBQUNzQixZQUFZLEVBQUVOLEtBQUksQ0FBQ2hCLEtBQUssQ0FBQ3VCLG9CQUFvQixFQUFFRixJQUFJLENBQUM7UUFBQTtRQUM3RUcsT0FBTyxFQUFFLEVBQUU7UUFDWHpCLGVBQWUsRUFBRSxJQUFJLENBQUNBLGVBQWUsQ0FBQzBCLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDaERDLGNBQWMsRUFBRSxJQUFJLENBQUMxQixLQUFLLENBQUMwQjtNQUM3QixDQUFDLENBQUMsQ0FDSDtJQUNIO0VBQUM7QUFBQSxFQTNCOENDLG9CQUFjIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.decodeTile = decodeTile;
|
|
8
|
+
exports.getTileData = getTileData;
|
|
9
|
+
exports.vectorTileFeatureToProp = vectorTileFeatureToProp;
|
|
10
|
+
var _pbf = _interopRequireDefault(require("pbf"));
|
|
11
|
+
var _vectorTile = require("@mapbox/vector-tile");
|
|
12
|
+
var _viewportMercatorProject = require("viewport-mercator-project");
|
|
13
|
+
// SPDX-License-Identifier: MIT
|
|
14
|
+
// Copyright contributors to the kepler.gl project
|
|
15
|
+
|
|
16
|
+
/* global fetch */
|
|
17
|
+
var TILE_SIZE = 512;
|
|
18
|
+
var MAPBOX_HOST = 'https://a.tiles.mapbox.com';
|
|
19
|
+
var MAP_SOURCE = '/v4/mapbox.mapbox-streets-v7';
|
|
20
|
+
function getTileData(host, token, _ref) {
|
|
21
|
+
var _ref$index = _ref.index,
|
|
22
|
+
x = _ref$index.x,
|
|
23
|
+
y = _ref$index.y,
|
|
24
|
+
z = _ref$index.z;
|
|
25
|
+
var mapSource = "".concat(host || MAPBOX_HOST).concat(MAP_SOURCE, "/").concat(z, "/").concat(x, "/").concat(y, ".vector.pbf?access_token=").concat(token);
|
|
26
|
+
return fetch(mapSource).then(function (response) {
|
|
27
|
+
return response.arrayBuffer();
|
|
28
|
+
}).then(function (buffer) {
|
|
29
|
+
return decodeTile(x, y, z, buffer);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function decodeTile(x, y, z, arrayBuffer) {
|
|
33
|
+
var tile = new _vectorTile.VectorTile(new _pbf["default"](arrayBuffer));
|
|
34
|
+
var result = [];
|
|
35
|
+
var xProj = x * TILE_SIZE;
|
|
36
|
+
var yProj = y * TILE_SIZE;
|
|
37
|
+
var scale = Math.pow(2, z);
|
|
38
|
+
var projectFunc = project.bind(null, xProj, yProj, scale);
|
|
39
|
+
|
|
40
|
+
/* eslint-disable guard-for-in */
|
|
41
|
+
var layerName = 'building';
|
|
42
|
+
var vectorTileLayer = tile.layers[layerName];
|
|
43
|
+
if (!vectorTileLayer) {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
for (var i = 0; i < vectorTileLayer.length; i++) {
|
|
47
|
+
var vectorTileFeature = vectorTileLayer.feature(i);
|
|
48
|
+
// @ts-ignore
|
|
49
|
+
var features = vectorTileFeatureToProp(vectorTileFeature, projectFunc);
|
|
50
|
+
features.forEach(function (f) {
|
|
51
|
+
f.properties.layer = layerName;
|
|
52
|
+
if (f.properties.height) {
|
|
53
|
+
result.push(f);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
function project(x, y, scale, line, extent) {
|
|
60
|
+
var sizeToPixel = extent / TILE_SIZE;
|
|
61
|
+
for (var ii = 0; ii < line.length; ii++) {
|
|
62
|
+
var p = line[ii];
|
|
63
|
+
// LNGLAT
|
|
64
|
+
line[ii] = (0, _viewportMercatorProject.worldToLngLat)([x + p[0] / sizeToPixel, y + p[1] / sizeToPixel], scale);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* adapted from @mapbox/vector-tile/lib/vectortilefeature.js for better perf */
|
|
69
|
+
/* eslint-disable */
|
|
70
|
+
function vectorTileFeatureToProp(vectorTileFeature, project) {
|
|
71
|
+
var coords = getCoordinates(vectorTileFeature);
|
|
72
|
+
var extent = vectorTileFeature.extent;
|
|
73
|
+
var i;
|
|
74
|
+
var j;
|
|
75
|
+
coords = classifyRings(coords);
|
|
76
|
+
for (i = 0; i < coords.length; i++) {
|
|
77
|
+
for (j = 0; j < coords[i].length; j++) {
|
|
78
|
+
project(coords[i][j], extent);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return coords.map(function (coordinates) {
|
|
82
|
+
return {
|
|
83
|
+
coordinates: coordinates,
|
|
84
|
+
properties: vectorTileFeature.properties
|
|
85
|
+
};
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
function getCoordinates(vectorTileFeature) {
|
|
89
|
+
var pbf = vectorTileFeature._pbf;
|
|
90
|
+
pbf.pos = vectorTileFeature._geometry;
|
|
91
|
+
var end = pbf.readVarint() + pbf.pos;
|
|
92
|
+
var cmd = 1;
|
|
93
|
+
var length = 0;
|
|
94
|
+
var x = 0;
|
|
95
|
+
var y = 0;
|
|
96
|
+
var lines = [];
|
|
97
|
+
var line;
|
|
98
|
+
while (pbf.pos < end) {
|
|
99
|
+
if (length <= 0) {
|
|
100
|
+
var cmdLen = pbf.readVarint();
|
|
101
|
+
cmd = cmdLen & 0x7;
|
|
102
|
+
length = cmdLen >> 3;
|
|
103
|
+
}
|
|
104
|
+
length--;
|
|
105
|
+
if (cmd === 1 || cmd === 2) {
|
|
106
|
+
x += pbf.readSVarint();
|
|
107
|
+
y += pbf.readSVarint();
|
|
108
|
+
if (cmd === 1) {
|
|
109
|
+
// moveTo
|
|
110
|
+
if (line) lines.push(line);
|
|
111
|
+
line = [];
|
|
112
|
+
}
|
|
113
|
+
if (line) line.push([x, y]);
|
|
114
|
+
} else if (cmd === 7) {
|
|
115
|
+
// Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90
|
|
116
|
+
if (line) {
|
|
117
|
+
line.push(line[0].slice()); // closePolygon
|
|
118
|
+
}
|
|
119
|
+
} else {
|
|
120
|
+
throw new Error("unknown command ".concat(cmd));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (line) lines.push(line);
|
|
124
|
+
return lines;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// classifies an array of rings into polygons with outer rings and holes
|
|
128
|
+
|
|
129
|
+
function classifyRings(rings) {
|
|
130
|
+
var len = rings.length;
|
|
131
|
+
if (len <= 1) return [rings];
|
|
132
|
+
var polygons = [];
|
|
133
|
+
var polygon;
|
|
134
|
+
var ccw;
|
|
135
|
+
for (var i = 0; i < len; i++) {
|
|
136
|
+
var area = signedArea(rings[i]);
|
|
137
|
+
if (area === 0) {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if (ccw === undefined) {
|
|
141
|
+
ccw = area < 0;
|
|
142
|
+
}
|
|
143
|
+
if (ccw === area < 0) {
|
|
144
|
+
if (polygon) {
|
|
145
|
+
polygons.push(polygon);
|
|
146
|
+
}
|
|
147
|
+
polygon = [rings[i]];
|
|
148
|
+
} else if (polygon) {
|
|
149
|
+
polygon.push(rings[i]);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (polygon) {
|
|
153
|
+
polygons.push(polygon);
|
|
154
|
+
}
|
|
155
|
+
return polygons;
|
|
156
|
+
}
|
|
157
|
+
function signedArea(ring) {
|
|
158
|
+
var sum = 0;
|
|
159
|
+
for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {
|
|
160
|
+
p1 = ring[i];
|
|
161
|
+
p2 = ring[j];
|
|
162
|
+
sum += (p2[0] - p1[0]) * (p1[1] + p2[1]);
|
|
163
|
+
}
|
|
164
|
+
return sum;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGJmIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfdmVjdG9yVGlsZSIsIl92aWV3cG9ydE1lcmNhdG9yUHJvamVjdCIsIlRJTEVfU0laRSIsIk1BUEJPWF9IT1NUIiwiTUFQX1NPVVJDRSIsImdldFRpbGVEYXRhIiwiaG9zdCIsInRva2VuIiwiX3JlZiIsIl9yZWYkaW5kZXgiLCJpbmRleCIsIngiLCJ5IiwieiIsIm1hcFNvdXJjZSIsImNvbmNhdCIsImZldGNoIiwidGhlbiIsInJlc3BvbnNlIiwiYXJyYXlCdWZmZXIiLCJidWZmZXIiLCJkZWNvZGVUaWxlIiwidGlsZSIsIlZlY3RvclRpbGUiLCJQcm90b2J1ZiIsInJlc3VsdCIsInhQcm9qIiwieVByb2oiLCJzY2FsZSIsIk1hdGgiLCJwb3ciLCJwcm9qZWN0RnVuYyIsInByb2plY3QiLCJiaW5kIiwibGF5ZXJOYW1lIiwidmVjdG9yVGlsZUxheWVyIiwibGF5ZXJzIiwiaSIsImxlbmd0aCIsInZlY3RvclRpbGVGZWF0dXJlIiwiZmVhdHVyZSIsImZlYXR1cmVzIiwidmVjdG9yVGlsZUZlYXR1cmVUb1Byb3AiLCJmb3JFYWNoIiwiZiIsInByb3BlcnRpZXMiLCJsYXllciIsImhlaWdodCIsInB1c2giLCJsaW5lIiwiZXh0ZW50Iiwic2l6ZVRvUGl4ZWwiLCJpaSIsInAiLCJ3b3JsZFRvTG5nTGF0IiwiY29vcmRzIiwiZ2V0Q29vcmRpbmF0ZXMiLCJqIiwiY2xhc3NpZnlSaW5ncyIsIm1hcCIsImNvb3JkaW5hdGVzIiwicGJmIiwicG9zIiwiX2dlb21ldHJ5IiwiZW5kIiwicmVhZFZhcmludCIsImNtZCIsImxpbmVzIiwiY21kTGVuIiwicmVhZFNWYXJpbnQiLCJzbGljZSIsIkVycm9yIiwicmluZ3MiLCJsZW4iLCJwb2x5Z29ucyIsInBvbHlnb24iLCJjY3ciLCJhcmVhIiwic2lnbmVkQXJlYSIsInVuZGVmaW5lZCIsInJpbmciLCJzdW0iLCJwMSIsInAyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjLzNkLWJ1aWxkaW5nLWxheWVyLzNkLWJ1aWxkaW5nLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBQcm90b2J1ZiBmcm9tICdwYmYnO1xuaW1wb3J0IHtWZWN0b3JUaWxlfSBmcm9tICdAbWFwYm94L3ZlY3Rvci10aWxlJztcbmltcG9ydCB7d29ybGRUb0xuZ0xhdH0gZnJvbSAndmlld3BvcnQtbWVyY2F0b3ItcHJvamVjdCc7XG5pbXBvcnQge1xuICBDb29yZGluYXRlcyxcbiAgRmxhdEZpZ3VyZSxcbiAgVGlsZURhdGFJdGVtLFxuICBWZWN0b3JUaWxlRmVhdHVyZSxcbiAgVmVjdG9yVGlsZUZlYXR1cmVQcm9wZXJ0aWVzXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKiBnbG9iYWwgZmV0Y2ggKi9cbmNvbnN0IFRJTEVfU0laRSA9IDUxMjtcbmNvbnN0IE1BUEJPWF9IT1NUID0gJ2h0dHBzOi8vYS50aWxlcy5tYXBib3guY29tJztcbmNvbnN0IE1BUF9TT1VSQ0UgPSAnL3Y0L21hcGJveC5tYXBib3gtc3RyZWV0cy12Nyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaWxlRGF0YShcbiAgaG9zdDogc3RyaW5nLFxuICB0b2tlbjogc3RyaW5nLFxuICB7aW5kZXg6IHt4LCB5LCB6fX06IHtpbmRleDogQ29vcmRpbmF0ZXN9XG4pOiBQcm9taXNlPFRpbGVEYXRhSXRlbVtdPiB7XG4gIGNvbnN0IG1hcFNvdXJjZSA9IGAke1xuICAgIGhvc3QgfHwgTUFQQk9YX0hPU1RcbiAgfSR7TUFQX1NPVVJDRX0vJHt6fS8ke3h9LyR7eX0udmVjdG9yLnBiZj9hY2Nlc3NfdG9rZW49JHt0b2tlbn1gO1xuXG4gIHJldHVybiBmZXRjaChtYXBTb3VyY2UpXG4gICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSlcbiAgICAudGhlbihidWZmZXIgPT4gZGVjb2RlVGlsZSh4LCB5LCB6LCBidWZmZXIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVRpbGUoXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICB6OiBudW1iZXIsXG4gIGFycmF5QnVmZmVyOiBBcnJheUJ1ZmZlclxuKTogVGlsZURhdGFJdGVtW10ge1xuICBjb25zdCB0aWxlID0gbmV3IFZlY3RvclRpbGUobmV3IFByb3RvYnVmKGFycmF5QnVmZmVyKSk7XG5cbiAgY29uc3QgcmVzdWx0OiBUaWxlRGF0YUl0ZW1bXSA9IFtdO1xuICBjb25zdCB4UHJvaiA9IHggKiBUSUxFX1NJWkU7XG4gIGNvbnN0IHlQcm9qID0geSAqIFRJTEVfU0laRTtcbiAgY29uc3Qgc2NhbGUgPSBNYXRoLnBvdygyLCB6KTtcblxuICBjb25zdCBwcm9qZWN0RnVuYyA9IHByb2plY3QuYmluZChudWxsLCB4UHJvaiwgeVByb2osIHNjYWxlKTtcblxuICAvKiBlc2xpbnQtZGlzYWJsZSBndWFyZC1mb3ItaW4gKi9cbiAgY29uc3QgbGF5ZXJOYW1lID0gJ2J1aWxkaW5nJztcbiAgY29uc3QgdmVjdG9yVGlsZUxheWVyID0gdGlsZS5sYXllcnNbbGF5ZXJOYW1lXTtcbiAgaWYgKCF2ZWN0b3JUaWxlTGF5ZXIpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2ZWN0b3JUaWxlTGF5ZXIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB2ZWN0b3JUaWxlRmVhdHVyZSA9IHZlY3RvclRpbGVMYXllci5mZWF0dXJlKGkpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBmZWF0dXJlcyA9IHZlY3RvclRpbGVGZWF0dXJlVG9Qcm9wKHZlY3RvclRpbGVGZWF0dXJlLCBwcm9qZWN0RnVuYyk7XG4gICAgZmVhdHVyZXMuZm9yRWFjaChmID0+IHtcbiAgICAgIGYucHJvcGVydGllcy5sYXllciA9IGxheWVyTmFtZTtcbiAgICAgIGlmIChmLnByb3BlcnRpZXMuaGVpZ2h0KSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGYpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHByb2plY3QoeDogbnVtYmVyLCB5OiBudW1iZXIsIHNjYWxlOiBudW1iZXIsIGxpbmU6IEZsYXRGaWd1cmUsIGV4dGVudDogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IHNpemVUb1BpeGVsID0gZXh0ZW50IC8gVElMRV9TSVpFO1xuXG4gIGZvciAobGV0IGlpID0gMDsgaWkgPCBsaW5lLmxlbmd0aDsgaWkrKykge1xuICAgIGNvbnN0IHAgPSBsaW5lW2lpXTtcbiAgICAvLyBMTkdMQVRcbiAgICBsaW5lW2lpXSA9IHdvcmxkVG9MbmdMYXQoW3ggKyBwWzBdIC8gc2l6ZVRvUGl4ZWwsIHkgKyBwWzFdIC8gc2l6ZVRvUGl4ZWxdLCBzY2FsZSk7XG4gIH1cbn1cblxuLyogYWRhcHRlZCBmcm9tIEBtYXBib3gvdmVjdG9yLXRpbGUvbGliL3ZlY3RvcnRpbGVmZWF0dXJlLmpzIGZvciBiZXR0ZXIgcGVyZiAqL1xuLyogZXNsaW50LWRpc2FibGUgKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZWN0b3JUaWxlRmVhdHVyZVRvUHJvcChcbiAgdmVjdG9yVGlsZUZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICBwcm9qZWN0OiAocjogRmxhdEZpZ3VyZSwgbjogbnVtYmVyKSA9PiB2b2lkXG4pOiB7Y29vcmRpbmF0ZXM6IEZsYXRGaWd1cmVbXTsgcHJvcGVydGllczogVmVjdG9yVGlsZUZlYXR1cmVQcm9wZXJ0aWVzfVtdIHtcbiAgbGV0IGNvb3JkczogRmxhdEZpZ3VyZVtdW10gfCBGbGF0RmlndXJlW10gPSBnZXRDb29yZGluYXRlcyh2ZWN0b3JUaWxlRmVhdHVyZSk7XG4gIGNvbnN0IGV4dGVudCA9IHZlY3RvclRpbGVGZWF0dXJlLmV4dGVudDtcbiAgbGV0IGk6IG51bWJlcjtcbiAgbGV0IGo6IG51bWJlcjtcblxuICBjb29yZHMgPSBjbGFzc2lmeVJpbmdzKGNvb3Jkcyk7XG4gIGZvciAoaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGogPSAwOyBqIDwgY29vcmRzW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICBwcm9qZWN0KGNvb3Jkc1tpXVtqXSwgZXh0ZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29vcmRzLm1hcChjb29yZGluYXRlcyA9PiAoe1xuICAgIGNvb3JkaW5hdGVzLFxuICAgIHByb3BlcnRpZXM6IHZlY3RvclRpbGVGZWF0dXJlLnByb3BlcnRpZXNcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBnZXRDb29yZGluYXRlcyh2ZWN0b3JUaWxlRmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUpOiBGbGF0RmlndXJlW10ge1xuICBjb25zdCBwYmYgPSB2ZWN0b3JUaWxlRmVhdHVyZS5fcGJmO1xuICBwYmYucG9zID0gdmVjdG9yVGlsZUZlYXR1cmUuX2dlb21ldHJ5O1xuXG4gIGNvbnN0IGVuZCA9IHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zO1xuICBsZXQgY21kID0gMTtcbiAgbGV0IGxlbmd0aCA9IDA7XG4gIGxldCB4ID0gMDtcbiAgbGV0IHkgPSAwO1xuXG4gIGNvbnN0IGxpbmVzOiBGbGF0RmlndXJlW10gPSBbXTtcbiAgbGV0IGxpbmU6IEZsYXRGaWd1cmUgfCB1bmRlZmluZWQ7XG5cbiAgd2hpbGUgKHBiZi5wb3MgPCBlbmQpIHtcbiAgICBpZiAobGVuZ3RoIDw9IDApIHtcbiAgICAgIGNvbnN0IGNtZExlbiA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgICBjbWQgPSBjbWRMZW4gJiAweDc7XG4gICAgICBsZW5ndGggPSBjbWRMZW4gPj4gMztcbiAgICB9XG5cbiAgICBsZW5ndGgtLTtcblxuICAgIGlmIChjbWQgPT09IDEgfHwgY21kID09PSAyKSB7XG4gICAgICB4ICs9IHBiZi5yZWFkU1ZhcmludCgpO1xuICAgICAgeSArPSBwYmYucmVhZFNWYXJpbnQoKTtcblxuICAgICAgaWYgKGNtZCA9PT0gMSkge1xuICAgICAgICAvLyBtb3ZlVG9cbiAgICAgICAgaWYgKGxpbmUpIGxpbmVzLnB1c2gobGluZSk7XG4gICAgICAgIGxpbmUgPSBbXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGxpbmUpIGxpbmUucHVzaChbeCwgeV0pO1xuICAgIH0gZWxzZSBpZiAoY21kID09PSA3KSB7XG4gICAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcG5pay12ZWN0b3ItdGlsZS9pc3N1ZXMvOTBcbiAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgIGxpbmUucHVzaChsaW5lWzBdLnNsaWNlKCkgYXMgW251bWJlciwgbnVtYmVyXSB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSk7IC8vIGNsb3NlUG9seWdvblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gY29tbWFuZCAke2NtZH1gKTtcbiAgICB9XG4gIH1cblxuICBpZiAobGluZSkgbGluZXMucHVzaChsaW5lKTtcblxuICByZXR1cm4gbGluZXM7XG59XG5cbi8vIGNsYXNzaWZpZXMgYW4gYXJyYXkgb2YgcmluZ3MgaW50byBwb2x5Z29ucyB3aXRoIG91dGVyIHJpbmdzIGFuZCBob2xlc1xuXG5mdW5jdGlvbiBjbGFzc2lmeVJpbmdzKHJpbmdzOiBGbGF0RmlndXJlW10pOiBGbGF0RmlndXJlW11bXSB7XG4gIGNvbnN0IGxlbiA9IHJpbmdzLmxlbmd0aDtcblxuICBpZiAobGVuIDw9IDEpIHJldHVybiBbcmluZ3NdO1xuXG4gIGNvbnN0IHBvbHlnb25zOiBGbGF0RmlndXJlW11bXSA9IFtdO1xuICBsZXQgcG9seWdvbjogRmxhdEZpZ3VyZVtdIHwgdW5kZWZpbmVkO1xuICBsZXQgY2N3OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBhcmVhID0gc2lnbmVkQXJlYShyaW5nc1tpXSk7XG4gICAgaWYgKGFyZWEgPT09IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjY3cgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2N3ID0gYXJlYSA8IDA7XG4gICAgfVxuXG4gICAgaWYgKGNjdyA9PT0gYXJlYSA8IDApIHtcbiAgICAgIGlmIChwb2x5Z29uKSB7XG4gICAgICAgIHBvbHlnb25zLnB1c2gocG9seWdvbik7XG4gICAgICB9XG4gICAgICBwb2x5Z29uID0gW3JpbmdzW2ldXTtcbiAgICB9IGVsc2UgaWYgKHBvbHlnb24pIHtcbiAgICAgIHBvbHlnb24ucHVzaChyaW5nc1tpXSk7XG4gICAgfVxuICB9XG4gIGlmIChwb2x5Z29uKSB7XG4gICAgcG9seWdvbnMucHVzaChwb2x5Z29uKTtcbiAgfVxuXG4gIHJldHVybiBwb2x5Z29ucztcbn1cblxuZnVuY3Rpb24gc2lnbmVkQXJlYShyaW5nOiBGbGF0RmlndXJlKTogbnVtYmVyIHtcbiAgbGV0IHN1bSA9IDA7XG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSByaW5nLmxlbmd0aCwgaiA9IGxlbiAtIDEsIHAxOiBudW1iZXJbXSwgcDI6IG51bWJlcltdOyBpIDwgbGVuOyBqID0gaSsrKSB7XG4gICAgcDEgPSByaW5nW2ldO1xuICAgIHAyID0gcmluZ1tqXTtcbiAgICBzdW0gKz0gKHAyWzBdIC0gcDFbMF0pICogKHAxWzFdICsgcDJbMV0pO1xuICB9XG4gIHJldHVybiBzdW07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUdBLElBQUFBLElBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLHdCQUFBLEdBQUFGLE9BQUE7QUFMQTtBQUNBOztBQWFBO0FBQ0EsSUFBTUcsU0FBUyxHQUFHLEdBQUc7QUFDckIsSUFBTUMsV0FBVyxHQUFHLDRCQUE0QjtBQUNoRCxJQUFNQyxVQUFVLEdBQUcsOEJBQThCO0FBRTFDLFNBQVNDLFdBQVdBLENBQ3pCQyxJQUFZLEVBQ1pDLEtBQWEsRUFBQUMsSUFBQSxFQUVZO0VBQUEsSUFBQUMsVUFBQSxHQUFBRCxJQUFBLENBRHhCRSxLQUFLO0lBQUdDLENBQUMsR0FBQUYsVUFBQSxDQUFERSxDQUFDO0lBQUVDLENBQUMsR0FBQUgsVUFBQSxDQUFERyxDQUFDO0lBQUVDLENBQUMsR0FBQUosVUFBQSxDQUFESSxDQUFDO0VBRWhCLElBQU1DLFNBQVMsTUFBQUMsTUFBQSxDQUNiVCxJQUFJLElBQUlILFdBQVcsRUFBQVksTUFBQSxDQUNsQlgsVUFBVSxPQUFBVyxNQUFBLENBQUlGLENBQUMsT0FBQUUsTUFBQSxDQUFJSixDQUFDLE9BQUFJLE1BQUEsQ0FBSUgsQ0FBQywrQkFBQUcsTUFBQSxDQUE0QlIsS0FBSyxDQUFFO0VBRS9ELE9BQU9TLEtBQUssQ0FBQ0YsU0FBUyxDQUFDLENBQ3BCRyxJQUFJLENBQUMsVUFBQUMsUUFBUTtJQUFBLE9BQUlBLFFBQVEsQ0FBQ0MsV0FBVyxDQUFDLENBQUM7RUFBQSxFQUFDLENBQ3hDRixJQUFJLENBQUMsVUFBQUcsTUFBTTtJQUFBLE9BQUlDLFVBQVUsQ0FBQ1YsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBRU8sTUFBTSxDQUFDO0VBQUEsRUFBQztBQUNoRDtBQUVPLFNBQVNDLFVBQVVBLENBQ3hCVixDQUFTLEVBQ1RDLENBQVMsRUFDVEMsQ0FBUyxFQUNUTSxXQUF3QixFQUNSO0VBQ2hCLElBQU1HLElBQUksR0FBRyxJQUFJQyxzQkFBVSxDQUFDLElBQUlDLGVBQVEsQ0FBQ0wsV0FBVyxDQUFDLENBQUM7RUFFdEQsSUFBTU0sTUFBc0IsR0FBRyxFQUFFO0VBQ2pDLElBQU1DLEtBQUssR0FBR2YsQ0FBQyxHQUFHVCxTQUFTO0VBQzNCLElBQU15QixLQUFLLEdBQUdmLENBQUMsR0FBR1YsU0FBUztFQUMzQixJQUFNMEIsS0FBSyxHQUFHQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEVBQUVqQixDQUFDLENBQUM7RUFFNUIsSUFBTWtCLFdBQVcsR0FBR0MsT0FBTyxDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFUCxLQUFLLEVBQUVDLEtBQUssRUFBRUMsS0FBSyxDQUFDOztFQUUzRDtFQUNBLElBQU1NLFNBQVMsR0FBRyxVQUFVO0VBQzVCLElBQU1DLGVBQWUsR0FBR2IsSUFBSSxDQUFDYyxNQUFNLENBQUNGLFNBQVMsQ0FBQztFQUM5QyxJQUFJLENBQUNDLGVBQWUsRUFBRTtJQUNwQixPQUFPLEVBQUU7RUFDWDtFQUNBLEtBQUssSUFBSUUsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRixlQUFlLENBQUNHLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7SUFDL0MsSUFBTUUsaUJBQWlCLEdBQUdKLGVBQWUsQ0FBQ0ssT0FBTyxDQUFDSCxDQUFDLENBQUM7SUFDcEQ7SUFDQSxJQUFNSSxRQUFRLEdBQUdDLHVCQUF1QixDQUFDSCxpQkFBaUIsRUFBRVIsV0FBVyxDQUFDO0lBQ3hFVSxRQUFRLENBQUNFLE9BQU8sQ0FBQyxVQUFBQyxDQUFDLEVBQUk7TUFDcEJBLENBQUMsQ0FBQ0MsVUFBVSxDQUFDQyxLQUFLLEdBQUdaLFNBQVM7TUFDOUIsSUFBSVUsQ0FBQyxDQUFDQyxVQUFVLENBQUNFLE1BQU0sRUFBRTtRQUN2QnRCLE1BQU0sQ0FBQ3VCLElBQUksQ0FBQ0osQ0FBQyxDQUFDO01BQ2hCO0lBQ0YsQ0FBQyxDQUFDO0VBQ0o7RUFDQSxPQUFPbkIsTUFBTTtBQUNmO0FBRUEsU0FBU08sT0FBT0EsQ0FBQ3JCLENBQVMsRUFBRUMsQ0FBUyxFQUFFZ0IsS0FBYSxFQUFFcUIsSUFBZ0IsRUFBRUMsTUFBYyxFQUFRO0VBQzVGLElBQU1DLFdBQVcsR0FBR0QsTUFBTSxHQUFHaEQsU0FBUztFQUV0QyxLQUFLLElBQUlrRCxFQUFFLEdBQUcsQ0FBQyxFQUFFQSxFQUFFLEdBQUdILElBQUksQ0FBQ1gsTUFBTSxFQUFFYyxFQUFFLEVBQUUsRUFBRTtJQUN2QyxJQUFNQyxDQUFDLEdBQUdKLElBQUksQ0FBQ0csRUFBRSxDQUFDO0lBQ2xCO0lBQ0FILElBQUksQ0FBQ0csRUFBRSxDQUFDLEdBQUcsSUFBQUUsc0NBQWEsRUFBQyxDQUFDM0MsQ0FBQyxHQUFHMEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHRixXQUFXLEVBQUV2QyxDQUFDLEdBQUd5QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdGLFdBQVcsQ0FBQyxFQUFFdkIsS0FBSyxDQUFDO0VBQ25GO0FBQ0Y7O0FBRUE7QUFDQTtBQUNPLFNBQVNjLHVCQUF1QkEsQ0FDckNILGlCQUFvQyxFQUNwQ1AsT0FBMkMsRUFDNkI7RUFDeEUsSUFBSXVCLE1BQXFDLEdBQUdDLGNBQWMsQ0FBQ2pCLGlCQUFpQixDQUFDO0VBQzdFLElBQU1XLE1BQU0sR0FBR1gsaUJBQWlCLENBQUNXLE1BQU07RUFDdkMsSUFBSWIsQ0FBUztFQUNiLElBQUlvQixDQUFTO0VBRWJGLE1BQU0sR0FBR0csYUFBYSxDQUFDSCxNQUFNLENBQUM7RUFDOUIsS0FBS2xCLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR2tCLE1BQU0sQ0FBQ2pCLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7SUFDbEMsS0FBS29CLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0YsTUFBTSxDQUFDbEIsQ0FBQyxDQUFDLENBQUNDLE1BQU0sRUFBRW1CLENBQUMsRUFBRSxFQUFFO01BQ3JDekIsT0FBTyxDQUFDdUIsTUFBTSxDQUFDbEIsQ0FBQyxDQUFDLENBQUNvQixDQUFDLENBQUMsRUFBRVAsTUFBTSxDQUFDO0lBQy9CO0VBQ0Y7RUFFQSxPQUFPSyxNQUFNLENBQUNJLEdBQUcsQ0FBQyxVQUFBQyxXQUFXO0lBQUEsT0FBSztNQUNoQ0EsV0FBVyxFQUFYQSxXQUFXO01BQ1hmLFVBQVUsRUFBRU4saUJBQWlCLENBQUNNO0lBQ2hDLENBQUM7RUFBQSxDQUFDLENBQUM7QUFDTDtBQUVBLFNBQVNXLGNBQWNBLENBQUNqQixpQkFBb0MsRUFBZ0I7RUFDMUUsSUFBTXNCLEdBQUcsR0FBR3RCLGlCQUFpQixDQUFDMUMsSUFBSTtFQUNsQ2dFLEdBQUcsQ0FBQ0MsR0FBRyxHQUFHdkIsaUJBQWlCLENBQUN3QixTQUFTO0VBRXJDLElBQU1DLEdBQUcsR0FBR0gsR0FBRyxDQUFDSSxVQUFVLENBQUMsQ0FBQyxHQUFHSixHQUFHLENBQUNDLEdBQUc7RUFDdEMsSUFBSUksR0FBRyxHQUFHLENBQUM7RUFDWCxJQUFJNUIsTUFBTSxHQUFHLENBQUM7RUFDZCxJQUFJM0IsQ0FBQyxHQUFHLENBQUM7RUFDVCxJQUFJQyxDQUFDLEdBQUcsQ0FBQztFQUVULElBQU11RCxLQUFtQixHQUFHLEVBQUU7RUFDOUIsSUFBSWxCLElBQTRCO0VBRWhDLE9BQU9ZLEdBQUcsQ0FBQ0MsR0FBRyxHQUFHRSxHQUFHLEVBQUU7SUFDcEIsSUFBSTFCLE1BQU0sSUFBSSxDQUFDLEVBQUU7TUFDZixJQUFNOEIsTUFBTSxHQUFHUCxHQUFHLENBQUNJLFVBQVUsQ0FBQyxDQUFDO01BQy9CQyxHQUFHLEdBQUdFLE1BQU0sR0FBRyxHQUFHO01BQ2xCOUIsTUFBTSxHQUFHOEIsTUFBTSxJQUFJLENBQUM7SUFDdEI7SUFFQTlCLE1BQU0sRUFBRTtJQUVSLElBQUk0QixHQUFHLEtBQUssQ0FBQyxJQUFJQSxHQUFHLEtBQUssQ0FBQyxFQUFFO01BQzFCdkQsQ0FBQyxJQUFJa0QsR0FBRyxDQUFDUSxXQUFXLENBQUMsQ0FBQztNQUN0QnpELENBQUMsSUFBSWlELEdBQUcsQ0FBQ1EsV0FBVyxDQUFDLENBQUM7TUFFdEIsSUFBSUgsR0FBRyxLQUFLLENBQUMsRUFBRTtRQUNiO1FBQ0EsSUFBSWpCLElBQUksRUFBRWtCLEtBQUssQ0FBQ25CLElBQUksQ0FBQ0MsSUFBSSxDQUFDO1FBQzFCQSxJQUFJLEdBQUcsRUFBRTtNQUNYO01BRUEsSUFBSUEsSUFBSSxFQUFFQSxJQUFJLENBQUNELElBQUksQ0FBQyxDQUFDckMsQ0FBQyxFQUFFQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDLE1BQU0sSUFBSXNELEdBQUcsS0FBSyxDQUFDLEVBQUU7TUFDcEI7TUFDQSxJQUFJakIsSUFBSSxFQUFFO1FBQ1JBLElBQUksQ0FBQ0QsSUFBSSxDQUFDQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNxQixLQUFLLENBQUMsQ0FBZ0QsQ0FBQyxDQUFDLENBQUM7TUFDN0U7SUFDRixDQUFDLE1BQU07TUFDTCxNQUFNLElBQUlDLEtBQUssb0JBQUF4RCxNQUFBLENBQW9CbUQsR0FBRyxDQUFFLENBQUM7SUFDM0M7RUFDRjtFQUVBLElBQUlqQixJQUFJLEVBQUVrQixLQUFLLENBQUNuQixJQUFJLENBQUNDLElBQUksQ0FBQztFQUUxQixPQUFPa0IsS0FBSztBQUNkOztBQUVBOztBQUVBLFNBQVNULGFBQWFBLENBQUNjLEtBQW1CLEVBQWtCO0VBQzFELElBQU1DLEdBQUcsR0FBR0QsS0FBSyxDQUFDbEMsTUFBTTtFQUV4QixJQUFJbUMsR0FBRyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUNELEtBQUssQ0FBQztFQUU1QixJQUFNRSxRQUF3QixHQUFHLEVBQUU7RUFDbkMsSUFBSUMsT0FBaUM7RUFDckMsSUFBSUMsR0FBd0I7RUFFNUIsS0FBSyxJQUFJdkMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHb0MsR0FBRyxFQUFFcEMsQ0FBQyxFQUFFLEVBQUU7SUFDNUIsSUFBTXdDLElBQUksR0FBR0MsVUFBVSxDQUFDTixLQUFLLENBQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxJQUFJd0MsSUFBSSxLQUFLLENBQUMsRUFBRTtNQUNkO0lBQ0Y7SUFFQSxJQUFJRCxHQUFHLEtBQUtHLFNBQVMsRUFBRTtNQUNyQkgsR0FBRyxHQUFHQyxJQUFJLEdBQUcsQ0FBQztJQUNoQjtJQUVBLElBQUlELEdBQUcsS0FBS0MsSUFBSSxHQUFHLENBQUMsRUFBRTtNQUNwQixJQUFJRixPQUFPLEVBQUU7UUFDWEQsUUFBUSxDQUFDMUIsSUFBSSxDQUFDMkIsT0FBTyxDQUFDO01BQ3hCO01BQ0FBLE9BQU8sR0FBRyxDQUFDSCxLQUFLLENBQUNuQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDLE1BQU0sSUFBSXNDLE9BQU8sRUFBRTtNQUNsQkEsT0FBTyxDQUFDM0IsSUFBSSxDQUFDd0IsS0FBSyxDQUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDeEI7RUFDRjtFQUNBLElBQUlzQyxPQUFPLEVBQUU7SUFDWEQsUUFBUSxDQUFDMUIsSUFBSSxDQUFDMkIsT0FBTyxDQUFDO0VBQ3hCO0VBRUEsT0FBT0QsUUFBUTtBQUNqQjtBQUVBLFNBQVNJLFVBQVVBLENBQUNFLElBQWdCLEVBQVU7RUFDNUMsSUFBSUMsR0FBRyxHQUFHLENBQUM7RUFDWCxLQUFLLElBQUk1QyxDQUFDLEdBQUcsQ0FBQyxFQUFFb0MsR0FBRyxHQUFHTyxJQUFJLENBQUMxQyxNQUFNLEVBQUVtQixDQUFDLEdBQUdnQixHQUFHLEdBQUcsQ0FBQyxFQUFFUyxFQUFZLEVBQUVDLEVBQVksRUFBRTlDLENBQUMsR0FBR29DLEdBQUcsRUFBRWhCLENBQUMsR0FBR3BCLENBQUMsRUFBRSxFQUFFO0lBQzVGNkMsRUFBRSxHQUFHRixJQUFJLENBQUMzQyxDQUFDLENBQUM7SUFDWjhDLEVBQUUsR0FBR0gsSUFBSSxDQUFDdkIsQ0FBQyxDQUFDO0lBQ1p3QixHQUFHLElBQUksQ0FBQ0UsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHRCxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUtBLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBR0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzFDO0VBQ0EsT0FBT0YsR0FBRztBQUNaIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjLzNkLWJ1aWxkaW5nLWxheWVyL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7UkdCQ29sb3J9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBUaWxlSW5kZXggPSB7eDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlcn07XG5cbmV4cG9ydCB0eXBlIFRpbGVMb2FkUHJvcHMgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGluZGV4OiBUaWxlSW5kZXg7XG4gIGJib3g6IGFueTtcbiAgdXJsPzogc3RyaW5nIHwgbnVsbDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIHVzZXJEYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgem9vbT86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFRocmVlREJ1aWxkaW5nTGF5ZXJQcm9wcyA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHN0cmluZztcbiAgbWFwYm94QXBpVXJsOiBzdHJpbmc7XG4gIHRocmVlREJ1aWxkaW5nQ29sb3I6IFJHQkNvbG9yO1xuICB1cGRhdGVUcmlnZ2Vyczoge1xuICAgIGdldEZpbGxDb2xvcjogUkdCQ29sb3I7XG4gIH07XG59O1xuZXhwb3J0IHR5cGUgQ29vcmRpbmF0ZXMgPSB7eDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlcn07XG4vLyBUT0RPIHJlbmFtZVxuZXhwb3J0IHR5cGUgRmxhdEZpZ3VyZSA9IChbbnVtYmVyLCBudW1iZXJdIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKVtdO1xuZXhwb3J0IHR5cGUgVGlsZURhdGFJdGVtID0ge2Nvb3JkaW5hdGVzOiBGbGF0RmlndXJlW107IHByb3BlcnRpZXM6IFZlY3RvclRpbGVGZWF0dXJlUHJvcGVydGllc307XG5leHBvcnQgdHlwZSBWZWN0b3JUaWxlRmVhdHVyZVByb3BlcnRpZXMgPSB7bGF5ZXI6IHN0cmluZzsgaGVpZ2h0PzogbnVtYmVyfTtcbmV4cG9ydCB0eXBlIFZlY3RvclRpbGVGZWF0dXJlID0ge1xuICBleHRlbnQ6IG51bWJlcjtcbiAgcHJvcGVydGllczogVmVjdG9yVGlsZUZlYXR1cmVQcm9wZXJ0aWVzO1xuICBfcGJmOiB7XG4gICAgYnVmOiBBcnJheUJ1ZmZlcjtcbiAgICBwb3M6IG51bWJlcjtcbiAgICB0eXBlOiBudW1iZXI7XG4gICAgbGVuZ3RoOiBudW1iZXI7XG4gICAgcmVhZFZhcmludDogKGI/OiBib29sZWFuKSA9PiBudW1iZXI7XG4gICAgcmVhZFNWYXJpbnQ6ICgpID0+IG51bWJlcjtcbiAgfTtcbiAgX2dlb21ldHJ5OiBudW1iZXI7XG59O1xuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,292 @@
|
|
|
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["default"] = exports.clusterAggregation = void 0;
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
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 _core = require("@deck.gl/core");
|
|
16
|
+
var _layers = require("@deck.gl/layers");
|
|
17
|
+
var _geoViewport = _interopRequireDefault(require("@mapbox/geo-viewport"));
|
|
18
|
+
var _cpuAggregator = _interopRequireWildcard(require("../layer-utils/cpu-aggregator"));
|
|
19
|
+
var _viewportMercatorProject = require("viewport-mercator-project");
|
|
20
|
+
var _d3Array = require("d3-array");
|
|
21
|
+
var _constants = require("@kepler.gl/constants");
|
|
22
|
+
var _clusterUtils = _interopRequireWildcard(require("../layer-utils/cluster-utils"));
|
|
23
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
24
|
+
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; }
|
|
25
|
+
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; }
|
|
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; })(); } // SPDX-License-Identifier: MIT
|
|
28
|
+
// Copyright contributors to the kepler.gl project
|
|
29
|
+
var defaultRadius = _constants.LAYER_VIS_CONFIGS.clusterRadius.defaultValue;
|
|
30
|
+
var defaultRadiusRange = _constants.LAYER_VIS_CONFIGS.clusterRadiusRange.defaultValue;
|
|
31
|
+
var defaultGetColorValue = function defaultGetColorValue(points) {
|
|
32
|
+
return points.length;
|
|
33
|
+
};
|
|
34
|
+
var defaultGetRadiusValue = function defaultGetRadiusValue(cell) {
|
|
35
|
+
return cell.filteredPoints ? cell.filteredPoints.length : cell.points.length;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
39
|
+
function processGeoJSON(step, props, aggregation, _ref) {
|
|
40
|
+
var viewport = _ref.viewport;
|
|
41
|
+
var data = props.data,
|
|
42
|
+
getPosition = props.getPosition,
|
|
43
|
+
filterData = props.filterData;
|
|
44
|
+
var geoJSON = (0, _clusterUtils.getGeoJSON)(data, getPosition, filterData);
|
|
45
|
+
var clusterBuilder = new _clusterUtils["default"]();
|
|
46
|
+
this.setState({
|
|
47
|
+
geoJSON: geoJSON,
|
|
48
|
+
clusterBuilder: clusterBuilder
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
53
|
+
function getClusters(step, props, aggregation, _ref2) {
|
|
54
|
+
var _clusterBuilder$clust;
|
|
55
|
+
var viewport = _ref2.viewport;
|
|
56
|
+
var _this$state = this.state,
|
|
57
|
+
geoJSON = _this$state.geoJSON,
|
|
58
|
+
clusterBuilder = _this$state.clusterBuilder;
|
|
59
|
+
var clusterRadius = props.clusterRadius,
|
|
60
|
+
zoom = props.zoom,
|
|
61
|
+
width = props.width,
|
|
62
|
+
height = props.height;
|
|
63
|
+
var longitude = viewport.longitude,
|
|
64
|
+
latitude = viewport.latitude;
|
|
65
|
+
|
|
66
|
+
// zoom needs to be an integer for the different map utils. Also helps with cache key.
|
|
67
|
+
var bbox = _geoViewport["default"].bounds([longitude, latitude], zoom, [width, height]);
|
|
68
|
+
var clusters = (_clusterBuilder$clust = clusterBuilder === null || clusterBuilder === void 0 ? void 0 : clusterBuilder.clustersAtZoom({
|
|
69
|
+
bbox: bbox,
|
|
70
|
+
clusterRadius: clusterRadius,
|
|
71
|
+
geoJSON: geoJSON,
|
|
72
|
+
zoom: zoom
|
|
73
|
+
})) !== null && _clusterBuilder$clust !== void 0 ? _clusterBuilder$clust : [];
|
|
74
|
+
this.setState({
|
|
75
|
+
layerData: {
|
|
76
|
+
data: clusters
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function getSubLayerRadius(dimensionState, dimension, layerProps) {
|
|
81
|
+
return function (cell) {
|
|
82
|
+
var getRadiusValue = layerProps.getRadiusValue;
|
|
83
|
+
var scaleFunc = dimensionState.scaleFunc;
|
|
84
|
+
return scaleFunc(getRadiusValue(cell));
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
var clusterAggregation = exports.clusterAggregation = {
|
|
88
|
+
key: 'position',
|
|
89
|
+
updateSteps: [{
|
|
90
|
+
key: 'geojson',
|
|
91
|
+
triggers: {
|
|
92
|
+
position: {
|
|
93
|
+
prop: 'getPosition',
|
|
94
|
+
updateTrigger: 'getPosition'
|
|
95
|
+
},
|
|
96
|
+
filterData: {
|
|
97
|
+
prop: 'filterData',
|
|
98
|
+
updateTrigger: 'filterData'
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
updater: processGeoJSON
|
|
102
|
+
}, {
|
|
103
|
+
key: 'clustering',
|
|
104
|
+
triggers: {
|
|
105
|
+
clusterRadius: {
|
|
106
|
+
prop: 'clusterRadius'
|
|
107
|
+
},
|
|
108
|
+
zoom: {
|
|
109
|
+
prop: 'zoom'
|
|
110
|
+
},
|
|
111
|
+
width: {
|
|
112
|
+
prop: 'width'
|
|
113
|
+
},
|
|
114
|
+
height: {
|
|
115
|
+
prop: 'height'
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
updater: getClusters
|
|
119
|
+
}]
|
|
120
|
+
};
|
|
121
|
+
function getRadiusValueDomain(step, props, dimensionUpdater) {
|
|
122
|
+
var key = dimensionUpdater.key;
|
|
123
|
+
var getRadiusValue = props.getRadiusValue;
|
|
124
|
+
var layerData = this.state.layerData;
|
|
125
|
+
var valueDomain = [0, (0, _d3Array.max)(layerData.data, getRadiusValue)];
|
|
126
|
+
this._setDimensionState(key, {
|
|
127
|
+
valueDomain: valueDomain
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
var clusterLayerDimensions = [_cpuAggregator.defaultColorDimension, {
|
|
131
|
+
key: 'radius',
|
|
132
|
+
accessor: 'getRadius',
|
|
133
|
+
nullValue: 0,
|
|
134
|
+
updateSteps: [{
|
|
135
|
+
key: 'getDomain',
|
|
136
|
+
triggers: {
|
|
137
|
+
value: {
|
|
138
|
+
prop: 'getRadiusValue',
|
|
139
|
+
updateTrigger: 'getRadiusValue'
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
updater: getRadiusValueDomain
|
|
143
|
+
}, {
|
|
144
|
+
key: 'getScaleFunc',
|
|
145
|
+
triggers: {
|
|
146
|
+
domain: {
|
|
147
|
+
prop: 'radiusDomain'
|
|
148
|
+
},
|
|
149
|
+
range: {
|
|
150
|
+
prop: 'radiusRange'
|
|
151
|
+
},
|
|
152
|
+
scaleType: {
|
|
153
|
+
prop: 'radiusScaleType'
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
updater: _cpuAggregator.getDimensionScale
|
|
157
|
+
}],
|
|
158
|
+
getSubLayerAccessor: getSubLayerRadius,
|
|
159
|
+
getPickingInfo: function getPickingInfo(dimensionState, cell, layerProps) {
|
|
160
|
+
var radiusValue = layerProps.getRadiusValue(cell);
|
|
161
|
+
var scaleFunc = dimensionState.scaleFunc;
|
|
162
|
+
var scaledRadiusValue = scaleFunc ? scaleFunc(radiusValue) : radiusValue;
|
|
163
|
+
return {
|
|
164
|
+
radiusValue: radiusValue,
|
|
165
|
+
scaledRadiusValue: scaledRadiusValue
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}];
|
|
169
|
+
var defaultProps = {
|
|
170
|
+
clusterRadius: defaultRadius,
|
|
171
|
+
colorDomain: null,
|
|
172
|
+
colorRange: _constants.DEFAULT_COLOR_RANGE,
|
|
173
|
+
colorScaleType: _constants.SCALE_TYPES.quantize,
|
|
174
|
+
radiusScaleType: _constants.SCALE_TYPES.sqrt,
|
|
175
|
+
radiusRange: defaultRadiusRange,
|
|
176
|
+
getPosition: {
|
|
177
|
+
type: 'accessor',
|
|
178
|
+
value: function value(x) {
|
|
179
|
+
return x.position;
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
getColorValue: {
|
|
183
|
+
type: 'accessor',
|
|
184
|
+
value: defaultGetColorValue
|
|
185
|
+
},
|
|
186
|
+
getRadiusValue: {
|
|
187
|
+
type: 'accessor',
|
|
188
|
+
value: defaultGetRadiusValue
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
var ClusterLayer = exports["default"] = /*#__PURE__*/function (_CompositeLayer) {
|
|
192
|
+
function ClusterLayer() {
|
|
193
|
+
(0, _classCallCheck2["default"])(this, ClusterLayer);
|
|
194
|
+
return _callSuper(this, ClusterLayer, arguments);
|
|
195
|
+
}
|
|
196
|
+
(0, _inherits2["default"])(ClusterLayer, _CompositeLayer);
|
|
197
|
+
return (0, _createClass2["default"])(ClusterLayer, [{
|
|
198
|
+
key: "initializeState",
|
|
199
|
+
value: function initializeState() {
|
|
200
|
+
var cpuAggregator = new _cpuAggregator["default"]({
|
|
201
|
+
aggregation: clusterAggregation,
|
|
202
|
+
dimensions: clusterLayerDimensions
|
|
203
|
+
});
|
|
204
|
+
this.state = {
|
|
205
|
+
cpuAggregator: cpuAggregator,
|
|
206
|
+
aggregatorState: cpuAggregator.state
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
}, {
|
|
210
|
+
key: "updateState",
|
|
211
|
+
value: function updateState(_ref3) {
|
|
212
|
+
var oldProps = _ref3.oldProps,
|
|
213
|
+
props = _ref3.props,
|
|
214
|
+
changeFlags = _ref3.changeFlags;
|
|
215
|
+
this.setState({
|
|
216
|
+
aggregatorState: this.state.cpuAggregator.updateState({
|
|
217
|
+
oldProps: oldProps,
|
|
218
|
+
props: props,
|
|
219
|
+
changeFlags: changeFlags
|
|
220
|
+
}, {
|
|
221
|
+
viewport: this.context.viewport,
|
|
222
|
+
// @ts-expect-error props passed for internal calculation
|
|
223
|
+
numInstances: this.getNumInstances(props)
|
|
224
|
+
})
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}, {
|
|
228
|
+
key: "getPickingInfo",
|
|
229
|
+
value: function getPickingInfo(_ref4) {
|
|
230
|
+
var info = _ref4.info;
|
|
231
|
+
var obj = this.state.cpuAggregator.getPickingInfo({
|
|
232
|
+
info: info
|
|
233
|
+
}, this.props);
|
|
234
|
+
if (obj !== null && obj !== void 0 && obj.object) {
|
|
235
|
+
var distanceScale = (0, _viewportMercatorProject.getDistanceScales)(this.context.viewport);
|
|
236
|
+
var metersPerPixel = distanceScale.metersPerPixel[0];
|
|
237
|
+
obj.object.scaledRadiusValue = obj.object.scaledRadiusValue * metersPerPixel;
|
|
238
|
+
}
|
|
239
|
+
return obj;
|
|
240
|
+
}
|
|
241
|
+
}, {
|
|
242
|
+
key: "_getSublayerUpdateTriggers",
|
|
243
|
+
value: function _getSublayerUpdateTriggers() {
|
|
244
|
+
return this.state.cpuAggregator.getUpdateTriggers(this.props);
|
|
245
|
+
}
|
|
246
|
+
}, {
|
|
247
|
+
key: "_getSubLayerAccessors",
|
|
248
|
+
value: function _getSubLayerAccessors() {
|
|
249
|
+
return {
|
|
250
|
+
getRadius: this.state.cpuAggregator.getAccessor('radius', this.props),
|
|
251
|
+
getFillColor: this.state.cpuAggregator.getAccessor('fillColor', this.props)
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
}, {
|
|
255
|
+
key: "renderLayers",
|
|
256
|
+
value: function renderLayers() {
|
|
257
|
+
var _ref5 = this.props,
|
|
258
|
+
id = _ref5.id,
|
|
259
|
+
radiusScale = _ref5.radiusScale,
|
|
260
|
+
visible = _ref5.visible,
|
|
261
|
+
opacity = _ref5.opacity,
|
|
262
|
+
pickable = _ref5.pickable,
|
|
263
|
+
autoHighlight = _ref5.autoHighlight,
|
|
264
|
+
highlightColor = _ref5.highlightColor;
|
|
265
|
+
var _ref6 = this.state,
|
|
266
|
+
cpuAggregator = _ref6.cpuAggregator;
|
|
267
|
+
var updateTriggers = this._getSublayerUpdateTriggers();
|
|
268
|
+
var accessors = this._getSubLayerAccessors();
|
|
269
|
+
var distanceScale = (0, _viewportMercatorProject.getDistanceScales)(this.context.viewport);
|
|
270
|
+
var metersPerPixel = distanceScale.metersPerPixel[0];
|
|
271
|
+
|
|
272
|
+
// return props to the sublayer constructor
|
|
273
|
+
return new _layers.ScatterplotLayer(_objectSpread({
|
|
274
|
+
id: "".concat(id, "-cluster"),
|
|
275
|
+
data: cpuAggregator.state.layerData.data,
|
|
276
|
+
radiusScale: metersPerPixel * radiusScale,
|
|
277
|
+
visible: visible,
|
|
278
|
+
opacity: opacity,
|
|
279
|
+
pickable: pickable,
|
|
280
|
+
autoHighlight: autoHighlight,
|
|
281
|
+
highlightColor: highlightColor,
|
|
282
|
+
updateTriggers: updateTriggers,
|
|
283
|
+
parameters: {
|
|
284
|
+
depthMask: false
|
|
285
|
+
}
|
|
286
|
+
}, accessors));
|
|
287
|
+
}
|
|
288
|
+
}]);
|
|
289
|
+
}(_core.CompositeLayer);
|
|
290
|
+
ClusterLayer.layerName = 'ClusterLayer';
|
|
291
|
+
ClusterLayer.defaultProps = defaultProps;
|
|
292
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfbGF5ZXJzIiwiX2dlb1ZpZXdwb3J0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jcHVBZ2dyZWdhdG9yIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfdmlld3BvcnRNZXJjYXRvclByb2plY3QiLCJfZDNBcnJheSIsIl9jb25zdGFudHMiLCJfY2x1c3RlclV0aWxzIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZiIsImhhcyIsImdldCIsInNldCIsIl90IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiZGVmYXVsdFJhZGl1cyIsIkxBWUVSX1ZJU19DT05GSUdTIiwiY2x1c3RlclJhZGl1cyIsImRlZmF1bHRWYWx1ZSIsImRlZmF1bHRSYWRpdXNSYW5nZSIsImNsdXN0ZXJSYWRpdXNSYW5nZSIsImRlZmF1bHRHZXRDb2xvclZhbHVlIiwicG9pbnRzIiwiZGVmYXVsdEdldFJhZGl1c1ZhbHVlIiwiY2VsbCIsImZpbHRlcmVkUG9pbnRzIiwicHJvY2Vzc0dlb0pTT04iLCJzdGVwIiwicHJvcHMiLCJhZ2dyZWdhdGlvbiIsIl9yZWYiLCJ2aWV3cG9ydCIsImRhdGEiLCJnZXRQb3NpdGlvbiIsImZpbHRlckRhdGEiLCJnZW9KU09OIiwiZ2V0R2VvSlNPTiIsImNsdXN0ZXJCdWlsZGVyIiwiQ2x1c3RlckJ1aWxkZXIiLCJzZXRTdGF0ZSIsImdldENsdXN0ZXJzIiwiX3JlZjIiLCJfY2x1c3RlckJ1aWxkZXIkY2x1c3QiLCJfdGhpcyRzdGF0ZSIsInN0YXRlIiwiem9vbSIsIndpZHRoIiwiaGVpZ2h0IiwibG9uZ2l0dWRlIiwibGF0aXR1ZGUiLCJiYm94IiwiZ2VvVmlld3BvcnQiLCJib3VuZHMiLCJjbHVzdGVycyIsImNsdXN0ZXJzQXRab29tIiwibGF5ZXJEYXRhIiwiZ2V0U3ViTGF5ZXJSYWRpdXMiLCJkaW1lbnNpb25TdGF0ZSIsImRpbWVuc2lvbiIsImxheWVyUHJvcHMiLCJnZXRSYWRpdXNWYWx1ZSIsInNjYWxlRnVuYyIsImNsdXN0ZXJBZ2dyZWdhdGlvbiIsImV4cG9ydHMiLCJrZXkiLCJ1cGRhdGVTdGVwcyIsInRyaWdnZXJzIiwicG9zaXRpb24iLCJwcm9wIiwidXBkYXRlVHJpZ2dlciIsInVwZGF0ZXIiLCJnZXRSYWRpdXNWYWx1ZURvbWFpbiIsImRpbWVuc2lvblVwZGF0ZXIiLCJ2YWx1ZURvbWFpbiIsIm1heCIsIl9zZXREaW1lbnNpb25TdGF0ZSIsImNsdXN0ZXJMYXllckRpbWVuc2lvbnMiLCJkZWZhdWx0Q29sb3JEaW1lbnNpb24iLCJhY2Nlc3NvciIsIm51bGxWYWx1ZSIsInZhbHVlIiwiZG9tYWluIiwicmFuZ2UiLCJzY2FsZVR5cGUiLCJnZXREaW1lbnNpb25TY2FsZSIsImdldFN1YkxheWVyQWNjZXNzb3IiLCJnZXRQaWNraW5nSW5mbyIsInJhZGl1c1ZhbHVlIiwic2NhbGVkUmFkaXVzVmFsdWUiLCJkZWZhdWx0UHJvcHMiLCJjb2xvckRvbWFpbiIsImNvbG9yUmFuZ2UiLCJERUZBVUxUX0NPTE9SX1JBTkdFIiwiY29sb3JTY2FsZVR5cGUiLCJTQ0FMRV9UWVBFUyIsInF1YW50aXplIiwicmFkaXVzU2NhbGVUeXBlIiwic3FydCIsInJhZGl1c1JhbmdlIiwidHlwZSIsIngiLCJnZXRDb2xvclZhbHVlIiwiQ2x1c3RlckxheWVyIiwiX0NvbXBvc2l0ZUxheWVyIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwiaW5pdGlhbGl6ZVN0YXRlIiwiY3B1QWdncmVnYXRvciIsIkNQVUFnZ3JlZ2F0b3IiLCJkaW1lbnNpb25zIiwiYWdncmVnYXRvclN0YXRlIiwidXBkYXRlU3RhdGUiLCJfcmVmMyIsIm9sZFByb3BzIiwiY2hhbmdlRmxhZ3MiLCJjb250ZXh0IiwibnVtSW5zdGFuY2VzIiwiZ2V0TnVtSW5zdGFuY2VzIiwiX3JlZjQiLCJpbmZvIiwib2JqIiwib2JqZWN0IiwiZGlzdGFuY2VTY2FsZSIsImdldERpc3RhbmNlU2NhbGVzIiwibWV0ZXJzUGVyUGl4ZWwiLCJfZ2V0U3VibGF5ZXJVcGRhdGVUcmlnZ2VycyIsImdldFVwZGF0ZVRyaWdnZXJzIiwiX2dldFN1YkxheWVyQWNjZXNzb3JzIiwiZ2V0UmFkaXVzIiwiZ2V0QWNjZXNzb3IiLCJnZXRGaWxsQ29sb3IiLCJyZW5kZXJMYXllcnMiLCJfcmVmNSIsImlkIiwicmFkaXVzU2NhbGUiLCJ2aXNpYmxlIiwib3BhY2l0eSIsInBpY2thYmxlIiwiYXV0b0hpZ2hsaWdodCIsImhpZ2hsaWdodENvbG9yIiwiX3JlZjYiLCJ1cGRhdGVUcmlnZ2VycyIsImFjY2Vzc29ycyIsIlNjYXR0ZXJwbG90TGF5ZXIiLCJjb25jYXQiLCJwYXJhbWV0ZXJzIiwiZGVwdGhNYXNrIiwiQ29tcG9zaXRlTGF5ZXIiLCJsYXllck5hbWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2x1c3Rlci1sYXllci9jbHVzdGVyLWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7Q29tcG9zaXRlTGF5ZXIsIEdldFBpY2tpbmdJbmZvUGFyYW1zLCBQaWNraW5nSW5mb30gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge1NjYXR0ZXJwbG90TGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2xheWVycyc7XG5cbmltcG9ydCBnZW9WaWV3cG9ydCBmcm9tICdAbWFwYm94L2dlby12aWV3cG9ydCc7XG5pbXBvcnQgQ1BVQWdncmVnYXRvciwge1xuICBBZ2dyZWdhdGlvblR5cGUsXG4gIGRlZmF1bHRDb2xvckRpbWVuc2lvbixcbiAgRGltZW5zaW9uVHlwZSxcbiAgZ2V0RGltZW5zaW9uU2NhbGVcbn0gZnJvbSAnLi4vbGF5ZXItdXRpbHMvY3B1LWFnZ3JlZ2F0b3InO1xuaW1wb3J0IHtnZXREaXN0YW5jZVNjYWxlc30gZnJvbSAndmlld3BvcnQtbWVyY2F0b3ItcHJvamVjdCc7XG5pbXBvcnQge21heH0gZnJvbSAnZDMtYXJyYXknO1xuXG5pbXBvcnQge1NDQUxFX1RZUEVTLCBERUZBVUxUX0NPTE9SX1JBTkdFLCBMQVlFUl9WSVNfQ09ORklHU30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IENsdXN0ZXJCdWlsZGVyLCB7Z2V0R2VvSlNPTn0gZnJvbSAnLi4vbGF5ZXItdXRpbHMvY2x1c3Rlci11dGlscyc7XG5pbXBvcnQge1JHQkFDb2xvcn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmNvbnN0IGRlZmF1bHRSYWRpdXMgPSBMQVlFUl9WSVNfQ09ORklHUy5jbHVzdGVyUmFkaXVzLmRlZmF1bHRWYWx1ZTtcbmNvbnN0IGRlZmF1bHRSYWRpdXNSYW5nZSA9IExBWUVSX1ZJU19DT05GSUdTLmNsdXN0ZXJSYWRpdXNSYW5nZS5kZWZhdWx0VmFsdWU7XG5cbmNvbnN0IGRlZmF1bHRHZXRDb2xvclZhbHVlID0gKHBvaW50czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSkgPT4gcG9pbnRzLmxlbmd0aDtcbmNvbnN0IGRlZmF1bHRHZXRSYWRpdXNWYWx1ZSA9IChjZWxsOiB7ZmlsdGVyZWRQb2ludHM/OiB1bmtub3duW107IHBvaW50czogdW5rbm93bltdfSkgPT5cbiAgY2VsbC5maWx0ZXJlZFBvaW50cyA/IGNlbGwuZmlsdGVyZWRQb2ludHMubGVuZ3RoIDogY2VsbC5wb2ludHMubGVuZ3RoO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5mdW5jdGlvbiBwcm9jZXNzR2VvSlNPTih0aGlzOiBDUFVBZ2dyZWdhdG9yLCBzdGVwLCBwcm9wcywgYWdncmVnYXRpb24sIHt2aWV3cG9ydH0pIHtcbiAgY29uc3Qge2RhdGEsIGdldFBvc2l0aW9uLCBmaWx0ZXJEYXRhfSA9IHByb3BzO1xuICBjb25zdCBnZW9KU09OID0gZ2V0R2VvSlNPTihkYXRhLCBnZXRQb3NpdGlvbiwgZmlsdGVyRGF0YSk7XG4gIGNvbnN0IGNsdXN0ZXJCdWlsZGVyID0gbmV3IENsdXN0ZXJCdWlsZGVyKCk7XG5cbiAgdGhpcy5zZXRTdGF0ZSh7Z2VvSlNPTiwgY2x1c3RlckJ1aWxkZXJ9KTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZnVuY3Rpb24gZ2V0Q2x1c3RlcnModGhpczogQ1BVQWdncmVnYXRvciwgc3RlcCwgcHJvcHMsIGFnZ3JlZ2F0aW9uLCB7dmlld3BvcnR9KSB7XG4gIGNvbnN0IHtnZW9KU09OLCBjbHVzdGVyQnVpbGRlcn0gPSB0aGlzLnN0YXRlO1xuICBjb25zdCB7Y2x1c3RlclJhZGl1cywgem9vbSwgd2lkdGgsIGhlaWdodH0gPSBwcm9wcztcbiAgY29uc3Qge2xvbmdpdHVkZSwgbGF0aXR1ZGV9ID0gdmlld3BvcnQ7XG5cbiAgLy8gem9vbSBuZWVkcyB0byBiZSBhbiBpbnRlZ2VyIGZvciB0aGUgZGlmZmVyZW50IG1hcCB1dGlscy4gQWxzbyBoZWxwcyB3aXRoIGNhY2hlIGtleS5cbiAgY29uc3QgYmJveCA9IGdlb1ZpZXdwb3J0LmJvdW5kcyhbbG9uZ2l0dWRlLCBsYXRpdHVkZV0sIHpvb20sIFt3aWR0aCwgaGVpZ2h0XSk7XG4gIGNvbnN0IGNsdXN0ZXJzID0gY2x1c3RlckJ1aWxkZXI/LmNsdXN0ZXJzQXRab29tKHtiYm94LCBjbHVzdGVyUmFkaXVzLCBnZW9KU09OLCB6b29tfSkgPz8gW107XG5cbiAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgbGF5ZXJEYXRhOiB7ZGF0YTogY2x1c3RlcnN9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRTdWJMYXllclJhZGl1cyhcbiAgZGltZW5zaW9uU3RhdGU6IHtzY2FsZUZ1bmM6ICh2OiBudW1iZXIpID0+IG51bWJlcn0sXG4gIGRpbWVuc2lvbjogRGltZW5zaW9uVHlwZSxcbiAgbGF5ZXJQcm9wczogUmVjb3JkPHN0cmluZywgYW55PlxuKSB7XG4gIHJldHVybiAoY2VsbDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHtnZXRSYWRpdXNWYWx1ZX0gPSBsYXllclByb3BzO1xuICAgIGNvbnN0IHtzY2FsZUZ1bmN9ID0gZGltZW5zaW9uU3RhdGU7XG4gICAgcmV0dXJuIHNjYWxlRnVuYyhnZXRSYWRpdXNWYWx1ZShjZWxsKSk7XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBjbHVzdGVyQWdncmVnYXRpb246IEFnZ3JlZ2F0aW9uVHlwZSA9IHtcbiAga2V5OiAncG9zaXRpb24nLFxuICB1cGRhdGVTdGVwczogW1xuICAgIHtcbiAgICAgIGtleTogJ2dlb2pzb24nLFxuICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBwcm9wOiAnZ2V0UG9zaXRpb24nLFxuICAgICAgICAgIHVwZGF0ZVRyaWdnZXI6ICdnZXRQb3NpdGlvbidcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyRGF0YToge1xuICAgICAgICAgIHByb3A6ICdmaWx0ZXJEYXRhJyxcbiAgICAgICAgICB1cGRhdGVUcmlnZ2VyOiAnZmlsdGVyRGF0YSdcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVwZGF0ZXI6IHByb2Nlc3NHZW9KU09OXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdjbHVzdGVyaW5nJyxcbiAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgIGNsdXN0ZXJSYWRpdXM6IHtcbiAgICAgICAgICBwcm9wOiAnY2x1c3RlclJhZGl1cydcbiAgICAgICAgfSxcbiAgICAgICAgem9vbToge1xuICAgICAgICAgIHByb3A6ICd6b29tJ1xuICAgICAgICB9LFxuICAgICAgICB3aWR0aDoge1xuICAgICAgICAgIHByb3A6ICd3aWR0aCdcbiAgICAgICAgfSxcbiAgICAgICAgaGVpZ2h0OiB7XG4gICAgICAgICAgcHJvcDogJ2hlaWdodCdcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVwZGF0ZXI6IGdldENsdXN0ZXJzXG4gICAgfVxuICBdXG59O1xuXG5mdW5jdGlvbiBnZXRSYWRpdXNWYWx1ZURvbWFpbih0aGlzOiBDUFVBZ2dyZWdhdG9yLCBzdGVwLCBwcm9wcywgZGltZW5zaW9uVXBkYXRlcikge1xuICBjb25zdCB7a2V5fSA9IGRpbWVuc2lvblVwZGF0ZXI7XG4gIGNvbnN0IHtnZXRSYWRpdXNWYWx1ZX0gPSBwcm9wcztcbiAgY29uc3Qge2xheWVyRGF0YX0gPSB0aGlzLnN0YXRlO1xuXG4gIGNvbnN0IHZhbHVlRG9tYWluID0gWzAsIG1heChsYXllckRhdGEuZGF0YSBhcyB1bmtub3duIGFzIG51bWJlcltdLCBnZXRSYWRpdXNWYWx1ZSldO1xuICB0aGlzLl9zZXREaW1lbnNpb25TdGF0ZShrZXksIHt2YWx1ZURvbWFpbn0pO1xufVxuXG5jb25zdCBjbHVzdGVyTGF5ZXJEaW1lbnNpb25zOiBbRGltZW5zaW9uVHlwZTxSR0JBQ29sb3I+LCBEaW1lbnNpb25UeXBlPG51bWJlcj5dID0gW1xuICBkZWZhdWx0Q29sb3JEaW1lbnNpb24sXG4gIHtcbiAgICBrZXk6ICdyYWRpdXMnLFxuICAgIGFjY2Vzc29yOiAnZ2V0UmFkaXVzJyxcbiAgICBudWxsVmFsdWU6IDAsXG4gICAgdXBkYXRlU3RlcHM6IFtcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZ2V0RG9tYWluJyxcbiAgICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgcHJvcDogJ2dldFJhZGl1c1ZhbHVlJyxcbiAgICAgICAgICAgIHVwZGF0ZVRyaWdnZXI6ICdnZXRSYWRpdXNWYWx1ZSdcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZXI6IGdldFJhZGl1c1ZhbHVlRG9tYWluXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdnZXRTY2FsZUZ1bmMnLFxuICAgICAgICB0cmlnZ2Vyczoge1xuICAgICAgICAgIGRvbWFpbjoge3Byb3A6ICdyYWRpdXNEb21haW4nfSxcbiAgICAgICAgICByYW5nZToge3Byb3A6ICdyYWRpdXNSYW5nZSd9LFxuICAgICAgICAgIHNjYWxlVHlwZToge3Byb3A6ICdyYWRpdXNTY2FsZVR5cGUnfVxuICAgICAgICB9LFxuICAgICAgICB1cGRhdGVyOiBnZXREaW1lbnNpb25TY2FsZVxuICAgICAgfVxuICAgIF0sXG4gICAgZ2V0U3ViTGF5ZXJBY2Nlc3NvcjogZ2V0U3ViTGF5ZXJSYWRpdXMsXG4gICAgZ2V0UGlja2luZ0luZm86IChkaW1lbnNpb25TdGF0ZSwgY2VsbCwgbGF5ZXJQcm9wcykgPT4ge1xuICAgICAgY29uc3QgcmFkaXVzVmFsdWUgPSBsYXllclByb3BzLmdldFJhZGl1c1ZhbHVlKGNlbGwpO1xuICAgICAgY29uc3Qge3NjYWxlRnVuY30gPSBkaW1lbnNpb25TdGF0ZTtcbiAgICAgIGNvbnN0IHNjYWxlZFJhZGl1c1ZhbHVlID0gc2NhbGVGdW5jID8gc2NhbGVGdW5jKHJhZGl1c1ZhbHVlKSA6IHJhZGl1c1ZhbHVlO1xuXG4gICAgICByZXR1cm4ge3JhZGl1c1ZhbHVlLCBzY2FsZWRSYWRpdXNWYWx1ZX07XG4gICAgfVxuICB9XG5dO1xuXG5jb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gIGNsdXN0ZXJSYWRpdXM6IGRlZmF1bHRSYWRpdXMsXG4gIGNvbG9yRG9tYWluOiBudWxsLFxuICBjb2xvclJhbmdlOiBERUZBVUxUX0NPTE9SX1JBTkdFLFxuICBjb2xvclNjYWxlVHlwZTogU0NBTEVfVFlQRVMucXVhbnRpemUsXG4gIHJhZGl1c1NjYWxlVHlwZTogU0NBTEVfVFlQRVMuc3FydCxcbiAgcmFkaXVzUmFuZ2U6IGRlZmF1bHRSYWRpdXNSYW5nZSxcbiAgZ2V0UG9zaXRpb246IHt0eXBlOiAnYWNjZXNzb3InLCB2YWx1ZTogeCA9PiB4LnBvc2l0aW9ufSxcbiAgZ2V0Q29sb3JWYWx1ZToge3R5cGU6ICdhY2Nlc3NvcicsIHZhbHVlOiBkZWZhdWx0R2V0Q29sb3JWYWx1ZX0sXG4gIGdldFJhZGl1c1ZhbHVlOiB7dHlwZTogJ2FjY2Vzc29yJywgdmFsdWU6IGRlZmF1bHRHZXRSYWRpdXNWYWx1ZX1cbn07XG5cbmludGVyZmFjZSBDbHVzdGVyTGF5ZXJTdGF0ZSB7XG4gIGNwdUFnZ3JlZ2F0b3I6IENQVUFnZ3JlZ2F0b3I7XG4gIGFnZ3JlZ2F0b3JTdGF0ZTogQ1BVQWdncmVnYXRvclsnc3RhdGUnXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2x1c3RlckxheWVyIGV4dGVuZHMgQ29tcG9zaXRlTGF5ZXIge1xuICBpbml0aWFsaXplU3RhdGUoKSB7XG4gICAgY29uc3QgY3B1QWdncmVnYXRvciA9IG5ldyBDUFVBZ2dyZWdhdG9yKHtcbiAgICAgIGFnZ3JlZ2F0aW9uOiBjbHVzdGVyQWdncmVnYXRpb24sXG4gICAgICBkaW1lbnNpb25zOiBjbHVzdGVyTGF5ZXJEaW1lbnNpb25zXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgY3B1QWdncmVnYXRvcixcbiAgICAgIGFnZ3JlZ2F0b3JTdGF0ZTogY3B1QWdncmVnYXRvci5zdGF0ZVxuICAgIH07XG4gIH1cblxuICB1cGRhdGVTdGF0ZSh7XG4gICAgb2xkUHJvcHMsXG4gICAgcHJvcHMsXG4gICAgY2hhbmdlRmxhZ3NcbiAgfToge1xuICAgIG9sZFByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGNoYW5nZUZsYWdzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB9KSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBhZ2dyZWdhdG9yU3RhdGU6ICh0aGlzLnN0YXRlIGFzIHVua25vd24gYXMgQ2x1c3RlckxheWVyU3RhdGUpLmNwdUFnZ3JlZ2F0b3IudXBkYXRlU3RhdGUoXG4gICAgICAgIHtvbGRQcm9wcywgcHJvcHMsIGNoYW5nZUZsYWdzfSxcbiAgICAgICAge1xuICAgICAgICAgIHZpZXdwb3J0OiB0aGlzLmNvbnRleHQudmlld3BvcnQsXG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBwcm9wcyBwYXNzZWQgZm9yIGludGVybmFsIGNhbGN1bGF0aW9uXG4gICAgICAgICAgbnVtSW5zdGFuY2VzOiB0aGlzLmdldE51bUluc3RhbmNlcyhwcm9wcylcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0UGlja2luZ0luZm8oe2luZm99OiBHZXRQaWNraW5nSW5mb1BhcmFtcyk6IFBpY2tpbmdJbmZvIHtcbiAgICBjb25zdCBvYmogPSAodGhpcy5zdGF0ZSBhcyB1bmtub3duIGFzIENsdXN0ZXJMYXllclN0YXRlKS5jcHVBZ2dyZWdhdG9yLmdldFBpY2tpbmdJbmZvKFxuICAgICAge2luZm99LFxuICAgICAgdGhpcy5wcm9wc1xuICAgICk7XG4gICAgaWYgKG9iaj8ub2JqZWN0KSB7XG4gICAgICBjb25zdCBkaXN0YW5jZVNjYWxlID0gZ2V0RGlzdGFuY2VTY2FsZXModGhpcy5jb250ZXh0LnZpZXdwb3J0KTtcbiAgICAgIGNvbnN0IG1ldGVyc1BlclBpeGVsID0gZGlzdGFuY2VTY2FsZS5tZXRlcnNQZXJQaXhlbFswXTtcbiAgICAgIG9iai5vYmplY3Quc2NhbGVkUmFkaXVzVmFsdWUgPSBvYmoub2JqZWN0LnNjYWxlZFJhZGl1c1ZhbHVlICogbWV0ZXJzUGVyUGl4ZWw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iaiBhcyBQaWNraW5nSW5mbztcbiAgfVxuXG4gIF9nZXRTdWJsYXllclVwZGF0ZVRyaWdnZXJzKCkge1xuICAgIHJldHVybiAodGhpcy5zdGF0ZSBhcyB1bmtub3duIGFzIENsdXN0ZXJMYXllclN0YXRlKS5jcHVBZ2dyZWdhdG9yLmdldFVwZGF0ZVRyaWdnZXJzKHRoaXMucHJvcHMpO1xuICB9XG5cbiAgX2dldFN1YkxheWVyQWNjZXNzb3JzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBnZXRSYWRpdXM6ICh0aGlzLnN0YXRlIGFzIHVua25vd24gYXMgQ2x1c3RlckxheWVyU3RhdGUpLmNwdUFnZ3JlZ2F0b3IuZ2V0QWNjZXNzb3IoXG4gICAgICAgICdyYWRpdXMnLFxuICAgICAgICB0aGlzLnByb3BzXG4gICAgICApLFxuICAgICAgZ2V0RmlsbENvbG9yOiAodGhpcy5zdGF0ZSBhcyB1bmtub3duIGFzIENsdXN0ZXJMYXllclN0YXRlKS5jcHVBZ2dyZWdhdG9yLmdldEFjY2Vzc29yKFxuICAgICAgICAnZmlsbENvbG9yJyxcbiAgICAgICAgdGhpcy5wcm9wc1xuICAgICAgKVxuICAgIH07XG4gIH1cblxuICByZW5kZXJMYXllcnMoKSB7XG4gICAgY29uc3Qge2lkLCByYWRpdXNTY2FsZSwgdmlzaWJsZSwgb3BhY2l0eSwgcGlja2FibGUsIGF1dG9IaWdobGlnaHQsIGhpZ2hsaWdodENvbG9yfSA9IHRoaXNcbiAgICAgIC5wcm9wcyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGNvbnN0IHtjcHVBZ2dyZWdhdG9yfSA9IHRoaXMuc3RhdGUgYXMgdW5rbm93biBhcyBDbHVzdGVyTGF5ZXJTdGF0ZTtcbiAgICBjb25zdCB1cGRhdGVUcmlnZ2VycyA9IHRoaXMuX2dldFN1YmxheWVyVXBkYXRlVHJpZ2dlcnMoKTtcbiAgICBjb25zdCBhY2Nlc3NvcnMgPSB0aGlzLl9nZXRTdWJMYXllckFjY2Vzc29ycygpO1xuXG4gICAgY29uc3QgZGlzdGFuY2VTY2FsZSA9IGdldERpc3RhbmNlU2NhbGVzKHRoaXMuY29udGV4dC52aWV3cG9ydCk7XG4gICAgY29uc3QgbWV0ZXJzUGVyUGl4ZWwgPSBkaXN0YW5jZVNjYWxlLm1ldGVyc1BlclBpeGVsWzBdO1xuXG4gICAgLy8gcmV0dXJuIHByb3BzIHRvIHRoZSBzdWJsYXllciBjb25zdHJ1Y3RvclxuICAgIHJldHVybiBuZXcgU2NhdHRlcnBsb3RMYXllcih7XG4gICAgICBpZDogYCR7aWR9LWNsdXN0ZXJgLFxuICAgICAgZGF0YTogY3B1QWdncmVnYXRvci5zdGF0ZS5sYXllckRhdGEuZGF0YSxcbiAgICAgIHJhZGl1c1NjYWxlOiBtZXRlcnNQZXJQaXhlbCAqIHJhZGl1c1NjYWxlLFxuICAgICAgdmlzaWJsZSxcbiAgICAgIG9wYWNpdHksXG4gICAgICBwaWNrYWJsZSxcbiAgICAgIGF1dG9IaWdobGlnaHQsXG4gICAgICBoaWdobGlnaHRDb2xvcixcbiAgICAgIHVwZGF0ZVRyaWdnZXJzLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBkZXB0aE1hc2s6IGZhbHNlXG4gICAgICB9LFxuICAgICAgLi4uYWNjZXNzb3JzXG4gICAgfSk7XG4gIH1cbn1cblxuQ2x1c3RlckxheWVyLmxheWVyTmFtZSA9ICdDbHVzdGVyTGF5ZXInO1xuQ2x1c3RlckxheWVyLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxZQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxjQUFBLEdBQUFDLHVCQUFBLENBQUFMLE9B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
|