@kepler.gl/reducers 3.0.0-alpha.0 → 3.0.0-alpha.1
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/combined-updaters.d.ts +30 -1
- package/dist/combined-updaters.js +222 -4
- package/dist/composer-helpers.d.ts +7 -4
- package/dist/composer-helpers.js +18 -9
- package/dist/composers.d.ts +6 -0
- package/dist/composers.js +3 -3
- package/dist/core.d.ts +1 -1
- package/dist/core.js +16 -6
- package/dist/data-utils.js +2 -3
- package/dist/export-utils.js +2 -2
- package/dist/index.d.ts +2 -3
- package/dist/index.js +37 -16
- package/dist/interaction-utils.d.ts +1 -5
- package/dist/interaction-utils.js +5 -10
- package/dist/layer-utils.d.ts +39 -10
- package/dist/layer-utils.js +110 -35
- package/dist/map-state-updaters.d.ts +33 -2
- package/dist/map-state-updaters.js +278 -19
- package/dist/map-state.d.ts +74 -2
- package/dist/map-state.js +3 -3
- package/dist/map-style-updaters.d.ts +30 -17
- package/dist/map-style-updaters.js +303 -84
- package/dist/map-style.js +3 -3
- package/dist/merger-handler.d.ts +10 -0
- package/dist/merger-handler.js +143 -0
- package/dist/middleware.js +2 -2
- package/dist/provider-state-updaters.js +2 -2
- package/dist/provider-state.js +2 -2
- package/dist/root.d.ts +1 -8
- package/dist/root.js +25 -11
- package/dist/ui-state-updaters.d.ts +9 -2
- package/dist/ui-state-updaters.js +88 -63
- package/dist/ui-state.js +3 -3
- package/dist/vis-state-merger.d.ts +47 -13
- package/dist/vis-state-merger.js +393 -107
- package/dist/vis-state-selectors.js +2 -2
- package/dist/vis-state-updaters.d.ts +136 -10
- package/dist/vis-state-updaters.js +924 -262
- package/dist/vis-state.d.ts +210 -2
- package/dist/vis-state.js +3 -3
- package/package.json +20 -18
package/dist/layer-utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright (c)
|
|
1
|
+
// Copyright (c) 2023 Uber Technologies, Inc.
|
|
2
2
|
//
|
|
3
3
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
4
|
// of this software and associated documentation files (the "Software"), to deal
|
|
@@ -34,7 +34,11 @@ exports.isLayerVisible = isLayerVisible;
|
|
|
34
34
|
exports.prepareLayersForDeck = prepareLayersForDeck;
|
|
35
35
|
exports.prepareLayersToRender = prepareLayersToRender;
|
|
36
36
|
exports.getCustomDeckLayers = getCustomDeckLayers;
|
|
37
|
+
exports.bindLayerCallbacks = bindLayerCallbacks;
|
|
37
38
|
exports.computeDeckLayers = computeDeckLayers;
|
|
39
|
+
exports.getLayerOrderFromLayers = getLayerOrderFromLayers;
|
|
40
|
+
exports.reorderLayerOrder = reorderLayerOrder;
|
|
41
|
+
exports.addLayerToLayerOrder = addLayerToLayerOrder;
|
|
38
42
|
|
|
39
43
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
40
44
|
|
|
@@ -42,6 +46,8 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
42
46
|
|
|
43
47
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
44
48
|
|
|
49
|
+
var _sortable = require("@dnd-kit/sortable");
|
|
50
|
+
|
|
45
51
|
var _constants = require("@kepler.gl/constants");
|
|
46
52
|
|
|
47
53
|
var _layers = require("@kepler.gl/layers");
|
|
@@ -82,26 +88,52 @@ function findDefaultLayer(dataset, layerClasses) {
|
|
|
82
88
|
return typeof layer.setInitialLayerConfig === 'function' && dataset.dataContainer ? layer.setInitialLayerConfig(dataset) : layer;
|
|
83
89
|
});
|
|
84
90
|
}
|
|
91
|
+
|
|
85
92
|
/**
|
|
86
|
-
*
|
|
87
|
-
* return updated layer if colorDomain, dataMap has changed
|
|
93
|
+
* Calculate layer data based on layer type, col Config,
|
|
94
|
+
* return updated layer if colorDomain, dataMap has changed.
|
|
95
|
+
* Also, returns updated layer in case the input layer was in invalid state.
|
|
96
|
+
* Adds an error message to the layer in case of an exception.
|
|
88
97
|
*/
|
|
98
|
+
function calculateLayerData(layer, state, oldLayerData) {
|
|
99
|
+
var layerData;
|
|
89
100
|
|
|
101
|
+
try {
|
|
102
|
+
// Make sure the layer updates data after an error
|
|
103
|
+
if (!layer.isValid) {
|
|
104
|
+
layer._oldDataUpdateTriggers = undefined;
|
|
105
|
+
}
|
|
90
106
|
|
|
91
|
-
|
|
92
|
-
|
|
107
|
+
if (!layer.type || !layer.hasAllColumns() || !layer.config.dataId) {
|
|
108
|
+
return {
|
|
109
|
+
layer: layer,
|
|
110
|
+
layerData: {}
|
|
111
|
+
};
|
|
112
|
+
}
|
|
93
113
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
114
|
+
layerData = layer.formatLayerData(state.datasets, oldLayerData); // At this point the data for the layer is updated without errors
|
|
115
|
+
|
|
116
|
+
if (!layer.isValid) {
|
|
117
|
+
// Switch to visible after an error
|
|
118
|
+
layer = layer.updateLayerConfig({
|
|
119
|
+
isVisible: true
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
layer.isValid = true;
|
|
124
|
+
layer.errorMessage = null;
|
|
125
|
+
} catch (err) {
|
|
126
|
+
layer = layer.updateLayerConfig({
|
|
127
|
+
isVisible: false
|
|
128
|
+
});
|
|
129
|
+
layer.isValid = false;
|
|
130
|
+
layer.errorMessage = err instanceof Error && err.message ? err.message.substring(0, 100) : 'Unknown error';
|
|
131
|
+
layerData = {};
|
|
99
132
|
}
|
|
100
133
|
|
|
101
|
-
var layerData = layer.formatLayerData(state.datasets, oldLayerData);
|
|
102
134
|
return {
|
|
103
|
-
|
|
104
|
-
|
|
135
|
+
layer: layer,
|
|
136
|
+
layerData: layerData
|
|
105
137
|
};
|
|
106
138
|
}
|
|
107
139
|
/**
|
|
@@ -136,6 +168,11 @@ function getLayerHoverProp(_ref) {
|
|
|
136
168
|
dataContainer = _datasets$dataId.dataContainer,
|
|
137
169
|
fields = _datasets$dataId.fields;
|
|
138
170
|
var data = layer.getHoverData(object, dataContainer, fields);
|
|
171
|
+
|
|
172
|
+
if (!data) {
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
|
|
139
176
|
var fieldsToShow = interactionConfig.tooltip.config.fieldsToShow[dataId];
|
|
140
177
|
return {
|
|
141
178
|
data: data,
|
|
@@ -149,20 +186,20 @@ function getLayerHoverProp(_ref) {
|
|
|
149
186
|
return null;
|
|
150
187
|
}
|
|
151
188
|
|
|
152
|
-
function renderDeckGlLayer(props, layerCallbacks
|
|
189
|
+
function renderDeckGlLayer(props, layerCallbacks) {
|
|
153
190
|
var datasets = props.datasets,
|
|
154
|
-
|
|
155
|
-
|
|
191
|
+
layer = props.layer,
|
|
192
|
+
layerIndex = props.layerIndex,
|
|
193
|
+
data = props.data,
|
|
156
194
|
hoverInfo = props.hoverInfo,
|
|
157
195
|
clicked = props.clicked,
|
|
158
196
|
mapState = props.mapState,
|
|
159
197
|
interactionConfig = props.interactionConfig,
|
|
160
198
|
animationConfig = props.animationConfig,
|
|
161
199
|
mapLayers = props.mapLayers;
|
|
162
|
-
var
|
|
163
|
-
var data = layerData[idx];
|
|
200
|
+
var dataset = datasets[layer.config.dataId];
|
|
164
201
|
|
|
165
|
-
var _ref2 =
|
|
202
|
+
var _ref2 = dataset || {},
|
|
166
203
|
gpuFilter = _ref2.gpuFilter;
|
|
167
204
|
|
|
168
205
|
var objectHovered = clicked || hoverInfo;
|
|
@@ -171,7 +208,7 @@ function renderDeckGlLayer(props, layerCallbacks, idx) {
|
|
|
171
208
|
return layer.renderLayer({
|
|
172
209
|
data: data,
|
|
173
210
|
gpuFilter: gpuFilter,
|
|
174
|
-
idx:
|
|
211
|
+
idx: layerIndex,
|
|
175
212
|
interactionConfig: interactionConfig,
|
|
176
213
|
layerCallbacks: layerCallbacks,
|
|
177
214
|
mapState: mapState,
|
|
@@ -214,7 +251,18 @@ function getCustomDeckLayers(deckGlProps) {
|
|
|
214
251
|
return [bottomDeckLayers, topDeckLayers];
|
|
215
252
|
}
|
|
216
253
|
|
|
217
|
-
function
|
|
254
|
+
function bindLayerCallbacks() {
|
|
255
|
+
var layerCallbacks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
256
|
+
var idx = arguments.length > 1 ? arguments[1] : undefined;
|
|
257
|
+
return Object.keys(layerCallbacks).reduce(function (accu, key) {
|
|
258
|
+
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, function (val) {
|
|
259
|
+
return layerCallbacks[key](idx, val);
|
|
260
|
+
}));
|
|
261
|
+
}, {});
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// eslint-disable-next-line complexity
|
|
265
|
+
function computeDeckLayers(_ref3, options, layerCallbacks, deckGlProps) {
|
|
218
266
|
var visState = _ref3.visState,
|
|
219
267
|
mapState = _ref3.mapState,
|
|
220
268
|
mapStyle = _ref3.mapStyle;
|
|
@@ -233,32 +281,36 @@ function computeDeckLayers(_ref3, options, _onSetLayerDomain, deckGlProps) {
|
|
|
233
281
|
mapboxApiAccessToken = _ref4.mapboxApiAccessToken,
|
|
234
282
|
mapboxApiUrl = _ref4.mapboxApiUrl,
|
|
235
283
|
primaryMap = _ref4.primaryMap,
|
|
236
|
-
layersForDeck = _ref4.layersForDeck
|
|
284
|
+
layersForDeck = _ref4.layersForDeck,
|
|
285
|
+
editorInfo = _ref4.editorInfo;
|
|
237
286
|
|
|
238
287
|
var dataLayers = [];
|
|
239
288
|
|
|
240
289
|
if (layerData && layerData.length) {
|
|
241
290
|
var mapLayers = (0, _utils.getMapLayersFromSplitMaps)(splitMaps, mapIndex || 0);
|
|
242
291
|
var currentLayersForDeck = layersForDeck || prepareLayersForDeck(layers, layerData);
|
|
243
|
-
dataLayers = layerOrder.slice().reverse().filter(function (
|
|
244
|
-
return currentLayersForDeck[
|
|
245
|
-
}).reduce(function (overlays,
|
|
246
|
-
var
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
292
|
+
dataLayers = layerOrder.slice().reverse().filter(function (id) {
|
|
293
|
+
return currentLayersForDeck[id];
|
|
294
|
+
}).reduce(function (overlays, layerId) {
|
|
295
|
+
var layerIndex = layers.findIndex(function (_ref5) {
|
|
296
|
+
var id = _ref5.id;
|
|
297
|
+
return id === layerId;
|
|
298
|
+
});
|
|
299
|
+
var bindedLayerCallbacks = layerCallbacks ? bindLayerCallbacks(layerCallbacks, layerIndex) : {};
|
|
300
|
+
var layer = layers[layerIndex];
|
|
301
|
+
var data = layerData[layerIndex];
|
|
251
302
|
var layerOverlay = renderDeckGlLayer({
|
|
252
303
|
datasets: datasets,
|
|
253
|
-
|
|
254
|
-
|
|
304
|
+
layer: layer,
|
|
305
|
+
layerIndex: layerIndex,
|
|
306
|
+
data: data,
|
|
255
307
|
hoverInfo: hoverInfo,
|
|
256
308
|
clicked: clicked,
|
|
257
309
|
mapState: mapState,
|
|
258
310
|
interactionConfig: interactionConfig,
|
|
259
311
|
animationConfig: animationConfig,
|
|
260
312
|
mapLayers: mapLayers
|
|
261
|
-
},
|
|
313
|
+
}, bindedLayerCallbacks);
|
|
262
314
|
return overlays.concat(layerOverlay || []);
|
|
263
315
|
}, []);
|
|
264
316
|
}
|
|
@@ -284,6 +336,29 @@ function computeDeckLayers(_ref3, options, _onSetLayerDomain, deckGlProps) {
|
|
|
284
336
|
customBottomDeckLayers = _getCustomDeckLayers2[0],
|
|
285
337
|
customTopDeckLayers = _getCustomDeckLayers2[1];
|
|
286
338
|
|
|
287
|
-
|
|
339
|
+
var editorLayer = [];
|
|
340
|
+
|
|
341
|
+
if (editorInfo) {
|
|
342
|
+
editorLayer.push((0, _layers.getEditorLayer)(_objectSpread({}, editorInfo)));
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
return [].concat((0, _toConsumableArray2["default"])(customBottomDeckLayers), (0, _toConsumableArray2["default"])(dataLayers), (0, _toConsumableArray2["default"])(customTopDeckLayers), editorLayer);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
function getLayerOrderFromLayers(layers) {
|
|
349
|
+
return layers.map(function (_ref6) {
|
|
350
|
+
var id = _ref6.id;
|
|
351
|
+
return id;
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
function reorderLayerOrder(layerOrder, originLayerId, destinationLayerId) {
|
|
356
|
+
var activeIndex = layerOrder.indexOf(originLayerId);
|
|
357
|
+
var overIndex = layerOrder.indexOf(destinationLayerId);
|
|
358
|
+
return (0, _sortable.arrayMove)(layerOrder, activeIndex, overIndex);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
function addLayerToLayerOrder(layerOrder, layerId) {
|
|
362
|
+
return [layerId].concat((0, _toConsumableArray2["default"])(layerOrder));
|
|
288
363
|
}
|
|
289
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sYXllci11dGlscy50cyJdLCJuYW1lcyI6WyJmaW5kRGVmYXVsdExheWVyIiwiZGF0YXNldCIsImxheWVyQ2xhc3NlcyIsImxheWVyUHJvcHMiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicHJldmlvdXMiLCJsYyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsInByb3BzIiwiQXJyYXkiLCJpc0FycmF5IiwiZm91bmRMYXllcnMiLCJjb25jYXQiLCJtYXAiLCJwIiwidHlwZSIsImRhdGFJZCIsImlkIiwibGF5ZXIiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJkYXRhQ29udGFpbmVyIiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwic3RhdGUiLCJvbGRMYXllckRhdGEiLCJoYXNBbGxDb2x1bW5zIiwiY29uZmlnIiwibGF5ZXJEYXRhIiwiZm9ybWF0TGF5ZXJEYXRhIiwiZGF0YXNldHMiLCJnZXRMYXllckhvdmVyUHJvcCIsImludGVyYWN0aW9uQ29uZmlnIiwiaG92ZXJJbmZvIiwibGF5ZXJzIiwibGF5ZXJzVG9SZW5kZXIiLCJ0b29sdGlwIiwiZW5hYmxlZCIsInBpY2tlZCIsIm9iamVjdCIsIm92ZXJsYXkiLCJpZHgiLCJnZXRIb3ZlckRhdGEiLCJmaWVsZHMiLCJkYXRhIiwiZmllbGRzVG9TaG93IiwicmVuZGVyRGVja0dsTGF5ZXIiLCJsYXllckNhbGxiYWNrcyIsImNsaWNrZWQiLCJtYXBTdGF0ZSIsImFuaW1hdGlvbkNvbmZpZyIsIm1hcExheWVycyIsImdwdUZpbHRlciIsIm9iamVjdEhvdmVyZWQiLCJ2aXNpYmxlIiwicmVuZGVyTGF5ZXIiLCJpc0xheWVyUmVuZGVyYWJsZSIsIkdFT0NPREVSX0xBWUVSX0lEIiwic2hvdWxkUmVuZGVyTGF5ZXIiLCJpc0xheWVyVmlzaWJsZSIsImlzVmlzaWJsZSIsInByZXBhcmVMYXllcnNGb3JEZWNrIiwiYWNjdSIsIm92ZXJsYXlUeXBlIiwiT1ZFUkxBWV9UWVBFX0NPTlNUIiwiZGVja2dsIiwicHJlcGFyZUxheWVyc1RvUmVuZGVyIiwiZ2V0Q3VzdG9tRGVja0xheWVycyIsImRlY2tHbFByb3BzIiwiYm90dG9tRGVja0xheWVycyIsInRvcERlY2tMYXllcnMiLCJ0b3BMYXllcnMiLCJjb21wdXRlRGVja0xheWVycyIsIm9wdGlvbnMiLCJvblNldExheWVyRG9tYWluIiwidmlzU3RhdGUiLCJtYXBTdHlsZSIsImxheWVyT3JkZXIiLCJzcGxpdE1hcHMiLCJtYXBJbmRleCIsIm1hcGJveEFwaUFjY2Vzc1Rva2VuIiwibWFwYm94QXBpVXJsIiwicHJpbWFyeU1hcCIsImxheWVyc0ZvckRlY2siLCJkYXRhTGF5ZXJzIiwibGVuZ3RoIiwiY3VycmVudExheWVyc0ZvckRlY2siLCJzbGljZSIsInJldmVyc2UiLCJmaWx0ZXIiLCJvdmVybGF5cyIsInZhbCIsImxheWVyT3ZlcmxheSIsInZpc2libGVMYXllckdyb3VwcyIsInB1c2giLCJUaHJlZURCdWlsZGluZ0xheWVyIiwidGhyZWVEQnVpbGRpbmdDb2xvciIsInVwZGF0ZVRyaWdnZXJzIiwiZ2V0RmlsbENvbG9yIiwiY3VzdG9tQm90dG9tRGVja0xheWVycyIsImN1c3RvbVRvcERlY2tMYXllcnMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFRQTs7QUFTQTs7QUFDQTs7Ozs7O0FBaUJBO0FBQ0E7QUFDQTtBQUNPLFNBQVNBLGdCQUFULENBQTBCQyxPQUExQixFQUFnREMsWUFBaEQsRUFBeUY7QUFDOUYsTUFBSSxDQUFDRCxPQUFMLEVBQWM7QUFDWixXQUFPLEVBQVA7QUFDRDs7QUFDRCxNQUFNRSxVQUFVLEdBQUlDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZSCxZQUFaLENBQUQsQ0FBNkRJLE1BQTdELENBQ2pCLFVBQUNDLFFBQUQsRUFBV0MsRUFBWCxFQUFrQjtBQUNoQixRQUFNQyxNQUF3QyxHQUM1QyxPQUFPUCxZQUFZLENBQUNNLEVBQUQsQ0FBWixDQUFpQkUscUJBQXhCLEtBQWtELFVBQWxE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Qjs7QUE0RVQsdURBQVdELHNCQUFYLHVDQUFzQ2YsVUFBdEMsdUNBQXFEZ0IsbUJBQXJEO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge0dFT0NPREVSX0xBWUVSX0lEfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBGaWVsZCxcbiAgVG9vbHRpcEZpZWxkLFxuICBDb21wYXJlVHlwZSxcbiAgU3BsaXRNYXBMYXllcnMsXG4gIEludGVyYWN0aW9uQ29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtcbiAgRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUsXG4gIExheWVyLFxuICBMYXllckNsYXNzZXNUeXBlLFxuICBPVkVSTEFZX1RZUEVfQ09OU1Rcbn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuXG5pbXBvcnQgS2VwbGVyVGFibGUsIHtEYXRhc2V0c30gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge1Zpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtpc0Z1bmN0aW9uLCBnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzLCBEYXRhUm93fSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7VGhyZWVEQnVpbGRpbmdMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuZXhwb3J0IHR5cGUgTGF5ZXJzVG9SZW5kZXIgPSB7XG4gIFtsYXllcklkOiBzdHJpbmddOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSA9IHtwb2ludHM6IGFueVtdOyBjb2xvclZhbHVlPzogYW55OyBlbGV2YXRpb25WYWx1ZT86IGFueX07XG5cbmV4cG9ydCB0eXBlIExheWVySG92ZXJQcm9wID0ge1xuICBkYXRhOiBEYXRhUm93IHwgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSB8IG51bGw7XG4gIGZpZWxkczogRmllbGRbXTtcbiAgZmllbGRzVG9TaG93OiBUb29sdGlwRmllbGRbXTtcbiAgbGF5ZXI6IExheWVyO1xuICBwcmltYXJ5RGF0YT86IERhdGFSb3cgfCBBZ2dyZWdhdGlvbkxheWVySG92ZXJEYXRhIHwgbnVsbDtcbiAgY29tcGFyZVR5cGU/OiBDb21wYXJlVHlwZTtcbn07XG5cbi8qKlxuICogRmluZCBkZWZhdWx0IGxheWVycyBmcm9tIGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZERlZmF1bHRMYXllcihkYXRhc2V0OiBLZXBsZXJUYWJsZSwgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXNUeXBlKTogTGF5ZXJbXSB7XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBsYXllclByb3BzID0gKE9iamVjdC5rZXlzKGxheWVyQ2xhc3NlcykgYXMgQXJyYXk8a2V5b2YgTGF5ZXJDbGFzc2VzVHlwZT4pLnJlZHVjZShcbiAgICAocHJldmlvdXMsIGxjKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQ6IEZpbmREZWZhdWx0TGF5ZXJQcm9wc1JldHVyblZhbHVlID1cbiAgICAgICAgdHlwZW9mIGxheWVyQ2xhc3Nlc1tsY10uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyBsYXllckNsYXNzZXNbbGNdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBwcmV2aW91cylcbiAgICAgICAgICA6IHtwcm9wczogW119O1xuXG4gICAgICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcbiAgICAgIGNvbnN0IGZvdW5kTGF5ZXJzID0gcmVzdWx0LmZvdW5kTGF5ZXJzIHx8IHByZXZpb3VzO1xuXG4gICAgICByZXR1cm4gZm91bmRMYXllcnMuY29uY2F0KFxuICAgICAgICBwcm9wcy5tYXAocCA9PiAoe1xuICAgICAgICAgIC4uLnAsXG4gICAgICAgICAgdHlwZTogbGMsXG4gICAgICAgICAgZGF0YUlkOiBkYXRhc2V0LmlkXG4gICAgICAgIH0pKVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtdIGFzIExheWVyQ2xhc3Nlc1R5cGVba2V5b2YgTGF5ZXJDbGFzc2VzVHlwZV1bXVxuICApO1xuXG4gIC8vIGdvIHRocm91Z2ggYWxsIGxheWVyUHJvcHMgdG8gY3JlYXRlIGxheWVyXG4gIHJldHVybiBsYXllclByb3BzLm1hcChwcm9wcyA9PiB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUT0RPOiBjaGVja2luZyBwcm9wcy50eXBlICE9PSBudWxsXG4gICAgY29uc3QgbGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW3Byb3BzLnR5cGVdKHByb3BzKTtcbiAgICByZXR1cm4gdHlwZW9mIGxheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJyAmJiBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAgID8gbGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpXG4gICAgICA6IGxheWVyO1xuICB9KTtcbn1cblxuLyoqXG4gKiBjYWxjdWxhdGUgbGF5ZXIgZGF0YSBiYXNlZCBvbiBsYXllciB0eXBlLCBjb2wgQ29uZmlnLFxuICogcmV0dXJuIHVwZGF0ZWQgbGF5ZXIgaWYgY29sb3JEb21haW4sIGRhdGFNYXAgaGFzIGNoYW5nZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUxheWVyRGF0YShcbiAgbGF5ZXI6IExheWVyLFxuICBzdGF0ZToge2RhdGFzZXRzOiBEYXRhc2V0c30sXG4gIG9sZExheWVyRGF0YT86IGFueVxuKToge1xuICBsYXllckRhdGE6IGFueTtcbiAgbGF5ZXI6IExheWVyO1xufSB7XG4gIGNvbnN0IHt0eXBlfSA9IGxheWVyO1xuXG4gIGlmICghdHlwZSB8fCAhbGF5ZXIuaGFzQWxsQ29sdW1ucygpIHx8ICFsYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgcmV0dXJuIHtsYXllciwgbGF5ZXJEYXRhOiB7fX07XG4gIH1cblxuICBjb25zdCBsYXllckRhdGEgPSBsYXllci5mb3JtYXRMYXllckRhdGEoc3RhdGUuZGF0YXNldHMsIG9sZExheWVyRGF0YSk7XG4gIHJldHVybiB7bGF5ZXJEYXRhLCBsYXllcn07XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHByb3BzIHBhc3NlZCB0byBMYXllckhvdmVySW5mb1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vbGF5ZXItdXRpbHMnKS5nZXRMYXllckhvdmVyUHJvcH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVySG92ZXJQcm9wKHtcbiAgaW50ZXJhY3Rpb25Db25maWcsXG4gIGhvdmVySW5mbyxcbiAgbGF5ZXJzLFxuICBsYXllcnNUb1JlbmRlcixcbiAgZGF0YXNldHNcbn06IHtcbiAgaW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnO1xuICBob3ZlckluZm86IGFueTtcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllcnNUb1JlbmRlcjogTGF5ZXJzVG9SZW5kZXI7XG4gIGRhdGFzZXRzOiBEYXRhc2V0cztcbn0pOiBMYXllckhvdmVyUHJvcCB8IG51bGwge1xuICBpZiAoaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5lbmFibGVkICYmIGhvdmVySW5mbyAmJiBob3ZlckluZm8ucGlja2VkKSB7XG4gICAgLy8gaWYgYW55dGhpbmcgaG92ZXJlZFxuICAgIGNvbnN0IHtvYmplY3QsIGxheWVyOiBvdmVybGF5fSA9IGhvdmVySW5mbztcblxuICAgIC8vIGRlY2tnbCBsYXllciB0byBrZXBsZXItZ2wgbGF5ZXJcbiAgICBjb25zdCBsYXllciA9IGxheWVyc1tvdmVybGF5LnByb3BzLmlkeF07XG5cbiAgICBpZiAob2JqZWN0ICYmIGxheWVyICYmIGxheWVyLmdldEhvdmVyRGF0YSAmJiBsYXllcnNUb1JlbmRlcltsYXllci5pZF0pIHtcbiAgICAgIC8vIGlmIGxheWVyIGlzIHZpc2libGUgYW5kIGhhdmUgaG92ZXJlZCBkYXRhXG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbmZpZzoge2RhdGFJZH1cbiAgICAgIH0gPSBsYXllcjtcbiAgICAgIGlmICghZGF0YUlkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3Qge2RhdGFDb250YWluZXIsIGZpZWxkc30gPSBkYXRhc2V0c1tkYXRhSWRdO1xuICAgICAgY29uc3QgZGF0YTogRGF0YVJvdyB8IG51bGwgPSBsYXllci5nZXRIb3ZlckRhdGEob2JqZWN0LCBkYXRhQ29udGFpbmVyLCBmaWVsZHMpO1xuICAgICAgY29uc3QgZmllbGRzVG9TaG93ID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgZmllbGRzVG9TaG93LFxuICAgICAgICBsYXllclxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckRlY2tHbExheWVyKHByb3BzOiBhbnksIGxheWVyQ2FsbGJhY2tzOiB7W2tleTogc3RyaW5nXTogYW55fSwgaWR4OiBudW1iZXIpIHtcbiAgY29uc3Qge1xuICAgIGRhdGFzZXRzLFxuICAgIGxheWVycyxcbiAgICBsYXllckRhdGEsXG4gICAgaG92ZXJJbmZvLFxuICAgIGNsaWNrZWQsXG4gICAgbWFwU3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgIG1hcExheWVyc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGxheWVyID0gbGF5ZXJzW2lkeF07XG4gIGNvbnN0IGRhdGEgPSBsYXllckRhdGFbaWR4XTtcbiAgY29uc3Qge2dwdUZpbHRlcn0gPSBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSB8fCB7fTtcbiAgY29uc3Qgb2JqZWN0SG92ZXJlZCA9IGNsaWNrZWQgfHwgaG92ZXJJbmZvO1xuICBjb25zdCB2aXNpYmxlID0gIW1hcExheWVycyB8fCAobWFwTGF5ZXJzICYmIG1hcExheWVyc1tsYXllci5pZF0pO1xuICAvLyBMYXllciBpcyBMYXllciBjbGFzc1xuICByZXR1cm4gbGF5ZXIucmVuZGVyTGF5ZXIoe1xuICAgIGRhdGEsXG4gICAgZ3B1RmlsdGVyLFxuICAgIGlkeCxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBsYXllckNhbGxiYWNrcyxcbiAgICBtYXBTdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgb2JqZWN0SG92ZXJlZCxcbiAgICB2aXNpYmxlXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclJlbmRlcmFibGUobGF5ZXI6IExheWVyLCBsYXllckRhdGEpIHtcbiAgcmV0dXJuIGxheWVyLmlkICE9PSBHRU9DT0RFUl9MQVlFUl9JRCAmJiBsYXllci5zaG91bGRSZW5kZXJMYXllcihsYXllckRhdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclZpc2libGUobGF5ZXIsIG1hcExheWVycykge1xuICByZXR1cm4gKFxuICAgIGxheWVyLmNvbmZpZy5pc1Zpc2libGUgJiZcbiAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBkb24ndCByZW5kZXIgaXRcbiAgICAoIW1hcExheWVycyB8fCAobWFwTGF5ZXJzICYmIG1hcExheWVyc1tsYXllci5pZF0pKVxuICApO1xufVxuXG4vLyBQcmVwYXJlIGEgZGljdCBvZiBsYXllcnMgcmVuZGVyZWQgYnkgdGhlIGRlY2suZ2xcbi8vIE5vdGUsIGlzVmlzaWJsZTogZmFsc2UgbGF5ZXIgaXMgcGFzc2VkIHRvIGRlY2suZ2wgaGVyZVxuLy8gcmV0dXJuIHtbaWRdOiB0cnVlIFxcIGZhbHNlfVxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVMYXllcnNGb3JEZWNrKFxuICBsYXllcnM6IExheWVyW10sXG4gIGxheWVyRGF0YTogYW55W11cbik6IHtcbiAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcbn0ge1xuICByZXR1cm4gbGF5ZXJzLnJlZHVjZShcbiAgICAoYWNjdSwgbGF5ZXIsIGlkeCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbbGF5ZXIuaWRdOlxuICAgICAgICBpc0xheWVyUmVuZGVyYWJsZShsYXllciwgbGF5ZXJEYXRhW2lkeF0pICYmIGxheWVyLm92ZXJsYXlUeXBlID09PSBPVkVSTEFZX1RZUEVfQ09OU1QuZGVja2dsXG4gICAgfSksXG4gICAge31cbiAgKTtcbn1cblxuLy8gUHJlcGFyZSBhIGRpY3Qgb2YgcmVuZGVyZWQgbGF5ZXJzIHJlbmRlcmVkIGluIHRoZSBtYXBcbi8vIFRoaXMgaW5jbHVkZXMgb25seSB0aGUgdmlzaWJpbGUgbGF5ZXJzIGZvciBzaW5nbGUgbWFwIHZpZXcgYW5kIHNwbGl0IG1hcCB2aWV3XG4vLyByZXR1cm4ge1tpZF06IHRydWUgXFwgZmFsc2V9XG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUxheWVyc1RvUmVuZGVyKFxuICBsYXllcnM6IExheWVyW10sXG4gIGxheWVyRGF0YTogVmlzU3RhdGVbJ2xheWVyRGF0YSddLFxuICBtYXBMYXllcnM/OiBTcGxpdE1hcExheWVycyB8IHVuZGVmaW5lZCB8IG51bGxcbik6IExheWVyc1RvUmVuZGVyIHtcbiAgcmV0dXJuIGxheWVycy5yZWR1Y2UoXG4gICAgKGFjY3UsIGxheWVyLCBpZHgpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2xheWVyLmlkXTogaXNMYXllclJlbmRlcmFibGUobGF5ZXIsIGxheWVyRGF0YVtpZHhdKSAmJiBpc0xheWVyVmlzaWJsZShsYXllciwgbWFwTGF5ZXJzKVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXN0b21EZWNrTGF5ZXJzKGRlY2tHbFByb3BzKSB7XG4gIGNvbnN0IGJvdHRvbURlY2tMYXllcnMgPSBBcnJheS5pc0FycmF5KGRlY2tHbFByb3BzPy5sYXllcnMpXG4gICAgPyBkZWNrR2xQcm9wcz8ubGF5ZXJzXG4gICAgOiBpc0Z1bmN0aW9uKGRlY2tHbFByb3BzPy5sYXllcnMpXG4gICAgPyBkZWNrR2xQcm9wcz8ubGF5ZXJzKClcbiAgICA6IFtdO1xuICBjb25zdCB0b3BEZWNrTGF5ZXJzID0gQXJyYXkuaXNBcnJheShkZWNrR2xQcm9wcz8udG9wTGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LnRvcExheWVyc1xuICAgIDogaXNGdW5jdGlvbihkZWNrR2xQcm9wcz8udG9wTGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LnRvcExheWVycygpXG4gICAgOiBbXTtcblxuICByZXR1cm4gW2JvdHRvbURlY2tMYXllcnMsIHRvcERlY2tMYXllcnNdO1xufVxuXG5leHBvcnQgdHlwZSBDb21wdXRlRGVja0xheWVyc1Byb3BzID0ge1xuICBtYXBJbmRleD86IG51bWJlcjtcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gIG1hcGJveEFwaVVybD86IHN0cmluZztcbiAgcHJpbWFyeU1hcD86IGJvb2xlYW47XG4gIGxheWVyc0ZvckRlY2s/OiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZURlY2tMYXllcnMoXG4gIHt2aXNTdGF0ZSwgbWFwU3RhdGUsIG1hcFN0eWxlfTogYW55LFxuICBvcHRpb25zPzogQ29tcHV0ZURlY2tMYXllcnNQcm9wcyxcbiAgb25TZXRMYXllckRvbWFpbj86IChpZHg6IG51bWJlciwgdmFsdWU6IGFueSkgPT4gdm9pZCxcbiAgZGVja0dsUHJvcHM/OiBhbnlcbik6IExheWVyW10ge1xuICBjb25zdCB7XG4gICAgZGF0YXNldHMsXG4gICAgbGF5ZXJzLFxuICAgIGxheWVyT3JkZXIsXG4gICAgbGF5ZXJEYXRhLFxuICAgIGhvdmVySW5mbyxcbiAgICBjbGlja2VkLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBzcGxpdE1hcHNcbiAgfSA9IHZpc1N0YXRlO1xuXG4gIGNvbnN0IHttYXBJbmRleCwgbWFwYm94QXBpQWNjZXNzVG9rZW4sIG1hcGJveEFwaVVybCwgcHJpbWFyeU1hcCwgbGF5ZXJzRm9yRGVja30gPSBvcHRpb25zIHx8IHt9O1xuXG4gIGxldCBkYXRhTGF5ZXJzOiBhbnlbXSA9IFtdO1xuXG4gIGlmIChsYXllckRhdGEgJiYgbGF5ZXJEYXRhLmxlbmd0aCkge1xuICAgIGNvbnN0IG1hcExheWVycyA9IGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMoc3BsaXRNYXBzLCBtYXBJbmRleCB8fCAwKTtcblxuICAgIGNvbnN0IGN1cnJlbnRMYXllcnNGb3JEZWNrID0gbGF5ZXJzRm9yRGVjayB8fCBwcmVwYXJlTGF5ZXJzRm9yRGVjayhsYXllcnMsIGxheWVyRGF0YSk7XG5cbiAgICBkYXRhTGF5ZXJzID0gbGF5ZXJPcmRlclxuICAgICAgLnNsaWNlKClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5maWx0ZXIoaWR4ID0+IGN1cnJlbnRMYXllcnNGb3JEZWNrW2xheWVyc1tpZHhdLmlkXSlcbiAgICAgIC5yZWR1Y2UoKG92ZXJsYXlzLCBpZHgpID0+IHtcbiAgICAgICAgY29uc3QgbGF5ZXJDYWxsYmFja3MgPSBvblNldExheWVyRG9tYWluXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIG9uU2V0TGF5ZXJEb21haW46IHZhbCA9PiBvblNldExheWVyRG9tYWluKGlkeCwgdmFsKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge307XG4gICAgICAgIGNvbnN0IGxheWVyT3ZlcmxheSA9IHJlbmRlckRlY2tHbExheWVyKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgICAgbGF5ZXJzLFxuICAgICAgICAgICAgbGF5ZXJEYXRhLFxuICAgICAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICAgIG1hcFN0YXRlLFxuICAgICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgICBtYXBMYXllcnNcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxheWVyQ2FsbGJhY2tzLFxuICAgICAgICAgIGlkeFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gb3ZlcmxheXMuY29uY2F0KGxheWVyT3ZlcmxheSB8fCBbXSk7XG4gICAgICB9LCBbXSk7XG4gIH1cblxuICBpZiAoIXByaW1hcnlNYXApIHtcbiAgICByZXR1cm4gZGF0YUxheWVycztcbiAgfVxuXG4gIGlmIChcbiAgICBtYXBTdHlsZT8udmlzaWJsZUxheWVyR3JvdXBzWyczZCBidWlsZGluZyddICYmXG4gICAgcHJpbWFyeU1hcCAmJlxuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuICYmXG4gICAgbWFwYm94QXBpVXJsXG4gICkge1xuICAgIGRhdGFMYXllcnMucHVzaChcbiAgICAgIG5ldyBUaHJlZURCdWlsZGluZ0xheWVyKHtcbiAgICAgICAgaWQ6ICdfa2VwbGVyZ2xfM2QtYnVpbGRpbmcnLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgbWFwYm94QXBpVXJsLFxuICAgICAgICB0aHJlZURCdWlsZGluZ0NvbG9yOiBtYXBTdHlsZS50aHJlZURCdWlsZGluZ0NvbG9yLFxuICAgICAgICB1cGRhdGVUcmlnZ2Vyczoge1xuICAgICAgICAgIGdldEZpbGxDb2xvcjogbWFwU3R5bGUudGhyZWVEQnVpbGRpbmdDb2xvclxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBjb25zdCBbY3VzdG9tQm90dG9tRGVja0xheWVycywgY3VzdG9tVG9wRGVja0xheWVyc10gPSBnZXRDdXN0b21EZWNrTGF5ZXJzKGRlY2tHbFByb3BzKTtcblxuICByZXR1cm4gWy4uLmN1c3RvbUJvdHRvbURlY2tMYXllcnMsIC4uLmRhdGFMYXllcnMsIC4uLmN1c3RvbVRvcERlY2tMYXllcnNdO1xufVxuIl19
|
|
364
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sYXllci11dGlscy50cyJdLCJuYW1lcyI6WyJmaW5kRGVmYXVsdExheWVyIiwiZGF0YXNldCIsImxheWVyQ2xhc3NlcyIsImxheWVyUHJvcHMiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicHJldmlvdXMiLCJsYyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsInByb3BzIiwiQXJyYXkiLCJpc0FycmF5IiwiZm91bmRMYXllcnMiLCJjb25jYXQiLCJtYXAiLCJwIiwidHlwZSIsImRhdGFJZCIsImlkIiwibGF5ZXIiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJkYXRhQ29udGFpbmVyIiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwic3RhdGUiLCJvbGRMYXllckRhdGEiLCJsYXllckRhdGEiLCJpc1ZhbGlkIiwiX29sZERhdGFVcGRhdGVUcmlnZ2VycyIsInVuZGVmaW5lZCIsImhhc0FsbENvbHVtbnMiLCJjb25maWciLCJmb3JtYXRMYXllckRhdGEiLCJkYXRhc2V0cyIsInVwZGF0ZUxheWVyQ29uZmlnIiwiaXNWaXNpYmxlIiwiZXJyb3JNZXNzYWdlIiwiZXJyIiwiRXJyb3IiLCJtZXNzYWdlIiwic3Vic3RyaW5nIiwiZ2V0TGF5ZXJIb3ZlclByb3AiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImhvdmVySW5mbyIsImxheWVycyIsImxheWVyc1RvUmVuZGVyIiwidG9vbHRpcCIsImVuYWJsZWQiLCJwaWNrZWQiLCJvYmplY3QiLCJvdmVybGF5IiwiaWR4IiwiZ2V0SG92ZXJEYXRhIiwiZmllbGRzIiwiZGF0YSIsImZpZWxkc1RvU2hvdyIsInJlbmRlckRlY2tHbExheWVyIiwibGF5ZXJDYWxsYmFja3MiLCJsYXllckluZGV4IiwiY2xpY2tlZCIsIm1hcFN0YXRlIiwiYW5pbWF0aW9uQ29uZmlnIiwibWFwTGF5ZXJzIiwiZ3B1RmlsdGVyIiwib2JqZWN0SG92ZXJlZCIsInZpc2libGUiLCJyZW5kZXJMYXllciIsImlzTGF5ZXJSZW5kZXJhYmxlIiwiR0VPQ09ERVJfTEFZRVJfSUQiLCJzaG91bGRSZW5kZXJMYXllciIsImlzTGF5ZXJWaXNpYmxlIiwicHJlcGFyZUxheWVyc0ZvckRlY2siLCJhY2N1Iiwib3ZlcmxheVR5cGUiLCJPVkVSTEFZX1RZUEVfQ09OU1QiLCJkZWNrZ2wiLCJwcmVwYXJlTGF5ZXJzVG9SZW5kZXIiLCJnZXRDdXN0b21EZWNrTGF5ZXJzIiwiZGVja0dsUHJvcHMiLCJib3R0b21EZWNrTGF5ZXJzIiwidG9wRGVja0xheWVycyIsInRvcExheWVycyIsImJpbmRMYXllckNhbGxiYWNrcyIsImtleSIsInZhbCIsImNvbXB1dGVEZWNrTGF5ZXJzIiwib3B0aW9ucyIsInZpc1N0YXRlIiwibWFwU3R5bGUiLCJsYXllck9yZGVyIiwic3BsaXRNYXBzIiwibWFwSW5kZXgiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsInByaW1hcnlNYXAiLCJsYXllcnNGb3JEZWNrIiwiZWRpdG9ySW5mbyIsImRhdGFMYXllcnMiLCJsZW5ndGgiLCJjdXJyZW50TGF5ZXJzRm9yRGVjayIsInNsaWNlIiwicmV2ZXJzZSIsImZpbHRlciIsIm92ZXJsYXlzIiwibGF5ZXJJZCIsImZpbmRJbmRleCIsImJpbmRlZExheWVyQ2FsbGJhY2tzIiwibGF5ZXJPdmVybGF5IiwidmlzaWJsZUxheWVyR3JvdXBzIiwicHVzaCIsIlRocmVlREJ1aWxkaW5nTGF5ZXIiLCJ0aHJlZURCdWlsZGluZ0NvbG9yIiwidXBkYXRlVHJpZ2dlcnMiLCJnZXRGaWxsQ29sb3IiLCJjdXN0b21Cb3R0b21EZWNrTGF5ZXJzIiwiY3VzdG9tVG9wRGVja0xheWVycyIsImVkaXRvckxheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJyZW9yZGVyTGF5ZXJPcmRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJhY3RpdmVJbmRleCIsImluZGV4T2YiLCJvdmVySW5kZXgiLCJhZGRMYXllclRvTGF5ZXJPcmRlciJdLCJt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LENBQVc7QUFBQSxRQUFFSSxFQUFGLFNBQUVBLEVBQUY7QUFBQSxXQUFVQSxFQUFWO0FBQUEsR0FBWCxDQUFQO0FBQ0Q7O0FBRU0sU0FBU21HLGlCQUFULENBQ0w3QixVQURLLEVBRUw4QixhQUZLLEVBR0xDLGtCQUhLLEVBSW1CO0FBQ3hCLE1BQU1DLFdBQVcsR0FBR2hDLFVBQVUsQ0FBQ2lDLE9BQVgsQ0FBbUJILGFBQW5CLENBQXBCO0FBQ0EsTUFBTUksU0FBUyxHQUFHbEMsVUFBVSxDQUFDaUMsT0FBWCxDQUFtQkYsa0JBQW5CLENBQWxCO0FBRUEsU0FBTyx5QkFBVS9CLFVBQVYsRUFBc0JnQyxXQUF0QixFQUFtQ0UsU0FBbkMsQ0FBUDtBQUNEOztBQUVNLFNBQVNDLG9CQUFULENBQ0xuQyxVQURLLEVBRUxlLE9BRkssRUFHSztBQUNWLFVBQVFBLE9BQVIsNkNBQW9CZixVQUFwQjtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIzIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHthcnJheU1vdmV9IGZyb20gJ0BkbmQta2l0L3NvcnRhYmxlJztcbmltcG9ydCB7R0VPQ09ERVJfTEFZRVJfSUR9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TGF5ZXIgYXMgRGVja0xheWVyLCBMYXllclByb3BzIGFzIERlY2tMYXllclByb3BzfSBmcm9tICdAZGVjay5nbC9jb3JlL3R5cGVkJztcbmltcG9ydCB7XG4gIEZpZWxkLFxuICBUb29sdGlwRmllbGQsXG4gIENvbXBhcmVUeXBlLFxuICBTcGxpdE1hcExheWVycyxcbiAgSW50ZXJhY3Rpb25Db25maWcsXG4gIEVkaXRvcixcbiAgRmVhdHVyZSxcbiAgRmVhdHVyZVNlbGVjdGlvbkNvbnRleHQsXG4gIFZpZXdwb3J0XG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtcbiAgRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUsXG4gIExheWVyLFxuICBMYXllckNsYXNzZXNUeXBlLFxuICBPVkVSTEFZX1RZUEVfQ09OU1QsXG4gIGdldEVkaXRvckxheWVyXG59IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcblxuaW1wb3J0IEtlcGxlclRhYmxlLCB7RGF0YXNldHN9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7aXNGdW5jdGlvbiwgZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwcywgRGF0YVJvd30gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge1RocmVlREJ1aWxkaW5nTGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvZGVja2dsLWxheWVycyc7XG5cbmV4cG9ydCB0eXBlIExheWVyc1RvUmVuZGVyID0ge1xuICBbbGF5ZXJJZDogc3RyaW5nXTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgPSB7cG9pbnRzOiBhbnlbXTsgY29sb3JWYWx1ZT86IGFueTsgZWxldmF0aW9uVmFsdWU/OiBhbnl9O1xuXG5leHBvcnQgdHlwZSBMYXllckhvdmVyUHJvcCA9IHtcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBudWxsO1xuICBmaWVsZHM6IEZpZWxkW107XG4gIGZpZWxkc1RvU2hvdzogVG9vbHRpcEZpZWxkW107XG4gIGxheWVyOiBMYXllcjtcbiAgcHJpbWFyeURhdGE/OiBEYXRhUm93IHwgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSB8IG51bGw7XG4gIGNvbXBhcmVUeXBlPzogQ29tcGFyZVR5cGU7XG59O1xuXG4vKipcbiAqIEZpbmQgZGVmYXVsdCBsYXllcnMgZnJvbSBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmREZWZhdWx0TGF5ZXIoZGF0YXNldDogS2VwbGVyVGFibGUsIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzVHlwZSk6IExheWVyW10ge1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgbGF5ZXJQcm9wcyA9IChPYmplY3Qua2V5cyhsYXllckNsYXNzZXMpIGFzIEFycmF5PGtleW9mIExheWVyQ2xhc3Nlc1R5cGU+KS5yZWR1Y2UoXG4gICAgKHByZXZpb3VzLCBsYykgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0OiBGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZSA9XG4gICAgICAgIHR5cGVvZiBsYXllckNsYXNzZXNbbGNdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgID8gbGF5ZXJDbGFzc2VzW2xjXS5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgcHJldmlvdXMpXG4gICAgICAgICAgOiB7cHJvcHM6IFtdfTtcblxuICAgICAgY29uc3QgcHJvcHMgPSBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQgOiByZXN1bHQucHJvcHMgfHwgW107XG4gICAgICBjb25zdCBmb3VuZExheWVycyA9IHJlc3VsdC5mb3VuZExheWVycyB8fCBwcmV2aW91cztcblxuICAgICAgcmV0dXJuIGZvdW5kTGF5ZXJzLmNvbmNhdChcbiAgICAgICAgcHJvcHMubWFwKHAgPT4gKHtcbiAgICAgICAgICAuLi5wLFxuICAgICAgICAgIHR5cGU6IGxjLFxuICAgICAgICAgIGRhdGFJZDogZGF0YXNldC5pZFxuICAgICAgICB9KSlcbiAgICAgICk7XG4gICAgfSxcbiAgICBbXSBhcyBMYXllckNsYXNzZXNUeXBlW2tleW9mIExheWVyQ2xhc3Nlc1R5cGVdW11cbiAgKTtcblxuICAvLyBnbyB0aHJvdWdoIGFsbCBsYXllclByb3BzIHRvIGNyZWF0ZSBsYXllclxuICByZXR1cm4gbGF5ZXJQcm9wcy5tYXAocHJvcHMgPT4ge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogY2hlY2tpbmcgcHJvcHMudHlwZSAhPT0gbnVsbFxuICAgIGNvbnN0IGxheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1twcm9wcy50eXBlXShwcm9wcyk7XG4gICAgcmV0dXJuIHR5cGVvZiBsYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcgPT09ICdmdW5jdGlvbicgJiYgZGF0YXNldC5kYXRhQ29udGFpbmVyXG4gICAgICA/IGxheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyhkYXRhc2V0KVxuICAgICAgOiBsYXllcjtcbiAgfSk7XG59XG5cbnR5cGUgTWluVmlzU3RhdGVGb3JMYXllckRhdGEgPSB7XG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXTtcbiAgYW5pbWF0aW9uQ29uZmlnOiBWaXNTdGF0ZVsnYW5pbWF0aW9uQ29uZmlnJ107XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSBsYXllciBkYXRhIGJhc2VkIG9uIGxheWVyIHR5cGUsIGNvbCBDb25maWcsXG4gKiByZXR1cm4gdXBkYXRlZCBsYXllciBpZiBjb2xvckRvbWFpbiwgZGF0YU1hcCBoYXMgY2hhbmdlZC5cbiAqIEFsc28sIHJldHVybnMgdXBkYXRlZCBsYXllciBpbiBjYXNlIHRoZSBpbnB1dCBsYXllciB3YXMgaW4gaW52YWxpZCBzdGF0ZS5cbiAqIEFkZHMgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgbGF5ZXIgaW4gY2FzZSBvZiBhbiBleGNlcHRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVMYXllckRhdGE8UyBleHRlbmRzIE1pblZpc1N0YXRlRm9yTGF5ZXJEYXRhPihcbiAgbGF5ZXI6IExheWVyLFxuICBzdGF0ZTogUyxcbiAgb2xkTGF5ZXJEYXRhPzogYW55XG4pOiB7XG4gIGxheWVyRGF0YTogYW55O1xuICBsYXllcjogTGF5ZXI7XG59IHtcbiAgbGV0IGxheWVyRGF0YTtcbiAgdHJ5IHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIHVwZGF0ZXMgZGF0YSBhZnRlciBhbiBlcnJvclxuICAgIGlmICghbGF5ZXIuaXNWYWxpZCkge1xuICAgICAgbGF5ZXIuX29sZERhdGFVcGRhdGVUcmlnZ2VycyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIWxheWVyLnR5cGUgfHwgIWxheWVyLmhhc0FsbENvbHVtbnMoKSB8fCAhbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgICAgcmV0dXJuIHtsYXllciwgbGF5ZXJEYXRhOiB7fX07XG4gICAgfVxuXG4gICAgbGF5ZXJEYXRhID0gbGF5ZXIuZm9ybWF0TGF5ZXJEYXRhKHN0YXRlLmRhdGFzZXRzLCBvbGRMYXllckRhdGEpO1xuXG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZGF0YSBmb3IgdGhlIGxheWVyIGlzIHVwZGF0ZWQgd2l0aG91dCBlcnJvcnNcbiAgICBpZiAoIWxheWVyLmlzVmFsaWQpIHtcbiAgICAgIC8vIFN3aXRjaCB0byB2aXNpYmxlIGFmdGVyIGFuIGVycm9yXG4gICAgICBsYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgbGF5ZXIuaXNWYWxpZCA9IHRydWU7XG4gICAgbGF5ZXIuZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgfSk7XG4gICAgbGF5ZXIuaXNWYWxpZCA9IGZhbHNlO1xuXG4gICAgbGF5ZXIuZXJyb3JNZXNzYWdlID1cbiAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yICYmIGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsIDEwMCkgOiAnVW5rbm93biBlcnJvcic7XG5cbiAgICBsYXllckRhdGEgPSB7fTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbGF5ZXIsXG4gICAgbGF5ZXJEYXRhXG4gIH07XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHByb3BzIHBhc3NlZCB0byBMYXllckhvdmVySW5mb1xuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vbGF5ZXItdXRpbHMnKS5nZXRMYXllckhvdmVyUHJvcH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVySG92ZXJQcm9wKHtcbiAgaW50ZXJhY3Rpb25Db25maWcsXG4gIGhvdmVySW5mbyxcbiAgbGF5ZXJzLFxuICBsYXllcnNUb1JlbmRlcixcbiAgZGF0YXNldHNcbn06IHtcbiAgaW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnO1xuICBob3ZlckluZm86IGFueTtcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllcnNUb1JlbmRlcjogTGF5ZXJzVG9SZW5kZXI7XG4gIGRhdGFzZXRzOiBEYXRhc2V0cztcbn0pOiBMYXllckhvdmVyUHJvcCB8IG51bGwge1xuICBpZiAoaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5lbmFibGVkICYmIGhvdmVySW5mbyAmJiBob3ZlckluZm8ucGlja2VkKSB7XG4gICAgLy8gaWYgYW55dGhpbmcgaG92ZXJlZFxuICAgIGNvbnN0IHtvYmplY3QsIGxheWVyOiBvdmVybGF5fSA9IGhvdmVySW5mbztcblxuICAgIC8vIGRlY2tnbCBsYXllciB0byBrZXBsZXItZ2wgbGF5ZXJcbiAgICBjb25zdCBsYXllciA9IGxheWVyc1tvdmVybGF5LnByb3BzLmlkeF07XG5cbiAgICBpZiAob2JqZWN0ICYmIGxheWVyICYmIGxheWVyLmdldEhvdmVyRGF0YSAmJiBsYXllcnNUb1JlbmRlcltsYXllci5pZF0pIHtcbiAgICAgIC8vIGlmIGxheWVyIGlzIHZpc2libGUgYW5kIGhhdmUgaG92ZXJlZCBkYXRhXG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbmZpZzoge2RhdGFJZH1cbiAgICAgIH0gPSBsYXllcjtcbiAgICAgIGlmICghZGF0YUlkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3Qge2RhdGFDb250YWluZXIsIGZpZWxkc30gPSBkYXRhc2V0c1tkYXRhSWRdO1xuICAgICAgY29uc3QgZGF0YTogRGF0YVJvdyB8IG51bGwgPSBsYXllci5nZXRIb3ZlckRhdGEob2JqZWN0LCBkYXRhQ29udGFpbmVyLCBmaWVsZHMpO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZmllbGRzVG9TaG93ID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgZmllbGRzVG9TaG93LFxuICAgICAgICBsYXllclxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckRlY2tHbExheWVyKHByb3BzOiBhbnksIGxheWVyQ2FsbGJhY2tzOiB7W2tleTogc3RyaW5nXTogYW55fSkge1xuICBjb25zdCB7XG4gICAgZGF0YXNldHMsXG4gICAgbGF5ZXIsXG4gICAgbGF5ZXJJbmRleCxcbiAgICBkYXRhLFxuICAgIGhvdmVySW5mbyxcbiAgICBjbGlja2VkLFxuICAgIG1hcFN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBtYXBMYXllcnNcbiAgfSA9IHByb3BzO1xuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGNvbnN0IHtncHVGaWx0ZXJ9ID0gZGF0YXNldCB8fCB7fTtcbiAgY29uc3Qgb2JqZWN0SG92ZXJlZCA9IGNsaWNrZWQgfHwgaG92ZXJJbmZvO1xuICBjb25zdCB2aXNpYmxlID0gIW1hcExheWVycyB8fCAobWFwTGF5ZXJzICYmIG1hcExheWVyc1tsYXllci5pZF0pO1xuICAvLyBMYXllciBpcyBMYXllciBjbGFzc1xuICByZXR1cm4gbGF5ZXIucmVuZGVyTGF5ZXIoe1xuICAgIGRhdGEsXG4gICAgZ3B1RmlsdGVyLFxuICAgIGlkeDogbGF5ZXJJbmRleCxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBsYXllckNhbGxiYWNrcyxcbiAgICBtYXBTdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgb2JqZWN0SG92ZXJlZCxcbiAgICB2aXNpYmxlXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclJlbmRlcmFibGUobGF5ZXI6IExheWVyLCBsYXllckRhdGEpIHtcbiAgcmV0dXJuIGxheWVyLmlkICE9PSBHRU9DT0RFUl9MQVlFUl9JRCAmJiBsYXllci5zaG91bGRSZW5kZXJMYXllcihsYXllckRhdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclZpc2libGUobGF5ZXIsIG1hcExheWVycykge1xuICByZXR1cm4gKFxuICAgIGxheWVyLmNvbmZpZy5pc1Zpc2libGUgJiZcbiAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBkb24ndCByZW5kZXIgaXRcbiAgICAoIW1hcExheWVycyB8fCAobWFwTGF5ZXJzICYmIG1hcExheWVyc1tsYXllci5pZF0pKVxuICApO1xufVxuXG4vLyBQcmVwYXJlIGEgZGljdCBvZiBsYXllcnMgcmVuZGVyZWQgYnkgdGhlIGRlY2suZ2xcbi8vIE5vdGUsIGlzVmlzaWJsZTogZmFsc2UgbGF5ZXIgaXMgcGFzc2VkIHRvIGRlY2suZ2wgaGVyZVxuLy8gcmV0dXJuIHtbaWRdOiB0cnVlIFxcIGZhbHNlfVxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVMYXllcnNGb3JEZWNrKFxuICBsYXllcnM6IExheWVyW10sXG4gIGxheWVyRGF0YTogVmlzU3RhdGVbJ2xheWVyRGF0YSddXG4pOiB7XG4gIFtrZXk6IHN0cmluZ106IGJvb2xlYW47XG59IHtcbiAgcmV0dXJuIGxheWVycy5yZWR1Y2UoXG4gICAgKGFjY3UsIGxheWVyLCBpZHgpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2xheWVyLmlkXTpcbiAgICAgICAgaXNMYXllclJlbmRlcmFibGUobGF5ZXIsIGxheWVyRGF0YVtpZHhdKSAmJiBsYXllci5vdmVybGF5VHlwZSA9PT0gT1ZFUkxBWV9UWVBFX0NPTlNULmRlY2tnbFxuICAgIH0pLFxuICAgIHt9XG4gICk7XG59XG5cbi8vIFByZXBhcmUgYSBkaWN0IG9mIHJlbmRlcmVkIGxheWVycyByZW5kZXJlZCBpbiB0aGUgbWFwXG4vLyBUaGlzIGluY2x1ZGVzIG9ubHkgdGhlIHZpc2liaWxlIGxheWVycyBmb3Igc2luZ2xlIG1hcCB2aWV3IGFuZCBzcGxpdCBtYXAgdmlld1xuLy8gcmV0dXJuIHtbaWRdOiB0cnVlIFxcIGZhbHNlfVxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVMYXllcnNUb1JlbmRlcihcbiAgbGF5ZXJzOiBMYXllcltdLFxuICBsYXllckRhdGE6IFZpc1N0YXRlWydsYXllckRhdGEnXSxcbiAgbWFwTGF5ZXJzPzogU3BsaXRNYXBMYXllcnMgfCB1bmRlZmluZWQgfCBudWxsXG4pOiBMYXllcnNUb1JlbmRlciB7XG4gIHJldHVybiBsYXllcnMucmVkdWNlKFxuICAgIChhY2N1LCBsYXllciwgaWR4KSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtsYXllci5pZF06IGlzTGF5ZXJSZW5kZXJhYmxlKGxheWVyLCBsYXllckRhdGFbaWR4XSkgJiYgaXNMYXllclZpc2libGUobGF5ZXIsIG1hcExheWVycylcbiAgICB9KSxcbiAgICB7fVxuICApO1xufVxuXG50eXBlIEN1c3RvbURlY2tMYXllciA9IERlY2tMYXllcjxEZWNrTGF5ZXJQcm9wcz47XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXN0b21EZWNrTGF5ZXJzKGRlY2tHbFByb3BzPzogYW55KTogW0N1c3RvbURlY2tMYXllcltdLCBDdXN0b21EZWNrTGF5ZXJbXV0ge1xuICBjb25zdCBib3R0b21EZWNrTGF5ZXJzID0gQXJyYXkuaXNBcnJheShkZWNrR2xQcm9wcz8ubGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LmxheWVyc1xuICAgIDogaXNGdW5jdGlvbihkZWNrR2xQcm9wcz8ubGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LmxheWVycygpXG4gICAgOiBbXTtcbiAgY29uc3QgdG9wRGVja0xheWVycyA9IEFycmF5LmlzQXJyYXkoZGVja0dsUHJvcHM/LnRvcExheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy50b3BMYXllcnNcbiAgICA6IGlzRnVuY3Rpb24oZGVja0dsUHJvcHM/LnRvcExheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy50b3BMYXllcnMoKVxuICAgIDogW107XG5cbiAgcmV0dXJuIFtib3R0b21EZWNrTGF5ZXJzLCB0b3BEZWNrTGF5ZXJzXTtcbn1cblxuZXhwb3J0IHR5cGUgQ29tcHV0ZURlY2tMYXllcnNQcm9wcyA9IHtcbiAgbWFwSW5kZXg/OiBudW1iZXI7XG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICBtYXBib3hBcGlVcmw/OiBzdHJpbmc7XG4gIHByaW1hcnlNYXA/OiBib29sZWFuO1xuICBsYXllcnNGb3JEZWNrPzoge1trZXk6IHN0cmluZ106IGJvb2xlYW59O1xuICBlZGl0b3JJbmZvPzoge1xuICAgIGVkaXRvcjogRWRpdG9yO1xuICAgIGVkaXRvck1lbnVBY3RpdmU6IGJvb2xlYW47XG4gICAgb25TZXRGZWF0dXJlczogKGZlYXR1cmVzOiBGZWF0dXJlW10pID0+IGFueTtcbiAgICBzZXRTZWxlY3RlZEZlYXR1cmU6IChcbiAgICAgIGZlYXR1cmU6IEZlYXR1cmUgfCBudWxsLFxuICAgICAgc2VsZWN0aW9uQ29udGV4dD86IEZlYXR1cmVTZWxlY3Rpb25Db250ZXh0XG4gICAgKSA9PiBhbnk7XG4gICAgZmVhdHVyZUNvbGxlY3Rpb246IHtcbiAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgIGZlYXR1cmVzOiBGZWF0dXJlW107XG4gICAgfTtcbiAgICBzZWxlY3RlZEZlYXR1cmVJbmRleGVzOiBudW1iZXJbXTtcbiAgICB2aWV3cG9ydDogVmlld3BvcnQ7XG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYmluZExheWVyQ2FsbGJhY2tzKGxheWVyQ2FsbGJhY2tzOiBMYXllckNhbGxiYWNrcyA9IHt9LCBpZHg6IG51bWJlcikge1xuICByZXR1cm4gT2JqZWN0LmtleXMobGF5ZXJDYWxsYmFja3MpLnJlZHVjZShcbiAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtrZXldOiB2YWwgPT4gbGF5ZXJDYWxsYmFja3Nba2V5XShpZHgsIHZhbClcbiAgICB9KSxcbiAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCAoX2lkeDogbnVtYmVyLCB2YWw6IGFueSkgPT4gdm9pZD5cbiAgKTtcbn1cblxuZXhwb3J0IHR5cGUgTGF5ZXJDYWxsYmFja3MgPSB7XG4gIG9uTGF5ZXJIb3Zlcj86IChpZHg6IG51bWJlciwgdmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgb25TZXRMYXllckRvbWFpbj86IChpZHg6IG51bWJlciwgdmFsdWU6IGFueSkgPT4gdm9pZDtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZURlY2tMYXllcnMoXG4gIHt2aXNTdGF0ZSwgbWFwU3RhdGUsIG1hcFN0eWxlfTogYW55LFxuICBvcHRpb25zPzogQ29tcHV0ZURlY2tMYXllcnNQcm9wcyxcbiAgbGF5ZXJDYWxsYmFja3M/OiBMYXllckNhbGxiYWNrcyxcbiAgZGVja0dsUHJvcHM/OiBhbnlcbik6IExheWVyW10ge1xuICBjb25zdCB7XG4gICAgZGF0YXNldHMsXG4gICAgbGF5ZXJzLFxuICAgIGxheWVyT3JkZXIsXG4gICAgbGF5ZXJEYXRhLFxuICAgIGhvdmVySW5mbyxcbiAgICBjbGlja2VkLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBzcGxpdE1hcHNcbiAgfSA9IHZpc1N0YXRlO1xuXG4gIGNvbnN0IHttYXBJbmRleCwgbWFwYm94QXBpQWNjZXNzVG9rZW4sIG1hcGJveEFwaVVybCwgcHJpbWFyeU1hcCwgbGF5ZXJzRm9yRGVjaywgZWRpdG9ySW5mb30gPVxuICAgIG9wdGlvbnMgfHwge307XG5cbiAgbGV0IGRhdGFMYXllcnM6IGFueVtdID0gW107XG5cbiAgaWYgKGxheWVyRGF0YSAmJiBsYXllckRhdGEubGVuZ3RoKSB7XG4gICAgY29uc3QgbWFwTGF5ZXJzID0gZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwcyhzcGxpdE1hcHMsIG1hcEluZGV4IHx8IDApO1xuXG4gICAgY29uc3QgY3VycmVudExheWVyc0ZvckRlY2sgPSBsYXllcnNGb3JEZWNrIHx8IHByZXBhcmVMYXllcnNGb3JEZWNrKGxheWVycywgbGF5ZXJEYXRhKTtcblxuICAgIGRhdGFMYXllcnMgPSBsYXllck9yZGVyXG4gICAgICAuc2xpY2UoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmZpbHRlcihpZCA9PiBjdXJyZW50TGF5ZXJzRm9yRGVja1tpZF0pXG4gICAgICAucmVkdWNlKChvdmVybGF5cywgbGF5ZXJJZCkgPT4ge1xuICAgICAgICBjb25zdCBsYXllckluZGV4ID0gbGF5ZXJzLmZpbmRJbmRleCgoe2lkfSkgPT4gaWQgPT09IGxheWVySWQpO1xuICAgICAgICBjb25zdCBiaW5kZWRMYXllckNhbGxiYWNrcyA9IGxheWVyQ2FsbGJhY2tzXG4gICAgICAgICAgPyBiaW5kTGF5ZXJDYWxsYmFja3MobGF5ZXJDYWxsYmFja3MsIGxheWVySW5kZXgpXG4gICAgICAgICAgOiB7fTtcbiAgICAgICAgY29uc3QgbGF5ZXIgPSBsYXllcnNbbGF5ZXJJbmRleF07XG4gICAgICAgIGNvbnN0IGRhdGEgPSBsYXllckRhdGFbbGF5ZXJJbmRleF07XG4gICAgICAgIGNvbnN0IGxheWVyT3ZlcmxheSA9IHJlbmRlckRlY2tHbExheWVyKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgICBsYXllckluZGV4LFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGhvdmVySW5mbyxcbiAgICAgICAgICAgIGNsaWNrZWQsXG4gICAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAgICAgbWFwTGF5ZXJzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBiaW5kZWRMYXllckNhbGxiYWNrc1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gb3ZlcmxheXMuY29uY2F0KGxheWVyT3ZlcmxheSB8fCBbXSk7XG4gICAgICB9LCBbXSk7XG4gIH1cblxuICBpZiAoIXByaW1hcnlNYXApIHtcbiAgICByZXR1cm4gZGF0YUxheWVycztcbiAgfVxuXG4gIGlmIChcbiAgICBtYXBTdHlsZT8udmlzaWJsZUxheWVyR3JvdXBzWyczZCBidWlsZGluZyddICYmXG4gICAgcHJpbWFyeU1hcCAmJlxuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuICYmXG4gICAgbWFwYm94QXBpVXJsXG4gICkge1xuICAgIGRhdGFMYXllcnMucHVzaChcbiAgICAgIG5ldyBUaHJlZURCdWlsZGluZ0xheWVyKHtcbiAgICAgICAgaWQ6ICdfa2VwbGVyZ2xfM2QtYnVpbGRpbmcnLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgbWFwYm94QXBpVXJsLFxuICAgICAgICB0aHJlZURCdWlsZGluZ0NvbG9yOiBtYXBTdHlsZS50aHJlZURCdWlsZGluZ0NvbG9yLFxuICAgICAgICB1cGRhdGVUcmlnZ2Vyczoge1xuICAgICAgICAgIGdldEZpbGxDb2xvcjogbWFwU3R5bGUudGhyZWVEQnVpbGRpbmdDb2xvclxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBjb25zdCBbY3VzdG9tQm90dG9tRGVja0xheWVycywgY3VzdG9tVG9wRGVja0xheWVyc10gPSBnZXRDdXN0b21EZWNrTGF5ZXJzKGRlY2tHbFByb3BzKTtcblxuICBjb25zdCBlZGl0b3JMYXllcjogYW55W10gPSBbXTtcbiAgaWYgKGVkaXRvckluZm8pIHtcbiAgICBlZGl0b3JMYXllci5wdXNoKFxuICAgICAgZ2V0RWRpdG9yTGF5ZXIoe1xuICAgICAgICAuLi5lZGl0b3JJbmZvXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gWy4uLmN1c3RvbUJvdHRvbURlY2tMYXllcnMsIC4uLmRhdGFMYXllcnMsIC4uLmN1c3RvbVRvcERlY2tMYXllcnMsIC4uLmVkaXRvckxheWVyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzPFQgZXh0ZW5kcyB7aWQ6IHN0cmluZ30+KGxheWVyczogVFtdKTogc3RyaW5nW10ge1xuICByZXR1cm4gbGF5ZXJzLm1hcCgoe2lkfSkgPT4gaWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVvcmRlckxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IFZpc1N0YXRlWydsYXllck9yZGVyJ10sXG4gIG9yaWdpbkxheWVySWQ6IHN0cmluZyxcbiAgZGVzdGluYXRpb25MYXllcklkOiBzdHJpbmdcbik6IFZpc1N0YXRlWydsYXllck9yZGVyJ10ge1xuICBjb25zdCBhY3RpdmVJbmRleCA9IGxheWVyT3JkZXIuaW5kZXhPZihvcmlnaW5MYXllcklkKTtcbiAgY29uc3Qgb3ZlckluZGV4ID0gbGF5ZXJPcmRlci5pbmRleE9mKGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG5cbiAgcmV0dXJuIGFycmF5TW92ZShsYXllck9yZGVyLCBhY3RpdmVJbmRleCwgb3ZlckluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyVG9MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBWaXNTdGF0ZVsnbGF5ZXJPcmRlciddLFxuICBsYXllcklkOiBzdHJpbmdcbik6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtsYXllcklkLCAuLi5sYXllck9yZGVyXTtcbn1cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MapStateActions, ReceiveMapConfigPayload, ActionTypes } from '@kepler.gl/actions';
|
|
2
|
-
import { MapState } from '@kepler.gl/types';
|
|
2
|
+
import { MapState, Bounds, Viewport } from '@kepler.gl/types';
|
|
3
3
|
/**
|
|
4
4
|
* Default initial `mapState`
|
|
5
5
|
* @memberof mapStateUpdaters
|
|
@@ -12,7 +12,13 @@ import { MapState } from '@kepler.gl/types';
|
|
|
12
12
|
* @property dragRotate Default: `false`
|
|
13
13
|
* @property width Default: `800`
|
|
14
14
|
* @property height Default: `800`
|
|
15
|
-
* @property
|
|
15
|
+
* @property minZoom: `undefined`,
|
|
16
|
+
* @property maxZoom: `undefined`,
|
|
17
|
+
* @property maxBounds: `undefined`,
|
|
18
|
+
* @property isSplit: `false`,
|
|
19
|
+
* @property isViewportSynced: `true`,
|
|
20
|
+
* @property isZoomLocked: `false`,
|
|
21
|
+
* @property splitMapViewports: `[]`
|
|
16
22
|
* @public
|
|
17
23
|
*/
|
|
18
24
|
export declare const INITIAL_MAP_STATE: MapState;
|
|
@@ -55,8 +61,33 @@ export declare const receiveMapConfigUpdater: (state: MapState, { payload: { con
|
|
|
55
61
|
* @public
|
|
56
62
|
*/
|
|
57
63
|
export declare const toggleSplitMapUpdater: (state: MapState, action: MapStateActions.ToggleSplitMapUpdaterAction) => MapState;
|
|
64
|
+
/**
|
|
65
|
+
* Toggle between locked and unlocked split viewports
|
|
66
|
+
* @memberof mapStateUpdaters
|
|
67
|
+
* @public
|
|
68
|
+
*/
|
|
69
|
+
export declare const toggleSplitMapViewportUpdater: (state: MapState, action: MapStateActions.ToggleSplitMapViewportUpdaterAction) => {
|
|
70
|
+
isViewportSynced: boolean;
|
|
71
|
+
isZoomLocked: boolean;
|
|
72
|
+
pitch: number;
|
|
73
|
+
bearing: number;
|
|
74
|
+
latitude: number;
|
|
75
|
+
longitude: number;
|
|
76
|
+
zoom: number;
|
|
77
|
+
dragRotate: boolean;
|
|
78
|
+
width: number;
|
|
79
|
+
height: number;
|
|
80
|
+
minZoom?: number | undefined;
|
|
81
|
+
maxZoom?: number | undefined;
|
|
82
|
+
maxBounds?: Bounds | undefined;
|
|
83
|
+
initialState?: any;
|
|
84
|
+
scale?: number | undefined;
|
|
85
|
+
isSplit: boolean;
|
|
86
|
+
splitMapViewports: Viewport[];
|
|
87
|
+
};
|
|
58
88
|
export declare function getMapDimForSplitMap(isSplit: any, state: any): {
|
|
59
89
|
width?: undefined;
|
|
60
90
|
} | {
|
|
61
91
|
width: number;
|
|
62
92
|
};
|
|
93
|
+
export declare function pickViewportPropsFromMapState(state: MapState): Viewport;
|