obsidian-dev-utils 32.0.1 → 32.0.2-beta.2

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 (44) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/lib/cjs/AbortController.cjs +70 -12
  3. package/dist/lib/cjs/AbortController.d.cts +39 -2
  4. package/dist/lib/cjs/Array.cjs +4 -3
  5. package/dist/lib/cjs/Async.cjs +187 -100
  6. package/dist/lib/cjs/Async.d.cts +71 -26
  7. package/dist/lib/cjs/Debug.cjs +20 -16
  8. package/dist/lib/cjs/Error.cjs +37 -4
  9. package/dist/lib/cjs/Error.d.cts +16 -3
  10. package/dist/lib/cjs/Library.cjs +1 -1
  11. package/dist/lib/cjs/ScriptUtils/version.cjs +4 -4
  12. package/dist/lib/cjs/String.cjs +2 -2
  13. package/dist/lib/cjs/ValueProvider.cjs +2 -2
  14. package/dist/lib/cjs/obsidian/FileChange.cjs +3 -3
  15. package/dist/lib/cjs/obsidian/Link.cjs +3 -3
  16. package/dist/lib/cjs/obsidian/Logger.cjs +21 -10
  17. package/dist/lib/cjs/obsidian/Loop.cjs +5 -6
  18. package/dist/lib/cjs/obsidian/MarkdownCodeBlockProcessor.cjs +2 -2
  19. package/dist/lib/cjs/obsidian/Plugin/PluginBase.cjs +16 -4
  20. package/dist/lib/cjs/obsidian/Plugin/PluginBase.d.cts +7 -0
  21. package/dist/lib/cjs/obsidian/Queue.cjs +9 -10
  22. package/dist/lib/cjs/obsidian/RenameDeleteHandler.cjs +3 -3
  23. package/dist/lib/esm/AbortController.d.mts +39 -2
  24. package/dist/lib/esm/AbortController.mjs +65 -11
  25. package/dist/lib/esm/Array.mjs +4 -3
  26. package/dist/lib/esm/Async.d.mts +71 -26
  27. package/dist/lib/esm/Async.mjs +184 -100
  28. package/dist/lib/esm/Debug.mjs +20 -16
  29. package/dist/lib/esm/Error.d.mts +16 -3
  30. package/dist/lib/esm/Error.mjs +35 -3
  31. package/dist/lib/esm/Library.mjs +1 -1
  32. package/dist/lib/esm/ScriptUtils/version.mjs +4 -4
  33. package/dist/lib/esm/String.mjs +2 -2
  34. package/dist/lib/esm/ValueProvider.mjs +2 -2
  35. package/dist/lib/esm/obsidian/FileChange.mjs +3 -3
  36. package/dist/lib/esm/obsidian/Link.mjs +3 -3
  37. package/dist/lib/esm/obsidian/Logger.mjs +21 -10
  38. package/dist/lib/esm/obsidian/Loop.mjs +9 -8
  39. package/dist/lib/esm/obsidian/MarkdownCodeBlockProcessor.mjs +2 -2
  40. package/dist/lib/esm/obsidian/Plugin/PluginBase.d.mts +7 -0
  41. package/dist/lib/esm/obsidian/Plugin/PluginBase.mjs +16 -4
  42. package/dist/lib/esm/obsidian/Queue.mjs +9 -10
  43. package/dist/lib/esm/obsidian/RenameDeleteHandler.mjs +3 -3
  44. package/package.json +1 -1
@@ -10,10 +10,6 @@ import type { Promisable } from 'type-fest';
10
10
  * @typeParam T - The type of the value.
11
11
  */
12
12
  export type PromiseResolve<T> = undefined extends T ? (value?: PromiseLike<T> | T) => void : (value: PromiseLike<T> | T) => void;
13
- /**
14
- * A constant representing an infinite timeout.
15
- */
16
- export declare const INFINITE_TIMEOUT: number;
17
13
  /**
18
14
  * Options for configuring the retry behavior.
19
15
  */
@@ -35,22 +31,14 @@ export interface RetryOptions {
35
31
  */
36
32
  timeoutInMilliseconds?: number;
37
33
  }
38
- /**
39
- * A marker interface to indicate that an error should terminate retry logic.
40
- */
41
- export interface TerminateRetry {
42
- /**
43
- * A marker property to indicate that an error should terminate retry logic.
44
- */
45
- __terminateRetry: true;
46
- }
47
34
  /**
48
35
  * Adds an error handler to a {@link Promise} that catches any errors and emits an async error event.
49
36
  *
50
37
  * @param asyncFn - The asynchronous function to add an error handler to.
38
+ * @param stackTrace - The stack trace of the source function.
51
39
  * @returns A {@link Promise} that resolves when the asynchronous function completes or emits async error event.
52
40
  */
53
- export declare function addErrorHandler(asyncFn: () => Promise<unknown>): Promise<void>;
41
+ export declare function addErrorHandler(asyncFn: () => Promise<unknown>, stackTrace?: string): Promise<void>;
54
42
  /**
55
43
  * Filters an array asynchronously, keeping only the elements that satisfy the provided predicate function.
56
44
  *
@@ -60,6 +48,15 @@ export declare function addErrorHandler(asyncFn: () => Promise<unknown>): Promis
60
48
  * @returns A {@link Promise} that resolves with an array of elements that satisfy the predicate function.
61
49
  */
62
50
  export declare function asyncFilter<T>(arr: T[], predicate: (value: T, index: number, array: T[]) => Promisable<boolean>): Promise<T[]>;
51
+ /**
52
+ * Filters an array asynchronously in place, keeping only the elements that satisfy the provided predicate function.
53
+ *
54
+ * @typeParam T - The type of elements in the input array.
55
+ * @param arr - The array to filter.
56
+ * @param predicate - The predicate function to test each element.
57
+ * @returns A {@link Promise} that resolves when the array is filtered.
58
+ */
59
+ export declare function asyncFilterInPlace<T>(arr: T[], predicate: (value: T, index: number, array: T[]) => Promisable<boolean>): Promise<void>;
63
60
  /**
64
61
  * Maps over an array asynchronously, applying the provided callback function to each element, and then flattens the results into a single array.
65
62
  *
@@ -85,9 +82,10 @@ export declare function asyncMap<T, U>(arr: T[], callback: (value: T, index: num
85
82
  *
86
83
  * @typeParam Args - The types of the arguments the function accepts.
87
84
  * @param asyncFunc - The asynchronous function to convert.
85
+ * @param stackTrace - The stack trace of the source function.
88
86
  * @returns A function that wraps the asynchronous function in a synchronous interface.
89
87
  */
90
- export declare function convertAsyncToSync<Args extends unknown[]>(asyncFunc: (...args: Args) => Promise<unknown>): (...args: Args) => void;
88
+ export declare function convertAsyncToSync<Args extends unknown[]>(asyncFunc: (...args: Args) => Promise<unknown>, stackTrace?: string): (...args: Args) => void;
91
89
  /**
92
90
  * Converts a synchronous function to an asynchronous one by wrapping it in a {@link Promise}.
93
91
  *
@@ -109,22 +107,58 @@ export declare function ignoreError(promise: Promise<unknown>, fallbackValue?: u
109
107
  * Invokes a {@link Promise} and safely handles any errors by catching them and emitting an async error event.
110
108
  *
111
109
  * @param asyncFn - The asynchronous function to invoke safely.
110
+ * @param stackTrace - The stack trace of the source function.
112
111
  */
113
- export declare function invokeAsyncSafely(asyncFn: () => Promise<unknown>): void;
112
+ export declare function invokeAsyncSafely(asyncFn: () => Promise<unknown>, stackTrace?: string): void;
114
113
  /**
115
114
  * Invokes an asynchronous function after a delay.
116
115
  *
117
116
  * @param asyncFn - The asynchronous function to invoke.
118
117
  * @param delayInMilliseconds - The delay in milliseconds.
118
+ * @param stackTrace - The stack trace of the source function.
119
+ * @param abortSignal - The abort signal to listen to.
120
+ */
121
+ export declare function invokeAsyncSafelyAfterDelay(asyncFn: (abortSignal: AbortSignal) => Promisable<void>, delayInMilliseconds?: number, stackTrace?: string, abortSignal?: AbortSignal): void;
122
+ /**
123
+ * Executes async functions sequentially.
124
+ *
125
+ * @typeParam T - The type of the value.
126
+ * @param asyncFns - The async functions to execute sequentially.
127
+ * @returns A {@link Promise} that resolves with an array of the results of the async functions.
119
128
  */
120
- export declare function invokeAsyncSafelyAfterDelay(asyncFn: () => Promisable<unknown>, delayInMilliseconds?: number): void;
129
+ export declare function promiseAllAsyncFnsSequentially<T>(asyncFns: (() => Promisable<T>)[]): Promise<T[]>;
130
+ /**
131
+ * Executes promises sequentially.
132
+ *
133
+ * @typeParam T - The type of the value.
134
+ * @param promises - The promises to execute sequentially.
135
+ * @returns A {@link Promise} that resolves with an array of the results of the promises.
136
+ */
137
+ export declare function promiseAllSequentially<T>(promises: Promisable<T>[]): Promise<T[]>;
121
138
  /**
122
139
  * Marks an error to terminate retry logic.
123
140
  *
124
141
  * @param error - The error to mark to terminate retry logic.
125
- * @returns An error that should terminate retry logic.
126
142
  */
127
- export declare function marksAsTerminateRetry<TError extends Error>(error: TError): TerminateRetry & TError;
143
+ export declare function marksAsTerminateRetry(error: Error): void;
144
+ /**
145
+ * An async function that never ends.
146
+ *
147
+ * @returns A {@link Promise} that never resolves.
148
+ */
149
+ export declare function neverEnds(): Promise<never>;
150
+ /**
151
+ * Gets the next tick.
152
+ *
153
+ * @returns A promise that resolves when the next tick is available.
154
+ */
155
+ export declare function nextTickAsync(): Promise<void>;
156
+ /**
157
+ * Gets the next queue microtask.
158
+ *
159
+ * @returns A promise that resolves when the next queue microtask is available.
160
+ */
161
+ export declare function queueMicrotaskAsync(): Promise<void>;
128
162
  /**
129
163
  * Gets the next request animation frame.
130
164
  *
@@ -149,30 +183,41 @@ export declare function retryWithTimeout(fn: (abortSignal: AbortSignal) => Promi
149
183
  * @param timeoutInMilliseconds - The maximum time to wait in milliseconds.
150
184
  * @param fn - The function to execute.
151
185
  * @param context - The context of the function.
186
+ * @param stackTrace - The stack trace of the source function.
152
187
  * @returns A {@link Promise} that resolves with the result of the asynchronous function or rejects if it times out.
153
188
  */
154
- export declare function runWithTimeout<R>(timeoutInMilliseconds: number, fn: (abortSignal: AbortSignal) => Promisable<R>, context?: unknown): Promise<R>;
189
+ export declare function runWithTimeout<R>(timeoutInMilliseconds: number, fn: (abortSignal: AbortSignal) => Promisable<R>, context?: unknown, stackTrace?: string): Promise<R>;
190
+ /**
191
+ * Gets the next set immediate.
192
+ *
193
+ * @returns A promise that resolves when the next set immediate is available.
194
+ */
195
+ export declare function setImmediateAsync(): Promise<void>;
155
196
  /**
156
197
  * Delays execution for a specified number of milliseconds.
157
198
  *
158
- * @param milliseconds - The time to wait in milliseconds.
199
+ * @param delay - The time to wait in milliseconds.
159
200
  * @returns A {@link Promise} that resolves after the specified delay.
160
201
  */
