clientnode 4.0.1435 → 4.0.1437
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/Lock.js +83 -94
- package/dist/Logger.js +163 -715
- package/dist/Semaphore.js +46 -81
- package/dist/array.js +337 -568
- package/dist/cli.js +37 -71
- package/dist/constants.js +110 -209
- package/dist/context.js +25 -229
- package/dist/cookie.js +48 -226
- package/dist/data-transfer.js +166 -725
- package/dist/datetime.js +241 -1059
- package/dist/domNode.js +277 -441
- package/dist/expression/evaluators.js +234 -1112
- package/dist/expression/helper.js +82 -135
- package/dist/expression/index.js +10 -1245
- package/dist/expression/indicator-functions.js +21 -239
- package/dist/expression/type.js +4 -34
- package/dist/filesystem.js +323 -309
- package/dist/function.js +51 -125
- package/dist/index.js +26 -2709
- package/dist/indicators.js +68 -440
- package/dist/module.js +78 -164
- package/dist/number.js +25 -423
- package/dist/object.js +771 -852
- package/dist/process.js +39 -245
- package/dist/property-types.js +96 -157
- package/dist/scope.js +56 -1825
- package/dist/string.js +603 -909
- package/dist/test-helper.js +171 -541
- package/dist/type.js +8 -37
- package/dist/utility.js +91 -336
- package/package.json +2 -2
- package/dist/Lock.d.ts +0 -39
- package/dist/Logger.d.ts +0 -102
- package/dist/Semaphore.d.ts +0 -29
- package/dist/array.d.ts +0 -150
- package/dist/bundle/Lock.js +0 -111
- package/dist/bundle/Logger.js +0 -705
- package/dist/bundle/Semaphore.js +0 -100
- package/dist/bundle/array.js +0 -648
- package/dist/bundle/cli.js +0 -85
- package/dist/bundle/constants.js +0 -225
- package/dist/bundle/context.js +0 -243
- package/dist/bundle/cookie.js +0 -262
- package/dist/bundle/data-transfer.js +0 -741
- package/dist/bundle/datetime.js +0 -1064
- package/dist/bundle/domNode.js +0 -471
- package/dist/bundle/expression/evaluators.js +0 -1115
- package/dist/bundle/expression/helper.js +0 -106
- package/dist/bundle/expression/index.js +0 -1223
- package/dist/bundle/expression/indicator-functions.js +0 -235
- package/dist/bundle/expression/type.js +0 -50
- package/dist/bundle/filesystem.js +0 -374
- package/dist/bundle/function.js +0 -105
- package/dist/bundle/index.js +0 -2686
- package/dist/bundle/indicators.js +0 -459
- package/dist/bundle/module.js +0 -180
- package/dist/bundle/number.js +0 -425
- package/dist/bundle/object.js +0 -1004
- package/dist/bundle/process.js +0 -275
- package/dist/bundle/property-types.js +0 -167
- package/dist/bundle/scope.js +0 -1808
- package/dist/bundle/string.js +0 -1095
- package/dist/bundle/test-helper.js +0 -690
- package/dist/bundle/type.js +0 -50
- package/dist/bundle/utility.js +0 -362
- package/dist/cli.d.ts +0 -31
- package/dist/compatible/Lock.js +0 -111
- package/dist/compatible/Logger.js +0 -705
- package/dist/compatible/Semaphore.js +0 -100
- package/dist/compatible/array.js +0 -648
- package/dist/compatible/cli.js +0 -85
- package/dist/compatible/constants.js +0 -225
- package/dist/compatible/context.js +0 -243
- package/dist/compatible/cookie.js +0 -262
- package/dist/compatible/data-transfer.js +0 -741
- package/dist/compatible/datetime.js +0 -1064
- package/dist/compatible/domNode.js +0 -471
- package/dist/compatible/expression/evaluators.js +0 -1115
- package/dist/compatible/expression/helper.js +0 -106
- package/dist/compatible/expression/index.js +0 -1223
- package/dist/compatible/expression/indicator-functions.js +0 -235
- package/dist/compatible/expression/type.js +0 -50
- package/dist/compatible/filesystem.js +0 -374
- package/dist/compatible/function.js +0 -105
- package/dist/compatible/index.js +0 -2686
- package/dist/compatible/indicators.js +0 -459
- package/dist/compatible/module.js +0 -180
- package/dist/compatible/number.js +0 -425
- package/dist/compatible/object.js +0 -1004
- package/dist/compatible/process.js +0 -275
- package/dist/compatible/property-types.js +0 -167
- package/dist/compatible/scope.js +0 -1808
- package/dist/compatible/string.js +0 -1095
- package/dist/compatible/test-helper.js +0 -690
- package/dist/compatible/type.js +0 -50
- package/dist/compatible/utility.js +0 -362
- package/dist/constants.d.ts +0 -99
- package/dist/context.d.ts +0 -8
- package/dist/cookie.d.ts +0 -31
- package/dist/data-transfer.d.ts +0 -45
- package/dist/datetime.d.ts +0 -37
- package/dist/domNode.d.ts +0 -82
- package/dist/expression/evaluators.d.ts +0 -55
- package/dist/expression/helper.d.ts +0 -4
- package/dist/expression/index.d.ts +0 -7
- package/dist/expression/indicator-functions.d.ts +0 -14
- package/dist/expression/type.d.ts +0 -70
- package/dist/filesystem.d.ts +0 -143
- package/dist/function.d.ts +0 -20
- package/dist/index.d.ts +0 -23
- package/dist/indicators.d.ts +0 -68
- package/dist/module.d.ts +0 -8
- package/dist/number.d.ts +0 -35
- package/dist/object.d.ts +0 -231
- package/dist/process.d.ts +0 -22
- package/dist/property-types.d.ts +0 -460
- package/dist/scope.d.ts +0 -44
- package/dist/string.d.ts +0 -312
- package/dist/test/Lock.d.ts +0 -1
- package/dist/test/Logger.d.ts +0 -1
- package/dist/test/Semaphore.d.ts +0 -1
- package/dist/test/array.d.ts +0 -1
- package/dist/test/cookie.d.ts +0 -1
- package/dist/test/data-transfer.d.ts +0 -1
- package/dist/test/datetime.d.ts +0 -1
- package/dist/test/domNode.d.ts +0 -1
- package/dist/test/expression/evaluators.d.ts +0 -1
- package/dist/test/expression/helper.d.ts +0 -1
- package/dist/test/expression/indicator-functions.d.ts +0 -1
- package/dist/test/filesystem.d.ts +0 -1
- package/dist/test/function.d.ts +0 -1
- package/dist/test/indicators.d.ts +0 -1
- package/dist/test/number.d.ts +0 -1
- package/dist/test/object.d.ts +0 -1
- package/dist/test/process.d.ts +0 -1
- package/dist/test/property-types.d.ts +0 -1
- package/dist/test/scope.d.ts +0 -1
- package/dist/test/string.d.ts +0 -1
- package/dist/test/utility.d.ts +0 -1
- package/dist/test-helper.d.ts +0 -143
- package/dist/type.d.ts +0 -230
- package/dist/utility.d.ts +0 -44
package/dist/domNode.js
CHANGED
|
@@ -1,82 +1,9 @@
|
|
|
1
|
-
'use strict';if(typeof module!=='undefined'&&module!==null&&eval('typeof require')!=='undefined'&&eval('require')!==null&&'main'in eval('require')&&eval('typeof require.main')!=='undefined'&&eval('require.main')!==null){var ORIGINAL_MAIN_MODULE=module;if(module!==eval('require.main')&&'paths'in module&&'paths'in eval('require.main')&&typeof __dirname!=='undefined'&&__dirname!==null)module.paths=eval('require.main.paths').concat(module.paths.filter(function(path){return eval('require.main.paths').includes(path)}))};if(typeof window==='undefined'||window===null)var window=(typeof global==='undefined'||global===null)?{}:global;(function webpackUniversalModuleDefinition(root, factory) {
|
|
2
|
-
if(typeof exports === 'object' && typeof module === 'object')
|
|
3
|
-
module.exports = factory(require("core-js/modules/es.array.includes.js"));
|
|
4
|
-
else if(typeof define === 'function' && define.amd)
|
|
5
|
-
define(["core-js/modules/es.array.includes.js"], factory);
|
|
6
|
-
else {
|
|
7
|
-
var a = typeof exports === 'object' ? factory(require("core-js/modules/es.array.includes.js")) : factory(root["core-js/modules/es.array.includes.js"]);
|
|
8
|
-
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
|
|
9
|
-
}
|
|
10
|
-
})(this, function(__WEBPACK_EXTERNAL_MODULE__0__) {
|
|
11
|
-
return /******/ (function() { // webpackBootstrap
|
|
12
|
-
/******/ var __webpack_modules__ = ({
|
|
13
|
-
|
|
14
|
-
/***/ 5:
|
|
15
|
-
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
16
|
-
|
|
17
|
-
"use strict";
|
|
18
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
19
|
-
/* harmony export */ NOOP: function() { return /* binding */ NOOP; },
|
|
20
|
-
/* harmony export */ globalContext: function() { return /* binding */ globalContext; }
|
|
21
|
-
/* harmony export */ });
|
|
22
|
-
/* unused harmony exports setGlobalContext, MAXIMAL_NUMBER_OF_ITERATIONS, mockConsole */
|
|
23
|
-
/* unused harmony import specifier */ var CONSOLE_METHODS;
|
|
24
|
-
/* harmony import */ var _module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
|
|
25
1
|
// #!/usr/bin/env babel-node
|
|
26
2
|
// -*- coding: utf-8 -*-
|
|
27
|
-
/** @module
|
|
28
|
-
|
|
29
|
-
[Project page](https://torben.website/clientnode)
|
|
30
|
-
|
|
31
|
-
Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
|
|
32
|
-
|
|
33
|
-
License
|
|
34
|
-
-------
|
|
35
|
-
|
|
36
|
-
This library written by Torben Sickert stands under a creative commons
|
|
37
|
-
naming 3.0 unported license.
|
|
38
|
-
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
39
|
-
endregion
|
|
40
|
-
*/var _optionalRequire$defa,_optionalRequire;function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t.return||t.return()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}var globalContext=(0,_module__WEBPACK_IMPORTED_MODULE_0__.determineGlobalContext)();var setGlobalContext=function setGlobalContext(context){globalContext=context};globalContext.fetch=globalContext.fetch?globalContext.fetch.bind(globalContext):(_optionalRequire$defa=(_optionalRequire=(0,_module__WEBPACK_IMPORTED_MODULE_0__.optionalRequire)("node-fetch"))===null||_optionalRequire===void 0?void 0:_optionalRequire.default)!==null&&_optionalRequire$defa!==void 0?_optionalRequire$defa:function(){for(var _len=arguments.length,parameters=new Array(_len),_key=0;_key<_len;_key++){parameters[_key]=arguments[_key]}return (0,_module__WEBPACK_IMPORTED_MODULE_0__.optionalImport)(/* webpackIgnore: true */"node-fetch").then(function(module){var _ref;return(_ref=module).default.apply(_ref,parameters)})};var MAXIMAL_NUMBER_OF_ITERATIONS=(/* unused pure expression or super */ null && ({value:100}));// A no-op dummy function.
|
|
41
|
-
var NOOP=function NOOP(){// Do nothing.
|
|
42
|
-
};var mockConsole=function mockConsole(){// Avoid errors in browsers that lack a console.
|
|
43
|
-
if(!Object.prototype.hasOwnProperty.call(globalContext,"console"))globalContext.console={};if(!globalContext.console)globalContext.console={};var _iterator=_createForOfIteratorHelper(CONSOLE_METHODS),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var methodName=_step.value;if(!(methodName in globalContext.console))globalContext.console[methodName]=NOOP}}catch(err){_iterator.e(err)}finally{_iterator.f()}};
|
|
44
|
-
|
|
45
|
-
/***/ }),
|
|
3
|
+
/** @module domNode */
|
|
4
|
+
'use strict';
|
|
46
5
|
|
|
47
|
-
|
|
48
|
-
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
49
|
-
|
|
50
|
-
"use strict";
|
|
51
|
-
__webpack_require__.r(__webpack_exports__);
|
|
52
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
53
|
-
/* harmony export */ MANUAL_SCROLL_EVENT_NAMES: function() { return /* binding */ MANUAL_SCROLL_EVENT_NAMES; },
|
|
54
|
-
/* harmony export */ SCROLL_EVENT_NAMES: function() { return /* binding */ SCROLL_EVENT_NAMES; },
|
|
55
|
-
/* harmony export */ STOP_AUTO_SCROLLING: function() { return /* binding */ STOP_AUTO_SCROLLING; },
|
|
56
|
-
/* harmony export */ closest: function() { return /* binding */ closest; },
|
|
57
|
-
/* harmony export */ createDomNodes: function() { return /* binding */ createDomNodes; },
|
|
58
|
-
/* harmony export */ fade: function() { return /* binding */ fade; },
|
|
59
|
-
/* harmony export */ fadeIn: function() { return /* binding */ fadeIn; },
|
|
60
|
-
/* harmony export */ fadeOut: function() { return /* binding */ fadeOut; },
|
|
61
|
-
/* harmony export */ getAll: function() { return /* binding */ getAll; },
|
|
62
|
-
/* harmony export */ getParents: function() { return /* binding */ getParents; },
|
|
63
|
-
/* harmony export */ getText: function() { return /* binding */ _getText; },
|
|
64
|
-
/* harmony export */ interruptableScrollTo: function() { return /* binding */ interruptableScrollTo; },
|
|
65
|
-
/* harmony export */ isEquivalent: function() { return /* binding */ isEquivalent; },
|
|
66
|
-
/* harmony export */ isHidden: function() { return /* binding */ _isHidden; },
|
|
67
|
-
/* harmony export */ onDocumentReady: function() { return /* binding */ onDocumentReady; },
|
|
68
|
-
/* harmony export */ replace: function() { return /* binding */ replace; },
|
|
69
|
-
/* harmony export */ scrollTo: function() { return /* binding */ scrollTo; },
|
|
70
|
-
/* harmony export */ unwrap: function() { return /* binding */ unwrap; },
|
|
71
|
-
/* harmony export */ wrap: function() { return /* binding */ wrap; }
|
|
72
|
-
/* harmony export */ });
|
|
73
|
-
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
|
|
74
|
-
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
75
|
-
/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5);
|
|
76
|
-
/* harmony import */ var _utility__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(13);
|
|
77
|
-
// #!/usr/bin/env babel-node
|
|
78
|
-
// -*- coding: utf-8 -*-
|
|
79
|
-
/** @module domNode *//* !
|
|
6
|
+
/* !
|
|
80
7
|
region header
|
|
81
8
|
[Project page](https://torben.website/clientnode)
|
|
82
9
|
|
|
@@ -89,10 +16,69 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
89
16
|
naming 3.0 unported license.
|
|
90
17
|
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
91
18
|
endregion
|
|
92
|
-
*/
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
19
|
+
*/
|
|
20
|
+
import "core-js/modules/es.array.includes.js";
|
|
21
|
+
import "core-js/modules/es.array.push.js";
|
|
22
|
+
import { globalContext, NOOP } from "./context.js";
|
|
23
|
+
import { timeout } from "./utility.js";
|
|
24
|
+
export const createDomNodes = html => {
|
|
25
|
+
const domNodeWrapper = document.createElement('div');
|
|
26
|
+
domNodeWrapper.innerHTML = html;
|
|
27
|
+
if (domNodeWrapper.childNodes.length === 1)
|
|
28
|
+
/*
|
|
29
|
+
NOTE: We need to clone the nested child to decouple it from its
|
|
30
|
+
parent node.
|
|
31
|
+
*/
|
|
32
|
+
return domNodeWrapper.childNodes[0].cloneNode(true);
|
|
33
|
+
return domNodeWrapper;
|
|
34
|
+
};
|
|
35
|
+
export const fade = (domNode, intervalInMilliseconds = 200, out = true) => {
|
|
36
|
+
const transitionBackup = domNode.style.transition;
|
|
37
|
+
const visibleBackup = domNode.style.visibility;
|
|
38
|
+
const opacityBackup = domNode.style.opacity;
|
|
39
|
+
const hadStyleAttribute = domNode.hasAttribute('style');
|
|
40
|
+
if (out) {
|
|
41
|
+
domNode.style.visibility = 'hidden';
|
|
42
|
+
domNode.style.opacity = '0';
|
|
43
|
+
domNode.style.transition = `visibility 0s ${String(intervalInMilliseconds)}ms, ` + `opacity ${String(intervalInMilliseconds)}ms linear`;
|
|
44
|
+
} else {
|
|
45
|
+
domNode.style.visibility = 'visible';
|
|
46
|
+
domNode.style.opacity = '1';
|
|
47
|
+
domNode.style.transition = `opacity ${String(intervalInMilliseconds)}ms linear`;
|
|
48
|
+
}
|
|
49
|
+
let clearTimeoutAndResetDomNode = NOOP;
|
|
50
|
+
let resolved = false;
|
|
51
|
+
const promise = new Promise(resolve => {
|
|
52
|
+
clearTimeoutAndResetDomNode = () => {
|
|
53
|
+
domNode.style.transition = transitionBackup;
|
|
54
|
+
resolved = true;
|
|
55
|
+
resolve();
|
|
56
|
+
};
|
|
57
|
+
void timeout(intervalInMilliseconds).then(clearTimeoutAndResetDomNode);
|
|
58
|
+
});
|
|
59
|
+
promise.clear = () => {
|
|
60
|
+
if (!resolved) {
|
|
61
|
+
domNode.style.transition = 'none';
|
|
62
|
+
clearTimeoutAndResetDomNode();
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
promise.resetStyles = () => {
|
|
66
|
+
if (hadStyleAttribute) {
|
|
67
|
+
domNode.style.transition = transitionBackup;
|
|
68
|
+
domNode.style.visibility = visibleBackup;
|
|
69
|
+
domNode.style.opacity = opacityBackup;
|
|
70
|
+
} else domNode.removeAttribute('style');
|
|
71
|
+
};
|
|
72
|
+
return promise;
|
|
73
|
+
};
|
|
74
|
+
export const fadeIn = (domNode, intervalInMilliseconds = 200) => fade(domNode, intervalInMilliseconds, false);
|
|
75
|
+
export const fadeOut = (domNode, intervalInMilliseconds = 200) => fade(domNode, intervalInMilliseconds);
|
|
76
|
+
export const STOP_AUTO_SCROLLING = {
|
|
77
|
+
value: NOOP
|
|
78
|
+
};
|
|
79
|
+
export const MANUAL_SCROLL_EVENT_NAMES = ['DOMMouseScroll', 'keydown', 'mousedown', 'mousewheel', 'wheel', 'touchstart', 'touchmove'];
|
|
80
|
+
export const SCROLL_EVENT_NAMES = ['scroll'].concat(MANUAL_SCROLL_EVENT_NAMES);
|
|
81
|
+
/**
|
|
96
82
|
* Smoothly scrolls both horizontally and vertically to a target DOM node.
|
|
97
83
|
* Cancels instantly if the user interacts with the mouse, touch, or keys.
|
|
98
84
|
* @param givenOptions - Configuration options.
|
|
@@ -105,22 +91,142 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
105
91
|
* @param givenOptions.offset - Pixel offsets.
|
|
106
92
|
* @param givenOptions.offset.top - Vertical offset in pixels.
|
|
107
93
|
* @param givenOptions.offset.left - Horizontal offset in pixels.
|
|
108
|
-
*/
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
94
|
+
*/
|
|
95
|
+
export const interruptableScrollTo = (givenOptions = {}) => {
|
|
96
|
+
if (!(globalContext.document && globalContext.window)) return;
|
|
97
|
+
const document = globalContext.document;
|
|
98
|
+
const body = document.body;
|
|
99
|
+
const window = globalContext.window;
|
|
100
|
+
if (givenOptions.containerDomNode && !('getBoundingClientRect' in givenOptions.containerDomNode) && 'parentElement' in givenOptions.containerDomNode) givenOptions.containerDomNode = givenOptions.containerDomNode.parentElement;
|
|
101
|
+
if (givenOptions.targetDomNode && !('getBoundingClientRect' in givenOptions.targetDomNode) && 'parentElement' in givenOptions.targetDomNode) givenOptions.targetDomNode = givenOptions.targetDomNode.parentElement;
|
|
102
|
+
const options = {
|
|
103
|
+
targetDomNode: body,
|
|
104
|
+
containerDomNode: window,
|
|
105
|
+
durationInMilliseconds: 500,
|
|
106
|
+
offset: {
|
|
107
|
+
top: 0,
|
|
108
|
+
left: 0,
|
|
109
|
+
...(givenOptions.offset || {})
|
|
110
|
+
},
|
|
111
|
+
interruptOnManualScroll: true,
|
|
112
|
+
...givenOptions
|
|
113
|
+
};
|
|
114
|
+
const isWindow = options.containerDomNode === window;
|
|
115
|
+
|
|
116
|
+
// 1. Get current starting scroll positions
|
|
117
|
+
const startY = isWindow ? window.scrollY || document.documentElement.scrollTop : options.containerDomNode.scrollTop;
|
|
118
|
+
const startX = isWindow ? window.scrollX || document.documentElement.scrollLeft : options.containerDomNode.scrollLeft;
|
|
119
|
+
|
|
120
|
+
// 2. Calculate targetDomNode positions for both axes
|
|
121
|
+
let targetY;
|
|
122
|
+
let targetX;
|
|
123
|
+
if (isWindow) {
|
|
124
|
+
const rect = options.targetDomNode.getBoundingClientRect();
|
|
125
|
+
targetY = rect.top + (window.scrollY || document.documentElement.scrollTop) - options.offset.top;
|
|
126
|
+
targetX = rect.left + (window.scrollX || document.documentElement.scrollLeft) - options.offset.left;
|
|
127
|
+
} else {
|
|
128
|
+
// Relative to the scrollable parent container
|
|
129
|
+
targetY = options.targetDomNode.offsetTop - options.containerDomNode.offsetTop - options.offset.top;
|
|
130
|
+
targetX = options.targetDomNode.offsetLeft - options.containerDomNode.offsetLeft - options.offset.left;
|
|
131
|
+
}
|
|
132
|
+
const distanceY = targetY - startY;
|
|
133
|
+
const distanceX = targetX - startX;
|
|
134
|
+
|
|
135
|
+
// If no movement is needed, exit immediately
|
|
136
|
+
if (distanceY === 0 && distanceX === 0) return;
|
|
137
|
+
let startTime = null;
|
|
138
|
+
let animationFrameId = null;
|
|
139
|
+
|
|
140
|
+
// Easing function
|
|
141
|
+
const easeInOutQuad = time => time < 0.5 ? 2 * time * time : -1 + (4 - 2 * time) * time;
|
|
142
|
+
if (options.interruptOnManualScroll) {
|
|
143
|
+
// 3. Define the interrupt / teardown system
|
|
144
|
+
STOP_AUTO_SCROLLING.value = () => {
|
|
145
|
+
if (animationFrameId) {
|
|
146
|
+
cancelAnimationFrame(animationFrameId);
|
|
147
|
+
animationFrameId = null;
|
|
148
|
+
}
|
|
149
|
+
for (const node of [body, document.querySelector('html'), window]) for (const name of MANUAL_SCROLL_EVENT_NAMES) node?.removeEventListener(name, STOP_AUTO_SCROLLING.value);
|
|
150
|
+
STOP_AUTO_SCROLLING.value = NOOP;
|
|
151
|
+
};
|
|
152
|
+
for (const node of [body, document.querySelector('html'), window]) for (const name of MANUAL_SCROLL_EVENT_NAMES) node?.addEventListener(name, STOP_AUTO_SCROLLING.value, {
|
|
153
|
+
passive: true
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// 4. Multi-axis animation loop
|
|
158
|
+
const step = currentTime => {
|
|
159
|
+
if (!startTime) startTime = currentTime;
|
|
160
|
+
const progress = currentTime - startTime;
|
|
161
|
+
const timeRatio = Math.min(progress / options.durationInMilliseconds, 1);
|
|
162
|
+
const easedRatio = easeInOutQuad(timeRatio);
|
|
163
|
+
|
|
164
|
+
// Linearly interpolate the positions based on eased progress.
|
|
165
|
+
const nextY = startY + distanceY * easedRatio;
|
|
166
|
+
const nextX = startX + distanceX * easedRatio;
|
|
167
|
+
|
|
168
|
+
// Apply scroll to window or container.
|
|
169
|
+
if (isWindow) window.scrollTo(nextX, nextY);else {
|
|
170
|
+
;
|
|
171
|
+
options.containerDomNode.scrollTop = nextY;
|
|
172
|
+
options.containerDomNode.scrollLeft = nextX;
|
|
173
|
+
}
|
|
174
|
+
if (timeRatio < 1) animationFrameId = requestAnimationFrame(step);else STOP_AUTO_SCROLLING.value();
|
|
175
|
+
};
|
|
176
|
+
animationFrameId = requestAnimationFrame(step);
|
|
177
|
+
};
|
|
178
|
+
/**
|
|
118
179
|
* Scrolls to the given DomNode's location or tio of the page.
|
|
119
180
|
* @param targetDomNode - DomNode to scroll to. If not given, scrolls to the
|
|
120
181
|
* top of the page.
|
|
121
182
|
* @param behavior - Scroll behavior to use.
|
|
122
|
-
*/
|
|
123
|
-
|
|
183
|
+
*/
|
|
184
|
+
export const scrollTo = (targetDomNode = null, behavior = 'smooth') => {
|
|
185
|
+
if (targetDomNode && !('getBoundingClientRect' in targetDomNode)) targetDomNode = targetDomNode.parentElement;
|
|
186
|
+
const {
|
|
187
|
+
left,
|
|
188
|
+
top
|
|
189
|
+
} = targetDomNode ? targetDomNode.getBoundingClientRect() : {
|
|
190
|
+
left: 0,
|
|
191
|
+
top: 0
|
|
192
|
+
};
|
|
193
|
+
globalContext.window?.scrollTo({
|
|
194
|
+
left,
|
|
195
|
+
top,
|
|
196
|
+
behavior
|
|
197
|
+
});
|
|
198
|
+
};
|
|
199
|
+
export const getAll = root => {
|
|
200
|
+
if (!globalContext.document) return [];
|
|
201
|
+
const nodes = [];
|
|
202
|
+
// SHOW_ALL includes elements, text, and comments
|
|
203
|
+
const walker = globalContext.document.createTreeWalker(root, NodeFilter.SHOW_ALL, null);
|
|
204
|
+
let currentNode = walker.currentNode;
|
|
205
|
+
while (currentNode) {
|
|
206
|
+
nodes.push(currentNode);
|
|
207
|
+
currentNode = walker.nextNode();
|
|
208
|
+
}
|
|
209
|
+
return nodes;
|
|
210
|
+
};
|
|
211
|
+
export const closest = (node, selector, startWithParent = false) => 'closest' in node && !startWithParent ? node.closest(selector) : node.parentElement?.closest(selector) || null;
|
|
212
|
+
export const getParents = node => {
|
|
213
|
+
const result = [];
|
|
214
|
+
while (node.parentNode) {
|
|
215
|
+
result.push(node.parentNode);
|
|
216
|
+
node = node.parentNode;
|
|
217
|
+
}
|
|
218
|
+
return result;
|
|
219
|
+
};
|
|
220
|
+
export const getText = (root, recursive = false) => {
|
|
221
|
+
if (root.nodeType === Node.TEXT_NODE) {
|
|
222
|
+
const content = root.nodeValue?.trim();
|
|
223
|
+
if (content) return [content];
|
|
224
|
+
}
|
|
225
|
+
const result = [];
|
|
226
|
+
for (const domNode of root.childNodes) if (recursive || domNode.nodeType === Node.TEXT_NODE) result.push(...getText(domNode));
|
|
227
|
+
return result;
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
124
230
|
* Checks whether given html or text strings are equal.
|
|
125
231
|
* @param first - First html, selector to dom node or text to compare.
|
|
126
232
|
* @param second - Second html, selector to dom node or text to compare.
|
|
@@ -128,13 +234,42 @@ var walker=_context__WEBPACK_IMPORTED_MODULE_1__.globalContext.document.createTr
|
|
|
128
234
|
* interpreted as html string (otherwise automatic detection will be
|
|
129
235
|
* triggered).
|
|
130
236
|
* @returns Returns true if both dom representations are equivalent.
|
|
131
|
-
*/
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
237
|
+
*/
|
|
238
|
+
export const isEquivalent = (first, second, forceHTMLString = false) => {
|
|
239
|
+
if (first === second) return true;
|
|
240
|
+
if (!(first && second)) return false;
|
|
241
|
+
if (!globalContext.document) throw new Error('Missing document in global context.');
|
|
242
|
+
const createElement = globalContext.document.createElement.bind(globalContext.document);
|
|
243
|
+
const determineHTMLPattern = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;
|
|
244
|
+
const inputs = {
|
|
245
|
+
first,
|
|
246
|
+
second
|
|
247
|
+
};
|
|
248
|
+
const domNodes = {
|
|
249
|
+
first: createElement('dummy'),
|
|
250
|
+
second: createElement('dummy')
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
/*
|
|
254
|
+
NOTE: Assume that strings that start "<" and end with ">" are mark up
|
|
255
|
+
and skip the more expensive regular expression check.
|
|
256
|
+
*/
|
|
257
|
+
for (const [type, html] of Object.entries(inputs)) if (typeof html === 'string') {
|
|
258
|
+
if (forceHTMLString || html.startsWith('<') && html.endsWith('>') && html.length >= 3 || determineHTMLPattern.test(html)) domNodes[type] = createDomNodes(html);else {
|
|
259
|
+
const domNode = document.querySelector(html);
|
|
260
|
+
if (domNode)
|
|
261
|
+
/*
|
|
262
|
+
NOTE: We copy the node tree to not manipulate the
|
|
263
|
+
original dom node by normalizing it afterward.
|
|
264
|
+
*/
|
|
265
|
+
domNodes[type] = domNode.cloneNode(true);else return false;
|
|
266
|
+
}
|
|
267
|
+
} else if ('cloneNode' in html) domNodes[type] = html.cloneNode(true);else return false;
|
|
268
|
+
domNodes.first.normalize();
|
|
269
|
+
domNodes.second.normalize();
|
|
270
|
+
return domNodes.first.isEqualNode(domNodes.second);
|
|
271
|
+
};
|
|
272
|
+
/**
|
|
138
273
|
* Checks whether the given dom node is visible or takes space in the document
|
|
139
274
|
* flow.
|
|
140
275
|
* Elements with visibility: hidden or opacity: 0 are considered to be visible,
|
|
@@ -143,353 +278,54 @@ var walker=_context__WEBPACK_IMPORTED_MODULE_1__.globalContext.document.createTr
|
|
|
143
278
|
* animation.
|
|
144
279
|
* @param domNode - To inspect.
|
|
145
280
|
* @returns A boolean indicating the visibility.
|
|
146
|
-
*/
|
|
281
|
+
*/
|
|
282
|
+
export const isHidden = domNode => !globalContext.document?.contains(domNode) || domNode.style.display === 'none' || domNode.nodeName === 'INPUT' && domNode.getAttribute('type') === 'hidden' || ['contents', 'inline'].includes(domNode.style.display) && (!('innerHTML' in domNode) || domNode.innerHTML.trim() === '') || domNode.style.height === '0px' && domNode.style.width === '0px' || Boolean(domNode.parentElement) && isHidden(domNode.parentElement);
|
|
283
|
+
export const onDocumentReady = callback => new Promise(resolve => void (async () => {
|
|
284
|
+
// See if document object model is already available.
|
|
285
|
+
if (['complete', 'interactive'].includes(document.readyState)) {
|
|
286
|
+
// Call on next available tick.
|
|
287
|
+
await timeout();
|
|
288
|
+
resolve();
|
|
289
|
+
callback?.();
|
|
290
|
+
} else document.addEventListener('DOMContentLoaded', () => {
|
|
291
|
+
resolve();
|
|
292
|
+
callback?.();
|
|
293
|
+
});
|
|
294
|
+
})());
|
|
295
|
+
|
|
296
|
+
/**
|
|
147
297
|
* Replaces a given dom node with given nodes.
|
|
148
298
|
* @param domNodeToReplace - Node to replace its children.
|
|
149
299
|
* @param replacementDomNodes - Node or array of nodes to use as replacement.
|
|
150
300
|
* @param skipEmptyTextNodes - Configures whether to trim text.
|
|
151
|
-
*/
|
|
152
|
-
|
|
301
|
+
*/
|
|
302
|
+
export const replace = (domNodeToReplace, replacementDomNodes, skipEmptyTextNodes = false) => {
|
|
303
|
+
for (const replacement of [].concat(replacementDomNodes).reverse()) if (!(skipEmptyTextNodes && replacement.nodeType === Node.TEXT_NODE && replacement.nodeValue?.trim() === '')) domNodeToReplace.after(replacement);
|
|
304
|
+
domNodeToReplace.remove();
|
|
305
|
+
};
|
|
306
|
+
export const wrap = (domNodes, wrapper) => {
|
|
307
|
+
const domNodeList = domNodes.length ? Array.from(domNodes) : [domNodes];
|
|
308
|
+
|
|
309
|
+
// Use the first element's position as the anchor point
|
|
310
|
+
const first = domNodeList[0];
|
|
311
|
+
if (first.parentNode) first.parentNode.insertBefore(wrapper, first);
|
|
312
|
+
for (const domNode of domNodeList) wrapper.appendChild(domNode);
|
|
313
|
+
};
|
|
314
|
+
/**
|
|
153
315
|
* Moves the content of a given dom node one level up and removes the given
|
|
154
316
|
* node.
|
|
155
317
|
* @param domNode - Node to unwrap.
|
|
156
318
|
* @returns List of unwrapped nodes.
|
|
157
|
-
*/
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
/* unused harmony exports isNumeric, isWindow, isArrayLike, isAnyMatching, isObject, isPlainObject, isSet, isMap, isProxy */
|
|
170
|
-
/* unused harmony import specifier */ var PLAIN_OBJECT_PROTOTYPES;
|
|
171
|
-
/* unused harmony import specifier */ var determineType;
|
|
172
|
-
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
|
|
173
|
-
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
174
|
-
// #!/usr/bin/env babel-node
|
|
175
|
-
// -*- coding: utf-8 -*-
|
|
176
|
-
/** @module indicators *//* !
|
|
177
|
-
region header
|
|
178
|
-
[Project page](https://torben.website/clientnode)
|
|
179
|
-
|
|
180
|
-
Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
|
|
181
|
-
|
|
182
|
-
License
|
|
183
|
-
-------
|
|
184
|
-
|
|
185
|
-
This library written by Torben Sickert stands under a creative commons
|
|
186
|
-
naming 3.0 unported license.
|
|
187
|
-
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
188
|
-
endregion
|
|
189
|
-
*/function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t.return||t.return()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}/**
|
|
190
|
-
* Determines whether its argument represents a JavaScript number.
|
|
191
|
-
* @param value - Value to analyze.
|
|
192
|
-
* @returns A boolean value indicating whether given object is numeric
|
|
193
|
-
* like.
|
|
194
|
-
*/var isNumeric=function isNumeric(value){var type=determineType(value);/*
|
|
195
|
-
NOTE: "parseFloat" "NaNs" numeric-cast false positives ("") but
|
|
196
|
-
misinterprets leading-number strings, particularly hex literals
|
|
197
|
-
("0x...") subtraction forces infinities to NaN.
|
|
198
|
-
*/return["number","string"].includes(type)&&!isNaN(value-parseFloat(value))};/**
|
|
199
|
-
* Determine whether the argument is a window.
|
|
200
|
-
* @param value - Value to check for.
|
|
201
|
-
* @returns Boolean value indicating the result.
|
|
202
|
-
*/var isWindow=function isWindow(value){return![null,undefined].includes(value)&&_typeof(value)==="object"&&value===(value===null||value===void 0?void 0:value.window)};/**
|
|
203
|
-
* Checks if given object is similar to an array and can be handled like an
|
|
204
|
-
* array.
|
|
205
|
-
* @param object - Object to check behavior for.
|
|
206
|
-
* @returns A boolean value indicating whether given object is array like.
|
|
207
|
-
*/var isArrayLike=function isArrayLike(object){var length;try{length=Boolean(object)&&object.length}catch(_unused){return false}var type=determineType(object);if(type==="function"||isWindow(object))return false;if(type==="array"||length===0)return true;if(typeof length==="number"&&length>0)try{var _dump=object[length-1];return true}catch(_unused2){// Continue regardless of an error.
|
|
208
|
-
}return false};/**
|
|
209
|
-
* Checks whether one of the given pattern matches given string.
|
|
210
|
-
* @param target - Target to check in pattern for.
|
|
211
|
-
* @param pattern - List of pattern to check for.
|
|
212
|
-
* @returns Value "true" if given object is matches by at leas one of the
|
|
213
|
-
* given pattern and "false" otherwise.
|
|
214
|
-
*/var isAnyMatching=function isAnyMatching(target,pattern){var _iterator=_createForOfIteratorHelper(pattern),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var currentPattern=_step.value;if(typeof currentPattern==="string"){if(currentPattern===target)return true}else if(currentPattern.test(target))return true}}catch(err){_iterator.e(err)}finally{_iterator.f()}return false};/**
|
|
215
|
-
* Checks whether given object is a native object but not null.
|
|
216
|
-
* @param value - Value to check.
|
|
217
|
-
* @returns Value "true" if given object is a plain javaScript object and
|
|
218
|
-
* "false" otherwise.
|
|
219
|
-
*/var isObject=function isObject(value){return value!==null&&_typeof(value)==="object"};/**
|
|
220
|
-
* Checks whether given object is a plain native object.
|
|
221
|
-
* @param value - Value to check.
|
|
222
|
-
* @returns Value "true" if given object is a plain javaScript object and
|
|
223
|
-
* "false" otherwise.
|
|
224
|
-
*/var isPlainObject=function isPlainObject(value){return isObject(value)&&PLAIN_OBJECT_PROTOTYPES.includes(Object.getPrototypeOf(value))};/**
|
|
225
|
-
* Checks whether given object is a set.
|
|
226
|
-
* @param value - Value to check.
|
|
227
|
-
* @returns Value "true" if given object is a set and "false" otherwise.
|
|
228
|
-
*/var isSet=function isSet(value){return determineType(value)==="set"};/**
|
|
229
|
-
* Checks whether given object is a map.
|
|
230
|
-
* @param value - Value to check.
|
|
231
|
-
* @returns Value "true" if given object is a map and "false" otherwise.
|
|
232
|
-
*/var isMap=function isMap(value){return determineType(value)==="map"};/**
|
|
233
|
-
* Checks whether given object is a proxy.
|
|
234
|
-
* @param value - Value to check.
|
|
235
|
-
* @returns Value "true" if given object is a proxy and "false" otherwise.
|
|
236
|
-
*/var isProxy=function isProxy(value){return Boolean(value.__target__)};/**
|
|
237
|
-
* Checks whether given object is a function.
|
|
238
|
-
* @param value - Value to check.
|
|
239
|
-
* @returns Value "true" if given object is a function and "false"
|
|
240
|
-
* otherwise.
|
|
241
|
-
*/var isFunction=function isFunction(value){return Boolean(value)&&["[object AsyncFunction]","[object Function]"].includes({}.toString.call(value))};
|
|
242
|
-
|
|
243
|
-
/***/ }),
|
|
244
|
-
|
|
245
|
-
/***/ 2:
|
|
246
|
-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
247
|
-
|
|
248
|
-
"use strict";
|
|
249
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
250
|
-
/* harmony export */ determineGlobalContext: function() { return /* binding */ determineGlobalContext; },
|
|
251
|
-
/* harmony export */ optionalImport: function() { return /* binding */ optionalImport; },
|
|
252
|
-
/* harmony export */ optionalRequire: function() { return /* binding */ optionalRequire; }
|
|
253
|
-
/* harmony export */ });
|
|
254
|
-
/* unused harmony exports currentRequire, clearRequireCache, isolatedRequire, isImportSyntaxSupported */
|
|
255
|
-
/* module decorator */ module = __webpack_require__.hmd(module);
|
|
256
|
-
// #!/usr/bin/env babel-node
|
|
257
|
-
// -*- coding: utf-8 -*-
|
|
258
|
-
/** @module module *//* !
|
|
259
|
-
region header
|
|
260
|
-
[Project page](https://torben.website/clientnode)
|
|
261
|
-
|
|
262
|
-
Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
|
|
263
|
-
|
|
264
|
-
License
|
|
265
|
-
-------
|
|
266
|
-
|
|
267
|
-
This library written by Torben Sickert stands under a creative commons
|
|
268
|
-
naming 3.0 unported license.
|
|
269
|
-
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
270
|
-
endregion
|
|
271
|
-
*/function _regenerator(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,n,o,i){var c=n&&n.prototype instanceof Generator?n:Generator,u=Object.create(c.prototype);return _regeneratorDefine2(u,"_invoke",function(r,n,o){var i,c,u,f=0,p=o||[],y=!1,G={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function d(t,r){return i=t,c=0,u=e,G.n=r,a}};function d(r,n){for(c=r,u=n,t=0;!y&&f&&!o&&t<p.length;t++){var o,i=p[t],d=G.p,l=i[2];r>3?(o=l===n)&&(u=i[(c=i[4])?5:(c=3,3)],i[4]=i[5]=e):i[0]<=d&&((o=r<2&&d<i[1])?(c=0,G.v=n,G.n=i[1]):d<l&&(o=r<3||i[0]>n||n>l)&&(i[4]=r,i[5]=n,G.n=l,c=0))}if(o||r>1)return a;throw y=!0,n}return function(o,p,l){if(f>1)throw TypeError("Generator is already running");for(y&&1===p&&d(p,l),c=p,u=l;(t=c<2?e:u)||!y;){i||(c?c<3?(c>1&&(G.n=-1),d(c,u)):G.n=u:G.v=u);try{if(f=2,i){if(c||(o="next"),t=i[o]){if(!(t=t.call(i,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=i.return)&&t.call(i),c<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),c=1);i=e}else if((t=(y=G.n<0)?u:r.call(n,G))!==a)break}catch(t){i=e,c=1,u=t}finally{f=1}}return{value:t,done:y}}}(r,o,i),!0),u}var a={};function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}t=Object.getPrototypeOf;var c=[][n]?t(t([][n]())):(_regeneratorDefine2(t={},n,function(){return this}),t),u=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(c);function f(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,GeneratorFunctionPrototype):(e.__proto__=GeneratorFunctionPrototype,_regeneratorDefine2(e,o,"GeneratorFunction")),e.prototype=Object.create(u),e}return GeneratorFunction.prototype=GeneratorFunctionPrototype,_regeneratorDefine2(u,"constructor",GeneratorFunctionPrototype),_regeneratorDefine2(GeneratorFunctionPrototype,"constructor",GeneratorFunction),GeneratorFunction.displayName="GeneratorFunction",_regeneratorDefine2(GeneratorFunctionPrototype,o,"GeneratorFunction"),_regeneratorDefine2(u),_regeneratorDefine2(u,o,"Generator"),_regeneratorDefine2(u,n,function(){return this}),_regeneratorDefine2(u,"toString",function(){return"[object Generator]"}),(_regenerator=function _regenerator(){return{w:i,m:f}})()}function _regeneratorDefine2(e,r,n,t){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}_regeneratorDefine2=function _regeneratorDefine(e,r,n,t){function o(r,n){_regeneratorDefine2(e,r,function(e){return this._invoke(r,n,e)})}r?i?i(e,r,{value:n,enumerable:!t,configurable:!t,writable:!t}):e[r]=n:(o("next",0),o("throw",1),o("return",2))},_regeneratorDefine2(e,r,n,t)}function asyncGeneratorStep(n,t,e,r,o,a,c){try{var i=n[a](c),u=i.value}catch(n){return void e(n)}i.done?t(u):Promise.resolve(u).then(r,o)}function _asyncToGenerator(n){return function(){var t=this,e=arguments;return new Promise(function(r,o){var a=n.apply(t,e);function _next(n){asyncGeneratorStep(a,r,o,_next,_throw,"next",n)}function _throw(n){asyncGeneratorStep(a,r,o,_next,_throw,"throw",n)}_next(void 0)})}}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t.return&&(u=t.return(),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayWithHoles(r){if(Array.isArray(r))return r}var determineGlobalContext=function determineGlobalContext(){if(typeof globalThis==="undefined"){if(typeof window==="undefined"){if(typeof __webpack_require__.g==="undefined")return false?0:module;if(Object.prototype.hasOwnProperty.call(__webpack_require__.g,"window"))return __webpack_require__.g.window;return __webpack_require__.g}return window}return globalThis};var globalContext=determineGlobalContext();// Make preprocessed require function available at runtime.
|
|
272
|
-
var currentRequire=typeof globalContext.require==="undefined"?null:globalContext.require;var optionalRequire=function optionalRequire(id){try{return currentRequire?currentRequire(id):null}catch(_unused){return null}};var clearRequireCache=function clearRequireCache(cache){if(cache===void 0){cache=(currentRequire===null||currentRequire===void 0?void 0:currentRequire.cache)||__webpack_require__.c}var backup={};for(var _i=0,_Object$entries=Object.entries(cache);_i<_Object$entries.length;_i++){var _Object$entries$_i=_slicedToArray(_Object$entries[_i],2),key=_Object$entries$_i[0],_module=_Object$entries$_i[1];backup[key]=_module;delete cache[key]}return backup};var restoreRequireCache=function restoreRequireCache(cache,backup){if(cache===void 0){cache=(currentRequire===null||currentRequire===void 0?void 0:currentRequire.cache)||__webpack_require__.c}clearRequireCache();for(var _i2=0,_Object$entries2=Object.entries(backup);_i2<_Object$entries2.length;_i2++){var _Object$entries2$_i=_slicedToArray(_Object$entries2[_i2],2),key=_Object$entries2$_i[0],_module2=_Object$entries2$_i[1];cache[key]=_module2}};var isolatedRequire=function isolatedRequire(path,requireFunction){if(requireFunction===void 0){requireFunction=currentRequire||__webpack_require__(6)}var backup=clearRequireCache(requireFunction.cache);try{return requireFunction(path);// eslint-disable-next-line no-useless-catch
|
|
273
|
-
}catch(error){throw error}finally{restoreRequireCache(requireFunction.cache,backup)}};// Make preprocessed import function available at runtime.
|
|
274
|
-
var isImportSyntaxSupported=function isImportSyntaxSupported(){try{// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
275
|
-
new Function("import(\"data:text/javascript,\")");return true}catch(_unused2){return false}};var optionalImport=/*#__PURE__*/function(){var _optionalImport=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(id,options){var _t,_t2;return _regenerator().w(function(_context){while(1)switch(_context.p=_context.n){case 0:if(options===void 0){options={}}_context.p=1;if(!isImportSyntaxSupported()){_context.n=3;break}_context.n=2;return new Function("options","return import('".concat(id,"', options)"))(options);case 2:_t=_context.v;_context.n=5;break;case 3:_context.n=4;return Promise.resolve(null);case 4:_t=_context.v;case 5:return _context.a(2,_t);case 6:_context.p=6;_t2=_context.v;_context.n=7;return Promise.resolve(null);case 7:return _context.a(2,_context.v)}},_callee,null,[[1,6]])}));function optionalImport(_x,_x2){return _optionalImport.apply(this,arguments)}return optionalImport}();
|
|
276
|
-
|
|
277
|
-
/***/ }),
|
|
278
|
-
|
|
279
|
-
/***/ 13:
|
|
280
|
-
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
281
|
-
|
|
282
|
-
"use strict";
|
|
283
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
284
|
-
/* harmony export */ timeout: function() { return /* binding */ timeout; }
|
|
285
|
-
/* harmony export */ });
|
|
286
|
-
/* unused harmony exports trailingThrottle, debounce, preventDefault, stopPropagation */
|
|
287
|
-
/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);
|
|
288
|
-
/* harmony import */ var _indicators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4);
|
|
289
|
-
// #!/usr/bin/env babel-node
|
|
290
|
-
// -*- coding: utf-8 -*-
|
|
291
|
-
/** @module utility *//* !
|
|
292
|
-
region header
|
|
293
|
-
[Project page](https://torben.website/clientnode)
|
|
294
|
-
|
|
295
|
-
Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
|
|
296
|
-
|
|
297
|
-
License
|
|
298
|
-
-------
|
|
299
|
-
|
|
300
|
-
This library written by Torben Sickert stands under a creative commons
|
|
301
|
-
naming 3.0 unported license.
|
|
302
|
-
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
303
|
-
endregion
|
|
304
|
-
*/function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}/**
|
|
305
|
-
* Prevents event functions from triggering too often by defining a minimal
|
|
306
|
-
* span between each function call. Additional arguments given to this function
|
|
307
|
-
* will be forwarded to the given event function call.
|
|
308
|
-
* @param callback - The function to call debounced.
|
|
309
|
-
* @param thresholdInMilliseconds - The minimum time span between each
|
|
310
|
-
* function call.
|
|
311
|
-
* @param additionalArguments - Additional arguments to forward to given
|
|
312
|
-
* function.
|
|
313
|
-
* @returns Returns the wrapped method.
|
|
314
|
-
*/var trailingThrottle=function trailingThrottle(callback,thresholdInMilliseconds){if(thresholdInMilliseconds===void 0){thresholdInMilliseconds=600}for(var _len=arguments.length,additionalArguments=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++){additionalArguments[_key-2]=arguments[_key]}var timeoutID=null;var recentParameters=[];return function(){for(var _len2=arguments.length,parameters=new Array(_len2),_key2=0;_key2<_len2;_key2++){parameters[_key2]=arguments[_key2]}recentParameters=parameters;if(timeoutID)return;timeoutID=setTimeout(function(){callback.apply(void 0,_toConsumableArray(recentParameters).concat(additionalArguments));// Reset for next cycle.
|
|
315
|
-
timeoutID=null;recentParameters=[]},thresholdInMilliseconds)}};/**
|
|
316
|
-
* Prevents event functions from triggering too close after each trigger by
|
|
317
|
-
* defining a minimal span between each function call. Additional arguments
|
|
318
|
-
* given to this function will be forwarded to the given event function call.
|
|
319
|
-
* @param callback - The function to call debounced.
|
|
320
|
-
* @param thresholdInMilliseconds - The minimum time span between each
|
|
321
|
-
* function call.
|
|
322
|
-
* @param additionalArguments - Additional arguments to forward to given
|
|
323
|
-
* function.
|
|
324
|
-
* @returns Returns the wrapped method.
|
|
325
|
-
*/var debounce=function debounce(callback,thresholdInMilliseconds){if(thresholdInMilliseconds===void 0){thresholdInMilliseconds=600}for(var _len3=arguments.length,additionalArguments=new Array(_len3>2?_len3-2:0),_key3=2;_key3<_len3;_key3++){additionalArguments[_key3-2]=arguments[_key3]}var timeoutPromise;var nextResultPromiseResolver;var nextResultPromise=new Promise(function(resolve){nextResultPromiseResolver=resolve});return function(){var _timeoutPromise;for(var _len4=arguments.length,parameters=new Array(_len4),_key4=0;_key4<_len4;_key4++){parameters[_key4]=arguments[_key4]}parameters=parameters.concat(additionalArguments);(_timeoutPromise=timeoutPromise)===null||_timeoutPromise===void 0||_timeoutPromise.clear();timeoutPromise=timeout(function(){nextResultPromiseResolver(callback.apply(void 0,_toConsumableArray(parameters)));nextResultPromise=new Promise(function(resolve){nextResultPromiseResolver=resolve})},thresholdInMilliseconds);return nextResultPromise}};/**
|
|
326
|
-
* Triggers given callback after given duration. Supports unlimited
|
|
327
|
-
* duration length and returns a promise which will be resolved after given
|
|
328
|
-
* duration has been passed.
|
|
329
|
-
* @param parameters - Observes the first three existing parameters. If one
|
|
330
|
-
* is a number it will be interpreted as delay in milliseconds until given
|
|
331
|
-
* callback will be triggered. If one is of type function it will be used
|
|
332
|
-
* as callback and if one is of type boolean it will indicate if returning
|
|
333
|
-
* promise should be rejected or resolved if given internally created
|
|
334
|
-
* timeout should be canceled. Additional parameters will be forwarded to
|
|
335
|
-
* given callback.
|
|
336
|
-
* @returns A promise resolving after given delay or being rejected if
|
|
337
|
-
* value "true" is within one of the first three parameters. The promise
|
|
338
|
-
* holds a boolean indicating whether timeout has been canceled or
|
|
339
|
-
* resolved.
|
|
340
|
-
*/var timeout=function timeout(){for(var _len5=arguments.length,parameters=new Array(_len5),_key5=0;_key5<_len5;_key5++){parameters[_key5]=arguments[_key5]}var callback=_context__WEBPACK_IMPORTED_MODULE_0__.NOOP;var delayInMilliseconds=0;var throwOnTimeoutClear=false;for(var _i=0,_parameters=parameters;_i<_parameters.length;_i++){var value=_parameters[_i];if(typeof value==="number"&&!isNaN(value))delayInMilliseconds=value;else if(typeof value==="boolean")throwOnTimeoutClear=value;else if((0,_indicators__WEBPACK_IMPORTED_MODULE_1__.isFunction)(value))callback=value}var rejectCallback;var resolveCallback;var result=new Promise(function(resolve,reject){rejectCallback=reject;resolveCallback=resolve});var wrappedCallback=function wrappedCallback(){var _callback;(_callback=callback).call.apply(_callback,[result].concat(parameters));resolveCallback(false)};var maximumTimeoutDelayInMilliseconds=2147483647;if(delayInMilliseconds<=maximumTimeoutDelayInMilliseconds)result.timeoutID=setTimeout(wrappedCallback,delayInMilliseconds);else{/*
|
|
341
|
-
Determine the number of times we need to delay by maximum
|
|
342
|
-
possible timeout duration.
|
|
343
|
-
*/var numberOfRemainingTimeouts=Math.floor(delayInMilliseconds/maximumTimeoutDelayInMilliseconds);var finalTimeoutDuration=delayInMilliseconds%maximumTimeoutDelayInMilliseconds;var _delay=function delay(){if(numberOfRemainingTimeouts>0){numberOfRemainingTimeouts-=1;result.timeoutID=setTimeout(_delay,maximumTimeoutDelayInMilliseconds)}else result.timeoutID=setTimeout(wrappedCallback,finalTimeoutDuration)};_delay()}result.clear=function(){if(Object.prototype.hasOwnProperty.call(result,"timeoutID")){clearTimeout(result.timeoutID);(throwOnTimeoutClear?rejectCallback:resolveCallback)(true)}};return result};var preventDefault=function preventDefault(event){event.preventDefault()};var stopPropagation=function stopPropagation(event){event.stopPropagation()};
|
|
344
|
-
|
|
345
|
-
/***/ }),
|
|
346
|
-
|
|
347
|
-
/***/ 6:
|
|
348
|
-
/***/ (function(module) {
|
|
349
|
-
|
|
350
|
-
function webpackEmptyContext(req) {
|
|
351
|
-
var e = new Error("Cannot find module '" + req + "'");
|
|
352
|
-
e.code = 'MODULE_NOT_FOUND';
|
|
353
|
-
throw e;
|
|
354
|
-
}
|
|
355
|
-
webpackEmptyContext.keys = function() { return []; };
|
|
356
|
-
webpackEmptyContext.resolve = webpackEmptyContext;
|
|
357
|
-
webpackEmptyContext.id = 6;
|
|
358
|
-
module.exports = webpackEmptyContext;
|
|
359
|
-
|
|
360
|
-
/***/ }),
|
|
361
|
-
|
|
362
|
-
/***/ 0:
|
|
363
|
-
/***/ (function(module) {
|
|
364
|
-
|
|
365
|
-
"use strict";
|
|
366
|
-
module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
|
|
367
|
-
|
|
368
|
-
/***/ })
|
|
369
|
-
|
|
370
|
-
/******/ });
|
|
371
|
-
/************************************************************************/
|
|
372
|
-
/******/ // The module cache
|
|
373
|
-
/******/ var __webpack_module_cache__ = {};
|
|
374
|
-
/******/
|
|
375
|
-
/******/ // The require function
|
|
376
|
-
/******/ function __webpack_require__(moduleId) {
|
|
377
|
-
/******/ // Check if module is in cache
|
|
378
|
-
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
379
|
-
/******/ if (cachedModule !== undefined) {
|
|
380
|
-
/******/ return cachedModule.exports;
|
|
381
|
-
/******/ }
|
|
382
|
-
/******/ // Create a new module (and put it into the cache)
|
|
383
|
-
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
384
|
-
/******/ id: moduleId,
|
|
385
|
-
/******/ loaded: false,
|
|
386
|
-
/******/ exports: {}
|
|
387
|
-
/******/ };
|
|
388
|
-
/******/
|
|
389
|
-
/******/ // Execute the module function
|
|
390
|
-
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
391
|
-
/******/
|
|
392
|
-
/******/ // Flag the module as loaded
|
|
393
|
-
/******/ module.loaded = true;
|
|
394
|
-
/******/
|
|
395
|
-
/******/ // Return the exports of the module
|
|
396
|
-
/******/ return module.exports;
|
|
397
|
-
/******/ }
|
|
398
|
-
/******/
|
|
399
|
-
/******/ // expose the module cache
|
|
400
|
-
/******/ __webpack_require__.c = __webpack_module_cache__;
|
|
401
|
-
/******/
|
|
402
|
-
/************************************************************************/
|
|
403
|
-
/******/ /* webpack/runtime/compat get default export */
|
|
404
|
-
/******/ !function() {
|
|
405
|
-
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
406
|
-
/******/ __webpack_require__.n = function(module) {
|
|
407
|
-
/******/ var getter = module && module.__esModule ?
|
|
408
|
-
/******/ function() { return module['default']; } :
|
|
409
|
-
/******/ function() { return module; };
|
|
410
|
-
/******/ __webpack_require__.d(getter, { a: getter });
|
|
411
|
-
/******/ return getter;
|
|
412
|
-
/******/ };
|
|
413
|
-
/******/ }();
|
|
414
|
-
/******/
|
|
415
|
-
/******/ /* webpack/runtime/define property getters */
|
|
416
|
-
/******/ !function() {
|
|
417
|
-
/******/ // define getter/value functions for harmony exports
|
|
418
|
-
/******/ __webpack_require__.d = function(exports, definition) {
|
|
419
|
-
/******/ if(Array.isArray(definition)) {
|
|
420
|
-
/******/ var i = 0;
|
|
421
|
-
/******/ while(i < definition.length) {
|
|
422
|
-
/******/ var key = definition[i++];
|
|
423
|
-
/******/ var binding = definition[i++];
|
|
424
|
-
/******/ if(!__webpack_require__.o(exports, key)) {
|
|
425
|
-
/******/ if(binding === 0) {
|
|
426
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
|
|
427
|
-
/******/ } else {
|
|
428
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
|
|
429
|
-
/******/ }
|
|
430
|
-
/******/ } else if(binding === 0) { i++; }
|
|
431
|
-
/******/ }
|
|
432
|
-
/******/ } else {
|
|
433
|
-
/******/ for(var key in definition) {
|
|
434
|
-
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
435
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
436
|
-
/******/ }
|
|
437
|
-
/******/ }
|
|
438
|
-
/******/ }
|
|
439
|
-
/******/ };
|
|
440
|
-
/******/ }();
|
|
441
|
-
/******/
|
|
442
|
-
/******/ /* webpack/runtime/global */
|
|
443
|
-
/******/ !function() {
|
|
444
|
-
/******/ __webpack_require__.g = (function() {
|
|
445
|
-
/******/ if (typeof globalThis === 'object') return globalThis;
|
|
446
|
-
/******/ try {
|
|
447
|
-
/******/ return this || new Function('return this')();
|
|
448
|
-
/******/ } catch (e) {
|
|
449
|
-
/******/ if (typeof window === 'object') return window;
|
|
450
|
-
/******/ }
|
|
451
|
-
/******/ })();
|
|
452
|
-
/******/ }();
|
|
453
|
-
/******/
|
|
454
|
-
/******/ /* webpack/runtime/harmony module decorator */
|
|
455
|
-
/******/ !function() {
|
|
456
|
-
/******/ __webpack_require__.hmd = function(module) {
|
|
457
|
-
/******/ module = Object.create(module);
|
|
458
|
-
/******/ if (!module.children) module.children = [];
|
|
459
|
-
/******/ Object.defineProperty(module, 'exports', {
|
|
460
|
-
/******/ enumerable: true,
|
|
461
|
-
/******/ set: function() {
|
|
462
|
-
/******/ throw new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);
|
|
463
|
-
/******/ }
|
|
464
|
-
/******/ });
|
|
465
|
-
/******/ return module;
|
|
466
|
-
/******/ };
|
|
467
|
-
/******/ }();
|
|
468
|
-
/******/
|
|
469
|
-
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
470
|
-
/******/ !function() {
|
|
471
|
-
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
|
|
472
|
-
/******/ }();
|
|
473
|
-
/******/
|
|
474
|
-
/******/ /* webpack/runtime/make namespace object */
|
|
475
|
-
/******/ !function() {
|
|
476
|
-
/******/ // define __esModule on exports
|
|
477
|
-
/******/ __webpack_require__.r = function(exports) {
|
|
478
|
-
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
479
|
-
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
480
|
-
/******/ }
|
|
481
|
-
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
482
|
-
/******/ };
|
|
483
|
-
/******/ }();
|
|
484
|
-
/******/
|
|
485
|
-
/************************************************************************/
|
|
486
|
-
/******/
|
|
487
|
-
/******/ // module cache are used so entry inlining is disabled
|
|
488
|
-
/******/ // startup
|
|
489
|
-
/******/ // Load entry module and return exports
|
|
490
|
-
/******/ var __webpack_exports__ = __webpack_require__(25);
|
|
491
|
-
/******/
|
|
492
|
-
/******/ return __webpack_exports__;
|
|
493
|
-
/******/ })()
|
|
494
|
-
;
|
|
495
|
-
});
|
|
319
|
+
*/
|
|
320
|
+
export const unwrap = domNode => {
|
|
321
|
+
const parent = domNode.parentNode;
|
|
322
|
+
const result = [];
|
|
323
|
+
// NOTE: We need to use "Array.from" to copy the list.
|
|
324
|
+
for (const childNode of Array.from(domNode.childNodes)) {
|
|
325
|
+
result.push(childNode);
|
|
326
|
+
if (parent) parent.insertBefore(childNode, domNode);
|
|
327
|
+
}
|
|
328
|
+
if (parent) parent.removeChild(domNode);
|
|
329
|
+
return result;
|
|
330
|
+
};
|
|
331
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2RvbU5vZGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gIyEvdXNyL2Jpbi9lbnYgYmFiZWwtbm9kZVxuLy8gLSotIGNvZGluZzogdXRmLTggLSotXG4vKiogQG1vZHVsZSBkb21Ob2RlICovXG4ndXNlIHN0cmljdCdcbi8qICFcbiAgICByZWdpb24gaGVhZGVyXG4gICAgW1Byb2plY3QgcGFnZV0oaHR0cHM6Ly90b3JiZW4ud2Vic2l0ZS9jbGllbnRub2RlKVxuXG4gICAgQ29weXJpZ2h0IFRvcmJlbiBTaWNrZXJ0IChpbmZvW1wifmF0flwiXXRvcmJlbi53ZWJzaXRlKSAxNi4xMi4yMDEyXG5cbiAgICBMaWNlbnNlXG4gICAgLS0tLS0tLVxuXG4gICAgVGhpcyBsaWJyYXJ5IHdyaXR0ZW4gYnkgVG9yYmVuIFNpY2tlcnQgc3RhbmRzIHVuZGVyIGEgY3JlYXRpdmUgY29tbW9uc1xuICAgIG5hbWluZyAzLjAgdW5wb3J0ZWQgbGljZW5zZS5cbiAgICBTZWUgaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMC9kZWVkLmRlXG4gICAgZW5kcmVnaW9uXG4qL1xuaW1wb3J0IHR5cGUge1xuICAgIEdpdmVuSW50ZXJydXB0YWJsZVNjcm9sbFRvT3B0aW9ucyxcbiAgICBJbnRlcnJ1cHRhYmxlU2Nyb2xsVG9PcHRpb25zLFxuICAgIEtub3duRXZlbnROYW1lLFxuICAgIE1hcHBpbmdcbn0gZnJvbSAnLi90eXBlJ1xuXG5pbXBvcnQge2dsb2JhbENvbnRleHQsIE5PT1B9IGZyb20gJy4vY29udGV4dCdcbmltcG9ydCB7dGltZW91dH0gZnJvbSAnLi91dGlsaXR5J1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRG9tTm9kZXMgPSA8VHlwZSBleHRlbmRzIE5vZGUgPSBOb2RlPihcbiAgICBodG1sOiBzdHJpbmdcbik6IFR5cGUgPT4ge1xuICAgIGNvbnN0IGRvbU5vZGVXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBkb21Ob2RlV3JhcHBlci5pbm5lckhUTUwgPSBodG1sXG5cbiAgICBpZiAoZG9tTm9kZVdyYXBwZXIuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEpXG4gICAgICAgIC8qXG4gICAgICAgICAgICBOT1RFOiBXZSBuZWVkIHRvIGNsb25lIHRoZSBuZXN0ZWQgY2hpbGQgdG8gZGVjb3VwbGUgaXQgZnJvbSBpdHNcbiAgICAgICAgICAgIHBhcmVudCBub2RlLlxuICAgICAgICAqL1xuICAgICAgICByZXR1cm4gZG9tTm9kZVdyYXBwZXIuY2hpbGROb2Rlc1swXS5jbG9uZU5vZGUodHJ1ZSkgYXMgVHlwZVxuXG4gICAgcmV0dXJuIGRvbU5vZGVXcmFwcGVyIGFzIHVua25vd24gYXMgVHlwZVxufVxuXG5leHBvcnQgY29uc3QgZmFkZSA9IChcbiAgICBkb21Ob2RlOiBIVE1MRWxlbWVudCwgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDIwMCwgb3V0ID0gdHJ1ZVxuKSA9PiB7XG4gICAgY29uc3QgdHJhbnNpdGlvbkJhY2t1cCA9IGRvbU5vZGUuc3R5bGUudHJhbnNpdGlvblxuICAgIGNvbnN0IHZpc2libGVCYWNrdXAgPSBkb21Ob2RlLnN0eWxlLnZpc2liaWxpdHlcbiAgICBjb25zdCBvcGFjaXR5QmFja3VwID0gZG9tTm9kZS5zdHlsZS5vcGFjaXR5XG4gICAgY29uc3QgaGFkU3R5bGVBdHRyaWJ1dGUgPSBkb21Ob2RlLmhhc0F0dHJpYnV0ZSgnc3R5bGUnKVxuXG4gICAgaWYgKG91dCkge1xuICAgICAgICBkb21Ob2RlLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJ1xuICAgICAgICBkb21Ob2RlLnN0eWxlLm9wYWNpdHkgPSAnMCdcbiAgICAgICAgZG9tTm9kZS5zdHlsZS50cmFuc2l0aW9uID1cbiAgICAgICAgICAgIGB2aXNpYmlsaXR5IDBzICR7U3RyaW5nKGludGVydmFsSW5NaWxsaXNlY29uZHMpfW1zLCBgICtcbiAgICAgICAgICAgIGBvcGFjaXR5ICR7U3RyaW5nKGludGVydmFsSW5NaWxsaXNlY29uZHMpfW1zIGxpbmVhcmBcbiAgICB9IGVsc2Uge1xuICAgICAgICBkb21Ob2RlLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSdcbiAgICAgICAgZG9tTm9kZS5zdHlsZS5vcGFjaXR5ID0gJzEnXG4gICAgICAgIGRvbU5vZGUuc3R5bGUudHJhbnNpdGlvbiA9XG4gICAgICAgICAgICBgb3BhY2l0eSAke1N0cmluZyhpbnRlcnZhbEluTWlsbGlzZWNvbmRzKX1tcyBsaW5lYXJgXG4gICAgfVxuXG4gICAgbGV0IGNsZWFyVGltZW91dEFuZFJlc2V0RG9tTm9kZSA9IE5PT1BcbiAgICBsZXQgcmVzb2x2ZWQgPSBmYWxzZVxuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXRBbmRSZXNldERvbU5vZGUgPSAoKSA9PiB7XG4gICAgICAgICAgICBkb21Ob2RlLnN0eWxlLnRyYW5zaXRpb24gPSB0cmFuc2l0aW9uQmFja3VwXG5cbiAgICAgICAgICAgIHJlc29sdmVkID0gdHJ1ZVxuICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgIH1cbiAgICAgICAgdm9pZCB0aW1lb3V0KGludGVydmFsSW5NaWxsaXNlY29uZHMpLnRoZW4oY2xlYXJUaW1lb3V0QW5kUmVzZXREb21Ob2RlKVxuICAgIH0pIGFzXG4gICAgICAgIFByb21pc2U8dm9pZD4gJlxuICAgICAgICB7XG4gICAgICAgICAgICBjbGVhcjogKCkgPT4gdm9pZFxuICAgICAgICAgICAgcmVzZXRTdHlsZXM6ICgpID0+IHZvaWRcbiAgICAgICAgfVxuXG4gICAgcHJvbWlzZS5jbGVhciA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFyZXNvbHZlZCkge1xuICAgICAgICAgICAgZG9tTm9kZS5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnXG4gICAgICAgICAgICBjbGVhclRpbWVvdXRBbmRSZXNldERvbU5vZGUoKVxuICAgICAgICB9XG4gICAgfVxuICAgIHByb21pc2UucmVzZXRTdHlsZXMgPSAoKSA9PiB7XG4gICAgICAgIGlmIChoYWRTdHlsZUF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgZG9tTm9kZS5zdHlsZS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkJhY2t1cFxuICAgICAgICAgICAgZG9tTm9kZS5zdHlsZS52aXNpYmlsaXR5ID0gdmlzaWJsZUJhY2t1cFxuICAgICAgICAgICAgZG9tTm9kZS5zdHlsZS5vcGFjaXR5ID0gb3BhY2l0eUJhY2t1cFxuICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIGRvbU5vZGUucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2Vcbn1cbmV4cG9ydCBjb25zdCBmYWRlSW4gPSAoZG9tTm9kZTogSFRNTEVsZW1lbnQsIGludGVydmFsSW5NaWxsaXNlY29uZHMgPSAyMDApID0+XG4gICAgZmFkZShkb21Ob2RlLCBpbnRlcnZhbEluTWlsbGlzZWNvbmRzLCBmYWxzZSlcbmV4cG9ydCBjb25zdCBmYWRlT3V0ID0gKGRvbU5vZGU6IEhUTUxFbGVtZW50LCBpbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMjAwKSA9PlxuICAgIGZhZGUoZG9tTm9kZSwgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kcylcblxuZXhwb3J0IGNvbnN0IFNUT1BfQVVUT19TQ1JPTExJTkcgPSB7dmFsdWU6IE5PT1B9XG5leHBvcnQgY29uc3QgTUFOVUFMX1NDUk9MTF9FVkVOVF9OQU1FUzogQXJyYXk8S25vd25FdmVudE5hbWU+ID0gW1xuICAgICdET01Nb3VzZVNjcm9sbCcsXG5cbiAgICAna2V5ZG93bicsXG5cbiAgICAnbW91c2Vkb3duJyxcbiAgICAnbW91c2V3aGVlbCcsXG4gICAgJ3doZWVsJyxcblxuICAgICd0b3VjaHN0YXJ0JyxcbiAgICAndG91Y2htb3ZlJ1xuXVxuZXhwb3J0IGNvbnN0IFNDUk9MTF9FVkVOVF9OQU1FUzogQXJyYXk8S25vd25FdmVudE5hbWU+ID1cbiAgICAoWydzY3JvbGwnXSBhcyBBcnJheTxLbm93bkV2ZW50TmFtZT4pLmNvbmNhdChNQU5VQUxfU0NST0xMX0VWRU5UX05BTUVTKVxuLyoqXG4gKiBTbW9vdGhseSBzY3JvbGxzIGJvdGggaG9yaXpvbnRhbGx5IGFuZCB2ZXJ0aWNhbGx5IHRvIGEgdGFyZ2V0IERPTSBub2RlLlxuICogQ2FuY2VscyBpbnN0YW50bHkgaWYgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlIG1vdXNlLCB0b3VjaCwgb3Iga2V5cy5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLnRhcmdldERvbU5vZGUgLSBUaGUgRE9NIG5vZGUgeW91IHdhbnQgdG8gc2Nyb2xsIHRvLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5jb250YWluZXJEb21Ob2RlIC0gVGhlIHNjcm9sbGFibGUgcGFyZW50LlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5kdXJhdGlvbkluTWlsbGlzZWNvbmRzIC0gQW5pbWF0aW9uIGR1cmF0aW9uIGluXG4gKiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLmludGVycnVwdE9uTWFudWFsU2Nyb2xsIC0gV2hldGhlciB0byBzdG9wIHRoZSBhbmltYXRpb25cbiAqIGlmIHRoZSB1c2VyIHN0YXJ0cyB0byBzY3JvbGwgbWFudWFsbHkuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLm9mZnNldCAtIFBpeGVsIG9mZnNldHMuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLm9mZnNldC50b3AgLSBWZXJ0aWNhbCBvZmZzZXQgaW4gcGl4ZWxzLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5vZmZzZXQubGVmdCAtIEhvcml6b250YWwgb2Zmc2V0IGluIHBpeGVscy5cbiAqL1xuZXhwb3J0IGNvbnN0IGludGVycnVwdGFibGVTY3JvbGxUbyA9IChcbiAgICBnaXZlbk9wdGlvbnM6IEdpdmVuSW50ZXJydXB0YWJsZVNjcm9sbFRvT3B0aW9ucyA9IHt9XG4pID0+IHtcbiAgICBpZiAoIShnbG9iYWxDb250ZXh0LmRvY3VtZW50ICYmIGdsb2JhbENvbnRleHQud2luZG93KSlcbiAgICAgICAgcmV0dXJuXG5cbiAgICBjb25zdCBkb2N1bWVudDogSFRNTERvY3VtZW50ID0gZ2xvYmFsQ29udGV4dC5kb2N1bWVudFxuICAgIGNvbnN0IGJvZHk6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuYm9keVxuICAgIGNvbnN0IHdpbmRvdzogV2luZG93ID0gZ2xvYmFsQ29udGV4dC53aW5kb3dcblxuICAgIGlmIChcbiAgICAgICAgZ2l2ZW5PcHRpb25zLmNvbnRhaW5lckRvbU5vZGUgJiZcbiAgICAgICAgISgnZ2V0Qm91bmRpbmdDbGllbnRSZWN0JyBpbiBnaXZlbk9wdGlvbnMuY29udGFpbmVyRG9tTm9kZSkgJiZcbiAgICAgICAgJ3BhcmVudEVsZW1lbnQnIGluIGdpdmVuT3B0aW9ucy5jb250YWluZXJEb21Ob2RlXG4gICAgKVxuICAgICAgICBnaXZlbk9wdGlvbnMuY29udGFpbmVyRG9tTm9kZSA9XG4gICAgICAgICAgICBnaXZlbk9wdGlvbnMuY29udGFpbmVyRG9tTm9kZS5wYXJlbnRFbGVtZW50XG4gICAgaWYgKFxuICAgICAgICBnaXZlbk9wdGlvbnMudGFyZ2V0RG9tTm9kZSAmJlxuICAgICAgICAhKCdnZXRCb3VuZGluZ0NsaWVudFJlY3QnIGluIGdpdmVuT3B0aW9ucy50YXJnZXREb21Ob2RlKSAmJlxuICAgICAgICAncGFyZW50RWxlbWVudCcgaW4gZ2l2ZW5PcHRpb25zLnRhcmdldERvbU5vZGVcbiAgICApXG4gICAgICAgIGdpdmVuT3B0aW9ucy50YXJnZXREb21Ob2RlID0gZ2l2ZW5PcHRpb25zLnRhcmdldERvbU5vZGUucGFyZW50RWxlbWVudFxuXG4gICAgY29uc3Qgb3B0aW9uczogSW50ZXJydXB0YWJsZVNjcm9sbFRvT3B0aW9ucyA9IHtcbiAgICAgICAgdGFyZ2V0RG9tTm9kZTogYm9keSxcbiAgICAgICAgY29udGFpbmVyRG9tTm9kZTogd2luZG93LFxuICAgICAgICBkdXJhdGlvbkluTWlsbGlzZWNvbmRzOiA1MDAsXG4gICAgICAgIG9mZnNldDoge1xuICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgIC4uLmdpdmVuT3B0aW9ucy5vZmZzZXQgfHwge31cbiAgICAgICAgfSxcbiAgICAgICAgaW50ZXJydXB0T25NYW51YWxTY3JvbGw6IHRydWUsXG4gICAgICAgIC4uLmdpdmVuT3B0aW9ucyBhcyBQYXJ0aWFsPEludGVycnVwdGFibGVTY3JvbGxUb09wdGlvbnM+XG4gICAgfVxuXG4gICAgY29uc3QgaXNXaW5kb3cgPSBvcHRpb25zLmNvbnRhaW5lckRvbU5vZGUgPT09IHdpbmRvd1xuXG4gICAgLy8gMS4gR2V0IGN1cnJlbnQgc3RhcnRpbmcgc2Nyb2xsIHBvc2l0aW9uc1xuICAgIGNvbnN0IHN0YXJ0WSA9IGlzV2luZG93ID9cbiAgICAgICAgKHdpbmRvdy5zY3JvbGxZIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApIDpcbiAgICAgICAgKG9wdGlvbnMuY29udGFpbmVyRG9tTm9kZSBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsVG9wXG4gICAgY29uc3Qgc3RhcnRYID0gaXNXaW5kb3cgP1xuICAgICAgICAod2luZG93LnNjcm9sbFggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQpIDpcbiAgICAgICAgKG9wdGlvbnMuY29udGFpbmVyRG9tTm9kZSBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsTGVmdFxuXG4gICAgLy8gMi4gQ2FsY3VsYXRlIHRhcmdldERvbU5vZGUgcG9zaXRpb25zIGZvciBib3RoIGF4ZXNcbiAgICBsZXQgdGFyZ2V0WVxuICAgIGxldCB0YXJnZXRYXG5cbiAgICBpZiAoaXNXaW5kb3cpIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IG9wdGlvbnMudGFyZ2V0RG9tTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICB0YXJnZXRZID1cbiAgICAgICAgICAgIHJlY3QudG9wICtcbiAgICAgICAgICAgICh3aW5kb3cuc2Nyb2xsWSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKSAtXG4gICAgICAgICAgICBvcHRpb25zLm9mZnNldC50b3BcbiAgICAgICAgdGFyZ2V0WCA9XG4gICAgICAgICAgICByZWN0LmxlZnQgK1xuICAgICAgICAgICAgKHdpbmRvdy5zY3JvbGxYIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0KSAtXG4gICAgICAgICAgICBvcHRpb25zLm9mZnNldC5sZWZ0XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVsYXRpdmUgdG8gdGhlIHNjcm9sbGFibGUgcGFyZW50IGNvbnRhaW5lclxuICAgICAgICB0YXJnZXRZID1cbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICBvcHRpb25zLnRhcmdldERvbU5vZGUub2Zmc2V0VG9wIC1cbiAgICAgICAgICAgICAgICAob3B0aW9ucy5jb250YWluZXJEb21Ob2RlIGFzIEhUTUxFbGVtZW50KS5vZmZzZXRUb3BcbiAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgb3B0aW9ucy5vZmZzZXQudG9wXG4gICAgICAgIHRhcmdldFggPVxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIG9wdGlvbnMudGFyZ2V0RG9tTm9kZS5vZmZzZXRMZWZ0IC1cbiAgICAgICAgICAgICAgICAob3B0aW9ucy5jb250YWluZXJEb21Ob2RlIGFzIEhUTUxFbGVtZW50KS5vZmZzZXRMZWZ0XG4gICAgICAgICAgICApIC1cbiAgICAgICAgICAgIG9wdGlvbnMub2Zmc2V0LmxlZnRcbiAgICB9XG5cbiAgICBjb25zdCBkaXN0YW5jZVkgPSB0YXJnZXRZIC0gc3RhcnRZXG4gICAgY29uc3QgZGlzdGFuY2VYID0gdGFyZ2V0WCAtIHN0YXJ0WFxuXG4gICAgLy8gSWYgbm8gbW92ZW1lbnQgaXMgbmVlZGVkLCBleGl0IGltbWVkaWF0ZWx5XG4gICAgaWYgKGRpc3RhbmNlWSA9PT0gMCAmJiBkaXN0YW5jZVggPT09IDApXG4gICAgICAgIHJldHVyblxuXG4gICAgbGV0IHN0YXJ0VGltZTogbnVsbCB8IG51bWJlciA9IG51bGxcbiAgICBsZXQgYW5pbWF0aW9uRnJhbWVJZDogbnVsbCB8IG51bWJlciA9IG51bGxcblxuICAgIC8vIEVhc2luZyBmdW5jdGlvblxuICAgIGNvbnN0IGVhc2VJbk91dFF1YWQgPSAodGltZTogbnVtYmVyKSA9PlxuICAgICAgICB0aW1lIDwgMC41ID8gMiAqIHRpbWUgKiB0aW1lIDogLTEgKyAoNCAtIDIgKiB0aW1lKSAqIHRpbWVcblxuICAgIGlmIChvcHRpb25zLmludGVycnVwdE9uTWFudWFsU2Nyb2xsKSB7XG4gICAgICAgIC8vIDMuIERlZmluZSB0aGUgaW50ZXJydXB0IC8gdGVhcmRvd24gc3lzdGVtXG4gICAgICAgIFNUT1BfQVVUT19TQ1JPTExJTkcudmFsdWUgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYW5pbWF0aW9uRnJhbWVJZCkge1xuICAgICAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvbkZyYW1lSWQpXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uRnJhbWVJZCA9IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBbXG4gICAgICAgICAgICAgICAgYm9keSwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLCB3aW5kb3dcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIE1BTlVBTF9TQ1JPTExfRVZFTlRfTkFNRVMpXG4gICAgICAgICAgICAgICAgICAgIG5vZGU/LnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgU1RPUF9BVVRPX1NDUk9MTElORy52YWx1ZSlcblxuICAgICAgICAgICAgU1RPUF9BVVRPX1NDUk9MTElORy52YWx1ZSA9IE5PT1BcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBbXG4gICAgICAgICAgICBib2R5LCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJyksIHdpbmRvd1xuICAgICAgICBdKVxuICAgICAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIE1BTlVBTF9TQ1JPTExfRVZFTlRfTkFNRVMpXG4gICAgICAgICAgICAgICAgbm9kZT8uYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAgICAgbmFtZSwgU1RPUF9BVVRPX1NDUk9MTElORy52YWx1ZSwge3Bhc3NpdmU6IHRydWV9XG4gICAgICAgICAgICAgICAgKVxuICAgIH1cblxuICAgIC8vIDQuIE11bHRpLWF4aXMgYW5pbWF0aW9uIGxvb3BcbiAgICBjb25zdCBzdGVwID0gKGN1cnJlbnRUaW1lOiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKCFzdGFydFRpbWUpXG4gICAgICAgICAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZVxuXG4gICAgICAgIGNvbnN0IHByb2dyZXNzID0gY3VycmVudFRpbWUgLSBzdGFydFRpbWVcbiAgICAgICAgY29uc3QgdGltZVJhdGlvID1cbiAgICAgICAgICAgIE1hdGgubWluKHByb2dyZXNzIC8gb3B0aW9ucy5kdXJhdGlvbkluTWlsbGlzZWNvbmRzLCAxKVxuXG4gICAgICAgIGNvbnN0IGVhc2VkUmF0aW8gPSBlYXNlSW5PdXRRdWFkKHRpbWVSYXRpbylcblxuICAgICAgICAvLyBMaW5lYXJseSBpbnRlcnBvbGF0ZSB0aGUgcG9zaXRpb25zIGJhc2VkIG9uIGVhc2VkIHByb2dyZXNzLlxuICAgICAgICBjb25zdCBuZXh0WSA9IHN0YXJ0WSArIChkaXN0YW5jZVkgKiBlYXNlZFJhdGlvKVxuICAgICAgICBjb25zdCBuZXh0WCA9IHN0YXJ0WCArIChkaXN0YW5jZVggKiBlYXNlZFJhdGlvKVxuXG4gICAgICAgIC8vIEFwcGx5IHNjcm9sbCB0byB3aW5kb3cgb3IgY29udGFpbmVyLlxuICAgICAgICBpZiAoaXNXaW5kb3cpXG4gICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8obmV4dFgsIG5leHRZKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIDsob3B0aW9ucy5jb250YWluZXJEb21Ob2RlIGFzIEhUTUxFbGVtZW50KS5zY3JvbGxUb3AgPSBuZXh0WVxuICAgICAgICAgICAgOyhvcHRpb25zLmNvbnRhaW5lckRvbU5vZGUgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbExlZnQgPSBuZXh0WFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWVSYXRpbyA8IDEpXG4gICAgICAgICAgICBhbmltYXRpb25GcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIFNUT1BfQVVUT19TQ1JPTExJTkcudmFsdWUoKVxuICAgIH1cblxuICAgIGFuaW1hdGlvbkZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcClcbn1cbi8qKlxuICogU2Nyb2xscyB0byB0aGUgZ2l2ZW4gRG9tTm9kZSdzIGxvY2F0aW9uIG9yIHRpbyBvZiB0aGUgcGFnZS5cbiAqIEBwYXJhbSB0YXJnZXREb21Ob2RlIC0gRG9tTm9kZSB0byBzY3JvbGwgdG8uIElmIG5vdCBnaXZlbiwgc2Nyb2xscyB0byB0aGVcbiAqIHRvcCBvZiB0aGUgcGFnZS5cbiAqIEBwYXJhbSBiZWhhdmlvciAtIFNjcm9sbCBiZWhhdmlvciB0byB1c2UuXG4gKi9cbmV4cG9ydCBjb25zdCBzY3JvbGxUbyA9IChcbiAgICB0YXJnZXREb21Ob2RlOiBOb2RlIHwgbnVsbCA9IG51bGwsXG4gICAgYmVoYXZpb3I6IFNjcm9sbFRvT3B0aW9uc1snYmVoYXZpb3InXSA9ICdzbW9vdGgnXG4pID0+IHtcbiAgICBpZiAodGFyZ2V0RG9tTm9kZSAmJiAhKCdnZXRCb3VuZGluZ0NsaWVudFJlY3QnIGluIHRhcmdldERvbU5vZGUpKVxuICAgICAgICB0YXJnZXREb21Ob2RlID0gdGFyZ2V0RG9tTm9kZS5wYXJlbnRFbGVtZW50XG5cbiAgICBjb25zdCB7bGVmdCwgdG9wfSA9IHRhcmdldERvbU5vZGUgP1xuICAgICAgICAodGFyZ2V0RG9tTm9kZSBhcyBFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6XG4gICAgICAgIHtsZWZ0OiAwLCB0b3A6IDB9XG5cbiAgICBnbG9iYWxDb250ZXh0LndpbmRvdz8uc2Nyb2xsVG8oe2xlZnQsIHRvcCwgYmVoYXZpb3J9KVxufVxuXG5leHBvcnQgY29uc3QgZ2V0QWxsID0gKHJvb3Q6IE5vZGUpID0+IHtcbiAgICBpZiAoIWdsb2JhbENvbnRleHQuZG9jdW1lbnQpXG4gICAgICAgIHJldHVybiBbXVxuXG4gICAgY29uc3Qgbm9kZXM6IEFycmF5PE5vZGU+ID0gW11cbiAgICAvLyBTSE9XX0FMTCBpbmNsdWRlcyBlbGVtZW50cywgdGV4dCwgYW5kIGNvbW1lbnRzXG4gICAgY29uc3Qgd2Fsa2VyID1cbiAgICAgICAgZ2xvYmFsQ29udGV4dC5kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKHJvb3QsIE5vZGVGaWx0ZXIuU0hPV19BTEwsIG51bGwpXG5cbiAgICBsZXQgY3VycmVudE5vZGU6IE5vZGUgfCBudWxsID0gd2Fsa2VyLmN1cnJlbnROb2RlXG4gICAgd2hpbGUgKGN1cnJlbnROb2RlKSB7XG4gICAgICAgIG5vZGVzLnB1c2goY3VycmVudE5vZGUpXG4gICAgICAgIGN1cnJlbnROb2RlID0gd2Fsa2VyLm5leHROb2RlKClcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZXNcbn1cbmV4cG9ydCBjb25zdCBjbG9zZXN0ID0gKFxuICAgIG5vZGU6IE5vZGUsIHNlbGVjdG9yOiBzdHJpbmcsIHN0YXJ0V2l0aFBhcmVudCA9IGZhbHNlXG4pOiBFbGVtZW50IHwgbnVsbCA9PlxuICAgICdjbG9zZXN0JyBpbiBub2RlICYmICFzdGFydFdpdGhQYXJlbnQgP1xuICAgICAgICAobm9kZSBhcyBFbGVtZW50KS5jbG9zZXN0KHNlbGVjdG9yKSA6XG4gICAgICAgIG5vZGUucGFyZW50RWxlbWVudD8uY2xvc2VzdChzZWxlY3RvcikgfHwgbnVsbFxuZXhwb3J0IGNvbnN0IGdldFBhcmVudHMgPSAobm9kZTogTm9kZSk6IEFycmF5PE5vZGU+ID0+IHtcbiAgICBjb25zdCByZXN1bHQ6IEFycmF5PE5vZGU+ID0gW11cbiAgICB3aGlsZSAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKG5vZGUucGFyZW50Tm9kZSlcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbn1cbmV4cG9ydCBjb25zdCBnZXRUZXh0ID0gKHJvb3Q6IE5vZGUsIHJlY3Vyc2l2ZSA9IGZhbHNlKTogQXJyYXk8c3RyaW5nPiA9PiB7XG4gICAgaWYgKHJvb3Qubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSByb290Lm5vZGVWYWx1ZT8udHJpbSgpXG4gICAgICAgIGlmIChjb250ZW50KVxuICAgICAgICAgICAgcmV0dXJuIFtjb250ZW50XVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8c3RyaW5nPiA9IFtdXG4gICAgZm9yIChjb25zdCBkb21Ob2RlIG9mIHJvb3QuY2hpbGROb2RlcylcbiAgICAgICAgaWYgKHJlY3Vyc2l2ZSB8fCBkb21Ob2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSlcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLmdldFRleHQoZG9tTm9kZSkpXG5cbiAgICByZXR1cm4gcmVzdWx0XG59XG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIGh0bWwgb3IgdGV4dCBzdHJpbmdzIGFyZSBlcXVhbC5cbiAqIEBwYXJhbSBmaXJzdCAtIEZpcnN0IGh0bWwsIHNlbGVjdG9yIHRvIGRvbSBub2RlIG9yIHRleHQgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSBzZWNvbmQgLSBTZWNvbmQgaHRtbCwgc2VsZWN0b3IgdG8gZG9tIG5vZGUgb3IgdGV4dCB0byBjb21wYXJlLlxuICogQHBhcmFtIGZvcmNlSFRNTFN0cmluZyAtIEluZGljYXRlcyB3aGV0aGVyIGdpdmVuIGNvbnRlbnRzIGFyZVxuICogaW50ZXJwcmV0ZWQgYXMgaHRtbCBzdHJpbmcgKG90aGVyd2lzZSBhdXRvbWF0aWMgZGV0ZWN0aW9uIHdpbGwgYmVcbiAqIHRyaWdnZXJlZCkuXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgYm90aCBkb20gcmVwcmVzZW50YXRpb25zIGFyZSBlcXVpdmFsZW50LlxuICovXG5leHBvcnQgY29uc3QgaXNFcXVpdmFsZW50ID0gKFxuICAgIGZpcnN0OiBOb2RlIHwgc3RyaW5nLCBzZWNvbmQ6IE5vZGUgfCBzdHJpbmcsIGZvcmNlSFRNTFN0cmluZyA9IGZhbHNlXG4pOiBib29sZWFuID0+IHtcbiAgICBpZiAoZmlyc3QgPT09IHNlY29uZClcbiAgICAgICAgcmV0dXJuIHRydWVcblxuICAgIGlmICghKGZpcnN0ICYmIHNlY29uZCkpXG4gICAgICAgIHJldHVybiBmYWxzZVxuXG4gICAgaWYgKCFnbG9iYWxDb250ZXh0LmRvY3VtZW50KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgZG9jdW1lbnQgaW4gZ2xvYmFsIGNvbnRleHQuJylcblxuICAgIGNvbnN0IGNyZWF0ZUVsZW1lbnQgPVxuICAgICAgICBnbG9iYWxDb250ZXh0LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQuYmluZChnbG9iYWxDb250ZXh0LmRvY3VtZW50KVxuXG4gICAgY29uc3QgZGV0ZXJtaW5lSFRNTFBhdHRlcm4gPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0rKSkkL1xuICAgIGNvbnN0IGlucHV0czogTWFwcGluZzxOb2RlIHwgc3RyaW5nPiA9IHtmaXJzdCwgc2Vjb25kfVxuICAgIGNvbnN0IGRvbU5vZGVzOiBNYXBwaW5nPE5vZGU+ID0ge1xuICAgICAgICBmaXJzdDogY3JlYXRlRWxlbWVudCgnZHVtbXknKSxcbiAgICAgICAgc2Vjb25kOiBjcmVhdGVFbGVtZW50KCdkdW1teScpXG4gICAgfVxuXG4gICAgLypcbiAgICAgICAgTk9URTogQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IFwiPFwiIGFuZCBlbmQgd2l0aCBcIj5cIiBhcmUgbWFyayB1cFxuICAgICAgICBhbmQgc2tpcCB0aGUgbW9yZSBleHBlbnNpdmUgcmVndWxhciBleHByZXNzaW9uIGNoZWNrLlxuICAgICovXG4gICAgZm9yIChjb25zdCBbdHlwZSwgaHRtbF0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXRzKSlcbiAgICAgICAgaWYgKHR5cGVvZiBodG1sID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBmb3JjZUhUTUxTdHJpbmcgfHxcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIGh0bWwuc3RhcnRzV2l0aCgnPCcpICYmXG4gICAgICAgICAgICAgICAgICAgIGh0bWwuZW5kc1dpdGgoJz4nKSAmJlxuICAgICAgICAgICAgICAgICAgICBodG1sLmxlbmd0aCA+PSAzIHx8XG4gICAgICAgICAgICAgICAgICAgIGRldGVybWluZUhUTUxQYXR0ZXJuLnRlc3QoaHRtbClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgZG9tTm9kZXNbdHlwZV0gPSBjcmVhdGVEb21Ob2RlcyhodG1sKVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9tTm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoaHRtbClcbiAgICAgICAgICAgICAgICBpZiAoZG9tTm9kZSlcbiAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgIE5PVEU6IFdlIGNvcHkgdGhlIG5vZGUgdHJlZSB0byBub3QgbWFuaXB1bGF0ZSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsIGRvbSBub2RlIGJ5IG5vcm1hbGl6aW5nIGl0IGFmdGVyd2FyZC5cbiAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZXNbdHlwZV0gPSBkb21Ob2RlLmNsb25lTm9kZSh0cnVlKVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCdjbG9uZU5vZGUnIGluIGh0bWwpXG4gICAgICAgICAgICBkb21Ob2Rlc1t0eXBlXSA9IGh0bWwuY2xvbmVOb2RlKHRydWUpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuXG4gICAgZG9tTm9kZXMuZmlyc3Qubm9ybWFsaXplKClcbiAgICBkb21Ob2Rlcy5zZWNvbmQubm9ybWFsaXplKClcblxuICAgIHJldHVybiBkb21Ob2Rlcy5maXJzdC5pc0VxdWFsTm9kZSgoZG9tTm9kZXMuc2Vjb25kKSlcbn1cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGRvbSBub2RlIGlzIHZpc2libGUgb3IgdGFrZXMgc3BhY2UgaW4gdGhlIGRvY3VtZW50XG4gKiBmbG93LlxuICogRWxlbWVudHMgd2l0aCB2aXNpYmlsaXR5OiBoaWRkZW4gb3Igb3BhY2l0eTogMCBhcmUgY29uc2lkZXJlZCB0byBiZSB2aXNpYmxlLFxuICogc2luY2UgdGhleSBzdGlsbCBjb25zdW1lIHNwYWNlIGluIHRoZSBsYXlvdXQuIER1cmluZyBhbmltYXRpb25zIHRoYXQgaGlkZSBhblxuICogZWxlbWVudCwgdGhlIGVsZW1lbnQgaXMgY29uc2lkZXJlZCB0byBiZSB2aXNpYmxlIHVudGlsIHRoZSBlbmQgb2YgdGhlXG4gKiBhbmltYXRpb24uXG4gKiBAcGFyYW0gZG9tTm9kZSAtIFRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB0aGUgdmlzaWJpbGl0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzSGlkZGVuID0gKGRvbU5vZGU6IEhUTUxFbGVtZW50KTogYm9vbGVhbiA9PlxuICAgICFnbG9iYWxDb250ZXh0LmRvY3VtZW50Py5jb250YWlucyhkb21Ob2RlKSB8fFxuXG4gICAgZG9tTm9kZS5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgfHxcblxuICAgIGRvbU5vZGUubm9kZU5hbWUgPT09ICdJTlBVVCcgJiZcbiAgICBkb21Ob2RlLmdldEF0dHJpYnV0ZSgndHlwZScpID09PSAnaGlkZGVuJyB8fFxuXG4gICAgWydjb250ZW50cycsICdpbmxpbmUnXS5pbmNsdWRlcyhkb21Ob2RlLnN0eWxlLmRpc3BsYXkpICYmXG4gICAgKCEoJ2lubmVySFRNTCcgaW4gZG9tTm9kZSkgfHwgZG9tTm9kZS5pbm5lckhUTUwudHJpbSgpID09PSAnJykgfHxcblxuICAgIGRvbU5vZGUuc3R5bGUuaGVpZ2h0ID09PSAnMHB4JyAmJlxuICAgIGRvbU5vZGUuc3R5bGUud2lkdGggPT09ICcwcHgnIHx8XG5cbiAgICBCb29sZWFuKGRvbU5vZGUucGFyZW50RWxlbWVudCkgJiZcbiAgICBpc0hpZGRlbihkb21Ob2RlLnBhcmVudEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpXG5cbmV4cG9ydCBjb25zdCBvbkRvY3VtZW50UmVhZHkgPSAoY2FsbGJhY2s/OiAoKSA9PiB2b2lkKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBTZWUgaWYgZG9jdW1lbnQgb2JqZWN0IG1vZGVsIGlzIGFscmVhZHkgYXZhaWxhYmxlLlxuICAgICAgICAgICAgaWYgKFsnY29tcGxldGUnLCAnaW50ZXJhY3RpdmUnXS5pbmNsdWRlcyhkb2N1bWVudC5yZWFkeVN0YXRlKSkge1xuICAgICAgICAgICAgICAgIC8vIENhbGwgb24gbmV4dCBhdmFpbGFibGUgdGljay5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aW1lb3V0KClcbiAgICAgICAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgICAgICAgICBjYWxsYmFjaz8uKClcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaz8uKClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICB9KSgpXG4gICAgKVxuXG4vKipcbiAqIFJlcGxhY2VzIGEgZ2l2ZW4gZG9tIG5vZGUgd2l0aCBnaXZlbiBub2Rlcy5cbiAqIEBwYXJhbSBkb21Ob2RlVG9SZXBsYWNlIC0gTm9kZSB0byByZXBsYWNlIGl0cyBjaGlsZHJlbi5cbiAqIEBwYXJhbSByZXBsYWNlbWVudERvbU5vZGVzIC0gTm9kZSBvciBhcnJheSBvZiBub2RlcyB0byB1c2UgYXMgcmVwbGFjZW1lbnQuXG4gKiBAcGFyYW0gc2tpcEVtcHR5VGV4dE5vZGVzIC0gQ29uZmlndXJlcyB3aGV0aGVyIHRvIHRyaW0gdGV4dC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlcGxhY2UgPSAoXG4gICAgZG9tTm9kZVRvUmVwbGFjZTogSFRNTEVsZW1lbnQsXG4gICAgcmVwbGFjZW1lbnREb21Ob2RlczogQXJyYXk8Tm9kZT4gfCBOb2RlLFxuICAgIHNraXBFbXB0eVRleHROb2RlcyA9IGZhbHNlXG4pID0+IHtcbiAgICBmb3IgKFxuICAgICAgICBjb25zdCByZXBsYWNlbWVudCBvZlxuICAgICAgICAoW10gYXMgQXJyYXk8Tm9kZT4pLmNvbmNhdChyZXBsYWNlbWVudERvbU5vZGVzKS5yZXZlcnNlKClcbiAgICApXG4gICAgICAgIGlmICghKFxuICAgICAgICAgICAgc2tpcEVtcHR5VGV4dE5vZGVzICYmXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFICYmXG4gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQubm9kZVZhbHVlPy50cmltKCkgPT09ICcnXG4gICAgICAgICAgICApXG4gICAgICAgICkpXG4gICAgICAgICAgICBkb21Ob2RlVG9SZXBsYWNlLmFmdGVyKHJlcGxhY2VtZW50KVxuXG4gICAgZG9tTm9kZVRvUmVwbGFjZS5yZW1vdmUoKVxufVxuXG5leHBvcnQgY29uc3Qgd3JhcCA9IChcbiAgICBkb21Ob2RlczogTm9kZSB8IE5vZGVMaXN0T2Y8Tm9kZT4sIHdyYXBwZXI6IEhUTUxFbGVtZW50XG4pID0+IHtcbiAgICBjb25zdCBkb21Ob2RlTGlzdCA9IChkb21Ob2RlcyBhcyBOb2RlTGlzdE9mPE5vZGU+KS5sZW5ndGggP1xuICAgICAgICBBcnJheS5mcm9tKGRvbU5vZGVzIGFzIE5vZGVMaXN0T2Y8Tm9kZT4pIDpcbiAgICAgICAgW2RvbU5vZGVzIGFzIE5vZGVdXG5cbiAgICAvLyBVc2UgdGhlIGZpcnN0IGVsZW1lbnQncyBwb3NpdGlvbiBhcyB0aGUgYW5jaG9yIHBvaW50XG4gICAgY29uc3QgZmlyc3QgPSBkb21Ob2RlTGlzdFswXVxuXG4gICAgaWYgKGZpcnN0LnBhcmVudE5vZGUpXG4gICAgICAgIGZpcnN0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHdyYXBwZXIsIGZpcnN0KVxuXG4gICAgZm9yIChjb25zdCBkb21Ob2RlIG9mIGRvbU5vZGVMaXN0KVxuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGRvbU5vZGUpXG59XG4vKipcbiAqIE1vdmVzIHRoZSBjb250ZW50IG9mIGEgZ2l2ZW4gZG9tIG5vZGUgb25lIGxldmVsIHVwIGFuZCByZW1vdmVzIHRoZSBnaXZlblxuICogbm9kZS5cbiAqIEBwYXJhbSBkb21Ob2RlIC0gTm9kZSB0byB1bndyYXAuXG4gKiBAcmV0dXJucyBMaXN0IG9mIHVud3JhcHBlZCBub2Rlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHVud3JhcCA9IChkb21Ob2RlOiBIVE1MRWxlbWVudCk6IEFycmF5PENoaWxkTm9kZT4gPT4ge1xuICAgIGNvbnN0IHBhcmVudCA9IGRvbU5vZGUucGFyZW50Tm9kZVxuXG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTxDaGlsZE5vZGU+ID0gW11cbiAgICAvLyBOT1RFOiBXZSBuZWVkIHRvIHVzZSBcIkFycmF5LmZyb21cIiB0byBjb3B5IHRoZSBsaXN0LlxuICAgIGZvciAoY29uc3QgY2hpbGROb2RlIG9mIEFycmF5LmZyb20oZG9tTm9kZS5jaGlsZE5vZGVzKSkge1xuICAgICAgICByZXN1bHQucHVzaChjaGlsZE5vZGUpXG5cbiAgICAgICAgaWYgKHBhcmVudClcbiAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGROb2RlLCBkb21Ob2RlKVxuICAgIH1cblxuICAgIGlmIChwYXJlbnQpXG4gICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChkb21Ob2RlKVxuXG4gICAgcmV0dXJuIHJlc3VsdFxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFiQTtBQUFBO0FBcUJBLFNBQVEsYUFBYSxFQUFFLElBQUk7QUFDM0IsU0FBUSxPQUFPO0FBRWYsT0FBTyxNQUFNLGNBQWMsR0FDdkIsSUFBWSxJQUNMO0VBQ1AsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7RUFDcEQsY0FBYyxDQUFDLFNBQVMsR0FBRyxJQUFJO0VBRS9CLElBQUksY0FBYyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQztJQUN0QztBQUNSO0FBQ0E7QUFDQTtJQUNRLE9BQU8sY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO0VBRXZELE9BQU8sY0FBYztBQUN6QixDQUFDO0FBRUQsT0FBTyxNQUFNLElBQUksR0FBRyxDQUNoQixPQUFvQixFQUFF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
|