@kepler.gl/utils 3.0.0-alpha.1 → 3.0.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.
- package/dist/aggregate-utils.js +1 -21
- package/dist/arrow-data-container.d.ts +54 -0
- package/dist/arrow-data-container.js +360 -0
- package/dist/color-utils.d.ts +4 -0
- package/dist/color-utils.js +12 -21
- package/dist/data-container-interface.d.ts +18 -0
- package/dist/data-container-interface.js +0 -20
- package/dist/data-container-utils.d.ts +1 -0
- package/dist/data-container-utils.js +10 -22
- package/dist/data-row.js +7 -22
- package/dist/data-scale-utils.js +7 -22
- package/dist/data-utils.js +3 -21
- package/dist/dataset-utils.d.ts +2 -2
- package/dist/dataset-utils.js +15 -28
- package/dist/dom-to-image.js +7 -22
- package/dist/dom-utils.js +6 -22
- package/dist/effect-utils.d.ts +12 -2
- package/dist/effect-utils.js +122 -55
- package/dist/export-map-html.js +7 -23
- package/dist/export-utils.js +1 -21
- package/dist/filter-utils.js +6 -21
- package/dist/format.js +6 -22
- package/dist/gl-utils.js +1 -21
- package/dist/h3-utils.js +6 -22
- package/dist/index.d.ts +4 -3
- package/dist/index.js +43 -26
- package/dist/indexed-data-container.js +1 -21
- package/dist/locale-utils.js +1 -21
- package/dist/map-info-utils.js +6 -22
- package/dist/map-style-utils/mapbox-gl-style-editor.js +1 -21
- package/dist/map-style-utils/mapbox-utils.js +7 -22
- package/dist/map-utils.js +1 -21
- package/dist/mapbox-utils.js +7 -22
- package/dist/noop.js +3 -21
- package/dist/notifications-utils.js +1 -21
- package/dist/observe-dimensions.d.ts +1 -1
- package/dist/observe-dimensions.js +5 -25
- package/dist/plot.js +7 -22
- package/dist/projection-utils.js +6 -22
- package/dist/row-data-container.js +1 -21
- package/dist/searcher-utils.js +7 -22
- package/dist/split-map-utils.js +1 -21
- package/dist/time.js +6 -22
- package/dist/utils.d.ts +6 -0
- package/dist/utils.js +28 -22
- package/package.json +10 -9
package/dist/dom-utils.js
CHANGED
@@ -1,23 +1,3 @@
|
|
1
|
-
// Copyright (c) 2023 Uber Technologies, Inc.
|
2
|
-
//
|
3
|
-
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
-
// of this software and associated documentation files (the "Software"), to deal
|
5
|
-
// in the Software without restriction, including without limitation the rights
|
6
|
-
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
-
// copies of the Software, and to permit persons to whom the Software is
|
8
|
-
// furnished to do so, subject to the following conditions:
|
9
|
-
//
|
10
|
-
// The above copyright notice and this permission notice shall be included in
|
11
|
-
// all copies or substantial portions of the Software.
|
12
|
-
//
|
13
|
-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
-
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
-
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
-
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
-
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
-
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
-
// THE SOFTWARE.
|
20
|
-
|
21
1
|
"use strict";
|
22
2
|
|
23
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
@@ -54,7 +34,11 @@ var _window = _interopRequireDefault(require("global/window"));
|
|
54
34
|
|
55
35
|
var _document = _interopRequireDefault(require("global/document"));
|
56
36
|
|
57
|
-
var _constants = require("@kepler.gl/constants");
|
37
|
+
var _constants = require("@kepler.gl/constants");
|
38
|
+
|
39
|
+
// SPDX-License-Identifier: MIT
|
40
|
+
// Copyright contributors to the kepler.gl project
|
41
|
+
function processClone(original, clone) {
|
58
42
|
if (!(clone instanceof _window["default"].Element)) {
|
59
43
|
return clone;
|
60
44
|
}
|
@@ -447,4 +431,4 @@ function toStyleSheet(text) {
|
|
447
431
|
doc.body.appendChild(styleElement);
|
448
432
|
return styleElement.sheet;
|
449
433
|
}
|
450
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kb20tdXRpbHMudHMiXSwibmFtZXMiOlsicHJvY2Vzc0Nsb25lIiwib3JpZ2luYWwiLCJjbG9uZSIsIndpbmRvdyIsIkVsZW1lbnQiLCJjb3B5UHJvcGVydGllcyIsInNvdXJjZVN0eWxlIiwidGFyZ2V0U3R5bGUiLCJwcm9wZXJ0eUtleXMiLCJhc0FycmF5IiwiZm9yRWFjaCIsIm5hbWUiLCJzZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5VmFsdWUiLCJnZXRQcm9wZXJ0eVByaW9yaXR5IiwiY29weVN0eWxlIiwic291cmNlIiwidGFyZ2V0IiwiY3NzVGV4dCIsImZvbnQiLCJjbG9uZVN0eWxlIiwib2ciLCJjbG4iLCJvcmlnaW5hbFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInN0eWxlIiwiZm9ybWF0UHNldWRvRWxlbWVudFN0eWxlIiwiZWxtIiwic3RsIiwiZm9ybWF0Q3NzVGV4dCIsInN0bDEiLCJjbnQiLCJmb3JtYXRQcm9wZXJ0eSIsImZvcm1hdENzc1Byb3BlcnRpZXMiLCJzdGwyIiwibWFwIiwiam9pbiIsInNlbGVjdG9yIiwiZG9jdW1lbnQiLCJjcmVhdGVUZXh0Tm9kZSIsImNsb25lUHNldWRvRWxlbWVudCIsIm9yZyIsImVsZW1lbnQiLCJjb250ZW50IiwiY2xhc3NOYW1lIiwidWlkIiwic3R5bGVFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImFwcGVuZENoaWxkIiwiY2xvbmVQc2V1ZG9FbGVtZW50cyIsImNvcHlVc2VySW5wdXQiLCJIVE1MVGV4dEFyZWFFbGVtZW50IiwiaW5uZXJIVE1MIiwidmFsdWUiLCJIVE1MSW5wdXRFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiZml4U3ZnIiwiU1ZHRWxlbWVudCIsIlNWR1JlY3RFbGVtZW50IiwiYXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiYXJyYXlMaWtlIiwiYXJyYXkiLCJsZW5ndGgiLCJpIiwicHVzaCIsImZvdXJSYW5kb21DaGFycyIsIk1hdGgiLCJyYW5kb20iLCJwb3ciLCJ0b1N0cmluZyIsInNsaWNlIiwiaW5kZXgiLCJtYWtlSW1hZ2UiLCJ1cmkiLCJyZWplY3QiLCJpbWFnZSIsIkltYWdlIiwib25sb2FkIiwib25lcnJvciIsImVyciIsIm1lc3NhZ2UiLCJJTUFHRV9FWFBPUlRfRVJST1JTIiwiZGF0YVVyaSIsIkNvbnNvbGUiLCJsb2ciLCJldmVudCIsInNyYyIsImlzRGF0YVVybCIsInVybCIsInNlYXJjaCIsInBhcnNlRXh0ZW5zaW9uIiwibWF0Y2giLCJleGVjIiwibWltZXMiLCJXT0ZGIiwiSlBFRyIsIndvZmYiLCJ3b2ZmMiIsInR0ZiIsImVvdCIsInBuZyIsImpwZyIsImpwZWciLCJnaWYiLCJ0aWZmIiwic3ZnIiwibWltZVR5cGUiLCJleHRlbnNpb24iLCJ0b0xvd2VyQ2FzZSIsImRhdGFBc1VybCIsInR5cGUiLCJlc2NhcGUiLCJzdHJpbmciLCJyZXBsYWNlIiwiZGVsYXkiLCJtcyIsImFyZyIsInNldFRpbWVvdXQiLCJpc1NyY0FzRGF0YVVybCIsInRleHQiLCJEQVRBX1VSTF9SRUdFWCIsImN2VG9CbG9iIiwiY2FudmFzIiwiYmluYXJ5U3RyaW5nIiwiYXRvYiIsInRvRGF0YVVSTCIsInNwbGl0IiwiYmluYXJ5QXJyYXkiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsIkJsb2IiLCJjYW52YXNUb0Jsb2IiLCJ0b0Jsb2IiLCJlc2NhcGVYaHRtbCIsImdldFdpZHRoIiwibm9kZSIsImxlZnRCb3JkZXIiLCJweCIsInJpZ2h0Qm9yZGVyIiwic2Nyb2xsV2lkdGgiLCJnZXRIZWlnaHQiLCJ0b3BCb3JkZXIiLCJib3R0b21Cb3JkZXIiLCJzY3JvbGxIZWlnaHQiLCJzdHlsZVByb3BlcnR5IiwicGFyc2VGbG9hdCIsInJlc29sdmVVcmwiLCJiYXNlVXJsIiwiZG9jIiwiaW1wbGVtZW50YXRpb24iLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJiYXNlIiwiaGVhZCIsImEiLCJib2R5IiwiaHJlZiIsImdldEFuZEVuY29kZSIsIm9wdGlvbnMiLCJUSU1FT1VUIiwiY2FjaGVCdXN0IiwidGVzdCIsIkRhdGUiLCJnZXRUaW1lIiwicmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwiZG9uZSIsIm9udGltZW91dCIsInRpbWVvdXQiLCJyZXNwb25zZVR5cGUiLCJvcGVuIiwic2VuZCIsInBsYWNlaG9sZGVyIiwiaW1hZ2VQbGFjZWhvbGRlciIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJmYWlsIiwiZW5jb2RlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWRlbmQiLCJyZXN1bHQiLCJyZWFkQXNEYXRhVVJMIiwicmVzcG9uc2UiLCJlcnJvciIsImNvbmNhdEFuZFJlc29sdmVVcmwiLCJVUkwiLCJzZXRTdHlsZVNoZWV0QmFzZUhyZWYiLCJhZGRCYXNlSHJlZlRvVXJsIiwicDEiLCJ0b1N0eWxlU2hlZXQiLCJ0ZXh0Q29udGVudCIsInNoZWV0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT08sU0FBU0EsWUFBVCxDQUFzQkMsUUFBdEIsRUFBZ0NDLEtBQWhDLEVBQXVDO0FBQzVDLE1BQUksRUFBRUEsS0FBSyxZQUFZQyxtQkFBT0MsT0FBMUIsQ0FBSixFQUF3QztBQUN0QyxXQUFPRixLQUFQO0FBQ0Q7O0FBRUQsV0FBU0csY0FBVCxDQUF3QkMsV0FBeEIsRUFBcUNDLFdBQXJDLEVBQWtEO0FBQ2hELFFBQU1DLFlBQVksR0FBR0MsT0FBTyxDQUFDSCxXQUFELENBQTVCO0FBQ0FFLElBQUFBLFlBQVksQ0FBQ0UsT0FBYixDQUFxQixVQUFBQyxJQUFJLEVBQUk7QUFDM0JKLE1BQUFBLFdBQVcsQ0FBQ0ssV0FBWixDQUNFRCxJQURGLEVBRUVMLFdB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NEIsRUFBZCxJQUFvQkEsRUFBcEIsR0FBeUJKLG1CQUFtQixDQUFDakMsSUFBRCxFQUFPcUMsRUFBUCxDQUF4RDtBQUNBLDBCQUFlcEcsR0FBZjtBQUNEOztBQUNELFNBQU84QixjQUFjLENBQUNDLElBQUQsQ0FBZCxHQUNIQSxJQURHLEdBRUhBLElBQUksQ0FBQ04sT0FBTCxDQUFhLDZCQUFiLEVBQTRDMEUsZ0JBQTVDLENBRko7QUFHRDs7QUFFTSxTQUFTRSxZQUFULENBQXNCdEUsSUFBdEIsRUFBNEI7QUFDakMsTUFBTTZCLEdBQUcsR0FBR2xILHFCQUFTbUgsY0FBVCxDQUF3QkMsa0JBQXhCLENBQTJDLEVBQTNDLENBQVo7O0FBQ0EsTUFBTTVHLFlBQVksR0FBR1IscUJBQVNTLGFBQVQsQ0FBdUIsT0FBdkIsQ0FBckI7O0FBRUFELEVBQUFBLFlBQVksQ0FBQ29KLFdBQWIsR0FBMkJ2RSxJQUEzQjtBQUNBNkIsRUFBQUEsR0FBRyxDQUFDTSxJQUFKLENBQVM5RyxXQUFULENBQXFCRixZQUFyQjtBQUVBLFNBQU9BLFlBQVksQ0FBQ3FKLEtBQXBCO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjMgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQgd2luZG93IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGRvY3VtZW50IGZyb20gJ2dsb2JhbC9kb2N1bWVudCc7XG5pbXBvcnQge0lNQUdFX0VYUE9SVF9FUlJPUlN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDbG9uZShvcmlnaW5hbCwgY2xvbmUpIHtcbiAgaWYgKCEoY2xvbmUgaW5zdGFuY2VvZiB3aW5kb3cuRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5UHJvcGVydGllcyhzb3VyY2VTdHlsZSwgdGFyZ2V0U3R5bGUpIHtcbiAgICBjb25zdCBwcm9wZXJ0eUtleXMgPSBhc0FycmF5KHNvdXJjZVN0eWxlKTtcbiAgICBwcm9wZXJ0eUtleXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgIHRhcmdldFN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBuYW1lLFxuICAgICAgICBzb3VyY2VTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpLFxuICAgICAgICBzb3VyY2VTdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY29weVN0eWxlKHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgaWYgKHNvdXJjZS5jc3NUZXh0KSB7XG4gICAgICB0YXJnZXQuY3NzVGV4dCA9IHNvdXJjZS5jc3NUZXh0O1xuICAgICAgLy8gYWRkIGFkZGl0aW9uYWwgY29weSBvZiBjb21wb3NpdGUgc3R5bGVzXG4gICAgICBpZiAoc291cmNlLmZvbnQpIHtcbiAgICAgICAgdGFyZ2V0LmZvbnQgPSBzb3VyY2UuZm9udDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29weVByb3BlcnRpZXMoc291cmNlLCB0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lU3R5bGUob2csIGNsbikge1xuICAgIGNvbnN0IG9yaWdpbmFsU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvZyk7XG4gICAgY29weVN0eWxlKG9yaWdpbmFsU3R5bGUsIGNsbi5zdHlsZSk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQc2V1ZG9FbGVtZW50U3R5bGUoY2xuLCBlbG0sIHN0bCkge1xuICAgIGNvbnN0IGZvcm1hdENzc1RleHQgPSBzdGwxID0+IHtcbiAgICAgIGNvbnN0IGNudCA9IHN0bDEuZ2V0UHJvcGVydHlWYWx1ZSgnY29udGVudCcpO1xuICAgICAgcmV0dXJuIGAke3N0bC5jc3NUZXh0fSBjb250ZW50OiAke2NudH07YDtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9ybWF0UHJvcGVydHkgPSBuYW1lID0+IHtcbiAgICAgIHJldHVybiBgJHtuYW1lfToke3N0bC5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpfSR7XG4gICAgICAgIHN0bC5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpID8gJyAhaW1wb3J0YW50JyA6ICcnXG4gICAgICB9YDtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9ybWF0Q3NzUHJvcGVydGllcyA9IHN0bDIgPT4ge1xuICAgICAgcmV0dXJuIGAke2FzQXJyYXkoc3RsMilcbiAgICAgICAgLm1hcChmb3JtYXRQcm9wZXJ0eSlcbiAgICAgICAgLmpvaW4oJzsgJyl9O2A7XG4gICAgfTtcblxuICAgIGNvbnN0IHNlbGVjdG9yID0gYC4ke2Nsbn06JHtlbG19YDtcbiAgICBjb25zdCBjc3NUZXh0ID0gc3RsLmNzc1RleHQgPyBmb3JtYXRDc3NUZXh0KHN0bCkgOiBmb3JtYXRDc3NQcm9wZXJ0aWVzKHN0bCk7XG5cbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYCR7c2VsZWN0b3J9eyR7Y3NzVGV4dH19YCk7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9uZVBzZXVkb0VsZW1lbnQob3JnLCBjbG4sIGVsZW1lbnQpIHtcbiAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG9yZywgZWxlbWVudCk7XG4gICAgY29uc3QgY29udGVudCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnQnKTtcblxuICAgIGlmIChjb250ZW50ID09PSAnJyB8fCBjb250ZW50ID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSB1aWQoKTtcbiAgICBjbG4uY2xhc3NOYW1lID0gYCR7Y2xuLmNsYXNzTmFtZX0gJHtjbGFzc05hbWV9YDtcbiAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChmb3JtYXRQc2V1ZG9FbGVtZW50U3R5bGUoY2xhc3NOYW1lLCBlbGVtZW50LCBzdHlsZSkpO1xuICAgIGNsbi5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVQc2V1ZG9FbGVtZW50cyhbb2csIGNsbl0pIHtcbiAgICBbJzpiZWZvcmUnLCAnOmFmdGVyJ10uZm9yRWFjaChlbGVtZW50ID0+IGNsb25lUHNldWRvRWxlbWVudChvZywgY2xuLCBlbGVtZW50KSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5VXNlcklucHV0KFtvZywgY2xuXSkge1xuICAgIGlmIChvZyBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MVGV4dEFyZWFFbGVtZW50KSBjbG4uaW5uZXJIVE1MID0gb2cudmFsdWU7XG4gICAgaWYgKG9nIGluc3RhbmNlb2Ygd2luZG93LkhUTUxJbnB1dEVsZW1lbnQpIGNsbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgb2cudmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZml4U3ZnKGNsbikge1xuICAgIGlmICghKGNsbiBpbnN0YW5jZW9mIHdpbmRvdy5TVkdFbGVtZW50KSkgcmV0dXJuO1xuICAgIGNsbi5zZXRBdHRyaWJ1dGUoJ3htbG5zJywgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyk7XG5cbiAgICBpZiAoIShjbG4gaW5zdGFuY2VvZiB3aW5kb3cuU1ZHUmVjdEVsZW1lbnQpKSByZXR1cm47XG4gICAgWyd3aWR0aCcsICdoZWlnaHQnXS5mb3JFYWNoKGF0dHJpYnV0ZSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNsbi5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgICAgY2xuLnN0eWxlLnNldFByb3BlcnR5KGF0dHJpYnV0ZSwgdmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbb3JpZ2luYWwsIGNsb25lXSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiB7XG4gICAgICBjbG9uZVN0eWxlKG9nLCBjbG4pO1xuICAgICAgcmV0dXJuIFtvZywgY2xuXTtcbiAgICB9KVxuICAgIC50aGVuKChbb2csIGNsbl0pID0+IHtcbiAgICAgIGNsb25lUHNldWRvRWxlbWVudHMoW29nLCBjbG5dKTtcbiAgICAgIHJldHVybiBbb2csIGNsbl07XG4gICAgfSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiB7XG4gICAgICBjb3B5VXNlcklucHV0KFtvZywgY2xuXSk7XG4gICAgICByZXR1cm4gW29nLCBjbG5dO1xuICAgIH0pXG4gICAgLnRoZW4oKFtvZywgY2xuXSkgPT4ge1xuICAgICAgZml4U3ZnKGNsbik7XG4gICAgICByZXR1cm4gW29nLCBjbG5dO1xuICAgIH0pXG4gICAgLnRoZW4oKFtvZywgY2xuXSkgPT4gY2xuKTtcbn1cblxuLyoqKipcbiAqIFVUSUxTXG4gKioqKi9cbmV4cG9ydCBmdW5jdGlvbiBhc0FycmF5KGFycmF5TGlrZSkge1xuICBjb25zdCBhcnJheTogYW55W10gPSBbXTtcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXlMaWtlLmxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgYXJyYXkucHVzaChhcnJheUxpa2VbaV0pO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VyUmFuZG9tQ2hhcnMoKSB7XG4gIHJldHVybiBgMDAwMCR7KChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMzYsIDQpKSA8PCAwKS50b1N0cmluZygzNil9YC5zbGljZSgtNCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1aWQoKSB7XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIGB1JHtmb3VyUmFuZG9tQ2hhcnMoKX0ke2luZGV4Kyt9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VJbWFnZSh1cmkpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBpbWFnZSA9IG5ldyB3aW5kb3cuSW1hZ2UoKTtcbiAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKGltYWdlKTtcbiAgICB9O1xuICAgIGltYWdlLm9uZXJyb3IgPSBlcnIgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IElNQUdFX0VYUE9SVF9FUlJPUlMuZGF0YVVyaTtcbiAgICAgIENvbnNvbGUubG9nKHVyaSk7XG4gICAgICAvLyBlcnJvciBpcyBhbiBFdmVudCBPYmplY3RcbiAgICAgIC8vIGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvb2JqX2V2ZW50LmFzcFxuICAgICAgcmVqZWN0KHtldmVudDogZXJyLCBtZXNzYWdlfSk7XG4gICAgfTtcbiAgICBpbWFnZS5zcmMgPSB1cmk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhVXJsKHVybCkge1xuICByZXR1cm4gdXJsLnNlYXJjaCgvXihkYXRhOikvKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXh0ZW5zaW9uKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9cXC4oW15cXC5cXC9dKj8pJC9nLmV4ZWModXJsKTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIG1hdGNoWzFdO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gbWltZXMoKSB7XG4gIC8qXG4gICAqIE9ubHkgV09GRiBhbmQgRU9UIG1pbWUgdHlwZXMgZm9yIGZvbnRzIGFyZSAncmVhbCdcbiAgICogc2VlIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWxcbiAgICovXG4gIGNvbnN0IFdPRkYgPSAnYXBwbGljYXRpb24vZm9udC13b2ZmJztcbiAgY29uc3QgSlBFRyA9ICdpbWFnZS9qcGVnJztcblxuICByZXR1cm4ge1xuICAgIHdvZmY6IFdPRkYsXG4gICAgd29mZjI6IFdPRkYsXG4gICAgdHRmOiAnYXBwbGljYXRpb24vZm9udC10cnVldHlwZScsXG4gICAgZW90OiAnYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QnLFxuICAgIHBuZzogJ2ltYWdlL3BuZycsXG4gICAganBnOiBKUEVHLFxuICAgIGpwZWc6IEpQRUcsXG4gICAgZ2lmOiAnaW1hZ2UvZ2lmJyxcbiAgICB0aWZmOiAnaW1hZ2UvdGlmZicsXG4gICAgc3ZnOiAnaW1hZ2Uvc3ZnK3htbCdcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbWVUeXBlKHVybCkge1xuICBjb25zdCBleHRlbnNpb24gPSBwYXJzZUV4dGVuc2lvbih1cmwpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBtaW1lcygpW2V4dGVuc2lvbl0gfHwgJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRhQXNVcmwoY29udGVudCwgdHlwZSkge1xuICByZXR1cm4gYGRhdGE6JHt0eXBlfTtiYXNlNjQsJHtjb250ZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFsuKis/XiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxheShtcykge1xuICByZXR1cm4gYXJnID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoYXJnKTtcbiAgICAgIH0sIG1zKTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3JjQXNEYXRhVXJsKHRleHQpIHtcbiAgY29uc3QgREFUQV9VUkxfUkVHRVggPSAvdXJsXFwoWydcIl0/KGRhdGE6KShbXidcIl0rPylbJ1wiXT9cXCkvO1xuICByZXR1cm4gdGV4dC5zZWFyY2goREFUQV9VUkxfUkVHRVgpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gY3ZUb0Jsb2IoY2FudmFzKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSB3aW5kb3cuYXRvYihjYW52YXMudG9EYXRhVVJMKCkuc3BsaXQoJywnKVsxXSk7XG4gICAgY29uc3QgbGVuZ3RoID0gYmluYXJ5U3RyaW5nLmxlbmd0aDtcbiAgICBjb25zdCBiaW5hcnlBcnJheSA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBiaW5hcnlBcnJheVtpXSA9IGJpbmFyeVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuXG4gICAgcmVzb2x2ZShuZXcgd2luZG93LkJsb2IoW2JpbmFyeUFycmF5XSwge3R5cGU6ICdpbWFnZS9wbmcnfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbnZhc1RvQmxvYihjYW52YXMpIHtcbiAgaWYgKGNhbnZhcy50b0Jsb2IpXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgY2FudmFzLnRvQmxvYihyZXNvbHZlKTtcbiAgICB9KTtcblxuICByZXR1cm4gY3ZUb0Jsb2IoY2FudmFzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVhodG1sKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyMvZywgJyUyMycpLnJlcGxhY2UoL1xcbi9nLCAnJTBBJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXaWR0aChub2RlKSB7XG4gIGNvbnN0IGxlZnRCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbiAgY29uc3QgcmlnaHRCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLXJpZ2h0LXdpZHRoJyk7XG4gIHJldHVybiBub2RlLnNjcm9sbFdpZHRoICsgbGVmdEJvcmRlciArIHJpZ2h0Qm9yZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVpZ2h0KG5vZGUpIHtcbiAgY29uc3QgdG9wQm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci10b3Atd2lkdGgnKTtcbiAgY29uc3QgYm90dG9tQm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci1ib3R0b20td2lkdGgnKTtcbiAgcmV0dXJuIG5vZGUuc2Nyb2xsSGVpZ2h0ICsgdG9wQm9yZGVyICsgYm90dG9tQm9yZGVyO1xufVxuXG5mdW5jdGlvbiBweChub2RlLCBzdHlsZVByb3BlcnR5KSB7XG4gIGNvbnN0IHZhbHVlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgncHgnLCAnJykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVVybCh1cmwsIGJhc2VVcmwpIHtcbiAgY29uc3QgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCk7XG4gIGNvbnN0IGJhc2UgPSBkb2MuY3JlYXRlRWxlbWVudCgnYmFzZScpO1xuICBkb2MuaGVhZC5hcHBlbmRDaGlsZChiYXNlKTtcbiAgY29uc3QgYSA9IGRvYy5jcmVhdGVFbGVtZW50KCdhJyk7XG4gIGRvYy5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICBiYXNlLmhyZWYgPSBiYXNlVXJsO1xuICBhLmhyZWYgPSB1cmw7XG4gIHJldHVybiBhLmhyZWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmRFbmNvZGUodXJsLCBvcHRpb25zKSB7XG4gIGNvbnN0IFRJTUVPVVQgPSAzMDAwMDtcbiAgaWYgKG9wdGlvbnMuY2FjaGVCdXN0KSB7XG4gICAgLy8gQ2FjaGUgYnlwYXNzIHNvIHdlIGRvbnQgaGF2ZSBDT1JTIGlzc3VlcyB3aXRoIGNhY2hlZCBpbWFnZXNcbiAgICAvLyBTb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0FQSS9YTUxIdHRwUmVxdWVzdC9Vc2luZ19YTUxIdHRwUmVxdWVzdCNCeXBhc3NpbmdfdGhlX2NhY2hlXG4gICAgdXJsICs9ICgvXFw/Ly50ZXN0KHVybCkgPyAnJicgOiAnPycpICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZG9uZTtcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IHRpbWVvdXQ7XG4gICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG4gICAgcmVxdWVzdC50aW1lb3V0ID0gVElNRU9VVDtcbiAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7XG4gICAgcmVxdWVzdC5zZW5kKCk7XG5cbiAgICBsZXQgcGxhY2Vob2xkZXI7XG4gICAgaWYgKG9wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlcikge1xuICAgICAgY29uc3Qgc3BsaXQgPSBvcHRpb25zLmltYWdlUGxhY2Vob2xkZXIuc3BsaXQoLywvKTtcbiAgICAgIGlmIChzcGxpdCAmJiBzcGxpdFsxXSkge1xuICAgICAgICBwbGFjZWhvbGRlciA9IHNwbGl0WzFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSByZXR1cm47XG5cbiAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgICAgIHJlc29sdmUocGxhY2Vob2xkZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZhaWwoYGNhbm5vdCBmZXRjaCByZXNvdXJjZTogJHt1cmx9LCBzdGF0dXM6ICR7cmVxdWVzdC5zdGF0dXN9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgd2luZG93LkZpbGVSZWFkZXIoKTtcbiAgICAgIGVuY29kZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZW5jb2Rlci5yZXN1bHQuc3BsaXQoLywvKVsxXTtcbiAgICAgICAgcmVzb2x2ZShjb250ZW50KTtcbiAgICAgIH07XG4gICAgICBlbmNvZGVyLnJlYWRBc0RhdGFVUkwocmVxdWVzdC5yZXNwb25zZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGltZW91dCgpIHtcbiAgICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgICByZXNvbHZlKHBsYWNlaG9sZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZhaWwoYHRpbWVvdXQgb2YgJHtUSU1FT1VUfW1zIG9jY3VycmVkIHdoaWxlIGZldGNoaW5nIHJlc291cmNlOiAke3VybH1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmYWlsKG1lc3NhZ2UpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICByZXNvbHZlKCcnKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0QW5kUmVzb2x2ZVVybChiYXNlLCB1cmwpIHtcbiAgcmV0dXJuIG5ldyBVUkwodXJsLCBiYXNlKS5ocmVmO1xufVxuXG4vLyBTZXQgcmVsYXRpdmUgVVJMIGluIHN0eWxlc2hlZXQgdG8gYWJzb2x1dGUgdXJsXG5leHBvcnQgZnVuY3Rpb24gc2V0U3R5bGVTaGVldEJhc2VIcmVmKHRleHQsIGJhc2UpIHtcbiAgZnVuY3Rpb24gYWRkQmFzZUhyZWZUb1VybChtYXRjaCwgcDEpIHtcbiAgICBjb25zdCB1cmwgPSAvXmh0dHAvaS50ZXN0KHAxKSA/IHAxIDogY29uY2F0QW5kUmVzb2x2ZVVybChiYXNlLCBwMSk7XG4gICAgcmV0dXJuIGB1cmwoJyR7dXJsfScpYDtcbiAgfVxuICByZXR1cm4gaXNTcmNBc0RhdGFVcmwodGV4dClcbiAgICA/IHRleHRcbiAgICA6IHRleHQucmVwbGFjZSgvdXJsXFwoWydcIl0/KFteJ1wiXSs/KVsnXCJdP1xcKS9nLCBhZGRCYXNlSHJlZlRvVXJsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3R5bGVTaGVldCh0ZXh0KSB7XG4gIGNvbnN0IGRvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgnJyk7XG4gIGNvbnN0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cbiAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDtcbiAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcblxuICByZXR1cm4gc3R5bGVFbGVtZW50LnNoZWV0O1xufVxuIl19
|
434
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kb20tdXRpbHMudHMiXSwibmFtZXMiOlsicHJvY2Vzc0Nsb25lIiwib3JpZ2luYWwiLCJjbG9uZSIsIndpbmRvdyIsIkVsZW1lbnQiLCJjb3B5UHJvcGVydGllcyIsInNvdXJjZVN0eWxlIiwidGFyZ2V0U3R5bGUiLCJwcm9wZXJ0eUtleXMiLCJhc0FycmF5IiwiZm9yRWFjaCIsIm5hbWUiLCJzZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5VmFsdWUiLCJnZXRQcm9wZXJ0eVByaW9yaXR5IiwiY29weVN0eWxlIiwic291cmNlIiwidGFyZ2V0IiwiY3NzVGV4dCIsImZvbnQiLCJjbG9uZVN0eWxlIiwib2ciLCJjbG4iLCJvcmlnaW5hbFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInN0eWxlIiwiZm9ybWF0UHNldWRvRWxlbWVudFN0eWxlIiwiZWxtIiwic3RsIiwiZm9ybWF0Q3NzVGV4dCIsInN0bDEiLCJjbnQiLCJmb3JtYXRQcm9wZXJ0eSIsImZvcm1hdENzc1Byb3BlcnRpZXMiLCJzdGwyIiwibWFwIiwiam9pbiIsInNlbGVjdG9yIiwiZG9jdW1lbnQiLCJjcmVhdGVUZXh0Tm9kZSIsImNsb25lUHNldWRvRWxlbWVudCIsIm9yZyIsImVsZW1lbnQiLCJjb250ZW50IiwiY2xhc3NOYW1lIiwidWlkIiwic3R5bGVFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImFwcGVuZENoaWxkIiwiY2xvbmVQc2V1ZG9FbGVtZW50cyIsImNvcHlVc2VySW5wdXQiLCJIVE1MVGV4dEFyZWFFbGVtZW50IiwiaW5uZXJIVE1MIiwidmFsdWUiLCJIVE1MSW5wdXRFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiZml4U3ZnIiwiU1ZHRWxlbWVudCIsIlNWR1JlY3RFbGVtZW50IiwiYXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiYXJyYXlMaWtlIiwiYXJyYXkiLCJsZW5ndGgiLCJpIiwicHVzaCIsImZvdXJSYW5kb21DaGFycyIsIk1hdGgiLCJyYW5kb20iLCJwb3ciLCJ0b1N0cmluZyIsInNsaWNlIiwiaW5kZXgiLCJtYWtlSW1hZ2UiLCJ1cmkiLCJyZWplY3QiLCJpbWFnZSIsIkltYWdlIiwib25sb2FkIiwib25lcnJvciIsImVyciIsIm1lc3NhZ2UiLCJJTUFHRV9FWFBPUlRfRVJST1JTIiwiZGF0YVVyaSIsIkNvbnNvbGUiLCJsb2ciLCJldmVudCIsInNyYyIsImlzRGF0YVVybCIsInVybCIsInNlYXJjaCIsInBhcnNlRXh0ZW5zaW9uIiwibWF0Y2giLCJleGVjIiwibWltZXMiLCJXT0ZGIiwiSlBFRyIsIndvZmYiLCJ3b2ZmMiIsInR0ZiIsImVvdCIsInBuZyIsImpwZyIsImpwZWciLCJnaWYiLCJ0aWZmIiwic3ZnIiwibWltZVR5cGUiLCJleHRlbnNpb24iLCJ0b0xvd2VyQ2FzZSIsImRhdGFBc1VybCIsInR5cGUiLCJlc2NhcGUiLCJzdHJpbmciLCJyZXBsYWNlIiwiZGVsYXkiLCJtcyIsImFyZyIsInNldFRpbWVvdXQiLCJpc1NyY0FzRGF0YVVybCIsInRleHQiLCJEQVRBX1VSTF9SRUdFWCIsImN2VG9CbG9iIiwiY2FudmFzIiwiYmluYXJ5U3RyaW5nIiwiYXRvYiIsInRvRGF0YVVSTCIsInNwbGl0IiwiYmluYXJ5QXJyYXkiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsIkJsb2IiLCJjYW52YXNUb0Jsb2IiLCJ0b0Jsb2IiLCJlc2NhcGVYaHRtbCIsImdldFdpZHRoIiwibm9kZSIsImxlZnRCb3JkZXIiLCJweCIsInJpZ2h0Qm9yZGVyIiwic2Nyb2xsV2lkdGgiLCJnZXRIZWlnaHQiLCJ0b3BCb3JkZXIiLCJib3R0b21Cb3JkZXIiLCJzY3JvbGxIZWlnaHQiLCJzdHlsZVByb3BlcnR5IiwicGFyc2VGbG9hdCIsInJlc29sdmVVcmwiLCJiYXNlVXJsIiwiZG9jIiwiaW1wbGVtZW50YXRpb24iLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJiYXNlIiwiaGVhZCIsImEiLCJib2R5IiwiaHJlZiIsImdldEFuZEVuY29kZSIsIm9wdGlvbnMiLCJUSU1FT1VUIiwiY2FjaGVCdXN0IiwidGVzdCIsIkRhdGUiLCJnZXRUaW1lIiwicmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwiZG9uZSIsIm9udGltZW91dCIsInRpbWVvdXQiLCJyZXNwb25zZVR5cGUiLCJvcGVuIiwic2VuZCIsInBsYWNlaG9sZGVyIiwiaW1hZ2VQbGFjZWhvbGRlciIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJmYWlsIiwiZW5jb2RlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWRlbmQiLCJyZXN1bHQiLCJyZWFkQXNEYXRhVVJMIiwicmVzcG9uc2UiLCJlcnJvciIsImNvbmNhdEFuZFJlc29sdmVVcmwiLCJVUkwiLCJzZXRTdHlsZVNoZWV0QmFzZUhyZWYiLCJhZGRCYXNlSHJlZlRvVXJsIiwicDEiLCJ0b1N0eWxlU2hlZXQiLCJ0ZXh0Q29udGVudCIsInNoZWV0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFOQTtBQUNBO0FBT08sU0FBU0EsWUFBVCxDQUFzQkMsUUFBdEIsRUFBZ0NDLEtBQWhDLEVBQXVDO0FBQzVDLE1BQUksRUFBRUEsS0FBSyxZQUFZQyxtQkFBT0MsT0FBMUIsQ0FBSixFQUF3QztBQUN0QyxXQUFPRixLQUFQO0FBQ0Q7O0FBRUQsV0FBU0csY0FBVCxDQUF3QkMsV0FBeEIsRUFBcUNDLFdBQXJDLEVBQWtEO0FBQ2hELFFBQU1DLFlBQVksR0FBR0MsT0FBTyxDQUFDSCxXQUFELENBQTVCO0FBQ0FFLElBQUFBLFlBQVksQ0FBQ0UsT0FBYixDQUFxQixVQUFBQyxJQUFJLEVBQUk7QUFDM0JKLE1BQUFBLFdBQVcsQ0FBQ0ssV0FBWixDQUNFRCxJQURGLEVBRUVMLFdBQVcsQ0FBQ08sZ0JBQVosQ0FBNkJGLElBQTdCLENBRkYsRUFHRUwsV0FBVyxDQUFDUSxtQkFBWixDQUFnQ0gsSUFBaEMsQ0FIRjtBQUtELEtBTkQ7QUFP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OztBQUNELFNBQU84QixjQUFjLENBQUNDLElBQUQsQ0FBZCxHQUNIQSxJQURHLEdBRUhBLElBQUksQ0FBQ04sT0FBTCxDQUFhLDZCQUFiLEVBQTRDMEUsZ0JBQTVDLENBRko7QUFHRDs7QUFFTSxTQUFTRSxZQUFULENBQXNCdEUsSUFBdEIsRUFBNEI7QUFDakMsTUFBTTZCLEdBQUcsR0FBR2xILHFCQUFTbUgsY0FBVCxDQUF3QkMsa0JBQXhCLENBQTJDLEVBQTNDLENBQVo7O0FBQ0EsTUFBTTVHLFlBQVksR0FBR1IscUJBQVNTLGFBQVQsQ0FBdUIsT0FBdkIsQ0FBckI7O0FBRUFELEVBQUFBLFlBQVksQ0FBQ29KLFdBQWIsR0FBMkJ2RSxJQUEzQjtBQUNBNkIsRUFBQUEsR0FBRyxDQUFDTSxJQUFKLENBQVM5RyxXQUFULENBQXFCRixZQUFyQjtBQUVBLFNBQU9BLFlBQVksQ0FBQ3FKLEtBQXBCO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQgd2luZG93IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGRvY3VtZW50IGZyb20gJ2dsb2JhbC9kb2N1bWVudCc7XG5pbXBvcnQge0lNQUdFX0VYUE9SVF9FUlJPUlN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDbG9uZShvcmlnaW5hbCwgY2xvbmUpIHtcbiAgaWYgKCEoY2xvbmUgaW5zdGFuY2VvZiB3aW5kb3cuRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5UHJvcGVydGllcyhzb3VyY2VTdHlsZSwgdGFyZ2V0U3R5bGUpIHtcbiAgICBjb25zdCBwcm9wZXJ0eUtleXMgPSBhc0FycmF5KHNvdXJjZVN0eWxlKTtcbiAgICBwcm9wZXJ0eUtleXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgIHRhcmdldFN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBuYW1lLFxuICAgICAgICBzb3VyY2VTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpLFxuICAgICAgICBzb3VyY2VTdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY29weVN0eWxlKHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgaWYgKHNvdXJjZS5jc3NUZXh0KSB7XG4gICAgICB0YXJnZXQuY3NzVGV4dCA9IHNvdXJjZS5jc3NUZXh0O1xuICAgICAgLy8gYWRkIGFkZGl0aW9uYWwgY29weSBvZiBjb21wb3NpdGUgc3R5bGVzXG4gICAgICBpZiAoc291cmNlLmZvbnQpIHtcbiAgICAgICAgdGFyZ2V0LmZvbnQgPSBzb3VyY2UuZm9udDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29weVByb3BlcnRpZXMoc291cmNlLCB0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lU3R5bGUob2csIGNsbikge1xuICAgIGNvbnN0IG9yaWdpbmFsU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvZyk7XG4gICAgY29weVN0eWxlKG9yaWdpbmFsU3R5bGUsIGNsbi5zdHlsZSk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQc2V1ZG9FbGVtZW50U3R5bGUoY2xuLCBlbG0sIHN0bCkge1xuICAgIGNvbnN0IGZvcm1hdENzc1RleHQgPSBzdGwxID0+IHtcbiAgICAgIGNvbnN0IGNudCA9IHN0bDEuZ2V0UHJvcGVydHlWYWx1ZSgnY29udGVudCcpO1xuICAgICAgcmV0dXJuIGAke3N0bC5jc3NUZXh0fSBjb250ZW50OiAke2NudH07YDtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9ybWF0UHJvcGVydHkgPSBuYW1lID0+IHtcbiAgICAgIHJldHVybiBgJHtuYW1lfToke3N0bC5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpfSR7XG4gICAgICAgIHN0bC5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpID8gJyAhaW1wb3J0YW50JyA6ICcnXG4gICAgICB9YDtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9ybWF0Q3NzUHJvcGVydGllcyA9IHN0bDIgPT4ge1xuICAgICAgcmV0dXJuIGAke2FzQXJyYXkoc3RsMilcbiAgICAgICAgLm1hcChmb3JtYXRQcm9wZXJ0eSlcbiAgICAgICAgLmpvaW4oJzsgJyl9O2A7XG4gICAgfTtcblxuICAgIGNvbnN0IHNlbGVjdG9yID0gYC4ke2Nsbn06JHtlbG19YDtcbiAgICBjb25zdCBjc3NUZXh0ID0gc3RsLmNzc1RleHQgPyBmb3JtYXRDc3NUZXh0KHN0bCkgOiBmb3JtYXRDc3NQcm9wZXJ0aWVzKHN0bCk7XG5cbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYCR7c2VsZWN0b3J9eyR7Y3NzVGV4dH19YCk7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9uZVBzZXVkb0VsZW1lbnQob3JnLCBjbG4sIGVsZW1lbnQpIHtcbiAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG9yZywgZWxlbWVudCk7XG4gICAgY29uc3QgY29udGVudCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnQnKTtcblxuICAgIGlmIChjb250ZW50ID09PSAnJyB8fCBjb250ZW50ID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSB1aWQoKTtcbiAgICBjbG4uY2xhc3NOYW1lID0gYCR7Y2xuLmNsYXNzTmFtZX0gJHtjbGFzc05hbWV9YDtcbiAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChmb3JtYXRQc2V1ZG9FbGVtZW50U3R5bGUoY2xhc3NOYW1lLCBlbGVtZW50LCBzdHlsZSkpO1xuICAgIGNsbi5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVQc2V1ZG9FbGVtZW50cyhbb2csIGNsbl0pIHtcbiAgICBbJzpiZWZvcmUnLCAnOmFmdGVyJ10uZm9yRWFjaChlbGVtZW50ID0+IGNsb25lUHNldWRvRWxlbWVudChvZywgY2xuLCBlbGVtZW50KSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5VXNlcklucHV0KFtvZywgY2xuXSkge1xuICAgIGlmIChvZyBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MVGV4dEFyZWFFbGVtZW50KSBjbG4uaW5uZXJIVE1MID0gb2cudmFsdWU7XG4gICAgaWYgKG9nIGluc3RhbmNlb2Ygd2luZG93LkhUTUxJbnB1dEVsZW1lbnQpIGNsbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgb2cudmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZml4U3ZnKGNsbikge1xuICAgIGlmICghKGNsbiBpbnN0YW5jZW9mIHdpbmRvdy5TVkdFbGVtZW50KSkgcmV0dXJuO1xuICAgIGNsbi5zZXRBdHRyaWJ1dGUoJ3htbG5zJywgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyk7XG5cbiAgICBpZiAoIShjbG4gaW5zdGFuY2VvZiB3aW5kb3cuU1ZHUmVjdEVsZW1lbnQpKSByZXR1cm47XG4gICAgWyd3aWR0aCcsICdoZWlnaHQnXS5mb3JFYWNoKGF0dHJpYnV0ZSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNsbi5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgICAgY2xuLnN0eWxlLnNldFByb3BlcnR5KGF0dHJpYnV0ZSwgdmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbb3JpZ2luYWwsIGNsb25lXSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiB7XG4gICAgICBjbG9uZVN0eWxlKG9nLCBjbG4pO1xuICAgICAgcmV0dXJuIFtvZywgY2xuXTtcbiAgICB9KVxuICAgIC50aGVuKChbb2csIGNsbl0pID0+IHtcbiAgICAgIGNsb25lUHNldWRvRWxlbWVudHMoW29nLCBjbG5dKTtcbiAgICAgIHJldHVybiBbb2csIGNsbl07XG4gICAgfSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiB7XG4gICAgICBjb3B5VXNlcklucHV0KFtvZywgY2xuXSk7XG4gICAgICByZXR1cm4gW29nLCBjbG5dO1xuICAgIH0pXG4gICAgLnRoZW4oKFtvZywgY2xuXSkgPT4ge1xuICAgICAgZml4U3ZnKGNsbik7XG4gICAgICByZXR1cm4gW29nLCBjbG5dO1xuICAgIH0pXG4gICAgLnRoZW4oKFtvZywgY2xuXSkgPT4gY2xuKTtcbn1cblxuLyoqKipcbiAqIFVUSUxTXG4gKioqKi9cbmV4cG9ydCBmdW5jdGlvbiBhc0FycmF5KGFycmF5TGlrZSkge1xuICBjb25zdCBhcnJheTogYW55W10gPSBbXTtcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXlMaWtlLmxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgYXJyYXkucHVzaChhcnJheUxpa2VbaV0pO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VyUmFuZG9tQ2hhcnMoKSB7XG4gIHJldHVybiBgMDAwMCR7KChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMzYsIDQpKSA8PCAwKS50b1N0cmluZygzNil9YC5zbGljZSgtNCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1aWQoKSB7XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIGB1JHtmb3VyUmFuZG9tQ2hhcnMoKX0ke2luZGV4Kyt9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VJbWFnZSh1cmkpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBpbWFnZSA9IG5ldyB3aW5kb3cuSW1hZ2UoKTtcbiAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKGltYWdlKTtcbiAgICB9O1xuICAgIGltYWdlLm9uZXJyb3IgPSBlcnIgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IElNQUdFX0VYUE9SVF9FUlJPUlMuZGF0YVVyaTtcbiAgICAgIENvbnNvbGUubG9nKHVyaSk7XG4gICAgICAvLyBlcnJvciBpcyBhbiBFdmVudCBPYmplY3RcbiAgICAgIC8vIGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvb2JqX2V2ZW50LmFzcFxuICAgICAgcmVqZWN0KHtldmVudDogZXJyLCBtZXNzYWdlfSk7XG4gICAgfTtcbiAgICBpbWFnZS5zcmMgPSB1cmk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhVXJsKHVybCkge1xuICByZXR1cm4gdXJsLnNlYXJjaCgvXihkYXRhOikvKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXh0ZW5zaW9uKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9cXC4oW15cXC5cXC9dKj8pJC9nLmV4ZWModXJsKTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIG1hdGNoWzFdO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gbWltZXMoKSB7XG4gIC8qXG4gICAqIE9ubHkgV09GRiBhbmQgRU9UIG1pbWUgdHlwZXMgZm9yIGZvbnRzIGFyZSAncmVhbCdcbiAgICogc2VlIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWxcbiAgICovXG4gIGNvbnN0IFdPRkYgPSAnYXBwbGljYXRpb24vZm9udC13b2ZmJztcbiAgY29uc3QgSlBFRyA9ICdpbWFnZS9qcGVnJztcblxuICByZXR1cm4ge1xuICAgIHdvZmY6IFdPRkYsXG4gICAgd29mZjI6IFdPRkYsXG4gICAgdHRmOiAnYXBwbGljYXRpb24vZm9udC10cnVldHlwZScsXG4gICAgZW90OiAnYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QnLFxuICAgIHBuZzogJ2ltYWdlL3BuZycsXG4gICAganBnOiBKUEVHLFxuICAgIGpwZWc6IEpQRUcsXG4gICAgZ2lmOiAnaW1hZ2UvZ2lmJyxcbiAgICB0aWZmOiAnaW1hZ2UvdGlmZicsXG4gICAgc3ZnOiAnaW1hZ2Uvc3ZnK3htbCdcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbWVUeXBlKHVybCkge1xuICBjb25zdCBleHRlbnNpb24gPSBwYXJzZUV4dGVuc2lvbih1cmwpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBtaW1lcygpW2V4dGVuc2lvbl0gfHwgJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRhQXNVcmwoY29udGVudCwgdHlwZSkge1xuICByZXR1cm4gYGRhdGE6JHt0eXBlfTtiYXNlNjQsJHtjb250ZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFsuKis/XiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxheShtcykge1xuICByZXR1cm4gYXJnID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoYXJnKTtcbiAgICAgIH0sIG1zKTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3JjQXNEYXRhVXJsKHRleHQpIHtcbiAgY29uc3QgREFUQV9VUkxfUkVHRVggPSAvdXJsXFwoWydcIl0/KGRhdGE6KShbXidcIl0rPylbJ1wiXT9cXCkvO1xuICByZXR1cm4gdGV4dC5zZWFyY2goREFUQV9VUkxfUkVHRVgpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gY3ZUb0Jsb2IoY2FudmFzKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSB3aW5kb3cuYXRvYihjYW52YXMudG9EYXRhVVJMKCkuc3BsaXQoJywnKVsxXSk7XG4gICAgY29uc3QgbGVuZ3RoID0gYmluYXJ5U3RyaW5nLmxlbmd0aDtcbiAgICBjb25zdCBiaW5hcnlBcnJheSA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBiaW5hcnlBcnJheVtpXSA9IGJpbmFyeVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuXG4gICAgcmVzb2x2ZShuZXcgd2luZG93LkJsb2IoW2JpbmFyeUFycmF5XSwge3R5cGU6ICdpbWFnZS9wbmcnfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbnZhc1RvQmxvYihjYW52YXMpIHtcbiAgaWYgKGNhbnZhcy50b0Jsb2IpXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgY2FudmFzLnRvQmxvYihyZXNvbHZlKTtcbiAgICB9KTtcblxuICByZXR1cm4gY3ZUb0Jsb2IoY2FudmFzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVhodG1sKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyMvZywgJyUyMycpLnJlcGxhY2UoL1xcbi9nLCAnJTBBJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXaWR0aChub2RlKSB7XG4gIGNvbnN0IGxlZnRCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbiAgY29uc3QgcmlnaHRCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLXJpZ2h0LXdpZHRoJyk7XG4gIHJldHVybiBub2RlLnNjcm9sbFdpZHRoICsgbGVmdEJvcmRlciArIHJpZ2h0Qm9yZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVpZ2h0KG5vZGUpIHtcbiAgY29uc3QgdG9wQm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci10b3Atd2lkdGgnKTtcbiAgY29uc3QgYm90dG9tQm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci1ib3R0b20td2lkdGgnKTtcbiAgcmV0dXJuIG5vZGUuc2Nyb2xsSGVpZ2h0ICsgdG9wQm9yZGVyICsgYm90dG9tQm9yZGVyO1xufVxuXG5mdW5jdGlvbiBweChub2RlLCBzdHlsZVByb3BlcnR5KSB7XG4gIGNvbnN0IHZhbHVlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgncHgnLCAnJykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVVybCh1cmwsIGJhc2VVcmwpIHtcbiAgY29uc3QgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCk7XG4gIGNvbnN0IGJhc2UgPSBkb2MuY3JlYXRlRWxlbWVudCgnYmFzZScpO1xuICBkb2MuaGVhZC5hcHBlbmRDaGlsZChiYXNlKTtcbiAgY29uc3QgYSA9IGRvYy5jcmVhdGVFbGVtZW50KCdhJyk7XG4gIGRvYy5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICBiYXNlLmhyZWYgPSBiYXNlVXJsO1xuICBhLmhyZWYgPSB1cmw7XG4gIHJldHVybiBhLmhyZWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmRFbmNvZGUodXJsLCBvcHRpb25zKSB7XG4gIGNvbnN0IFRJTUVPVVQgPSAzMDAwMDtcbiAgaWYgKG9wdGlvbnMuY2FjaGVCdXN0KSB7XG4gICAgLy8gQ2FjaGUgYnlwYXNzIHNvIHdlIGRvbnQgaGF2ZSBDT1JTIGlzc3VlcyB3aXRoIGNhY2hlZCBpbWFnZXNcbiAgICAvLyBTb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0FQSS9YTUxIdHRwUmVxdWVzdC9Vc2luZ19YTUxIdHRwUmVxdWVzdCNCeXBhc3NpbmdfdGhlX2NhY2hlXG4gICAgdXJsICs9ICgvXFw/Ly50ZXN0KHVybCkgPyAnJicgOiAnPycpICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZG9uZTtcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IHRpbWVvdXQ7XG4gICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG4gICAgcmVxdWVzdC50aW1lb3V0ID0gVElNRU9VVDtcbiAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7XG4gICAgcmVxdWVzdC5zZW5kKCk7XG5cbiAgICBsZXQgcGxhY2Vob2xkZXI7XG4gICAgaWYgKG9wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlcikge1xuICAgICAgY29uc3Qgc3BsaXQgPSBvcHRpb25zLmltYWdlUGxhY2Vob2xkZXIuc3BsaXQoLywvKTtcbiAgICAgIGlmIChzcGxpdCAmJiBzcGxpdFsxXSkge1xuICAgICAgICBwbGFjZWhvbGRlciA9IHNwbGl0WzFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSByZXR1cm47XG5cbiAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgICAgIHJlc29sdmUocGxhY2Vob2xkZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZhaWwoYGNhbm5vdCBmZXRjaCByZXNvdXJjZTogJHt1cmx9LCBzdGF0dXM6ICR7cmVxdWVzdC5zdGF0dXN9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgd2luZG93LkZpbGVSZWFkZXIoKTtcbiAgICAgIGVuY29kZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZW5jb2Rlci5yZXN1bHQuc3BsaXQoLywvKVsxXTtcbiAgICAgICAgcmVzb2x2ZShjb250ZW50KTtcbiAgICAgIH07XG4gICAgICBlbmNvZGVyLnJlYWRBc0RhdGFVUkwocmVxdWVzdC5yZXNwb25zZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGltZW91dCgpIHtcbiAgICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgICByZXNvbHZlKHBsYWNlaG9sZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZhaWwoYHRpbWVvdXQgb2YgJHtUSU1FT1VUfW1zIG9jY3VycmVkIHdoaWxlIGZldGNoaW5nIHJlc291cmNlOiAke3VybH1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmYWlsKG1lc3NhZ2UpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICByZXNvbHZlKCcnKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0QW5kUmVzb2x2ZVVybChiYXNlLCB1cmwpIHtcbiAgcmV0dXJuIG5ldyBVUkwodXJsLCBiYXNlKS5ocmVmO1xufVxuXG4vLyBTZXQgcmVsYXRpdmUgVVJMIGluIHN0eWxlc2hlZXQgdG8gYWJzb2x1dGUgdXJsXG5leHBvcnQgZnVuY3Rpb24gc2V0U3R5bGVTaGVldEJhc2VIcmVmKHRleHQsIGJhc2UpIHtcbiAgZnVuY3Rpb24gYWRkQmFzZUhyZWZUb1VybChtYXRjaCwgcDEpIHtcbiAgICBjb25zdCB1cmwgPSAvXmh0dHAvaS50ZXN0KHAxKSA/IHAxIDogY29uY2F0QW5kUmVzb2x2ZVVybChiYXNlLCBwMSk7XG4gICAgcmV0dXJuIGB1cmwoJyR7dXJsfScpYDtcbiAgfVxuICByZXR1cm4gaXNTcmNBc0RhdGFVcmwodGV4dClcbiAgICA/IHRleHRcbiAgICA6IHRleHQucmVwbGFjZSgvdXJsXFwoWydcIl0/KFteJ1wiXSs/KVsnXCJdP1xcKS9nLCBhZGRCYXNlSHJlZlRvVXJsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3R5bGVTaGVldCh0ZXh0KSB7XG4gIGNvbnN0IGRvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgnJyk7XG4gIGNvbnN0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cbiAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDtcbiAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcblxuICByZXR1cm4gc3R5bGVFbGVtZW50LnNoZWV0O1xufVxuIl19
|
package/dist/effect-utils.d.ts
CHANGED
@@ -1,13 +1,23 @@
|
|
1
1
|
import { PostProcessEffect } from '@deck.gl/core/typed';
|
2
2
|
import { VisState } from '@kepler.gl/schemas';
|
3
|
-
import { MapState,
|
3
|
+
import { MapState, Effect, EffectProps, EffectDescription } from '@kepler.gl/types';
|
4
4
|
export declare function computeDeckEffects({ visState, mapState }: {
|
5
5
|
visState: VisState;
|
6
6
|
mapState: MapState;
|
7
7
|
}): PostProcessEffect[];
|
8
|
-
export declare function mergeEffectParams(params: Partial<EffectParams>, extraParams: Partial<EffectParams>): Partial<EffectParams>;
|
9
8
|
/**
|
10
9
|
* Always keep light & shadow effect at the top
|
11
10
|
*/
|
12
11
|
export declare const fixEffectOrder: (effects: Effect[], effectOrder: string[]) => string[];
|
13
12
|
export declare function reorderEffectOrder(effectOrder: string[], originEffectId: string, destinationEffectId: string): string[];
|
13
|
+
/**
|
14
|
+
* Validates parameters for an effect, clamps numbers to allowed ranges
|
15
|
+
* or applies default values in case of wrong non-numeric values.
|
16
|
+
* All unknown properties aren't modified.
|
17
|
+
* @param parameters Parameters candidate for an effect.
|
18
|
+
* @param effectDescription Description of an effect.
|
19
|
+
* @returns
|
20
|
+
*/
|
21
|
+
export declare function validateEffectParameters(parameters: {
|
22
|
+
[key: string]: any;
|
23
|
+
} | undefined, effectDescription: EffectDescription['parameters']): EffectProps['parameters'];
|
package/dist/effect-utils.js
CHANGED
@@ -1,23 +1,3 @@
|
|
1
|
-
// Copyright (c) 2023 Uber Technologies, Inc.
|
2
|
-
//
|
3
|
-
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
-
// of this software and associated documentation files (the "Software"), to deal
|
5
|
-
// in the Software without restriction, including without limitation the rights
|
6
|
-
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
-
// copies of the Software, and to permit persons to whom the Software is
|
8
|
-
// furnished to do so, subject to the following conditions:
|
9
|
-
//
|
10
|
-
// The above copyright notice and this permission notice shall be included in
|
11
|
-
// all copies or substantial portions of the Software.
|
12
|
-
//
|
13
|
-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
-
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
-
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
-
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
-
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
-
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
-
// THE SOFTWARE.
|
20
|
-
|
21
1
|
"use strict";
|
22
2
|
|
23
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
@@ -26,57 +6,43 @@ Object.defineProperty(exports, "__esModule", {
|
|
26
6
|
value: true
|
27
7
|
});
|
28
8
|
exports.computeDeckEffects = computeDeckEffects;
|
29
|
-
exports.mergeEffectParams = mergeEffectParams;
|
30
9
|
exports.reorderEffectOrder = reorderEffectOrder;
|
10
|
+
exports.validateEffectParameters = validateEffectParameters;
|
31
11
|
exports.fixEffectOrder = void 0;
|
32
12
|
|
33
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
34
|
-
|
35
13
|
var _sortable = require("@dnd-kit/sortable");
|
36
14
|
|
37
15
|
var _suncalc = _interopRequireDefault(require("suncalc"));
|
38
16
|
|
17
|
+
var _lodash = _interopRequireDefault(require("lodash.clonedeep"));
|
18
|
+
|
39
19
|
var _constants = require("@kepler.gl/constants");
|
40
20
|
|
41
21
|
var _utils = require("./utils");
|
42
22
|
|
43
|
-
|
44
|
-
|
45
|
-
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; }
|
23
|
+
var _dataUtils = require("./data-utils");
|
46
24
|
|
25
|
+
// SPDX-License-Identifier: MIT
|
26
|
+
// Copyright contributors to the kepler.gl project
|
47
27
|
function computeDeckEffects(_ref) {
|
48
28
|
var visState = _ref.visState,
|
49
29
|
mapState = _ref.mapState;
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
if (!isDaytime(mapState.latitude, mapState.longitude, timestamp)) {
|
63
|
-
// TODO: interpolate for dusk/dawn
|
64
|
-
// TODO: Should we avoid mutating the effect? (didn't work when tried defensive copying)
|
65
|
-
lightShadowEffect.deckEffect.shadowColor[3] = 0;
|
30
|
+
// TODO: 1) deck effects per deck context 2) preserved between draws
|
31
|
+
return visState.effectOrder.map(function (effectId) {
|
32
|
+
var effect = (0, _utils.findById)(effectId)(visState.effects);
|
33
|
+
|
34
|
+
if (effect !== null && effect !== void 0 && effect.isEnabled && effect.deckEffect) {
|
35
|
+
updateEffect({
|
36
|
+
visState: visState,
|
37
|
+
mapState: mapState,
|
38
|
+
effect: effect
|
39
|
+
});
|
40
|
+
return effect.deckEffect;
|
66
41
|
}
|
67
|
-
}
|
68
|
-
|
69
|
-
return effects.map(function (effect) {
|
70
|
-
return effect.deckEffect;
|
71
|
-
});
|
72
|
-
}
|
73
42
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
return _objectSpread(_objectSpread(_objectSpread({}, p1), p2), {}, {
|
78
|
-
// @ts-expect-error
|
79
|
-
config: _objectSpread(_objectSpread({}, p1.config || {}), p2.config || {})
|
43
|
+
return null;
|
44
|
+
}).filter(function (effect) {
|
45
|
+
return effect;
|
80
46
|
});
|
81
47
|
}
|
82
48
|
/**
|
@@ -126,4 +92,105 @@ function isDaytime(lat, lon, timestamp) {
|
|
126
92
|
|
127
93
|
return date >= sunrise && date <= sunset;
|
128
94
|
}
|
129
|
-
|
95
|
+
/**
|
96
|
+
* Update effect to match latest vis and map states
|
97
|
+
*/
|
98
|
+
|
99
|
+
|
100
|
+
function updateEffect(_ref2) {
|
101
|
+
var visState = _ref2.visState,
|
102
|
+
mapState = _ref2.mapState,
|
103
|
+
effect = _ref2.effect;
|
104
|
+
|
105
|
+
if (effect.type === _constants.LIGHT_AND_SHADOW_EFFECT.type) {
|
106
|
+
var _effect$parameters = effect.parameters,
|
107
|
+
timestamp = _effect$parameters.timestamp,
|
108
|
+
timeMode = _effect$parameters.timeMode;
|
109
|
+
var sunLight = effect.deckEffect.directionalLights[0]; // set timestamp for shadow
|
110
|
+
|
111
|
+
if (timeMode === _constants.LIGHT_AND_SHADOW_EFFECT_TIME_MODES.current) {
|
112
|
+
timestamp = Date.now();
|
113
|
+
sunLight.timestamp = timestamp;
|
114
|
+
} else if (timeMode === _constants.LIGHT_AND_SHADOW_EFFECT_TIME_MODES.animation) {
|
115
|
+
var _visState$animationCo;
|
116
|
+
|
117
|
+
timestamp = (_visState$animationCo = visState.animationConfig.currentTime) !== null && _visState$animationCo !== void 0 ? _visState$animationCo : 0;
|
118
|
+
|
119
|
+
if (!timestamp) {
|
120
|
+
var filter = visState.filters.find(function (filter) {
|
121
|
+
return filter.type === _constants.FILTER_TYPES.timeRange && (filter.view === _constants.FILTER_VIEW_TYPES.enlarged || filter.syncedWithLayerTimeline);
|
122
|
+
});
|
123
|
+
|
124
|
+
if (filter) {
|
125
|
+
var _filter$value$, _filter$value;
|
126
|
+
|
127
|
+
timestamp = (_filter$value$ = (_filter$value = filter.value) === null || _filter$value === void 0 ? void 0 : _filter$value[0]) !== null && _filter$value$ !== void 0 ? _filter$value$ : 0;
|
128
|
+
}
|
129
|
+
}
|
130
|
+
|
131
|
+
sunLight.timestamp = timestamp;
|
132
|
+
} // output uniform shadow during nighttime
|
133
|
+
|
134
|
+
|
135
|
+
if (isDaytime(mapState.latitude, mapState.longitude, timestamp)) {
|
136
|
+
effect.deckEffect.outputUniformShadow = false;
|
137
|
+
sunLight.intensity = effect.parameters.sunLightIntensity;
|
138
|
+
} else {
|
139
|
+
effect.deckEffect.outputUniformShadow = true;
|
140
|
+
sunLight.intensity = 0;
|
141
|
+
}
|
142
|
+
}
|
143
|
+
}
|
144
|
+
/**
|
145
|
+
* Validates parameters for an effect, clamps numbers to allowed ranges
|
146
|
+
* or applies default values in case of wrong non-numeric values.
|
147
|
+
* All unknown properties aren't modified.
|
148
|
+
* @param parameters Parameters candidate for an effect.
|
149
|
+
* @param effectDescription Description of an effect.
|
150
|
+
* @returns
|
151
|
+
*/
|
152
|
+
|
153
|
+
|
154
|
+
function validateEffectParameters() {
|
155
|
+
var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
156
|
+
var effectDescription = arguments.length > 1 ? arguments[1] : undefined;
|
157
|
+
var result = (0, _lodash["default"])(parameters);
|
158
|
+
effectDescription.forEach(function (description) {
|
159
|
+
var defaultValue = description.defaultValue,
|
160
|
+
name = description.name,
|
161
|
+
type = description.type,
|
162
|
+
min = description.min,
|
163
|
+
max = description.max;
|
164
|
+
if (!result.hasOwnProperty(name)) return;
|
165
|
+
var property = result[name];
|
166
|
+
|
167
|
+
if (type === 'color' || type === 'array') {
|
168
|
+
if (!Array.isArray(defaultValue)) return;
|
169
|
+
|
170
|
+
if (property.length !== (defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.length)) {
|
171
|
+
result[name] = defaultValue;
|
172
|
+
return;
|
173
|
+
}
|
174
|
+
|
175
|
+
defaultValue.forEach(function (v, i) {
|
176
|
+
var _defaultValue$i;
|
177
|
+
|
178
|
+
var value = property[i];
|
179
|
+
value = Number.isFinite(value) ? (0, _dataUtils.clamp)([min, max], value) : (_defaultValue$i = defaultValue[i]) !== null && _defaultValue$i !== void 0 ? _defaultValue$i : min;
|
180
|
+
|
181
|
+
if (value !== undefined) {
|
182
|
+
property[i] = value;
|
183
|
+
}
|
184
|
+
});
|
185
|
+
return;
|
186
|
+
}
|
187
|
+
|
188
|
+
var value = Number.isFinite(property) ? (0, _dataUtils.clamp)([min, max], property) : defaultValue !== null && defaultValue !== void 0 ? defaultValue : min;
|
189
|
+
|
190
|
+
if (value !== undefined) {
|
191
|
+
result[name] = value;
|
192
|
+
}
|
193
|
+
});
|
194
|
+
return result;
|
195
|
+
}
|
196
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9lZmZlY3QtdXRpbHMudHMiXSwibmFtZXMiOlsiY29tcHV0ZURlY2tFZmZlY3RzIiwidmlzU3RhdGUiLCJtYXBTdGF0ZSIsImVmZmVjdE9yZGVyIiwibWFwIiwiZWZmZWN0SWQiLCJlZmZlY3QiLCJlZmZlY3RzIiwiaXNFbmFibGVkIiwiZGVja0VmZmVjdCIsInVwZGF0ZUVmZmVjdCIsImZpbHRlciIsImZpeEVmZmVjdE9yZGVyIiwibGlnaHRTaGFkb3dFZmZlY3QiLCJmaW5kIiwidHlwZSIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiaW5kIiwiaW5kZXhPZiIsImlkIiwic3BsaWNlIiwidW5zaGlmdCIsInJlb3JkZXJFZmZlY3RPcmRlciIsIm9yaWdpbkVmZmVjdElkIiwiZGVzdGluYXRpb25FZmZlY3RJZCIsImFjdGl2ZUluZGV4Iiwib3ZlckluZGV4IiwiaXNEYXl0aW1lIiwibGF0IiwibG9uIiwidGltZXN0YW1wIiwiZGF0ZSIsIkRhdGUiLCJTdW5DYWxjIiwiZ2V0VGltZXMiLCJzdW5yaXNlIiwic3Vuc2V0IiwicGFyYW1ldGVycyIsInRpbWVNb2RlIiwic3VuTGlnaHQiLCJkaXJlY3Rpb25hbExpZ2h0cyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUX1RJTUVfTU9ERVMiLCJjdXJyZW50Iiwibm93IiwiYW5pbWF0aW9uIiwiYW5pbWF0aW9uQ29uZmlnIiwiY3VycmVudFRpbWUiLCJmaWx0ZXJzIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwidmlldyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiZW5sYXJnZWQiLCJzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSIsInZhbHVlIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJvdXRwdXRVbmlmb3JtU2hhZG93IiwiaW50ZW5zaXR5Iiwic3VuTGlnaHRJbnRlbnNpdHkiLCJ2YWxpZGF0ZUVmZmVjdFBhcmFtZXRlcnMiLCJlZmZlY3REZXNjcmlwdGlvbiIsInJlc3VsdCIsImZvckVhY2giLCJkZXNjcmlwdGlvbiIsImRlZmF1bHRWYWx1ZSIsIm5hbWUiLCJtaW4iLCJtYXgiLCJoYXNPd25Qcm9wZXJ0eSIsInByb3BlcnR5IiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwidiIsImkiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsInVuZGVmaW5lZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBUUE7O0FBQ0E7O0FBbEJBO0FBQ0E7QUFtQk8sU0FBU0Esa0JBQVQsT0FNaUI7QUFBQSxNQUx0QkMsUUFLc0IsUUFMdEJBLFFBS3NCO0FBQUEsTUFKdEJDLFFBSXNCLFFBSnRCQSxRQUlzQjtBQUN0QjtBQUNBLFNBQU9ELFFBQVEsQ0FBQ0UsV0FBVCxDQUNKQyxHQURJLENBQ0EsVUFBQUMsUUFBUSxFQUFJO0FBQ2YsUUFBTUMsTUFBTSxHQUFHLHFCQUFTRCxRQUFULEVBQW1CSixRQUFRLENBQUNNLE9BQTVCLENBQWY7O0FBQ0EsUUFBSUQsTUFBTSxTQUFOLElBQUFBLE1BQU0sV0FBTixJQUFBQSxNQUFNLENBQUVFLFNBQVIsSUFBcUJGLE1BQU0sQ0FBQ0csVUFBaEMsRUFBNEM7QUFDMUNDLE1BQUFBLFlBQVksQ0FBQztBQUFDVCxRQUFBQSxRQUFRLEVBQVJBLFFBQUQ7QUFBV0MsUUFBQUEsUUFBUSxFQUFSQSxRQUFYO0FBQXFCSSxRQUFBQSxNQUFNLEVBQU5BO0FBQXJCLE9BQUQsQ0FBWjtBQUNBLGFBQU9BLE1BQU0sQ0FBQ0csVUFBZDtBQUNEOztBQUNELFdBQU8sSUFBUDtBQUNELEdBUkksRUFTSkUsTUFUSSxDQVNHLFVBQUFMLE1BQU07QUFBQSxXQUFJQSxNQUFKO0FBQUEsR0FUVCxDQUFQO0FBVUQ7QUFFRDtBQUNBO0FBQ0E7OztBQUNPLElBQU1NLGNBQWMsR0FBRyxTQUFqQkEsY0FBaUIsQ0FBQ0wsT0FBRCxFQUFvQkosV0FBcEIsRUFBd0Q7QUFDcEYsTUFBTVUsaUJBQWlCLEdBQUdOLE9BQU8sQ0FBQ08sSUFBUixDQUFhLFVBQUFSLE1BQU07QUFBQSxX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RSxHQUF4Rjs7QUFFQSxRQUFJYixLQUFLLEtBQUt3QixTQUFkLEVBQXlCO0FBQ3ZCaEIsTUFBQUEsTUFBTSxDQUFDSSxJQUFELENBQU4sR0FBZVosS0FBZjtBQUNEO0FBQ0YsR0EzQkQ7QUE0QkEsU0FBT1EsTUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHthcnJheU1vdmV9IGZyb20gJ0BkbmQta2l0L3NvcnRhYmxlJztcbmltcG9ydCBTdW5DYWxjIGZyb20gJ3N1bmNhbGMnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2guY2xvbmVkZWVwJztcblxuaW1wb3J0IHtQb3N0UHJvY2Vzc0VmZmVjdH0gZnJvbSAnQGRlY2suZ2wvY29yZS90eXBlZCc7XG5cbmltcG9ydCB7XG4gIExJR0hUX0FORF9TSEFET1dfRUZGRUNULFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVF9USU1FX01PREVTLFxuICBGSUxURVJfVFlQRVMsXG4gIEZJTFRFUl9WSUVXX1RZUEVTXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge01hcFN0YXRlLCBFZmZlY3QsIEVmZmVjdFByb3BzLCBFZmZlY3REZXNjcmlwdGlvbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge2ZpbmRCeUlkfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7Y2xhbXB9IGZyb20gJy4vZGF0YS11dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlRGVja0VmZmVjdHMoe1xuICB2aXNTdGF0ZSxcbiAgbWFwU3RhdGVcbn06IHtcbiAgdmlzU3RhdGU6IFZpc1N0YXRlO1xuICBtYXBTdGF0ZTogTWFwU3RhdGU7XG59KTogUG9zdFByb2Nlc3NFZmZlY3RbXSB7XG4gIC8vIFRPRE86IDEpIGRlY2sgZWZmZWN0cyBwZXIgZGVjayBjb250ZXh0IDIpIHByZXNlcnZlZCBiZXR3ZWVuIGRyYXdzXG4gIHJldHVybiB2aXNTdGF0ZS5lZmZlY3RPcmRlclxuICAgIC5tYXAoZWZmZWN0SWQgPT4ge1xuICAgICAgY29uc3QgZWZmZWN0ID0gZmluZEJ5SWQoZWZmZWN0SWQpKHZpc1N0YXRlLmVmZmVjdHMpIGFzIEVmZmVjdCB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChlZmZlY3Q/LmlzRW5hYmxlZCAmJiBlZmZlY3QuZGVja0VmZmVjdCkge1xuICAgICAgICB1cGRhdGVFZmZlY3Qoe3Zpc1N0YXRlLCBtYXBTdGF0ZSwgZWZmZWN0fSk7XG4gICAgICAgIHJldHVybiBlZmZlY3QuZGVja0VmZmVjdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pXG4gICAgLmZpbHRlcihlZmZlY3QgPT4gZWZmZWN0KTtcbn1cblxuLyoqXG4gKiBBbHdheXMga2VlcCBsaWdodCAmIHNoYWRvdyBlZmZlY3QgYXQgdGhlIHRvcFxuICovXG5leHBvcnQgY29uc3QgZml4RWZmZWN0T3JkZXIgPSAoZWZmZWN0czogRWZmZWN0W10sIGVmZmVjdE9yZGVyOiBzdHJpbmdbXSk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgbGlnaHRTaGFkb3dFZmZlY3QgPSBlZmZlY3RzLmZpbmQoZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKTtcbiAgaWYgKGxpZ2h0U2hhZG93RWZmZWN0KSB7XG4gICAgY29uc3QgaW5kID0gZWZmZWN0T3JkZXIuaW5kZXhPZihsaWdodFNoYWRvd0VmZmVjdC5pZCk7XG4gICAgaWYgKGluZCA+IDApIHtcbiAgICAgIGVmZmVjdE9yZGVyLnNwbGljZShpbmQsIDEpO1xuICAgICAgZWZmZWN0T3JkZXIudW5zaGlmdChsaWdodFNoYWRvd0VmZmVjdC5pZCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlZmZlY3RPcmRlcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiByZW9yZGVyRWZmZWN0T3JkZXIoXG4gIGVmZmVjdE9yZGVyOiBzdHJpbmdbXSxcbiAgb3JpZ2luRWZmZWN0SWQ6IHN0cmluZyxcbiAgZGVzdGluYXRpb25FZmZlY3RJZDogc3RyaW5nXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGFjdGl2ZUluZGV4ID0gZWZmZWN0T3JkZXIuaW5kZXhPZihvcmlnaW5FZmZlY3RJZCk7XG4gIGNvbnN0IG92ZXJJbmRleCA9IGVmZmVjdE9yZGVyLmluZGV4T2YoZGVzdGluYXRpb25FZmZlY3RJZCk7XG4gIHJldHVybiBhcnJheU1vdmUoZWZmZWN0T3JkZXIsIGFjdGl2ZUluZGV4LCBvdmVySW5kZXgpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBjdXJyZW50IHRpbWUgaXMgZGF5dGltZSBhdCB0aGUgZ2l2ZW4gbG9jYXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBsYXQgTGF0aXR1ZGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb24gTG9uZ2l0dWRlXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZXN0YW1wIE1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgVW5peCBFcG9jaFxuICogQHJldHVybnMgYm9vbGVhblxuICovXG5mdW5jdGlvbiBpc0RheXRpbWUobGF0LCBsb24sIHRpbWVzdGFtcCkge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUodGltZXN0YW1wKTtcbiAgY29uc3Qge3N1bnJpc2UsIHN1bnNldH0gPSBTdW5DYWxjLmdldFRpbWVzKGRhdGUsIGxhdCwgbG9uKTtcbiAgcmV0dXJuIGRhdGUgPj0gc3VucmlzZSAmJiBkYXRlIDw9IHN1bnNldDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWZmZWN0IHRvIG1hdGNoIGxhdGVzdCB2aXMgYW5kIG1hcCBzdGF0ZXNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlRWZmZWN0KHt2aXNTdGF0ZSwgbWFwU3RhdGUsIGVmZmVjdH0pIHtcbiAgaWYgKGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKSB7XG4gICAgbGV0IHt0aW1lc3RhbXAsIHRpbWVNb2RlfSA9IGVmZmVjdC5wYXJhbWV0ZXJzO1xuICAgIGNvbnN0IHN1bkxpZ2h0ID0gZWZmZWN0LmRlY2tFZmZlY3QuZGlyZWN0aW9uYWxMaWdodHNbMF07XG5cbiAgICAvLyBzZXQgdGltZXN0YW1wIGZvciBzaGFkb3dcbiAgICBpZiAodGltZU1vZGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNUX1RJTUVfTU9ERVMuY3VycmVudCkge1xuICAgICAgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgIHN1bkxpZ2h0LnRpbWVzdGFtcCA9IHRpbWVzdGFtcDtcbiAgICB9IGVsc2UgaWYgKHRpbWVNb2RlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVF9USU1FX01PREVTLmFuaW1hdGlvbikge1xuICAgICAgdGltZXN0YW1wID0gdmlzU3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lID8/IDA7XG4gICAgICBpZiAoIXRpbWVzdGFtcCkge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB2aXNTdGF0ZS5maWx0ZXJzLmZpbmQoXG4gICAgICAgICAgZmlsdGVyID0+XG4gICAgICAgICAgICBmaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJlxuICAgICAgICAgICAgKGZpbHRlci52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCB8fCBmaWx0ZXIuc3luY2VkV2l0aExheWVyVGltZWxpbmUpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgICB0aW1lc3RhbXAgPSBmaWx0ZXIudmFsdWU/LlswXSA/PyAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdW5MaWdodC50aW1lc3RhbXAgPSB0aW1lc3RhbXA7XG4gICAgfVxuXG4gICAgLy8gb3V0cHV0IHVuaWZvcm0gc2hhZG93IGR1cmluZyBuaWdodHRpbWVcbiAgICBpZiAoaXNEYXl0aW1lKG1hcFN0YXRlLmxhdGl0dWRlLCBtYXBTdGF0ZS5sb25naXR1ZGUsIHRpbWVzdGFtcCkpIHtcbiAgICAgIGVmZmVjdC5kZWNrRWZmZWN0Lm91dHB1dFVuaWZvcm1TaGFkb3cgPSBmYWxzZTtcbiAgICAgIHN1bkxpZ2h0LmludGVuc2l0eSA9IGVmZmVjdC5wYXJhbWV0ZXJzLnN1bkxpZ2h0SW50ZW5zaXR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBlZmZlY3QuZGVja0VmZmVjdC5vdXRwdXRVbmlmb3JtU2hhZG93ID0gdHJ1ZTtcbiAgICAgIHN1bkxpZ2h0LmludGVuc2l0eSA9IDA7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHBhcmFtZXRlcnMgZm9yIGFuIGVmZmVjdCwgY2xhbXBzIG51bWJlcnMgdG8gYWxsb3dlZCByYW5nZXNcbiAqIG9yIGFwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgaW4gY2FzZSBvZiB3cm9uZyBub24tbnVtZXJpYyB2YWx1ZXMuXG4gKiBBbGwgdW5rbm93biBwcm9wZXJ0aWVzIGFyZW4ndCBtb2RpZmllZC5cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIFBhcmFtZXRlcnMgY2FuZGlkYXRlIGZvciBhbiBlZmZlY3QuXG4gKiBAcGFyYW0gZWZmZWN0RGVzY3JpcHRpb24gRGVzY3JpcHRpb24gb2YgYW4gZWZmZWN0LlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRWZmZWN0UGFyYW1ldGVycyhcbiAgcGFyYW1ldGVyczogRWZmZWN0UHJvcHNbJ3BhcmFtZXRlcnMnXSA9IHt9LFxuICBlZmZlY3REZXNjcmlwdGlvbjogRWZmZWN0RGVzY3JpcHRpb25bJ3BhcmFtZXRlcnMnXVxuKTogRWZmZWN0UHJvcHNbJ3BhcmFtZXRlcnMnXSB7XG4gIGNvbnN0IHJlc3VsdCA9IGNsb25lRGVlcChwYXJhbWV0ZXJzKTtcbiAgZWZmZWN0RGVzY3JpcHRpb24uZm9yRWFjaChkZXNjcmlwdGlvbiA9PiB7XG4gICAgY29uc3Qge2RlZmF1bHRWYWx1ZSwgbmFtZSwgdHlwZSwgbWluLCBtYXh9ID0gZGVzY3JpcHRpb247XG5cbiAgICBpZiAoIXJlc3VsdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgcmV0dXJuO1xuICAgIGNvbnN0IHByb3BlcnR5ID0gcmVzdWx0W25hbWVdO1xuXG4gICAgaWYgKHR5cGUgPT09ICdjb2xvcicgfHwgdHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRlZmF1bHRWYWx1ZSkpIHJldHVybjtcbiAgICAgIGlmIChwcm9wZXJ0eS5sZW5ndGggIT09IGRlZmF1bHRWYWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtuYW1lXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGVmYXVsdFZhbHVlLmZvckVhY2goKHYsIGkpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gcHJvcGVydHlbaV07XG4gICAgICAgIHZhbHVlID0gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IGNsYW1wKFttaW4sIG1heF0sIHZhbHVlKSA6IGRlZmF1bHRWYWx1ZVtpXSA/PyBtaW47XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcHJvcGVydHlbaV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBOdW1iZXIuaXNGaW5pdGUocHJvcGVydHkpID8gY2xhbXAoW21pbiwgbWF4XSwgcHJvcGVydHkpIDogZGVmYXVsdFZhbHVlID8/IG1pbjtcblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXN1bHRbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuIl19
|