161
- export declare function sleep(milliseconds: number): Promise<void>;
202
+ export declare function setTimeoutAsync(delay?: number): Promise<void>;
162
203
  /**
163
- * Returns a {@link Promise} that rejects when the abort signal is aborted.
204
+ * Delays execution for a specified number of milliseconds.
164
205
  *
206
+ * @param milliseconds - The time to wait in milliseconds.
165
207
  * @param abortSignal - The abort signal to listen to.
166
- * @returns A {@link Promise} that rejects when the abort signal is aborted.
208
+ * @param shouldThrowOnAbort - Whether to throw an error if the abort signal is aborted.
209
+ * @returns A {@link Promise} that resolves after the specified delay.
167
210
  */
168
- export declare function throwOnAbort(abortSignal: AbortSignal): Promise<void>;
211
+ export declare function sleep(milliseconds: number, abortSignal?: AbortSignal, shouldThrowOnAbort?: boolean): Promise<void>;
169
212
  /**
170
213
  * Returns a {@link Promise} that rejects after the specified timeout period.
171
214
  *
172
215
  * @param timeoutInMilliseconds - The timeout period in milliseconds.
216
+ * @param abortSignal - The abort signal to listen to.
217
+ * @param shouldThrowOnAbort - Whether to throw an error if the abort signal is aborted.
173
218
  * @returns A {@link Promise} that always rejects with a timeout error.
174
219
  */
175
- export declare function timeout(timeoutInMilliseconds: number): Promise<never>;
220
+ export declare function timeout(timeoutInMilliseconds: number, abortSignal?: AbortSignal, shouldThrowOnAbort?: boolean): Promise<never>;
176
221
  /**
177
222
  * Converts an AsyncIterableIterator to an array by consuming all its elements.
178
223
  *
@@ -43,6 +43,7 @@ __export(Debug_exports, {
43
43
  });
44
44
  module.exports = __toCommonJS(Debug_exports);
45
45
  var import_debug = __toESM(__extractDefault(require('debug')), 1);
46
+ var import_Error = require('./Error.cjs');
46
47
  var import_Library = require('./Library.cjs');
47
48
  var import_App = require('./obsidian/App.cjs');
48
49
  var import_PluginId = require('./obsidian/Plugin/PluginId.cjs');
@@ -62,18 +63,18 @@ function getDebugController() {
62
63
  function getDebugger(namespace, framesToSkip = 0) {
63
64
  const key = `${namespace}:${String(framesToSkip)}`;
64
65
  const debuggersMap = (0, import_App.getObsidianDevUtilsState)(null, "debuggers", /* @__PURE__ */ new Map()).value;
