@kepler.gl/reducers 3.0.0 → 3.1.0-alpha.0

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.
Files changed (49) hide show
  1. package/package.json +26 -20
  2. package/dist/combined-updaters.d.ts +0 -79
  3. package/dist/combined-updaters.js +0 -423
  4. package/dist/composer-helpers.d.ts +0 -24
  5. package/dist/composer-helpers.js +0 -122
  6. package/dist/composers.d.ts +0 -18
  7. package/dist/composers.js +0 -27
  8. package/dist/core.d.ts +0 -64
  9. package/dist/core.js +0 -139
  10. package/dist/data-utils.d.ts +0 -8
  11. package/dist/data-utils.js +0 -42
  12. package/dist/export-utils.d.ts +0 -21
  13. package/dist/export-utils.js +0 -104
  14. package/dist/index.d.ts +0 -35
  15. package/dist/index.js +0 -373
  16. package/dist/interaction-utils.d.ts +0 -31
  17. package/dist/interaction-utils.js +0 -129
  18. package/dist/layer-utils.d.ts +0 -95
  19. package/dist/layer-utils.js +0 -344
  20. package/dist/map-state-updaters.d.ts +0 -93
  21. package/dist/map-state-updaters.js +0 -489
  22. package/dist/map-state.d.ts +0 -75
  23. package/dist/map-state.js +0 -47
  24. package/dist/map-style-updaters.d.ts +0 -186
  25. package/dist/map-style-updaters.js +0 -737
  26. package/dist/map-style.d.ts +0 -4
  27. package/dist/map-style.js +0 -46
  28. package/dist/merger-handler.d.ts +0 -10
  29. package/dist/merger-handler.js +0 -123
  30. package/dist/middleware.d.ts +0 -8
  31. package/dist/middleware.js +0 -30
  32. package/dist/provider-state-updaters.d.ts +0 -35
  33. package/dist/provider-state-updaters.js +0 -422
  34. package/dist/provider-state.d.ts +0 -4
  35. package/dist/provider-state.js +0 -46
  36. package/dist/root.d.ts +0 -24
  37. package/dist/root.js +0 -229
  38. package/dist/ui-state-updaters.d.ts +0 -362
  39. package/dist/ui-state-updaters.js +0 -871
  40. package/dist/ui-state.d.ts +0 -3
  41. package/dist/ui-state.js +0 -48
  42. package/dist/vis-state-merger.d.ts +0 -140
  43. package/dist/vis-state-merger.js +0 -915
  44. package/dist/vis-state-selectors.d.ts +0 -2
  45. package/dist/vis-state-selectors.js +0 -37
  46. package/dist/vis-state-updaters.d.ts +0 -545
  47. package/dist/vis-state-updaters.js +0 -3154
  48. package/dist/vis-state.d.ts +0 -211
  49. package/dist/vis-state.js +0 -46
