obsidian-dev-utils 4.2.0 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 4.3.0
4
+
5
+ - Simplify generics
6
+
3
7
  ## 4.2.0
4
8
 
5
9
  - Refactor
@@ -52,4 +52,4 @@ async function noopAsync() {
52
52
  omitAsyncReturnType,
53
53
  omitReturnType
54
54
  });
55
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL0Z1bmN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIE1ha2VzIGEgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzIGFuZCBvbWl0cyB0aGUgcmV0dXJuIHZhbHVlLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIEFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLlxuICogQHBhcmFtIGZuIC0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkLlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMgYW5kIG9taXRzIHRoZSByZXR1cm4gdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbWl0UmV0dXJuVHlwZTxBcmdzIGV4dGVuZHMgdW5rbm93bltdPihmbjogKC4uLmFyZ3M6IEFyZ3MpID0+IHVua25vd24pOiAoLi4uYXJnczogQXJncykgPT4gdm9pZCB7XG4gIHJldHVybiAoLi4uYXJnczogQXJncykgPT4ge1xuICAgIGZuKC4uLmFyZ3MpO1xuICB9O1xufVxuXG4vKipcbiAqIE1ha2VzIGFuIGFzeW5jIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIG9yaWdpbmFsIGFzeW5jIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBhbmQgb21pdHMgdGhlIHJldHVybiB2YWx1ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBBcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSBmbiAtIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZC5cbiAqIEByZXR1cm5zIEFuIGFzeW5jIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBhbmQgb21pdHMgdGhlIHJldHVybiB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9taXRBc3luY1JldHVyblR5cGU8QXJncyBleHRlbmRzIHVua25vd25bXT4oZm46ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPHVua25vd24+KTogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gYXN5bmMgKC4uLmFyZ3M6IEFyZ3MpID0+IHtcbiAgICBhd2FpdCBmbiguLi5hcmdzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgLy8gRG9lcyBub3RoaW5nLlxufVxuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdGhpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBub29wQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIERvZXMgbm90aGluZy5cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT08sU0FBUyxlQUF1QyxJQUF5RDtBQUM5RyxTQUFPLElBQUksU0FBZTtBQUN4QixPQUFHLEdBQUcsSUFBSTtBQUFBLEVBQ1o7QUFDRjtBQVNPLFNBQVMsb0JBQTRDLElBQTJFO0FBQ3JJLFNBQU8sVUFBVSxTQUFlO0FBQzlCLFVBQU0sR0FBRyxHQUFHLElBQUk7QUFBQSxFQUNsQjtBQUNGO0FBS08sU0FBUyxPQUFhO0FBRTdCO0FBS0EsZUFBc0IsWUFBMkI7QUFFakQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
55
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL0Z1bmN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvbiBGdW5jdGlvblxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBmdW5jdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBNYWtlcyBhIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBhbmQgb21pdHMgdGhlIHJldHVybiB2YWx1ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBBcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSBmbiAtIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzIGFuZCBvbWl0cyB0aGUgcmV0dXJuIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb21pdFJldHVyblR5cGU8QXJncyBleHRlbmRzIHVua25vd25bXT4oZm46ICguLi5hcmdzOiBBcmdzKSA9PiB1bmtub3duKTogKC4uLmFyZ3M6IEFyZ3MpID0+IHZvaWQge1xuICByZXR1cm4gKC4uLmFyZ3M6IEFyZ3MpID0+IHtcbiAgICBmbiguLi5hcmdzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBNYWtlcyBhbiBhc3luYyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBvcmlnaW5hbCBhc3luYyBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMgYW5kIG9taXRzIHRoZSByZXR1cm4gdmFsdWUuXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gQXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uXG4gKiBAcGFyYW0gZm4gLSBGdW5jdGlvbiB0byBiZSBjYWxsZWQuXG4gKiBAcmV0dXJucyBBbiBhc3luYyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMgYW5kIG9taXRzIHRoZSByZXR1cm4gdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbWl0QXN5bmNSZXR1cm5UeXBlPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGZuOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTx1bmtub3duPik6ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIGFzeW5jICguLi5hcmdzOiBBcmdzKSA9PiB7XG4gICAgYXdhaXQgZm4oLi4uYXJncyk7XG4gIH07XG59XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGRvZXMgbm90aGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG4gIC8vIERvZXMgbm90aGluZy5cbn1cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbm9vcEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAvLyBEb2VzIG5vdGhpbmcuXG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlPLFNBQVMsZUFBdUMsSUFBeUQ7QUFDOUcsU0FBTyxJQUFJLFNBQWU7QUFDeEIsT0FBRyxHQUFHLElBQUk7QUFBQSxFQUNaO0FBQ0Y7QUFTTyxTQUFTLG9CQUE0QyxJQUEyRTtBQUNySSxTQUFPLFVBQVUsU0FBZTtBQUM5QixVQUFNLEdBQUcsR0FBRyxJQUFJO0FBQUEsRUFDbEI7QUFDRjtBQUtPLFNBQVMsT0FBYTtBQUU3QjtBQUtBLGVBQXNCLFlBQTJCO0FBRWpEOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @packageDocumentation Function
3
+ * Contains utility functions for working with functions.
4
+ */
1
5
  /**
2
6
  * Makes a function that calls the original function with the provided arguments and omits the return value.
3
7
  *
@@ -0,0 +1,24 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function patchRequireEsmDefault(){const __require=require;require=Object.assign(id=>{const module=__require(id);return module.__esModule&&module.default?module.default:module},__require)})()
7
+
8
+ "use strict";
9
+ var __defProp = Object.defineProperty;
10
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
11
+ var __getOwnPropNames = Object.getOwnPropertyNames;
12
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
+ var HTMLElement_exports = {};
23
+ module.exports = __toCommonJS(HTMLElement_exports);
24
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL0hUTUxFbGVtZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcclxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uIEhUTUxFbGVtZW50XHJcbiAqIEhlbHBlcnMgZm9yIHdvcmtpbmcgd2l0aCBIVE1MIGVsZW1lbnRzLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBBIEhUTUwgZWxlbWVudCB0aGF0IGNhbiBiZSB2YWxpZGF0ZWQuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRvckVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XHJcbiAgLyoqXHJcbiAgICogU2V0cyBhIGN1c3RvbSBlcnJvciBtZXNzYWdlIG9uIHRoZSBlbGVtZW50LlxyXG4gICAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciBtZXNzYWdlIHRvIHNldCBvbiB0aGUgZWxlbWVudC5cclxuICAgKi9cclxuICBzZXRDdXN0b21WYWxpZGl0eShlcnJvcjogc3RyaW5nKTogdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVwb3J0cyB0aGUgdmFsaWRpdHkgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICovXHJcbiAgcmVwb3J0VmFsaWRpdHkoKTogYm9vbGVhbjtcclxufVxyXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @packageDocumentation HTMLElement
3
+ * Helpers for working with HTML elements.
4
+ */
5
+ /**
6
+ * A HTML element that can be validated.
7
+ */
8
+ export interface ValidatorElement extends HTMLElement {
9
+ /**
10
+ * Sets a custom error message on the element.
11
+ * @param error - The error message to set on the element.
12
+ */
13
+ setCustomValidity(error: string): void;
14
+ /**
15
+ * Reports the validity of the element.
16
+ */
17
+ reportValidity(): boolean;
18
+ }
@@ -40,6 +40,7 @@ __export(src_exports, {
40
40
  DocumentFragment: () => DocumentFragment,
41
41
  Error: () => Error2,
42
42
  Function: () => Function,
43
+ HTMLElement: () => HTMLElement,
43
44
  Object: () => Object2,
44
45
  Path: () => Path,
45
46
  RegExp: () => RegExp,
@@ -57,6 +58,7 @@ var Blob = __toESM(require('./Blob.cjs'), 1);
57
58
  var DocumentFragment = __toESM(require('./DocumentFragment.cjs'), 1);
58
59
  var Error2 = __toESM(require('./Error.cjs'), 1);
59
60
  var Function = __toESM(require('./Function.cjs'), 1);
61
+ var HTMLElement = __toESM(require('./HTMLElement.cjs'), 1);
60
62
  var Object2 = __toESM(require('./Object.cjs'), 1);
61
63
  var obsidian = __toESM(require('./obsidian/index.cjs'), 1);
62
64
  var Path = __toESM(require('./Path.cjs'), 1);
@@ -72,6 +74,7 @@ var ValueProvider = __toESM(require('./ValueProvider.cjs'), 1);
72
74
  DocumentFragment,
73
75
  Error,
74
76
  Function,
77
+ HTMLElement,
75
78
  Object,
76
79
  Path,
77
80
  RegExp,
@@ -82,4 +85,4 @@ var ValueProvider = __toESM(require('./ValueProvider.cjs'), 1);
82
85
  scripts,
83
86
  url
84
87
  });
