@kepler.gl/reducers 3.1.0-alpha.0 → 3.1.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/combined-updaters.d.ts +79 -0
- package/dist/combined-updaters.js +358 -0
- package/dist/composer-helpers.d.ts +24 -0
- package/dist/composer-helpers.js +101 -0
- package/dist/composers.d.ts +18 -0
- package/dist/composers.js +23 -0
- package/dist/core.d.ts +64 -0
- package/dist/core.js +105 -0
- package/dist/data-utils.d.ts +12 -0
- package/dist/data-utils.js +57 -0
- package/dist/export-utils.d.ts +21 -0
- package/dist/export-utils.js +91 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.js +342 -0
- package/dist/interaction-utils.d.ts +29 -0
- package/dist/interaction-utils.js +105 -0
- package/dist/layer-utils.d.ts +96 -0
- package/dist/layer-utils.js +310 -0
- package/dist/map-state-updaters.d.ts +93 -0
- package/dist/map-state-updaters.js +432 -0
- package/dist/map-state.d.ts +75 -0
- package/dist/map-state.js +35 -0
- package/dist/map-style-updaters.d.ts +179 -0
- package/dist/map-style-updaters.js +656 -0
- package/dist/map-style.d.ts +4 -0
- package/dist/map-style.js +34 -0
- package/dist/merger-handler.d.ts +10 -0
- package/dist/merger-handler.js +105 -0
- package/dist/middleware.d.ts +8 -0
- package/dist/middleware.js +27 -0
- package/dist/provider-state-updaters.d.ts +35 -0
- package/dist/provider-state-updaters.js +348 -0
- package/dist/provider-state.d.ts +4 -0
- package/dist/provider-state.js +35 -0
- package/dist/root.d.ts +24 -0
- package/dist/root.js +206 -0
- package/dist/ui-state-updaters.d.ts +362 -0
- package/dist/ui-state-updaters.js +762 -0
- package/dist/ui-state.d.ts +3 -0
- package/dist/ui-state.js +37 -0
- package/dist/vis-state-merger.d.ts +143 -0
- package/dist/vis-state-merger.js +812 -0
- package/dist/vis-state-selectors.d.ts +10 -0
- package/dist/vis-state-selectors.js +30 -0
- package/dist/vis-state-updaters.d.ts +546 -0
- package/dist/vis-state-updaters.js +3338 -0
- package/dist/vis-state.d.ts +155 -0
- package/dist/vis-state.js +36 -0
- package/package.json +17 -17
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { MapState, UiState, AddDataToMapPayload } from '@kepler.gl/types';
|
|
2
|
+
import { MapStyle } from './map-style-updaters';
|
|
3
|
+
import { ProviderState } from './provider-state-updaters';
|
|
4
|
+
import { loadFilesSuccessUpdaterAction, MapStyleChangeUpdaterAction, LayerTypeChangeUpdaterAction, ToggleSplitMapUpdaterAction, ReplaceDataInMapPayload } from '@kepler.gl/actions';
|
|
5
|
+
import { VisState } from '@kepler.gl/schemas';
|
|
6
|
+
export declare type KeplerGlState = {
|
|
7
|
+
visState: VisState;
|
|
8
|
+
mapState: MapState;
|
|
9
|
+
mapStyle: MapStyle;
|
|
10
|
+
uiState: UiState;
|
|
11
|
+
providerState: ProviderState;
|
|
12
|
+
};
|
|
13
|
+
export declare const isValidConfig: (config: any) => unknown;
|
|
14
|
+
export declare const defaultAddDataToMapOptions: {
|
|
15
|
+
centerMap: boolean;
|
|
16
|
+
keepExistingConfig: boolean;
|
|
17
|
+
autoCreateLayers: boolean;
|
|
18
|
+
autoCreateTooltips: boolean;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Combine data and full configuration update in a single action
|
|
22
|
+
*
|
|
23
|
+
* @memberof combinedUpdaters
|
|
24
|
+
* @param {Object} state kepler.gl instance state, containing all subreducer state
|
|
25
|
+
* @param {Object} action
|
|
26
|
+
* @param {Object} action.payload `{datasets, options, config}`
|
|
27
|
+
* @param action.payload.datasets - ***required** datasets can be a dataset or an array of datasets
|
|
28
|
+
* Each dataset object needs to have `info` and `data` property.
|
|
29
|
+
* @param [action.payload.options] option object `{centerMap: true}`
|
|
30
|
+
* @param [action.payload.config] map config
|
|
31
|
+
* @param [action.payload.info] map info contains title and description
|
|
32
|
+
* @returns nextState
|
|
33
|
+
*
|
|
34
|
+
* @typedef {Object} Dataset
|
|
35
|
+
* @property info -info of a dataset
|
|
36
|
+
* @property info.id - id of this dataset. If config is defined, `id` should matches the `dataId` in config.
|
|
37
|
+
* @property info.label - A display name of this dataset
|
|
38
|
+
* @property data - ***required** The data object, in a tabular format with 2 properties `fields` and `rows`
|
|
39
|
+
* @property data.fields - ***required** Array of fields,
|
|
40
|
+
* @property data.fields.name - ***required** Name of the field,
|
|
41
|
+
* @property data.rows - ***required** Array of rows, in a tabular format with `fields` and `rows`
|
|
42
|
+
*
|
|
43
|
+
* @public
|
|
44
|
+
*/
|
|
45
|
+
export declare const addDataToMapUpdater: (state: KeplerGlState, { payload }: {
|
|
46
|
+
payload: AddDataToMapPayload;
|
|
47
|
+
}) => KeplerGlState;
|
|
48
|
+
export declare const loadFilesSuccessUpdater: (state: KeplerGlState, action: loadFilesSuccessUpdaterAction) => KeplerGlState;
|
|
49
|
+
export declare const addDataToMapComposed: (state: KeplerGlState, { payload }: {
|
|
50
|
+
payload: AddDataToMapPayload;
|
|
51
|
+
}) => KeplerGlState;
|
|
52
|
+
/**
|
|
53
|
+
* Updater that changes the map style by calling mapStyleChangeUpdater on visState.
|
|
54
|
+
* In addition to that, it does the following:
|
|
55
|
+
*
|
|
56
|
+
* 1. Update map overlay blending mode in accordance with the colorMode of the
|
|
57
|
+
* base map, but only if it's not in the `normal` mode.
|
|
58
|
+
*
|
|
59
|
+
* 2. Update all the layers which have the `darkBaseMapEnabled` config setting
|
|
60
|
+
* adjusting it in accordance with the colorMode of the base map.
|
|
61
|
+
*
|
|
62
|
+
*/
|
|
63
|
+
export declare const combinedMapStyleChangeUpdater: (state: KeplerGlState, action: MapStyleChangeUpdaterAction) => KeplerGlState;
|
|
64
|
+
/**
|
|
65
|
+
* Updater that changes the layer type by calling `layerTypeChangeUpdater` on visState.
|
|
66
|
+
* In addition to that, if the new layer type has the `darkBaseMapEnabled` config
|
|
67
|
+
* setting, we adjust it in accordance with the colorMode of the base map.s
|
|
68
|
+
*/
|
|
69
|
+
export declare const combinedLayerTypeChangeUpdater: (state: KeplerGlState, action: LayerTypeChangeUpdaterAction) => KeplerGlState;
|
|
70
|
+
/**
|
|
71
|
+
* Make mapLegend active when toggleSplitMap action is called
|
|
72
|
+
*/
|
|
73
|
+
export declare const toggleSplitMapUpdater: (state: KeplerGlState, action: ToggleSplitMapUpdaterAction) => KeplerGlState;
|
|
74
|
+
/**
|
|
75
|
+
* Updater replace a dataset in state
|
|
76
|
+
*/
|
|
77
|
+
export declare const replaceDataInMapUpdater: (state: KeplerGlState, { payload }: {
|
|
78
|
+
payload: ReplaceDataInMapPayload;
|
|
79
|
+
}) => KeplerGlState;
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.toggleSplitMapUpdater = exports.replaceDataInMapUpdater = exports.loadFilesSuccessUpdater = exports.isValidConfig = exports.defaultAddDataToMapOptions = exports.combinedMapStyleChangeUpdater = exports.combinedLayerTypeChangeUpdater = exports.addDataToMapUpdater = exports.addDataToMapComposed = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _uiStateUpdaters = require("./ui-state-updaters");
|
|
10
|
+
var _visStateUpdaters = require("./vis-state-updaters");
|
|
11
|
+
var _mapStateUpdaters = require("./map-state-updaters");
|
|
12
|
+
var _mapStyleUpdaters = require("./map-style-updaters");
|
|
13
|
+
var _processors = require("@kepler.gl/processors");
|
|
14
|
+
var _composerHelpers = require("./composer-helpers");
|
|
15
|
+
var _utils = require("@kepler.gl/utils");
|
|
16
|
+
var _dataUtils = require("./data-utils");
|
|
17
|
+
var _constants = require("@kepler.gl/constants");
|
|
18
|
+
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; }
|
|
19
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
|
|
20
|
+
// Copyright contributors to the kepler.gl project
|
|
21
|
+
// compose action to apply result multiple reducers, with the output of one
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Some actions will affect the entire kepler.lg instance state.
|
|
25
|
+
* The updaters for these actions is exported as `combinedUpdaters`. These updater take the entire instance state
|
|
26
|
+
* as the first argument. Read more about [Using updaters](../advanced-usage/using-updaters.md)
|
|
27
|
+
* @public
|
|
28
|
+
* @example
|
|
29
|
+
*
|
|
30
|
+
* import keplerGlReducer, {combinedUpdaters} from 'kepler.gl/reducers';
|
|
31
|
+
* // Root Reducer
|
|
32
|
+
* const reducers = combineReducers({
|
|
33
|
+
* keplerGl: keplerGlReducer,
|
|
34
|
+
* app: appReducer
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* const composedReducer = (state, action) => {
|
|
38
|
+
* switch (action.type) {
|
|
39
|
+
* // add data to map after receiving data from remote sources
|
|
40
|
+
* case 'LOAD_REMOTE_RESOURCE_SUCCESS':
|
|
41
|
+
* return {
|
|
42
|
+
* ...state,
|
|
43
|
+
* keplerGl: {
|
|
44
|
+
* ...state.keplerGl,
|
|
45
|
+
* // pass in kepler.gl instance state to combinedUpdaters
|
|
46
|
+
* map: combinedUpdaters.addDataToMapUpdater(
|
|
47
|
+
* state.keplerGl.map,
|
|
48
|
+
* {
|
|
49
|
+
* payload: {
|
|
50
|
+
* datasets: action.datasets,
|
|
51
|
+
* options: {readOnly: true},
|
|
52
|
+
* config: action.config
|
|
53
|
+
* }
|
|
54
|
+
* }
|
|
55
|
+
* )
|
|
56
|
+
* }
|
|
57
|
+
* };
|
|
58
|
+
* }
|
|
59
|
+
* return reducers(state, action);
|
|
60
|
+
* };
|
|
61
|
+
*
|
|
62
|
+
* export default composedReducer;
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
66
|
+
// @ts-ignore
|
|
67
|
+
var combinedUpdaters = null;
|
|
68
|
+
/* eslint-enable @typescript-eslint/no-unused-vars */
|
|
69
|
+
|
|
70
|
+
var isValidConfig = exports.isValidConfig = function isValidConfig(config) {
|
|
71
|
+
return (0, _utils.isPlainObject)(config) && (0, _utils.isPlainObject)(config.config) && config.version;
|
|
72
|
+
};
|
|
73
|
+
var defaultAddDataToMapOptions = exports.defaultAddDataToMapOptions = {
|
|
74
|
+
centerMap: true,
|
|
75
|
+
keepExistingConfig: false,
|
|
76
|
+
autoCreateLayers: true,
|
|
77
|
+
autoCreateTooltips: true
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Combine data and full configuration update in a single action
|
|
82
|
+
*
|
|
83
|
+
* @memberof combinedUpdaters
|
|
84
|
+
* @param {Object} state kepler.gl instance state, containing all subreducer state
|
|
85
|
+
* @param {Object} action
|
|
86
|
+
* @param {Object} action.payload `{datasets, options, config}`
|
|
87
|
+
* @param action.payload.datasets - ***required** datasets can be a dataset or an array of datasets
|
|
88
|
+
* Each dataset object needs to have `info` and `data` property.
|
|
89
|
+
* @param [action.payload.options] option object `{centerMap: true}`
|
|
90
|
+
* @param [action.payload.config] map config
|
|
91
|
+
* @param [action.payload.info] map info contains title and description
|
|
92
|
+
* @returns nextState
|
|
93
|
+
*
|
|
94
|
+
* @typedef {Object} Dataset
|
|
95
|
+
* @property info -info of a dataset
|
|
96
|
+
* @property info.id - id of this dataset. If config is defined, `id` should matches the `dataId` in config.
|
|
97
|
+
* @property info.label - A display name of this dataset
|
|
98
|
+
* @property data - ***required** The data object, in a tabular format with 2 properties `fields` and `rows`
|
|
99
|
+
* @property data.fields - ***required** Array of fields,
|
|
100
|
+
* @property data.fields.name - ***required** Name of the field,
|
|
101
|
+
* @property data.rows - ***required** Array of rows, in a tabular format with `fields` and `rows`
|
|
102
|
+
*
|
|
103
|
+
* @public
|
|
104
|
+
*/
|
|
105
|
+
var addDataToMapUpdater = exports.addDataToMapUpdater = function addDataToMapUpdater(state, _ref) {
|
|
106
|
+
var _datasets$, _datasets$2, _datasets$3;
|
|
107
|
+
var payload = _ref.payload;
|
|
108
|
+
var datasets = payload.datasets,
|
|
109
|
+
config = payload.config,
|
|
110
|
+
info = payload.info;
|
|
111
|
+
var options = _objectSpread(_objectSpread({}, defaultAddDataToMapOptions), payload.options);
|
|
112
|
+
|
|
113
|
+
// check if progressive loading dataset by batches, and update visState directly
|
|
114
|
+
var isProgressiveLoading = Array.isArray(datasets) && ((_datasets$ = datasets[0]) === null || _datasets$ === void 0 ? void 0 : _datasets$.info.format) === 'arrow' && ((_datasets$2 = datasets[0]) === null || _datasets$2 === void 0 ? void 0 : _datasets$2.info.id) && ((_datasets$3 = datasets[0]) === null || _datasets$3 === void 0 ? void 0 : _datasets$3.info.id) in state.visState.datasets;
|
|
115
|
+
if (isProgressiveLoading) {
|
|
116
|
+
return (0, _composerHelpers.compose_)([(0, _composerHelpers.pick_)('visState')((0, _composerHelpers.apply_)(_visStateUpdaters.updateVisDataUpdater, {
|
|
117
|
+
datasets: datasets,
|
|
118
|
+
options: options,
|
|
119
|
+
config: config
|
|
120
|
+
}))])(state);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// @ts-expect-error
|
|
124
|
+
var parsedConfig = config;
|
|
125
|
+
if (isValidConfig(config)) {
|
|
126
|
+
// if passed in saved config
|
|
127
|
+
// @ts-expect-error
|
|
128
|
+
parsedConfig = state.visState.schema.parseSavedConfig(config);
|
|
129
|
+
}
|
|
130
|
+
var oldLayers = state.visState.layers;
|
|
131
|
+
var filterNewlyAddedLayers = function filterNewlyAddedLayers(layers) {
|
|
132
|
+
return layers.filter(function (nl) {
|
|
133
|
+
return !oldLayers.find(function (ol) {
|
|
134
|
+
return ol === nl;
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
// Returns undefined if not found, to make typescript happy
|
|
140
|
+
var findMapBoundsIfCentered = function findMapBoundsIfCentered(layers) {
|
|
141
|
+
var bounds = options.centerMap && (0, _dataUtils.findMapBounds)(layers);
|
|
142
|
+
return bounds ? bounds : undefined;
|
|
143
|
+
};
|
|
144
|
+
return (0, _composerHelpers.compose_)([(0, _composerHelpers.pick_)('visState')((0, _composerHelpers.apply_)(_visStateUpdaters.updateVisDataUpdater, {
|
|
145
|
+
datasets: datasets,
|
|
146
|
+
options: options,
|
|
147
|
+
config: parsedConfig
|
|
148
|
+
})), (0, _composerHelpers.if_)(Boolean(info), (0, _composerHelpers.pick_)('visState')((0, _composerHelpers.apply_)(_visStateUpdaters.setMapInfoUpdater, {
|
|
149
|
+
info: info
|
|
150
|
+
}))),
|
|
151
|
+
// Note that fit bounds here won't be called in case datasets are created in Tasks.
|
|
152
|
+
// A separate Task to update bounds is created once the datasets are ready.
|
|
153
|
+
(0, _composerHelpers.with_)(function (_ref2) {
|
|
154
|
+
var visState = _ref2.visState;
|
|
155
|
+
return (0, _composerHelpers.pick_)('mapState')((0, _composerHelpers.apply_)(_mapStateUpdaters.receiveMapConfigUpdater, (0, _composerHelpers.payload_)({
|
|
156
|
+
config: parsedConfig,
|
|
157
|
+
options: options,
|
|
158
|
+
bounds: findMapBoundsIfCentered(filterNewlyAddedLayers(visState.layers))
|
|
159
|
+
})));
|
|
160
|
+
}), (0, _composerHelpers.pick_)('mapStyle')((0, _composerHelpers.apply_)(_mapStyleUpdaters.receiveMapConfigUpdater, (0, _composerHelpers.payload_)({
|
|
161
|
+
config: parsedConfig,
|
|
162
|
+
options: options
|
|
163
|
+
}))), (0, _composerHelpers.pick_)('uiState')((0, _composerHelpers.apply_)(_uiStateUpdaters.loadFilesSuccessUpdater, (0, _composerHelpers.payload_)(null))), (0, _composerHelpers.pick_)('uiState')((0, _composerHelpers.apply_)(_uiStateUpdaters.toggleModalUpdater, (0, _composerHelpers.payload_)(null))), (0, _composerHelpers.pick_)('uiState')((0, _composerHelpers.merge_)(Object.prototype.hasOwnProperty.call(options, 'readOnly') ? {
|
|
164
|
+
readOnly: options.readOnly
|
|
165
|
+
} : {}))])(state);
|
|
166
|
+
};
|
|
167
|
+
var loadFilesSuccessUpdater = exports.loadFilesSuccessUpdater = function loadFilesSuccessUpdater(state, action) {
|
|
168
|
+
// still more to load
|
|
169
|
+
var payloads = (0, _processors.filesToDataPayload)(action.result);
|
|
170
|
+
var nextState = (0, _composerHelpers.compose_)([(0, _composerHelpers.pick_)('visState')((0, _composerHelpers.merge_)({
|
|
171
|
+
fileLoading: false,
|
|
172
|
+
fileLoadingProgress: {}
|
|
173
|
+
}))])(state);
|
|
174
|
+
// make multiple add data to map calls
|
|
175
|
+
var stateWithData = (0, _composerHelpers.compose_)(payloads.map(function (p) {
|
|
176
|
+
return (0, _composerHelpers.apply_)(addDataToMapUpdater, (0, _composerHelpers.payload_)(p));
|
|
177
|
+
}))(nextState);
|
|
178
|
+
return stateWithData;
|
|
179
|
+
};
|
|
180
|
+
var addDataToMapComposed = exports.addDataToMapComposed = addDataToMapUpdater;
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Helper which updates map overlay blending mode in visState,
|
|
184
|
+
* but only if it's not currently in the `normal` mode.
|
|
185
|
+
*/
|
|
186
|
+
var updateOverlayBlending = function updateOverlayBlending(overlayBlending) {
|
|
187
|
+
return function (visState) {
|
|
188
|
+
if (visState.overlayBlending !== _constants.OVERLAY_BLENDINGS.normal.value) {
|
|
189
|
+
return _objectSpread(_objectSpread({}, visState), {}, {
|
|
190
|
+
overlayBlending: overlayBlending
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
return visState;
|
|
194
|
+
};
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Helper which updates `darkBaseMapEnabled` in all the layers in visState which
|
|
199
|
+
* have this config setting (or in one specific layer if the `layerId` param is provided).
|
|
200
|
+
*/
|
|
201
|
+
var updateDarkBaseMapLayers = function updateDarkBaseMapLayers(darkBaseMapEnabled) {
|
|
202
|
+
var layerId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
203
|
+
return function (visState) {
|
|
204
|
+
return _objectSpread(_objectSpread({}, visState), {}, {
|
|
205
|
+
layers: visState.layers.map(function (layer) {
|
|
206
|
+
if (!layerId || layer.id === layerId) {
|
|
207
|
+
if (Object.prototype.hasOwnProperty.call(layer.visConfigSettings, 'darkBaseMapEnabled')) {
|
|
208
|
+
var visConfig = layer.config.visConfig;
|
|
209
|
+
return layer.updateLayerConfig({
|
|
210
|
+
visConfig: _objectSpread(_objectSpread({}, visConfig), {}, {
|
|
211
|
+
darkBaseMapEnabled: darkBaseMapEnabled
|
|
212
|
+
})
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return layer;
|
|
217
|
+
})
|
|
218
|
+
});
|
|
219
|
+
};
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Updater that changes the map style by calling mapStyleChangeUpdater on visState.
|
|
224
|
+
* In addition to that, it does the following:
|
|
225
|
+
*
|
|
226
|
+
* 1. Update map overlay blending mode in accordance with the colorMode of the
|
|
227
|
+
* base map, but only if it's not in the `normal` mode.
|
|
228
|
+
*
|
|
229
|
+
* 2. Update all the layers which have the `darkBaseMapEnabled` config setting
|
|
230
|
+
* adjusting it in accordance with the colorMode of the base map.
|
|
231
|
+
*
|
|
232
|
+
*/
|
|
233
|
+
var combinedMapStyleChangeUpdater = exports.combinedMapStyleChangeUpdater = function combinedMapStyleChangeUpdater(state, action) {
|
|
234
|
+
var payload = action.payload;
|
|
235
|
+
var mapStyle = state.mapStyle;
|
|
236
|
+
var getColorMode = function getColorMode(key) {
|
|
237
|
+
var _mapStyle$mapStyles$k;
|
|
238
|
+
return (_mapStyle$mapStyles$k = mapStyle.mapStyles[key]) === null || _mapStyle$mapStyles$k === void 0 ? void 0 : _mapStyle$mapStyles$k.colorMode;
|
|
239
|
+
};
|
|
240
|
+
var prevColorMode = getColorMode(mapStyle.styleType);
|
|
241
|
+
var nextColorMode = getColorMode(payload.styleType);
|
|
242
|
+
var visState = state.visState;
|
|
243
|
+
if (nextColorMode !== prevColorMode) {
|
|
244
|
+
switch (nextColorMode) {
|
|
245
|
+
case _constants.BASE_MAP_COLOR_MODES.DARK:
|
|
246
|
+
visState = (0, _composerHelpers.compose_)([updateOverlayBlending(_constants.OVERLAY_BLENDINGS.screen.value), updateDarkBaseMapLayers(true)])(visState);
|
|
247
|
+
break;
|
|
248
|
+
case _constants.BASE_MAP_COLOR_MODES.LIGHT:
|
|
249
|
+
visState = (0, _composerHelpers.compose_)([updateOverlayBlending(_constants.OVERLAY_BLENDINGS.darken.value), updateDarkBaseMapLayers(false)])(visState);
|
|
250
|
+
break;
|
|
251
|
+
default:
|
|
252
|
+
// do nothing
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
256
|
+
visState: visState,
|
|
257
|
+
mapStyle: (0, _mapStyleUpdaters.mapStyleChangeUpdater)(mapStyle, {
|
|
258
|
+
payload: _objectSpread({}, payload)
|
|
259
|
+
})
|
|
260
|
+
});
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Updater that changes the layer type by calling `layerTypeChangeUpdater` on visState.
|
|
265
|
+
* In addition to that, if the new layer type has the `darkBaseMapEnabled` config
|
|
266
|
+
* setting, we adjust it in accordance with the colorMode of the base map.s
|
|
267
|
+
*/
|
|
268
|
+
var combinedLayerTypeChangeUpdater = exports.combinedLayerTypeChangeUpdater = function combinedLayerTypeChangeUpdater(state, action) {
|
|
269
|
+
var visState = state.visState;
|
|
270
|
+
var oldLayerIndex = visState.layers.findIndex(function (layer) {
|
|
271
|
+
return layer === action.oldLayer;
|
|
272
|
+
});
|
|
273
|
+
visState = (0, _visStateUpdaters.layerTypeChangeUpdater)(visState, action);
|
|
274
|
+
var newLayer = visState.layers[oldLayerIndex];
|
|
275
|
+
if (Object.prototype.hasOwnProperty.call(newLayer === null || newLayer === void 0 ? void 0 : newLayer.visConfigSettings, 'darkBaseMapEnabled')) {
|
|
276
|
+
var mapStyle = state.mapStyle;
|
|
277
|
+
var colorMode = mapStyle.mapStyles[mapStyle.styleType].colorMode;
|
|
278
|
+
var darkBaseMapEnabled = newLayer.config.visConfig.darkBaseMapEnabled;
|
|
279
|
+
switch (colorMode) {
|
|
280
|
+
case _constants.BASE_MAP_COLOR_MODES.DARK:
|
|
281
|
+
if (!darkBaseMapEnabled) {
|
|
282
|
+
visState = updateDarkBaseMapLayers(true, newLayer.id)(visState);
|
|
283
|
+
}
|
|
284
|
+
break;
|
|
285
|
+
case _constants.BASE_MAP_COLOR_MODES.LIGHT:
|
|
286
|
+
if (darkBaseMapEnabled) {
|
|
287
|
+
visState = updateDarkBaseMapLayers(false, newLayer.id)(visState);
|
|
288
|
+
}
|
|
289
|
+
break;
|
|
290
|
+
default:
|
|
291
|
+
// do nothing
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
295
|
+
visState: visState
|
|
296
|
+
});
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Make mapLegend active when toggleSplitMap action is called
|
|
301
|
+
*/
|
|
302
|
+
var toggleSplitMapUpdater = exports.toggleSplitMapUpdater = function toggleSplitMapUpdater(state, action) {
|
|
303
|
+
var _newState$uiState$map;
|
|
304
|
+
var newState = _objectSpread(_objectSpread({}, state), {}, {
|
|
305
|
+
visState: (0, _visStateUpdaters.toggleSplitMapUpdater)(state.visState, action),
|
|
306
|
+
uiState: (0, _uiStateUpdaters.toggleSplitMapUpdater)(state.uiState),
|
|
307
|
+
mapState: (0, _mapStateUpdaters.toggleSplitMapUpdater)(state.mapState)
|
|
308
|
+
});
|
|
309
|
+
var isSplit = newState.visState.splitMaps.length !== 0;
|
|
310
|
+
var isLegendActive = (_newState$uiState$map = newState.uiState.mapControls) === null || _newState$uiState$map === void 0 || (_newState$uiState$map = _newState$uiState$map.mapLegend) === null || _newState$uiState$map === void 0 ? void 0 : _newState$uiState$map.active;
|
|
311
|
+
if (isSplit && !isLegendActive) {
|
|
312
|
+
newState.uiState = (0, _uiStateUpdaters.toggleMapControlUpdater)(newState.uiState, {
|
|
313
|
+
payload: {
|
|
314
|
+
panelId: 'mapLegend',
|
|
315
|
+
index: action.payload
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
return newState;
|
|
320
|
+
};
|
|
321
|
+
var defaultReplaceDataToMapOptions = {
|
|
322
|
+
keepExistingConfig: true,
|
|
323
|
+
centerMap: true,
|
|
324
|
+
autoCreateLayers: false
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Updater replace a dataset in state
|
|
329
|
+
*/
|
|
330
|
+
var replaceDataInMapUpdater = exports.replaceDataInMapUpdater = function replaceDataInMapUpdater(state, _ref3) {
|
|
331
|
+
var payload = _ref3.payload;
|
|
332
|
+
var datasetToReplaceId = payload.datasetToReplaceId,
|
|
333
|
+
datasetToUse = payload.datasetToUse,
|
|
334
|
+
_payload$options = payload.options,
|
|
335
|
+
options = _payload$options === void 0 ? {} : _payload$options;
|
|
336
|
+
var addDataToMapOptions = _objectSpread(_objectSpread({}, defaultReplaceDataToMapOptions), options);
|
|
337
|
+
|
|
338
|
+
// check if dataset is there
|
|
339
|
+
if (!state.visState.datasets[datasetToReplaceId]) {
|
|
340
|
+
return state;
|
|
341
|
+
}
|
|
342
|
+
// datasetToUse is ProtoDataset
|
|
343
|
+
var dataIdToUse = datasetToUse.info.id;
|
|
344
|
+
if (!dataIdToUse) {
|
|
345
|
+
return state;
|
|
346
|
+
}
|
|
347
|
+
// remove dataset and put dependencies in toBeMerged
|
|
348
|
+
var preparedState = _objectSpread(_objectSpread({}, state), {}, {
|
|
349
|
+
visState: (0, _visStateUpdaters.prepareStateForDatasetReplace)(state.visState, datasetToReplaceId, dataIdToUse)
|
|
350
|
+
});
|
|
351
|
+
var nextState = addDataToMapUpdater(preparedState, (0, _composerHelpers.payload_)({
|
|
352
|
+
datasets: datasetToUse,
|
|
353
|
+
// should zoom to new dataset
|
|
354
|
+
options: addDataToMapOptions
|
|
355
|
+
}));
|
|
356
|
+
return nextState;
|
|
357
|
+
};
|
|
358
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdWlTdGF0ZVVwZGF0ZXJzIiwicmVxdWlyZSIsIl92aXNTdGF0ZVVwZGF0ZXJzIiwiX21hcFN0YXRlVXBkYXRlcnMiLCJfbWFwU3R5bGVVcGRhdGVycyIsIl9wcm9jZXNzb3JzIiwiX2NvbXBvc2VySGVscGVycyIsIl91dGlscyIsIl9kYXRhVXRpbHMiLCJfY29uc3RhbnRzIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJjb21iaW5lZFVwZGF0ZXJzIiwiaXNWYWxpZENvbmZpZyIsImV4cG9ydHMiLCJjb25maWciLCJpc1BsYWluT2JqZWN0IiwidmVyc2lvbiIsImRlZmF1bHRBZGREYXRhVG9NYXBPcHRpb25zIiwiY2VudGVyTWFwIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwiYXV0b0NyZWF0ZUxheWVycyIsImF1dG9DcmVhdGVUb29sdGlwcyIsImFkZERhdGFUb01hcFVwZGF0ZXIiLCJzdGF0ZSIsIl9yZWYiLCJfZGF0YXNldHMkIiwiX2RhdGFzZXRzJDIiLCJfZGF0YXNldHMkMyIsInBheWxvYWQiLCJkYXRhc2V0cyIsImluZm8iLCJvcHRpb25zIiwiaXNQcm9ncmVzc2l2ZUxvYWRpbmciLCJBcnJheSIsImlzQXJyYXkiLCJmb3JtYXQiLCJpZCIsInZpc1N0YXRlIiwiY29tcG9zZV8iLCJwaWNrXyIsImFwcGx5XyIsInZpc1N0YXRlVXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJwYXJzZWRDb25maWciLCJzY2hlbWEiLCJwYXJzZVNhdmVkQ29uZmlnIiwib2xkTGF5ZXJzIiwibGF5ZXJzIiwiZmlsdGVyTmV3bHlBZGRlZExheWVycyIsIm5sIiwiZmluZCIsIm9sIiwiZmluZE1hcEJvdW5kc0lmQ2VudGVyZWQiLCJib3VuZHMiLCJmaW5kTWFwQm91bmRzIiwidW5kZWZpbmVkIiwiaWZfIiwiQm9vbGVhbiIsInNldE1hcEluZm9VcGRhdGVyIiwid2l0aF8iLCJfcmVmMiIsInN0YXRlTWFwQ29uZmlnVXBkYXRlciIsInBheWxvYWRfIiwic3R5bGVNYXBDb25maWdVcGRhdGVyIiwidWlTdGF0ZUxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyIiwidG9nZ2xlTW9kYWxVcGRhdGVyIiwibWVyZ2VfIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicmVhZE9ubHkiLCJsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsImFjdGlvbiIsInBheWxvYWRzIiwiZmlsZXNUb0RhdGFQYXlsb2FkIiwicmVzdWx0IiwibmV4dFN0YXRlIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwic3RhdGVXaXRoRGF0YSIsIm1hcCIsInAiLCJhZGREYXRhVG9NYXBDb21wb3NlZCIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwibm9ybWFsIiwidmFsdWUiLCJ1cGRhdGVEYXJrQmFzZU1hcExheWVycyIsImRhcmtCYXNlTWFwRW5hYmxlZCIsImxheWVySWQiLCJsYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwidmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJDb25maWciLCJjb21iaW5lZE1hcFN0eWxlQ2hhbmdlVXBkYXRlciIsIm1hcFN0eWxlIiwiZ2V0Q29sb3JNb2RlIiwia2V5IiwiX21hcFN0eWxlJG1hcFN0eWxlcyRrIiwibWFwU3R5bGVzIiwiY29sb3JNb2RlIiwicHJldkNvbG9yTW9kZSIsInN0eWxlVHlwZSIsIm5leHRDb2xvck1vZGUiLCJCQVNFX01BUF9DT0xPUl9NT0RFUyIsIkRBUksiLCJzY3JlZW4iLCJMSUdIVCIsImRhcmtlbiIsIm1hcFN0eWxlQ2hhbmdlVXBkYXRlciIsImNvbWJpbmVkTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJvbGRMYXllciIsImxheWVyVHlwZUNoYW5nZVVwZGF0ZXIiLCJuZXdMYXllciIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsIl9uZXdTdGF0ZSR1aVN0YXRlJG1hcCIsIm5ld1N0YXRlIiwidmlzU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJ1aVN0YXRlIiwidWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsIm1hcFN0YXRlIiwibWFwU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJpc1NwbGl0Iiwic3BsaXRNYXBzIiwiaXNMZWdlbmRBY3RpdmUiLCJtYXBDb250cm9scyIsIm1hcExlZ2VuZCIsImFjdGl2ZSIsInRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyIiwicGFuZWxJZCIsImluZGV4IiwiZGVmYXVsdFJlcGxhY2VEYXRhVG9NYXBPcHRpb25zIiwicmVwbGFjZURhdGFJbk1hcFVwZGF0ZXIiLCJfcmVmMyIsImRhdGFzZXRUb1JlcGxhY2VJZCIsImRhdGFzZXRUb1VzZSIsIl9wYXlsb2FkJG9wdGlvbnMiLCJhZGREYXRhVG9NYXBPcHRpb25zIiwiZGF0YUlkVG9Vc2UiLCJwcmVwYXJlZFN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiXSwic291cmNlcyI6WyIuLi9zcmMvY29tYmluZWQtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtcbiAgdG9nZ2xlTW9kYWxVcGRhdGVyLFxuICBsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciBhcyB1aVN0YXRlTG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIsXG4gIHRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyLFxuICB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgYXMgdWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlclxufSBmcm9tICcuL3VpLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7XG4gIHVwZGF0ZVZpc0RhdGFVcGRhdGVyIGFzIHZpc1N0YXRlVXBkYXRlVmlzRGF0YVVwZGF0ZXIsXG4gIHNldE1hcEluZm9VcGRhdGVyLFxuICBsYXllclR5cGVDaGFuZ2VVcGRhdGVyLFxuICB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgYXMgdmlzU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIsXG4gIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlXG59IGZyb20gJy4vdmlzLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7XG4gIHJlY2VpdmVNYXBDb25maWdVcGRhdGVyIGFzIHN0YXRlTWFwQ29uZmlnVXBkYXRlcixcbiAgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyIGFzIG1hcFN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyXG59IGZyb20gJy4vbWFwLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7XG4gIG1hcFN0eWxlQ2hhbmdlVXBkYXRlcixcbiAgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgYXMgc3R5bGVNYXBDb25maWdVcGRhdGVyXG59IGZyb20gJy4vbWFwLXN0eWxlLXVwZGF0ZXJzJztcbmltcG9ydCB7ZmlsZXNUb0RhdGFQYXlsb2FkfSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuaW1wb3J0IHtwYXlsb2FkXywgYXBwbHlfLCB3aXRoXywgaWZfLCBjb21wb3NlXywgbWVyZ2VfLCBwaWNrX30gZnJvbSAnLi9jb21wb3Nlci1oZWxwZXJzJztcbmltcG9ydCB7TWFwU3RhdGUsIFVpU3RhdGUsIEFkZERhdGFUb01hcFBheWxvYWQsIFBhcnNlZENvbmZpZ30gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge01hcFN0eWxlfSBmcm9tICcuL21hcC1zdHlsZS11cGRhdGVycyc7XG5pbXBvcnQge1Byb3ZpZGVyU3RhdGV9IGZyb20gJy4vcHJvdmlkZXItc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtcbiAgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb24sXG4gIE1hcFN0eWxlQ2hhbmdlVXBkYXRlckFjdGlvbixcbiAgTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvbixcbiAgVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uLFxuICBSZXBsYWNlRGF0YUluTWFwUGF5bG9hZFxufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7TGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7aXNQbGFpbk9iamVjdH0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2ZpbmRNYXBCb3VuZHN9IGZyb20gJy4vZGF0YS11dGlscyc7XG5pbXBvcnQge0JBU0VfTUFQX0NPTE9SX01PREVTLCBPVkVSTEFZX0JMRU5ESU5HU30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG5leHBvcnQgdHlwZSBLZXBsZXJHbFN0YXRlID0ge1xuICB2aXNTdGF0ZTogVmlzU3RhdGU7XG4gIG1hcFN0YXRlOiBNYXBTdGF0ZTtcbiAgbWFwU3R5bGU6IE1hcFN0eWxlO1xuICB1aVN0YXRlOiBVaVN0YXRlO1xuICBwcm92aWRlclN0YXRlOiBQcm92aWRlclN0YXRlO1xufTtcblxuLy8gY29tcG9zZSBhY3Rpb24gdG8gYXBwbHkgcmVzdWx0IG11bHRpcGxlIHJlZHVjZXJzLCB3aXRoIHRoZSBvdXRwdXQgb2Ygb25lXG5cbi8qKlxuICogU29tZSBhY3Rpb25zIHdpbGwgYWZmZWN0IHRoZSBlbnRpcmUga2VwbGVyLmxnIGluc3RhbmNlIHN0YXRlLlxuICogVGhlIHVwZGF0ZXJzIGZvciB0aGVzZSBhY3Rpb25zIGlzIGV4cG9ydGVkIGFzIGBjb21iaW5lZFVwZGF0ZXJzYC4gVGhlc2UgdXBkYXRlciB0YWtlIHRoZSBlbnRpcmUgaW5zdGFuY2Ugc3RhdGVcbiAqIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHtjb21iaW5lZFVwZGF0ZXJzfSBmcm9tICdrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgLy8gYWRkIGRhdGEgdG8gbWFwIGFmdGVyIHJlY2VpdmluZyBkYXRhIGZyb20gcmVtb3RlIHNvdXJjZXNcbiAqICAgIGNhc2UgJ0xPQURfUkVNT1RFX1JFU09VUkNFX1NVQ0NFU1MnOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIC8vIHBhc3MgaW4ga2VwbGVyLmdsIGluc3RhbmNlIHN0YXRlIHRvIGNvbWJpbmVkVXBkYXRlcnNcbiAqICAgICAgICAgIG1hcDogIGNvbWJpbmVkVXBkYXRlcnMuYWRkRGF0YVRvTWFwVXBkYXRlcihcbiAqICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5tYXAsXG4gKiAgICAgICAgICAge1xuICogICAgICAgICAgICAgcGF5bG9hZDoge1xuICogICAgICAgICAgICAgICBkYXRhc2V0czogYWN0aW9uLmRhdGFzZXRzLFxuICogICAgICAgICAgICAgICBvcHRpb25zOiB7cmVhZE9ubHk6IHRydWV9LFxuICogICAgICAgICAgICAgICBjb25maWc6IGFjdGlvbi5jb25maWdcbiAqICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgIH1cbiAqICAgICAgICAgIClcbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgY29tYmluZWRVcGRhdGVycyA9IG51bGw7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZENvbmZpZyA9IGNvbmZpZyA9PlxuICBpc1BsYWluT2JqZWN0KGNvbmZpZykgJiYgaXNQbGFpbk9iamVjdChjb25maWcuY29uZmlnKSAmJiBjb25maWcudmVyc2lvbjtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRBZGREYXRhVG9NYXBPcHRpb25zID0ge1xuICBjZW50ZXJNYXA6IHRydWUsXG4gIGtlZXBFeGlzdGluZ0NvbmZpZzogZmFsc2UsXG4gIGF1dG9DcmVhdGVMYXllcnM6IHRydWUsXG4gIGF1dG9DcmVhdGVUb29sdGlwczogdHJ1ZVxufTtcblxuLyoqXG4gKiBDb21iaW5lIGRhdGEgYW5kIGZ1bGwgY29uZmlndXJhdGlvbiB1cGRhdGUgaW4gYSBzaW5nbGUgYWN0aW9uXG4gKlxuICogQG1lbWJlcm9mIGNvbWJpbmVkVXBkYXRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSBrZXBsZXIuZ2wgaW5zdGFuY2Ugc3RhdGUsIGNvbnRhaW5pbmcgYWxsIHN1YnJlZHVjZXIgc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24ucGF5bG9hZCBge2RhdGFzZXRzLCBvcHRpb25zLCBjb25maWd9YFxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkLmRhdGFzZXRzIC0gKioqcmVxdWlyZWQqKiBkYXRhc2V0cyBjYW4gYmUgYSBkYXRhc2V0IG9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKiBFYWNoIGRhdGFzZXQgb2JqZWN0IG5lZWRzIHRvIGhhdmUgYGluZm9gIGFuZCBgZGF0YWAgcHJvcGVydHkuXG4gKiBAcGFyYW0gW2FjdGlvbi5wYXlsb2FkLm9wdGlvbnNdIG9wdGlvbiBvYmplY3QgYHtjZW50ZXJNYXA6IHRydWV9YFxuICogQHBhcmFtIFthY3Rpb24ucGF5bG9hZC5jb25maWddIG1hcCBjb25maWdcbiAqIEBwYXJhbSBbYWN0aW9uLnBheWxvYWQuaW5mb10gbWFwIGluZm8gY29udGFpbnMgdGl0bGUgYW5kIGRlc2NyaXB0aW9uXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEYXRhc2V0XG4gKiBAcHJvcGVydHkgaW5mbyAtaW5mbyBvZiBhIGRhdGFzZXRcbiAqIEBwcm9wZXJ0eSBpbmZvLmlkIC0gaWQgb2YgdGhpcyBkYXRhc2V0LiBJZiBjb25maWcgaXMgZGVmaW5lZCwgYGlkYCBzaG91bGQgbWF0Y2hlcyB0aGUgYGRhdGFJZGAgaW4gY29uZmlnLlxuICogQHByb3BlcnR5IGluZm8ubGFiZWwgLSBBIGRpc3BsYXkgbmFtZSBvZiB0aGlzIGRhdGFzZXRcbiAqIEBwcm9wZXJ0eSBkYXRhIC0gKioqcmVxdWlyZWQqKiBUaGUgZGF0YSBvYmplY3QsIGluIGEgdGFidWxhciBmb3JtYXQgd2l0aCAyIHByb3BlcnRpZXMgYGZpZWxkc2AgYW5kIGByb3dzYFxuICogQHByb3BlcnR5IGRhdGEuZmllbGRzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiBmaWVsZHMsXG4gKiBAcHJvcGVydHkgZGF0YS5maWVsZHMubmFtZSAtICoqKnJlcXVpcmVkKiogTmFtZSBvZiB0aGUgZmllbGQsXG4gKiBAcHJvcGVydHkgZGF0YS5yb3dzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiByb3dzLCBpbiBhIHRhYnVsYXIgZm9ybWF0IHdpdGggYGZpZWxkc2AgYW5kIGByb3dzYFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZERhdGFUb01hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICB7cGF5bG9hZH06IHtwYXlsb2FkOiBBZGREYXRhVG9NYXBQYXlsb2FkfVxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IHtkYXRhc2V0cywgY29uZmlnLCBpbmZvfSA9IHBheWxvYWQ7XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAuLi5kZWZhdWx0QWRkRGF0YVRvTWFwT3B0aW9ucyxcbiAgICAuLi5wYXlsb2FkLm9wdGlvbnNcbiAgfTtcblxuICAvLyBjaGVjayBpZiBwcm9ncmVzc2l2ZSBsb2FkaW5nIGRhdGFzZXQgYnkgYmF0Y2hlcywgYW5kIHVwZGF0ZSB2aXNTdGF0ZSBkaXJlY3RseVxuICBjb25zdCBpc1Byb2dyZXNzaXZlTG9hZGluZyA9XG4gICAgQXJyYXkuaXNBcnJheShkYXRhc2V0cykgJiZcbiAgICBkYXRhc2V0c1swXT8uaW5mby5mb3JtYXQgPT09ICdhcnJvdycgJiZcbiAgICBkYXRhc2V0c1swXT8uaW5mby5pZCAmJlxuICAgIGRhdGFzZXRzWzBdPy5pbmZvLmlkIGluIHN0YXRlLnZpc1N0YXRlLmRhdGFzZXRzO1xuICBpZiAoaXNQcm9ncmVzc2l2ZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gY29tcG9zZV88S2VwbGVyR2xTdGF0ZT4oW1xuICAgICAgcGlja18oJ3Zpc1N0YXRlJykoXG4gICAgICAgIGFwcGx5XzxWaXNTdGF0ZSwgYW55Pih2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyLCB7XG4gICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICBjb25maWdcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICBdKShzdGF0ZSk7XG4gIH1cblxuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIGxldCBwYXJzZWRDb25maWc6IFBhcnNlZENvbmZpZyA9IGNvbmZpZztcblxuICBpZiAoaXNWYWxpZENvbmZpZyhjb25maWcpKSB7XG4gICAgLy8gaWYgcGFzc2VkIGluIHNhdmVkIGNvbmZpZ1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBwYXJzZWRDb25maWcgPSBzdGF0ZS52aXNTdGF0ZS5zY2hlbWEucGFyc2VTYXZlZENvbmZpZyhjb25maWcpO1xuICB9XG4gIGNvbnN0IG9sZExheWVycyA9IHN0YXRlLnZpc1N0YXRlLmxheWVycztcbiAgY29uc3QgZmlsdGVyTmV3bHlBZGRlZExheWVycyA9IChsYXllcnM6IExheWVyW10pID0+XG4gICAgbGF5ZXJzLmZpbHRlcihubCA9PiAhb2xkTGF5ZXJzLmZpbmQob2wgPT4gb2wgPT09IG5sKSk7XG5cbiAgLy8gUmV0dXJucyB1bmRlZmluZWQgaWYgbm90IGZvdW5kLCB0byBtYWtlIHR5cGVzY3JpcHQgaGFwcHlcbiAgY29uc3QgZmluZE1hcEJvdW5kc0lmQ2VudGVyZWQgPSAobGF5ZXJzOiBMYXllcltdKSA9PiB7XG4gICAgY29uc3QgYm91bmRzID0gb3B0aW9ucy5jZW50ZXJNYXAgJiYgZmluZE1hcEJvdW5kcyhsYXllcnMpO1xuICAgIHJldHVybiBib3VuZHMgPyBib3VuZHMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgcmV0dXJuIGNvbXBvc2VfPEtlcGxlckdsU3RhdGU+KFtcbiAgICBwaWNrXygndmlzU3RhdGUnKShcbiAgICAgIGFwcGx5XzxWaXNTdGF0ZSwgYW55Pih2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyLCB7XG4gICAgICAgIGRhdGFzZXRzLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBjb25maWc6IHBhcnNlZENvbmZpZ1xuICAgICAgfSlcbiAgICApLFxuXG4gICAgaWZfKEJvb2xlYW4oaW5mbyksIHBpY2tfKCd2aXNTdGF0ZScpKGFwcGx5XzxWaXNTdGF0ZSwgYW55PihzZXRNYXBJbmZvVXBkYXRlciwge2luZm99KSkpLFxuICAgIC8vIE5vdGUgdGhhdCBmaXQgYm91bmRzIGhlcmUgd29uJ3QgYmUgY2FsbGVkIGluIGNhc2UgZGF0YXNldHMgYXJlIGNyZWF0ZWQgaW4gVGFza3MuXG4gICAgLy8gQSBzZXBhcmF0ZSBUYXNrIHRvIHVwZGF0ZSBib3VuZHMgaXMgY3JlYXRlZCBvbmNlIHRoZSBkYXRhc2V0cyBhcmUgcmVhZHkuXG4gICAgd2l0aF8oKHt2aXNTdGF0ZX0pID0+XG4gICAgICBwaWNrXygnbWFwU3RhdGUnKShcbiAgICAgICAgYXBwbHlfKFxuICAgICAgICAgIHN0YXRlTWFwQ29uZmlnVXBkYXRlcixcbiAgICAgICAgICBwYXlsb2FkXyh7XG4gICAgICAgICAgICBjb25maWc6IHBhcnNlZENvbmZpZyxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBib3VuZHM6IGZpbmRNYXBCb3VuZHNJZkNlbnRlcmVkKGZpbHRlck5ld2x5QWRkZWRMYXllcnModmlzU3RhdGUubGF5ZXJzKSlcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICBwaWNrXygnbWFwU3R5bGUnKShhcHBseV8oc3R5bGVNYXBDb25maWdVcGRhdGVyLCBwYXlsb2FkXyh7Y29uZmlnOiBwYXJzZWRDb25maWcsIG9wdGlvbnN9KSkpLFxuICAgIHBpY2tfKCd1aVN0YXRlJykoYXBwbHlfKHVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlciwgcGF5bG9hZF8obnVsbCkpKSxcbiAgICBwaWNrXygndWlTdGF0ZScpKGFwcGx5Xyh0b2dnbGVNb2RhbFVwZGF0ZXIsIHBheWxvYWRfKG51bGwpKSksXG4gICAgcGlja18oJ3VpU3RhdGUnKShcbiAgICAgIG1lcmdlXyhcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICdyZWFkT25seScpXG4gICAgICAgICAgPyB7cmVhZE9ubHk6IG9wdGlvbnMucmVhZE9ubHl9XG4gICAgICAgICAgOiB7fVxuICAgICAgKVxuICAgIClcbiAgXSkoc3RhdGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBsb2FkRmlsZXNTdWNjZXNzVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIC8vIHN0aWxsIG1vcmUgdG8gbG9hZFxuICBjb25zdCBwYXlsb2FkcyA9IGZpbGVzVG9EYXRhUGF5bG9hZChhY3Rpb24ucmVzdWx0KTtcbiAgY29uc3QgbmV4dFN0YXRlID0gY29tcG9zZV8oW1xuICAgIHBpY2tfKCd2aXNTdGF0ZScpKFxuICAgICAgbWVyZ2VfKHtcbiAgICAgICAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fVxuICAgICAgfSlcbiAgICApXG4gIF0pKHN0YXRlKTtcbiAgLy8gbWFrZSBtdWx0aXBsZSBhZGQgZGF0YSB0byBtYXAgY2FsbHNcbiAgY29uc3Qgc3RhdGVXaXRoRGF0YSA9IGNvbXBvc2VfKHBheWxvYWRzLm1hcChwID0+IGFwcGx5XyhhZGREYXRhVG9NYXBVcGRhdGVyLCBwYXlsb2FkXyhwKSkpKShcbiAgICBuZXh0U3RhdGVcbiAgKTtcbiAgcmV0dXJuIHN0YXRlV2l0aERhdGEgYXMgS2VwbGVyR2xTdGF0ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGREYXRhVG9NYXBDb21wb3NlZCA9IGFkZERhdGFUb01hcFVwZGF0ZXI7XG5cbi8qKlxuICogSGVscGVyIHdoaWNoIHVwZGF0ZXMgbWFwIG92ZXJsYXkgYmxlbmRpbmcgbW9kZSBpbiB2aXNTdGF0ZSxcbiAqIGJ1dCBvbmx5IGlmIGl0J3Mgbm90IGN1cnJlbnRseSBpbiB0aGUgYG5vcm1hbGAgbW9kZS5cbiAqL1xuY29uc3QgdXBkYXRlT3ZlcmxheUJsZW5kaW5nID0gb3ZlcmxheUJsZW5kaW5nID0+IHZpc1N0YXRlID0+IHtcbiAgaWYgKHZpc1N0YXRlLm92ZXJsYXlCbGVuZGluZyAhPT0gT1ZFUkxBWV9CTEVORElOR1Mubm9ybWFsLnZhbHVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZpc1N0YXRlLFxuICAgICAgb3ZlcmxheUJsZW5kaW5nXG4gICAgfTtcbiAgfVxuICByZXR1cm4gdmlzU3RhdGU7XG59O1xuXG4vKipcbiAqIEhlbHBlciB3aGljaCB1cGRhdGVzIGBkYXJrQmFzZU1hcEVuYWJsZWRgIGluIGFsbCB0aGUgbGF5ZXJzIGluIHZpc1N0YXRlIHdoaWNoXG4gKiBoYXZlIHRoaXMgY29uZmlnIHNldHRpbmcgKG9yIGluIG9uZSBzcGVjaWZpYyBsYXllciBpZiB0aGUgYGxheWVySWRgIHBhcmFtIGlzIHByb3ZpZGVkKS5cbiAqL1xuY29uc3QgdXBkYXRlRGFya0Jhc2VNYXBMYXllcnMgPVxuICAoZGFya0Jhc2VNYXBFbmFibGVkOiBib29sZWFuLCBsYXllcklkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkgPT5cbiAgdmlzU3RhdGUgPT4gKHtcbiAgICAuLi52aXNTdGF0ZSxcbiAgICBsYXllcnM6IHZpc1N0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgICAgaWYgKCFsYXllcklkIHx8IGxheWVyLmlkID09PSBsYXllcklkKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MsICdkYXJrQmFzZU1hcEVuYWJsZWQnKSkge1xuICAgICAgICAgIGNvbnN0IHt2aXNDb25maWd9ID0gbGF5ZXIuY29uZmlnO1xuICAgICAgICAgIHJldHVybiBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICB2aXNDb25maWc6IHsuLi52aXNDb25maWcsIGRhcmtCYXNlTWFwRW5hYmxlZH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH0pXG4gIH0pO1xuXG4vKipcbiAqIFVwZGF0ZXIgdGhhdCBjaGFuZ2VzIHRoZSBtYXAgc3R5bGUgYnkgY2FsbGluZyBtYXBTdHlsZUNoYW5nZVVwZGF0ZXIgb24gdmlzU3RhdGUuXG4gKiBJbiBhZGRpdGlvbiB0byB0aGF0LCBpdCBkb2VzIHRoZSBmb2xsb3dpbmc6XG4gKlxuICogICAxLiBVcGRhdGUgbWFwIG92ZXJsYXkgYmxlbmRpbmcgbW9kZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbG9yTW9kZSBvZiB0aGVcbiAqICAgICAgYmFzZSBtYXAsIGJ1dCBvbmx5IGlmIGl0J3Mgbm90IGluIHRoZSBgbm9ybWFsYCBtb2RlLlxuICpcbiAqICAgMi4gVXBkYXRlIGFsbCB0aGUgbGF5ZXJzIHdoaWNoIGhhdmUgdGhlIGBkYXJrQmFzZU1hcEVuYWJsZWRgIGNvbmZpZyBzZXR0aW5nXG4gKiAgICAgIGFkanVzdGluZyBpdCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbG9yTW9kZSBvZiB0aGUgYmFzZSBtYXAuXG4gKlxuICovXG5leHBvcnQgY29uc3QgY29tYmluZWRNYXBTdHlsZUNoYW5nZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IE1hcFN0eWxlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IHtwYXlsb2FkfSA9IGFjdGlvbjtcbiAgY29uc3Qge21hcFN0eWxlfSA9IHN0YXRlO1xuICBjb25zdCBnZXRDb2xvck1vZGUgPSBrZXkgPT4gbWFwU3R5bGUubWFwU3R5bGVzW2tleV0/LmNvbG9yTW9kZTtcbiAgY29uc3QgcHJldkNvbG9yTW9kZSA9IGdldENvbG9yTW9kZShtYXBTdHlsZS5zdHlsZVR5cGUpO1xuICBjb25zdCBuZXh0Q29sb3JNb2RlID0gZ2V0Q29sb3JNb2RlKHBheWxvYWQuc3R5bGVUeXBlKTtcbiAgbGV0IHt2aXNTdGF0ZX0gPSBzdGF0ZTtcbiAgaWYgKG5leHRDb2xvck1vZGUgIT09IHByZXZDb2xvck1vZGUpIHtcbiAgICBzd2l0Y2ggKG5leHRDb2xvck1vZGUpIHtcbiAgICAgIGNhc2UgQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSzpcbiAgICAgICAgdmlzU3RhdGUgPSBjb21wb3NlXyhbXG4gICAgICAgICAgdXBkYXRlT3ZlcmxheUJsZW5kaW5nKE9WRVJMQVlfQkxFTkRJTkdTLnNjcmVlbi52YWx1ZSksXG4gICAgICAgICAgdXBkYXRlRGFya0Jhc2VNYXBMYXllcnModHJ1ZSlcbiAgICAgICAgXSkodmlzU3RhdGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQkFTRV9NQVBfQ09MT1JfTU9ERVMuTElHSFQ6XG4gICAgICAgIHZpc1N0YXRlID0gY29tcG9zZV8oW1xuICAgICAgICAgIHVwZGF0ZU92ZXJsYXlCbGVuZGluZyhPVkVSTEFZX0JMRU5ESU5HUy5kYXJrZW4udmFsdWUpLFxuICAgICAgICAgIHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzKGZhbHNlKVxuICAgICAgICBdKSh2aXNTdGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICB2aXNTdGF0ZSxcbiAgICBtYXBTdHlsZTogbWFwU3R5bGVDaGFuZ2VVcGRhdGVyKG1hcFN0eWxlLCB7cGF5bG9hZDogey4uLnBheWxvYWR9fSlcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlciB0aGF0IGNoYW5nZXMgdGhlIGxheWVyIHR5cGUgYnkgY2FsbGluZyBgbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcmAgb24gdmlzU3RhdGUuXG4gKiBJbiBhZGRpdGlvbiB0byB0aGF0LCBpZiB0aGUgbmV3IGxheWVyIHR5cGUgaGFzIHRoZSBgZGFya0Jhc2VNYXBFbmFibGVkYCBjb25maWdcbiAqIHNldHRpbmcsIHdlIGFkanVzdCBpdCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbG9yTW9kZSBvZiB0aGUgYmFzZSBtYXAuc1xuICovXG5leHBvcnQgY29uc3QgY29tYmluZWRMYXllclR5cGVDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBMYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgbGV0IHt2aXNTdGF0ZX0gPSBzdGF0ZTtcbiAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHZpc1N0YXRlLmxheWVycy5maW5kSW5kZXgobGF5ZXIgPT4gbGF5ZXIgPT09IGFjdGlvbi5vbGRMYXllcik7XG4gIHZpc1N0YXRlID0gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcih2aXNTdGF0ZSwgYWN0aW9uKTtcbiAgY29uc3QgbmV3TGF5ZXIgPSB2aXNTdGF0ZS5sYXllcnNbb2xkTGF5ZXJJbmRleF07XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3TGF5ZXI/LnZpc0NvbmZpZ1NldHRpbmdzLCAnZGFya0Jhc2VNYXBFbmFibGVkJykpIHtcbiAgICBjb25zdCB7bWFwU3R5bGV9ID0gc3RhdGU7XG4gICAgY29uc3Qge2NvbG9yTW9kZX0gPSBtYXBTdHlsZS5tYXBTdHlsZXNbbWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgICBjb25zdCB7ZGFya0Jhc2VNYXBFbmFibGVkfSA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWc7XG4gICAgc3dpdGNoIChjb2xvck1vZGUpIHtcbiAgICAgIGNhc2UgQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSzpcbiAgICAgICAgaWYgKCFkYXJrQmFzZU1hcEVuYWJsZWQpIHtcbiAgICAgICAgICB2aXNTdGF0ZSA9IHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzKHRydWUsIG5ld0xheWVyLmlkKSh2aXNTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEJBU0VfTUFQX0NPTE9SX01PREVTLkxJR0hUOlxuICAgICAgICBpZiAoZGFya0Jhc2VNYXBFbmFibGVkKSB7XG4gICAgICAgICAgdmlzU3RhdGUgPSB1cGRhdGVEYXJrQmFzZU1hcExheWVycyhmYWxzZSwgbmV3TGF5ZXIuaWQpKHZpc1N0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGVcbiAgfTtcbn07XG5cbi8qKlxuICogTWFrZSBtYXBMZWdlbmQgYWN0aXZlIHdoZW4gdG9nZ2xlU3BsaXRNYXAgYWN0aW9uIGlzIGNhbGxlZFxuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBUb2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICB2aXNTdGF0ZTogdmlzU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUudmlzU3RhdGUsIGFjdGlvbiksXG4gICAgdWlTdGF0ZTogdWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcihzdGF0ZS51aVN0YXRlKSxcbiAgICBtYXBTdGF0ZTogbWFwU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUubWFwU3RhdGUpXG4gIH07XG5cbiAgY29uc3QgaXNTcGxpdCA9IG5ld1N0YXRlLnZpc1N0YXRlLnNwbGl0TWFwcy5sZW5ndGggIT09IDA7XG4gIGNvbnN0IGlzTGVnZW5kQWN0aXZlID0gbmV3U3RhdGUudWlTdGF0ZS5tYXBDb250cm9scz8ubWFwTGVnZW5kPy5hY3RpdmU7XG4gIGlmIChpc1NwbGl0ICYmICFpc0xlZ2VuZEFjdGl2ZSkge1xuICAgIG5ld1N0YXRlLnVpU3RhdGUgPSB0b2dnbGVNYXBDb250cm9sVXBkYXRlcihuZXdTdGF0ZS51aVN0YXRlLCB7XG4gICAgICBwYXlsb2FkOiB7cGFuZWxJZDogJ21hcExlZ2VuZCcsIGluZGV4OiBhY3Rpb24ucGF5bG9hZH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbmNvbnN0IGRlZmF1bHRSZXBsYWNlRGF0YVRvTWFwT3B0aW9ucyA9IHtcbiAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICBjZW50ZXJNYXA6IHRydWUsXG4gIGF1dG9DcmVhdGVMYXllcnM6IGZhbHNlXG59O1xuXG4vKipcbiAqIFVwZGF0ZXIgcmVwbGFjZSBhIGRhdGFzZXQgaW4gc3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHJlcGxhY2VEYXRhSW5NYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAge3BheWxvYWR9OiB7cGF5bG9hZDogUmVwbGFjZURhdGFJbk1hcFBheWxvYWR9XG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3Qge2RhdGFzZXRUb1JlcGxhY2VJZCwgZGF0YXNldFRvVXNlLCBvcHRpb25zID0ge319ID0gcGF5bG9hZDtcbiAgY29uc3QgYWRkRGF0YVRvTWFwT3B0aW9ucyA9IHsuLi5kZWZhdWx0UmVwbGFjZURhdGFUb01hcE9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuXG4gIC8vIGNoZWNrIGlmIGRhdGFzZXQgaXMgdGhlcmVcbiAgaWYgKCFzdGF0ZS52aXNTdGF0ZS5kYXRhc2V0c1tkYXRhc2V0VG9SZXBsYWNlSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGRhdGFzZXRUb1VzZSBpcyBQcm90b0RhdGFzZXRcbiAgY29uc3QgZGF0YUlkVG9Vc2UgPSBkYXRhc2V0VG9Vc2UuaW5mby5pZDtcbiAgaWYgKCFkYXRhSWRUb1VzZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyByZW1vdmUgZGF0YXNldCBhbmQgcHV0IGRlcGVuZGVuY2llcyBpbiB0b0JlTWVyZ2VkXG4gIGNvbnN0IHByZXBhcmVkU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGU6IHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlKHN0YXRlLnZpc1N0YXRlLCBkYXRhc2V0VG9SZXBsYWNlSWQsIGRhdGFJZFRvVXNlKVxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IGFkZERhdGFUb01hcFVwZGF0ZXIoXG4gICAgcHJlcGFyZWRTdGF0ZSxcbiAgICBwYXlsb2FkXyh7XG4gICAgICBkYXRhc2V0czogZGF0YXNldFRvVXNlLFxuICAgICAgLy8gc2hvdWxkIHpvb20gdG8gbmV3IGRhdGFzZXRcbiAgICAgIG9wdGlvbnM6IGFkZERhdGFUb01hcE9wdGlvbnNcbiAgICB9KVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUdBLElBQUFBLGdCQUFBLEdBQUFDLE9BQUE7QUFNQSxJQUFBQyxpQkFBQSxHQUFBRCxPQUFBO0FBT0EsSUFBQUUsaUJBQUEsR0FBQUYsT0FBQTtBQUlBLElBQUFHLGlCQUFBLEdBQUFILE9BQUE7QUFJQSxJQUFBSSxXQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxnQkFBQSxHQUFBTCxPQUFBO0FBYUEsSUFBQU0sTUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sVUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsVUFBQSxHQUFBUixPQUFBO0FBQTZFLFNBQUFTLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAs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
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Returns a function that logs a value with a given message */
|
|
2
|
+
export declare function log(text: string): (value: any) => void;
|
|
3
|
+
/** Wraps a value in an object and stores it the `payload` field */
|
|
4
|
+
export declare function payload_<P>(payload: P): {
|
|
5
|
+
payload: P;
|
|
6
|
+
};
|
|
7
|
+
/** Wraps a value in an object and stores it the `payload` field */
|
|
8
|
+
export declare function apply_<State, P>(updater: (state: State, nextPayload: P) => State, payload: P): (state: State) => State;
|
|
9
|
+
declare type Arg<State> = (state: State) => (nextState: State) => State;
|
|
10
|
+
export declare function with_<State>(fn: Arg<State>): (state: State) => State;
|
|
11
|
+
export declare function if_<State>(pred: boolean, fn: (state: State) => State): (state: State) => State;
|
|
12
|
+
export declare function compose_<State>(fns: Array<(s: State) => State>): (s: State) => State;
|
|
13
|
+
/** Returns a reducer function that merges props with state */
|
|
14
|
+
export declare function merge_<Props>(obj: Props): <State>(state: State) => State;
|
|
15
|
+
export declare function pick_<Prop extends string>(prop: Prop): <Value>(fn: (p: Value) => Value) => <State extends Record<Prop, Value>>(state: State) => State;
|
|
16
|
+
export declare function swap_<X extends {
|
|
17
|
+
id: string;
|
|
18
|
+
}>(item: X): (arr: X[]) => X[];
|
|
19
|
+
export declare function map_<X, T>(fn: (state: X) => T): (arr: X[]) => T[];
|
|
20
|
+
export declare function filterOutById<X extends {
|
|
21
|
+
id: string;
|
|
22
|
+
}>(id: string): (arr: X[]) => X[];
|
|
23
|
+
export declare function removeElementAtIndex<X>(index: number): (arr: X[]) => X[];
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.apply_ = apply_;
|
|
8
|
+
exports.compose_ = compose_;
|
|
9
|
+
exports.filterOutById = filterOutById;
|
|
10
|
+
exports.if_ = if_;
|
|
11
|
+
exports.log = log;
|
|
12
|
+
exports.map_ = map_;
|
|
13
|
+
exports.merge_ = merge_;
|
|
14
|
+
exports.payload_ = payload_;
|
|
15
|
+
exports.pick_ = pick_;
|
|
16
|
+
exports.removeElementAtIndex = removeElementAtIndex;
|
|
17
|
+
exports.swap_ = swap_;
|
|
18
|
+
exports.with_ = with_;
|
|
19
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
20
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
21
|
+
var _console = _interopRequireDefault(require("global/console"));
|
|
22
|
+
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; }
|
|
23
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
|
|
24
|
+
// Copyright contributors to the kepler.gl project
|
|
25
|
+
var identity = function identity(state) {
|
|
26
|
+
return state;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/** Returns a function that logs a value with a given message */
|
|
30
|
+
function log(text) {
|
|
31
|
+
return function (value) {
|
|
32
|
+
return _console["default"].log(text, value);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/** Wraps a value in an object and stores it the `payload` field */
|
|
36
|
+
function payload_(payload) {
|
|
37
|
+
return {
|
|
38
|
+
payload: payload
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** Wraps a value in an object and stores it the `payload` field */
|
|
42
|
+
function apply_(updater, payload) {
|
|
43
|
+
return function (state) {
|
|
44
|
+
return updater(state, payload);
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function with_(fn) {
|
|
48
|
+
return function (state) {
|
|
49
|
+
return fn(state)(state);
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function if_(pred, fn) {
|
|
53
|
+
return pred ? fn : identity;
|
|
54
|
+
}
|
|
55
|
+
function compose_(fns) {
|
|
56
|
+
return function (state) {
|
|
57
|
+
return fns.reduce(function (state2, fn) {
|
|
58
|
+
return fn(state2);
|
|
59
|
+
}, state);
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/** Returns a reducer function that merges props with state */
|
|
63
|
+
function merge_(obj) {
|
|
64
|
+
return function (state) {
|
|
65
|
+
return _objectSpread(_objectSpread({}, state), obj);
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function pick_(prop) {
|
|
69
|
+
return function (fn) {
|
|
70
|
+
return function (state) {
|
|
71
|
+
return _objectSpread(_objectSpread({}, state), {}, (0, _defineProperty2["default"])({}, prop, fn(state[prop])));
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function swap_(item) {
|
|
76
|
+
return function (arr) {
|
|
77
|
+
return arr.map(function (a) {
|
|
78
|
+
return a.id === item.id ? item : a;
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function map_(fn) {
|
|
83
|
+
return function (arr) {
|
|
84
|
+
return arr.map(function (e) {
|
|
85
|
+
return fn(e);
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function filterOutById(id) {
|
|
90
|
+
return function (arr) {
|
|
91
|
+
return arr.filter(function (e) {
|
|
92
|
+
return e.id !== id;
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function removeElementAtIndex(index) {
|
|
97
|
+
return function (arr) {
|
|
98
|
+
return [].concat((0, _toConsumableArray2["default"])(arr.slice(0, index)), (0, _toConsumableArray2["default"])(arr.slice(index + 1, arr.length)));
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc29sZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJpZGVudGl0eSIsInN0YXRlIiwibG9nIiwidGV4dCIsInZhbHVlIiwiQ29uc29sZSIsInBheWxvYWRfIiwicGF5bG9hZCIsImFwcGx5XyIsInVwZGF0ZXIiLCJ3aXRoXyIsImZuIiwiaWZfIiwicHJlZCIsImNvbXBvc2VfIiwiZm5zIiwicmVkdWNlIiwic3RhdGUyIiwibWVyZ2VfIiwib2JqIiwicGlja18iLCJwcm9wIiwic3dhcF8iLCJpdGVtIiwiYXJyIiwibWFwIiwiYSIsImlkIiwibWFwXyIsImZpbHRlck91dEJ5SWQiLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsImluZGV4IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInNsaWNlIl0sInNvdXJjZXMiOlsiLi4vc3JjL2NvbXBvc2VyLWhlbHBlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IENvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuXG5jb25zdCBpZGVudGl0eSA9IHN0YXRlID0+IHN0YXRlO1xuXG4vKiogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbG9ncyBhIHZhbHVlIHdpdGggYSBnaXZlbiBtZXNzYWdlICovXG5leHBvcnQgZnVuY3Rpb24gbG9nKHRleHQ6IHN0cmluZyk6ICh2YWx1ZTogYW55KSA9PiB2b2lkIHtcbiAgcmV0dXJuIHZhbHVlID0+IENvbnNvbGUubG9nKHRleHQsIHZhbHVlKTtcbn1cbi8qKiBXcmFwcyBhIHZhbHVlIGluIGFuIG9iamVjdCBhbmQgc3RvcmVzIGl0IHRoZSBgcGF5bG9hZGAgZmllbGQgKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXlsb2FkXzxQPihwYXlsb2FkOiBQKSB7XG4gIHJldHVybiB7cGF5bG9hZH07XG59XG4vKiogV3JhcHMgYSB2YWx1ZSBpbiBhbiBvYmplY3QgYW5kIHN0b3JlcyBpdCB0aGUgYHBheWxvYWRgIGZpZWxkICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlfPFN0YXRlLCBQPihcbiAgdXBkYXRlcjogKHN0YXRlOiBTdGF0ZSwgbmV4dFBheWxvYWQ6IFApID0+IFN0YXRlLFxuICBwYXlsb2FkOiBQXG4pOiAoc3RhdGU6IFN0YXRlKSA9PiBTdGF0ZSB7XG4gIHJldHVybiBzdGF0ZSA9PiB1cGRhdGVyKHN0YXRlLCBwYXlsb2FkKTtcbn1cblxudHlwZSBBcmc8U3RhdGU+ID0gKHN0YXRlOiBTdGF0ZSkgPT4gKG5leHRTdGF0ZTogU3RhdGUpID0+IFN0YXRlO1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhfPFN0YXRlPihmbjogQXJnPFN0YXRlPik6IChzdGF0ZTogU3RhdGUpID0+IFN0YXRlIHtcbiAgcmV0dXJuIHN0YXRlID0+IGZuKHN0YXRlKShzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZl88U3RhdGU+KHByZWQ6IGJvb2xlYW4sIGZuOiAoc3RhdGU6IFN0YXRlKSA9PiBTdGF0ZSk6IChzdGF0ZTogU3RhdGUpID0+IFN0YXRlIHtcbiAgcmV0dXJuIHByZWQgPyBmbiA6IGlkZW50aXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcG9zZV88U3RhdGU+KGZuczogQXJyYXk8KHM6IFN0YXRlKSA9PiBTdGF0ZT4pOiAoczogU3RhdGUpID0+IFN0YXRlIHtcbiAgcmV0dXJuIHN0YXRlID0+IGZucy5yZWR1Y2UoKHN0YXRlMiwgZm4pID0+IGZuKHN0YXRlMiksIHN0YXRlKTtcbn1cbi8qKiBSZXR1cm5zIGEgcmVkdWNlciBmdW5jdGlvbiB0aGF0IG1lcmdlcyBwcm9wcyB3aXRoIHN0YXRlICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VfPFByb3BzPihvYmo6IFByb3BzKTogPFN0YXRlPihzdGF0ZTogU3RhdGUpID0+IFN0YXRlIHtcbiAgcmV0dXJuIHN0YXRlID0+ICh7Li4uc3RhdGUsIC4uLm9ian0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGlja188UHJvcCBleHRlbmRzIHN0cmluZz4oXG4gIHByb3A6IFByb3Bcbik6IDxWYWx1ZT4oZm46IChwOiBWYWx1ZSkgPT4gVmFsdWUpID0+IDxTdGF0ZSBleHRlbmRzIFJlY29yZDxQcm9wLCBWYWx1ZT4+KHN0YXRlOiBTdGF0ZSkgPT4gU3RhdGUge1xuICByZXR1cm4gZm4gPT4gc3RhdGUgPT4gKHsuLi5zdGF0ZSwgW3Byb3BdOiBmbihzdGF0ZVtwcm9wXSl9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN3YXBfPFggZXh0ZW5kcyB7aWQ6IHN0cmluZ30+KGl0ZW06IFgpOiAoYXJyOiBYW10pID0+IFhbXSB7XG4gIHJldHVybiBhcnIgPT4gYXJyLm1hcChhID0+IChhLmlkID09PSBpdGVtLmlkID8gaXRlbSA6IGEpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcF88WCwgVD4oZm46IChzdGF0ZTogWCkgPT4gVCk6IChhcnI6IFhbXSkgPT4gVFtdIHtcbiAgcmV0dXJuIGFyciA9PiBhcnIubWFwKGUgPT4gZm4oZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyT3V0QnlJZDxYIGV4dGVuZHMge2lkOiBzdHJpbmd9PihpZDogc3RyaW5nKTogKGFycjogWFtdKSA9PiBYW10ge1xuICByZXR1cm4gYXJyID0+IGFyci5maWx0ZXIoZSA9PiBlLmlkICE9PSBpZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbGVtZW50QXRJbmRleDxYPihpbmRleDogbnVtYmVyKTogKGFycjogWFtdKSA9PiBYW10ge1xuICByZXR1cm4gYXJyID0+IFsuLi5hcnIuc2xpY2UoMCwgaW5kZXgpLCAuLi5hcnIuc2xpY2UoaW5kZXggKyAxLCBhcnIubGVuZ3RoKV07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsUUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQXFDLFNBQUFDLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBWixDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBWSxTQUFBLENBQUFDLE1BQUEsRUFBQWIsQ0FBQSxVQUFBQyxDQUFBLFdBQUFXLFNBQUEsQ0FBQVosQ0FBQSxJQUFBWSxTQUFBLENBQUFaLENBQUEsUUFBQUEsQ0FBQSxPQUFBRixPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxPQUFBYSxPQUFBLFdBQUFkLENBQUEsUUFBQWUsZ0JBQUEsYUFBQWhCLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQUUsTUFBQSxDQUFBYyx5QkFBQSxHQUFBZCxNQUFBLENBQUFlLGdCQUFBLENBQUFsQixDQUFBLEVBQUFHLE1BQUEsQ0FBQWMseUJB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
|