@kepler.gl/utils 3.0.0-alpha.2 → 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.
- package/package.json +14 -10
- package/dist/aggregate-utils.d.ts +0 -3
- package/dist/aggregate-utils.js +0 -75
- package/dist/arrow-data-container.d.ts +0 -54
- package/dist/arrow-data-container.js +0 -360
- package/dist/color-utils.d.ts +0 -51
- package/dist/color-utils.js +0 -161
- package/dist/data-container-interface.d.ts +0 -133
- package/dist/data-container-interface.js +0 -6
- package/dist/data-container-utils.d.ts +0 -30
- package/dist/data-container-utils.js +0 -88
- package/dist/data-row.d.ts +0 -59
- package/dist/data-row.js +0 -126
- package/dist/data-scale-utils.d.ts +0 -23
- package/dist/data-scale-utils.js +0 -62
- package/dist/data-utils.d.ts +0 -103
- package/dist/data-utils.js +0 -502
- package/dist/dataset-utils.d.ts +0 -116
- package/dist/dataset-utils.js +0 -614
- package/dist/dom-to-image.d.ts +0 -73
- package/dist/dom-to-image.js +0 -489
- package/dist/dom-utils.d.ts +0 -23
- package/dist/dom-utils.js +0 -434
- package/dist/effect-utils.d.ts +0 -23
- package/dist/effect-utils.js +0 -196
- package/dist/export-map-html.d.ts +0 -9
- package/dist/export-map-html.js +0 -28
- package/dist/export-utils.d.ts +0 -53
- package/dist/export-utils.js +0 -262
- package/dist/filter-utils.d.ts +0 -326
- package/dist/filter-utils.js +0 -1333
- package/dist/format.d.ts +0 -1
- package/dist/format.js +0 -17
- package/dist/gl-utils.d.ts +0 -1
- package/dist/gl-utils.js +0 -35
- package/dist/h3-utils.d.ts +0 -21
- package/dist/h3-utils.js +0 -81
- package/dist/index.d.ts +0 -36
- package/dist/index.js +0 -772
- package/dist/indexed-data-container.d.ts +0 -34
- package/dist/indexed-data-container.js +0 -254
- package/dist/locale-utils.d.ts +0 -2
- package/dist/locale-utils.js +0 -54
- package/dist/map-info-utils.d.ts +0 -1
- package/dist/map-info-utils.js +0 -15
- package/dist/map-style-utils/mapbox-gl-style-editor.d.ts +0 -65
- package/dist/map-style-utils/mapbox-gl-style-editor.js +0 -218
- package/dist/map-style-utils/mapbox-utils.d.ts +0 -9
- package/dist/map-style-utils/mapbox-utils.js +0 -48
- package/dist/map-utils.d.ts +0 -9
- package/dist/map-utils.js +0 -65
- package/dist/mapbox-utils.d.ts +0 -7
- package/dist/mapbox-utils.js +0 -22
- package/dist/noop.d.ts +0 -1
- package/dist/noop.js +0 -11
- package/dist/notifications-utils.d.ts +0 -42
- package/dist/notifications-utils.js +0 -85
- package/dist/observe-dimensions.d.ts +0 -15
- package/dist/observe-dimensions.js +0 -151
- package/dist/plot.d.ts +0 -6
- package/dist/plot.js +0 -31
- package/dist/projection-utils.d.ts +0 -21
- package/dist/projection-utils.js +0 -100
- package/dist/row-data-container.d.ts +0 -31
- package/dist/row-data-container.js +0 -252
- package/dist/searcher-utils.d.ts +0 -1
- package/dist/searcher-utils.js +0 -28
- package/dist/split-map-utils.d.ts +0 -32
- package/dist/split-map-utils.js +0 -114
- package/dist/time.d.ts +0 -16
- package/dist/time.js +0 -89
- package/dist/utils.d.ts +0 -116
- package/dist/utils.js +0 -305
package/dist/dom-utils.js
DELETED
@@ -1,434 +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.processClone = processClone;
|
9
|
-
exports.asArray = asArray;
|
10
|
-
exports.fourRandomChars = fourRandomChars;
|
11
|
-
exports.uid = uid;
|
12
|
-
exports.makeImage = makeImage;
|
13
|
-
exports.isDataUrl = isDataUrl;
|
14
|
-
exports.mimeType = mimeType;
|
15
|
-
exports.dataAsUrl = dataAsUrl;
|
16
|
-
exports.escape = escape;
|
17
|
-
exports.delay = delay;
|
18
|
-
exports.isSrcAsDataUrl = isSrcAsDataUrl;
|
19
|
-
exports.canvasToBlob = canvasToBlob;
|
20
|
-
exports.escapeXhtml = escapeXhtml;
|
21
|
-
exports.getWidth = getWidth;
|
22
|
-
exports.getHeight = getHeight;
|
23
|
-
exports.resolveUrl = resolveUrl;
|
24
|
-
exports.getAndEncode = getAndEncode;
|
25
|
-
exports.concatAndResolveUrl = concatAndResolveUrl;
|
26
|
-
exports.setStyleSheetBaseHref = setStyleSheetBaseHref;
|
27
|
-
exports.toStyleSheet = toStyleSheet;
|
28
|
-
|
29
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
30
|
-
|
31
|
-
var _console = _interopRequireDefault(require("global/console"));
|
32
|
-
|
33
|
-
var _window = _interopRequireDefault(require("global/window"));
|
34
|
-
|
35
|
-
var _document = _interopRequireDefault(require("global/document"));
|
36
|
-
|
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) {
|
42
|
-
if (!(clone instanceof _window["default"].Element)) {
|
43
|
-
return clone;
|
44
|
-
}
|
45
|
-
|
46
|
-
function copyProperties(sourceStyle, targetStyle) {
|
47
|
-
var propertyKeys = asArray(sourceStyle);
|
48
|
-
propertyKeys.forEach(function (name) {
|
49
|
-
targetStyle.setProperty(name, sourceStyle.getPropertyValue(name), sourceStyle.getPropertyPriority(name));
|
50
|
-
});
|
51
|
-
}
|
52
|
-
|
53
|
-
function copyStyle(source, target) {
|
54
|
-
if (source.cssText) {
|
55
|
-
target.cssText = source.cssText; // add additional copy of composite styles
|
56
|
-
|
57
|
-
if (source.font) {
|
58
|
-
target.font = source.font;
|
59
|
-
}
|
60
|
-
} else {
|
61
|
-
copyProperties(source, target);
|
62
|
-
}
|
63
|
-
}
|
64
|
-
|
65
|
-
function cloneStyle(og, cln) {
|
66
|
-
var originalStyle = _window["default"].getComputedStyle(og);
|
67
|
-
|
68
|
-
copyStyle(originalStyle, cln.style);
|
69
|
-
}
|
70
|
-
|
71
|
-
function formatPseudoElementStyle(cln, elm, stl) {
|
72
|
-
var formatCssText = function formatCssText(stl1) {
|
73
|
-
var cnt = stl1.getPropertyValue('content');
|
74
|
-
return "".concat(stl.cssText, " content: ").concat(cnt, ";");
|
75
|
-
};
|
76
|
-
|
77
|
-
var formatProperty = function formatProperty(name) {
|
78
|
-
return "".concat(name, ":").concat(stl.getPropertyValue(name)).concat(stl.getPropertyPriority(name) ? ' !important' : '');
|
79
|
-
};
|
80
|
-
|
81
|
-
var formatCssProperties = function formatCssProperties(stl2) {
|
82
|
-
return "".concat(asArray(stl2).map(formatProperty).join('; '), ";");
|
83
|
-
};
|
84
|
-
|
85
|
-
var selector = ".".concat(cln, ":").concat(elm);
|
86
|
-
var cssText = stl.cssText ? formatCssText(stl) : formatCssProperties(stl);
|
87
|
-
return _document["default"].createTextNode("".concat(selector, "{").concat(cssText, "}"));
|
88
|
-
}
|
89
|
-
|
90
|
-
function clonePseudoElement(org, cln, element) {
|
91
|
-
var style = _window["default"].getComputedStyle(org, element);
|
92
|
-
|
93
|
-
var content = style.getPropertyValue('content');
|
94
|
-
|
95
|
-
if (content === '' || content === 'none') {
|
96
|
-
return;
|
97
|
-
}
|
98
|
-
|
99
|
-
var className = uid();
|
100
|
-
cln.className = "".concat(cln.className, " ").concat(className);
|
101
|
-
|
102
|
-
var styleElement = _document["default"].createElement('style');
|
103
|
-
|
104
|
-
styleElement.appendChild(formatPseudoElementStyle(className, element, style));
|
105
|
-
cln.appendChild(styleElement);
|
106
|
-
}
|
107
|
-
|
108
|
-
function clonePseudoElements(_ref) {
|
109
|
-
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
110
|
-
og = _ref2[0],
|
111
|
-
cln = _ref2[1];
|
112
|
-
|
113
|
-
[':before', ':after'].forEach(function (element) {
|
114
|
-
return clonePseudoElement(og, cln, element);
|
115
|
-
});
|
116
|
-
}
|
117
|
-
|
118
|
-
function copyUserInput(_ref3) {
|
119
|
-
var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2),
|
120
|
-
og = _ref4[0],
|
121
|
-
cln = _ref4[1];
|
122
|
-
|
123
|
-
if (og instanceof _window["default"].HTMLTextAreaElement) cln.innerHTML = og.value;
|
124
|
-
if (og instanceof _window["default"].HTMLInputElement) cln.setAttribute('value', og.value);
|
125
|
-
}
|
126
|
-
|
127
|
-
function fixSvg(cln) {
|
128
|
-
if (!(cln instanceof _window["default"].SVGElement)) return;
|
129
|
-
cln.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
|
130
|
-
if (!(cln instanceof _window["default"].SVGRectElement)) return;
|
131
|
-
['width', 'height'].forEach(function (attribute) {
|
132
|
-
var value = cln.getAttribute(attribute);
|
133
|
-
if (!value) return;
|
134
|
-
cln.style.setProperty(attribute, value);
|
135
|
-
});
|
136
|
-
}
|
137
|
-
|
138
|
-
return Promise.resolve([original, clone]).then(function (_ref5) {
|
139
|
-
var _ref6 = (0, _slicedToArray2["default"])(_ref5, 2),
|
140
|
-
og = _ref6[0],
|
141
|
-
cln = _ref6[1];
|
142
|
-
|
143
|
-
cloneStyle(og, cln);
|
144
|
-
return [og, cln];
|
145
|
-
}).then(function (_ref7) {
|
146
|
-
var _ref8 = (0, _slicedToArray2["default"])(_ref7, 2),
|
147
|
-
og = _ref8[0],
|
148
|
-
cln = _ref8[1];
|
149
|
-
|
150
|
-
clonePseudoElements([og, cln]);
|
151
|
-
return [og, cln];
|
152
|
-
}).then(function (_ref9) {
|
153
|
-
var _ref10 = (0, _slicedToArray2["default"])(_ref9, 2),
|
154
|
-
og = _ref10[0],
|
155
|
-
cln = _ref10[1];
|
156
|
-
|
157
|
-
copyUserInput([og, cln]);
|
158
|
-
return [og, cln];
|
159
|
-
}).then(function (_ref11) {
|
160
|
-
var _ref12 = (0, _slicedToArray2["default"])(_ref11, 2),
|
161
|
-
og = _ref12[0],
|
162
|
-
cln = _ref12[1];
|
163
|
-
|
164
|
-
fixSvg(cln);
|
165
|
-
return [og, cln];
|
166
|
-
}).then(function (_ref13) {
|
167
|
-
var _ref14 = (0, _slicedToArray2["default"])(_ref13, 2),
|
168
|
-
og = _ref14[0],
|
169
|
-
cln = _ref14[1];
|
170
|
-
|
171
|
-
return cln;
|
172
|
-
});
|
173
|
-
}
|
174
|
-
/****
|
175
|
-
* UTILS
|
176
|
-
****/
|
177
|
-
|
178
|
-
|
179
|
-
function asArray(arrayLike) {
|
180
|
-
var array = [];
|
181
|
-
var length = arrayLike.length;
|
182
|
-
|
183
|
-
for (var i = 0; i < length; i++) {
|
184
|
-
array.push(arrayLike[i]);
|
185
|
-
}
|
186
|
-
|
187
|
-
return array;
|
188
|
-
}
|
189
|
-
|
190
|
-
function fourRandomChars() {
|
191
|
-
return "0000".concat((Math.random() * Math.pow(36, 4) << 0).toString(36)).slice(-4);
|
192
|
-
}
|
193
|
-
|
194
|
-
function uid() {
|
195
|
-
var index = 0;
|
196
|
-
return "u".concat(fourRandomChars()).concat(index++);
|
197
|
-
}
|
198
|
-
|
199
|
-
function makeImage(uri) {
|
200
|
-
return new Promise(function (resolve, reject) {
|
201
|
-
var image = new _window["default"].Image();
|
202
|
-
|
203
|
-
image.onload = function () {
|
204
|
-
resolve(image);
|
205
|
-
};
|
206
|
-
|
207
|
-
image.onerror = function (err) {
|
208
|
-
var message = _constants.IMAGE_EXPORT_ERRORS.dataUri;
|
209
|
-
|
210
|
-
_console["default"].log(uri); // error is an Event Object
|
211
|
-
// https://www.w3schools.com/jsref/obj_event.asp
|
212
|
-
|
213
|
-
|
214
|
-
reject({
|
215
|
-
event: err,
|
216
|
-
message: message
|
217
|
-
});
|
218
|
-
};
|
219
|
-
|
220
|
-
image.src = uri;
|
221
|
-
});
|
222
|
-
}
|
223
|
-
|
224
|
-
function isDataUrl(url) {
|
225
|
-
return url.search(/^(data:)/) !== -1;
|
226
|
-
}
|
227
|
-
|
228
|
-
function parseExtension(url) {
|
229
|
-
var match = /\.([^\.\/]*?)$/g.exec(url);
|
230
|
-
|
231
|
-
if (match) {
|
232
|
-
return match[1];
|
233
|
-
}
|
234
|
-
|
235
|
-
return '';
|
236
|
-
}
|
237
|
-
|
238
|
-
function mimes() {
|
239
|
-
/*
|
240
|
-
* Only WOFF and EOT mime types for fonts are 'real'
|
241
|
-
* see http://www.iana.org/assignments/media-types/media-types.xhtml
|
242
|
-
*/
|
243
|
-
var WOFF = 'application/font-woff';
|
244
|
-
var JPEG = 'image/jpeg';
|
245
|
-
return {
|
246
|
-
woff: WOFF,
|
247
|
-
woff2: WOFF,
|
248
|
-
ttf: 'application/font-truetype',
|
249
|
-
eot: 'application/vnd.ms-fontobject',
|
250
|
-
png: 'image/png',
|
251
|
-
jpg: JPEG,
|
252
|
-
jpeg: JPEG,
|
253
|
-
gif: 'image/gif',
|
254
|
-
tiff: 'image/tiff',
|
255
|
-
svg: 'image/svg+xml'
|
256
|
-
};
|
257
|
-
}
|
258
|
-
|
259
|
-
function mimeType(url) {
|
260
|
-
var extension = parseExtension(url).toLowerCase();
|
261
|
-
return mimes()[extension] || '';
|
262
|
-
}
|
263
|
-
|
264
|
-
function dataAsUrl(content, type) {
|
265
|
-
return "data:".concat(type, ";base64,").concat(content);
|
266
|
-
}
|
267
|
-
|
268
|
-
function escape(string) {
|
269
|
-
return string.replace(/([.*+?^${}()|\[\]\/\\])/g, '\\$1');
|
270
|
-
}
|
271
|
-
|
272
|
-
function delay(ms) {
|
273
|
-
return function (arg) {
|
274
|
-
return new Promise(function (resolve) {
|
275
|
-
_window["default"].setTimeout(function () {
|
276
|
-
resolve(arg);
|
277
|
-
}, ms);
|
278
|
-
});
|
279
|
-
};
|
280
|
-
}
|
281
|
-
|
282
|
-
function isSrcAsDataUrl(text) {
|
283
|
-
var DATA_URL_REGEX = /url\(['"]?(data:)([^'"]+?)['"]?\)/;
|
284
|
-
return text.search(DATA_URL_REGEX) !== -1;
|
285
|
-
}
|
286
|
-
|
287
|
-
function cvToBlob(canvas) {
|
288
|
-
return new Promise(function (resolve) {
|
289
|
-
var binaryString = _window["default"].atob(canvas.toDataURL().split(',')[1]);
|
290
|
-
|
291
|
-
var length = binaryString.length;
|
292
|
-
var binaryArray = new Uint8Array(length);
|
293
|
-
|
294
|
-
for (var i = 0; i < length; i++) {
|
295
|
-
binaryArray[i] = binaryString.charCodeAt(i);
|
296
|
-
}
|
297
|
-
|
298
|
-
resolve(new _window["default"].Blob([binaryArray], {
|
299
|
-
type: 'image/png'
|
300
|
-
}));
|
301
|
-
});
|
302
|
-
}
|
303
|
-
|
304
|
-
function canvasToBlob(canvas) {
|
305
|
-
if (canvas.toBlob) return new Promise(function (resolve) {
|
306
|
-
canvas.toBlob(resolve);
|
307
|
-
});
|
308
|
-
return cvToBlob(canvas);
|
309
|
-
}
|
310
|
-
|
311
|
-
function escapeXhtml(string) {
|
312
|
-
return string.replace(/#/g, '%23').replace(/\n/g, '%0A');
|
313
|
-
}
|
314
|
-
|
315
|
-
function getWidth(node) {
|
316
|
-
var leftBorder = px(node, 'border-left-width');
|
317
|
-
var rightBorder = px(node, 'border-right-width');
|
318
|
-
return node.scrollWidth + leftBorder + rightBorder;
|
319
|
-
}
|
320
|
-
|
321
|
-
function getHeight(node) {
|
322
|
-
var topBorder = px(node, 'border-top-width');
|
323
|
-
var bottomBorder = px(node, 'border-bottom-width');
|
324
|
-
return node.scrollHeight + topBorder + bottomBorder;
|
325
|
-
}
|
326
|
-
|
327
|
-
function px(node, styleProperty) {
|
328
|
-
var value = _window["default"].getComputedStyle(node).getPropertyValue(styleProperty);
|
329
|
-
|
330
|
-
return parseFloat(value.replace('px', ''));
|
331
|
-
}
|
332
|
-
|
333
|
-
function resolveUrl(url, baseUrl) {
|
334
|
-
var doc = _document["default"].implementation.createHTMLDocument();
|
335
|
-
|
336
|
-
var base = doc.createElement('base');
|
337
|
-
doc.head.appendChild(base);
|
338
|
-
var a = doc.createElement('a');
|
339
|
-
doc.body.appendChild(a);
|
340
|
-
base.href = baseUrl;
|
341
|
-
a.href = url;
|
342
|
-
return a.href;
|
343
|
-
}
|
344
|
-
|
345
|
-
function getAndEncode(url, options) {
|
346
|
-
var TIMEOUT = 30000;
|
347
|
-
|
348
|
-
if (options.cacheBust) {
|
349
|
-
// Cache bypass so we dont have CORS issues with cached images
|
350
|
-
// Source: https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Bypassing_the_cache
|
351
|
-
url += (/\?/.test(url) ? '&' : '?') + new Date().getTime();
|
352
|
-
}
|
353
|
-
|
354
|
-
return new Promise(function (resolve) {
|
355
|
-
var request = new _window["default"].XMLHttpRequest();
|
356
|
-
request.onreadystatechange = done;
|
357
|
-
request.ontimeout = timeout;
|
358
|
-
request.responseType = 'blob';
|
359
|
-
request.timeout = TIMEOUT;
|
360
|
-
request.open('GET', url, true);
|
361
|
-
request.send();
|
362
|
-
var placeholder;
|
363
|
-
|
364
|
-
if (options.imagePlaceholder) {
|
365
|
-
var split = options.imagePlaceholder.split(/,/);
|
366
|
-
|
367
|
-
if (split && split[1]) {
|
368
|
-
placeholder = split[1];
|
369
|
-
}
|
370
|
-
}
|
371
|
-
|
372
|
-
function done() {
|
373
|
-
if (request.readyState !== 4) return;
|
374
|
-
|
375
|
-
if (request.status !== 200) {
|
376
|
-
if (placeholder) {
|
377
|
-
resolve(placeholder);
|
378
|
-
} else {
|
379
|
-
fail("cannot fetch resource: ".concat(url, ", status: ").concat(request.status));
|
380
|
-
}
|
381
|
-
|
382
|
-
return;
|
383
|
-
}
|
384
|
-
|
385
|
-
var encoder = new _window["default"].FileReader();
|
386
|
-
|
387
|
-
encoder.onloadend = function () {
|
388
|
-
var content = encoder.result.split(/,/)[1];
|
389
|
-
resolve(content);
|
390
|
-
};
|
391
|
-
|
392
|
-
encoder.readAsDataURL(request.response);
|
393
|
-
}
|
394
|
-
|
395
|
-
function timeout() {
|
396
|
-
if (placeholder) {
|
397
|
-
resolve(placeholder);
|
398
|
-
} else {
|
399
|
-
fail("timeout of ".concat(TIMEOUT, "ms occurred while fetching resource: ").concat(url));
|
400
|
-
}
|
401
|
-
}
|
402
|
-
|
403
|
-
function fail(message) {
|
404
|
-
_console["default"].error(message);
|
405
|
-
|
406
|
-
resolve('');
|
407
|
-
}
|
408
|
-
});
|
409
|
-
}
|
410
|
-
|
411
|
-
function concatAndResolveUrl(base, url) {
|
412
|
-
return new URL(url, base).href;
|
413
|
-
} // Set relative URL in stylesheet to absolute url
|
414
|
-
|
415
|
-
|
416
|
-
function setStyleSheetBaseHref(text, base) {
|
417
|
-
function addBaseHrefToUrl(match, p1) {
|
418
|
-
var url = /^http/i.test(p1) ? p1 : concatAndResolveUrl(base, p1);
|
419
|
-
return "url('".concat(url, "')");
|
420
|
-
}
|
421
|
-
|
422
|
-
return isSrcAsDataUrl(text) ? text : text.replace(/url\(['"]?([^'"]+?)['"]?\)/g, addBaseHrefToUrl);
|
423
|
-
}
|
424
|
-
|
425
|
-
function toStyleSheet(text) {
|
426
|
-
var doc = _document["default"].implementation.createHTMLDocument('');
|
427
|
-
|
428
|
-
var styleElement = _document["default"].createElement('style');
|
429
|
-
|
430
|
-
styleElement.textContent = text;
|
431
|
-
doc.body.appendChild(styleElement);
|
432
|
-
return styleElement.sheet;
|
433
|
-
}
|
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
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
import { PostProcessEffect } from '@deck.gl/core/typed';
|
2
|
-
import { VisState } from '@kepler.gl/schemas';
|
3
|
-
import { MapState, Effect, EffectProps, EffectDescription } from '@kepler.gl/types';
|
4
|
-
export declare function computeDeckEffects({ visState, mapState }: {
|
5
|
-
visState: VisState;
|
6
|
-
mapState: MapState;
|
7
|
-
}): PostProcessEffect[];
|
8
|
-
/**
|
9
|
-
* Always keep light & shadow effect at the top
|
10
|
-
*/
|
11
|
-
export declare const fixEffectOrder: (effects: Effect[], effectOrder: string[]) => string[];
|
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'];
|