85
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgX3R5cGVzIGZyb20gJy4vQHR5cGVzLnRzJztcbmV4cG9ydCAqIGFzIEFzeW5jIGZyb20gJy4vQXN5bmMudHMnO1xuZXhwb3J0ICogYXMgQmxvYiBmcm9tICcuL0Jsb2IudHMnO1xuZXhwb3J0ICogYXMgRG9jdW1lbnRGcmFnbWVudCBmcm9tICcuL0RvY3VtZW50RnJhZ21lbnQudHMnO1xuZXhwb3J0ICogYXMgRXJyb3IgZnJvbSAnLi9FcnJvci50cyc7XG5leHBvcnQgKiBhcyBGdW5jdGlvbiBmcm9tICcuL0Z1bmN0aW9uLnRzJztcbmV4cG9ydCAqIGFzIE9iamVjdCBmcm9tICcuL09iamVjdC50cyc7XG5leHBvcnQgKiBhcyBvYnNpZGlhbiBmcm9tICcuL29ic2lkaWFuL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzIFBhdGggZnJvbSAnLi9QYXRoLnRzJztcbmV4cG9ydCAqIGFzIFJlZ0V4cCBmcm9tICcuL1JlZ0V4cC50cyc7XG5leHBvcnQgKiBhcyBzY3JpcHRzIGZyb20gJy4vc2NyaXB0cy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyBTdHJpbmcgZnJvbSAnLi9TdHJpbmcudHMnO1xuZXhwb3J0ICogYXMgdXJsIGZyb20gJy4vdXJsLnRzJztcbmV4cG9ydCAqIGFzIFZhbHVlUHJvdmlkZXIgZnJvbSAnLi9WYWx1ZVByb3ZpZGVyLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBQUFBO0FBQUEsRUFBQTtBQUFBLGdCQUFBQztBQUFBLEVBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQSxhQUF3QjtBQUN4QixZQUF1QjtBQUN2QixXQUFzQjtBQUN0Qix1QkFBa0M7QUFDbEMsSUFBQUQsU0FBdUI7QUFDdkIsZUFBMEI7QUFDMUIsSUFBQUMsVUFBd0I7QUFDeEIsZUFBMEI7QUFDMUIsV0FBc0I7QUFDdEIsYUFBd0I7QUFDeEIsY0FBeUI7QUFDekIsYUFBd0I7QUFDeEIsVUFBcUI7QUFDckIsb0JBQStCOyIsCiAgIm5hbWVzIjogWyJFcnJvciIsICJPYmplY3QiXQp9Cg==
88
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgX3R5cGVzIGZyb20gJy4vQHR5cGVzLnRzJztcbmV4cG9ydCAqIGFzIEFzeW5jIGZyb20gJy4vQXN5bmMudHMnO1xuZXhwb3J0ICogYXMgQmxvYiBmcm9tICcuL0Jsb2IudHMnO1xuZXhwb3J0ICogYXMgRG9jdW1lbnRGcmFnbWVudCBmcm9tICcuL0RvY3VtZW50RnJhZ21lbnQudHMnO1xuZXhwb3J0ICogYXMgRXJyb3IgZnJvbSAnLi9FcnJvci50cyc7XG5leHBvcnQgKiBhcyBGdW5jdGlvbiBmcm9tICcuL0Z1bmN0aW9uLnRzJztcbmV4cG9ydCAqIGFzIEhUTUxFbGVtZW50IGZyb20gJy4vSFRNTEVsZW1lbnQudHMnO1xuZXhwb3J0ICogYXMgT2JqZWN0IGZyb20gJy4vT2JqZWN0LnRzJztcbmV4cG9ydCAqIGFzIG9ic2lkaWFuIGZyb20gJy4vb2JzaWRpYW4vaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgUGF0aCBmcm9tICcuL1BhdGgudHMnO1xuZXhwb3J0ICogYXMgUmVnRXhwIGZyb20gJy4vUmVnRXhwLnRzJztcbmV4cG9ydCAqIGFzIHNjcmlwdHMgZnJvbSAnLi9zY3JpcHRzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzIFN0cmluZyBmcm9tICcuL1N0cmluZy50cyc7XG5leHBvcnQgKiBhcyB1cmwgZnJvbSAnLi91cmwudHMnO1xuZXhwb3J0ICogYXMgVmFsdWVQcm92aWRlciBmcm9tICcuL1ZhbHVlUHJvdmlkZXIudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUFBQUE7QUFBQSxFQUFBO0FBQUE7QUFBQSxnQkFBQUM7QUFBQSxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUEsYUFBd0I7QUFDeEIsWUFBdUI7QUFDdkIsV0FBc0I7QUFDdEIsdUJBQWtDO0FBQ2xDLElBQUFELFNBQXVCO0FBQ3ZCLGVBQTBCO0FBQzFCLGtCQUE2QjtBQUM3QixJQUFBQyxVQUF3QjtBQUN4QixlQUEwQjtBQUMxQixXQUFzQjtBQUN0QixhQUF3QjtBQUN4QixjQUF5QjtBQUN6QixhQUF3QjtBQUN4QixVQUFxQjtBQUNyQixvQkFBK0I7IiwKICAibmFtZXMiOiBbIkVycm9yIiwgIk9iamVjdCJdCn0K
@@ -4,6 +4,7 @@ export * as Blob from './Blob.ts';
4
4
  export * as DocumentFragment from './DocumentFragment.ts';
5
5
  export * as Error from './Error.ts';
6
6
  export * as Function from './Function.ts';
7
+ export * as HTMLElement from './HTMLElement.ts';
7
8
  export * as Object from './Object.ts';
8
9
  export * as obsidian from './obsidian/index.ts';
9
10
  export * as Path from './Path.ts';
