clientnode 4.0.1436 → 4.0.1437

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