clientnode 4.0.1457 → 4.0.1459
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 -69
- package/dist/Logger.js +163 -798
- package/dist/Semaphore.js +46 -56
- package/dist/array.js +337 -668
- package/dist/cli.js +37 -45
- package/dist/constants.js +110 -198
- package/dist/context.js +25 -301
- package/dist/cookie.js +48 -302
- package/dist/data-transfer.js +166 -817
- package/dist/datetime.js +241 -1149
- package/dist/domNode.js +277 -532
- package/dist/expression/evaluators.js +234 -1231
- package/dist/expression/helper.js +82 -102
- package/dist/expression/index.js +10 -1383
- package/dist/expression/indicator-functions.js +21 -316
- package/dist/expression/type.js +5 -1
- package/dist/filesystem.js +324 -385
- package/dist/function.js +51 -93
- package/dist/index.js +27 -3253
- package/dist/indicators.js +68 -519
- package/dist/module.js +99 -233
- package/dist/number.js +25 -498
- package/dist/object.js +791 -958
- package/dist/process.js +38 -298
- package/dist/property-types.js +96 -17
- package/dist/scope.js +56 -2134
- package/dist/string.js +603 -1033
- package/dist/test-helper.js +171 -639
- package/dist/type.js +9 -4
- package/dist/utility.js +91 -408
- 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 -86
- package/dist/bundle/Logger.js +0 -820
- package/dist/bundle/Semaphore.js +0 -75
- package/dist/bundle/array.js +0 -783
- package/dist/bundle/cli.js +0 -59
- package/dist/bundle/constants.js +0 -214
- package/dist/bundle/context.js +0 -316
- package/dist/bundle/cookie.js +0 -338
- package/dist/bundle/data-transfer.js +0 -867
- package/dist/bundle/datetime.js +0 -1190
- package/dist/bundle/domNode.js +0 -586
- package/dist/bundle/expression/evaluators.js +0 -1270
- package/dist/bundle/expression/helper.js +0 -117
- package/dist/bundle/expression/index.js +0 -1399
- package/dist/bundle/expression/indicator-functions.js +0 -332
- package/dist/bundle/expression/type.js +0 -16
- package/dist/bundle/filesystem.js +0 -472
- package/dist/bundle/function.js +0 -117
- package/dist/bundle/index.js +0 -3269
- package/dist/bundle/indicators.js +0 -572
- package/dist/bundle/module.js +0 -250
- package/dist/bundle/number.js +0 -534
- package/dist/bundle/object.js +0 -1146
- package/dist/bundle/process.js +0 -328
- package/dist/bundle/property-types.js +0 -36
- package/dist/bundle/scope.js +0 -2163
- package/dist/bundle/string.js +0 -1255
- package/dist/bundle/test-helper.js +0 -808
- package/dist/bundle/type.js +0 -16
- package/dist/bundle/utility.js +0 -456
- package/dist/cli.d.ts +0 -31
- package/dist/compatible/Lock.js +0 -86
- package/dist/compatible/Logger.js +0 -820
- package/dist/compatible/Semaphore.js +0 -75
- package/dist/compatible/array.js +0 -783
- package/dist/compatible/cli.js +0 -59
- package/dist/compatible/constants.js +0 -214
- package/dist/compatible/context.js +0 -316
- package/dist/compatible/cookie.js +0 -338
- package/dist/compatible/data-transfer.js +0 -867
- package/dist/compatible/datetime.js +0 -1190
- package/dist/compatible/domNode.js +0 -586
- package/dist/compatible/expression/evaluators.js +0 -1270
- package/dist/compatible/expression/helper.js +0 -117
- package/dist/compatible/expression/index.js +0 -1399
- package/dist/compatible/expression/indicator-functions.js +0 -332
- package/dist/compatible/expression/type.js +0 -16
- package/dist/compatible/filesystem.js +0 -472
- package/dist/compatible/function.js +0 -117
- package/dist/compatible/index.js +0 -3269
- package/dist/compatible/indicators.js +0 -572
- package/dist/compatible/module.js +0 -250
- package/dist/compatible/number.js +0 -534
- package/dist/compatible/object.js +0 -1146
- package/dist/compatible/process.js +0 -328
- package/dist/compatible/property-types.js +0 -36
- package/dist/compatible/scope.js +0 -2163
- package/dist/compatible/string.js +0 -1255
- package/dist/compatible/test-helper.js +0 -808
- package/dist/compatible/type.js +0 -16
- package/dist/compatible/utility.js +0 -456
- 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 -22
- 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,79 +1,9 @@
|
|
|
1
|
-
if(typeof window==='undefined'||window===null)var window=(typeof global==='undefined'||global===null)?{}:global;import * as __WEBPACK_EXTERNAL_MODULE_core_js_modules_es_array_includes_js_66c3fd7d__ from "core-js/modules/es.array.includes.js";
|
|
2
|
-
/******/ var __webpack_modules__ = ({
|
|
3
|
-
|
|
4
|
-
/***/ 5:
|
|
5
|
-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
6
|
-
|
|
7
|
-
__webpack_require__.a(module, async function (__webpack_handle_async_dependencies__, __webpack_async_result__) { try {
|
|
8
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
9
|
-
/* harmony export */ Lz: function() { return /* binding */ globalContext; },
|
|
10
|
-
/* harmony export */ tE: function() { return /* binding */ NOOP; }
|
|
11
|
-
/* harmony export */ });
|
|
12
|
-
/* unused harmony exports setGlobalContext, MAXIMAL_NUMBER_OF_ITERATIONS, mockConsole */
|
|
13
|
-
/* unused harmony import specifier */ var CONSOLE_METHODS;
|
|
14
|
-
/* harmony import */ var _module_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
|
|
15
|
-
var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_module_js__WEBPACK_IMPORTED_MODULE_0__]);
|
|
16
|
-
var __webpack_async_dependencies_result__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
|
|
17
|
-
_module_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_async_dependencies_result__[0];
|
|
18
1
|
// #!/usr/bin/env babel-node
|
|
19
2
|
// -*- coding: utf-8 -*-
|
|
20
|
-
/** @module
|
|
21
|
-
|
|
22
|
-
[Project page](https://torben.website/clientnode)
|
|
23
|
-
|
|
24
|
-
Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
|
|
25
|
-
|
|
26
|
-
License
|
|
27
|
-
-------
|
|
28
|
-
|
|
29
|
-
This library written by Torben Sickert stands under a creative commons
|
|
30
|
-
naming 3.0 unported license.
|
|
31
|
-
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
32
|
-
endregion
|
|
33
|
-
*/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_js__WEBPACK_IMPORTED_MODULE_0__/* .determineGlobalContext */ .a8)();var setGlobalContext=function setGlobalContext(context){globalContext=context};globalContext.fetch=globalContext.fetch?globalContext.fetch.bind(globalContext):(_optionalRequire$defa=(_optionalRequire=(0,_module_js__WEBPACK_IMPORTED_MODULE_0__/* .optionalRequire */ .I5)("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_js__WEBPACK_IMPORTED_MODULE_0__/* .optionalImport */ .Sw)(/* 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.
|
|
34
|
-
var NOOP=function NOOP(){// Do nothing.
|
|
35
|
-
};var mockConsole=function mockConsole(){// Avoid errors in browsers that lack a console.
|
|
36
|
-
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()}};
|
|
37
|
-
__webpack_async_result__();
|
|
38
|
-
} catch(e) { __webpack_async_result__(e); } });
|
|
39
|
-
|
|
40
|
-
/***/ }),
|
|
3
|
+
/** @module domNode */
|
|
4
|
+
'use strict';
|
|
41
5
|
|
|
42
|
-
|
|
43
|
-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
44
|
-
|
|
45
|
-
__webpack_require__.a(module, async function (__webpack_handle_async_dependencies__, __webpack_async_result__) { try {
|
|
46
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
47
|
-
/* harmony export */ C_: function() { return /* binding */ createDomNodes; },
|
|
48
|
-
/* harmony export */ Cc: function() { return /* binding */ interruptableScrollTo; },
|
|
49
|
-
/* harmony export */ D7: function() { return /* binding */ STOP_AUTO_SCROLLING; },
|
|
50
|
-
/* harmony export */ HC: function() { return /* binding */ replace; },
|
|
51
|
-
/* harmony export */ LV: function() { return /* binding */ wrap; },
|
|
52
|
-
/* harmony export */ Rv: function() { return /* binding */ fade; },
|
|
53
|
-
/* harmony export */ S: function() { return /* binding */ SCROLL_EVENT_NAMES; },
|
|
54
|
-
/* harmony export */ UK: function() { return /* binding */ getAll; },
|
|
55
|
-
/* harmony export */ VG: function() { return /* binding */ scrollTo; },
|
|
56
|
-
/* harmony export */ Xn: function() { return /* binding */ fadeOut; },
|
|
57
|
-
/* harmony export */ ZQ: function() { return /* binding */ MANUAL_SCROLL_EVENT_NAMES; },
|
|
58
|
-
/* harmony export */ dK: function() { return /* binding */ _isHidden; },
|
|
59
|
-
/* harmony export */ kp: function() { return /* binding */ closest; },
|
|
60
|
-
/* harmony export */ l2: function() { return /* binding */ isEquivalent; },
|
|
61
|
-
/* harmony export */ oA: function() { return /* binding */ unwrap; },
|
|
62
|
-
/* harmony export */ q4: function() { return /* binding */ _getText; },
|
|
63
|
-
/* harmony export */ qG: function() { return /* binding */ fadeIn; },
|
|
64
|
-
/* harmony export */ qq: function() { return /* binding */ onDocumentReady; },
|
|
65
|
-
/* harmony export */ wT: function() { return /* binding */ getParents; }
|
|
66
|
-
/* harmony export */ });
|
|
67
|
-
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
|
|
68
|
-
/* harmony import */ var _context_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5);
|
|
69
|
-
/* harmony import */ var _utility_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(13);
|
|
70
|
-
var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_context_js__WEBPACK_IMPORTED_MODULE_1__, _utility_js__WEBPACK_IMPORTED_MODULE_2__]);
|
|
71
|
-
var __webpack_async_dependencies_result__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
|
|
72
|
-
_context_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_async_dependencies_result__[0];
|
|
73
|
-
_utility_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_async_dependencies_result__[1];
|
|
74
|
-
// #!/usr/bin/env babel-node
|
|
75
|
-
// -*- coding: utf-8 -*-
|
|
76
|
-
/** @module domNode *//* !
|
|
6
|
+
/* !
|
|
77
7
|
region header
|
|
78
8
|
[Project page](https://torben.website/clientnode)
|
|
79
9
|
|
|
@@ -86,10 +16,69 @@ _utility_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_async_dependencies_result__
|
|
|
86
16
|
naming 3.0 unported license.
|
|
87
17
|
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
88
18
|
endregion
|
|
89
|
-
*/
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
+
/**
|
|
93
82
|
* Smoothly scrolls both horizontally and vertically to a target DOM node.
|
|
94
83
|
* Cancels instantly if the user interacts with the mouse, touch, or keys.
|
|
95
84
|
* @param givenOptions - Configuration options.
|
|
@@ -102,22 +91,142 @@ _utility_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_async_dependencies_result__
|
|
|
102
91
|
* @param givenOptions.offset - Pixel offsets.
|
|
103
92
|
* @param givenOptions.offset.top - Vertical offset in pixels.
|
|
104
93
|
* @param givenOptions.offset.left - Horizontal offset in pixels.
|
|
105
|
-
*/
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
+
/**
|
|
115
179
|
* Scrolls to the given DomNode's location or tio of the page.
|
|
116
180
|
* @param targetDomNode - DomNode to scroll to. If not given, scrolls to the
|
|
117
181
|
* top of the page.
|
|
118
182
|
* @param behavior - Scroll behavior to use.
|
|
119
|
-
*/
|
|
120
|
-
|
|
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
|
+
/**
|
|
121
230
|
* Checks whether given html or text strings are equal.
|
|
122
231
|
* @param first - First html, selector to dom node or text to compare.
|
|
123
232
|
* @param second - Second html, selector to dom node or text to compare.
|
|
@@ -125,13 +234,42 @@ var walker=_context_js__WEBPACK_IMPORTED_MODULE_1__/* .globalContext */ .Lz.docu
|
|
|
125
234
|
* interpreted as html string (otherwise automatic detection will be
|
|
126
235
|
* triggered).
|
|
127
236
|
* @returns Returns true if both dom representations are equivalent.
|
|
128
|
-
*/
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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
|
+
/**
|
|
135
273
|
* Checks whether the given dom node is visible or takes space in the document
|
|
136
274
|
* flow.
|
|
137
275
|
* Elements with visibility: hidden or opacity: 0 are considered to be visible,
|
|
@@ -140,447 +278,54 @@ var walker=_context_js__WEBPACK_IMPORTED_MODULE_1__/* .globalContext */ .Lz.docu
|
|
|
140
278
|
* animation.
|
|
141
279
|
* @param domNode - To inspect.
|
|
142
280
|
* @returns A boolean indicating the visibility.
|
|
143
|
-
*/
|
|
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
|
+
/**
|
|
144
297
|
* Replaces a given dom node with given nodes.
|
|
145
298
|
* @param domNodeToReplace - Node to replace its children.
|
|
146
299
|
* @param replacementDomNodes - Node or array of nodes to use as replacement.
|
|
147
300
|
* @param skipEmptyTextNodes - Configures whether to trim text.
|
|
148
|
-
*/
|
|
149
|
-
|
|
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
|
+
/**
|
|
150
315
|
* Moves the content of a given dom node one level up and removes the given
|
|
151
316
|
* node.
|
|
152
317
|
* @param domNode - Node to unwrap.
|
|
153
318
|
* @returns List of unwrapped nodes.
|
|
154
|
-
*/
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
/* harmony export */ Tn: function() { return /* binding */ isFunction; }
|
|
167
|
-
/* harmony export */ });
|
|
168
|
-
/* unused harmony exports isNumeric, isWindow, isArrayLike, isAnyMatching, isObject, isPlainObject, isSet, isMap, isProxy */
|
|
169
|
-
/* unused harmony import specifier */ var PLAIN_OBJECT_PROTOTYPES;
|
|
170
|
-
/* unused harmony import specifier */ var determineType;
|
|
171
|
-
/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
|
|
172
|
-
// #!/usr/bin/env babel-node
|
|
173
|
-
// -*- coding: utf-8 -*-
|
|
174
|
-
/** @module indicators *//* !
|
|
175
|
-
region header
|
|
176
|
-
[Project page](https://torben.website/clientnode)
|
|
177
|
-
|
|
178
|
-
Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
|
|
179
|
-
|
|
180
|
-
License
|
|
181
|
-
-------
|
|
182
|
-
|
|
183
|
-
This library written by Torben Sickert stands under a creative commons
|
|
184
|
-
naming 3.0 unported license.
|
|
185
|
-
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
186
|
-
endregion
|
|
187
|
-
*/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)}/**
|
|
188
|
-
* Determines whether its argument represents a JavaScript number.
|
|
189
|
-
* @param value - Value to analyze.
|
|
190
|
-
* @returns A boolean value indicating whether given object is numeric
|
|
191
|
-
* like.
|
|
192
|
-
*/var isNumeric=function isNumeric(value){var type=determineType(value);/*
|
|
193
|
-
NOTE: "parseFloat" "NaNs" numeric-cast false positives ("") but
|
|
194
|
-
misinterprets leading-number strings, particularly hex literals
|
|
195
|
-
("0x...") subtraction forces infinities to NaN.
|
|
196
|
-
*/return["number","string"].includes(type)&&!isNaN(value-parseFloat(value))};/**
|
|
197
|
-
* Determine whether the argument is a window.
|
|
198
|
-
* @param value - Value to check for.
|
|
199
|
-
* @returns Boolean value indicating the result.
|
|
200
|
-
*/var isWindow=function isWindow(value){return![null,undefined].includes(value)&&_typeof(value)==="object"&&value===(value===null||value===void 0?void 0:value.window)};/**
|
|
201
|
-
* Checks if given object is similar to an array and can be handled like an
|
|
202
|
-
* array.
|
|
203
|
-
* @param object - Object to check behavior for.
|
|
204
|
-
* @returns A boolean value indicating whether given object is array like.
|
|
205
|
-
*/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.
|
|
206
|
-
}return false};/**
|
|
207
|
-
* Checks whether one of the given pattern matches given string.
|
|
208
|
-
* @param target - Target to check in pattern for.
|
|
209
|
-
* @param pattern - List of pattern to check for.
|
|
210
|
-
* @returns Value "true" if given object is matches by at leas one of the
|
|
211
|
-
* given pattern and "false" otherwise.
|
|
212
|
-
*/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};/**
|
|
213
|
-
* Checks whether given object is a native object but not null.
|
|
214
|
-
* @param value - Value to check.
|
|
215
|
-
* @returns Value "true" if given object is a plain javaScript object and
|
|
216
|
-
* "false" otherwise.
|
|
217
|
-
*/var isObject=function isObject(value){return value!==null&&_typeof(value)==="object"};/**
|
|
218
|
-
* Checks whether given object is a plain native object.
|
|
219
|
-
* @param value - Value to check.
|
|
220
|
-
* @returns Value "true" if given object is a plain javaScript object and
|
|
221
|
-
* "false" otherwise.
|
|
222
|
-
*/var isPlainObject=function isPlainObject(value){return isObject(value)&&PLAIN_OBJECT_PROTOTYPES.includes(Object.getPrototypeOf(value))};/**
|
|
223
|
-
* Checks whether given object is a set.
|
|
224
|
-
* @param value - Value to check.
|
|
225
|
-
* @returns Value "true" if given object is a set and "false" otherwise.
|
|
226
|
-
*/var isSet=function isSet(value){return determineType(value)==="set"};/**
|
|
227
|
-
* Checks whether given object is a map.
|
|
228
|
-
* @param value - Value to check.
|
|
229
|
-
* @returns Value "true" if given object is a map and "false" otherwise.
|
|
230
|
-
*/var isMap=function isMap(value){return determineType(value)==="map"};/**
|
|
231
|
-
* Checks whether given object is a proxy.
|
|
232
|
-
* @param value - Value to check.
|
|
233
|
-
* @returns Value "true" if given object is a proxy and "false" otherwise.
|
|
234
|
-
*/var isProxy=function isProxy(value){return Boolean(value.__target__)};/**
|
|
235
|
-
* Checks whether given object is a function.
|
|
236
|
-
* @param value - Value to check.
|
|
237
|
-
* @returns Value "true" if given object is a function and "false"
|
|
238
|
-
* otherwise.
|
|
239
|
-
*/var isFunction=function isFunction(value){return Boolean(value)&&["[object AsyncFunction]","[object Function]"].includes({}.toString.call(value))};
|
|
240
|
-
__webpack_async_result__();
|
|
241
|
-
} catch(e) { __webpack_async_result__(e); } });
|
|
242
|
-
|
|
243
|
-
/***/ }),
|
|
244
|
-
|
|
245
|
-
/***/ 2:
|
|
246
|
-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
247
|
-
|
|
248
|
-
__webpack_require__.a(module, async function (__webpack_handle_async_dependencies__, __webpack_async_result__) { try {
|
|
249
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
250
|
-
/* harmony export */ I5: function() { return /* binding */ optionalRequire; },
|
|
251
|
-
/* harmony export */ Sw: function() { return /* binding */ optionalImport; },
|
|
252
|
-
/* harmony export */ a8: function() { return /* binding */ determineGlobalContext; }
|
|
253
|
-
/* harmony export */ });
|
|
254
|
-
/* unused harmony exports isImportSyntaxSupported, currentRequire, clearRequireCache, isolatedRequire */
|
|
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 import function available at runtime.
|
|
272
|
-
var isImportSyntaxSupported=function isImportSyntaxSupported(){try{// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
273
|
-
new Function("import(\"data:text/javascript,\")");return true}catch(_unused){return false}};// Make preprocessed require function available at runtime.
|
|
274
|
-
var customRequire=typeof globalContext.require==="undefined"?null:globalContext.require;if(!customRequire&&isImportSyntaxSupported())try{var _await$Function=/*
|
|
275
|
-
eslint-disable
|
|
276
|
-
@typescript-eslint/no-implied-eval,
|
|
277
|
-
@typescript-eslint/no-unsafe-call
|
|
278
|
-
*/await new Function("return import(\"node:module\")")(),createRequire=_await$Function.createRequire;/*
|
|
279
|
-
eslint-enable
|
|
280
|
-
@typescript-eslint/no-implied-eval,
|
|
281
|
-
@typescript-eslint/no-unsafe-call
|
|
282
|
-
*/// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
283
|
-
customRequire=createRequire("file:///__w/clientnode/clientnode/src/module.ts")}catch(_unused2){// Ignore error.
|
|
284
|
-
}var currentRequire=customRequire;var optionalRequire=function optionalRequire(id){try{return currentRequire?currentRequire(id):null}catch(_unused3){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
|
|
285
|
-
}catch(error){throw error}finally{restoreRequireCache(requireFunction.cache,backup)}};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}();
|
|
286
|
-
__webpack_async_result__();
|
|
287
|
-
} catch(e) { __webpack_async_result__(e); } }, 1);
|
|
288
|
-
|
|
289
|
-
/***/ }),
|
|
290
|
-
|
|
291
|
-
/***/ 13:
|
|
292
|
-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
293
|
-
|
|
294
|
-
__webpack_require__.a(module, async function (__webpack_handle_async_dependencies__, __webpack_async_result__) { try {
|
|
295
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
296
|
-
/* harmony export */ wR: function() { return /* binding */ timeout; }
|
|
297
|
-
/* harmony export */ });
|
|
298
|
-
/* unused harmony exports trailingThrottle, debounce, preventDefault, stopPropagation */
|
|
299
|
-
/* harmony import */ var _context_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);
|
|
300
|
-
/* harmony import */ var _indicators_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4);
|
|
301
|
-
var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_context_js__WEBPACK_IMPORTED_MODULE_0__, _indicators_js__WEBPACK_IMPORTED_MODULE_1__]);
|
|
302
|
-
var __webpack_async_dependencies_result__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);
|
|
303
|
-
_context_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_async_dependencies_result__[0];
|
|
304
|
-
_indicators_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_async_dependencies_result__[1];
|
|
305
|
-
// #!/usr/bin/env babel-node
|
|
306
|
-
// -*- coding: utf-8 -*-
|
|
307
|
-
/** @module utility *//* !
|
|
308
|
-
region header
|
|
309
|
-
[Project page](https://torben.website/clientnode)
|
|
310
|
-
|
|
311
|
-
Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
|
|
312
|
-
|
|
313
|
-
License
|
|
314
|
-
-------
|
|
315
|
-
|
|
316
|
-
This library written by Torben Sickert stands under a creative commons
|
|
317
|
-
naming 3.0 unported license.
|
|
318
|
-
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
319
|
-
endregion
|
|
320
|
-
*/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}/**
|
|
321
|
-
* Prevents event functions from triggering too often by defining a minimal
|
|
322
|
-
* span between each function call. Additional arguments given to this function
|
|
323
|
-
* will be forwarded to the given event function call.
|
|
324
|
-
* @param callback - The function to call debounced.
|
|
325
|
-
* @param thresholdInMilliseconds - The minimum time span between each
|
|
326
|
-
* function call.
|
|
327
|
-
* @param additionalArguments - Additional arguments to forward to given
|
|
328
|
-
* function.
|
|
329
|
-
* @returns Returns the wrapped method.
|
|
330
|
-
*/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.
|
|
331
|
-
timeoutID=null;recentParameters=[]},thresholdInMilliseconds)}};/**
|
|
332
|
-
* Prevents event functions from triggering too close after each trigger by
|
|
333
|
-
* defining a minimal span between each function call. Additional arguments
|
|
334
|
-
* given to this function will be forwarded to the given event function call.
|
|
335
|
-
* @param callback - The function to call debounced.
|
|
336
|
-
* @param thresholdInMilliseconds - The minimum time span between each
|
|
337
|
-
* function call.
|
|
338
|
-
* @param additionalArguments - Additional arguments to forward to given
|
|
339
|
-
* function.
|
|
340
|
-
* @returns Returns the wrapped method.
|
|
341
|
-
*/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}};/**
|
|
342
|
-
* Triggers given callback after given duration. Supports unlimited
|
|
343
|
-
* duration length and returns a promise which will be resolved after given
|
|
344
|
-
* duration has been passed.
|
|
345
|
-
* @param parameters - Observes the first three existing parameters. If one
|
|
346
|
-
* is a number it will be interpreted as delay in milliseconds until given
|
|
347
|
-
* callback will be triggered. If one is of type function it will be used
|
|
348
|
-
* as callback and if one is of type boolean it will indicate if returning
|
|
349
|
-
* promise should be rejected or resolved if given internally created
|
|
350
|
-
* timeout should be canceled. Additional parameters will be forwarded to
|
|
351
|
-
* given callback.
|
|
352
|
-
* @returns A promise resolving after given delay or being rejected if
|
|
353
|
-
* value "true" is within one of the first three parameters. The promise
|
|
354
|
-
* holds a boolean indicating whether timeout has been canceled or
|
|
355
|
-
* resolved.
|
|
356
|
-
*/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_js__WEBPACK_IMPORTED_MODULE_0__/* .NOOP */ .tE;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_js__WEBPACK_IMPORTED_MODULE_1__/* .isFunction */ .Tn)(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{/*
|
|
357
|
-
Determine the number of times we need to delay by maximum
|
|
358
|
-
possible timeout duration.
|
|
359
|
-
*/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()};
|
|
360
|
-
__webpack_async_result__();
|
|
361
|
-
} catch(e) { __webpack_async_result__(e); } });
|
|
362
|
-
|
|
363
|
-
/***/ }),
|
|
364
|
-
|
|
365
|
-
/***/ 6:
|
|
366
|
-
/***/ (function(module) {
|
|
367
|
-
|
|
368
|
-
function webpackEmptyContext(req) {
|
|
369
|
-
var e = new Error("Cannot find module '" + req + "'");
|
|
370
|
-
e.code = 'MODULE_NOT_FOUND';
|
|
371
|
-
throw e;
|
|
372
|
-
}
|
|
373
|
-
webpackEmptyContext.keys = function() { return []; };
|
|
374
|
-
webpackEmptyContext.resolve = webpackEmptyContext;
|
|
375
|
-
webpackEmptyContext.id = 6;
|
|
376
|
-
module.exports = webpackEmptyContext;
|
|
377
|
-
|
|
378
|
-
/***/ }),
|
|
379
|
-
|
|
380
|
-
/***/ 0:
|
|
381
|
-
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
382
|
-
|
|
383
|
-
var x = function(y) {
|
|
384
|
-
var x = {}; __webpack_require__.d(x, y); return x
|
|
385
|
-
}
|
|
386
|
-
var y = function(x) { return function() { return x; }; }
|
|
387
|
-
module.exports = x({ });
|
|
388
|
-
|
|
389
|
-
/***/ })
|
|
390
|
-
|
|
391
|
-
/******/ });
|
|
392
|
-
/************************************************************************/
|
|
393
|
-
/******/ // The module cache
|
|
394
|
-
/******/ var __webpack_module_cache__ = {};
|
|
395
|
-
/******/
|
|
396
|
-
/******/ // The require function
|
|
397
|
-
/******/ function __webpack_require__(moduleId) {
|
|
398
|
-
/******/ // Check if module is in cache
|
|
399
|
-
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
400
|
-
/******/ if (cachedModule !== undefined) {
|
|
401
|
-
/******/ return cachedModule.exports;
|
|
402
|
-
/******/ }
|
|
403
|
-
/******/ // Create a new module (and put it into the cache)
|
|
404
|
-
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
405
|
-
/******/ id: moduleId,
|
|
406
|
-
/******/ loaded: false,
|
|
407
|
-
/******/ exports: {}
|
|
408
|
-
/******/ };
|
|
409
|
-
/******/
|
|
410
|
-
/******/ // Execute the module function
|
|
411
|
-
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
412
|
-
/******/
|
|
413
|
-
/******/ // Flag the module as loaded
|
|
414
|
-
/******/ module.loaded = true;
|
|
415
|
-
/******/
|
|
416
|
-
/******/ // Return the exports of the module
|
|
417
|
-
/******/ return module.exports;
|
|
418
|
-
/******/ }
|
|
419
|
-
/******/
|
|
420
|
-
/******/ // expose the module cache
|
|
421
|
-
/******/ __webpack_require__.c = __webpack_module_cache__;
|
|
422
|
-
/******/
|
|
423
|
-
/************************************************************************/
|
|
424
|
-
/******/ /* webpack/runtime/async module */
|
|
425
|
-
/******/ !function() {
|
|
426
|
-
/******/ var hasSymbol = typeof Symbol === "function";
|
|
427
|
-
/******/ var webpackQueues = hasSymbol ? Symbol("webpack queues") : "__webpack_queues__";
|
|
428
|
-
/******/ var webpackExports = hasSymbol ? Symbol("webpack exports") : "__webpack_exports__";
|
|
429
|
-
/******/ var webpackError = hasSymbol ? Symbol("webpack error") : "__webpack_error__";
|
|
430
|
-
/******/
|
|
431
|
-
/******/ var resolveQueue = function(queue) {
|
|
432
|
-
/******/ if(queue && queue.d < 1) {
|
|
433
|
-
/******/ queue.d = 1;
|
|
434
|
-
/******/ queue.forEach(function(fn) { fn.r--; });
|
|
435
|
-
/******/ queue.forEach(function(fn) { fn.r-- ? fn.r++ : fn(); });
|
|
436
|
-
/******/ }
|
|
437
|
-
/******/ }
|
|
438
|
-
/******/ var wrapDeps = function(deps) { return deps.map(function(dep) {
|
|
439
|
-
/******/ if(dep !== null && typeof dep === "object") {
|
|
440
|
-
/******/
|
|
441
|
-
/******/ if(dep[webpackQueues]) return dep;
|
|
442
|
-
/******/ if(dep.then) {
|
|
443
|
-
/******/ var queue = [];
|
|
444
|
-
/******/ queue.d = 0;
|
|
445
|
-
/******/ dep.then(function(r) {
|
|
446
|
-
/******/ obj[webpackExports] = r;
|
|
447
|
-
/******/ resolveQueue(queue);
|
|
448
|
-
/******/ }, function(e) {
|
|
449
|
-
/******/ obj[webpackError] = e;
|
|
450
|
-
/******/ resolveQueue(queue);
|
|
451
|
-
/******/ });
|
|
452
|
-
/******/ var obj = {};
|
|
453
|
-
/******/
|
|
454
|
-
/******/ obj[webpackQueues] = function(fn) { fn(queue); };
|
|
455
|
-
/******/ return obj;
|
|
456
|
-
/******/ }
|
|
457
|
-
/******/ }
|
|
458
|
-
/******/ var ret = {};
|
|
459
|
-
/******/ ret[webpackQueues] = function() {};
|
|
460
|
-
/******/ ret[webpackExports] = dep;
|
|
461
|
-
/******/ return ret;
|
|
462
|
-
/******/ }); };
|
|
463
|
-
/******/ __webpack_require__.a = function(module, body, hasAwait) {
|
|
464
|
-
/******/ var queue;
|
|
465
|
-
/******/ hasAwait && ((queue = []).d = -1);
|
|
466
|
-
/******/ var depQueues = new Set();
|
|
467
|
-
/******/ var exports = module.exports;
|
|
468
|
-
/******/ var currentDeps;
|
|
469
|
-
/******/ var outerResolve;
|
|
470
|
-
/******/ var reject;
|
|
471
|
-
/******/ var promise = new Promise(function(resolve, rej) {
|
|
472
|
-
/******/ reject = rej;
|
|
473
|
-
/******/ outerResolve = resolve;
|
|
474
|
-
/******/ });
|
|
475
|
-
/******/ promise[webpackExports] = exports;
|
|
476
|
-
/******/ promise[webpackQueues] = function(fn) { queue && fn(queue), depQueues.forEach(fn), promise["catch"](function() {}); };
|
|
477
|
-
/******/ module.exports = promise;
|
|
478
|
-
/******/ var handle = function(deps) {
|
|
479
|
-
/******/ currentDeps = wrapDeps(deps);
|
|
480
|
-
/******/ var fn;
|
|
481
|
-
/******/ var getResult = function() { return currentDeps.map(function(d) {
|
|
482
|
-
/******/
|
|
483
|
-
/******/ if(d[webpackError]) throw d[webpackError];
|
|
484
|
-
/******/ return d[webpackExports];
|
|
485
|
-
/******/ }); }
|
|
486
|
-
/******/ var promise = new Promise(function(resolve) {
|
|
487
|
-
/******/ fn = function() { resolve(getResult); };
|
|
488
|
-
/******/ fn.r = 0;
|
|
489
|
-
/******/ var fnQueue = function(q) { q !== queue && !depQueues.has(q) && (depQueues.add(q), q && !q.d && (fn.r++, q.push(fn))); };
|
|
490
|
-
/******/ currentDeps.map(function(dep) { dep[webpackQueues](fnQueue); });
|
|
491
|
-
/******/ });
|
|
492
|
-
/******/ return fn.r ? promise : getResult();
|
|
493
|
-
/******/ }
|
|
494
|
-
/******/ var done = function(err) { (err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue); }
|
|
495
|
-
/******/ body(handle, done);
|
|
496
|
-
/******/ queue && queue.d < 0 && (queue.d = 0);
|
|
497
|
-
/******/ };
|
|
498
|
-
/******/ }();
|
|
499
|
-
/******/
|
|
500
|
-
/******/ /* webpack/runtime/define property getters */
|
|
501
|
-
/******/ !function() {
|
|
502
|
-
/******/ // define getter/value functions for harmony exports
|
|
503
|
-
/******/ __webpack_require__.d = function(exports, definition) {
|
|
504
|
-
/******/ if(Array.isArray(definition)) {
|
|
505
|
-
/******/ var i = 0;
|
|
506
|
-
/******/ while(i < definition.length) {
|
|
507
|
-
/******/ var key = definition[i++];
|
|
508
|
-
/******/ var binding = definition[i++];
|
|
509
|
-
/******/ if(!__webpack_require__.o(exports, key)) {
|
|
510
|
-
/******/ if(binding === 0) {
|
|
511
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
|
|
512
|
-
/******/ } else {
|
|
513
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
|
|
514
|
-
/******/ }
|
|
515
|
-
/******/ } else if(binding === 0) { i++; }
|
|
516
|
-
/******/ }
|
|
517
|
-
/******/ } else {
|
|
518
|
-
/******/ for(var key in definition) {
|
|
519
|
-
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
520
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
521
|
-
/******/ }
|
|
522
|
-
/******/ }
|
|
523
|
-
/******/ }
|
|
524
|
-
/******/ };
|
|
525
|
-
/******/ }();
|
|
526
|
-
/******/
|
|
527
|
-
/******/ /* webpack/runtime/global */
|
|
528
|
-
/******/ !function() {
|
|
529
|
-
/******/ __webpack_require__.g = (function() {
|
|
530
|
-
/******/ if (typeof globalThis === 'object') return globalThis;
|
|
531
|
-
/******/ try {
|
|
532
|
-
/******/ return this || new Function('return this')();
|
|
533
|
-
/******/ } catch (e) {
|
|
534
|
-
/******/ if (typeof window === 'object') return window;
|
|
535
|
-
/******/ }
|
|
536
|
-
/******/ })();
|
|
537
|
-
/******/ }();
|
|
538
|
-
/******/
|
|
539
|
-
/******/ /* webpack/runtime/harmony module decorator */
|
|
540
|
-
/******/ !function() {
|
|
541
|
-
/******/ __webpack_require__.hmd = function(module) {
|
|
542
|
-
/******/ module = Object.create(module);
|
|
543
|
-
/******/ if (!module.children) module.children = [];
|
|
544
|
-
/******/ Object.defineProperty(module, 'exports', {
|
|
545
|
-
/******/ enumerable: true,
|
|
546
|
-
/******/ set: function() {
|
|
547
|
-
/******/ throw new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);
|
|
548
|
-
/******/ }
|
|
549
|
-
/******/ });
|
|
550
|
-
/******/ return module;
|
|
551
|
-
/******/ };
|
|
552
|
-
/******/ }();
|
|
553
|
-
/******/
|
|
554
|
-
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
555
|
-
/******/ !function() {
|
|
556
|
-
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
|
|
557
|
-
/******/ }();
|
|
558
|
-
/******/
|
|
559
|
-
/************************************************************************/
|
|
560
|
-
/******/
|
|
561
|
-
/******/ // module cache are used so entry inlining is disabled
|
|
562
|
-
/******/ // startup
|
|
563
|
-
/******/ // Load entry module and return exports
|
|
564
|
-
/******/ var __webpack_exports__ = __webpack_require__(25);
|
|
565
|
-
/******/ __webpack_exports__ = await __webpack_exports__;
|
|
566
|
-
/******/ var __webpack_exports__MANUAL_SCROLL_EVENT_NAMES = __webpack_exports__.ZQ;
|
|
567
|
-
/******/ var __webpack_exports__SCROLL_EVENT_NAMES = __webpack_exports__.S;
|
|
568
|
-
/******/ var __webpack_exports__STOP_AUTO_SCROLLING = __webpack_exports__.D7;
|
|
569
|
-
/******/ var __webpack_exports__closest = __webpack_exports__.kp;
|
|
570
|
-
/******/ var __webpack_exports__createDomNodes = __webpack_exports__.C_;
|
|
571
|
-
/******/ var __webpack_exports__fade = __webpack_exports__.Rv;
|
|
572
|
-
/******/ var __webpack_exports__fadeIn = __webpack_exports__.qG;
|
|
573
|
-
/******/ var __webpack_exports__fadeOut = __webpack_exports__.Xn;
|
|
574
|
-
/******/ var __webpack_exports__getAll = __webpack_exports__.UK;
|
|
575
|
-
/******/ var __webpack_exports__getParents = __webpack_exports__.wT;
|
|
576
|
-
/******/ var __webpack_exports__getText = __webpack_exports__.q4;
|
|
577
|
-
/******/ var __webpack_exports__interruptableScrollTo = __webpack_exports__.Cc;
|
|
578
|
-
/******/ var __webpack_exports__isEquivalent = __webpack_exports__.l2;
|
|
579
|
-
/******/ var __webpack_exports__isHidden = __webpack_exports__.dK;
|
|
580
|
-
/******/ var __webpack_exports__onDocumentReady = __webpack_exports__.qq;
|
|
581
|
-
/******/ var __webpack_exports__replace = __webpack_exports__.HC;
|
|
582
|
-
/******/ var __webpack_exports__scrollTo = __webpack_exports__.VG;
|
|
583
|
-
/******/ var __webpack_exports__unwrap = __webpack_exports__.oA;
|
|
584
|
-
/******/ var __webpack_exports__wrap = __webpack_exports__.LV;
|
|
585
|
-
/******/ export { __webpack_exports__MANUAL_SCROLL_EVENT_NAMES as MANUAL_SCROLL_EVENT_NAMES, __webpack_exports__SCROLL_EVENT_NAMES as SCROLL_EVENT_NAMES, __webpack_exports__STOP_AUTO_SCROLLING as STOP_AUTO_SCROLLING, __webpack_exports__closest as closest, __webpack_exports__createDomNodes as createDomNodes, __webpack_exports__fade as fade, __webpack_exports__fadeIn as fadeIn, __webpack_exports__fadeOut as fadeOut, __webpack_exports__getAll as getAll, __webpack_exports__getParents as getParents, __webpack_exports__getText as getText, __webpack_exports__interruptableScrollTo as interruptableScrollTo, __webpack_exports__isEquivalent as isEquivalent, __webpack_exports__isHidden as isHidden, __webpack_exports__onDocumentReady as onDocumentReady, __webpack_exports__replace as replace, __webpack_exports__scrollTo as scrollTo, __webpack_exports__unwrap as unwrap, __webpack_exports__wrap as wrap };
|
|
586
|
-
/******/
|
|
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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
|