@@ -25,51 +25,75 @@ var __copyProps = (to, from, except, desc) => {
25
25
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
26
  var ValueComponent_exports = {};
27
27
  __export(ValueComponent_exports, {
28
- bindValueComponent: () => bindValueComponent
28
+ extend: () => extend
29
29
  });
30
30
  module.exports = __toCommonJS(ValueComponent_exports);
31
31
  var import_obsidian = require('obsidian');
32
- function bindValueComponent(valueComponent, plugin, property, options) {
33
- const DEFAULT_OPTIONS = {
34
- autoSave: true,
35
- pluginSettingsToComponentValueConverter: (value) => value,
36
- componentToPluginSettingsValueConverter: (value) => value
37
- };
38
- const optionsExt = { ...DEFAULT_OPTIONS, ...options };
39
- const pluginExt = plugin;
40
- const uiComponentExt = valueComponent;
41
- const pluginSettingsFn = () => optionsExt.pluginSettings ?? pluginExt.settingsCopy;
42
- uiComponentExt.setValue(optionsExt.pluginSettingsToComponentValueConverter(pluginSettingsFn()[property])).onChange(async (uiValue) => {
43
- if (!validateComponent(uiValue)) {
44
- return;
45
- }
46
- const pluginSettings = pluginSettingsFn();
47
- pluginSettings[property] = optionsExt.componentToPluginSettingsValueConverter(uiValue);
48
- if (optionsExt.autoSave) {
49
- await pluginExt.saveSettings(pluginSettings);
32
+ class ValueComponentEx {
33
+ constructor(valueComponent) {
34
+ this.valueComponent = valueComponent;
35
+ }
36
+ /**
37
+ * Returns the ValueComponent with extended functionality.
38
+ */
39
+ asExtended() {
40
+ return { ...this.valueComponent, ...this };
41
+ }
42
+ /**
43
+ * Binds the ValueComponent to a property in the plugin settings.
44
+ *
45
+ * @typeParam Plugin - The type of the plugin that extends `PluginBase`.
46
+ * @typeParam Property - The key of the plugin setting that the component is bound to.
47
+ * @typeParam PluginSettings - The type of the plugin settings object.
48
+ * @param plugin - The plugin.
49
+ * @param property - The property key in `PluginSettings` to bind to the UI component.
50
+ * @param options - Configuration options.
51
+ * @returns The `ValueComponent` instance that was bound to the property.
52
+ */
53
+ bind(plugin, property, options) {
54
+ const DEFAULT_OPTIONS = {
55
+ autoSave: true,
56
+ pluginSettingsToComponentValueConverter: (value) => value,
57
+ componentToPluginSettingsValueConverter: (value) => value
58
+ };
59
+ const optionsExt = { ...DEFAULT_OPTIONS, ...options };
60
+ const pluginExt = plugin;
61
+ const pluginSettingsFn = () => optionsExt.pluginSettings ?? pluginExt.settingsCopy;
62
+ this.valueComponent.setValue(optionsExt.pluginSettingsToComponentValueConverter(pluginSettingsFn()[property])).onChange(async (uiValue) => {
63
+ if (!this.validate(optionsExt.valueValidator, uiValue)) {
64
+ return;
65
+ }
66
+ const pluginSettings = pluginSettingsFn();
67
+ pluginSettings[property] = optionsExt.componentToPluginSettingsValueConverter(uiValue);
68
+ if (optionsExt.autoSave) {
69
+ await pluginExt.saveSettings(pluginSettings);
70
+ }
71
+ await optionsExt.onChanged?.();
72
+ });
73
+ const validatorElement = getValidatorElement(this.valueComponent);
74
+ if (validatorElement) {
75
+ validatorElement.addEventListener("focus", () => this.validate(optionsExt.valueValidator));
76
+ validatorElement.addEventListener("blur", () => this.validate(optionsExt.valueValidator));
50
77
  }
51
- await optionsExt.onChanged?.();
52
- });
53
- const validatorElement = getValidatorElement(valueComponent);
54
- if (validatorElement) {
55
- validatorElement.addEventListener("focus", () => validateComponent());
56
- validatorElement.addEventListener("blur", () => validateComponent());
78
+ return this.asExtended();
57
79
  }
58
- return valueComponent;
59
- function validateComponent(uiValue) {
60
- if (!optionsExt.valueValidator) {
80
+ validate(valueValidator, uiValue) {
81
+ if (!valueValidator) {
61
82
  return true;
62
83
  }
63
- uiValue ??= uiComponentExt.getValue();
64
- const errorMessage = optionsExt.valueValidator(uiValue);
65
- const validatorElement2 = getValidatorElement(valueComponent);
66
- if (validatorElement2) {
67
- validatorElement2.setCustomValidity(errorMessage ?? "");
68
- validatorElement2.reportValidity();
84
+ uiValue ??= this.valueComponent.getValue();
85
+ const errorMessage = valueValidator(uiValue);
86
+ const validatorElement = getValidatorElement(this.valueComponent);
87
+ if (validatorElement) {
88
+ validatorElement.setCustomValidity(errorMessage ?? "");
89
+ validatorElement.reportValidity();
69
90
  }
70
91
  return !errorMessage;
71
92
  }
72
93
  }
94
+ function extend(valueComponent) {
95
+ return new ValueComponentEx(valueComponent).asExtended();
96
+ }
73
97
  function getValidatorElement(valueComponent) {
74
98
  if (valueComponent instanceof import_obsidian.DropdownComponent) {
75
99
  return valueComponent.selectEl;
@@ -87,6 +111,6 @@ function getValidatorElement(valueComponent) {
87
111
  }
88
112
  // Annotate the CommonJS export names for ESM import in node:
89
113
  0 && (module.exports = {
90
- bindValueComponent
114
+ extend
91
115
  });
92
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1BsdWdpbi9WYWx1ZUNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHtcbiAgRHJvcGRvd25Db21wb25lbnQsXG4gIFNsaWRlckNvbXBvbmVudCxcbiAgVGV4dEFyZWFDb21wb25lbnQsXG4gIFRleHRDb21wb25lbnRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEtleXNNYXRjaGluZyB9IGZyb20gJy4uLy4uL0B0eXBlcy50cyc7XG5pbXBvcnQgdHlwZSB7IE1heWJlUHJvbWlzZSB9IGZyb20gJy4uLy4uL0FzeW5jLnRzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luQmFzZSB9IGZyb20gJy4vUGx1Z2luQmFzZS50cyc7XG5cbi8qKlxuICogQSBWYWx1ZUNvbXBvbmVudCB0aGF0IGNhbiBiZSBib3VuZCB0byBhIHBsdWdpbiBzZXR0aW5nLlxuICovXG5pbnRlcmZhY2UgVmFsdWVDb21wb25lbnQ8VUlWYWx1ZT4ge1xuICAvKipcbiAgICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHZhbHVlIG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBnZXRWYWx1ZSgpOiBVSVZhbHVlO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IG9uIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBzZXRWYWx1ZSh2YWx1ZTogVUlWYWx1ZSk6IHRoaXM7XG5cbiAgLyoqXG4gICAqIFNldHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudCBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBjb21wb25lbnQgY2hhbmdlcy5cbiAgICovXG4gIG9uQ2hhbmdlKGNhbGxiYWNrOiAobmV3VmFsdWU6IFVJVmFsdWUpID0+IFByb21pc2U8dm9pZD4pOiB0aGlzO1xufVxuXG4vKipcbiAqIEEgSFRNTCBlbGVtZW50IHRoYXQgY2FuIGJlIHZhbGlkYXRlZC5cbiAqL1xuaW50ZXJmYWNlIFZhbGlkYXRvckVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gIC8qKlxuICAgKiBTZXRzIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2Ugb24gdGhlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciBtZXNzYWdlIHRvIHNldCBvbiB0aGUgZWxlbWVudC5cbiAgICovXG4gIHNldEN1c3RvbVZhbGlkaXR5KGVycm9yOiBzdHJpbmcpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZXBvcnRzIHRoZSB2YWxpZGl0eSBvZiB0aGUgZWxlbWVudC5cbiAgICovXG4gIHJlcG9ydFZhbGlkaXR5KCk6IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYmluZGluZyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHBsdWdpbiBzZXR0aW5nLlxuICovXG5pbnRlcmZhY2UgQmluZFZhbHVlQ29tcG9uZW50T3B0aW9uczxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZT4ge1xuICAvKipcbiAgICogSWYgdHJ1ZSwgc2F2ZXMgdGhlIHBsdWdpbiBzZXR0aW5ncyBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBjb21wb25lbnQgdmFsdWUgY2hhbmdlcy4gRGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBhdXRvU2F2ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gc2V0dGluZ3Mgb2JqZWN0IHRvIGJpbmQgdGhlIGNvbXBvbmVudCB0by4gRGVmYXVsdCBpcyB0aGUgcGx1Z2luJ3MgY3VycmVudCBzZXR0aW5ncy5cbiAgICovXG4gIHBsdWdpblNldHRpbmdzPzogUGx1Z2luU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgVUkgdmFsdWUgYmVmb3JlIHNldHRpbmcgaXQgb24gdGhlIHBsdWdpbiBzZXR0aW5ncy5cbiAgICogQHBhcmFtIHVpVmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgQW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgdmFsdWUgaXMgaW52YWxpZCwgb3IgYG51bGxgIGlmIGl0IGlzIHZhbGlkLlxuICAgKi9cbiAgdmFsdWVWYWxpZGF0b3I/OiAodWlWYWx1ZTogVUlWYWx1ZSkgPT4gc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgY29tcG9uZW50IGNoYW5nZXMuXG4gICAqL1xuICBvbkNoYW5nZWQ/OiAoKSA9PiBNYXliZVByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogRXh0ZW5kZWQgb3B0aW9ucyBmb3IgYmluZGluZyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHBsdWdpbiBzZXR0aW5nLlxuICovXG5pbnRlcmZhY2UgQmluZFZhbHVlQ29tcG9uZW50T3B0aW9uc0V4dGVuZGVkPFBsdWdpblNldHRpbmdzLCBVSVZhbHVlLCBQcm9wZXJ0eSBleHRlbmRzIGtleW9mIFBsdWdpblNldHRpbmdzPiBleHRlbmRzIEJpbmRWYWx1ZUNvbXBvbmVudE9wdGlvbnM8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWU+IHtcbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBwbHVnaW4gc2V0dGluZ3MgdmFsdWUgdG8gdGhlIHZhbHVlIHVzZWQgYnkgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHBhcmFtIHBsdWdpblNldHRpbmdzVmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSB0byBzZXQgb24gdGhlIFVJIGNvbXBvbmVudC5cbiAgICovXG4gIHBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcjogKHBsdWdpblNldHRpbmdzVmFsdWU6IFBsdWdpblNldHRpbmdzW1Byb3BlcnR5XSkgPT4gVUlWYWx1ZTtcblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIFVJIGNvbXBvbmVudCdzIHZhbHVlIGJhY2sgdG8gdGhlIHBsdWdpbiBzZXR0aW5ncyB2YWx1ZS5cbiAgICogQHBhcmFtIHVpVmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIFVJIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIHRvIHNldCBvbiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICAgKi9cbiAgY29tcG9uZW50VG9QbHVnaW5TZXR0aW5nc1ZhbHVlQ29udmVydGVyOiAodWlWYWx1ZTogVUlWYWx1ZSkgPT4gUGx1Z2luU2V0dGluZ3NbUHJvcGVydHldO1xufVxuXG4vKipcbiAqIEJpbmRzIGEgdmFsdWUgY29tcG9uZW50IHRvIGEgcHJvcGVydHkgaW4gdGhlIHBsdWdpbiBzZXR0aW5ncyB3aXRoIG9wdGlvbmFsIGF1dG9tYXRpYyBzYXZpbmcgYW5kIHZhbHVlIGNvbnZlcnNpb24uXG4gKlxuICogQHR5cGVQYXJhbSBQbHVnaW4gLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHRoYXQgZXh0ZW5kcyBgUGx1Z2luQmFzZWAuXG4gKiBAdHlwZVBhcmFtIFRWYWx1ZUNvbXBvbmVudCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBjb21wb25lbnQgZXh0ZW5kaW5nIGBWYWx1ZUNvbXBvbmVudGAuXG4gKiBAdHlwZVBhcmFtIFByb3BlcnR5IC0gVGhlIGtleSBvZiB0aGUgcGx1Z2luIHNldHRpbmcgdGhhdCB0aGUgY29tcG9uZW50IGlzIGJvdW5kIHRvLlxuICogQHR5cGVQYXJhbSBVSVZhbHVlIC0gVGhlIGluZmVycmVkIHR5cGUgYmFzZWQgb24gdGhlIFVJIGNvbXBvbmVudCdzIHR5cGUuXG4gKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIGluZmVycmVkIHR5cGUgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4uXG4gKiBAcGFyYW0gdmFsdWVDb21wb25lbnQgLSBUaGUgY29tcG9uZW50IHRoYXQgd2lsbCBkaXNwbGF5IGFuZCBpbnRlcmFjdCB3aXRoIHRoZSBzZXR0aW5nIHZhbHVlLlxuICogQHBhcmFtIHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBpbiBgUGx1Z2luU2V0dGluZ3NgIHRvIGJpbmQgdG8gdGhlIFVJIGNvbXBvbmVudC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIGBWYWx1ZUNvbXBvbmVudGAgaW5zdGFuY2UgdGhhdCB3YXMgYm91bmQgdG8gdGhlIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZFZhbHVlQ29tcG9uZW50PFxuICBQbHVnaW4gZXh0ZW5kcyBQbHVnaW5CYXNlPG9iamVjdD4sXG4gIFRWYWx1ZUNvbXBvbmVudCBleHRlbmRzIFZhbHVlQ29tcG9uZW50PHVua25vd24+LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtcGFyYW1ldGVyc1xuICBQcm9wZXJ0eSBleHRlbmRzIEtleXNNYXRjaGluZzxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZT4sXG4gIFVJVmFsdWUgPSBUVmFsdWVDb21wb25lbnQgZXh0ZW5kcyBWYWx1ZUNvbXBvbmVudDxpbmZlciBQPiA/IFAgOiBuZXZlcixcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QgPSBQbHVnaW4gZXh0ZW5kcyBQbHVnaW5CYXNlPGluZmVyIFA+ID8gUCA6IG5ldmVyXG4+KFxuICB2YWx1ZUNvbXBvbmVudDogVFZhbHVlQ29tcG9uZW50LFxuICBwbHVnaW46IFBsdWdpbixcbiAgcHJvcGVydHk6IFByb3BlcnR5LFxuICBvcHRpb25zPzogQmluZFZhbHVlQ29tcG9uZW50T3B0aW9uczxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZT5cbik6IFRWYWx1ZUNvbXBvbmVudDtcblxuLyoqXG4gKiBCaW5kcyBhIHZhbHVlIGNvbXBvbmVudCB0byBhIHByb3BlcnR5IGluIHRoZSBwbHVnaW4gc2V0dGluZ3Mgd2l0aCBvcHRpb25hbCBhdXRvbWF0aWMgc2F2aW5nIGFuZCB2YWx1ZSBjb252ZXJzaW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gUGx1Z2luIC0gVGhlIHR5cGUgb2YgdGhlIHBsdWdpbiB0aGF0IGV4dGVuZHMgYFBsdWdpbkJhc2VgLlxuICogQHR5cGVQYXJhbSBUVmFsdWVDb21wb25lbnQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgY29tcG9uZW50IGV4dGVuZGluZyBgVmFsdWVDb21wb25lbnRgLlxuICogQHR5cGVQYXJhbSBQcm9wZXJ0eSAtIFRoZSBrZXkgb2YgdGhlIHBsdWdpbiBzZXR0aW5nIHRoYXQgdGhlIGNvbXBvbmVudCBpcyBib3VuZCB0by5cbiAqIEB0eXBlUGFyYW0gVUlWYWx1ZSAtIFRoZSBpbmZlcnJlZCB0eXBlIGJhc2VkIG9uIHRoZSB2YWx1ZSBjb21wb25lbnQncyB0eXBlLlxuICogQHR5cGVQYXJhbSBQbHVnaW5TZXR0aW5ncyAtIFRoZSBpbmZlcnJlZCB0eXBlIG9mIHRoZSBwbHVnaW4gc2V0dGluZ3Mgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luLlxuICogQHBhcmFtIHZhbHVlQ29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0aGF0IHdpbGwgZGlzcGxheSBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUgc2V0dGluZyB2YWx1ZS5cbiAqIEBwYXJhbSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgaW4gYFBsdWdpblNldHRpbmdzYCB0byBiaW5kIHRvIHRoZSBVSSBjb21wb25lbnQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBgVmFsdWVDb21wb25lbnRgIGluc3RhbmNlIHRoYXQgd2FzIGJvdW5kIHRvIHRoZSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRWYWx1ZUNvbXBvbmVudDxcbiAgUGx1Z2luIGV4dGVuZHMgUGx1Z2luQmFzZTxvYmplY3Q+LFxuICBUVmFsdWVDb21wb25lbnQgZXh0ZW5kcyBWYWx1ZUNvbXBvbmVudDx1bmtub3duPixcbiAgUHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBQbHVnaW5TZXR0aW5ncyxcbiAgVUlWYWx1ZSA9IFRWYWx1ZUNvbXBvbmVudCBleHRlbmRzIFZhbHVlQ29tcG9uZW50PGluZmVyIFA+ID8gUCA6IG5ldmVyLFxuICBQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdCA9IFBsdWdpbiBleHRlbmRzIFBsdWdpbkJhc2U8aW5mZXIgUD4gPyBQIDogbmV2ZXJcbj4oXG4gIHZhbHVlQ29tcG9uZW50OiBUVmFsdWVDb21wb25lbnQsXG4gIHBsdWdpbjogUGx1Z2luLFxuICBwcm9wZXJ0eTogUHJvcGVydHksXG4gIG9wdGlvbnM6IEJpbmRWYWx1ZUNvbXBvbmVudE9wdGlvbnNFeHRlbmRlZDxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZSwgUHJvcGVydHk+XG4pOiBUVmFsdWVDb21wb25lbnQ7XG5cbi8qKlxuICogQmluZHMgYSB2YWx1ZSBjb21wb25lbnQgdG8gYSBwcm9wZXJ0eSBpbiB0aGUgcGx1Z2luIHNldHRpbmdzIHdpdGggb3B0aW9uYWwgYXV0b21hdGljIHNhdmluZyBhbmQgdmFsdWUgY29udmVyc2lvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFBsdWdpbiAtIFRoZSB0eXBlIG9mIHRoZSBwbHVnaW4gdGhhdCBleHRlbmRzIGBQbHVnaW5CYXNlYC5cbiAqIEB0eXBlUGFyYW0gVFZhbHVlQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIGNvbXBvbmVudCBleHRlbmRpbmcgYFZhbHVlQ29tcG9uZW50YC5cbiAqIEB0eXBlUGFyYW0gUHJvcGVydHkgLSBUaGUga2V5IG9mIHRoZSBwbHVnaW4gc2V0dGluZyB0aGF0IHRoZSBjb21wb25lbnQgaXMgYm91bmQgdG8uXG4gKiBAdHlwZVBhcmFtIFVJVmFsdWUgLSBUaGUgaW5mZXJyZWQgdHlwZSBiYXNlZCBvbiB0aGUgdmFsdWUgY29tcG9uZW50J3MgdHlwZS5cbiAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgaW5mZXJyZWQgdHlwZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbi5cbiAqIEBwYXJhbSB2YWx1ZUNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgdGhhdCB3aWxsIGRpc3BsYXkgYW5kIGludGVyYWN0IHdpdGggdGhlIHNldHRpbmcgdmFsdWUuXG4gKiBAcGFyYW0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IGluIGBQbHVnaW5TZXR0aW5nc2AgdG8gYmluZCB0byB0aGUgVUkgY29tcG9uZW50LlxuICogQHBhcmFtIG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgYFZhbHVlQ29tcG9uZW50YCBpbnN0YW5jZSB0aGF0IHdhcyBib3VuZCB0byB0aGUgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kVmFsdWVDb21wb25lbnQ8XG4gIFBsdWdpbiBleHRlbmRzIFBsdWdpbkJhc2U8b2JqZWN0PixcbiAgVFZhbHVlQ29tcG9uZW50IGV4dGVuZHMgVmFsdWVDb21wb25lbnQ8dW5rbm93bj4sXG4gIFByb3BlcnR5IGV4dGVuZHMga2V5b2YgUGx1Z2luU2V0dGluZ3MsXG4gIFVJVmFsdWUgPSBUVmFsdWVDb21wb25lbnQgZXh0ZW5kcyBWYWx1ZUNvbXBvbmVudDxpbmZlciBQPiA/IFAgOiBuZXZlcixcbiAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QgPSBQbHVnaW4gZXh0ZW5kcyBQbHVnaW5CYXNlPGluZmVyIFA+ID8gUCA6IG5ldmVyXG4+KFxuICB2YWx1ZUNvbXBvbmVudDogVFZhbHVlQ29tcG9uZW50LFxuICBwbHVnaW46IFBsdWdpbixcbiAgcHJvcGVydHk6IFByb3BlcnR5LFxuICBvcHRpb25zPzogQmluZFZhbHVlQ29tcG9uZW50T3B0aW9uczxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZT5cbik6IFRWYWx1ZUNvbXBvbmVudCB7XG4gIHR5cGUgUHJvcGVydHlUeXBlID0gUGx1Z2luU2V0dGluZ3NbUHJvcGVydHldO1xuICBjb25zdCBERUZBVUxUX09QVElPTlM6IEJpbmRWYWx1ZUNvbXBvbmVudE9wdGlvbnNFeHRlbmRlZDxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZSwgUHJvcGVydHk+ID0ge1xuICAgIGF1dG9TYXZlOiB0cnVlLFxuICAgIHBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcjogKHZhbHVlKTogVUlWYWx1ZSA9PiB2YWx1ZSBhcyBVSVZhbHVlLFxuICAgIGNvbXBvbmVudFRvUGx1Z2luU2V0dGluZ3NWYWx1ZUNvbnZlcnRlcjogKHZhbHVlKTogUHJvcGVydHlUeXBlID0+IHZhbHVlIGFzIFByb3BlcnR5VHlwZVxuICB9O1xuXG4gIGNvbnN0IG9wdGlvbnNFeHQ6IEJpbmRWYWx1ZUNvbXBvbmVudE9wdGlvbnNFeHRlbmRlZDxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZSwgUHJvcGVydHk+ID0geyAuLi5ERUZBVUxUX09QVElPTlMsIC4uLm9wdGlvbnMgfTtcbiAgY29uc3QgcGx1Z2luRXh0ID0gcGx1Z2luIGFzIHVua25vd24gYXMgUGx1Z2luQmFzZTxQbHVnaW5TZXR0aW5ncz47XG4gIGNvbnN0IHVpQ29tcG9uZW50RXh0ID0gdmFsdWVDb21wb25lbnQgYXMgVmFsdWVDb21wb25lbnQ8VUlWYWx1ZT47XG4gIGNvbnN0IHBsdWdpblNldHRpbmdzRm4gPSAoKTogUGx1Z2luU2V0dGluZ3MgPT4gb3B0aW9uc0V4dC5wbHVnaW5TZXR0aW5ncyA/PyBwbHVnaW5FeHQuc2V0dGluZ3NDb3B5O1xuICB1aUNvbXBvbmVudEV4dFxuICAgIC5zZXRWYWx1ZShvcHRpb25zRXh0LnBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcihwbHVnaW5TZXR0aW5nc0ZuKClbcHJvcGVydHldKSlcbiAgICAub25DaGFuZ2UoYXN5bmMgKHVpVmFsdWUpID0+IHtcbiAgICAgIGlmICghdmFsaWRhdGVDb21wb25lbnQodWlWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcGx1Z2luU2V0dGluZ3MgPSBwbHVnaW5TZXR0aW5nc0ZuKCk7XG4gICAgICBwbHVnaW5TZXR0aW5nc1twcm9wZXJ0eV0gPSBvcHRpb25zRXh0LmNvbXBvbmVudFRvUGx1Z2luU2V0dGluZ3NWYWx1ZUNvbnZlcnRlcih1aVZhbHVlKTtcbiAgICAgIGlmIChvcHRpb25zRXh0LmF1dG9TYXZlKSB7XG4gICAgICAgIGF3YWl0IHBsdWdpbkV4dC5zYXZlU2V0dGluZ3MocGx1Z2luU2V0dGluZ3MpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBvcHRpb25zRXh0Lm9uQ2hhbmdlZD8uKCk7XG4gICAgfSk7XG5cbiAgY29uc3QgdmFsaWRhdG9yRWxlbWVudCA9IGdldFZhbGlkYXRvckVsZW1lbnQodmFsdWVDb21wb25lbnQpO1xuICBpZiAodmFsaWRhdG9yRWxlbWVudCkge1xuICAgIHZhbGlkYXRvckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiB2YWxpZGF0ZUNvbXBvbmVudCgpKTtcbiAgICB2YWxpZGF0b3JFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB2YWxpZGF0ZUNvbXBvbmVudCgpKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZUNvbXBvbmVudDtcblxuICBmdW5jdGlvbiB2YWxpZGF0ZUNvbXBvbmVudCh1aVZhbHVlPzogVUlWYWx1ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghb3B0aW9uc0V4dC52YWx1ZVZhbGlkYXRvcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHVpVmFsdWUgPz89IHVpQ29tcG9uZW50RXh0LmdldFZhbHVlKCk7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gb3B0aW9uc0V4dC52YWx1ZVZhbGlkYXRvcih1aVZhbHVlKTtcbiAgICBjb25zdCB2YWxpZGF0b3JFbGVtZW50ID0gZ2V0VmFsaWRhdG9yRWxlbWVudCh2YWx1ZUNvbXBvbmVudCk7XG4gICAgaWYgKHZhbGlkYXRvckVsZW1lbnQpIHtcbiAgICAgIHZhbGlkYXRvckVsZW1lbnQuc2V0Q3VzdG9tVmFsaWRpdHkoZXJyb3JNZXNzYWdlID8/ICcnKTtcbiAgICAgIHZhbGlkYXRvckVsZW1lbnQucmVwb3J0VmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWVycm9yTWVzc2FnZTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgdGhlIHZhbGlkYXRvciBlbGVtZW50IGZyb20gYSB2YWx1ZSBjb21wb25lbnQgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB2YWx1ZUNvbXBvbmVudCAtIFRoZSB2YWx1ZSBjb21wb25lbnQgdG8gZ2V0IHRoZSB2YWxpZGF0b3IgZWxlbWVudCBmcm9tLlxuICogQHJldHVybnMgVGhlIHZhbGlkYXRvciBlbGVtZW50IGlmIGl0IGV4aXN0cywgb3IgYG51bGxgIGlmIGl0IGRvZXMgbm90LlxuICovXG5mdW5jdGlvbiBnZXRWYWxpZGF0b3JFbGVtZW50KHZhbHVlQ29tcG9uZW50OiBWYWx1ZUNvbXBvbmVudDx1bmtub3duPik6IFZhbGlkYXRvckVsZW1lbnQgfCBudWxsIHtcbiAgaWYgKHZhbHVlQ29tcG9uZW50IGluc3RhbmNlb2YgRHJvcGRvd25Db21wb25lbnQpIHtcbiAgICByZXR1cm4gdmFsdWVDb21wb25lbnQuc2VsZWN0RWw7XG4gIH1cblxuICBpZiAodmFsdWVDb21wb25lbnQgaW5zdGFuY2VvZiBTbGlkZXJDb21wb25lbnQpIHtcbiAgICByZXR1cm4gdmFsdWVDb21wb25lbnQuc2xpZGVyRWw7XG4gIH1cblxuICBpZiAodmFsdWVDb21wb25lbnQgaW5zdGFuY2VvZiBUZXh0QXJlYUNvbXBvbmVudCkge1xuICAgIHJldHVybiB2YWx1ZUNvbXBvbmVudC5pbnB1dEVsO1xuICB9XG5cbiAgaWYgKHZhbHVlQ29tcG9uZW50IGluc3RhbmNlb2YgVGV4dENvbXBvbmVudCkge1xuICAgIHJldHVybiB2YWx1ZUNvbXBvbmVudC5pbnB1dEVsO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHNCQUtPO0FBb0tBLFNBQVMsbUJBT2QsZ0JBQ0EsUUFDQSxVQUNBLFNBQ2lCO0FBRWpCLFFBQU0sa0JBQXdGO0FBQUEsSUFDNUYsVUFBVTtBQUFBLElBQ1YseUNBQXlDLENBQUMsVUFBbUI7QUFBQSxJQUM3RCx5Q0FBeUMsQ0FBQyxVQUF3QjtBQUFBLEVBQ3BFO0FBRUEsUUFBTSxhQUFtRixFQUFFLEdBQUcsaUJBQWlCLEdBQUcsUUFBUTtBQUMxSCxRQUFNLFlBQVk7QUFDbEIsUUFBTSxpQkFBaUI7QUFDdkIsUUFBTSxtQkFBbUIsTUFBc0IsV0FBVyxrQkFBa0IsVUFBVTtBQUN0RixpQkFDRyxTQUFTLFdBQVcsd0NBQXdDLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQ3pGLFNBQVMsT0FBTyxZQUFZO0FBQzNCLFFBQUksQ0FBQyxrQkFBa0IsT0FBTyxHQUFHO0FBQy9CO0FBQUEsSUFDRjtBQUNBLFVBQU0saUJBQWlCLGlCQUFpQjtBQUN4QyxtQkFBZSxRQUFRLElBQUksV0FBVyx3Q0FBd0MsT0FBTztBQUNyRixRQUFJLFdBQVcsVUFBVTtBQUN2QixZQUFNLFVBQVUsYUFBYSxjQUFjO0FBQUEsSUFDN0M7QUFFQSxVQUFNLFdBQVcsWUFBWTtBQUFBLEVBQy9CLENBQUM7QUFFSCxRQUFNLG1CQUFtQixvQkFBb0IsY0FBYztBQUMzRCxNQUFJLGtCQUFrQjtBQUNwQixxQkFBaUIsaUJBQWlCLFNBQVMsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRSxxQkFBaUIsaUJBQWlCLFFBQVEsTUFBTSxrQkFBa0IsQ0FBQztBQUFBLEVBQ3JFO0FBRUEsU0FBTztBQUVQLFdBQVMsa0JBQWtCLFNBQTRCO0FBQ3JELFFBQUksQ0FBQyxXQUFXLGdCQUFnQjtBQUM5QixhQUFPO0FBQUEsSUFDVDtBQUNBLGdCQUFZLGVBQWUsU0FBUztBQUNwQyxVQUFNLGVBQWUsV0FBVyxlQUFlLE9BQU87QUFDdEQsVUFBTUEsb0JBQW1CLG9CQUFvQixjQUFjO0FBQzNELFFBQUlBLG1CQUFrQjtBQUNwQixNQUFBQSxrQkFBaUIsa0JBQWtCLGdCQUFnQixFQUFFO0FBQ3JELE1BQUFBLGtCQUFpQixlQUFlO0FBQUEsSUFDbEM7QUFFQSxXQUFPLENBQUM7QUFBQSxFQUNWO0FBQ0Y7QUFRQSxTQUFTLG9CQUFvQixnQkFBa0U7QUFDN0YsTUFBSSwwQkFBMEIsbUNBQW1CO0FBQy9DLFdBQU8sZUFBZTtBQUFBLEVBQ3hCO0FBRUEsTUFBSSwwQkFBMEIsaUNBQWlCO0FBQzdDLFdBQU8sZUFBZTtBQUFBLEVBQ3hCO0FBRUEsTUFBSSwwQkFBMEIsbUNBQW1CO0FBQy9DLFdBQU8sZUFBZTtBQUFBLEVBQ3hCO0FBRUEsTUFBSSwwQkFBMEIsK0JBQWU7QUFDM0MsV0FBTyxlQUFlO0FBQUEsRUFDeEI7QUFFQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbInZhbGlkYXRvckVsZW1lbnQiXQp9Cg==
116
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1BsdWdpbi9WYWx1ZUNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHtcbiAgRHJvcGRvd25Db21wb25lbnQsXG4gIFNsaWRlckNvbXBvbmVudCxcbiAgVGV4dEFyZWFDb21wb25lbnQsXG4gIFRleHRDb21wb25lbnQsXG4gIFZhbHVlQ29tcG9uZW50XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBLZXlzTWF0Y2hpbmcgfSBmcm9tICcuLi8uLi9AdHlwZXMudHMnO1xuaW1wb3J0IHR5cGUgeyBNYXliZVByb21pc2UgfSBmcm9tICcuLi8uLi9Bc3luYy50cyc7XG5pbXBvcnQgdHlwZSB7IFZhbGlkYXRvckVsZW1lbnQgfSBmcm9tICcuLi8uLi9IVE1MRWxlbWVudC50cyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbkJhc2UgfSBmcm9tICcuL1BsdWdpbkJhc2UudHMnO1xuXG4vKipcbiAqIFZhbHVlQ29tcG9uZW50IHRoYXQgY2FuIGJlIHVzZWQgYXMgYW4gb3JpZ2luYWwgVmFsdWVDb21wb25lbnQgd2l0aCBleHRlbmRlZCBmdW5jdGlvbmFsaXR5LlxuICovXG50eXBlIFZhbHVlQ29tcG9uZW50RXhUeXBlPFVJVmFsdWUsIFRWYWx1ZUNvbXBvbmVudCBleHRlbmRzIFZhbHVlQ29tcG9uZW50V2l0aENoYW5nZVRyYWNraW5nPFVJVmFsdWU+PiA9IFRWYWx1ZUNvbXBvbmVudCAmIFZhbHVlQ29tcG9uZW50RXg8VUlWYWx1ZSwgVFZhbHVlQ29tcG9uZW50PjtcblxuLyoqXG4gKiBWYWx1ZUNvbXBvbmVudCB3aXRoIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkuXG4gKi9cbmNsYXNzIFZhbHVlQ29tcG9uZW50RXg8VUlWYWx1ZSwgVFZhbHVlQ29tcG9uZW50IGV4dGVuZHMgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmc8VUlWYWx1ZT4+IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgdmFsdWVDb21wb25lbnQ6IFRWYWx1ZUNvbXBvbmVudCkge1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIFZhbHVlQ29tcG9uZW50IHdpdGggZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eS5cbiAgICovXG4gIHB1YmxpYyBhc0V4dGVuZGVkKCk6IFZhbHVlQ29tcG9uZW50RXhUeXBlPFVJVmFsdWUsIFRWYWx1ZUNvbXBvbmVudD4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlc1xuICAgIHJldHVybiB7IC4uLnRoaXMudmFsdWVDb21wb25lbnQsIC4uLnRoaXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyB0aGUgVmFsdWVDb21wb25lbnQgdG8gYSBwcm9wZXJ0eSBpbiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFBsdWdpblNldHRpbmdzIC0gVGhlIHR5cGUgb2YgdGhlIHBsdWdpbiBzZXR0aW5ncyBvYmplY3QuXG4gICAqIEB0eXBlUGFyYW0gUHJvcGVydHkgLSBUaGUga2V5IG9mIHRoZSBwbHVnaW4gc2V0dGluZyB0aGF0IHRoZSBjb21wb25lbnQgaXMgYm91bmQgdG8uXG4gICAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luLlxuICAgKiBAcGFyYW0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IGluIGBQbHVnaW5TZXR0aW5nc2AgdG8gYmluZCB0byB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIGBWYWx1ZUNvbXBvbmVudGAgaW5zdGFuY2UgdGhhdCB3YXMgYm91bmQgdG8gdGhlIHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGJpbmQ8XG4gICAgUGx1Z2luU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3QsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnNcbiAgICBQcm9wZXJ0eSBleHRlbmRzIEtleXNNYXRjaGluZzxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZT5cbiAgPihcbiAgICBwbHVnaW46IFBsdWdpbkJhc2U8UGx1Z2luU2V0dGluZ3M+LFxuICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICBvcHRpb25zPzogQmluZFZhbHVlQ29tcG9uZW50T3B0aW9uczxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZT5cbiAgKTogVmFsdWVDb21wb25lbnRFeFR5cGU8VUlWYWx1ZSwgVFZhbHVlQ29tcG9uZW50PjtcblxuICAvKipcbiAgICogQmluZHMgdGhlIFZhbHVlQ29tcG9uZW50IHRvIGEgcHJvcGVydHkgaW4gdGhlIHBsdWdpbiBzZXR0aW5ncy5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBQbHVnaW4gLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHRoYXQgZXh0ZW5kcyBgUGx1Z2luQmFzZWAuXG4gICAqIEB0eXBlUGFyYW0gUHJvcGVydHkgLSBUaGUga2V5IG9mIHRoZSBwbHVnaW4gc2V0dGluZyB0aGF0IHRoZSBjb21wb25lbnQgaXMgYm91bmQgdG8uXG4gICAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzIG9iamVjdC5cbiAgICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4uXG4gICAqIEBwYXJhbSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgaW4gYFBsdWdpblNldHRpbmdzYCB0byBiaW5kIHRvIHRoZSBVSSBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgYFZhbHVlQ29tcG9uZW50YCBpbnN0YW5jZSB0aGF0IHdhcyBib3VuZCB0byB0aGUgcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgYmluZDxcbiAgICBQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdCxcbiAgICBQcm9wZXJ0eSBleHRlbmRzIGtleW9mIFBsdWdpblNldHRpbmdzXG4gID4oXG4gICAgcGx1Z2luOiBQbHVnaW5CYXNlPFBsdWdpblNldHRpbmdzPixcbiAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgb3B0aW9uczogQmluZFZhbHVlQ29tcG9uZW50T3B0aW9uc0V4dGVuZGVkPFBsdWdpblNldHRpbmdzLCBVSVZhbHVlLCBQcm9wZXJ0eT5cbiAgKTogVmFsdWVDb21wb25lbnRFeFR5cGU8VUlWYWx1ZSwgVFZhbHVlQ29tcG9uZW50PjtcblxuICAvKipcbiAgICogQmluZHMgdGhlIFZhbHVlQ29tcG9uZW50IHRvIGEgcHJvcGVydHkgaW4gdGhlIHBsdWdpbiBzZXR0aW5ncy5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBQbHVnaW4gLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHRoYXQgZXh0ZW5kcyBgUGx1Z2luQmFzZWAuXG4gICAqIEB0eXBlUGFyYW0gUHJvcGVydHkgLSBUaGUga2V5IG9mIHRoZSBwbHVnaW4gc2V0dGluZyB0aGF0IHRoZSBjb21wb25lbnQgaXMgYm91bmQgdG8uXG4gICAqIEB0eXBlUGFyYW0gUGx1Z2luU2V0dGluZ3MgLSBUaGUgdHlwZSBvZiB0aGUgcGx1Z2luIHNldHRpbmdzIG9iamVjdC5cbiAgICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4uXG4gICAqIEBwYXJhbSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgaW4gYFBsdWdpblNldHRpbmdzYCB0byBiaW5kIHRvIHRoZSBVSSBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgYFZhbHVlQ29tcG9uZW50YCBpbnN0YW5jZSB0aGF0IHdhcyBib3VuZCB0byB0aGUgcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgYmluZDxcbiAgICBQbHVnaW5TZXR0aW5ncyBleHRlbmRzIG9iamVjdCxcbiAgICBQcm9wZXJ0eSBleHRlbmRzIGtleW9mIFBsdWdpblNldHRpbmdzXG4gID4oXG4gICAgcGx1Z2luOiBQbHVnaW5CYXNlPFBsdWdpblNldHRpbmdzPixcbiAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgb3B0aW9ucz86IEJpbmRWYWx1ZUNvbXBvbmVudE9wdGlvbnM8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWU+XG4gICk6IFZhbHVlQ29tcG9uZW50RXhUeXBlPFVJVmFsdWUsIFRWYWx1ZUNvbXBvbmVudD4ge1xuICAgIHR5cGUgUHJvcGVydHlUeXBlID0gUGx1Z2luU2V0dGluZ3NbUHJvcGVydHldO1xuICAgIGNvbnN0IERFRkFVTFRfT1BUSU9OUzogQmluZFZhbHVlQ29tcG9uZW50T3B0aW9uc0V4dGVuZGVkPFBsdWdpblNldHRpbmdzLCBVSVZhbHVlLCBQcm9wZXJ0eT4gPSB7XG4gICAgICBhdXRvU2F2ZTogdHJ1ZSxcbiAgICAgIHBsdWdpblNldHRpbmdzVG9Db21wb25lbnRWYWx1ZUNvbnZlcnRlcjogKHZhbHVlKTogVUlWYWx1ZSA9PiB2YWx1ZSBhcyBVSVZhbHVlLFxuICAgICAgY29tcG9uZW50VG9QbHVnaW5TZXR0aW5nc1ZhbHVlQ29udmVydGVyOiAodmFsdWUpOiBQcm9wZXJ0eVR5cGUgPT4gdmFsdWUgYXMgUHJvcGVydHlUeXBlXG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvbnNFeHQ6IEJpbmRWYWx1ZUNvbXBvbmVudE9wdGlvbnNFeHRlbmRlZDxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZSwgUHJvcGVydHk+ID0geyAuLi5ERUZBVUxUX09QVElPTlMsIC4uLm9wdGlvbnMgfTtcbiAgICBjb25zdCBwbHVnaW5FeHQgPSBwbHVnaW4gYXMgdW5rbm93biBhcyBQbHVnaW5CYXNlPFBsdWdpblNldHRpbmdzPjtcbiAgICBjb25zdCBwbHVnaW5TZXR0aW5nc0ZuID0gKCk6IFBsdWdpblNldHRpbmdzID0+IG9wdGlvbnNFeHQucGx1Z2luU2V0dGluZ3MgPz8gcGx1Z2luRXh0LnNldHRpbmdzQ29weTtcbiAgICB0aGlzLnZhbHVlQ29tcG9uZW50XG4gICAgICAuc2V0VmFsdWUob3B0aW9uc0V4dC5wbHVnaW5TZXR0aW5nc1RvQ29tcG9uZW50VmFsdWVDb252ZXJ0ZXIocGx1Z2luU2V0dGluZ3NGbigpW3Byb3BlcnR5XSkpXG4gICAgICAub25DaGFuZ2UoYXN5bmMgKHVpVmFsdWUpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlKG9wdGlvbnNFeHQudmFsdWVWYWxpZGF0b3IsIHVpVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBsdWdpblNldHRpbmdzID0gcGx1Z2luU2V0dGluZ3NGbigpO1xuICAgICAgICBwbHVnaW5TZXR0aW5nc1twcm9wZXJ0eV0gPSBvcHRpb25zRXh0LmNvbXBvbmVudFRvUGx1Z2luU2V0dGluZ3NWYWx1ZUNvbnZlcnRlcih1aVZhbHVlKTtcbiAgICAgICAgaWYgKG9wdGlvbnNFeHQuYXV0b1NhdmUpIHtcbiAgICAgICAgICBhd2FpdCBwbHVnaW5FeHQuc2F2ZVNldHRpbmdzKHBsdWdpblNldHRpbmdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IG9wdGlvbnNFeHQub25DaGFuZ2VkPy4oKTtcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgdmFsaWRhdG9yRWxlbWVudCA9IGdldFZhbGlkYXRvckVsZW1lbnQodGhpcy52YWx1ZUNvbXBvbmVudCk7XG4gICAgaWYgKHZhbGlkYXRvckVsZW1lbnQpIHtcbiAgICAgIHZhbGlkYXRvckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiB0aGlzLnZhbGlkYXRlKG9wdGlvbnNFeHQudmFsdWVWYWxpZGF0b3IpKTtcbiAgICAgIHZhbGlkYXRvckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IHRoaXMudmFsaWRhdGUob3B0aW9uc0V4dC52YWx1ZVZhbGlkYXRvcikpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFzRXh0ZW5kZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGUodmFsdWVWYWxpZGF0b3I6ICgodWlWYWx1ZTogVUlWYWx1ZSkgPT4gc3RyaW5nIHwgbnVsbCkgfCB1bmRlZmluZWQsIHVpVmFsdWU/OiBVSVZhbHVlKTogYm9vbGVhbiB7XG4gICAgaWYgKCF2YWx1ZVZhbGlkYXRvcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHVpVmFsdWUgPz89IHRoaXMudmFsdWVDb21wb25lbnQuZ2V0VmFsdWUoKTtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB2YWx1ZVZhbGlkYXRvcih1aVZhbHVlKTtcbiAgICBjb25zdCB2YWxpZGF0b3JFbGVtZW50ID0gZ2V0VmFsaWRhdG9yRWxlbWVudCh0aGlzLnZhbHVlQ29tcG9uZW50KTtcbiAgICBpZiAodmFsaWRhdG9yRWxlbWVudCkge1xuICAgICAgdmFsaWRhdG9yRWxlbWVudC5zZXRDdXN0b21WYWxpZGl0eShlcnJvck1lc3NhZ2UgPz8gJycpO1xuICAgICAgdmFsaWRhdG9yRWxlbWVudC5yZXBvcnRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIHJldHVybiAhZXJyb3JNZXNzYWdlO1xuICB9XG59XG5cbi8qKlxuICogRXh0ZW5kcyBhIFZhbHVlQ29tcG9uZW50IHdpdGggYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIEB0eXBlUGFyYW0gVUlWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSB0aGUgY29tcG9uZW50IGRpc3BsYXlzLlxuICogQHR5cGVQYXJhbSBUVmFsdWVDb21wb25lbnQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgY29tcG9uZW50IGV4dGVuZGluZyBgVmFsdWVDb21wb25lbnRgLlxuICogQHBhcmFtIHZhbHVlQ29tcG9uZW50IC0gVGhlIHZhbHVlIGNvbXBvbmVudCB0byBleHRlbmQuXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgY29tcG9uZW50IHdpdGggZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZDxVSVZhbHVlLCBUVmFsdWVDb21wb25lbnQgZXh0ZW5kcyBWYWx1ZUNvbXBvbmVudFdpdGhDaGFuZ2VUcmFja2luZzxVSVZhbHVlPj4odmFsdWVDb21wb25lbnQ6IFRWYWx1ZUNvbXBvbmVudCAmIFZhbHVlQ29tcG9uZW50V2l0aENoYW5nZVRyYWNraW5nPFVJVmFsdWU+KTogVmFsdWVDb21wb25lbnRFeFR5cGU8VUlWYWx1ZSwgVFZhbHVlQ29tcG9uZW50PiB7XG4gIHJldHVybiBuZXcgVmFsdWVDb21wb25lbnRFeDxVSVZhbHVlLCBUVmFsdWVDb21wb25lbnQ+KHZhbHVlQ29tcG9uZW50KS5hc0V4dGVuZGVkKCk7XG59XG5cbi8qKlxuICogQSBWYWx1ZUNvbXBvbmVudCB0aGF0IGNhbiB0cmFjayBjaGFuZ2VzLlxuICovXG5pbnRlcmZhY2UgVmFsdWVDb21wb25lbnRXaXRoQ2hhbmdlVHJhY2tpbmc8VD4gZXh0ZW5kcyBWYWx1ZUNvbXBvbmVudDxUPiB7XG4gIC8qKlxuICAgKiBTZXRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBjb21wb25lbnQgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgY29tcG9uZW50IGNoYW5nZXMuXG4gICAqL1xuICBvbkNoYW5nZShjYWxsYmFjazogKG5ld1ZhbHVlOiBUKSA9PiBQcm9taXNlPHZvaWQ+KTogdGhpcztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBiaW5kaW5nIGEgdmFsdWUgY29tcG9uZW50IHRvIGEgcGx1Z2luIHNldHRpbmcuXG4gKi9cbmludGVyZmFjZSBCaW5kVmFsdWVDb21wb25lbnRPcHRpb25zPFBsdWdpblNldHRpbmdzLCBVSVZhbHVlPiB7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCBzYXZlcyB0aGUgcGx1Z2luIHNldHRpbmdzIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGNvbXBvbmVudCB2YWx1ZSBjaGFuZ2VzLiBEZWZhdWx0IGlzIGB0cnVlYC5cbiAgICovXG4gIGF1dG9TYXZlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBzZXR0aW5ncyBvYmplY3QgdG8gYmluZCB0aGUgY29tcG9uZW50IHRvLiBEZWZhdWx0IGlzIHRoZSBwbHVnaW4ncyBjdXJyZW50IHNldHRpbmdzLlxuICAgKi9cbiAgcGx1Z2luU2V0dGluZ3M/OiBQbHVnaW5TZXR0aW5ncztcblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBVSSB2YWx1ZSBiZWZvcmUgc2V0dGluZyBpdCBvbiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICAgKiBAcGFyYW0gdWlWYWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBBbiBlcnJvciBtZXNzYWdlIGlmIHRoZSB2YWx1ZSBpcyBpbnZhbGlkLCBvciBgbnVsbGAgaWYgaXQgaXMgdmFsaWQuXG4gICAqL1xuICB2YWx1ZVZhbGlkYXRvcj86ICh1aVZhbHVlOiBVSVZhbHVlKSA9PiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBjb21wb25lbnQgY2hhbmdlcy5cbiAgICovXG4gIG9uQ2hhbmdlZD86ICgpID0+IE1heWJlUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBFeHRlbmRlZCBvcHRpb25zIGZvciBiaW5kaW5nIGEgdmFsdWUgY29tcG9uZW50IHRvIGEgcGx1Z2luIHNldHRpbmcuXG4gKi9cbmludGVyZmFjZSBCaW5kVmFsdWVDb21wb25lbnRPcHRpb25zRXh0ZW5kZWQ8UGx1Z2luU2V0dGluZ3MsIFVJVmFsdWUsIFByb3BlcnR5IGV4dGVuZHMga2V5b2YgUGx1Z2luU2V0dGluZ3M+IGV4dGVuZHMgQmluZFZhbHVlQ29tcG9uZW50T3B0aW9uczxQbHVnaW5TZXR0aW5ncywgVUlWYWx1ZT4ge1xuICAvKipcbiAgICogQ29udmVydHMgdGhlIHBsdWdpbiBzZXR0aW5ncyB2YWx1ZSB0byB0aGUgdmFsdWUgdXNlZCBieSB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAcGFyYW0gcGx1Z2luU2V0dGluZ3NWYWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIHBsdWdpbiBzZXR0aW5ncy5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIHRvIHNldCBvbiB0aGUgVUkgY29tcG9uZW50LlxuICAgKi9cbiAgcGx1Z2luU2V0dGluZ3NUb0NvbXBvbmVudFZhbHVlQ29udmVydGVyOiAocGx1Z2luU2V0dGluZ3NWYWx1ZTogUGx1Z2luU2V0dGluZ3NbUHJvcGVydHldKSA9PiBVSVZhbHVlO1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgVUkgY29tcG9uZW50J3MgdmFsdWUgYmFjayB0byB0aGUgcGx1Z2luIHNldHRpbmdzIHZhbHVlLlxuICAgKiBAcGFyYW0gdWlWYWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgVUkgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgdG8gc2V0IG9uIHRoZSBwbHVnaW4gc2V0dGluZ3MuXG4gICAqL1xuICBjb21wb25lbnRUb1BsdWdpblNldHRpbmdzVmFsdWVDb252ZXJ0ZXI6ICh1aVZhbHVlOiBVSVZhbHVlKSA9PiBQbHVnaW5TZXR0aW5nc1tQcm9wZXJ0eV07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsaWRhdG9yIGVsZW1lbnQgZnJvbSBhIHZhbHVlIGNvbXBvbmVudCBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIHZhbHVlQ29tcG9uZW50IC0gVGhlIHZhbHVlIGNvbXBvbmVudCB0byBnZXQgdGhlIHZhbGlkYXRvciBlbGVtZW50IGZyb20uXG4gKiBAcmV0dXJucyBUaGUgdmFsaWRhdG9yIGVsZW1lbnQgaWYgaXQgZXhpc3RzLCBvciBgbnVsbGAgaWYgaXQgZG9lcyBub3QuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbGlkYXRvckVsZW1lbnQ8VUlWYWx1ZT4odmFsdWVDb21wb25lbnQ6IFZhbHVlQ29tcG9uZW50V2l0aENoYW5nZVRyYWNraW5nPFVJVmFsdWU+KTogVmFsaWRhdG9yRWxlbWVudCB8IG51bGwge1xuICBpZiAodmFsdWVDb21wb25lbnQgaW5zdGFuY2VvZiBEcm9wZG93bkNvbXBvbmVudCkge1xuICAgIHJldHVybiB2YWx1ZUNvbXBvbmVudC5zZWxlY3RFbDtcbiAgfVxuXG4gIGlmICh2YWx1ZUNvbXBvbmVudCBpbnN0YW5jZW9mIFNsaWRlckNvbXBvbmVudCkge1xuICAgIHJldHVybiB2YWx1ZUNvbXBvbmVudC5zbGlkZXJFbDtcbiAgfVxuXG4gIGlmICh2YWx1ZUNvbXBvbmVudCBpbnN0YW5jZW9mIFRleHRBcmVhQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIHZhbHVlQ29tcG9uZW50LmlucHV0RWw7XG4gIH1cblxuICBpZiAodmFsdWVDb21wb25lbnQgaW5zdGFuY2VvZiBUZXh0Q29tcG9uZW50KSB7XG4gICAgcmV0dXJuIHZhbHVlQ29tcG9uZW50LmlucHV0RWw7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsc0JBTU87QUFlUCxNQUFNLGlCQUE2RjtBQUFBLEVBQzFGLFlBQW9CLGdCQUFpQztBQUFqQztBQUFBLEVBQzNCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLTyxhQUE2RDtBQUVsRSxXQUFPLEVBQUUsR0FBRyxLQUFLLGdCQUFnQixHQUFHLEtBQUs7QUFBQSxFQUMzQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQXFETyxLQUlMLFFBQ0EsVUFDQSxTQUNnRDtBQUVoRCxVQUFNLGtCQUF3RjtBQUFBLE1BQzVGLFVBQVU7QUFBQSxNQUNWLHlDQUF5QyxDQUFDLFVBQW1CO0FBQUEsTUFDN0QseUNBQXlDLENBQUMsVUFBd0I7QUFBQSxJQUNwRTtBQUVBLFVBQU0sYUFBbUYsRUFBRSxHQUFHLGlCQUFpQixHQUFHLFFBQVE7QUFDMUgsVUFBTSxZQUFZO0FBQ2xCLFVBQU0sbUJBQW1CLE1BQXNCLFdBQVcsa0JBQWtCLFVBQVU7QUFDdEYsU0FBSyxlQUNGLFNBQVMsV0FBVyx3Q0FBd0MsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFDekYsU0FBUyxPQUFPLFlBQVk7QUFDM0IsVUFBSSxDQUFDLEtBQUssU0FBUyxXQUFXLGdCQUFnQixPQUFPLEdBQUc7QUFDdEQ7QUFBQSxNQUNGO0FBQ0EsWUFBTSxpQkFBaUIsaUJBQWlCO0FBQ3hDLHFCQUFlLFFBQVEsSUFBSSxXQUFXLHdDQUF3QyxPQUFPO0FBQ3JGLFVBQUksV0FBVyxVQUFVO0FBQ3ZCLGNBQU0sVUFBVSxhQUFhLGNBQWM7QUFBQSxNQUM3QztBQUVBLFlBQU0sV0FBVyxZQUFZO0FBQUEsSUFDL0IsQ0FBQztBQUVILFVBQU0sbUJBQW1CLG9CQUFvQixLQUFLLGNBQWM7QUFDaEUsUUFBSSxrQkFBa0I7QUFDcEIsdUJBQWlCLGlCQUFpQixTQUFTLE1BQU0sS0FBSyxTQUFTLFdBQVcsY0FBYyxDQUFDO0FBQ3pGLHVCQUFpQixpQkFBaUIsUUFBUSxNQUFNLEtBQUssU0FBUyxXQUFXLGNBQWMsQ0FBQztBQUFBLElBQzFGO0FBRUEsV0FBTyxLQUFLLFdBQVc7QUFBQSxFQUN6QjtBQUFBLEVBRVEsU0FBUyxnQkFBbUUsU0FBNEI7QUFDOUcsUUFBSSxDQUFDLGdCQUFnQjtBQUNuQixhQUFPO0FBQUEsSUFDVDtBQUNBLGdCQUFZLEtBQUssZUFBZSxTQUFTO0FBQ3pDLFVBQU0sZUFBZSxlQUFlLE9BQU87QUFDM0MsVUFBTSxtQkFBbUIsb0JBQW9CLEtBQUssY0FBYztBQUNoRSxRQUFJLGtCQUFrQjtBQUNwQix1QkFBaUIsa0JBQWtCLGdCQUFnQixFQUFFO0FBQ3JELHVCQUFpQixlQUFlO0FBQUEsSUFDbEM7QUFFQSxXQUFPLENBQUM7QUFBQSxFQUNWO0FBQ0Y7QUFVTyxTQUFTLE9BQW1GLGdCQUE2SDtBQUM5TixTQUFPLElBQUksaUJBQTJDLGNBQWMsRUFBRSxXQUFXO0FBQ25GO0FBa0VBLFNBQVMsb0JBQTZCLGdCQUFvRjtBQUN4SCxNQUFJLDBCQUEwQixtQ0FBbUI7QUFDL0MsV0FBTyxlQUFlO0FBQUEsRUFDeEI7QUFFQSxNQUFJLDBCQUEwQixpQ0FBaUI7QUFDN0MsV0FBTyxlQUFlO0FBQUEsRUFDeEI7QUFFQSxNQUFJLDBCQUEwQixtQ0FBbUI7QUFDL0MsV0FBTyxlQUFlO0FBQUEsRUFDeEI7QUFFQSxNQUFJLDBCQUEwQiwrQkFBZTtBQUMzQyxXQUFPLGVBQWU7QUFBQSxFQUN4QjtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -1,26 +1,65 @@
1
+ import { ValueComponent } from 'obsidian';
1
2
  import type { KeysMatching } from '../../@types.ts';
2
3
  import type { MaybePromise } from '../../Async.ts';
3
4
  import type { PluginBase } from './PluginBase.ts';
4
5
  /**
5
- * A ValueComponent that can be bound to a plugin setting.
6
+ * ValueComponent that can be used as an original ValueComponent with extended functionality.
6
7
  */
7
- interface ValueComponent<UIValue> {
8
+ type ValueComponentExType<UIValue, TValueComponent extends ValueComponentWithChangeTracking<UIValue>> = TValueComponent & ValueComponentEx<UIValue, TValueComponent>;
9
+ /**
10
+ * ValueComponent with extended functionality.
11
+ */
12
+ declare class ValueComponentEx<UIValue, TValueComponent extends ValueComponentWithChangeTracking<UIValue>> {
13
+ private valueComponent;
14
+ constructor(valueComponent: TValueComponent);
15
+ /**
16
+ * Returns the ValueComponent with extended functionality.
17
+ */
18
+ asExtended(): ValueComponentExType<UIValue, TValueComponent>;
8
19
  /**
9
- * Gets the value of the component.
20
+ * Binds the ValueComponent to a property in the plugin settings.
10
21
  *
11
- * @returns The value of the component.
22
+ * @typeParam PluginSettings - The type of the plugin settings object.
23
+ * @typeParam Property - The key of the plugin setting that the component is bound to.
24
+ * @param plugin - The plugin.
25
+ * @param property - The property key in `PluginSettings` to bind to the UI component.
26
+ * @param options - Configuration options.
27
+ * @returns The `ValueComponent` instance that was bound to the property.
12
28
  */
13
- getValue(): UIValue;
29
+ bind<PluginSettings extends object, Property extends KeysMatching<PluginSettings, UIValue>>(plugin: PluginBase<PluginSettings>, property: Property, options?: BindValueComponentOptions<PluginSettings, UIValue>): ValueComponentExType<UIValue, TValueComponent>;
14
30
  /**
15
- * Sets the value of the component.
16
- * @param value - The value to set on the component.
31
+ * Binds the ValueComponent to a property in the plugin settings.
32
+ *
33
+ * @typeParam Plugin - The type of the plugin that extends `PluginBase`.
34
+ * @typeParam Property - The key of the plugin setting that the component is bound to.
35
+ * @typeParam PluginSettings - The type of the plugin settings object.
36
+ * @param plugin - The plugin.
37
+ * @param property - The property key in `PluginSettings` to bind to the UI component.
38
+ * @param options - Configuration options.
39
+ * @returns The `ValueComponent` instance that was bound to the property.
17
40
  */
18
- setValue(value: UIValue): this;
41
+ bind<PluginSettings extends object, Property extends keyof PluginSettings>(plugin: PluginBase<PluginSettings>, property: Property, options: BindValueComponentOptionsExtended<PluginSettings, UIValue, Property>): ValueComponentExType<UIValue, TValueComponent>;
42
+ private validate;
43
+ }
44
+ /**
45
+ * Extends a ValueComponent with additional functionality.
46
+ *
47
+ * @typeParam UIValue - The type of the value the component displays.
48
+ * @typeParam TValueComponent - The type of the value component extending `ValueComponent`.
49
+ * @param valueComponent - The value component to extend.
50
+ * @returns The value component with extended functionality.
51
+ */
52
+ export declare function extend<UIValue, TValueComponent extends ValueComponentWithChangeTracking<UIValue>>(valueComponent: TValueComponent & ValueComponentWithChangeTracking<UIValue>): ValueComponentExType<UIValue, TValueComponent>;
53
+ /**
54
+ * A ValueComponent that can track changes.
55
+ */
56
+ interface ValueComponentWithChangeTracking<T> extends ValueComponent<T> {
19
57
  /**
20
58
  * Sets a callback function to be called when the value of the component changes.
59
+ *
21
60
  * @param callback - A callback function that is called when the value of the component changes.
22
61
  */
23
- onChange(callback: (newValue: UIValue) => Promise<void>): this;
62
+ onChange(callback: (newValue: T) => Promise<void>): this;
24
63
  }
25
64
  /**
26
65
  * Options for binding a value component to a plugin setting.
@@ -62,36 +101,4 @@ interface BindValueComponentOptionsExtended<PluginSettings, UIValue, Property ex
62
101
  */
63
102
  componentToPluginSettingsValueConverter: (uiValue: UIValue) => PluginSettings[Property];
64
103
  }
65
- /**
66
- * Binds a value component to a property in the plugin settings with optional automatic saving and value conversion.
67
- *
68
- * @typeParam Plugin - The type of the plugin that extends `PluginBase`.
69
- * @typeParam TValueComponent - The type of the value component extending `ValueComponent`.
70
- * @typeParam Property - The key of the plugin setting that the component is bound to.
71
- * @typeParam UIValue - The inferred type based on the UI component's type.
72
- * @typeParam PluginSettings - The inferred type of the plugin settings object.
73
- *
74
- * @param plugin - The plugin.
75
- * @param valueComponent - The component that will display and interact with the setting value.
76
- * @param property - The property key in `PluginSettings` to bind to the UI component.
77
- * @param options - Configuration options.
78
- * @returns The `ValueComponent` instance that was bound to the property.
79
- */
80
- export declare function bindValueComponent<Plugin extends PluginBase<object>, TValueComponent extends ValueComponent<unknown>, Property extends KeysMatching<PluginSettings, UIValue>, UIValue = TValueComponent extends ValueComponent<infer P> ? P : never, PluginSettings extends object = Plugin extends PluginBase<infer P> ? P : never>(valueComponent: TValueComponent, plugin: Plugin, property: Property, options?: BindValueComponentOptions<PluginSettings, UIValue>): TValueComponent;
81
- /**
82
- * Binds a value component to a property in the plugin settings with optional automatic saving and value conversion.
83
- *
84
- * @typeParam Plugin - The type of the plugin that extends `PluginBase`.
85
- * @typeParam TValueComponent - The type of the value component extending `ValueComponent`.
86
- * @typeParam Property - The key of the plugin setting that the component is bound to.
87
- * @typeParam UIValue - The inferred type based on the value component's type.
88
- * @typeParam PluginSettings - The inferred type of the plugin settings object.
89
- *
90
- * @param plugin - The plugin.
91
- * @param valueComponent - The component that will display and interact with the setting value.
92
- * @param property - The property key in `PluginSettings` to bind to the UI component.
93
- * @param options - Configuration options.
94
- * @returns The `ValueComponent` instance that was bound to the property.
95
- */
96
- export declare function bindValueComponent<Plugin extends PluginBase<object>, TValueComponent extends ValueComponent<unknown>, Property extends keyof PluginSettings, UIValue = TValueComponent extends ValueComponent<infer P> ? P : never, PluginSettings extends object = Plugin extends PluginBase<infer P> ? P : never>(valueComponent: TValueComponent, plugin: Plugin, property: Property, options: BindValueComponentOptionsExtended<PluginSettings, UIValue, Property>): TValueComponent;
97
104
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-dev-utils",
3
- "version": "4.2.0",
3
+ "version": "4.3.0",
4
4
  "description": "This is the collection of useful functions that you can use for your Obsidian plugin development",
5
5
  "main": "./dist/lib/index.cjs",
6
6
  "types": "./dist/lib/index.d.ts",