@@ -1,422 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.resetProviderStatusUpdater = exports.loadCloudMapErrorUpdater = exports.loadCloudMapSuccessUpdater = exports.loadCloudMapUpdater = exports.exportFileErrorUpdater = exports.postSaveLoadSuccessUpdater = exports.exportFileSuccessUpdater = exports.exportFileToCloudUpdater = exports.INITIAL_PROVIDER_STATE = void 0;
9
-
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
-
12
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
14
- var _tasks = require("react-palm/tasks");
15
-
16
- var _console = _interopRequireDefault(require("global/console"));
17
-
18
- var _utils = require("@kepler.gl/utils");
19
-
20
- var _tasks2 = require("@kepler.gl/tasks");
21
-
22
- var _actions = require("@kepler.gl/actions");
23
-
24
- var _constants = require("@kepler.gl/constants");
25
-
26
- var _cloudProviders = require("@kepler.gl/cloud-providers");
27
-
28
- var _processors = require("@kepler.gl/processors");
29
-
30
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
31
-
32
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
33
-
34
- var INITIAL_PROVIDER_STATE = {
35
- isProviderLoading: false,
36
- isCloudMapLoading: false,
37
- providerError: null,
38
- currentProvider: null,
39
- successInfo: {},
40
- mapSaved: null,
41
- visualizations: []
42
- };
43
- exports.INITIAL_PROVIDER_STATE = INITIAL_PROVIDER_STATE;
44
-
45
- function createActionTask(action, payload) {
46
- if (typeof action === 'function') {
47
- return (0, _tasks2.ACTION_TASK)().map(function (_) {
48
- return action(payload);
49
- });
50
- }
51
-
52
- return null;
53
- }
54
-
55
- function _validateProvider(provider, method) {
56
- if (!provider) {
57
- _console["default"].error("provider is not defined");
58
-
59
- return false;
60
- }
61
-
62
- if (typeof provider[method] !== 'function') {
63
- _console["default"].error("".concat(method, " is not a function of Cloud provider: ").concat(provider.name));
64
-
65
- return false;
66
- }
67
-
68
- return true;
69
- }
70
-
71
- function createGlobalNotificationTasks(_ref) {
72
- var type = _ref.type,
73
- message = _ref.message,
74
- _ref$delayClose = _ref.delayClose,
75
- delayClose = _ref$delayClose === void 0 ? true : _ref$delayClose;
76
- var id = (0, _utils.generateHashId)();
77
- var successNote = {
78
- id: id,
79
- type: _constants.DEFAULT_NOTIFICATION_TYPES[type || ''] || _constants.DEFAULT_NOTIFICATION_TYPES.success,
80
- topic: _constants.DEFAULT_NOTIFICATION_TOPICS.global,
81
- message: message
82
- };
83
- var task = (0, _tasks2.ACTION_TASK)().map(function (_) {
84
- return (0, _actions.addNotification)(successNote);
85
- });
86
- return delayClose ? [task, (0, _tasks2.DELAY_TASK)(3000).map(function (_) {
87
- return (0, _actions.removeNotification)(id);
88
- })] : [task];
89
- }
90
- /**
91
- * This method will export the current kepler config file to the chosen cloud proder
92
- * add returns a share URL
93
- *
94
- */
95
-
96
-
97
- var exportFileToCloudUpdater = function exportFileToCloudUpdater(state, action) {
98
- var _action$payload = action.payload,
99
- mapData = _action$payload.mapData,
100
- provider = _action$payload.provider,
101
- _action$payload$optio = _action$payload.options,
102
- options = _action$payload$optio === void 0 ? {} : _action$payload$optio,
103
- onSuccess = _action$payload.onSuccess,
104
- onError = _action$payload.onError,
105
- closeModal = _action$payload.closeModal;
106
-
107
- if (!_validateProvider(provider, 'uploadMap')) {
108
- return state;
109
- }
110
-
111
- var newState = _objectSpread(_objectSpread({}, state), {}, {
112
- isProviderLoading: true,
113
- currentProvider: provider.name
114
- }); // payload called by provider.uploadMap
115
-
116
-
117
- var payload = {
118
- mapData: mapData,
119
- options: options
120
- };
121
- var uploadFileTask = (0, _tasks2.EXPORT_FILE_TO_CLOUD_TASK)({
122
- provider: provider,
123
- payload: payload
124
- }).bimap( // success
125
- function (response) {
126
- return (0, _actions.exportFileSuccess)({
127
- response: response,
128
- provider: provider,
129
- options: options,
130
- onSuccess: onSuccess,
131
- closeModal: closeModal
132
- });
133
- }, // error
134
- function (error) {
135
- return (0, _actions.exportFileError)({
136
- error: error,
137
- provider: provider,
138
- options: options,
139
- onError: onError
140
- });
141
- });
142
- return (0, _tasks.withTask)(newState, uploadFileTask);
143
- };
144
-
145
- exports.exportFileToCloudUpdater = exportFileToCloudUpdater;
146
-
147
- var exportFileSuccessUpdater = function exportFileSuccessUpdater(state, action) {
148
- var _action$payload2 = action.payload,
149
- response = _action$payload2.response,
150
- provider = _action$payload2.provider,
151
- _action$payload2$opti = _action$payload2.options,
152
- options = _action$payload2$opti === void 0 ? {} : _action$payload2$opti,
153
- onSuccess = _action$payload2.onSuccess,
154
- closeModal = _action$payload2.closeModal;
155
-
156
- var newState = _objectSpread(_objectSpread({}, state), {}, {
157
- isProviderLoading: false,
158
- // TODO: do we always have to store this?
159
- successInfo: response
160
- }, !options.isPublic ? {
161
- mapSaved: provider.name
162
- } : {});
163
-
164
- var tasks = [createActionTask(onSuccess, {
165
- response: response,
166
- provider: provider,
167
- options: options
168
- }), closeModal && (0, _tasks2.ACTION_TASK)().map(function (_) {
169
- return (0, _actions.postSaveLoadSuccess)("Map saved to ".concat(state.currentProvider, "!"));
170
- })].filter(function (d) {
171
- return d;
172
- });
173
- return tasks.length ? (0, _tasks.withTask)(newState, tasks) : newState;
174
- };
175
- /**
176
- * Close modal on success and display notification
177
- */
178
-
179
-
180
- exports.exportFileSuccessUpdater = exportFileSuccessUpdater;
181
-
182
- var postSaveLoadSuccessUpdater = function postSaveLoadSuccessUpdater(state, action) {
183
- var message = action.payload || "Saved / Load to ".concat(state.currentProvider, " Success");
184
- var tasks = [(0, _tasks2.ACTION_TASK)().map(function (_) {
185
- return (0, _actions.toggleModal)(null);
186
- }), (0, _tasks2.ACTION_TASK)().map(function (_) {
187
- return (0, _actions.resetProviderStatus)();
188
- })].concat((0, _toConsumableArray2["default"])(createGlobalNotificationTasks({
189
- message: message
190
- })));
191
- return (0, _tasks.withTask)(state, tasks);
192
- };
193
-
194
- exports.postSaveLoadSuccessUpdater = postSaveLoadSuccessUpdater;
195
-
196
- var exportFileErrorUpdater = function exportFileErrorUpdater(state, action) {
197
- var _action$payload3 = action.payload,
198
- error = _action$payload3.error,
199
- provider = _action$payload3.provider,
200
- onError = _action$payload3.onError;
201
-
202
- var newState = _objectSpread(_objectSpread({}, state), {}, {
203
- isProviderLoading: false
204
- });
205
-
206
- if (isFileConflict(error)) {
207
- newState.mapSaved = provider.name;
208
- return (0, _tasks.withTask)(newState, [(0, _tasks2.ACTION_TASK)().map(function (_) {
209
- return (0, _actions.toggleModal)(_constants.OVERWRITE_MAP_ID);
210
- })]);
211
- }
212
-
213
- newState.providerError = (0, _utils.getError)(error);
214
- var task = createActionTask(onError, {
215
- error: error,
216
- provider: provider
217
- });
218
- return task ? (0, _tasks.withTask)(newState, task) : newState;
219
- };
220
-
221
- exports.exportFileErrorUpdater = exportFileErrorUpdater;
222
-
223
- var loadCloudMapUpdater = function loadCloudMapUpdater(state, action) {
224
- var _action$payload4 = action.payload,
225
- loadParams = _action$payload4.loadParams,
226
- provider = _action$payload4.provider,
227
- onSuccess = _action$payload4.onSuccess,
228
- onError = _action$payload4.onError;
229
-
230
- if (!loadParams) {
231
- _console["default"].warn('load map error: loadParams is undefined');
232
-
233
- return state;
234
- }
235
-
236
- if (!_validateProvider(provider, 'downloadMap')) {
237
- return state;
238
- }
239
-
240
- var newState = _objectSpread(_objectSpread({}, state), {}, {
241
- isProviderLoading: true,
242
- isCloudMapLoading: true
243
- }); // payload called by provider.downloadMap
244
-
245
-
246
- var uploadFileTask = (0, _tasks2.LOAD_CLOUD_MAP_TASK)({
247
- provider: provider,
248
- payload: loadParams
249
- }).bimap( // success
250
- // @ts-expect-error
251
- function (response) {
252
- return (0, _actions.loadCloudMapSuccess)({
253
- response: response,
254
- loadParams: loadParams,
255
- provider: provider,
256
- onSuccess: onSuccess,
257
- onError: onError
258
- });
259
- }, // error
260
- // @ts-expect-error
261
- function (error) {
262
- return (0, _actions.loadCloudMapError)({
263
- error: error,
264
- provider: provider,
265
- onError: onError
266
- });
267
- });
268
- return (0, _tasks.withTask)(newState, uploadFileTask);
269
- };
270
-
271
- exports.loadCloudMapUpdater = loadCloudMapUpdater;
272
-
273
- function isFileConflict(error) {
274
- return error && error.message === _cloudProviders.FILE_CONFLICT_MSG;
275
- }
276
-
277
- function checkLoadMapResponseError(response) {
278
- if (!response || !(0, _utils.isPlainObject)(response)) {
279
- return new Error('Load map response is empty');
280
- }
281
-
282
- if (!(0, _utils.isPlainObject)(response.map)) {
283
- return new Error("Load map response should be an object property \"map\"");
284
- }
285
-
286
- if (!response.map.datasets || !response.map.config) {
287
- return new Error("Load map response.map should be an object with property datasets or config");
288
- }
289
-
290
- return null;
291
- }
292
-
293
- function getDatasetHandler(format) {
294
- var defaultHandler = _processors.DATASET_HANDLERS[_constants.DATASET_FORMATS.csv];
295
-
296
- if (!format) {
297
- _console["default"].warn('format is not provided in load map response, will use csv by default');
298
-
299
- return defaultHandler;
300
- }
301
-
302
- if (!_processors.DATASET_HANDLERS[format]) {
303
- var supportedFormat = Object.keys(_constants.DATASET_FORMATS).map(function (k) {
304
- return "'".concat(k, "'");
305
- }).join(', ');
306
-
307
- _console["default"].warn("unknown format ".concat(format, ". Please use one of ").concat(supportedFormat, ", will use csv by default"));
308
-
309
- return defaultHandler;
310
- }
311
-
312
- return _processors.DATASET_HANDLERS[format];
313
- }
314
-
315
- function parseLoadMapResponse(response, loadParams, provider) {
316
- var map = response.map,
317
- format = response.format;
318
- var processorMethod = getDatasetHandler(format);
319
- var parsedDatasets = (0, _utils.toArray)(map.datasets).map(function (ds, i) {
320
- if (format === _constants.DATASET_FORMATS.keplergl) {
321
- // no need to obtain id, directly pass them in
322
- return processorMethod(ds);
323
- }
324
-
325
- var info = ds && ds.info || {
326
- id: (0, _utils.generateHashId)(6)
327
- };
328
- var data = processorMethod(ds.data || ds);
329
- return {
330
- info: info,
331
- data: data
332
- };
333
- });
334
-
335
- var info = _objectSpread(_objectSpread({}, map.info), {}, {
336
- provider: provider.name,
337
- loadParams: loadParams
338
- });
339
-
340
- return _objectSpread({
341
- datasets: parsedDatasets,
342
- info: info
343
- }, map.config ? {
344
- config: map.config
345
- } : {});
346
- }
347
-
348
- var loadCloudMapSuccessUpdater = function loadCloudMapSuccessUpdater(state, action) {
349
- var _action$payload5 = action.payload,
350
- response = _action$payload5.response,
351
- loadParams = _action$payload5.loadParams,
352
- provider = _action$payload5.provider,
353
- onSuccess = _action$payload5.onSuccess,
354
- onError = _action$payload5.onError;
355
- var formatError = checkLoadMapResponseError(response);
356
-
357
- if (formatError) {
358
- // if response format is not correct
359
- return exportFileErrorUpdater(state, {
360
- payload: {
361
- error: formatError,
362
- provider: provider,
363
- onError: onError
364
- }
365
- });
366
- }
367
-
368
- var newState = _objectSpread(_objectSpread({}, state), {}, {
369
- mapSaved: provider.name,
370
- currentProvider: provider.name,
371
- isCloudMapLoading: false,
372
- isProviderLoading: false
373
- });
374
-
375
- var payload = parseLoadMapResponse(response, loadParams, provider);
376
- var tasks = [(0, _tasks2.ACTION_TASK)().map(function (_) {
377
- return (0, _actions.addDataToMap)(payload);
378
- }), createActionTask(onSuccess, {
379
- response: response,
380
- loadParams: loadParams,
381
- provider: provider
382
- }), (0, _tasks2.ACTION_TASK)().map(function (_) {
383
- return (0, _actions.postSaveLoadSuccess)("Map from ".concat(provider.name, " loaded"));
384
- })].filter(function (d) {
385
- return d;
386
- });
387
- return tasks.length ? (0, _tasks.withTask)(newState, tasks) : newState;
388
- };
389
-
390
- exports.loadCloudMapSuccessUpdater = loadCloudMapSuccessUpdater;
391
-
392
- var loadCloudMapErrorUpdater = function loadCloudMapErrorUpdater(state, action) {
393
- var message = (0, _utils.getError)(action.payload.error) || "Error loading saved map";
394
-
395
- _console["default"].warn(message);
396
-
397
- var newState = _objectSpread(_objectSpread({}, state), {}, {
398
- isProviderLoading: false,
399
- isCloudMapLoading: false,
400
- providerError: null
401
- });
402
-
403
- return (0, _tasks.withTask)(newState, createGlobalNotificationTasks({
404
- type: 'error',
405
- message: message,
406
- delayClose: false
407
- }));
408
- };
409
-
410
- exports.loadCloudMapErrorUpdater = loadCloudMapErrorUpdater;
411
-
412
- var resetProviderStatusUpdater = function resetProviderStatusUpdater(state) {
413
- return _objectSpread(_objectSpread({}, state), {}, {
414
- isProviderLoading: false,
415
- providerError: null,
416
- isCloudMapLoading: false,
417
- successInfo: {}
418
- });
419
- };
420
-
421
- exports.resetProviderStatusUpdater = resetProviderStatusUpdater;
422
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm92aWRlci1zdGF0ZS11cGRhdGVycy50cyJdLCJuYW1lcyI6WyJJTklUSUFMX1BST1ZJREVSX1NUQVRFIiwiaXNQcm92aWRlckxvYWRpbmciLCJpc0Nsb3VkTWFwTG9hZGluZyIsInByb3ZpZGVyRXJyb3IiLCJjdXJyZW50UHJvdmlkZXIiLCJzdWNjZXNzSW5mbyIsIm1hcFNhdmVkIiwidmlzdWFsaXphdGlvbnMiLCJjcmVhdGVBY3Rpb25UYXNrIiwiYWN0aW9uIiwicGF5bG9hZCIsIm1hcCIsIl8iLCJfdmFsaWRhdGVQcm92aWRlciIsInByb3ZpZGVyIiwibWV0aG9kIiwiQ29uc29sZSIsImVycm9yIiwibmFtZSIsImNyZWF0ZUdsb2JhbE5vdGlmaWNhdGlvblRhc2tzIiwidHlwZSIsIm1lc3NhZ2UiLCJkZWxheUNsb3NlIiwiaWQiLCJzdWNjZXNzTm90ZSIsIkRFRkFVTFRfTk9USUZJQ0FUSU9OX1RZUEVTIiwic3VjY2VzcyIsInRvcGljIiwiREVGQVVMVF9OT1RJRklDQVRJT05fVE9QSUNTIiwiZ2xvYmFsIiwidGFzayIsImV4cG9ydEZpbGVUb0Nsb3VkVXBkYXRlciIsInN0YXRlIiwibWFwRGF0YSIsIm9wdGlvbnMiLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwiY2xvc2VNb2RhbCIsIm5ld1N0YXRlIiwidXBsb2FkRmlsZVRhc2siLCJiaW1hcCIsInJlc3BvbnNlIiwiZXhwb3J0RmlsZVN1Y2Nlc3NVcGRhdGVyIiwiaXNQdWJsaWMiLCJ0YXNrcyIsImZpbHRlciIsImQiLCJsZW5ndGgiLCJwb3N0U2F2ZUxvYWRTdWNjZXNzVXBkYXRlciIsImV4cG9ydEZpbGVFcnJvclVwZGF0ZXIiLCJpc0ZpbGVDb25mbGljdCIsIk9WRVJXUklURV9NQVBfSUQiLCJsb2FkQ2xvdWRNYXBVcGRhdGVyIiwibG9hZFBhcmFtcyIsIndhcm4iLCJGSUxFX0NPTkZMSUNUX01TRyIsImNoZWNrTG9hZE1hcFJlc3BvbnNlRXJyb3IiLCJFcnJvciIsImRhdGFzZXRzIiwiY29uZmlnIiwiZ2V0RGF0YXNldEhhbmRsZXIiLCJmb3JtYXQiLCJkZWZhdWx0SGFuZGxlciIsIkRBVEFTRVRfSEFORExFUlMiLCJEQVRBU0VUX0ZPUk1BVFMiLCJjc3YiLCJzdXBwb3J0ZWRGb3JtYXQiLCJPYmplY3QiLCJrZXlzIiwiayIsImpvaW4iLCJwYXJzZUxvYWRNYXBSZXNwb25zZSIsInByb2Nlc3Nvck1ldGhvZCIsInBhcnNlZERhdGFzZXRzIiwiZHMiLCJpIiwia2VwbGVyZ2wiLCJpbmZvIiwiZGF0YSIsImxvYWRDbG91ZE1hcFN1Y2Nlc3NVcGRhdGVyIiwiZm9ybWF0RXJyb3IiLCJsb2FkQ2xvdWRNYXBFcnJvclVwZGF0ZXIiLCJyZXNldFByb3ZpZGVyU3RhdHVzVXBkYXRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQU1BOztBQWFBOztBQVFBOztBQUNBOzs7Ozs7QUFrQk8sSUFBTUEsc0JBQXFDLEdBQUc7QUFDbkRDLEVBQUFBLGlCQUFpQixFQUFFLEtBRGdDO0FBRW5EQyxFQUFBQSxpQkFBaUIsRUFBRSxLQUZnQztBQUduREMsRUFBQUEsYUFBYSxFQUFFLElBSG9DO0FBSW5EQyxFQUFBQSxlQUFlLEVBQUUsSUFKa0M7QUFLbkRDLEVBQUFBLFdBQVcsRUFBRSxFQUxzQztBQU1uREMsRUFBQUEsUUFBUSxFQUFFLElBTnlDO0FBT25EQyxFQUFBQSxjQUFjLEVBQUU7QUFQbUMsQ0FBOUM7OztBQVVQLFNBQVNDLGdCQUFULENBQTBCQyxNQUExQixFQUFrQ0MsT0FBbEMsRUFBMkM7QUFDekMsTUFBSSxPQUFPRCxNQUFQLEtBQWtCLFVBQXRCLEVBQWtDO0FBQ2hDLFdBQU8sMkJBQWNFLEdBQWQsQ0FBa0IsVUFBQUMsQ0FBQztBQUFBLGFBQUlILE1BQU0sQ0FBQ0MsT0FBRCxDQUFWO0FBQUEsS0FBbkIsQ0FBUDtBQUNEOztBQUVELFNBQU8sSUFBUDtBQUNEOztBQUVELFNBQVNHLGlCQUFULENBQTJCQyxRQUEzQixFQUFxQ0MsTUFBckMs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d0JBQXdCLEdBQUcsU0FBM0JBLHdCQUEyQixDQUN0Q2pELEtBRHNDLEVBRXRDdkIsTUFGc0MsRUFHcEI7QUFDbEIsTUFBTVksT0FBTyxHQUFHLHFCQUFTWixNQUFNLENBQUNDLE9BQVAsQ0FBZU8sS0FBeEIsOEJBQWhCOztBQUVBRCxzQkFBUXNDLElBQVIsQ0FBYWpDLE9BQWI7O0FBRUEsTUFBTWlCLFFBQVEsbUNBQ1ROLEtBRFM7QUFFWi9CLElBQUFBLGlCQUFpQixFQUFFLEtBRlA7QUFHWkMsSUFBQUEsaUJBQWlCLEVBQUUsS0FIUDtBQUlaQyxJQUFBQSxhQUFhLEVBQUU7QUFKSCxJQUFkOztBQU9BLFNBQU8scUJBQ0xtQyxRQURLLEVBRUxuQiw2QkFBNkIsQ0FBQztBQUFDQyxJQUFBQSxJQUFJLEVBQUUsT0FBUDtBQUFnQkMsSUFBQUEsT0FBTyxFQUFQQSxPQUFoQjtBQUF5QkMsSUFBQUEsVUFBVSxFQUFFO0FBQXJDLEdBQUQsQ0FGeEIsQ0FBUDtBQUlELENBbkJNOzs7O0FBcUJBLElBQU00RCwwQkFBMEIsR0FBRyxTQUE3QkEsMEJBQTZCLENBQUNsRCxLQUFEO0FBQUEseUNBQ3JDQSxLQURxQztBQUV4Qy9CLElBQUFBLGlCQUFpQixFQUFFLEtBRnFCO0FBR3hDRSxJQUFBQSxhQUFhLEVBQUUsSUFIeUI7QUFJeENELElBQUFBLGlCQUFpQixFQUFFLEtBSnFCO0FBS3hDRyxJQUFBQSxXQUFXLEVBQUU7QUFMMkI7QUFBQSxDQUFuQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7d2l0aFRhc2t9IGZyb20gJ3JlYWN0LXBhbG0vdGFza3MnO1xuaW1wb3J0IENvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgZ2V0RXJyb3IsIGlzUGxhaW5PYmplY3QsIHRvQXJyYXl9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtcbiAgRVhQT1JUX0ZJTEVfVE9fQ0xPVURfVEFTSyxcbiAgQUNUSU9OX1RBU0ssXG4gIERFTEFZX1RBU0ssXG4gIExPQURfQ0xPVURfTUFQX1RBU0tcbn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG5pbXBvcnQge1xuICBleHBvcnRGaWxlU3VjY2VzcyxcbiAgZXhwb3J0RmlsZUVycm9yLFxuICBwb3N0U2F2ZUxvYWRTdWNjZXNzLFxuICBsb2FkQ2xvdWRNYXBTdWNjZXNzLFxuICBsb2FkQ2xvdWRNYXBFcnJvcixcbiAgcmVzZXRQcm92aWRlclN0YXR1cyxcbiAgcmVtb3ZlTm90aWZpY2F0aW9uLFxuICB0b2dnbGVNb2RhbCxcbiAgYWRkTm90aWZpY2F0aW9uLFxuICBhZGREYXRhVG9NYXAsXG4gIFByb3ZpZGVyQWN0aW9uc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9OT1RJRklDQVRJT05fVFlQRVMsXG4gIERFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUyxcbiAgREFUQVNFVF9GT1JNQVRTLFxuICBPVkVSV1JJVEVfTUFQX0lEXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7RXhwb3J0RmlsZVRvQ2xvdWRQYXlsb2FkfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtGSUxFX0NPTkZMSUNUX01TRywgTWFwTGlzdEl0ZW19IGZyb20gJ0BrZXBsZXIuZ2wvY2xvdWQtcHJvdmlkZXJzJztcbmltcG9ydCB7REFUQVNFVF9IQU5ETEVSU30gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcblxudHlwZSBBY3Rpb25QYXlsb2FkPFA+ID0ge1xuICB0eXBlPzogc3RyaW5nO1xuICBwYXlsb2FkOiBQO1xufTtcblxuZXhwb3J0IHR5cGUgUHJvdmlkZXJTdGF0ZSA9IHtcbiAgaXNQcm92aWRlckxvYWRpbmc6IGJvb2xlYW47XG4gIGlzQ2xvdWRNYXBMb2FkaW5nOiBib29sZWFuO1xuICBwcm92aWRlckVycm9yOiBhbnk7XG4gIGN1cnJlbnRQcm92aWRlcjogc3RyaW5nIHwgbnVsbDtcbiAgc3VjY2Vzc0luZm86IGFueTtcbiAgbWFwU2F2ZWQ6IG51bGwgfCBzdHJpbmc7XG4gIGluaXRpYWxTdGF0ZT86IGFueTtcbiAgdmlzdWFsaXphdGlvbnM6IE1hcExpc3RJdGVtW107XG59O1xuXG5leHBvcnQgY29uc3QgSU5JVElBTF9QUk9WSURFUl9TVEFURTogUHJvdmlkZXJTdGF0ZSA9IHtcbiAgaXNQcm92aWRlckxvYWRpbmc6IGZhbHNlLFxuICBpc0Nsb3VkTWFwTG9hZGluZzogZmFsc2UsXG4gIHByb3ZpZGVyRXJyb3I6IG51bGwsXG4gIGN1cnJlbnRQcm92aWRlcjogbnVsbCxcbiAgc3VjY2Vzc0luZm86IHt9LFxuICBtYXBTYXZlZDogbnVsbCxcbiAgdmlzdWFsaXphdGlvbnM6IFtdXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVBY3Rpb25UYXNrKGFjdGlvbiwgcGF5bG9hZCkge1xuICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBBQ1RJT05fVEFTSygpLm1hcChfID0+IGFjdGlvbihwYXlsb2FkKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gX3ZhbGlkYXRlUHJvdmlkZXIocHJvdmlkZXIsIG1ldGhvZCkge1xuICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgcHJvdmlkZXIgaXMgbm90IGRlZmluZWRgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIHByb3ZpZGVyW21ldGhvZF0gIT09ICdmdW5jdGlvbicpIHtcbiAgICBDb25zb2xlLmVycm9yKGAke21ldGhvZH0gaXMgbm90IGEgZnVuY3Rpb24gb2YgQ2xvdWQgcHJvdmlkZXI6ICR7cHJvdmlkZXIubmFtZX1gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlR2xvYmFsTm90aWZpY2F0aW9uVGFza3Moe1xuICB0eXBlLFxuICBtZXNzYWdlLFxuICBkZWxheUNsb3NlID0gdHJ1ZVxufToge1xuICB0eXBlPzogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGRlbGF5Q2xvc2U/OiBib29sZWFuO1xufSkge1xuICBjb25zdCBpZCA9IGdlbmVyYXRlSGFzaElkKCk7XG4gIGNvbnN0IHN1Y2Nlc3NOb3RlID0ge1xuICAgIGlkLFxuICAgIHR5cGU6IERFRkFVTFRfTk9USUZJQ0FUSU9OX1RZUEVTW3R5cGUgfHwgJyddIHx8IERFRkFVTFRfTk9USUZJQ0FUSU9OX1RZUEVTLnN1Y2Nlc3MsXG4gICAgdG9waWM6IERFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUy5nbG9iYWwsXG4gICAgbWVzc2FnZVxuICB9O1xuICBjb25zdCB0YXNrID0gQUNUSU9OX1RBU0soKS5tYXAoXyA9PiBhZGROb3RpZmljYXRpb24oc3VjY2Vzc05vdGUpKTtcbiAgcmV0dXJuIGRlbGF5Q2xvc2UgPyBbdGFzaywgREVMQVlfVEFTSygzMDAwKS5tYXAoXyA9PiByZW1vdmVOb3RpZmljYXRpb24oaWQpKV0gOiBbdGFza107XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2Qgd2lsbCBleHBvcnQgdGhlIGN1cnJlbnQga2VwbGVyIGNvbmZpZyBmaWxlIHRvIHRoZSBjaG9zZW4gY2xvdWQgcHJvZGVyXG4gKiBhZGQgcmV0dXJucyBhIHNoYXJlIFVSTFxuICpcbiAqL1xuZXhwb3J0IGNvbnN0IGV4cG9ydEZpbGVUb0Nsb3VkVXBkYXRlciA9IChcbiAgc3RhdGU6IFByb3ZpZGVyU3RhdGUsXG4gIGFjdGlvbjogQWN0aW9uUGF5bG9hZDxFeHBvcnRGaWxlVG9DbG91ZFBheWxvYWQ+XG4pOiBQcm92aWRlclN0YXRlID0+IHtcbiAgY29uc3Qge21hcERhdGEsIHByb3ZpZGVyLCBvcHRpb25zID0ge30sIG9uU3VjY2Vzcywgb25FcnJvciwgY2xvc2VNb2RhbH0gPSBhY3Rpb24ucGF5bG9hZDtcblxuICBpZiAoIV92YWxpZGF0ZVByb3ZpZGVyKHByb3ZpZGVyLCAndXBsb2FkTWFwJykpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpc1Byb3ZpZGVyTG9hZGluZzogdHJ1ZSxcbiAgICBjdXJyZW50UHJvdmlkZXI6IHByb3ZpZGVyLm5hbWVcbiAgfTtcblxuICAvLyBwYXlsb2FkIGNhbGxlZCBieSBwcm92aWRlci51cGxvYWRNYXBcbiAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICBtYXBEYXRhLFxuICAgIG9wdGlvbnNcbiAgfTtcbiAgY29uc3QgdXBsb2FkRmlsZVRhc2sgPSBFWFBPUlRfRklMRV9UT19DTE9VRF9UQVNLKHtwcm92aWRlciwgcGF5bG9hZH0pLmJpbWFwKFxuICAgIC8vIHN1Y2Nlc3NcbiAgICByZXNwb25zZSA9PiBleHBvcnRGaWxlU3VjY2Vzcyh7cmVzcG9uc2UsIHByb3ZpZGVyLCBvcHRpb25zLCBvblN1Y2Nlc3MsIGNsb3NlTW9kYWx9KSxcbiAgICAvLyBlcnJvclxuICAgIGVycm9yID0+IGV4cG9ydEZpbGVFcnJvcih7ZXJyb3IsIHByb3ZpZGVyLCBvcHRpb25zLCBvbkVycm9yfSlcbiAgKTtcblxuICByZXR1cm4gd2l0aFRhc2sobmV3U3RhdGUsIHVwbG9hZEZpbGVUYXNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHBvcnRGaWxlU3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBQcm92aWRlclN0YXRlLFxuICBhY3Rpb246IEFjdGlvblBheWxvYWQ8UHJvdmlkZXJBY3Rpb25zLkV4cG9ydEZpbGVTdWNjZXNzUGF5bG9hZD5cbik6IFByb3ZpZGVyU3RhdGUgPT4ge1xuICBjb25zdCB7cmVzcG9uc2UsIHByb3ZpZGVyLCBvcHRpb25zID0ge30sIG9uU3VjY2VzcywgY2xvc2VNb2RhbH0gPSBhY3Rpb24ucGF5bG9hZDtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpc1Byb3ZpZGVyTG9hZGluZzogZmFsc2UsXG4gICAgLy8gVE9ETzogZG8gd2UgYWx3YXlzIGhhdmUgdG8gc3RvcmUgdGhpcz9cbiAgICBzdWNjZXNzSW5mbzogcmVzcG9uc2UsXG4gICAgLi4uKCFvcHRpb25zLmlzUHVibGljXG4gICAgICA/IHtcbiAgICAgICAgICBtYXBTYXZlZDogcHJvdmlkZXIubmFtZVxuICAgICAgICB9XG4gICAgICA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IHRhc2tzID0gW1xuICAgIGNyZWF0ZUFjdGlvblRhc2sob25TdWNjZXNzLCB7cmVzcG9uc2UsIHByb3ZpZGVyLCBvcHRpb25zfSksXG4gICAgY2xvc2VNb2RhbCAmJlxuICAgICAgQUNUSU9OX1RBU0soKS5tYXAoXyA9PiBwb3N0U2F2ZUxvYWRTdWNjZXNzKGBNYXAgc2F2ZWQgdG8gJHtzdGF0ZS5jdXJyZW50UHJvdmlkZXJ9IWApKVxuICBdLmZpbHRlcihkID0+IGQpO1xuXG4gIHJldHVybiB0YXNrcy5sZW5ndGggPyB3aXRoVGFzayhuZXdTdGF0ZSwgdGFza3MpIDogbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIENsb3NlIG1vZGFsIG9uIHN1Y2Nlc3MgYW5kIGRpc3BsYXkgbm90aWZpY2F0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBwb3N0U2F2ZUxvYWRTdWNjZXNzVXBkYXRlciA9IChcbiAgc3RhdGU6IFByb3ZpZGVyU3RhdGUsXG4gIGFjdGlvbjogQWN0aW9uUGF5bG9hZDxQcm92aWRlckFjdGlvbnMuUG9zdFNhdmVMb2FkU3VjY2Vzc1BheWxvYWQ+XG4pOiBQcm92aWRlclN0YXRlID0+IHtcbiAgY29uc3QgbWVzc2FnZSA9IGFjdGlvbi5wYXlsb2FkIHx8IGBTYXZlZCAvIExvYWQgdG8gJHtzdGF0ZS5jdXJyZW50UHJvdmlkZXJ9IFN1Y2Nlc3NgO1xuXG4gIGNvbnN0IHRhc2tzID0gW1xuICAgIEFDVElPTl9UQVNLKCkubWFwKF8gPT4gdG9nZ2xlTW9kYWwobnVsbCkpLFxuICAgIEFDVElPTl9UQVNLKCkubWFwKF8gPT4gcmVzZXRQcm92aWRlclN0YXR1cygpKSxcbiAgICAuLi5jcmVhdGVHbG9iYWxOb3RpZmljYXRpb25UYXNrcyh7bWVzc2FnZX0pXG4gIF07XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHN0YXRlLCB0YXNrcyk7XG59O1xuXG5leHBvcnQgY29uc3QgZXhwb3J0RmlsZUVycm9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFByb3ZpZGVyU3RhdGUsXG4gIGFjdGlvbjogQWN0aW9uUGF5bG9hZDxQcm92aWRlckFjdGlvbnMuRXhwb3J0RmlsZUVycm9yUGF5bG9hZD5cbik6IFByb3ZpZGVyU3RhdGUgPT4ge1xuICBjb25zdCB7ZXJyb3IsIHByb3ZpZGVyLCBvbkVycm9yfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGlzUHJvdmlkZXJMb2FkaW5nOiBmYWxzZVxuICB9O1xuXG4gIGlmIChpc0ZpbGVDb25mbGljdChlcnJvcikpIHtcbiAgICBuZXdTdGF0ZS5tYXBTYXZlZCA9IHByb3ZpZGVyLm5hbWU7XG4gICAgcmV0dXJuIHdpdGhUYXNrKG5ld1N0YXRlLCBbQUNUSU9OX1RBU0soKS5tYXAoXyA9PiB0b2dnbGVNb2RhbChPVkVSV1JJVEVfTUFQX0lEKSldKTtcbiAgfVxuXG4gIG5ld1N0YXRlLnByb3ZpZGVyRXJyb3IgPSBnZXRFcnJvcihlcnJvcik7XG4gIGNvbnN0IHRhc2sgPSBjcmVhdGVBY3Rpb25UYXNrKG9uRXJyb3IsIHtlcnJvciwgcHJvdmlkZXJ9KTtcblxuICByZXR1cm4gdGFzayA/IHdpdGhUYXNrKG5ld1N0YXRlLCB0YXNrKSA6IG5ld1N0YXRlO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvYWRDbG91ZE1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBQcm92aWRlclN0YXRlLFxuICBhY3Rpb246IEFjdGlvblBheWxvYWQ8UHJvdmlkZXJBY3Rpb25zLkxvYWRDbG91ZE1hcFBheWxvYWQ+XG4pOiBQcm92aWRlclN0YXRlID0+IHtcbiAgY29uc3Qge2xvYWRQYXJhbXMsIHByb3ZpZGVyLCBvblN1Y2Nlc3MsIG9uRXJyb3J9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGlmICghbG9hZFBhcmFtcykge1xuICAgIENvbnNvbGUud2FybignbG9hZCBtYXAgZXJyb3I6IGxvYWRQYXJhbXMgaXMgdW5kZWZpbmVkJyk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghX3ZhbGlkYXRlUHJvdmlkZXIocHJvdmlkZXIsICdkb3dubG9hZE1hcCcpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaXNQcm92aWRlckxvYWRpbmc6IHRydWUsXG4gICAgaXNDbG91ZE1hcExvYWRpbmc6IHRydWVcbiAgfTtcblxuICAvLyBwYXlsb2FkIGNhbGxlZCBieSBwcm92aWRlci5kb3dubG9hZE1hcFxuICBjb25zdCB1cGxvYWRGaWxlVGFzayA9IExPQURfQ0xPVURfTUFQX1RBU0soe3Byb3ZpZGVyLCBwYXlsb2FkOiBsb2FkUGFyYW1zfSkuYmltYXAoXG4gICAgLy8gc3VjY2Vzc1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICByZXNwb25zZSA9PiBsb2FkQ2xvdWRNYXBTdWNjZXNzKHtyZXNwb25zZSwgbG9hZFBhcmFtcywgcHJvdmlkZXIsIG9uU3VjY2Vzcywgb25FcnJvcn0pLFxuICAgIC8vIGVycm9yXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIGVycm9yID0+IGxvYWRDbG91ZE1hcEVycm9yKHtlcnJvciwgcHJvdmlkZXIsIG9uRXJyb3J9KVxuICApO1xuXG4gIHJldHVybiB3aXRoVGFzayhuZXdTdGF0ZSwgdXBsb2FkRmlsZVRhc2spO1xufTtcblxuZnVuY3Rpb24gaXNGaWxlQ29uZmxpY3QoZXJyb3IpIHtcbiAgcmV0dXJuIGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPT09IEZJTEVfQ09ORkxJQ1RfTVNHO1xufVxuXG5mdW5jdGlvbiBjaGVja0xvYWRNYXBSZXNwb25zZUVycm9yKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2UgfHwgIWlzUGxhaW5PYmplY3QocmVzcG9uc2UpKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcignTG9hZCBtYXAgcmVzcG9uc2UgaXMgZW1wdHknKTtcbiAgfVxuICBpZiAoIWlzUGxhaW5PYmplY3QocmVzcG9uc2UubWFwKSkge1xuICAgIHJldHVybiBuZXcgRXJyb3IoYExvYWQgbWFwIHJlc3BvbnNlIHNob3VsZCBiZSBhbiBvYmplY3QgcHJvcGVydHkgXCJtYXBcImApO1xuICB9XG4gIGlmICghcmVzcG9uc2UubWFwLmRhdGFzZXRzIHx8ICFyZXNwb25zZS5tYXAuY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihgTG9hZCBtYXAgcmVzcG9uc2UubWFwIHNob3VsZCBiZSBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0eSBkYXRhc2V0cyBvciBjb25maWdgKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXREYXRhc2V0SGFuZGxlcihmb3JtYXQpIHtcbiAgY29uc3QgZGVmYXVsdEhhbmRsZXIgPSBEQVRBU0VUX0hBTkRMRVJTW0RBVEFTRVRfRk9STUFUUy5jc3ZdO1xuICBpZiAoIWZvcm1hdCkge1xuICAgIENvbnNvbGUud2FybignZm9ybWF0IGlzIG5vdCBwcm92aWRlZCBpbiBsb2FkIG1hcCByZXNwb25zZSwgd2lsbCB1c2UgY3N2IGJ5IGRlZmF1bHQnKTtcbiAgICByZXR1cm4gZGVmYXVsdEhhbmRsZXI7XG4gIH1cblxuICBpZiAoIURBVEFTRVRfSEFORExFUlNbZm9ybWF0XSkge1xuICAgIGNvbnN0IHN1cHBvcnRlZEZvcm1hdCA9IE9iamVjdC5rZXlzKERBVEFTRVRfRk9STUFUUylcbiAgICAgIC5tYXAoayA9PiBgJyR7a30nYClcbiAgICAgIC5qb2luKCcsICcpO1xuICAgIENvbnNvbGUud2FybihcbiAgICAgIGB1bmtub3duIGZvcm1hdCAke2Zvcm1hdH0uIFBsZWFzZSB1c2Ugb25lIG9mICR7c3VwcG9ydGVkRm9ybWF0fSwgd2lsbCB1c2UgY3N2IGJ5IGRlZmF1bHRgXG4gICAgKTtcbiAgICByZXR1cm4gZGVmYXVsdEhhbmRsZXI7XG4gIH1cblxuICByZXR1cm4gREFUQVNFVF9IQU5ETEVSU1tmb3JtYXRdO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxvYWRNYXBSZXNwb25zZShyZXNwb25zZSwgbG9hZFBhcmFtcywgcHJvdmlkZXIpIHtcbiAgY29uc3Qge21hcCwgZm9ybWF0fSA9IHJlc3BvbnNlO1xuICBjb25zdCBwcm9jZXNzb3JNZXRob2QgPSBnZXREYXRhc2V0SGFuZGxlcihmb3JtYXQpO1xuXG4gIGNvbnN0IHBhcnNlZERhdGFzZXRzID0gdG9BcnJheShtYXAuZGF0YXNldHMpLm1hcCgoZHMsIGkpID0+IHtcbiAgICBpZiAoZm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMua2VwbGVyZ2wpIHtcbiAgICAgIC8vIG5vIG5lZWQgdG8gb2J0YWluIGlkLCBkaXJlY3RseSBwYXNzIHRoZW0gaW5cbiAgICAgIHJldHVybiBwcm9jZXNzb3JNZXRob2QoZHMpO1xuICAgIH1cbiAgICBjb25zdCBpbmZvID0gKGRzICYmIGRzLmluZm8pIHx8IHtpZDogZ2VuZXJhdGVIYXNoSWQoNil9O1xuICAgIGNvbnN0IGRhdGEgPSBwcm9jZXNzb3JNZXRob2QoZHMuZGF0YSB8fCBkcyk7XG4gICAgcmV0dXJuIHtpbmZvLCBkYXRhfTtcbiAgfSk7XG5cbiAgY29uc3QgaW5mbyA9IHtcbiAgICAuLi5tYXAuaW5mbyxcbiAgICBwcm92aWRlcjogcHJvdmlkZXIubmFtZSxcbiAgICBsb2FkUGFyYW1zXG4gIH07XG4gIHJldHVybiB7XG4gICAgZGF0YXNldHM6IHBhcnNlZERhdGFzZXRzLFxuICAgIGluZm8sXG4gICAgLi4uKG1hcC5jb25maWcgPyB7Y29uZmlnOiBtYXAuY29uZmlnfSA6IHt9KVxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgbG9hZENsb3VkTWFwU3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBQcm92aWRlclN0YXRlLFxuICBhY3Rpb246IEFjdGlvblBheWxvYWQ8UHJvdmlkZXJBY3Rpb25zLkxvYWRDbG91ZE1hcFN1Y2Nlc3NQYXlsb2FkPlxuKTogUHJvdmlkZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtyZXNwb25zZSwgbG9hZFBhcmFtcywgcHJvdmlkZXIsIG9uU3VjY2Vzcywgb25FcnJvcn0gPSBhY3Rpb24ucGF5bG9hZDtcblxuICBjb25zdCBmb3JtYXRFcnJvciA9IGNoZWNrTG9hZE1hcFJlc3BvbnNlRXJyb3IocmVzcG9uc2UpO1xuICBpZiAoZm9ybWF0RXJyb3IpIHtcbiAgICAvLyBpZiByZXNwb25zZSBmb3JtYXQgaXMgbm90IGNvcnJlY3RcbiAgICByZXR1cm4gZXhwb3J0RmlsZUVycm9yVXBkYXRlcihzdGF0ZSwge1xuICAgICAgcGF5bG9hZDoge2Vycm9yOiBmb3JtYXRFcnJvciwgcHJvdmlkZXIsIG9uRXJyb3J9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtYXBTYXZlZDogcHJvdmlkZXIubmFtZSxcbiAgICBjdXJyZW50UHJvdmlkZXI6IHByb3ZpZGVyLm5hbWUsXG4gICAgaXNDbG91ZE1hcExvYWRpbmc6IGZhbHNlLFxuICAgIGlzUHJvdmlkZXJMb2FkaW5nOiBmYWxzZVxuICB9O1xuXG4gIGNvbnN0IHBheWxvYWQgPSBwYXJzZUxvYWRNYXBSZXNwb25zZShyZXNwb25zZSwgbG9hZFBhcmFtcywgcHJvdmlkZXIpO1xuXG4gIGNvbnN0IHRhc2tzID0gW1xuICAgIEFDVElPTl9UQVNLKCkubWFwKF8gPT4gYWRkRGF0YVRvTWFwKHBheWxvYWQpKSxcbiAgICBjcmVhdGVBY3Rpb25UYXNrKG9uU3VjY2Vzcywge3Jlc3BvbnNlLCBsb2FkUGFyYW1zLCBwcm92aWRlcn0pLFxuICAgIEFDVElPTl9UQVNLKCkubWFwKF8gPT4gcG9zdFNhdmVMb2FkU3VjY2VzcyhgTWFwIGZyb20gJHtwcm92aWRlci5uYW1lfSBsb2FkZWRgKSlcbiAgXS5maWx0ZXIoZCA9PiBkKTtcblxuICByZXR1cm4gdGFza3MubGVuZ3RoID8gd2l0aFRhc2sobmV3U3RhdGUsIHRhc2tzKSA6IG5ld1N0YXRlO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvYWRDbG91ZE1hcEVycm9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFByb3ZpZGVyU3RhdGUsXG4gIGFjdGlvbjogQWN0aW9uUGF5bG9hZDxQcm92aWRlckFjdGlvbnMuTG9hZENsb3VkTWFwRXJyb3JQYXlsb2FkPlxuKTogUHJvdmlkZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBnZXRFcnJvcihhY3Rpb24ucGF5bG9hZC5lcnJvcikgfHwgYEVycm9yIGxvYWRpbmcgc2F2ZWQgbWFwYDtcblxuICBDb25zb2xlLndhcm4obWVzc2FnZSk7XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaXNQcm92aWRlckxvYWRpbmc6IGZhbHNlLFxuICAgIGlzQ2xvdWRNYXBMb2FkaW5nOiBmYWxzZSxcbiAgICBwcm92aWRlckVycm9yOiBudWxsXG4gIH07XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIG5ld1N0YXRlLFxuICAgIGNyZWF0ZUdsb2JhbE5vdGlmaWNhdGlvblRhc2tzKHt0eXBlOiAnZXJyb3InLCBtZXNzYWdlLCBkZWxheUNsb3NlOiBmYWxzZX0pXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVzZXRQcm92aWRlclN0YXR1c1VwZGF0ZXIgPSAoc3RhdGU6IFByb3ZpZGVyU3RhdGUpOiBQcm92aWRlclN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBpc1Byb3ZpZGVyTG9hZGluZzogZmFsc2UsXG4gIHByb3ZpZGVyRXJyb3I6IG51bGwsXG4gIGlzQ2xvdWRNYXBMb2FkaW5nOiBmYWxzZSxcbiAgc3VjY2Vzc0luZm86IHt9XG59KTtcbiJdfQ==
@@ -1,4 +0,0 @@
1
- import * as providerStateUpdaters from './provider-state-updaters';
2
- export declare const providerStateReducerFactory: (initialState?: {}) => import("redux-actions").ReduxCompatibleReducer<providerStateUpdaters.ProviderState, providerStateUpdaters.ProviderState>;
3
- declare const _default: import("redux-actions").ReduxCompatibleReducer<providerStateUpdaters.ProviderState, providerStateUpdaters.ProviderState>;
4
- export default _default;
@@ -1,46 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- exports["default"] = exports.providerStateReducerFactory = void 0;
11
-
12
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
14
- var _reduxActions = require("redux-actions");
15
-
16
- var providerStateUpdaters = _interopRequireWildcard(require("./provider-state-updaters"));
17
-
18
- var _actions = require("@kepler.gl/actions");
19
-
20
- var _actionHandler;
21
-
22
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
23
-
24
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
25
-
26
- /**
27
- * Important: Do not rename `actionHandler` or the assignment pattern of property value.
28
- * It is used to generate documentation
29
- */
30
- var actionHandler = (_actionHandler = {}, (0, _defineProperty2["default"])(_actionHandler, _actions.ProviderActionTypes.EXPORT_FILE_TO_CLOUD, providerStateUpdaters.exportFileToCloudUpdater), (0, _defineProperty2["default"])(_actionHandler, _actions.ProviderActionTypes.EXPORT_FILE_SUCCESS, providerStateUpdaters.exportFileSuccessUpdater), (0, _defineProperty2["default"])(_actionHandler, _actions.ProviderActionTypes.EXPORT_FILE_ERROR, providerStateUpdaters.exportFileErrorUpdater), (0, _defineProperty2["default"])(_actionHandler, _actions.ProviderActionTypes.RESET_PROVIDER_STATUS, providerStateUpdaters.resetProviderStatusUpdater), (0, _defineProperty2["default"])(_actionHandler, _actions.ProviderActionTypes.POST_SAVE_LOAD_SUCCESS, providerStateUpdaters.postSaveLoadSuccessUpdater), (0, _defineProperty2["default"])(_actionHandler, _actions.ProviderActionTypes.LOAD_CLOUD_MAP, providerStateUpdaters.loadCloudMapUpdater), (0, _defineProperty2["default"])(_actionHandler, _actions.ProviderActionTypes.LOAD_CLOUD_MAP_SUCCESS, providerStateUpdaters.loadCloudMapSuccessUpdater), (0, _defineProperty2["default"])(_actionHandler, _actions.ProviderActionTypes.LOAD_CLOUD_MAP_ERROR, providerStateUpdaters.loadCloudMapErrorUpdater), _actionHandler); // construct provider-state reducer
31
-
32
- var providerStateReducerFactory = function providerStateReducerFactory() {
33
- var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
34
- return (// @ts-expect-error
35
- (0, _reduxActions.handleActions)(actionHandler, _objectSpread(_objectSpread(_objectSpread({}, providerStateUpdaters.INITIAL_PROVIDER_STATE), initialState), {}, {
36
- initialState: initialState
37
- }))
38
- );
39
- };
40
-
41
- exports.providerStateReducerFactory = providerStateReducerFactory;
42
-
43
- var _default = providerStateReducerFactory();
44
-
45
- exports["default"] = _default;
46
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm92aWRlci1zdGF0ZS50cyJdLCJuYW1lcyI6WyJhY3Rpb25IYW5kbGVyIiwiQWN0aW9uVHlwZXMiLCJFWFBPUlRfRklMRV9UT19DTE9VRCIsInByb3ZpZGVyU3RhdGVVcGRhdGVycyIsImV4cG9ydEZpbGVUb0Nsb3VkVXBkYXRlciIsIkVYUE9SVF9GSUxFX1NVQ0NFU1MiLCJleHBvcnRGaWxlU3VjY2Vzc1VwZGF0ZXIiLCJFWFBPUlRfRklMRV9FUlJPUiIsImV4cG9ydEZpbGVFcnJvclVwZGF0ZXIiLCJSRVNFVF9QUk9WSURFUl9TVEFUVVMiLCJyZXNldFByb3ZpZGVyU3RhdHVzVXBkYXRlciIsIlBPU1RfU0FWRV9MT0FEX1NVQ0NFU1MiLCJwb3N0U2F2ZUxvYWRTdWNjZXNzVXBkYXRlciIsIkxPQURfQ0xPVURfTUFQIiwibG9hZENsb3VkTWFwVXBkYXRlciIsIkxPQURfQ0xPVURfTUFQX1NVQ0NFU1MiLCJsb2FkQ2xvdWRNYXBTdWNjZXNzVXBkYXRlciIsIkxPQURfQ0xPVURfTUFQX0VSUk9SIiwibG9hZENsb3VkTWFwRXJyb3JVcGRhdGVyIiwicHJvdmlkZXJTdGF0ZVJlZHVjZXJGYWN0b3J5IiwiaW5pdGlhbFN0YXRlIiwiSU5JVElBTF9QUk9WSURFUl9TVEFURSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUdBOztBQUNBOztBQUNBOzs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTUEsYUFBYSwwRUFDaEJDLDZCQUFZQyxvQkFESSxFQUNtQkMscUJBQXFCLENBQUNDLHdCQUR6QyxvREFFaEJILDZCQUFZSSxtQkFGSSxFQUVrQkYscUJBQXFCLENBQUNHLHdCQUZ4QyxvREFHaEJMLDZCQUFZTSxpQkFISSxFQUdnQkoscUJBQXFCLENBQUNLLHNCQUh0QyxvREFJaEJQLDZCQUFZUSxxQkFKSSxFQUlvQk4scUJBQXFCLENBQUNPLDBCQUoxQyxvREFLaEJULDZCQUFZVSxzQkFMSSxFQUtxQlIscUJBQXFCLENBQUNTLDBCQUwzQyxvREFNaEJYLDZCQUFZWSxjQU5JLEVBTWFWLHFCQUFxQixDQUFDVyxtQkFObkMsb0RBT2hCYiw2QkFBWWMsc0JBUEksRUFPcUJaLHFCQUFxQixDQUFDYSwwQkFQM0Msb0RBUWhCZiw2QkFBWWdCLG9CQVJJLEVBUW1CZCxxQkFBcUIsQ0FBQ2Usd0JBUnpDLGtCQUFuQixDLENBV0E7O0FBQ08sSUFBTUMsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUE4QjtBQUFBLE1BQUNDLFlBQUQsdUVBQWdCLEVBQWhCO0FBQUEsU0FDekM7QUFDQSxxQ0FBY3BCLGFBQWQsZ0RBQ0tHLHFCQUFxQixDQUFDa0Isc0JBRDNCLEdBRUtELFlBRkw7QUFHRUEsTUFBQUEsWUFBWSxFQUFaQTtBQUhGO0FBRnlDO0FBQUEsQ0FBcEM7Ozs7ZUFRUUQsMkJBQTJCLEUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2hhbmRsZUFjdGlvbnN9IGZyb20gJ3JlZHV4LWFjdGlvbnMnO1xuaW1wb3J0ICogYXMgcHJvdmlkZXJTdGF0ZVVwZGF0ZXJzIGZyb20gJy4vcHJvdmlkZXItc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtQcm92aWRlckFjdGlvblR5cGVzIGFzIEFjdGlvblR5cGVzfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vKipcbiAqIEltcG9ydGFudDogRG8gbm90IHJlbmFtZSBgYWN0aW9uSGFuZGxlcmAgb3IgdGhlIGFzc2lnbm1lbnQgcGF0dGVybiBvZiBwcm9wZXJ0eSB2YWx1ZS5cbiAqIEl0IGlzIHVzZWQgdG8gZ2VuZXJhdGUgZG9jdW1lbnRhdGlvblxuICovXG5jb25zdCBhY3Rpb25IYW5kbGVyID0ge1xuICBbQWN0aW9uVHlwZXMuRVhQT1JUX0ZJTEVfVE9fQ0xPVURdOiBwcm92aWRlclN0YXRlVXBkYXRlcnMuZXhwb3J0RmlsZVRvQ2xvdWRVcGRhdGVyLFxuICBbQWN0aW9uVHlwZXMuRVhQT1JUX0ZJTEVfU1VDQ0VTU106IHByb3ZpZGVyU3RhdGVVcGRhdGVycy5leHBvcnRGaWxlU3VjY2Vzc1VwZGF0ZXIsXG4gIFtBY3Rpb25UeXBlcy5FWFBPUlRfRklMRV9FUlJPUl06IHByb3ZpZGVyU3RhdGVVcGRhdGVycy5leHBvcnRGaWxlRXJyb3JVcGRhdGVyLFxuICBbQWN0aW9uVHlwZXMuUkVTRVRfUFJPVklERVJfU1RBVFVTXTogcHJvdmlkZXJTdGF0ZVVwZGF0ZXJzLnJlc2V0UHJvdmlkZXJTdGF0dXNVcGRhdGVyLFxuICBbQWN0aW9uVHlwZXMuUE9TVF9TQVZFX0xPQURfU1VDQ0VTU106IHByb3ZpZGVyU3RhdGVVcGRhdGVycy5wb3N0U2F2ZUxvYWRTdWNjZXNzVXBkYXRlcixcbiAgW0FjdGlvblR5cGVzLkxPQURfQ0xPVURfTUFQXTogcHJvdmlkZXJTdGF0ZVVwZGF0ZXJzLmxvYWRDbG91ZE1hcFVwZGF0ZXIsXG4gIFtBY3Rpb25UeXBlcy5MT0FEX0NMT1VEX01BUF9TVUNDRVNTXTogcHJvdmlkZXJTdGF0ZVVwZGF0ZXJzLmxvYWRDbG91ZE1hcFN1Y2Nlc3NVcGRhdGVyLFxuICBbQWN0aW9uVHlwZXMuTE9BRF9DTE9VRF9NQVBfRVJST1JdOiBwcm92aWRlclN0YXRlVXBkYXRlcnMubG9hZENsb3VkTWFwRXJyb3JVcGRhdGVyXG59O1xuXG4vLyBjb25zdHJ1Y3QgcHJvdmlkZXItc3RhdGUgcmVkdWNlclxuZXhwb3J0IGNvbnN0IHByb3ZpZGVyU3RhdGVSZWR1Y2VyRmFjdG9yeSA9IChpbml0aWFsU3RhdGUgPSB7fSkgPT5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBoYW5kbGVBY3Rpb25zKGFjdGlvbkhhbmRsZXIsIHtcbiAgICAuLi5wcm92aWRlclN0YXRlVXBkYXRlcnMuSU5JVElBTF9QUk9WSURFUl9TVEFURSxcbiAgICAuLi5pbml0aWFsU3RhdGUsXG4gICAgaW5pdGlhbFN0YXRlXG4gIH0pO1xuXG5leHBvcnQgZGVmYXVsdCBwcm92aWRlclN0YXRlUmVkdWNlckZhY3RvcnkoKTtcbiJdfQ==
package/dist/root.d.ts DELETED
@@ -1,24 +0,0 @@
1
- export declare function provideInitialState(initialState: any, extraReducers?: any): (state: {} | undefined, action: any) => any;
2
- /**
3
- * Kepler.gl reducer to be mounted to your store. You can mount `keplerGlReducer` at property `keplerGl`, if you choose
4
- * to mount it at another address e.g. `foo` you will need to specify it when you mount `KeplerGl` component in your app with `getState: state => state.foo`
5
- * @public
6
- * @example
7
- * import keplerGlReducer from 'kepler.gl/reducers';
8
- * import {createStore, combineReducers, applyMiddleware, compose} from 'redux';
9
- * import {taskMiddleware} from 'react-palm/tasks';
10
- *
11
- * const initialState = {};
12
- * const reducers = combineReducers({
13
- * // <-- mount kepler.gl reducer in your app
14
- * keplerGl: keplerGlReducer,
15
- *
16
- * // Your other reducers here
17
- * app: appReducer
18
- * });
19
- *
20
- * // using createStore
21
- * export default createStore(reducer, initialState, applyMiddleware(taskMiddleware));
22
- */
23
- declare const keplerGlReducer: any;
24
- export default keplerGlReducer;