65
- let _debugger = debuggersMap.get(key);
66
- if (!_debugger) {
67
- _debugger = getSharedDebugLibInstance()(namespace);
68
- _debugger.log = (message, ...args) => {
66
+ let debuggerEx = debuggersMap.get(key);
67
+ if (!debuggerEx) {
68
+ debuggerEx = getSharedDebugLibInstance()(namespace);
69
+ debuggerEx.log = (message, ...args) => {
69
70
  logWithCaller(namespace, framesToSkip, message, ...args);
70
71
  };
71
- _debugger.printStackTrace = (stackTrace, title) => {
72
+ debuggerEx.printStackTrace = (stackTrace, title) => {
72
73
  printStackTrace(namespace, stackTrace, title);
73
74
  };
74
- debuggersMap.set(key, _debugger);
75
+ debuggersMap.set(key, debuggerEx);
75
76
  }
76
- return _debugger;
77
+ return debuggerEx;
77
78
  }
78
79
  function getLibDebugger(namespace) {
79
80
  const pluginId = (0, import_PluginId.getPluginId)();
@@ -136,26 +137,29 @@ function logWithCaller(namespace, framesToSkip, message, ...args) {
136
137
  }
137
138
  const CALLER_LINE_INDEX = 4;
138
139
  const stackLines = new Error().stack?.split("\n") ?? [];
139
- const callerLine = stackLines[CALLER_LINE_INDEX + framesToSkip] ?? "";
140
+ stackLines.splice(0, CALLER_LINE_INDEX + framesToSkip);
140
141
  console.debug(message, ...args);
141
142
  if (isInObsidian()) {
142
- printStackTrace(namespace, callerLine, "Debug message caller");
143
+ printStackTrace(namespace, stackLines.join("\n"), "Debug message caller");
143
144
  }
144
145
  }
145
146
  function printStackTrace(namespace, stackTrace, title) {
146
- const _debugger = getSharedDebugLibInstance()(namespace);
147
- if (!_debugger.enabled) {
147
+ const internalDebugger = getSharedDebugLibInstance()(namespace);
148
+ if (!internalDebugger.enabled) {
148
149
  return;
149
150
  }
150
151
  if (!stackTrace) {
151
152
  stackTrace = "(unavailable)";
152
153
  }
153
- if (!(title ?? "")) {
154
+ if (!title) {
154
155
  title = "Caller stack trace";
155
156
  }
156
- _debugger(title);
157
- const prefix = isInObsidian() ? "StackTraceFakeError\n" : "";
158
- console.debug(`${prefix}${stackTrace}`);
157
+ internalDebugger(title);
158
+ if (!isInObsidian()) {
159
+ console.debug(stackTrace);
160
+ return;
161
+ }
162
+ console.debug(new import_Error.CustomStackTraceError("This is not an actual error. It's just a workaround to make stack trace links clickable", stackTrace, void 0));
159
163
  }
160
164
  function setNamespaces(namespaces) {
161
165
  getSharedDebugLibInstance().enable(toArray(namespaces).join(NAMESPACE_SEPARATOR));
@@ -171,4 +175,4 @@ function toArray(namespaces) {
171
175
  getLibDebugger,
172
176
  showInitialDebugMessage
173
177
  });
174
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL0RlYnVnLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBkZWJ1Z2dpbmcuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciB9IGZyb20gJ2RlYnVnJztcblxuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z0NvbnRyb2xsZXIgfSBmcm9tICcuL0RlYnVnQ29udHJvbGxlci50cyc7XG5cbmltcG9ydCB7IExJQlJBUllfTkFNRSB9IGZyb20gJy4vTGlicmFyeS50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuL29ic2lkaWFuL0FwcC50cyc7XG5pbXBvcnQge1xuICBnZXRQbHVnaW5JZCxcbiAgTk9fUExVR0lOX0lEX0lOSVRJQUxJWkVEXG59IGZyb20gJy4vb2JzaWRpYW4vUGx1Z2luL1BsdWdpbklkLnRzJztcblxuaW50ZXJmYWNlIERlYnVnZ2VyRXggZXh0ZW5kcyBEZWJ1Z2dlciB7XG4gIHByaW50U3RhY2tUcmFjZShzdGFja1RyYWNlOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nKTogdm9pZDtcbn1cblxuY29uc3QgTkFNRVNQQUNFX1NFUEFSQVRPUiA9ICcsJztcbmNvbnN0IE5FR0FURURfTkFNRVNQQUNFX1BSRUZJWCA9ICctJztcblxuLyoqXG4gKiBFbmFibGVzIHRoZSBkZWJ1Z2dlcnMgZm9yIHRoZSBgb2JzaWRpYW4tZGV2LXV0aWxzYCBsaWJyYXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlTGlicmFyeURlYnVnZ2VycygpOiB2b2lkIHtcbiAgZW5hYmxlTmFtZXNwYWNlcyhbTElCUkFSWV9OQU1FLCBgJHtMSUJSQVJZX05BTUV9OipgXSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGRlYnVnIGNvbnRyb2xsZXIuXG4gKlxuICogQHJldHVybnMgQSBkZWJ1ZyBjb250cm9sbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVidWdDb250cm9sbGVyKCk6IERlYnVnQ29udHJvbGxlciB7XG4gIHJldHVybiB7XG4gICAgZGlzYWJsZTogZGlzYWJsZU5hbWVzcGFjZXMsXG4gICAgZW5hYmxlOiBlbmFibGVOYW1lc3BhY2VzLFxuICAgIGdldDogZ2V0TmFtZXNwYWNlcyxcbiAgICBzZXQ6IHNldE5hbWVzcGFjZXNcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZGVidWdnZXIgaW5zdGFuY2Ugd2l0aCBhIGxvZyBmdW5jdGlvbiB0aGF0IGluY2x1ZGVzIHRoZSBjYWxsZXIncyBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIGZvciB0aGUgZGVidWdnZXIgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZnJhbWVzVG9Ta2lwIC0gVGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcCBpbiB0aGUgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIGRlYnVnZ2VyIGluc3RhbmNlIHdpdGggYSBsb2cgZnVuY3Rpb24gdGhhdCBpbmNsdWRlcyB0aGUgY2FsbGVyJ3MgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlYnVnZ2VyKG5hbWVzcGFjZTogc3RyaW5nLCBmcmFtZXNUb1NraXAgPSAwKTogRGVidWdnZXJFeCB7XG4gIGNvbnN0IGtleSA9IGAke25hbWVzcGFjZX06JHtTdHJpbmcoZnJhbWVzVG9Ta2lwKX1gO1xuICBjb25zdCBkZWJ1Z2dlcnNNYXAgPSBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUobnVsbCwgJ2RlYnVnZ2VycycsIG5ldyBNYXA8c3RyaW5nLCBEZWJ1Z2dlckV4PigpKS52YWx1ZTtcbiAgbGV0IF9kZWJ1Z2dlciA9IGRlYnVnZ2Vyc01hcC5nZXQoa2V5KTtcbiAgaWYgKCFfZGVidWdnZXIpIHtcbiAgICBfZGVidWdnZXIgPSBnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkobmFtZXNwYWNlKSBhcyBEZWJ1Z2dlckV4O1xuICAgIF9kZWJ1Z2dlci5sb2cgPSAobWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pOiB2b2lkID0+IHtcbiAgICAgIGxvZ1dpdGhDYWxsZXIobmFtZXNwYWNlLCBmcmFtZXNUb1NraXAsIG1lc3NhZ2UsIC4uLmFyZ3MpO1xuICAgIH07XG4gICAgX2RlYnVnZ2VyLnByaW50U3RhY2tUcmFjZSA9IChzdGFja1RyYWNlLCB0aXRsZSk6IHZvaWQgPT4ge1xuICAgICAgcHJpbnRTdGFja1RyYWNlKG5hbWVzcGFjZSwgc3RhY2tUcmFjZSwgdGl0bGUpO1xuICAgIH07XG5cbiAgICBkZWJ1Z2dlcnNNYXAuc2V0KGtleSwgX2RlYnVnZ2VyKTtcbiAgfVxuXG4gIHJldHVybiBfZGVidWdnZXI7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGRlYnVnZ2VyIGluc3RhbmNlIGZvciB0aGUgYG9ic2lkaWFuLWRldi11dGlsc2AgbGlicmFyeS5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIG5hbWVzcGFjZSBmb3IgdGhlIGRlYnVnZ2VyIGluc3RhbmNlLlxuICogQHJldHVybnMgQSBkZWJ1Z2dlciBpbnN0YW5jZSBmb3IgdGhlIGBvYnNpZGlhbi1kZXYtdXRpbHNgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaWJEZWJ1Z2dlcihuYW1lc3BhY2U6IHN0cmluZyk6IERlYnVnZ2VyRXgge1xuICBjb25zdCBwbHVnaW5JZCA9IGdldFBsdWdpbklkKCk7XG4gIGNvbnN0IHByZWZpeCA9IHBsdWdpbklkID09PSBOT19QTFVHSU5fSURfSU5JVElBTElaRUQgPyAnJyA6IGAke3BsdWdpbklkfTpgO1xuICByZXR1cm4gZ2V0RGVidWdnZXIoYCR7cHJlZml4fSR7TElCUkFSWV9OQU1FfToke25hbWVzcGFjZX1gKTtcbn1cblxuLyoqXG4gKiBTaG93cyBhbiBpbml0aWFsIGRlYnVnIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIHBsdWdpbklkIC0gVGhlIHBsdWdpbiBJRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dJbml0aWFsRGVidWdNZXNzYWdlKHBsdWdpbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgaXNFbmFibGVkID0gZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmVuYWJsZWQocGx1Z2luSWQpO1xuICBjb25zdCBzdGF0ZSA9IGlzRW5hYmxlZCA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCc7XG4gIGNvbnN0IGNoYW5nZUFjdGlvbiA9IGlzRW5hYmxlZCA/ICdkaXNhYmxlJyA6ICdlbmFibGUnO1xuICBjb25zdCBuYW1lc3BhY2VzID0gZ2V0TmFtZXNwYWNlcygpO1xuICBzZXROYW1lc3BhY2VzKHBsdWdpbklkKTtcbiAgZ2V0RGVidWdnZXIocGx1Z2luSWQpKFxuICAgIGBEZWJ1ZyBtZXNzYWdlcyBmb3IgcGx1Z2luICR7cGx1Z2luSWR9IGFyZSAke3N0YXRlfS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tbmFvdW1vdi9vYnNpZGlhbi1kZXYtdXRpbHMvYmxvYi9tYWluL2RvY3MvZGVidWdnaW5nLm1kIGhvdyB0byAke2NoYW5nZUFjdGlvbn0gdGhlbS5gXG4gICk7XG4gIHNldE5hbWVzcGFjZXMobmFtZXNwYWNlcyk7XG59XG5cbmZ1bmN0aW9uIGRpc2FibGVOYW1lc3BhY2VzKG5hbWVzcGFjZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IHNldCA9IG5ldyBTZXQoZ2V0TmFtZXNwYWNlcygpKTtcbiAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2YgdG9BcnJheShuYW1lc3BhY2VzKSkge1xuICAgIGlmIChuYW1lc3BhY2Uuc3RhcnRzV2l0aChORUdBVEVEX05BTUVTUEFDRV9QUkVGSVgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgbmVnYXRlZE5hbWVzcGFjZSA9IE5FR0FURURfTkFNRVNQQUNFX1BSRUZJWCArIG5hbWVzcGFjZTtcbiAgICBpZiAoc2V0LmhhcyhuYW1lc3BhY2UpKSB7XG4gICAgICBzZXQuZGVsZXRlKG5hbWVzcGFjZSk7XG4gICAgfVxuICAgIHNldC5hZGQobmVnYXRlZE5hbWVzcGFjZSk7XG4gIH1cbiAgc2V0TmFtZXNwYWNlcyhBcnJheS5mcm9tKHNldCkpO1xufVxuXG5mdW5jdGlvbiBlbmFibGVOYW1lc3BhY2VzKG5hbWVzcGFjZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IHNldCA9IG5ldyBTZXQoZ2V0TmFtZXNwYWNlcygpKTtcbiAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2YgdG9BcnJheShuYW1lc3BhY2VzKSkge1xuICAgIGlmICghbmFtZXNwYWNlLnN0YXJ0c1dpdGgoTkVHQVRFRF9OQU1FU1BBQ0VfUFJFRklYKSkge1xuICAgICAgY29uc3QgbmVnYXRlZE5hbWVzcGFjZSA9IE5FR0FURURfTkFNRVNQQUNFX1BSRUZJWCArIG5hbWVzcGFjZTtcbiAgICAgIGlmIChzZXQuaGFzKG5lZ2F0ZWROYW1lc3BhY2UpKSB7XG4gICAgICAgIHNldC5kZWxldGUobmVnYXRlZE5hbWVzcGFjZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHNldC5hZGQobmFtZXNwYWNlKTtcbiAgfVxuICBzZXROYW1lc3BhY2VzKEFycmF5LmZyb20oc2V0KSk7XG59XG5cbmZ1bmN0aW9uIGdldE5hbWVzcGFjZXMoKTogc3RyaW5nW10ge1xuICByZXR1cm4gdG9BcnJheShnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkubG9hZCgpID8/ICcnKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpOiB0eXBlb2YgZGVidWcge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZGVidWc7XG4gIH1cbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZShudWxsLCAnZGVidWcnLCBkZWJ1ZykudmFsdWU7XG59XG5cbmZ1bmN0aW9uIGlzSW5PYnNpZGlhbigpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xufVxuXG5mdW5jdGlvbiBsb2dXaXRoQ2FsbGVyKG5hbWVzcGFjZTogc3RyaW5nLCBmcmFtZXNUb1NraXA6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgaWYgKCFnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkuZW5hYmxlZChuYW1lc3BhY2UpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjYWxsZXIgbGluZSBpbmRleCBpcyA0IGJlY2F1c2UgdGhlIGNhbGwgc3RhY2sgaXMgYXMgZm9sbG93czpcbiAgICpcbiAgICogMDogRXJyb3JcbiAgICogMTogICAgIGF0IGxvZ1dpdGhDYWxsZXIgKD86Pzo/KVxuICAgKiAyOiAgICAgYXQgZGVidWdJbnN0YW5jZS5sb2cgKD86Pzo/KVxuICAgKiAzOiAgICAgYXQgZGVidWcgKD86Pzo/KVxuICAgKiA0OiAgICAgYXQgZnVuY3Rpb25OYW1lIChwYXRoL3RvL2NhbGxlci5qczo/Oj8pXG4gICAqL1xuICBjb25zdCBDQUxMRVJfTElORV9JTkRFWCA9IDQ7XG5cbiAgY29uc3Qgc3RhY2tMaW5lcyA9IG5ldyBFcnJvcigpLnN0YWNrPy5zcGxpdCgnXFxuJykgPz8gW107XG4gIGNvbnN0IGNhbGxlckxpbmUgPSBzdGFja0xpbmVzW0NBTExFUl9MSU5FX0lOREVYICsgZnJhbWVzVG9Ta2lwXSA/PyAnJztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgY29uc29sZS5kZWJ1ZyhtZXNzYWdlLCAuLi5hcmdzKTtcbiAgaWYgKGlzSW5PYnNpZGlhbigpKSB7XG4gICAgcHJpbnRTdGFja1RyYWNlKG5hbWVzcGFjZSwgY2FsbGVyTGluZSwgJ0RlYnVnIG1lc3NhZ2UgY2FsbGVyJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRTdGFja1RyYWNlKG5hbWVzcGFjZTogc3RyaW5nLCBzdGFja1RyYWNlOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IF9kZWJ1Z2dlciA9IGdldFNoYXJlZERlYnVnTGliSW5zdGFuY2UoKShuYW1lc3BhY2UpO1xuXG4gIGlmICghX2RlYnVnZ2VyLmVuYWJsZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXN0YWNrVHJhY2UpIHtcbiAgICBzdGFja1RyYWNlID0gJyh1bmF2YWlsYWJsZSknO1xuICB9XG4gIGlmICghKHRpdGxlID8/ICcnKSkge1xuICAgIHRpdGxlID0gJ0NhbGxlciBzdGFjayB0cmFjZSc7XG4gIH1cblxuICBfZGVidWdnZXIodGl0bGUpO1xuICBjb25zdCBwcmVmaXggPSBpc0luT2JzaWRpYW4oKSA/ICdTdGFja1RyYWNlRmFrZUVycm9yXFxuJyA6ICcnO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmRlYnVnKGAke3ByZWZpeH0ke3N0YWNrVHJhY2V9YCk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgbmFtZXNwYWNlcyB0byBlbmFibGUuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZXMgLSBUaGUgbmFtZXNwYWNlcyB0byBlbmFibGUuXG4gKi9cbmZ1bmN0aW9uIHNldE5hbWVzcGFjZXMobmFtZXNwYWNlczogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcbiAgZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmVuYWJsZSh0b0FycmF5KG5hbWVzcGFjZXMpLmpvaW4oTkFNRVNQQUNFX1NFUEFSQVRPUikpO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG5hbWVzcGFjZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gdHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcy5zcGxpdChOQU1FU1BBQ0VfU0VQQVJBVE9SKS5maWx0ZXIoQm9vbGVhbikgOiBuYW1lc3BhY2VzLmZsYXRNYXAodG9BcnJheSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLG1CQUFrQjtBQUlsQixxQkFBNkI7QUFDN0IsaUJBQXlDO0FBQ3pDLHNCQUdPO0FBTVAsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSwyQkFBMkI7QUFLMUIsU0FBUyx5QkFBK0I7QUFDN0MsbUJBQWlCLENBQUMsNkJBQWMsR0FBRywyQkFBWSxJQUFJLENBQUM7QUFDdEQ7QUFPTyxTQUFTLHFCQUFzQztBQUNwRCxTQUFPO0FBQUEsSUFDTCxTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsRUFDUDtBQUNGO0FBU08sU0FBUyxZQUFZLFdBQW1CLGVBQWUsR0FBZTtBQUMzRSxRQUFNLE1BQU0sR0FBRyxTQUFTLElBQUksT0FBTyxZQUFZLENBQUM7QUFDaEQsUUFBTSxtQkFBZSxxQ0FBeUIsTUFBTSxhQUFhLG9CQUFJLElBQXdCLENBQUMsRUFBRTtBQUNoRyxNQUFJLFlBQVksYUFBYSxJQUFJLEdBQUc7QUFDcEMsTUFBSSxDQUFDLFdBQVc7QUFDZCxnQkFBWSwwQkFBMEIsRUFBRSxTQUFTO0FBQ2pELGNBQVUsTUFBTSxDQUFDLFlBQW9CLFNBQTBCO0FBQzdELG9CQUFjLFdBQVcsY0FBYyxTQUFTLEdBQUcsSUFBSTtBQUFBLElBQ3pEO0FBQ0EsY0FBVSxrQkFBa0IsQ0FBQyxZQUFZLFVBQWdCO0FBQ3ZELHNCQUFnQixXQUFXLFlBQVksS0FBSztBQUFBLElBQzlDO0FBRUEsaUJBQWEsSUFBSSxLQUFLLFNBQVM7QUFBQSxFQUNqQztBQUVBLFNBQU87QUFDVDtBQVFPLFNBQVMsZUFBZSxXQUErQjtBQUM1RCxRQUFNLGVBQVcsNkJBQVk7QUFDN0IsUUFBTSxTQUFTLGFBQWEsMkNBQTJCLEtBQUssR0FBRyxRQUFRO0FBQ3ZFLFNBQU8sWUFBWSxHQUFHLE1BQU0sR0FBRywyQkFBWSxJQUFJLFNBQVMsRUFBRTtBQUM1RDtBQU9PLFNBQVMsd0JBQXdCLFVBQXdCO0FBQzlELFFBQU0sWUFBWSwwQkFBMEIsRUFBRSxRQUFRLFFBQVE7QUFDOUQsUUFBTSxRQUFRLFlBQVksWUFBWTtBQUN0QyxRQUFNLGVBQWUsWUFBWSxZQUFZO0FBQzdDLFFBQU0sYUFBYSxjQUFjO0FBQ2pDLGdCQUFjLFFBQVE7QUFDdEIsY0FBWSxRQUFRO0FBQUEsSUFDbEIsNkJBQTZCLFFBQVEsUUFBUSxLQUFLLDJGQUEyRixZQUFZO0FBQUEsRUFDM0o7QUFDQSxnQkFBYyxVQUFVO0FBQzFCO0FBRUEsU0FBUyxrQkFBa0IsWUFBcUM7QUFDOUQsUUFBTSxNQUFNLElBQUksSUFBSSxjQUFjLENBQUM7QUFDbkMsYUFBVyxhQUFhLFFBQVEsVUFBVSxHQUFHO0FBQzNDLFFBQUksVUFBVSxXQUFXLHdCQUF3QixHQUFHO0FBQ2xEO0FBQUEsSUFDRjtBQUNBLFVBQU0sbUJBQW1CLDJCQUEyQjtBQUNwRCxRQUFJLElBQUksSUFBSSxTQUFTLEdBQUc7QUFDdEIsVUFBSSxPQUFPLFNBQVM7QUFBQSxJQUN0QjtBQUNBLFFBQUksSUFBSSxnQkFBZ0I7QUFBQSxFQUMxQjtBQUNBLGdCQUFjLE1BQU0sS0FBSyxHQUFHLENBQUM7QUFDL0I7QUFFQSxTQUFTLGlCQUFpQixZQUFxQztBQUM3RCxRQUFNLE1BQU0sSUFBSSxJQUFJLGNBQWMsQ0FBQztBQUNuQyxhQUFXLGFBQWEsUUFBUSxVQUFVLEdBQUc7QUFDM0MsUUFBSSxDQUFDLFVBQVUsV0FBVyx3QkFBd0IsR0FBRztBQUNuRCxZQUFNLG1CQUFtQiwyQkFBMkI7QUFDcEQsVUFBSSxJQUFJLElBQUksZ0JBQWdCLEdBQUc7QUFDN0IsWUFBSSxPQUFPLGdCQUFnQjtBQUFBLE1BQzdCO0FBQUEsSUFDRjtBQUNBLFFBQUksSUFBSSxTQUFTO0FBQUEsRUFDbkI7QUFDQSxnQkFBYyxNQUFNLEtBQUssR0FBRyxDQUFDO0FBQy9CO0FBRUEsU0FBUyxnQkFBMEI7QUFDakMsU0FBTyxRQUFRLDBCQUEwQixFQUFFLEtBQUssS0FBSyxFQUFFO0FBQ3pEO0FBRUEsU0FBUyw0QkFBMEM7QUFDakQsTUFBSSxPQUFPLFdBQVcsYUFBYTtBQUNqQyxXQUFPLGFBQUFBO0FBQUEsRUFDVDtBQUNBLGFBQU8scUNBQXlCLE1BQU0sU0FBUyxhQUFBQSxPQUFLLEVBQUU7QUFDeEQ7QUFFQSxTQUFTLGVBQXdCO0FBQy9CLFNBQU8sT0FBTyxXQUFXO0FBQzNCO0FBRUEsU0FBUyxjQUFjLFdBQW1CLGNBQXNCLFlBQW9CLE1BQXVCO0FBQ3pHLE1BQUksQ0FBQywwQkFBMEIsRUFBRSxRQUFRLFNBQVMsR0FBRztBQUNuRDtBQUFBLEVBQ0Y7QUFXQSxRQUFNLG9CQUFvQjtBQUUxQixRQUFNLGFBQWEsSUFBSSxNQUFNLEVBQUUsT0FBTyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3RELFFBQU0sYUFBYSxXQUFXLG9CQUFvQixZQUFZLEtBQUs7QUFFbkUsVUFBUSxNQUFNLFNBQVMsR0FBRyxJQUFJO0FBQzlCLE1BQUksYUFBYSxHQUFHO0FBQ2xCLG9CQUFnQixXQUFXLFlBQVksc0JBQXNCO0FBQUEsRUFDL0Q7QUFDRjtBQUVBLFNBQVMsZ0JBQWdCLFdBQW1CLFlBQW9CLE9BQXNCO0FBQ3BGLFFBQU0sWUFBWSwwQkFBMEIsRUFBRSxTQUFTO0FBRXZELE1BQUksQ0FBQyxVQUFVLFNBQVM7QUFDdEI7QUFBQSxFQUNGO0FBRUEsTUFBSSxDQUFDLFlBQVk7QUFDZixpQkFBYTtBQUFBLEVBQ2Y7QUFDQSxNQUFJLEVBQUUsU0FBUyxLQUFLO0FBQ2xCLFlBQVE7QUFBQSxFQUNWO0FBRUEsWUFBVSxLQUFLO0FBQ2YsUUFBTSxTQUFTLGFBQWEsSUFBSSwwQkFBMEI7QUFFMUQsVUFBUSxNQUFNLEdBQUcsTUFBTSxHQUFHLFVBQVUsRUFBRTtBQUN4QztBQU9BLFNBQVMsY0FBYyxZQUFxQztBQUMxRCw0QkFBMEIsRUFBRSxPQUFPLFFBQVEsVUFBVSxFQUFFLEtBQUssbUJBQW1CLENBQUM7QUFDbEY7QUFFQSxTQUFTLFFBQVEsWUFBeUM7QUFDeEQsU0FBTyxPQUFPLGVBQWUsV0FBVyxXQUFXLE1BQU0sbUJBQW1CLEVBQUUsT0FBTyxPQUFPLElBQUksV0FBVyxRQUFRLE9BQU87QUFDNUg7IiwKICAibmFtZXMiOiBbImRlYnVnIl0KfQo=
178
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL0RlYnVnLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBkZWJ1Z2dpbmcuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z2dlciB9IGZyb20gJ2RlYnVnJztcblxuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcblxuaW1wb3J0IHR5cGUgeyBEZWJ1Z0NvbnRyb2xsZXIgfSBmcm9tICcuL0RlYnVnQ29udHJvbGxlci50cyc7XG5cbmltcG9ydCB7IEN1c3RvbVN0YWNrVHJhY2VFcnJvciB9IGZyb20gJy4vRXJyb3IudHMnO1xuaW1wb3J0IHsgTElCUkFSWV9OQU1FIH0gZnJvbSAnLi9MaWJyYXJ5LnRzJztcbmltcG9ydCB7IGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSB9IGZyb20gJy4vb2JzaWRpYW4vQXBwLnRzJztcbmltcG9ydCB7XG4gIGdldFBsdWdpbklkLFxuICBOT19QTFVHSU5fSURfSU5JVElBTElaRURcbn0gZnJvbSAnLi9vYnNpZGlhbi9QbHVnaW4vUGx1Z2luSWQudHMnO1xuXG5pbnRlcmZhY2UgRGVidWdnZXJFeCBleHRlbmRzIERlYnVnZ2VyIHtcbiAgcHJpbnRTdGFja1RyYWNlKHN0YWNrVHJhY2U6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiB2b2lkO1xufVxuXG5jb25zdCBOQU1FU1BBQ0VfU0VQQVJBVE9SID0gJywnO1xuY29uc3QgTkVHQVRFRF9OQU1FU1BBQ0VfUFJFRklYID0gJy0nO1xuXG4vKipcbiAqIEVuYWJsZXMgdGhlIGRlYnVnZ2VycyBmb3IgdGhlIGBvYnNpZGlhbi1kZXYtdXRpbHNgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVMaWJyYXJ5RGVidWdnZXJzKCk6IHZvaWQge1xuICBlbmFibGVOYW1lc3BhY2VzKFtMSUJSQVJZX05BTUUsIGAke0xJQlJBUllfTkFNRX06KmBdKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZGVidWcgY29udHJvbGxlci5cbiAqXG4gKiBAcmV0dXJucyBBIGRlYnVnIGNvbnRyb2xsZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWJ1Z0NvbnRyb2xsZXIoKTogRGVidWdDb250cm9sbGVyIHtcbiAgcmV0dXJuIHtcbiAgICBkaXNhYmxlOiBkaXNhYmxlTmFtZXNwYWNlcyxcbiAgICBlbmFibGU6IGVuYWJsZU5hbWVzcGFjZXMsXG4gICAgZ2V0OiBnZXROYW1lc3BhY2VzLFxuICAgIHNldDogc2V0TmFtZXNwYWNlc1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBkZWJ1Z2dlciBpbnN0YW5jZSB3aXRoIGEgbG9nIGZ1bmN0aW9uIHRoYXQgaW5jbHVkZXMgdGhlIGNhbGxlcidzIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2UgZm9yIHRoZSBkZWJ1Z2dlciBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmcmFtZXNUb1NraXAgLSBUaGUgbnVtYmVyIG9mIGZyYW1lcyB0byBza2lwIGluIHRoZSBzdGFjayB0cmFjZS5cbiAqIEByZXR1cm5zIEEgZGVidWdnZXIgaW5zdGFuY2Ugd2l0aCBhIGxvZyBmdW5jdGlvbiB0aGF0IGluY2x1ZGVzIHRoZSBjYWxsZXIncyBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVidWdnZXIobmFtZXNwYWNlOiBzdHJpbmcsIGZyYW1lc1RvU2tpcCA9IDApOiBEZWJ1Z2dlckV4IHtcbiAgY29uc3Qga2V5ID0gYCR7bmFtZXNwYWNlfToke1N0cmluZyhmcmFtZXNUb1NraXApfWA7XG4gIGNvbnN0IGRlYnVnZ2Vyc01hcCA9IGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZShudWxsLCAnZGVidWdnZXJzJywgbmV3IE1hcDxzdHJpbmcsIERlYnVnZ2VyRXg+KCkpLnZhbHVlO1xuICBsZXQgZGVidWdnZXJFeCA9IGRlYnVnZ2Vyc01hcC5nZXQoa2V5KTtcbiAgaWYgKCFkZWJ1Z2dlckV4KSB7XG4gICAgZGVidWdnZXJFeCA9IGdldFNoYXJlZERlYnVnTGliSW5zdGFuY2UoKShuYW1lc3BhY2UpIGFzIERlYnVnZ2VyRXg7XG4gICAgZGVidWdnZXJFeC5sb2cgPSAobWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pOiB2b2lkID0+IHtcbiAgICAgIGxvZ1dpdGhDYWxsZXIobmFtZXNwYWNlLCBmcmFtZXNUb1NraXAsIG1lc3NhZ2UsIC4uLmFyZ3MpO1xuICAgIH07XG4gICAgZGVidWdnZXJFeC5wcmludFN0YWNrVHJhY2UgPSAoc3RhY2tUcmFjZSwgdGl0bGUpOiB2b2lkID0+IHtcbiAgICAgIHByaW50U3RhY2tUcmFjZShuYW1lc3BhY2UsIHN0YWNrVHJhY2UsIHRpdGxlKTtcbiAgICB9O1xuXG4gICAgZGVidWdnZXJzTWFwLnNldChrZXksIGRlYnVnZ2VyRXgpO1xuICB9XG5cbiAgcmV0dXJuIGRlYnVnZ2VyRXg7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGRlYnVnZ2VyIGluc3RhbmNlIGZvciB0aGUgYG9ic2lkaWFuLWRldi11dGlsc2AgbGlicmFyeS5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIG5hbWVzcGFjZSBmb3IgdGhlIGRlYnVnZ2VyIGluc3RhbmNlLlxuICogQHJldHVybnMgQSBkZWJ1Z2dlciBpbnN0YW5jZSBmb3IgdGhlIGBvYnNpZGlhbi1kZXYtdXRpbHNgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaWJEZWJ1Z2dlcihuYW1lc3BhY2U6IHN0cmluZyk6IERlYnVnZ2VyRXgge1xuICBjb25zdCBwbHVnaW5JZCA9IGdldFBsdWdpbklkKCk7XG4gIGNvbnN0IHByZWZpeCA9IHBsdWdpbklkID09PSBOT19QTFVHSU5fSURfSU5JVElBTElaRUQgPyAnJyA6IGAke3BsdWdpbklkfTpgO1xuICByZXR1cm4gZ2V0RGVidWdnZXIoYCR7cHJlZml4fSR7TElCUkFSWV9OQU1FfToke25hbWVzcGFjZX1gKTtcbn1cblxuLyoqXG4gKiBTaG93cyBhbiBpbml0aWFsIGRlYnVnIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIHBsdWdpbklkIC0gVGhlIHBsdWdpbiBJRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dJbml0aWFsRGVidWdNZXNzYWdlKHBsdWdpbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgaXNFbmFibGVkID0gZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmVuYWJsZWQocGx1Z2luSWQpO1xuICBjb25zdCBzdGF0ZSA9IGlzRW5hYmxlZCA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCc7XG4gIGNvbnN0IGNoYW5nZUFjdGlvbiA9IGlzRW5hYmxlZCA/ICdkaXNhYmxlJyA6ICdlbmFibGUnO1xuICBjb25zdCBuYW1lc3BhY2VzID0gZ2V0TmFtZXNwYWNlcygpO1xuICBzZXROYW1lc3BhY2VzKHBsdWdpbklkKTtcbiAgZ2V0RGVidWdnZXIocGx1Z2luSWQpKFxuICAgIGBEZWJ1ZyBtZXNzYWdlcyBmb3IgcGx1Z2luICR7cGx1Z2luSWR9IGFyZSAke3N0YXRlfS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tbmFvdW1vdi9vYnNpZGlhbi1kZXYtdXRpbHMvYmxvYi9tYWluL2RvY3MvZGVidWdnaW5nLm1kIGhvdyB0byAke2NoYW5nZUFjdGlvbn0gdGhlbS5gXG4gICk7XG4gIHNldE5hbWVzcGFjZXMobmFtZXNwYWNlcyk7XG59XG5cbmZ1bmN0aW9uIGRpc2FibGVOYW1lc3BhY2VzKG5hbWVzcGFjZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IHNldCA9IG5ldyBTZXQoZ2V0TmFtZXNwYWNlcygpKTtcbiAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2YgdG9BcnJheShuYW1lc3BhY2VzKSkge1xuICAgIGlmIChuYW1lc3BhY2Uuc3RhcnRzV2l0aChORUdBVEVEX05BTUVTUEFDRV9QUkVGSVgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgbmVnYXRlZE5hbWVzcGFjZSA9IE5FR0FURURfTkFNRVNQQUNFX1BSRUZJWCArIG5hbWVzcGFjZTtcbiAgICBpZiAoc2V0LmhhcyhuYW1lc3BhY2UpKSB7XG4gICAgICBzZXQuZGVsZXRlKG5hbWVzcGFjZSk7XG4gICAgfVxuICAgIHNldC5hZGQobmVnYXRlZE5hbWVzcGFjZSk7XG4gIH1cbiAgc2V0TmFtZXNwYWNlcyhBcnJheS5mcm9tKHNldCkpO1xufVxuXG5mdW5jdGlvbiBlbmFibGVOYW1lc3BhY2VzKG5hbWVzcGFjZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IHNldCA9IG5ldyBTZXQoZ2V0TmFtZXNwYWNlcygpKTtcbiAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2YgdG9BcnJheShuYW1lc3BhY2VzKSkge1xuICAgIGlmICghbmFtZXNwYWNlLnN0YXJ0c1dpdGgoTkVHQVRFRF9OQU1FU1BBQ0VfUFJFRklYKSkge1xuICAgICAgY29uc3QgbmVnYXRlZE5hbWVzcGFjZSA9IE5FR0FURURfTkFNRVNQQUNFX1BSRUZJWCArIG5hbWVzcGFjZTtcbiAgICAgIGlmIChzZXQuaGFzKG5lZ2F0ZWROYW1lc3BhY2UpKSB7XG4gICAgICAgIHNldC5kZWxldGUobmVnYXRlZE5hbWVzcGFjZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHNldC5hZGQobmFtZXNwYWNlKTtcbiAgfVxuICBzZXROYW1lc3BhY2VzKEFycmF5LmZyb20oc2V0KSk7XG59XG5cbmZ1bmN0aW9uIGdldE5hbWVzcGFjZXMoKTogc3RyaW5nW10ge1xuICByZXR1cm4gdG9BcnJheShnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkubG9hZCgpID8/ICcnKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpOiB0eXBlb2YgZGVidWcge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZGVidWc7XG4gIH1cbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZShudWxsLCAnZGVidWcnLCBkZWJ1ZykudmFsdWU7XG59XG5cbmZ1bmN0aW9uIGlzSW5PYnNpZGlhbigpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xufVxuXG5mdW5jdGlvbiBsb2dXaXRoQ2FsbGVyKG5hbWVzcGFjZTogc3RyaW5nLCBmcmFtZXNUb1NraXA6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgaWYgKCFnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkuZW5hYmxlZChuYW1lc3BhY2UpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjYWxsZXIgbGluZSBpbmRleCBpcyA0IGJlY2F1c2UgdGhlIGNhbGwgc3RhY2sgaXMgYXMgZm9sbG93czpcbiAgICpcbiAgICogMDogRXJyb3JcbiAgICogMTogICAgIGF0IGxvZ1dpdGhDYWxsZXIgKD86Pzo/KVxuICAgKiAyOiAgICAgYXQgZGVidWdJbnN0YW5jZS5sb2cgKD86Pzo/KVxuICAgKiAzOiAgICAgYXQgZGVidWcgKD86Pzo/KVxuICAgKiA0OiAgICAgYXQgZnVuY3Rpb25OYW1lIChwYXRoL3RvL2NhbGxlci5qczo/Oj8pXG4gICAqL1xuICBjb25zdCBDQUxMRVJfTElORV9JTkRFWCA9IDQ7XG5cbiAgY29uc3Qgc3RhY2tMaW5lcyA9IG5ldyBFcnJvcigpLnN0YWNrPy5zcGxpdCgnXFxuJykgPz8gW107XG4gIHN0YWNrTGluZXMuc3BsaWNlKDAsIENBTExFUl9MSU5FX0lOREVYICsgZnJhbWVzVG9Ta2lwKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgY29uc29sZS5kZWJ1ZyhtZXNzYWdlLCAuLi5hcmdzKTtcbiAgaWYgKGlzSW5PYnNpZGlhbigpKSB7XG4gICAgcHJpbnRTdGFja1RyYWNlKG5hbWVzcGFjZSwgc3RhY2tMaW5lcy5qb2luKCdcXG4nKSwgJ0RlYnVnIG1lc3NhZ2UgY2FsbGVyJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRTdGFja1RyYWNlKG5hbWVzcGFjZTogc3RyaW5nLCBzdGFja1RyYWNlOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGludGVybmFsRGVidWdnZXIgPSBnZXRTaGFyZWREZWJ1Z0xpYkluc3RhbmNlKCkobmFtZXNwYWNlKTtcblxuICBpZiAoIWludGVybmFsRGVidWdnZXIuZW5hYmxlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghc3RhY2tUcmFjZSkge1xuICAgIHN0YWNrVHJhY2UgPSAnKHVuYXZhaWxhYmxlKSc7XG4gIH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItbnVsbGlzaC1jb2FsZXNjaW5nXG4gIGlmICghdGl0bGUpIHtcbiAgICB0aXRsZSA9ICdDYWxsZXIgc3RhY2sgdHJhY2UnO1xuICB9XG5cbiAgaW50ZXJuYWxEZWJ1Z2dlcih0aXRsZSk7XG5cbiAgaWYgKCFpc0luT2JzaWRpYW4oKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5kZWJ1ZyhzdGFja1RyYWNlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmRlYnVnKG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3IoJ1RoaXMgaXMgbm90IGFuIGFjdHVhbCBlcnJvci4gSXRcXCdzIGp1c3QgYSB3b3JrYXJvdW5kIHRvIG1ha2Ugc3RhY2sgdHJhY2UgbGlua3MgY2xpY2thYmxlJywgc3RhY2tUcmFjZSwgdW5kZWZpbmVkKSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgbmFtZXNwYWNlcyB0byBlbmFibGUuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZXMgLSBUaGUgbmFtZXNwYWNlcyB0byBlbmFibGUuXG4gKi9cbmZ1bmN0aW9uIHNldE5hbWVzcGFjZXMobmFtZXNwYWNlczogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcbiAgZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmVuYWJsZSh0b0FycmF5KG5hbWVzcGFjZXMpLmpvaW4oTkFNRVNQQUNFX1NFUEFSQVRPUikpO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG5hbWVzcGFjZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gdHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcy5zcGxpdChOQU1FU1BBQ0VfU0VQQVJBVE9SKS5maWx0ZXIoQm9vbGVhbikgOiBuYW1lc3BhY2VzLmZsYXRNYXAodG9BcnJheSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLG1CQUFrQjtBQUlsQixtQkFBc0M7QUFDdEMscUJBQTZCO0FBQzdCLGlCQUF5QztBQUN6QyxzQkFHTztBQU1QLE1BQU0sc0JBQXNCO0FBQzVCLE1BQU0sMkJBQTJCO0FBSzFCLFNBQVMseUJBQStCO0FBQzdDLG1CQUFpQixDQUFDLDZCQUFjLEdBQUcsMkJBQVksSUFBSSxDQUFDO0FBQ3REO0FBT08sU0FBUyxxQkFBc0M7QUFDcEQsU0FBTztBQUFBLElBQ0wsU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLEVBQ1A7QUFDRjtBQVNPLFNBQVMsWUFBWSxXQUFtQixlQUFlLEdBQWU7QUFDM0UsUUFBTSxNQUFNLEdBQUcsU0FBUyxJQUFJLE9BQU8sWUFBWSxDQUFDO0FBQ2hELFFBQU0sbUJBQWUscUNBQXlCLE1BQU0sYUFBYSxvQkFBSSxJQUF3QixDQUFDLEVBQUU7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
@@ -25,7 +25,8 @@ var __copyProps = (to, from, except, desc) => {
25
25
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
26
26
  var Error_exports = {};
27
27
  __export(Error_exports, {
28
- ASYNC_ERROR_WRAPPER_MESSAGE: () => ASYNC_ERROR_WRAPPER_MESSAGE,
28
+ ASYNC_WRAPPER_ERROR_MESSAGE: () => ASYNC_WRAPPER_ERROR_MESSAGE,
29
+ CustomStackTraceError: () => CustomStackTraceError,
29
30
  emitAsyncErrorEvent: () => emitAsyncErrorEvent,
30
31
  errorToString: () => errorToString,
31
32
  getStackTrace: () => getStackTrace,
@@ -37,9 +38,40 @@ module.exports = __toCommonJS(Error_exports);
37
38
  var import_AsyncEvents = require('./AsyncEvents.cjs');
38
39
  const ASYNC_ERROR_EVENT = "asyncError";
39
40
  const ERROR_STACK_PREFIX = "Error stack:\n";
40
- const ASYNC_ERROR_WRAPPER_MESSAGE = "An unhandled error occurred executing async operation";
41
41
  const asyncErrorEventEmitter = new import_AsyncEvents.AsyncEvents();
42
42
  asyncErrorEventEmitter.on(ASYNC_ERROR_EVENT, handleAsyncError);
43
+ const ASYNC_WRAPPER_ERROR_MESSAGE = "An unhandled error occurred executing async operation";
44
+ class CustomStackTraceError extends Error {
45
+ /**
46
+ * Creates a new CustomStackTraceError.
47
+ *
48
+ * @param message - The message of the error.
49
+ * @param stackTrace - The stack trace of the error.
50
+ * @param cause - The cause of the error.
51
+ */
52
+ constructor(message, stackTrace, cause) {
53
+ super(message, { cause });
54
+ this.name = "CustomStackTraceError";
55
+ Error.captureStackTrace(this, CustomStackTraceError);
56
+ let rootCause = cause;
57
+ const parentCauses = /* @__PURE__ */ new Set();
58
+ while (rootCause instanceof CustomStackTraceError) {
59
+ if (parentCauses.has(rootCause)) {
60
+ throw new Error("Circular cause detected");
61
+ }
62
+ parentCauses.add(rootCause);
63
+ rootCause = rootCause.cause;
64
+ }
65
+ const originalStackLines = (this.stack ?? "").split("\n");
66
+ const stackLines = stackTrace.split("\n");
67
+ const ERROR_HEADER_REG_EXP = /^\w*Error(?:: |$)/;
68
+ if (ERROR_HEADER_REG_EXP.test(stackLines[0] ?? "")) {
69
+ stackLines.splice(0, 1);
70
+ }
71
+ originalStackLines.splice(1, originalStackLines.length - 1, ...stackLines);
72
+ this.stack = originalStackLines.join("\n");
73
+ }
74
+ }
43
75
  function emitAsyncErrorEvent(asyncError) {
44
76
  asyncErrorEventEmitter.trigger(ASYNC_ERROR_EVENT, asyncError);
45
77
  }
@@ -105,7 +137,8 @@ function parseErrorEntries(error, level = 0, entries = []) {
105
137
  }
106
138
  // Annotate the CommonJS export names for ESM import in node:
107
139
  0 && (module.exports = {
108
- ASYNC_ERROR_WRAPPER_MESSAGE,
140
+ ASYNC_WRAPPER_ERROR_MESSAGE,
141
+ CustomStackTraceError,
109
142
  emitAsyncErrorEvent,
110
143
  errorToString,
111
144
  getStackTrace,
@@ -113,4 +146,4 @@ function parseErrorEntries(error, level = 0, entries = []) {
113
146
  registerAsyncErrorEventHandler,
114
147
  throwExpression
115
148
  });
116
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL0Vycm9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBlcnJvciBoYW5kbGluZy5cbiAqL1xuXG5pbXBvcnQgeyBBc3luY0V2ZW50cyB9IGZyb20gJy4vQXN5bmNFdmVudHMudHMnO1xuXG5jb25zdCBBU1lOQ19FUlJPUl9FVkVOVCA9ICdhc3luY0Vycm9yJztcblxuY29uc3QgRVJST1JfU1RBQ0tfUFJFRklYID0gJ0Vycm9yIHN0YWNrOlxcbic7XG5cbi8qKlxuICogVGhlIG1lc3NhZ2Ugb2YgdGhlIGVycm9yIHdyYXBwZXIgdGhhdCBpcyB1c2VkIHRvIHdyYXAgYW4gYWN0dWFsIGVycm9yIHRoYXQgb2NjdXJyZWQgZHVyaW5nIGFuIGFzeW5jIG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEFTWU5DX0VSUk9SX1dSQVBQRVJfTUVTU0FHRSA9ICdBbiB1bmhhbmRsZWQgZXJyb3Igb2NjdXJyZWQgZXhlY3V0aW5nIGFzeW5jIG9wZXJhdGlvbic7XG5cbmNvbnN0IGFzeW5jRXJyb3JFdmVudEVtaXR0ZXIgPSBuZXcgQXN5bmNFdmVudHMoKTtcbmFzeW5jRXJyb3JFdmVudEVtaXR0ZXIub24oQVNZTkNfRVJST1JfRVZFTlQsIGhhbmRsZUFzeW5jRXJyb3IpO1xuXG5pbnRlcmZhY2UgRXJyb3JFbnRyeSB7XG4gIGxldmVsOiBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2hvdWxkQ2xlYXJBbnNpU2VxdWVuY2U/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEVtaXRzIGFuIGFzeW5jaHJvbm91cyBlcnJvciBldmVudC5cbiAqXG4gKiBAcGFyYW0gYXN5bmNFcnJvciAtIFRoZSBlcnJvciB0byBlbWl0IGFzIGFuIGFzeW5jaHJvbm91cyBlcnJvciBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtaXRBc3luY0Vycm9yRXZlbnQoYXN5bmNFcnJvcjogdW5rbm93bik6IHZvaWQge1xuICBhc3luY0Vycm9yRXZlbnRFbWl0dGVyLnRyaWdnZXIoQVNZTkNfRVJST1JfRVZFTlQsIGFzeW5jRXJyb3IpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGVycm9yIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLCBpbmNsdWRpbmcgbmVzdGVkIGNhdXNlcyB3aXRoIGluZGVudGF0aW9uLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBjb252ZXJ0IHRvIGEgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcnJvclRvU3RyaW5nKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhcnNlRXJyb3JFbnRyaWVzKGVycm9yKVxuICAgIC5tYXAoKGVudHJ5KSA9PiAnICAnLnJlcGVhdChlbnRyeS5sZXZlbCkgKyAoZW50cnkubWVzc2FnZS5zdGFydHNXaXRoKEVSUk9SX1NUQUNLX1BSRUZJWCkgPyBlbnRyeS5tZXNzYWdlLnNsaWNlKEVSUk9SX1NUQUNLX1BSRUZJWC5sZW5ndGgpIDogZW50cnkubWVzc2FnZSkpXG4gICAgLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGN1cnJlbnQgc3RhY2sgdHJhY2UgYXMgYSBzdHJpbmcsIGV4Y2x1ZGluZyB0aGUgY3VycmVudCBmdW5jdGlvbiBjYWxsLlxuICpcbiAqIEBwYXJhbSBmcmFtZXNUb1NraXAgLSBUaGUgbnVtYmVyIG9mIGZyYW1lcyB0byBza2lwIGluIHRoZSBzdGFjayB0cmFjZS5cbiAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHN0YWNrIHRyYWNlLCBleGNsdWRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb24gY2FsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YWNrVHJhY2UoZnJhbWVzVG9Ta2lwID0gMCk6IHN0cmluZyB7XG4gIC8vIFNraXBwaW5nIEVycm9yIHByZWZpeCBhbmQgYGdldFN0YWNrVHJhY2VgIGZ1bmN0aW9uIGNhbGxcbiAgY29uc3QgQURESVRJT05BTF9GUkFNRVNfVE9fU0tJUCA9IDI7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2sgPz8gJyc7XG4gIGNvbnN0IGxpbmVzID0gc3RhY2suc3BsaXQoJ1xcbicpO1xuICByZXR1cm4gbGluZXMuc2xpY2UoZnJhbWVzVG9Ta2lwICsgQURESVRJT05BTF9GUkFNRVNfVE9fU0tJUCkuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogUHJpbnRzIGFuIGVycm9yIHRvIHRoZSBjb25zb2xlLCBpbmNsdWRpbmcgbmVzdGVkIGNhdXNlcyBhbmQgb3B0aW9uYWwgQU5TSSBzZXF1ZW5jZSBjbGVhcmluZy5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gcHJpbnQuXG4gKiBAcGFyYW0gY29uc29sZSAtIFRoZSBjb25zb2xlIHRvIHByaW50IHRvIChkZWZhdWx0OiBgZ2xvYmFsVGhpcy5jb25zb2xlYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludEVycm9yKGVycm9yOiB1bmtub3duLCBjb25zb2xlPzogQ29uc29sZSk6IHZvaWQge1xuICBjb25zb2xlID8/PSBnbG9iYWxUaGlzLmNvbnNvbGU7XG4gIGNvbnN0IGVudHJpZXMgPSBwYXJzZUVycm9yRW50cmllcyhlcnJvcik7XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgaWYgKGVudHJ5LnNob3VsZENsZWFyQW5zaVNlcXVlbmNlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBcXHgxYlswbSR7ZW50cnkubWVzc2FnZX1cXHgxYlswbWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVudHJ5Lm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBoYW5kbGVyIGZvciBhc3luY2hyb25vdXMgZXJyb3JzLlxuICpcbiAqIEBwYXJhbSBoYW5kbGVyIC0gVGhlIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50IG9jY3Vycy5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdG8gdW5yZWdpc3RlciB0aGUgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQXN5bmNFcnJvckV2ZW50SGFuZGxlcihoYW5kbGVyOiAoYXN5bmNFcnJvcjogdW5rbm93bikgPT4gdm9pZCk6ICgpID0+IHZvaWQge1xuICBjb25zdCBldmVudFJlZiA9IGFzeW5jRXJyb3JFdmVudEVtaXR0ZXIub24oQVNZTkNfRVJST1JfRVZFTlQsIGhhbmRsZXIpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGFzeW5jRXJyb3JFdmVudEVtaXR0ZXIub2ZmcmVmKGV2ZW50UmVmKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYW4gZXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIHRocm93LlxuICogQHRocm93c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dFeHByZXNzaW9uKGVycm9yOiB1bmtub3duKTogbmV2ZXIge1xuICB0aHJvdyBlcnJvcjtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGFzeW5jaHJvbm91cyBlcnJvcnMgYnkgcHJpbnRpbmcgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXN5bmNFcnJvciAtIFRoZSBhc3luY2hyb25vdXMgZXJyb3IgdG8gaGFuZGxlLlxuICovXG5mdW5jdGlvbiBoYW5kbGVBc3luY0Vycm9yKGFzeW5jRXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgcHJpbnRFcnJvcihhc3luY0Vycm9yKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYW4gZXJyb3IgaW50byBhbiBhcnJheSBvZiBFcnJvckVudHJ5IG9iamVjdHMsIGluY2x1ZGluZyBuZXN0ZWQgY2F1c2VzLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBwYXJzZS5cbiAqIEBwYXJhbSBsZXZlbCAtIFRoZSBjdXJyZW50IGluZGVudGF0aW9uIGxldmVsIGZvciBuZXN0ZWQgY2F1c2VzLlxuICogQHBhcmFtIGVudHJpZXMgLSBUaGUgYXJyYXkgb2YgRXJyb3JFbnRyeSBvYmplY3RzIHRvIHBvcHVsYXRlLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgRXJyb3JFbnRyeSBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgZXJyb3IgYW5kIGl0cyBjYXVzZXMuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRXJyb3JFbnRyaWVzKGVycm9yOiB1bmtub3duLCBsZXZlbCA9IDAsIGVudHJpZXM6IEVycm9yRW50cnlbXSA9IFtdKTogRXJyb3JFbnRyeVtdIHtcbiAgaWYgKGVycm9yID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZW50cmllcztcbiAgfVxuXG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgbGV0IHN0cjogc3RyaW5nO1xuXG4gICAgaWYgKGVycm9yID09PSBudWxsKSB7XG4gICAgICBzdHIgPSAnKG51bGwpJztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHN0ciA9IGVycm9yO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBKU09OLnN0cmluZ2lmeShlcnJvcikgPz8gJ3VuZGVmaW5lZCc7XG4gICAgfVxuXG4gICAgZW50cmllcy5wdXNoKHsgbGV2ZWwsIG1lc3NhZ2U6IHN0ciB9KTtcbiAgICByZXR1cm4gZW50cmllcztcbiAgfVxuXG4gIGNvbnN0IHRpdGxlID0gYCR7ZXJyb3IubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gO1xuICBlbnRyaWVzLnB1c2goeyBsZXZlbCwgbWVzc2FnZTogdGl0bGUsIHNob3VsZENsZWFyQW5zaVNlcXVlbmNlOiB0cnVlIH0pO1xuXG4gIGlmIChlcnJvci5zdGFjaykge1xuICAgIGNvbnN0IHJlc3RTdGFjayA9IGVycm9yLnN0YWNrLnN0YXJ0c1dpdGgodGl0bGUpID8gZXJyb3Iuc3RhY2suc2xpY2UodGl0bGUubGVuZ3RoICsgMSkgOiBlcnJvci5zdGFjaztcbiAgICBlbnRyaWVzLnB1c2goeyBsZXZlbCwgbWVzc2FnZTogYCR7RVJST1JfU1RBQ0tfUFJFRklYfSR7cmVzdFN0YWNrfWAgfSk7XG4gIH1cblxuICBpZiAoZXJyb3IuY2F1c2UgIT09IHVuZGVmaW5lZCkge1xuICAgIGVudHJpZXMucHVzaCh7IGxldmVsLCBtZXNzYWdlOiAnQ2F1c2VkIGJ5OicgfSk7XG4gICAgcGFyc2VFcnJvckVudHJpZXMoZXJyb3IuY2F1c2UsIGxldmVsICsgMSwgZW50cmllcyk7XG4gIH1cblxuICByZXR1cm4gZW50cmllcztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEseUJBQTRCO0FBRTVCLE1BQU0sb0JBQW9CO0FBRTFCLE1BQU0scUJBQXFCO0FBS3BCLE1BQU0sOEJBQThCO0FBRTNDLE1BQU0seUJBQXlCLElBQUksK0JBQVk7QUFDL0MsdUJBQXVCLEdBQUcsbUJBQW1CLGdCQUFnQjtBQWF0RCxTQUFTLG9CQUFvQixZQUEyQjtBQUM3RCx5QkFBdUIsUUFBUSxtQkFBbUIsVUFBVTtBQUM5RDtBQVFPLFNBQVMsY0FBYyxPQUF3QjtBQUNwRCxTQUFPLGtCQUFrQixLQUFLLEVBQzNCLElBQUksQ0FBQyxVQUFVLEtBQUssT0FBTyxNQUFNLEtBQUssS0FBSyxNQUFNLFFBQVEsV0FBVyxrQkFBa0IsSUFBSSxNQUFNLFFBQVEsTUFBTSxtQkFBbUIsTUFBTSxJQUFJLE1BQU0sUUFBUSxFQUN6SixLQUFLLElBQUk7QUFDZDtBQVFPLFNBQVMsY0FBYyxlQUFlLEdBQVc7QUFFdEQsUUFBTSw0QkFBNEI7QUFDbEMsUUFBTSxRQUFRLElBQUksTUFBTSxFQUFFLFNBQVM7QUFDbkMsUUFBTSxRQUFRLE1BQU0sTUFBTSxJQUFJO0FBQzlCLFNBQU8sTUFBTSxNQUFNLGVBQWUseUJBQXlCLEVBQUUsS0FBSyxJQUFJO0FBQ3hFO0FBUU8sU0FBUyxXQUFXLE9BQWdCLFNBQXlCO0FBQ2xFLGNBQVksV0FBVztBQUN2QixRQUFNLFVBQVUsa0JBQWtCLEtBQUs7QUFFdkMsYUFBVyxTQUFTLFNBQVM7QUFDM0IsUUFBSSxNQUFNLHlCQUF5QjtBQUNqQyxjQUFRLE1BQU0sVUFBVSxNQUFNLE9BQU8sU0FBUztBQUFBLElBQ2hELE9BQU87QUFDTCxjQUFRLE1BQU0sTUFBTSxPQUFPO0FBQUEsSUFDN0I7QUFBQSxFQUNGO0FBQ0Y7QUFRTyxTQUFTLCtCQUErQixTQUFvRDtBQUNqRyxRQUFNLFdBQVcsdUJBQXVCLEdBQUcsbUJBQW1CLE9BQU87QUFDckUsU0FBTyxNQUFNO0FBQ1gsMkJBQXVCLE9BQU8sUUFBUTtBQUFBLEVBQ3hDO0FBQ0Y7QUFRTyxTQUFTLGdCQUFnQixPQUF1QjtBQUNyRCxRQUFNO0FBQ1I7QUFPQSxTQUFTLGlCQUFpQixZQUEyQjtBQUNuRCxhQUFXLFVBQVU7QUFDdkI7QUFVQSxTQUFTLGtCQUFrQixPQUFnQixRQUFRLEdBQUcsVUFBd0IsQ0FBQyxHQUFpQjtBQUM5RixNQUFJLFVBQVUsUUFBVztBQUN2QixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksRUFBRSxpQkFBaUIsUUFBUTtBQUM3QixRQUFJO0FBRUosUUFBSSxVQUFVLE1BQU07QUFDbEIsWUFBTTtBQUFBLElBQ1IsV0FBVyxPQUFPLFVBQVUsVUFBVTtBQUNwQyxZQUFNO0FBQUEsSUFDUixPQUFPO0FBQ0wsWUFBTSxLQUFLLFVBQVUsS0FBSyxLQUFLO0FBQUEsSUFDakM7QUFFQSxZQUFRLEtBQUssRUFBRSxPQUFPLFNBQVMsSUFBSSxDQUFDO0FBQ3BDLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLEtBQUssTUFBTSxPQUFPO0FBQzdDLFVBQVEsS0FBSyxFQUFFLE9BQU8sU0FBUyxPQUFPLHlCQUF5QixLQUFLLENBQUM7QUFFckUsTUFBSSxNQUFNLE9BQU87QUFDZixVQUFNLFlBQVksTUFBTSxNQUFNLFdBQVcsS0FBSyxJQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sU0FBUyxDQUFDLElBQUksTUFBTTtBQUM5RixZQUFRLEtBQUssRUFBRSxPQUFPLFNBQVMsR0FBRyxrQkFBa0IsR0FBRyxTQUFTLEdBQUcsQ0FBQztBQUFBLEVBQ3RFO0FBRUEsTUFBSSxNQUFNLFVBQVUsUUFBVztBQUM3QixZQUFRLEtBQUssRUFBRSxPQUFPLFNBQVMsYUFBYSxDQUFDO0FBQzdDLHNCQUFrQixNQUFNLE9BQU8sUUFBUSxHQUFHLE9BQU87QUFBQSxFQUNuRDtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
149
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL0Vycm9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBlcnJvciBoYW5kbGluZy5cbiAqL1xuXG5pbXBvcnQgeyBBc3luY0V2ZW50cyB9IGZyb20gJy4vQXN5bmNFdmVudHMudHMnO1xuXG5jb25zdCBBU1lOQ19FUlJPUl9FVkVOVCA9ICdhc3luY0Vycm9yJztcblxuY29uc3QgRVJST1JfU1RBQ0tfUFJFRklYID0gJ0Vycm9yIHN0YWNrOlxcbic7XG5cbmNvbnN0IGFzeW5jRXJyb3JFdmVudEVtaXR0ZXIgPSBuZXcgQXN5bmNFdmVudHMoKTtcbmFzeW5jRXJyb3JFdmVudEVtaXR0ZXIub24oQVNZTkNfRVJST1JfRVZFTlQsIGhhbmRsZUFzeW5jRXJyb3IpO1xuXG5pbnRlcmZhY2UgRXJyb3JFbnRyeSB7XG4gIGxldmVsOiBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2hvdWxkQ2xlYXJBbnNpU2VxdWVuY2U/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBtZXNzYWdlIG9mIHRoZSBBc3luY1dyYXBwZXJFcnJvci5cbiAqL1xuZXhwb3J0IGNvbnN0IEFTWU5DX1dSQVBQRVJfRVJST1JfTUVTU0FHRSA9ICdBbiB1bmhhbmRsZWQgZXJyb3Igb2NjdXJyZWQgZXhlY3V0aW5nIGFzeW5jIG9wZXJhdGlvbic7XG5cbi8qKlxuICogQW4gZXJyb3IgdGhhdCB3cmFwcyBhbiBlcnJvciB3aXRoIGEgY3VzdG9tIHN0YWNrIHRyYWNlLlxuICovXG5leHBvcnQgY2xhc3MgQ3VzdG9tU3RhY2tUcmFjZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2Ugb2YgdGhlIGVycm9yLlxuICAgKiBAcGFyYW0gc3RhY2tUcmFjZSAtIFRoZSBzdGFjayB0cmFjZSBvZiB0aGUgZXJyb3IuXG4gICAqIEBwYXJhbSBjYXVzZSAtIFRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBzdGFja1RyYWNlOiBzdHJpbmcsIGNhdXNlOiB1bmtub3duKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgeyBjYXVzZSB9KTtcbiAgICB0aGlzLm5hbWUgPSAnQ3VzdG9tU3RhY2tUcmFjZUVycm9yJztcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBDdXN0b21TdGFja1RyYWNlRXJyb3IpO1xuXG4gICAgbGV0IHJvb3RDYXVzZSA9IGNhdXNlO1xuICAgIGNvbnN0IHBhcmVudENhdXNlcyA9IG5ldyBTZXQ8Q3VzdG9tU3RhY2tUcmFjZUVycm9yPigpO1xuICAgIHdoaWxlIChyb290Q2F1c2UgaW5zdGFuY2VvZiBDdXN0b21TdGFja1RyYWNlRXJyb3IpIHtcbiAgICAgIGlmIChwYXJlbnRDYXVzZXMuaGFzKHJvb3RDYXVzZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaXJjdWxhciBjYXVzZSBkZXRlY3RlZCcpO1xuICAgICAgfVxuICAgICAgcGFyZW50Q2F1c2VzLmFkZChyb290Q2F1c2UpO1xuICAgICAgcm9vdENhdXNlID0gcm9vdENhdXNlLmNhdXNlO1xuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbmFsU3RhY2tMaW5lcyA9ICh0aGlzLnN0YWNrID8/ICcnKS5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3Qgc3RhY2tMaW5lcyA9IHN0YWNrVHJhY2Uuc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IEVSUk9SX0hFQURFUl9SRUdfRVhQID0gL15cXHcqRXJyb3IoPzo6IHwkKS87XG4gICAgaWYgKEVSUk9SX0hFQURFUl9SRUdfRVhQLnRlc3Qoc3RhY2tMaW5lc1swXSA/PyAnJykpIHtcbiAgICAgIHN0YWNrTGluZXMuc3BsaWNlKDAsIDEpO1xuICAgIH1cbiAgICBvcmlnaW5hbFN0YWNrTGluZXMuc3BsaWNlKDEsIG9yaWdpbmFsU3RhY2tMaW5lcy5sZW5ndGggLSAxLCAuLi5zdGFja0xpbmVzKTtcbiAgICB0aGlzLnN0YWNrID0gb3JpZ2luYWxTdGFja0xpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG59XG5cbi8qKlxuICogRW1pdHMgYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBhc3luY0Vycm9yIC0gVGhlIGVycm9yIHRvIGVtaXQgYXMgYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdEFzeW5jRXJyb3JFdmVudChhc3luY0Vycm9yOiB1bmtub3duKTogdm9pZCB7XG4gIGFzeW5jRXJyb3JFdmVudEVtaXR0ZXIudHJpZ2dlcihBU1lOQ19FUlJPUl9FVkVOVCwgYXN5bmNFcnJvcik7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gZXJyb3IgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGluY2x1ZGluZyBuZXN0ZWQgY2F1c2VzIHdpdGggaW5kZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIGNvbnZlcnQgdG8gYSBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yVG9TdHJpbmcoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gcGFyc2VFcnJvckVudHJpZXMoZXJyb3IpXG4gICAgLm1hcCgoZW50cnkpID0+ICcgICcucmVwZWF0KGVudHJ5LmxldmVsKSArIChlbnRyeS5tZXNzYWdlLnN0YXJ0c1dpdGgoRVJST1JfU1RBQ0tfUFJFRklYKSA/IGVudHJ5Lm1lc3NhZ2Uuc2xpY2UoRVJST1JfU1RBQ0tfUFJFRklYLmxlbmd0aCkgOiBlbnRyeS5tZXNzYWdlKSlcbiAgICAuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY3VycmVudCBzdGFjayB0cmFjZSBhcyBhIHN0cmluZywgZXhjbHVkaW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwuXG4gKlxuICogQHBhcmFtIGZyYW1lc1RvU2tpcCAtIFRoZSBudW1iZXIgb2YgZnJhbWVzIHRvIHNraXAgaW4gdGhlIHN0YWNrIHRyYWNlLlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgc3RhY2sgdHJhY2UsIGV4Y2x1ZGluZyB0aGUgY3VycmVudCBmdW5jdGlvbiBjYWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhY2tUcmFjZShmcmFtZXNUb1NraXAgPSAwKTogc3RyaW5nIHtcbiAgLy8gU2tpcHBpbmcgRXJyb3IgcHJlZml4IGFuZCBgZ2V0U3RhY2tUcmFjZWAgZnVuY3Rpb24gY2FsbFxuICBjb25zdCBBRERJVElPTkFMX0ZSQU1FU19UT19TS0lQID0gMjtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjayA/PyAnJztcbiAgY29uc3QgbGluZXMgPSBzdGFjay5zcGxpdCgnXFxuJyk7XG4gIHJldHVybiBsaW5lcy5zbGljZShmcmFtZXNUb1NraXAgKyBBRERJVElPTkFMX0ZSQU1FU19UT19TS0lQKS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBQcmludHMgYW4gZXJyb3IgdG8gdGhlIGNvbnNvbGUsIGluY2x1ZGluZyBuZXN0ZWQgY2F1c2VzIGFuZCBvcHRpb25hbCBBTlNJIHNlcXVlbmNlIGNsZWFyaW5nLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBwcmludC5cbiAqIEBwYXJhbSBjb25zb2xlIC0gVGhlIGNvbnNvbGUgdG8gcHJpbnQgdG8gKGRlZmF1bHQ6IGBnbG9iYWxUaGlzLmNvbnNvbGVgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW50RXJyb3IoZXJyb3I6IHVua25vd24sIGNvbnNvbGU/OiBDb25zb2xlKTogdm9pZCB7XG4gIGNvbnNvbGUgPz89IGdsb2JhbFRoaXMuY29uc29sZTtcbiAgY29uc3QgZW50cmllcyA9IHBhcnNlRXJyb3JFbnRyaWVzKGVycm9yKTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBpZiAoZW50cnkuc2hvdWxkQ2xlYXJBbnNpU2VxdWVuY2UpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFxceDFiWzBtJHtlbnRyeS5tZXNzYWdlfVxceDFiWzBtYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZW50cnkubWVzc2FnZSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGFuIGV2ZW50IGhhbmRsZXIgZm9yIGFzeW5jaHJvbm91cyBlcnJvcnMuXG4gKlxuICogQHBhcmFtIGhhbmRsZXIgLSBUaGUgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhbiBhc3luY2hyb25vdXMgZXJyb3IgZXZlbnQgb2NjdXJzLlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0byB1bnJlZ2lzdGVyIHRoZSBoYW5kbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJBc3luY0Vycm9yRXZlbnRIYW5kbGVyKGhhbmRsZXI6IChhc3luY0Vycm9yOiB1bmtub3duKSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IGV2ZW50UmVmID0gYXN5bmNFcnJvckV2ZW50RW1pdHRlci5vbihBU1lOQ19FUlJPUl9FVkVOVCwgaGFuZGxlcik7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgYXN5bmNFcnJvckV2ZW50RW1pdHRlci5vZmZyZWYoZXZlbnRSZWYpO1xuICB9O1xufVxuXG4vKipcbiAqIFRocm93cyBhbiBlcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gdGhyb3cuXG4gKiBAdGhyb3dzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0V4cHJlc3Npb24oZXJyb3I6IHVua25vd24pOiBuZXZlciB7XG4gIHRocm93IGVycm9yO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgYXN5bmNocm9ub3VzIGVycm9ycyBieSBwcmludGluZyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhc3luY0Vycm9yIC0gVGhlIGFzeW5jaHJvbm91cyBlcnJvciB0byBoYW5kbGUuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUFzeW5jRXJyb3IoYXN5bmNFcnJvcjogdW5rbm93bik6IHZvaWQge1xuICBwcmludEVycm9yKGFzeW5jRXJyb3IpO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhbiBlcnJvciBpbnRvIGFuIGFycmF5IG9mIEVycm9yRW50cnkgb2JqZWN0cywgaW5jbHVkaW5nIG5lc3RlZCBjYXVzZXMuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIHBhcnNlLlxuICogQHBhcmFtIGxldmVsIC0gVGhlIGN1cnJlbnQgaW5kZW50YXRpb24gbGV2ZWwgZm9yIG5lc3RlZCBjYXVzZXMuXG4gKiBAcGFyYW0gZW50cmllcyAtIFRoZSBhcnJheSBvZiBFcnJvckVudHJ5IG9iamVjdHMgdG8gcG9wdWxhdGUuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBFcnJvckVudHJ5IG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBlcnJvciBhbmQgaXRzIGNhdXNlcy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VFcnJvckVudHJpZXMoZXJyb3I6IHVua25vd24sIGxldmVsID0gMCwgZW50cmllczogRXJyb3JFbnRyeVtdID0gW10pOiBFcnJvckVudHJ5W10ge1xuICBpZiAoZXJyb3IgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBlbnRyaWVzO1xuICB9XG5cbiAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICBsZXQgc3RyOiBzdHJpbmc7XG5cbiAgICBpZiAoZXJyb3IgPT09IG51bGwpIHtcbiAgICAgIHN0ciA9ICcobnVsbCknO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgc3RyID0gZXJyb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IEpTT04uc3RyaW5naWZ5KGVycm9yKSA/PyAndW5kZWZpbmVkJztcbiAgICB9XG5cbiAgICBlbnRyaWVzLnB1c2goeyBsZXZlbCwgbWVzc2FnZTogc3RyIH0pO1xuICAgIHJldHVybiBlbnRyaWVzO1xuICB9XG5cbiAgY29uc3QgdGl0bGUgPSBgJHtlcnJvci5uYW1lfTogJHtlcnJvci5tZXNzYWdlfWA7XG4gIGVudHJpZXMucHVzaCh7IGxldmVsLCBtZXNzYWdlOiB0aXRsZSwgc2hvdWxkQ2xlYXJBbnNpU2VxdWVuY2U6IHRydWUgfSk7XG5cbiAgaWYgKGVycm9yLnN0YWNrKSB7XG4gICAgY29uc3QgcmVzdFN0YWNrID0gZXJyb3Iuc3RhY2suc3RhcnRzV2l0aCh0aXRsZSkgPyBlcnJvci5zdGFjay5zbGljZSh0aXRsZS5sZW5ndGggKyAxKSA6IGVycm9yLnN0YWNrO1xuICAgIGVudHJpZXMucHVzaCh7IGxldmVsLCBtZXNzYWdlOiBgJHtFUlJPUl9TVEFDS19QUkVGSVh9JHtyZXN0U3RhY2t9YCB9KTtcbiAgfVxuXG4gIGlmIChlcnJvci5jYXVzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW50cmllcy5wdXNoKHsgbGV2ZWwsIG1lc3NhZ2U6ICdDYXVzZWQgYnk6JyB9KTtcbiAgICBwYXJzZUVycm9yRW50cmllcyhlcnJvci5jYXVzZSwgbGV2ZWwgKyAxLCBlbnRyaWVzKTtcbiAgfVxuXG4gIHJldHVybiBlbnRyaWVzO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLHlCQUE0QjtBQUU1QixNQUFNLG9CQUFvQjtBQUUxQixNQUFNLHFCQUFxQjtBQUUzQixNQUFNLHlCQUF5QixJ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
@@ -4,9 +4,22 @@
4
4
  * Contains utility functions for error handling.
5
5
  */
6
6
  /**
7
- * The message of the error wrapper that is used to wrap an actual error that occurred during an async operation.
8
- */
9
- export declare const ASYNC_ERROR_WRAPPER_MESSAGE = "An unhandled error occurred executing async operation";
7
+ * The message of the AsyncWrapperError.
8
+ */
9
+ export declare const ASYNC_WRAPPER_ERROR_MESSAGE = "An unhandled error occurred executing async operation";
10
+ /**
11
+ * An error that wraps an error with a custom stack trace.
12
+ */
13
+ export declare class CustomStackTraceError extends Error {
14
+ /**
15
+ * Creates a new CustomStackTraceError.
16
+ *
17
+ * @param message - The message of the error.
18
+ * @param stackTrace - The stack trace of the error.
19
+ * @param cause - The cause of the error.
20
+ */
21
+ constructor(message: string, stackTrace: string, cause: unknown);
22
+ }
10
23
  /**
11
24
  * Emits an asynchronous error event.
12
25
  *
@@ -30,7 +30,7 @@ __export(Library_exports, {
30
30
  LIBRARY_VERSION: () => LIBRARY_VERSION
31
31
  });
32
32
  module.exports = __toCommonJS(Library_exports);
33
- const LIBRARY_VERSION = "32.0.1";
33
+ const LIBRARY_VERSION = "32.0.2-beta.2";
34
34
  const LIBRARY_NAME = "obsidian-dev-utils";
35
35
  const LIBRARY_STYLES = ".obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component pre, .obsidian-dev-utils.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-dev-utils.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-dev-utils.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-dev-utils.code-highlighter-component pre::after {\n content: \"\";\n display: block;\n height: var(--bottom-gap, 0);\n}\n.obsidian-dev-utils.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-dev-utils.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-dev-utils input[type=url] {\n height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=tel],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-dev-utils input[type=month]:hover,\n .obsidian-dev-utils input[type=tel]:hover,\n .obsidian-dev-utils input[type=time]:hover,\n .obsidian-dev-utils input[type=url]:hover,\n .obsidian-dev-utils input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=tel]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=tel]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\n.obsidian-dev-utils.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-dev-utils :invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid, .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid, .obsidian-dev-utils input.metadata-input-text:focus:invalid,\n.obsidian-dev-utils input[type=date]:active:invalid,\n.obsidian-dev-utils input[type=date]:focus-visible:invalid,\n.obsidian-dev-utils input[type=date]:focus:invalid,\n.obsidian-dev-utils input[type=datetime-local]:active:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid,\n.obsidian-dev-utils input[type=email]:active:invalid,\n.obsidian-dev-utils input[type=email]:focus-visible:invalid,\n.obsidian-dev-utils input[type=email]:focus:invalid,\n.obsidian-dev-utils input[type=number]:active:invalid,\n.obsidian-dev-utils input[type=number]:focus-visible:invalid,\n.obsidian-dev-utils input[type=number]:focus:invalid,\n.obsidian-dev-utils input[type=password]:active:invalid,\n.obsidian-dev-utils input[type=password]:focus-visible:invalid,\n.obsidian-dev-utils input[type=password]:focus:invalid,\n.obsidian-dev-utils input[type=search]:active:invalid,\n.obsidian-dev-utils input[type=search]:focus-visible:invalid,\n.obsidian-dev-utils input[type=search]:focus:invalid,\n.obsidian-dev-utils input[type=text]:active:invalid,\n.obsidian-dev-utils input[type=text]:focus-visible:invalid,\n.obsidian-dev-utils input[type=text]:focus:invalid,\n.obsidian-dev-utils textarea:active:invalid,\n.obsidian-dev-utils textarea:focus-visible:invalid,\n.obsidian-dev-utils textarea:focus:invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-dev-utils.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-dev-utils.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACzCJ;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;AChDF;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACRJ;EACE;;;ACDF;EACE;;;ACEJ;EAJA;;AAoBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EApBJ;;AA0BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cr%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cr%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cr%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cr%5Cn%20%20%20%20%7D%5Cr%5Cn%20%20%7D%5Cr%5Cn%7D%5Cr%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
36
36
  // Annotate the CommonJS export names for ESM import in node: