@decaf-ts/logging 0.3.11 → 0.3.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/logging.cjs +547 -98
- package/dist/logging.esm.cjs +544 -99
- package/lib/LoggedClass.cjs +9 -12
- package/lib/LoggedClass.d.ts +6 -10
- package/lib/constants.cjs +40 -8
- package/lib/constants.d.ts +35 -7
- package/lib/decorators.cjs +114 -50
- package/lib/decorators.d.ts +58 -43
- package/lib/environment.cjs +78 -21
- package/lib/environment.d.ts +67 -22
- package/lib/esm/LoggedClass.d.ts +6 -10
- package/lib/esm/LoggedClass.js +9 -12
- package/lib/esm/constants.d.ts +35 -7
- package/lib/esm/constants.js +40 -8
- package/lib/esm/decorators.d.ts +58 -43
- package/lib/esm/decorators.js +113 -50
- package/lib/esm/environment.d.ts +67 -22
- package/lib/esm/environment.js +78 -21
- package/lib/esm/filters/LogFilter.d.ts +37 -0
- package/lib/esm/filters/LogFilter.js +30 -1
- package/lib/esm/filters/PatternFilter.d.ts +46 -0
- package/lib/esm/filters/PatternFilter.js +41 -1
- package/lib/esm/index.d.ts +7 -10
- package/lib/esm/index.js +8 -11
- package/lib/esm/logging.d.ts +14 -0
- package/lib/esm/logging.js +22 -1
- package/lib/esm/time.d.ts +149 -0
- package/lib/esm/time.js +212 -0
- package/lib/esm/types.d.ts +89 -51
- package/lib/esm/types.js +1 -1
- package/lib/filters/LogFilter.cjs +30 -1
- package/lib/filters/LogFilter.d.ts +37 -0
- package/lib/filters/PatternFilter.cjs +41 -1
- package/lib/filters/PatternFilter.d.ts +46 -0
- package/lib/index.cjs +8 -11
- package/lib/index.d.ts +7 -10
- package/lib/logging.cjs +22 -1
- package/lib/logging.d.ts +14 -0
- package/lib/time.cjs +217 -0
- package/lib/time.d.ts +149 -0
- package/lib/types.cjs +1 -1
- package/lib/types.d.ts +89 -51
- package/package.json +2 -2
package/lib/LoggedClass.cjs
CHANGED
|
@@ -3,12 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.LoggedClass = void 0;
|
|
4
4
|
const logging_1 = require("./logging.cjs");
|
|
5
5
|
/**
|
|
6
|
-
* @description Base class that provides a ready-to-use logger instance
|
|
7
|
-
* @summary
|
|
8
|
-
* into derived classes through a protected getter. Subclasses can directly access
|
|
9
|
-
* this.log to emit messages without manually creating a logger. This promotes
|
|
10
|
-
* consistent, context-aware logging across the codebase.
|
|
11
|
-
* @param {void} [constructor] - No constructor arguments; subclasses may define their own
|
|
6
|
+
* @description Base class that provides a ready-to-use logger instance.
|
|
7
|
+
* @summary Supplies inheriting classes with a lazily created, context-aware {@link Logger} via the protected `log` getter, promoting consistent structured logging without manual wiring.
|
|
12
8
|
* @class LoggedClass
|
|
13
9
|
* @example
|
|
14
10
|
* class UserService extends LoggedClass {
|
|
@@ -36,15 +32,16 @@ const logging_1 = require("./logging.cjs");
|
|
|
36
32
|
*/
|
|
37
33
|
class LoggedClass {
|
|
38
34
|
/**
|
|
39
|
-
* @description Lazily provides a context-aware logger for the current instance
|
|
40
|
-
* @summary
|
|
41
|
-
*
|
|
42
|
-
* @return {Logger} A logger bound to the subclass context
|
|
35
|
+
* @description Lazily provides a context-aware logger for the current instance.
|
|
36
|
+
* @summary Calls {@link Logging.for} with the subclass instance to obtain a logger whose context matches the subclass name.
|
|
37
|
+
* @return {Logger} Logger bound to the subclass context.
|
|
43
38
|
*/
|
|
44
39
|
get log() {
|
|
45
|
-
|
|
40
|
+
if (!this._log)
|
|
41
|
+
this._log = logging_1.Logging.for(this);
|
|
42
|
+
return this._log;
|
|
46
43
|
}
|
|
47
44
|
constructor() { }
|
|
48
45
|
}
|
|
49
46
|
exports.LoggedClass = LoggedClass;
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9nZ2VkQ2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvTG9nZ2VkQ2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQW9DO0FBR3BDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFDSCxNQUFzQixXQUFXO0lBRy9COzs7O09BSUc7SUFDSCxJQUFjLEdBQUc7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7WUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFPLENBQUMsR0FBRyxDQUFDLElBQVcsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsZ0JBQXlCLENBQUM7Q0FDM0I7QUFkRCxrQ0FjQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvZ2dpbmcgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCYXNlIGNsYXNzIHRoYXQgcHJvdmlkZXMgYSByZWFkeS10by11c2UgbG9nZ2VyIGluc3RhbmNlLlxuICogQHN1bW1hcnkgU3VwcGxpZXMgaW5oZXJpdGluZyBjbGFzc2VzIHdpdGggYSBsYXppbHkgY3JlYXRlZCwgY29udGV4dC1hd2FyZSB7QGxpbmsgTG9nZ2VyfSB2aWEgdGhlIHByb3RlY3RlZCBgbG9nYCBnZXR0ZXIsIHByb21vdGluZyBjb25zaXN0ZW50IHN0cnVjdHVyZWQgbG9nZ2luZyB3aXRob3V0IG1hbnVhbCB3aXJpbmcuXG4gKiBAY2xhc3MgTG9nZ2VkQ2xhc3NcbiAqIEBleGFtcGxlXG4gKiBjbGFzcyBVc2VyU2VydmljZSBleHRlbmRzIExvZ2dlZENsYXNzIHtcbiAqICAgY3JlYXRlKHVzZXI6IFVzZXIpIHtcbiAqICAgICB0aGlzLmxvZy5pbmZvKGBDcmVhdGluZyB1c2VyICR7dXNlci5pZH1gKTtcbiAqICAgfVxuICogfVxuICpcbiAqIGNvbnN0IHN2YyA9IG5ldyBVc2VyU2VydmljZSgpO1xuICogc3ZjLmNyZWF0ZSh7IGlkOiBcIjQyXCIgfSk7XG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBJbnN0YW5jZSBhcyBTdWJjbGFzcyBJbnN0YW5jZVxuICogICBwYXJ0aWNpcGFudCBHZXR0ZXIgYXMgTG9nZ2VkQ2xhc3MubG9nXG4gKiAgIHBhcnRpY2lwYW50IExvZ2dpbmcgYXMgTG9nZ2luZ1xuICogICBwYXJ0aWNpcGFudCBMb2dnZXIgYXMgTG9nZ2VyXG4gKlxuICogICBDbGllbnQtPj5JbnN0YW5jZTogY2FsbCBzb21lTWV0aG9kKClcbiAqICAgSW5zdGFuY2UtPj5HZXR0ZXI6IGFjY2VzcyB0aGlzLmxvZ1xuICogICBHZXR0ZXItPj5Mb2dnaW5nOiBMb2dnaW5nLmZvcih0aGlzKVxuICogICBMb2dnaW5nLS0+PkdldHRlcjogcmV0dXJuIExvZ2dlclxuICogICBHZXR0ZXItLT4+SW5zdGFuY2U6IHJldHVybiBMb2dnZXJcbiAqICAgSW5zdGFuY2UtPj5Mb2dnZXI6IGluZm8vZGVidWcvZXJyb3IoLi4uKVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTG9nZ2VkQ2xhc3Mge1xuICBwcml2YXRlIF9sb2c/OiBMb2dnZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMYXppbHkgcHJvdmlkZXMgYSBjb250ZXh0LWF3YXJlIGxvZ2dlciBmb3IgdGhlIGN1cnJlbnQgaW5zdGFuY2UuXG4gICAqIEBzdW1tYXJ5IENhbGxzIHtAbGluayBMb2dnaW5nLmZvcn0gd2l0aCB0aGUgc3ViY2xhc3MgaW5zdGFuY2UgdG8gb2J0YWluIGEgbG9nZ2VyIHdob3NlIGNvbnRleHQgbWF0Y2hlcyB0aGUgc3ViY2xhc3MgbmFtZS5cbiAgICogQHJldHVybiB7TG9nZ2VyfSBMb2dnZXIgYm91bmQgdG8gdGhlIHN1YmNsYXNzIGNvbnRleHQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGxvZygpOiBMb2dnZXIge1xuICAgIGlmICghdGhpcy5fbG9nKSB0aGlzLl9sb2cgPSBMb2dnaW5nLmZvcih0aGlzIGFzIGFueSk7XG4gICAgcmV0dXJuIHRoaXMuX2xvZztcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHt9XG59XG4iXX0=
|
package/lib/LoggedClass.d.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { Logger } from "./types";
|
|
2
2
|
/**
|
|
3
|
-
* @description Base class that provides a ready-to-use logger instance
|
|
4
|
-
* @summary
|
|
5
|
-
* into derived classes through a protected getter. Subclasses can directly access
|
|
6
|
-
* this.log to emit messages without manually creating a logger. This promotes
|
|
7
|
-
* consistent, context-aware logging across the codebase.
|
|
8
|
-
* @param {void} [constructor] - No constructor arguments; subclasses may define their own
|
|
3
|
+
* @description Base class that provides a ready-to-use logger instance.
|
|
4
|
+
* @summary Supplies inheriting classes with a lazily created, context-aware {@link Logger} via the protected `log` getter, promoting consistent structured logging without manual wiring.
|
|
9
5
|
* @class LoggedClass
|
|
10
6
|
* @example
|
|
11
7
|
* class UserService extends LoggedClass {
|
|
@@ -32,11 +28,11 @@ import { Logger } from "./types";
|
|
|
32
28
|
* Instance->>Logger: info/debug/error(...)
|
|
33
29
|
*/
|
|
34
30
|
export declare abstract class LoggedClass {
|
|
31
|
+
private _log?;
|
|
35
32
|
/**
|
|
36
|
-
* @description Lazily provides a context-aware logger for the current instance
|
|
37
|
-
* @summary
|
|
38
|
-
*
|
|
39
|
-
* @return {Logger} A logger bound to the subclass context
|
|
33
|
+
* @description Lazily provides a context-aware logger for the current instance.
|
|
34
|
+
* @summary Calls {@link Logging.for} with the subclass instance to obtain a logger whose context matches the subclass name.
|
|
35
|
+
* @return {Logger} Logger bound to the subclass context.
|
|
40
36
|
*/
|
|
41
37
|
protected get log(): Logger;
|
|
42
38
|
protected constructor();
|
package/lib/constants.cjs
CHANGED
|
@@ -1,12 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DefaultLoggingConfig = exports.DefaultTheme = exports.LoggingMode = exports.NumericLogLevels = exports.LogLevel = exports.DefaultPlaceholderWrappers = exports.ENV_PATH_DELIMITER = exports.BrowserEnvKey = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* @description Global key used to store environment variables in browser contexts.
|
|
6
|
+
* @summary Enables the logging environment helpers to locate serialized environment configuration on `globalThis`.
|
|
7
|
+
* @const BrowserEnvKey
|
|
8
|
+
* @type {string}
|
|
9
|
+
* @memberOf module:Logging
|
|
10
|
+
*/
|
|
4
11
|
exports.BrowserEnvKey = "ENV";
|
|
5
12
|
/**
|
|
6
13
|
* @description Delimiter used for composing nested environment variable names.
|
|
7
14
|
* @summary Joins parent and child keys when mapping object paths to ENV strings.
|
|
15
|
+
* @const ENV_PATH_DELIMITER
|
|
16
|
+
* @type {string}
|
|
17
|
+
* @memberOf module:Logging
|
|
8
18
|
*/
|
|
9
19
|
exports.ENV_PATH_DELIMITER = "__";
|
|
20
|
+
/**
|
|
21
|
+
* @description Default prefix and suffix used for template placeholders.
|
|
22
|
+
* @summary Provides wrapper strings applied when interpolating messages with {@link patchPlaceholders}.
|
|
23
|
+
* @const DefaultPlaceholderWrappers
|
|
24
|
+
* @type {string[]}
|
|
25
|
+
* @memberOf module:Logging
|
|
26
|
+
*/
|
|
10
27
|
exports.DefaultPlaceholderWrappers = ["${", "}"];
|
|
11
28
|
/**
|
|
12
29
|
* @description Enum for log levels.
|
|
@@ -17,21 +34,24 @@ exports.DefaultPlaceholderWrappers = ["${", "}"];
|
|
|
17
34
|
*/
|
|
18
35
|
var LogLevel;
|
|
19
36
|
(function (LogLevel) {
|
|
20
|
-
/**
|
|
37
|
+
/** @description Benchmark events that capture performance metrics. */
|
|
38
|
+
LogLevel["benchmark"] = "benchmark";
|
|
39
|
+
/** @description Error events that indicate failures requiring attention. */
|
|
21
40
|
LogLevel["error"] = "error";
|
|
22
|
-
/**
|
|
41
|
+
/** @description Informational events describing normal operation. */
|
|
23
42
|
LogLevel["info"] = "info";
|
|
24
|
-
/**
|
|
43
|
+
/** @description Verbose diagnostic information for detailed tracing. */
|
|
25
44
|
LogLevel["verbose"] = "verbose";
|
|
26
|
-
/** Debug or trace
|
|
45
|
+
/** @description Debug or trace details aimed at developers. */
|
|
27
46
|
LogLevel["debug"] = "debug";
|
|
28
|
-
/**
|
|
47
|
+
/** @description Extremely chatty or playful log entries. */
|
|
29
48
|
LogLevel["silly"] = "silly";
|
|
30
49
|
})(LogLevel || (exports.LogLevel = LogLevel = {}));
|
|
31
50
|
/**
|
|
32
51
|
* @description Numeric values associated with log levels.
|
|
33
52
|
* @summary Provides a numeric representation of log levels for comparison and filtering.
|
|
34
|
-
* @
|
|
53
|
+
* @typedef {Object} NumericLogLevelsShape
|
|
54
|
+
* @property {number} benchmark - Numeric value for benchmark level (0).
|
|
35
55
|
* @property {number} error - Numeric value for error level (2).
|
|
36
56
|
* @property {number} info - Numeric value for info level (4).
|
|
37
57
|
* @property {number} verbose - Numeric value for verbose level (6).
|
|
@@ -39,7 +59,15 @@ var LogLevel;
|
|
|
39
59
|
* @property {number} silly - Numeric value for silly level (9).
|
|
40
60
|
* @memberOf module:Logging
|
|
41
61
|
*/
|
|
62
|
+
/**
|
|
63
|
+
* @description Numeric values associated with log levels.
|
|
64
|
+
* @summary Provides a numeric representation of log levels for comparison and filtering.
|
|
65
|
+
* @const NumericLogLevels
|
|
66
|
+
* @type {NumericLogLevelsShape}
|
|
67
|
+
* @memberOf module:Logging
|
|
68
|
+
*/
|
|
42
69
|
exports.NumericLogLevels = {
|
|
70
|
+
benchmark: 0,
|
|
43
71
|
error: 2,
|
|
44
72
|
info: 4,
|
|
45
73
|
verbose: 6,
|
|
@@ -62,7 +90,6 @@ var LoggingMode;
|
|
|
62
90
|
/**
|
|
63
91
|
* @description Default theme for styling log output.
|
|
64
92
|
* @summary Defines the default color and style settings for various components of log messages.
|
|
65
|
-
* @const DefaultTheme
|
|
66
93
|
* @typedef {Theme} DefaultTheme
|
|
67
94
|
* @property {Object} class - Styling for class names.
|
|
68
95
|
* @property {number} class.fg - Foreground color code for class names (34).
|
|
@@ -82,6 +109,7 @@ var LoggingMode;
|
|
|
82
109
|
* @property {Object} logLevel.verbose - Styling for verbose level logs (empty object).
|
|
83
110
|
* @property {Object} logLevel.debug - Styling for debug level logs.
|
|
84
111
|
* @property {number} logLevel.debug.fg - Foreground color code for debug level logs (33).
|
|
112
|
+
* @const DefaultTheme
|
|
85
113
|
* @memberOf module:Logging
|
|
86
114
|
*/
|
|
87
115
|
exports.DefaultTheme = {
|
|
@@ -102,6 +130,10 @@ exports.DefaultTheme = {
|
|
|
102
130
|
},
|
|
103
131
|
method: {},
|
|
104
132
|
logLevel: {
|
|
133
|
+
benchmark: {
|
|
134
|
+
fg: 32,
|
|
135
|
+
style: ["bold"],
|
|
136
|
+
},
|
|
105
137
|
error: {
|
|
106
138
|
fg: 31,
|
|
107
139
|
style: ["bold"],
|
|
@@ -152,4 +184,4 @@ exports.DefaultLoggingConfig = {
|
|
|
152
184
|
pattern: "{level} [{timestamp}] {app} {context} {separator} {message} {stack}",
|
|
153
185
|
theme: exports.DefaultTheme,
|
|
154
186
|
};
|
|
155
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFYSxRQUFBLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFFbkM7OztHQUdHO0FBQ1UsUUFBQSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFFMUIsUUFBQSwwQkFBMEIsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUV0RDs7Ozs7O0dBTUc7QUFDSCxJQUFZLFFBV1g7QUFYRCxXQUFZLFFBQVE7SUFDbEIsc0RBQXNEO0lBQ3RELDJCQUFlLENBQUE7SUFDZixrRUFBa0U7SUFDbEUseUJBQWEsQ0FBQTtJQUNiLHVDQUF1QztJQUN2QywrQkFBbUIsQ0FBQTtJQUNuQixrQ0FBa0M7SUFDbEMsMkJBQWUsQ0FBQTtJQUNmLDRDQUE0QztJQUM1QywyQkFBZSxDQUFBO0FBQ2pCLENBQUMsRUFYVyxRQUFRLHdCQUFSLFFBQVEsUUFXbkI7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ1UsUUFBQSxnQkFBZ0IsR0FBRztJQUM5QixLQUFLLEVBQUUsQ0FBQztJQUNSLElBQUksRUFBRSxDQUFDO0lBQ1AsT0FBTyxFQUFFLENBQUM7SUFDVixLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssRUFBRSxDQUFDO0NBQ1QsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsSUFBWSxXQUtYO0FBTEQsV0FBWSxXQUFXO0lBQ3JCLDRDQUE0QztJQUM1QywwQkFBVyxDQUFBO0lBQ1gsc0NBQXNDO0lBQ3RDLDRCQUFhLENBQUE7QUFDZixDQUFDLEVBTFcsV0FBVywyQkFBWCxXQUFXLFFBS3RCO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNVLFFBQUEsWUFBWSxHQUFVO0lBQ2pDLEdBQUcsRUFBRSxFQUFFO0lBQ1AsU0FBUyxFQUFFLEVBQUU7SUFDYixLQUFLLEVBQUU7UUFDTCxFQUFFLEVBQUUsRUFBRTtLQUNQO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsRUFBRSxFQUFFLEVBQUU7S0FDUDtJQUNELEtBQUssRUFBRSxFQUFFO0lBQ1QsU0FBUyxFQUFFLEVBQUU7SUFDYixPQUFPLEVBQUU7UUFDUCxLQUFLLEVBQUU7WUFDTCxFQUFFLEVBQUUsRUFBRTtTQUNQO0tBQ0Y7SUFDRCxNQUFNLEVBQUUsRUFBRTtJQUNWLFFBQVEsRUFBRTtRQUNSLEtBQUssRUFBRTtZQUNMLEVBQUUsRUFBRSxFQUFFO1lBQ04sS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDO1NBQ2hCO1FBQ0QsSUFBSSxFQUFFO1lBQ0osRUFBRSxFQUFFLEVBQUU7WUFDTixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUM7U0FDaEI7UUFDRCxPQUFPLEVBQUU7WUFDUCxFQUFFLEVBQUUsRUFBRTtZQUNOLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQztTQUNoQjtRQUNELEtBQUssRUFBRTtZQUNMLEVBQUUsRUFBRSxFQUFFO1lBQ04sS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDO1NBQ2hCO0tBQ0Y7Q0FDRixDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDVSxRQUFBLG9CQUFvQixHQUFrQjtJQUNqRCxHQUFHLEVBQUUsYUFBYTtJQUNsQixPQUFPLEVBQUUsQ0FBQztJQUNWLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSTtJQUNwQixRQUFRLEVBQUUsSUFBSTtJQUNkLEtBQUssRUFBRSxLQUFLO0lBQ1osZ0JBQWdCLEVBQUUsR0FBRztJQUNyQixTQUFTLEVBQUUsR0FBRztJQUNkLFNBQVMsRUFBRSxJQUFJO0lBQ2YsZUFBZSxFQUFFLGNBQWM7SUFDL0IsT0FBTyxFQUFFLElBQUk7SUFDYixNQUFNLEVBQUUsV0FBVyxDQUFDLEdBQUc7SUFDdkIsT0FBTyxFQUNMLHFFQUFxRTtJQUN2RSxLQUFLLEVBQUUsb0JBQVk7Q0FDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvZ2dpbmdDb25maWcsIFRoZW1lIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IGNvbnN0IEJyb3dzZXJFbnZLZXkgPSBcIkVOVlwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWxpbWl0ZXIgdXNlZCBmb3IgY29tcG9zaW5nIG5lc3RlZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcy5cbiAqIEBzdW1tYXJ5IEpvaW5zIHBhcmVudCBhbmQgY2hpbGQga2V5cyB3aGVuIG1hcHBpbmcgb2JqZWN0IHBhdGhzIHRvIEVOViBzdHJpbmdzLlxuICovXG5leHBvcnQgY29uc3QgRU5WX1BBVEhfREVMSU1JVEVSID0gXCJfX1wiO1xuXG5leHBvcnQgY29uc3QgRGVmYXVsdFBsYWNlaG9sZGVyV3JhcHBlcnMgPSBbXCIke1wiLCBcIn1cIl07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVudW0gZm9yIGxvZyBsZXZlbHMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGRpZmZlcmVudCBsZXZlbHMgb2YgbG9nZ2luZyBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEByZWFkb25seVxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBlbnVtIExvZ0xldmVsIHtcbiAgLyoqIEVycm9yIGV2ZW50cyB0aGF0IGFyZSBsaWtlbHkgdG8gY2F1c2UgcHJvYmxlbXMuICovXG4gIGVycm9yID0gXCJlcnJvclwiLFxuICAvKiogUm91dGluZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyBvbmdvaW5nIHN0YXR1cyBvciBwZXJmb3JtYW5jZS4gKi9cbiAgaW5mbyA9IFwiaW5mb1wiLFxuICAvKiogQWRkaXRpb25hbCByZWxldmFudCBpbmZvcm1hdGlvbi4gKi9cbiAgdmVyYm9zZSA9IFwidmVyYm9zZVwiLFxuICAvKiogRGVidWcgb3IgdHJhY2UgaW5mb3JtYXRpb24uICovXG4gIGRlYnVnID0gXCJkZWJ1Z1wiLFxuICAvKiogd2F5IHRvbyB2ZXJib3NlIG9yIHNpbGx5IGluZm9ybWF0aW9uLiAqL1xuICBzaWxseSA9IFwic2lsbHlcIixcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTnVtZXJpYyB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGxvZyBsZXZlbHMuXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBhIG51bWVyaWMgcmVwcmVzZW50YXRpb24gb2YgbG9nIGxldmVscyBmb3IgY29tcGFyaXNvbiBhbmQgZmlsdGVyaW5nLlxuICogQGNvbnN0IE51bWVyaWNMb2dMZXZlbHNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBlcnJvciAtIE51bWVyaWMgdmFsdWUgZm9yIGVycm9yIGxldmVsICgyKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpbmZvIC0gTnVtZXJpYyB2YWx1ZSBmb3IgaW5mbyBsZXZlbCAoNCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmVyYm9zZSAtIE51bWVyaWMgdmFsdWUgZm9yIHZlcmJvc2UgbGV2ZWwgKDYpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRlYnVnIC0gTnVtZXJpYyB2YWx1ZSBmb3IgZGVidWcgbGV2ZWwgKDcpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHNpbGx5IC0gTnVtZXJpYyB2YWx1ZSBmb3Igc2lsbHkgbGV2ZWwgKDkpLlxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBOdW1lcmljTG9nTGV2ZWxzID0ge1xuICBlcnJvcjogMixcbiAgaW5mbzogNCxcbiAgdmVyYm9zZTogNixcbiAgZGVidWc6IDcsXG4gIHNpbGx5OiA5LFxufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRW51bSBmb3IgbG9nZ2luZyBvdXRwdXQgbW9kZXMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGRpZmZlcmVudCBvdXRwdXQgZm9ybWF0cyBmb3IgbG9nIG1lc3NhZ2VzLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgZW51bSBMb2dnaW5nTW9kZSB7XG4gIC8qKiBSYXcgdGV4dCBmb3JtYXQgZm9yIGh1bWFuIHJlYWRhYmlsaXR5ICovXG4gIFJBVyA9IFwicmF3XCIsXG4gIC8qKiBKU09OIGZvcm1hdCBmb3IgbWFjaGluZSBwYXJzaW5nICovXG4gIEpTT04gPSBcImpzb25cIixcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCB0aGVtZSBmb3Igc3R5bGluZyBsb2cgb3V0cHV0LlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgZGVmYXVsdCBjb2xvciBhbmQgc3R5bGUgc2V0dGluZ3MgZm9yIHZhcmlvdXMgY29tcG9uZW50cyBvZiBsb2cgbWVzc2FnZXMuXG4gKiBAY29uc3QgRGVmYXVsdFRoZW1lXG4gKiBAdHlwZWRlZiB7VGhlbWV9IERlZmF1bHRUaGVtZVxuICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzIC0gU3R5bGluZyBmb3IgY2xhc3MgbmFtZXMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gY2xhc3MuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGNsYXNzIG5hbWVzICgzNCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gaWQgLSBTdHlsaW5nIGZvciBpZGVudGlmaWVycy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpZC5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgaWRlbnRpZmllcnMgKDM2KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBzdGFjayAtIFN0eWxpbmcgZm9yIHN0YWNrIHRyYWNlcyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0aW1lc3RhbXAgLSBTdHlsaW5nIGZvciB0aW1lc3RhbXBzIChlbXB0eSBvYmplY3QpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IG1lc3NhZ2UgLSBTdHlsaW5nIGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgbWVzc2FnZXMuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbWVzc2FnZS5lcnJvciAtIFN0eWxpbmcgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1lc3NhZ2UuZXJyb3IuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGVycm9yIG1lc3NhZ2VzICgzMSkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbWV0aG9kIC0gU3R5bGluZyBmb3IgbWV0aG9kIG5hbWVzIChlbXB0eSBvYmplY3QpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsIC0gU3R5bGluZyBmb3IgZGlmZmVyZW50IGxvZyBsZXZlbHMuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwuZXJyb3IgLSBTdHlsaW5nIGZvciBlcnJvciBsZXZlbCBsb2dzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxvZ0xldmVsLmVycm9yLmZnIC0gRm9yZWdyb3VuZCBjb2xvciBjb2RlIGZvciBlcnJvciBsZXZlbCBsb2dzICgzMSkuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBsb2dMZXZlbC5lcnJvci5zdHlsZSAtIFN0eWxlIGF0dHJpYnV0ZXMgZm9yIGVycm9yIGxldmVsIGxvZ3MgKFtcImJvbGRcIl0pLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsLmluZm8gLSBTdHlsaW5nIGZvciBpbmZvIGxldmVsIGxvZ3MgKGVtcHR5IG9iamVjdCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwudmVyYm9zZSAtIFN0eWxpbmcgZm9yIHZlcmJvc2UgbGV2ZWwgbG9ncyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dMZXZlbC5kZWJ1ZyAtIFN0eWxpbmcgZm9yIGRlYnVnIGxldmVsIGxvZ3MuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbG9nTGV2ZWwuZGVidWcuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGRlYnVnIGxldmVsIGxvZ3MgKDMzKS5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdFRoZW1lOiBUaGVtZSA9IHtcbiAgYXBwOiB7fSxcbiAgc2VwYXJhdG9yOiB7fSxcbiAgY2xhc3M6IHtcbiAgICBmZzogMzQsXG4gIH0sXG4gIGlkOiB7XG4gICAgZmc6IDM2LFxuICB9LFxuICBzdGFjazoge30sXG4gIHRpbWVzdGFtcDoge30sXG4gIG1lc3NhZ2U6IHtcbiAgICBlcnJvcjoge1xuICAgICAgZmc6IDMxLFxuICAgIH0sXG4gIH0sXG4gIG1ldGhvZDoge30sXG4gIGxvZ0xldmVsOiB7XG4gICAgZXJyb3I6IHtcbiAgICAgIGZnOiAzMSxcbiAgICAgIHN0eWxlOiBbXCJib2xkXCJdLFxuICAgIH0sXG4gICAgaW5mbzoge1xuICAgICAgZmc6IDM0LFxuICAgICAgc3R5bGU6IFtcImJvbGRcIl0sXG4gICAgfSxcbiAgICB2ZXJib3NlOiB7XG4gICAgICBmZzogMzQsXG4gICAgICBzdHlsZTogW1wiYm9sZFwiXSxcbiAgICB9LFxuICAgIGRlYnVnOiB7XG4gICAgICBmZzogMzMsXG4gICAgICBzdHlsZTogW1wiYm9sZFwiXSxcbiAgICB9LFxuICB9LFxufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBsb2dnaW5nLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIGxvZ2dpbmcgc3lzdGVtLCBpbmNsdWRpbmcgdmVyYm9zaXR5LCBsb2cgbGV2ZWwsIHN0eWxpbmcsIGFuZCB0aW1lc3RhbXAgZm9ybWF0LlxuICogQGNvbnN0IERlZmF1bHRMb2dnaW5nQ29uZmlnXG4gKiBAdHlwZWRlZiB7TG9nZ2luZ0NvbmZpZ30gRGVmYXVsdExvZ2dpbmdDb25maWdcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB2ZXJib3NlIC0gVmVyYm9zaXR5IGxldmVsICgwKS5cbiAqIEBwcm9wZXJ0eSB7TG9nTGV2ZWx9IGxldmVsIC0gRGVmYXVsdCBsb2cgbGV2ZWwgKExvZ0xldmVsLmluZm8pLlxuICogQHByb3BlcnR5IHtib29sZWFufSBsb2dMZXZlbCAtIFdoZXRoZXIgdG8gZGlzcGxheSBsb2cgbGV2ZWwgaW4gb3V0cHV0ICh0cnVlKS5cbiAqIEBwcm9wZXJ0eSB7TG9nZ2luZ01vZGV9IG1vZGUgLSBPdXRwdXQgZm9ybWF0IG1vZGUgKExvZ2dpbmdNb2RlLlJBVykuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHN0eWxlIC0gV2hldGhlciB0byBhcHBseSBzdHlsaW5nIHRvIGxvZyBvdXRwdXQgKGZhbHNlKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZXBhcmF0b3IgLSBTZXBhcmF0b3IgYmV0d2VlbiBsb2cgY29tcG9uZW50cyAoXCIgLSBcIikuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHRpbWVzdGFtcCAtIFdoZXRoZXIgdG8gaW5jbHVkZSB0aW1lc3RhbXBzIGluIGxvZyBtZXNzYWdlcyAodHJ1ZSkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGltZXN0YW1wRm9ybWF0IC0gRm9ybWF0IGZvciB0aW1lc3RhbXBzIChcIkhIOm1tOnNzLlNTU1wiKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY29udGV4dCAtIFdoZXRoZXIgdG8gaW5jbHVkZSBjb250ZXh0IGluZm9ybWF0aW9uIGluIGxvZyBtZXNzYWdlcyAodHJ1ZSkuXG4gKiBAcHJvcGVydHkge1RoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSB0byB1c2UgZm9yIHN0eWxpbmcgbG9nIG1lc3NhZ2VzIChEZWZhdWx0VGhlbWUpLlxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0TG9nZ2luZ0NvbmZpZzogTG9nZ2luZ0NvbmZpZyA9IHtcbiAgZW52OiBcImRldmVsb3BtZW50XCIsXG4gIHZlcmJvc2U6IDAsXG4gIGxldmVsOiBMb2dMZXZlbC5pbmZvLFxuICBsb2dMZXZlbDogdHJ1ZSxcbiAgc3R5bGU6IGZhbHNlLFxuICBjb250ZXh0U2VwYXJhdG9yOiBcIi5cIixcbiAgc2VwYXJhdG9yOiBcIi1cIixcbiAgdGltZXN0YW1wOiB0cnVlLFxuICB0aW1lc3RhbXBGb3JtYXQ6IFwiSEg6bW06c3MuU1NTXCIsXG4gIGNvbnRleHQ6IHRydWUsXG4gIGZvcm1hdDogTG9nZ2luZ01vZGUuUkFXLFxuICBwYXR0ZXJuOlxuICAgIFwie2xldmVsfSBbe3RpbWVzdGFtcH1dIHthcHB9IHtjb250ZXh0fSB7c2VwYXJhdG9yfSB7bWVzc2FnZX0ge3N0YWNrfVwiLFxuICB0aGVtZTogRGVmYXVsdFRoZW1lLFxufTtcbiJdfQ==
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQTs7Ozs7O0dBTUc7QUFDVSxRQUFBLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFFbkM7Ozs7OztHQU1HO0FBQ1UsUUFBQSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFFdkM7Ozs7OztHQU1HO0FBQ1UsUUFBQSwwQkFBMEIsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUV0RDs7Ozs7O0dBTUc7QUFDSCxJQUFZLFFBYVg7QUFiRCxXQUFZLFFBQVE7SUFDbEIsc0VBQXNFO0lBQ3RFLG1DQUF1QixDQUFBO0lBQ3ZCLDRFQUE0RTtJQUM1RSwyQkFBZSxDQUFBO0lBQ2YscUVBQXFFO0lBQ3JFLHlCQUFhLENBQUE7SUFDYix3RUFBd0U7SUFDeEUsK0JBQW1CLENBQUE7SUFDbkIsK0RBQStEO0lBQy9ELDJCQUFlLENBQUE7SUFDZiw0REFBNEQ7SUFDNUQsMkJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBYlcsUUFBUSx3QkFBUixRQUFRLFFBYW5CO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSDs7Ozs7O0dBTUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHO0lBQzlCLFNBQVMsRUFBRSxDQUFDO0lBQ1osS0FBSyxFQUFFLENBQUM7SUFDUixJQUFJLEVBQUUsQ0FBQztJQUNQLE9BQU8sRUFBRSxDQUFDO0lBQ1YsS0FBSyxFQUFFLENBQUM7SUFDUixLQUFLLEVBQUUsQ0FBQztDQUNULENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILElBQVksV0FLWDtBQUxELFdBQVksV0FBVztJQUNyQiw0Q0FBNEM7SUFDNUMsMEJBQVcsQ0FBQTtJQUNYLHNDQUFzQztJQUN0Qyw0QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxXLFdBQVcsMkJBQVgsV0FBVyxRQUt0QjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDVSxRQUFBLFlBQVksR0FBVTtJQUNqQyxHQUFHLEVBQUUsRUFBRTtJQUNQLFNBQVMsRUFBRSxFQUFFO0lBQ2IsS0FBSyxFQUFFO1FBQ0wsRUFBRSxFQUFFLEVBQUU7S0FDUDtJQUNELEVBQUUsRUFBRTtRQUNGLEVBQUUsRUFBRSxFQUFFO0tBQ1A7SUFDRCxLQUFLLEVBQUUsRUFBRTtJQUNULFNBQVMsRUFBRSxFQUFFO0lBQ2IsT0FBTyxFQUFFO1FBQ1AsS0FBSyxFQUFFO1lBQ0wsRUFBRSxFQUFFLEVBQUU7U0FDUDtLQUNGO0lBQ0QsTUFBTSxFQUFFLEVBQUU7SUFDVixRQUFRLEVBQUU7UUFDUixTQUFTLEVBQUU7WUFDVCxFQUFFLEVBQUUsRUFBRTtZQUNOLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQztTQUNoQjtRQUNELEtBQUssRUFBRTtZQUNMLEVBQUUsRUFBRSxFQUFFO1lBQ04sS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDO1NBQ2hCO1FBQ0QsSUFBSSxFQUFFO1lBQ0osRUFBRSxFQUFFLEVBQUU7WUFDTixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUM7U0FDaEI7UUFDRCxPQUFPLEVBQUU7WUFDUCxFQUFFLEVBQUUsRUFBRTtZQUNOLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQztTQUNoQjtRQUNELEtBQUssRUFBRTtZQUNMLEVBQUUsRUFBRSxFQUFFO1lBQ04sS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDO1NBQ2hCO0tBQ0Y7Q0FDRixDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDVSxRQUFBLG9CQUFvQixHQUFrQjtJQUNqRCxHQUFHLEVBQUUsYUFBYTtJQUNsQixPQUFPLEVBQUUsQ0FBQztJQUNWLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSTtJQUNwQixRQUFRLEVBQUUsSUFBSTtJQUNkLEtBQUssRUFBRSxLQUFLO0lBQ1osZ0JBQWdCLEVBQUUsR0FBRztJQUNyQixTQUFTLEVBQUUsR0FBRztJQUNkLFNBQVMsRUFBRSxJQUFJO0lBQ2YsZUFBZSxFQUFFLGNBQWM7SUFDL0IsT0FBTyxFQUFFLElBQUk7SUFDYixNQUFNLEVBQUUsV0FBVyxDQUFDLEdBQUc7SUFDdkIsT0FBTyxFQUNMLHFFQUFxRTtJQUN2RSxLQUFLLEVBQUUsb0JBQVk7Q0FDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvZ2dpbmdDb25maWcsIFRoZW1lIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gR2xvYmFsIGtleSB1c2VkIHRvIHN0b3JlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBicm93c2VyIGNvbnRleHRzLlxuICogQHN1bW1hcnkgRW5hYmxlcyB0aGUgbG9nZ2luZyBlbnZpcm9ubWVudCBoZWxwZXJzIHRvIGxvY2F0ZSBzZXJpYWxpemVkIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24gb24gYGdsb2JhbFRoaXNgLlxuICogQGNvbnN0IEJyb3dzZXJFbnZLZXlcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IEJyb3dzZXJFbnZLZXkgPSBcIkVOVlwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWxpbWl0ZXIgdXNlZCBmb3IgY29tcG9zaW5nIG5lc3RlZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcy5cbiAqIEBzdW1tYXJ5IEpvaW5zIHBhcmVudCBhbmQgY2hpbGQga2V5cyB3aGVuIG1hcHBpbmcgb2JqZWN0IHBhdGhzIHRvIEVOViBzdHJpbmdzLlxuICogQGNvbnN0IEVOVl9QQVRIX0RFTElNSVRFUlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgY29uc3QgRU5WX1BBVEhfREVMSU1JVEVSID0gXCJfX1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IHByZWZpeCBhbmQgc3VmZml4IHVzZWQgZm9yIHRlbXBsYXRlIHBsYWNlaG9sZGVycy5cbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIHdyYXBwZXIgc3RyaW5ncyBhcHBsaWVkIHdoZW4gaW50ZXJwb2xhdGluZyBtZXNzYWdlcyB3aXRoIHtAbGluayBwYXRjaFBsYWNlaG9sZGVyc30uXG4gKiBAY29uc3QgRGVmYXVsdFBsYWNlaG9sZGVyV3JhcHBlcnNcbiAqIEB0eXBlIHtzdHJpbmdbXX1cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdFBsYWNlaG9sZGVyV3JhcHBlcnMgPSBbXCIke1wiLCBcIn1cIl07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVudW0gZm9yIGxvZyBsZXZlbHMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGRpZmZlcmVudCBsZXZlbHMgb2YgbG9nZ2luZyBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEByZWFkb25seVxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBlbnVtIExvZ0xldmVsIHtcbiAgLyoqIEBkZXNjcmlwdGlvbiBCZW5jaG1hcmsgZXZlbnRzIHRoYXQgY2FwdHVyZSBwZXJmb3JtYW5jZSBtZXRyaWNzLiAqL1xuICBiZW5jaG1hcmsgPSBcImJlbmNobWFya1wiLFxuICAvKiogQGRlc2NyaXB0aW9uIEVycm9yIGV2ZW50cyB0aGF0IGluZGljYXRlIGZhaWx1cmVzIHJlcXVpcmluZyBhdHRlbnRpb24uICovXG4gIGVycm9yID0gXCJlcnJvclwiLFxuICAvKiogQGRlc2NyaXB0aW9uIEluZm9ybWF0aW9uYWwgZXZlbnRzIGRlc2NyaWJpbmcgbm9ybWFsIG9wZXJhdGlvbi4gKi9cbiAgaW5mbyA9IFwiaW5mb1wiLFxuICAvKiogQGRlc2NyaXB0aW9uIFZlcmJvc2UgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmb3IgZGV0YWlsZWQgdHJhY2luZy4gKi9cbiAgdmVyYm9zZSA9IFwidmVyYm9zZVwiLFxuICAvKiogQGRlc2NyaXB0aW9uIERlYnVnIG9yIHRyYWNlIGRldGFpbHMgYWltZWQgYXQgZGV2ZWxvcGVycy4gKi9cbiAgZGVidWcgPSBcImRlYnVnXCIsXG4gIC8qKiBAZGVzY3JpcHRpb24gRXh0cmVtZWx5IGNoYXR0eSBvciBwbGF5ZnVsIGxvZyBlbnRyaWVzLiAqL1xuICBzaWxseSA9IFwic2lsbHlcIixcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTnVtZXJpYyB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGxvZyBsZXZlbHMuXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBhIG51bWVyaWMgcmVwcmVzZW50YXRpb24gb2YgbG9nIGxldmVscyBmb3IgY29tcGFyaXNvbiBhbmQgZmlsdGVyaW5nLlxuICogQHR5cGVkZWYge09iamVjdH0gTnVtZXJpY0xvZ0xldmVsc1NoYXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmVuY2htYXJrIC0gTnVtZXJpYyB2YWx1ZSBmb3IgYmVuY2htYXJrIGxldmVsICgwKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBlcnJvciAtIE51bWVyaWMgdmFsdWUgZm9yIGVycm9yIGxldmVsICgyKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpbmZvIC0gTnVtZXJpYyB2YWx1ZSBmb3IgaW5mbyBsZXZlbCAoNCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmVyYm9zZSAtIE51bWVyaWMgdmFsdWUgZm9yIHZlcmJvc2UgbGV2ZWwgKDYpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRlYnVnIC0gTnVtZXJpYyB2YWx1ZSBmb3IgZGVidWcgbGV2ZWwgKDcpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHNpbGx5IC0gTnVtZXJpYyB2YWx1ZSBmb3Igc2lsbHkgbGV2ZWwgKDkpLlxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbi8qKlxuICogQGRlc2NyaXB0aW9uIE51bWVyaWMgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBsb2cgbGV2ZWxzLlxuICogQHN1bW1hcnkgUHJvdmlkZXMgYSBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIGxvZyBsZXZlbHMgZm9yIGNvbXBhcmlzb24gYW5kIGZpbHRlcmluZy5cbiAqIEBjb25zdCBOdW1lcmljTG9nTGV2ZWxzXG4gKiBAdHlwZSB7TnVtZXJpY0xvZ0xldmVsc1NoYXBlfVxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBOdW1lcmljTG9nTGV2ZWxzID0ge1xuICBiZW5jaG1hcms6IDAsXG4gIGVycm9yOiAyLFxuICBpbmZvOiA0LFxuICB2ZXJib3NlOiA2LFxuICBkZWJ1ZzogNyxcbiAgc2lsbHk6IDksXG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFbnVtIGZvciBsb2dnaW5nIG91dHB1dCBtb2Rlcy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgZGlmZmVyZW50IG91dHB1dCBmb3JtYXRzIGZvciBsb2cgbWVzc2FnZXMuXG4gKiBAZW51bSB7c3RyaW5nfVxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBlbnVtIExvZ2dpbmdNb2RlIHtcbiAgLyoqIFJhdyB0ZXh0IGZvcm1hdCBmb3IgaHVtYW4gcmVhZGFiaWxpdHkgKi9cbiAgUkFXID0gXCJyYXdcIixcbiAgLyoqIEpTT04gZm9ybWF0IGZvciBtYWNoaW5lIHBhcnNpbmcgKi9cbiAgSlNPTiA9IFwianNvblwiLFxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IHRoZW1lIGZvciBzdHlsaW5nIGxvZyBvdXRwdXQuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBkZWZhdWx0IGNvbG9yIGFuZCBzdHlsZSBzZXR0aW5ncyBmb3IgdmFyaW91cyBjb21wb25lbnRzIG9mIGxvZyBtZXNzYWdlcy5cbiAqIEB0eXBlZGVmIHtUaGVtZX0gRGVmYXVsdFRoZW1lXG4gKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3MgLSBTdHlsaW5nIGZvciBjbGFzcyBuYW1lcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjbGFzcy5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgY2xhc3MgbmFtZXMgKDM0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBpZCAtIFN0eWxpbmcgZm9yIGlkZW50aWZpZXJzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGlkLmZnIC0gRm9yZWdyb3VuZCBjb2xvciBjb2RlIGZvciBpZGVudGlmaWVycyAoMzYpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IHN0YWNrIC0gU3R5bGluZyBmb3Igc3RhY2sgdHJhY2VzIChlbXB0eSBvYmplY3QpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IHRpbWVzdGFtcCAtIFN0eWxpbmcgZm9yIHRpbWVzdGFtcHMgKGVtcHR5IG9iamVjdCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbWVzc2FnZSAtIFN0eWxpbmcgZm9yIGRpZmZlcmVudCB0eXBlcyBvZiBtZXNzYWdlcy5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBtZXNzYWdlLmVycm9yIC0gU3R5bGluZyBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbWVzc2FnZS5lcnJvci5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgZXJyb3IgbWVzc2FnZXMgKDMxKS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBtZXRob2QgLSBTdHlsaW5nIGZvciBtZXRob2QgbmFtZXMgKGVtcHR5IG9iamVjdCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwgLSBTdHlsaW5nIGZvciBkaWZmZXJlbnQgbG9nIGxldmVscy5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dMZXZlbC5lcnJvciAtIFN0eWxpbmcgZm9yIGVycm9yIGxldmVsIGxvZ3MuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbG9nTGV2ZWwuZXJyb3IuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGVycm9yIGxldmVsIGxvZ3MgKDMxKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IGxvZ0xldmVsLmVycm9yLnN0eWxlIC0gU3R5bGUgYXR0cmlidXRlcyBmb3IgZXJyb3IgbGV2ZWwgbG9ncyAoW1wiYm9sZFwiXSkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwuaW5mbyAtIFN0eWxpbmcgZm9yIGluZm8gbGV2ZWwgbG9ncyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dMZXZlbC52ZXJib3NlIC0gU3R5bGluZyBmb3IgdmVyYm9zZSBsZXZlbCBsb2dzIChlbXB0eSBvYmplY3QpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsLmRlYnVnIC0gU3R5bGluZyBmb3IgZGVidWcgbGV2ZWwgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb2dMZXZlbC5kZWJ1Zy5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgZGVidWcgbGV2ZWwgbG9ncyAoMzMpLlxuICogQGNvbnN0IERlZmF1bHRUaGVtZVxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0VGhlbWU6IFRoZW1lID0ge1xuICBhcHA6IHt9LFxuICBzZXBhcmF0b3I6IHt9LFxuICBjbGFzczoge1xuICAgIGZnOiAzNCxcbiAgfSxcbiAgaWQ6IHtcbiAgICBmZzogMzYsXG4gIH0sXG4gIHN0YWNrOiB7fSxcbiAgdGltZXN0YW1wOiB7fSxcbiAgbWVzc2FnZToge1xuICAgIGVycm9yOiB7XG4gICAgICBmZzogMzEsXG4gICAgfSxcbiAgfSxcbiAgbWV0aG9kOiB7fSxcbiAgbG9nTGV2ZWw6IHtcbiAgICBiZW5jaG1hcms6IHtcbiAgICAgIGZnOiAzMixcbiAgICAgIHN0eWxlOiBbXCJib2xkXCJdLFxuICAgIH0sXG4gICAgZXJyb3I6IHtcbiAgICAgIGZnOiAzMSxcbiAgICAgIHN0eWxlOiBbXCJib2xkXCJdLFxuICAgIH0sXG4gICAgaW5mbzoge1xuICAgICAgZmc6IDM0LFxuICAgICAgc3R5bGU6IFtcImJvbGRcIl0sXG4gICAgfSxcbiAgICB2ZXJib3NlOiB7XG4gICAgICBmZzogMzQsXG4gICAgICBzdHlsZTogW1wiYm9sZFwiXSxcbiAgICB9LFxuICAgIGRlYnVnOiB7XG4gICAgICBmZzogMzMsXG4gICAgICBzdHlsZTogW1wiYm9sZFwiXSxcbiAgICB9LFxuICB9LFxufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBsb2dnaW5nLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIGxvZ2dpbmcgc3lzdGVtLCBpbmNsdWRpbmcgdmVyYm9zaXR5LCBsb2cgbGV2ZWwsIHN0eWxpbmcsIGFuZCB0aW1lc3RhbXAgZm9ybWF0LlxuICogQGNvbnN0IERlZmF1bHRMb2dnaW5nQ29uZmlnXG4gKiBAdHlwZWRlZiB7TG9nZ2luZ0NvbmZpZ30gRGVmYXVsdExvZ2dpbmdDb25maWdcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB2ZXJib3NlIC0gVmVyYm9zaXR5IGxldmVsICgwKS5cbiAqIEBwcm9wZXJ0eSB7TG9nTGV2ZWx9IGxldmVsIC0gRGVmYXVsdCBsb2cgbGV2ZWwgKExvZ0xldmVsLmluZm8pLlxuICogQHByb3BlcnR5IHtib29sZWFufSBsb2dMZXZlbCAtIFdoZXRoZXIgdG8gZGlzcGxheSBsb2cgbGV2ZWwgaW4gb3V0cHV0ICh0cnVlKS5cbiAqIEBwcm9wZXJ0eSB7TG9nZ2luZ01vZGV9IG1vZGUgLSBPdXRwdXQgZm9ybWF0IG1vZGUgKExvZ2dpbmdNb2RlLlJBVykuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHN0eWxlIC0gV2hldGhlciB0byBhcHBseSBzdHlsaW5nIHRvIGxvZyBvdXRwdXQgKGZhbHNlKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZXBhcmF0b3IgLSBTZXBhcmF0b3IgYmV0d2VlbiBsb2cgY29tcG9uZW50cyAoXCIgLSBcIikuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHRpbWVzdGFtcCAtIFdoZXRoZXIgdG8gaW5jbHVkZSB0aW1lc3RhbXBzIGluIGxvZyBtZXNzYWdlcyAodHJ1ZSkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGltZXN0YW1wRm9ybWF0IC0gRm9ybWF0IGZvciB0aW1lc3RhbXBzIChcIkhIOm1tOnNzLlNTU1wiKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY29udGV4dCAtIFdoZXRoZXIgdG8gaW5jbHVkZSBjb250ZXh0IGluZm9ybWF0aW9uIGluIGxvZyBtZXNzYWdlcyAodHJ1ZSkuXG4gKiBAcHJvcGVydHkge1RoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSB0byB1c2UgZm9yIHN0eWxpbmcgbG9nIG1lc3NhZ2VzIChEZWZhdWx0VGhlbWUpLlxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0TG9nZ2luZ0NvbmZpZzogTG9nZ2luZ0NvbmZpZyA9IHtcbiAgZW52OiBcImRldmVsb3BtZW50XCIsXG4gIHZlcmJvc2U6IDAsXG4gIGxldmVsOiBMb2dMZXZlbC5pbmZvLFxuICBsb2dMZXZlbDogdHJ1ZSxcbiAgc3R5bGU6IGZhbHNlLFxuICBjb250ZXh0U2VwYXJhdG9yOiBcIi5cIixcbiAgc2VwYXJhdG9yOiBcIi1cIixcbiAgdGltZXN0YW1wOiB0cnVlLFxuICB0aW1lc3RhbXBGb3JtYXQ6IFwiSEg6bW06c3MuU1NTXCIsXG4gIGNvbnRleHQ6IHRydWUsXG4gIGZvcm1hdDogTG9nZ2luZ01vZGUuUkFXLFxuICBwYXR0ZXJuOlxuICAgIFwie2xldmVsfSBbe3RpbWVzdGFtcH1dIHthcHB9IHtjb250ZXh0fSB7c2VwYXJhdG9yfSB7bWVzc2FnZX0ge3N0YWNrfVwiLFxuICB0aGVtZTogRGVmYXVsdFRoZW1lLFxufTtcbiJdfQ==
|
package/lib/constants.d.ts
CHANGED
|
@@ -1,10 +1,27 @@
|
|
|
1
1
|
import { LoggingConfig, Theme } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* @description Global key used to store environment variables in browser contexts.
|
|
4
|
+
* @summary Enables the logging environment helpers to locate serialized environment configuration on `globalThis`.
|
|
5
|
+
* @const BrowserEnvKey
|
|
6
|
+
* @type {string}
|
|
7
|
+
* @memberOf module:Logging
|
|
8
|
+
*/
|
|
2
9
|
export declare const BrowserEnvKey = "ENV";
|
|
3
10
|
/**
|
|
4
11
|
* @description Delimiter used for composing nested environment variable names.
|
|
5
12
|
* @summary Joins parent and child keys when mapping object paths to ENV strings.
|
|
13
|
+
* @const ENV_PATH_DELIMITER
|
|
14
|
+
* @type {string}
|
|
15
|
+
* @memberOf module:Logging
|
|
6
16
|
*/
|
|
7
17
|
export declare const ENV_PATH_DELIMITER = "__";
|
|
18
|
+
/**
|
|
19
|
+
* @description Default prefix and suffix used for template placeholders.
|
|
20
|
+
* @summary Provides wrapper strings applied when interpolating messages with {@link patchPlaceholders}.
|
|
21
|
+
* @const DefaultPlaceholderWrappers
|
|
22
|
+
* @type {string[]}
|
|
23
|
+
* @memberOf module:Logging
|
|
24
|
+
*/
|
|
8
25
|
export declare const DefaultPlaceholderWrappers: string[];
|
|
9
26
|
/**
|
|
10
27
|
* @description Enum for log levels.
|
|
@@ -14,21 +31,24 @@ export declare const DefaultPlaceholderWrappers: string[];
|
|
|
14
31
|
* @memberOf module:Logging
|
|
15
32
|
*/
|
|
16
33
|
export declare enum LogLevel {
|
|
17
|
-
/**
|
|
34
|
+
/** @description Benchmark events that capture performance metrics. */
|
|
35
|
+
benchmark = "benchmark",
|
|
36
|
+
/** @description Error events that indicate failures requiring attention. */
|
|
18
37
|
error = "error",
|
|
19
|
-
/**
|
|
38
|
+
/** @description Informational events describing normal operation. */
|
|
20
39
|
info = "info",
|
|
21
|
-
/**
|
|
40
|
+
/** @description Verbose diagnostic information for detailed tracing. */
|
|
22
41
|
verbose = "verbose",
|
|
23
|
-
/** Debug or trace
|
|
42
|
+
/** @description Debug or trace details aimed at developers. */
|
|
24
43
|
debug = "debug",
|
|
25
|
-
/**
|
|
44
|
+
/** @description Extremely chatty or playful log entries. */
|
|
26
45
|
silly = "silly"
|
|
27
46
|
}
|
|
28
47
|
/**
|
|
29
48
|
* @description Numeric values associated with log levels.
|
|
30
49
|
* @summary Provides a numeric representation of log levels for comparison and filtering.
|
|
31
|
-
* @
|
|
50
|
+
* @typedef {Object} NumericLogLevelsShape
|
|
51
|
+
* @property {number} benchmark - Numeric value for benchmark level (0).
|
|
32
52
|
* @property {number} error - Numeric value for error level (2).
|
|
33
53
|
* @property {number} info - Numeric value for info level (4).
|
|
34
54
|
* @property {number} verbose - Numeric value for verbose level (6).
|
|
@@ -36,7 +56,15 @@ export declare enum LogLevel {
|
|
|
36
56
|
* @property {number} silly - Numeric value for silly level (9).
|
|
37
57
|
* @memberOf module:Logging
|
|
38
58
|
*/
|
|
59
|
+
/**
|
|
60
|
+
* @description Numeric values associated with log levels.
|
|
61
|
+
* @summary Provides a numeric representation of log levels for comparison and filtering.
|
|
62
|
+
* @const NumericLogLevels
|
|
63
|
+
* @type {NumericLogLevelsShape}
|
|
64
|
+
* @memberOf module:Logging
|
|
65
|
+
*/
|
|
39
66
|
export declare const NumericLogLevels: {
|
|
67
|
+
benchmark: number;
|
|
40
68
|
error: number;
|
|
41
69
|
info: number;
|
|
42
70
|
verbose: number;
|
|
@@ -58,7 +86,6 @@ export declare enum LoggingMode {
|
|
|
58
86
|
/**
|
|
59
87
|
* @description Default theme for styling log output.
|
|
60
88
|
* @summary Defines the default color and style settings for various components of log messages.
|
|
61
|
-
* @const DefaultTheme
|
|
62
89
|
* @typedef {Theme} DefaultTheme
|
|
63
90
|
* @property {Object} class - Styling for class names.
|
|
64
91
|
* @property {number} class.fg - Foreground color code for class names (34).
|
|
@@ -78,6 +105,7 @@ export declare enum LoggingMode {
|
|
|
78
105
|
* @property {Object} logLevel.verbose - Styling for verbose level logs (empty object).
|
|
79
106
|
* @property {Object} logLevel.debug - Styling for debug level logs.
|
|
80
107
|
* @property {number} logLevel.debug.fg - Foreground color code for debug level logs (33).
|
|
108
|
+
* @const DefaultTheme
|
|
81
109
|
* @memberOf module:Logging
|
|
82
110
|
*/
|
|
83
111
|
export declare const DefaultTheme: Theme;
|
package/lib/decorators.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.log = log;
|
|
4
|
+
exports.benchmark = benchmark;
|
|
4
5
|
exports.debug = debug;
|
|
5
6
|
exports.info = info;
|
|
6
7
|
exports.silly = silly;
|
|
@@ -8,13 +9,16 @@ exports.verbose = verbose;
|
|
|
8
9
|
exports.final = final;
|
|
9
10
|
const constants_1 = require("./constants.cjs");
|
|
10
11
|
const logging_1 = require("./logging.cjs");
|
|
12
|
+
const time_1 = require("./time.cjs");
|
|
13
|
+
const LoggedClass_1 = require("./LoggedClass.cjs");
|
|
11
14
|
/**
|
|
12
|
-
* @description Method decorator for logging function calls
|
|
13
|
-
* @summary
|
|
14
|
-
* @param {LogLevel} level -
|
|
15
|
-
* @param {
|
|
16
|
-
* @param {
|
|
17
|
-
* @
|
|
15
|
+
* @description Method decorator for logging function calls.
|
|
16
|
+
* @summary Wraps class methods to automatically log entry, exit, timing, and optional custom messages at a configurable {@link LogLevel}.
|
|
17
|
+
* @param {LogLevel} level - Log level applied to the generated log statements (defaults to `LogLevel.info`).
|
|
18
|
+
* @param {number} [verbosity=0] - Verbosity threshold required for the entry log to appear.
|
|
19
|
+
* @param {ArgFormatFunction} [entryMessage] - Formatter invoked with the original method arguments to describe the invocation.
|
|
20
|
+
* @param {ReturnFormatFunction} [exitMessage] - Optional formatter that describes the outcome or failure of the call.
|
|
21
|
+
* @return {function(any, any, PropertyDescriptor): void} Method decorator proxy that injects logging behavior.
|
|
18
22
|
* @function log
|
|
19
23
|
* @mermaid
|
|
20
24
|
* sequenceDiagram
|
|
@@ -39,93 +43,153 @@ const logging_1 = require("./logging.cjs");
|
|
|
39
43
|
* end
|
|
40
44
|
* @category Method Decorators
|
|
41
45
|
*/
|
|
42
|
-
function log(level = constants_1.LogLevel.info,
|
|
43
|
-
return function (target, propertyKey, descriptor) {
|
|
44
|
-
if (!descriptor)
|
|
46
|
+
function log(level = constants_1.LogLevel.info, verbosity = 0, entryMessage = (...args) => `called with ${args}`, exitMessage) {
|
|
47
|
+
return function log(target, propertyKey, descriptor) {
|
|
48
|
+
if (!descriptor || typeof descriptor === "number")
|
|
45
49
|
throw new Error(`Logging decoration only applies to methods`);
|
|
46
|
-
const logger =
|
|
50
|
+
const logger = target instanceof LoggedClass_1.LoggedClass
|
|
51
|
+
? target["log"].for(target[propertyKey])
|
|
52
|
+
: logging_1.Logging.for(target).for(target[propertyKey]);
|
|
47
53
|
const method = logger[level].bind(logger);
|
|
48
54
|
const originalMethod = descriptor.value;
|
|
49
55
|
descriptor.value = new Proxy(originalMethod, {
|
|
50
56
|
apply(fn, thisArg, args) {
|
|
51
|
-
method(
|
|
52
|
-
|
|
57
|
+
method(entryMessage(...args), verbosity);
|
|
58
|
+
try {
|
|
59
|
+
const result = Reflect.apply(fn, thisArg, args);
|
|
60
|
+
if (result instanceof Promise) {
|
|
61
|
+
return result
|
|
62
|
+
.then((r) => {
|
|
63
|
+
if (exitMessage)
|
|
64
|
+
method(exitMessage(undefined, r));
|
|
65
|
+
return r;
|
|
66
|
+
})
|
|
67
|
+
.catch((e) => {
|
|
68
|
+
if (exitMessage)
|
|
69
|
+
logger.error(exitMessage(e));
|
|
70
|
+
throw e;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (exitMessage)
|
|
74
|
+
method(exitMessage(undefined, result));
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
if (exitMessage)
|
|
79
|
+
logger.error(exitMessage(err));
|
|
80
|
+
throw err;
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
return descriptor;
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* @description Method decorator that records execution time at the benchmark level.
|
|
89
|
+
* @summary Wraps the target method to emit {@link Logger.benchmark} entries capturing completion time or failure latency.
|
|
90
|
+
* @return {function(any, any, PropertyDescriptor): void} Method decorator proxy that benchmarks the original implementation.
|
|
91
|
+
* @function benchmark
|
|
92
|
+
* @mermaid
|
|
93
|
+
* sequenceDiagram
|
|
94
|
+
* participant Caller
|
|
95
|
+
* participant Decorator as benchmark
|
|
96
|
+
* participant Method as Original Method
|
|
97
|
+
* Caller->>Decorator: invoke()
|
|
98
|
+
* Decorator->>Method: Reflect.apply(...)
|
|
99
|
+
* alt Promise result
|
|
100
|
+
* Method-->>Decorator: Promise
|
|
101
|
+
* Decorator->>Decorator: attach then()
|
|
102
|
+
* Decorator->>Decorator: log completion duration
|
|
103
|
+
* else Synchronous result
|
|
104
|
+
* Method-->>Decorator: value
|
|
105
|
+
* Decorator->>Decorator: log completion duration
|
|
106
|
+
* end
|
|
107
|
+
* Decorator-->>Caller: return result
|
|
108
|
+
* @category Method Decorators
|
|
109
|
+
*/
|
|
110
|
+
function benchmark() {
|
|
111
|
+
return function benchmark(target, propertyKey, descriptor) {
|
|
112
|
+
if (!descriptor || typeof descriptor === "number")
|
|
113
|
+
throw new Error(`benchmark decoration only applies to methods`);
|
|
114
|
+
const logger = target instanceof LoggedClass_1.LoggedClass
|
|
115
|
+
? target["log"].for(target[propertyKey])
|
|
116
|
+
: logging_1.Logging.for(target).for(target[propertyKey]);
|
|
117
|
+
const originalMethod = descriptor.value;
|
|
118
|
+
descriptor.value = new Proxy(originalMethod, {
|
|
119
|
+
apply(fn, thisArg, args) {
|
|
120
|
+
const start = (0, time_1.now)();
|
|
53
121
|
try {
|
|
54
122
|
const result = Reflect.apply(fn, thisArg, args);
|
|
55
123
|
if (result instanceof Promise) {
|
|
56
124
|
return result.then((r) => {
|
|
57
|
-
|
|
58
|
-
method(`completed in ${Date.now() - start}ms`, verbosity);
|
|
125
|
+
logger.benchmark(`completed in ${(0, time_1.now)() - start}ms`);
|
|
59
126
|
return r;
|
|
60
127
|
});
|
|
61
128
|
}
|
|
62
|
-
|
|
63
|
-
method(`completed in ${Date.now() - start}ms`, verbosity);
|
|
129
|
+
logger.benchmark(`completed in ${(0, time_1.now)() - start}ms`);
|
|
64
130
|
return result;
|
|
65
131
|
}
|
|
66
132
|
catch (err) {
|
|
67
|
-
|
|
68
|
-
method(`failed in ${Date.now() - start}ms`, verbosity);
|
|
133
|
+
logger.benchmark(`failed in ${(0, time_1.now)() - start}ms`);
|
|
69
134
|
throw err;
|
|
70
135
|
}
|
|
71
136
|
},
|
|
72
137
|
});
|
|
138
|
+
return descriptor;
|
|
73
139
|
};
|
|
74
140
|
}
|
|
75
141
|
/**
|
|
76
|
-
* @description Method decorator for logging function calls with debug level
|
|
77
|
-
* @summary Convenience wrapper around
|
|
78
|
-
* @
|
|
79
|
-
* @return {Function} A method decorator that wraps the original method with debug logging
|
|
142
|
+
* @description Method decorator for logging function calls with debug level.
|
|
143
|
+
* @summary Convenience wrapper around {@link log} that logs using `LogLevel.debug`.
|
|
144
|
+
* @return {function(any, any, PropertyDescriptor): void} Debug-level logging decorator.
|
|
80
145
|
* @function debug
|
|
81
146
|
* @category Method Decorators
|
|
82
147
|
*/
|
|
83
|
-
function debug(
|
|
84
|
-
return log(constants_1.LogLevel.debug,
|
|
148
|
+
function debug() {
|
|
149
|
+
return log(constants_1.LogLevel.debug, 0, (...args) => `called with ${args}`, (e, result) => e
|
|
150
|
+
? `Failed with: ${e}`
|
|
151
|
+
: result
|
|
152
|
+
? `Completed with ${JSON.stringify(result)}`
|
|
153
|
+
: "completed");
|
|
85
154
|
}
|
|
86
155
|
/**
|
|
87
|
-
* @description Method decorator for logging function calls with info level
|
|
88
|
-
* @summary Convenience wrapper around
|
|
89
|
-
* @
|
|
90
|
-
* @return {Function} A method decorator that wraps the original method with info logging
|
|
156
|
+
* @description Method decorator for logging function calls with info level.
|
|
157
|
+
* @summary Convenience wrapper around {@link log} that logs using `LogLevel.info`.
|
|
158
|
+
* @return {function(any, any, PropertyDescriptor): void} Info-level logging decorator.
|
|
91
159
|
* @function info
|
|
92
160
|
* @category Method Decorators
|
|
93
161
|
*/
|
|
94
|
-
function info(
|
|
95
|
-
return log(constants_1.LogLevel.info
|
|
162
|
+
function info() {
|
|
163
|
+
return log(constants_1.LogLevel.info);
|
|
96
164
|
}
|
|
97
165
|
/**
|
|
98
|
-
* @description Method decorator for logging function calls with silly level
|
|
99
|
-
* @summary Convenience wrapper around
|
|
100
|
-
* @
|
|
101
|
-
* @return {Function} A method decorator that wraps the original method with silly logging
|
|
166
|
+
* @description Method decorator for logging function calls with silly level.
|
|
167
|
+
* @summary Convenience wrapper around {@link log} that logs using `LogLevel.silly`.
|
|
168
|
+
* @return {function(any, any, PropertyDescriptor): void} Silly-level logging decorator.
|
|
102
169
|
* @function silly
|
|
103
170
|
* @category Method Decorators
|
|
104
171
|
*/
|
|
105
|
-
function silly(
|
|
106
|
-
return log(constants_1.LogLevel.silly
|
|
172
|
+
function silly() {
|
|
173
|
+
return log(constants_1.LogLevel.silly);
|
|
107
174
|
}
|
|
108
175
|
/**
|
|
109
|
-
* @description Method decorator for logging function calls with verbose level
|
|
110
|
-
* @summary Convenience wrapper around
|
|
111
|
-
* @param {number} verbosity -
|
|
112
|
-
* @
|
|
113
|
-
* @return {Function} A method decorator that wraps the original method with verbose logging
|
|
176
|
+
* @description Method decorator for logging function calls with verbose level.
|
|
177
|
+
* @summary Convenience wrapper around {@link log} that logs using `LogLevel.verbose` with configurable verbosity and optional benchmarking.
|
|
178
|
+
* @param {number|boolean} verbosity - Verbosity level for log filtering or flag to enable benchmarking.
|
|
179
|
+
* @return {function(any, any,PropertyDescriptor): void} Verbose logging decorator.
|
|
114
180
|
* @function verbose
|
|
115
181
|
* @category Method Decorators
|
|
116
182
|
*/
|
|
117
|
-
function verbose(verbosity = 0
|
|
118
|
-
if (
|
|
119
|
-
benchmark = verbosity;
|
|
183
|
+
function verbose(verbosity = 0) {
|
|
184
|
+
if (!verbosity) {
|
|
120
185
|
verbosity = 0;
|
|
121
186
|
}
|
|
122
|
-
return log(constants_1.LogLevel.verbose,
|
|
187
|
+
return log(constants_1.LogLevel.verbose, verbosity);
|
|
123
188
|
}
|
|
124
189
|
/**
|
|
125
|
-
* @description Creates a decorator that makes a method non-configurable
|
|
126
|
-
* @summary
|
|
127
|
-
*
|
|
128
|
-
* @return {Function} A decorator function that can be applied to methods
|
|
190
|
+
* @description Creates a decorator that makes a method non-configurable.
|
|
191
|
+
* @summary Prevents overriding by marking the method descriptor as non-configurable, throwing if applied to non-method targets.
|
|
192
|
+
* @return {function(object, any, PropertyDescriptor): PropertyDescriptor|undefined} Decorator that hardens the method descriptor.
|
|
129
193
|
* @function final
|
|
130
194
|
* @category Method Decorators
|
|
131
195
|
*/
|
|
@@ -139,4 +203,4 @@ function final() {
|
|
|
139
203
|
return descriptor;
|
|
140
204
|
};
|
|
141
205
|
}
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0NBLGtCQXVDQztBQVVELHNCQUVDO0FBVUQsb0JBRUM7QUFVRCxzQkFFQztBQTZDRCwwQkFNQztBQVVELHNCQWFDO0FBdkxELCtDQUF1QztBQUN2QywyQ0FBb0M7QUFFcEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILFNBQWdCLEdBQUcsQ0FDakIsUUFBa0Isb0JBQVEsQ0FBQyxJQUFJLEVBQy9CLFlBQXFCLEtBQUssRUFDMUIsU0FBUyxHQUFHLENBQUM7SUFFYixPQUFPLFVBQ0wsTUFBVyxFQUNYLFdBQWlCLEVBQ2pCLFVBQStCO1FBRS9CLElBQUksQ0FBQyxVQUFVO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLGlCQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUM1RCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBUSxDQUFDO1FBQ2pELE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFFeEMsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUU7WUFDM0MsS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBVztnQkFDNUIsTUFBTSxDQUFDLGVBQWUsSUFBSSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDO29CQUNILE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDaEQsSUFBSSxNQUFNLFlBQVksT0FBTyxFQUFFLENBQUM7d0JBQzlCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFOzRCQUM1QixJQUFJLFNBQVM7Z0NBQ1gsTUFBTSxDQUFDLGdCQUFnQixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7NEJBQzVELE9BQU8sQ0FBQyxDQUFDO3dCQUNYLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7b0JBQ0QsSUFBSSxTQUFTO3dCQUNYLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUM1RCxPQUFPLE1BQU0sQ0FBQztnQkFDaEIsQ0FBQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNiLElBQUksU0FBUzt3QkFBRSxNQUFNLENBQUMsYUFBYSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7b0JBQ3RFLE1BQU0sR0FBRyxDQUFDO2dCQUNaLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixLQUFLLENBQUMsWUFBcUIsS0FBSztJQUM5QyxPQUFPLEdBQUcsQ0FBQyxvQkFBUSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLElBQUksQ0FBQyxZQUFxQixLQUFLO0lBQzdDLE9BQU8sR0FBRyxDQUFDLG9CQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsS0FBSyxDQUFDLFlBQXFCLEtBQUs7SUFDOUMsT0FBTyxHQUFHLENBQUMsb0JBQVEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQW9DRDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLE9BQU8sQ0FBQyxZQUE4QixDQUFDLEVBQUUsU0FBbUI7SUFDMUUsSUFBSSxPQUFPLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNuQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLG9CQUFRLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLEtBQUs7SUFDbkIsT0FBTyxDQUNMLE1BQWMsRUFDZCxXQUFpQixFQUNqQixVQUErQixFQUMvQixFQUFFO1FBQ0YsSUFBSSxDQUFDLFVBQVU7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDakUsSUFBSSxVQUFVLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDN0IsVUFBVSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDbEMsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTWV0aG9kIGRlY29yYXRvciBmb3IgbG9nZ2luZyBmdW5jdGlvbiBjYWxsc1xuICogQHN1bW1hcnkgQ3JlYXRlcyBhIGRlY29yYXRvciB0aGF0IGxvZ3MgbWV0aG9kIGNhbGxzIHdpdGggc3BlY2lmaWVkIGxldmVsLCBiZW5jaG1hcmtpbmcsIGFuZCB2ZXJib3NpdHlcbiAqIEBwYXJhbSB7TG9nTGV2ZWx9IGxldmVsIC0gVGhlIGxvZyBsZXZlbCB0byB1c2UgKGRlZmF1bHQ6IExvZ0xldmVsLmluZm8pXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtiZW5jaG1hcms9ZmFsc2VdIC0gV2hldGhlciB0byBsb2cgZXhlY3V0aW9uIHRpbWUgKGRlZmF1bHQ6IGZhbHNlKVxuICogQHBhcmFtIHtudW1iZXJ9IFt2ZXJib3NpdHk9MF0gLSBUaGUgdmVyYm9zaXR5IGxldmVsIGZvciB0aGUgbG9nIG1lc3NhZ2VzIChkZWZhdWx0OiAwKVxuICogQHJldHVybiB7RnVuY3Rpb259IEEgbWV0aG9kIGRlY29yYXRvciB0aGF0IHdyYXBzIHRoZSBvcmlnaW5hbCBtZXRob2Qgd2l0aCBsb2dnaW5nXG4gKiBAZnVuY3Rpb24gbG9nXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBEZWNvcmF0b3IgYXMgbG9nIGRlY29yYXRvclxuICogICBwYXJ0aWNpcGFudCBNZXRob2QgYXMgT3JpZ2luYWwgTWV0aG9kXG4gKiAgIHBhcnRpY2lwYW50IExvZ2dlciBhcyBMb2dnaW5nIGluc3RhbmNlXG4gKlxuICogICBDbGllbnQtPj5EZWNvcmF0b3I6IGNhbGwgZGVjb3JhdGVkIG1ldGhvZFxuICogICBEZWNvcmF0b3ItPj5Mb2dnZXI6IGxvZyBtZXRob2QgY2FsbFxuICogICBEZWNvcmF0b3ItPj5NZXRob2Q6IGNhbGwgb3JpZ2luYWwgbWV0aG9kXG4gKiAgIGFsdCByZXN1bHQgaXMgUHJvbWlzZVxuICogICAgIE1ldGhvZC0tPj5EZWNvcmF0b3I6IHJldHVybiBQcm9taXNlXG4gKiAgICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBhdHRhY2ggdGhlbiBoYW5kbGVyXG4gKiAgICAgTm90ZSBvdmVyIERlY29yYXRvcjogUHJvbWlzZSByZXNvbHZlc1xuICogICAgIERlY29yYXRvci0+PkxvZ2dlcjogbG9nIGJlbmNobWFyayAoaWYgZW5hYmxlZClcbiAqICAgICBEZWNvcmF0b3ItLT4+Q2xpZW50OiByZXR1cm4gcmVzdWx0XG4gKiAgIGVsc2UgcmVzdWx0IGlzIG5vdCBQcm9taXNlXG4gKiAgICAgTWV0aG9kLS0+PkRlY29yYXRvcjogcmV0dXJuIHJlc3VsdFxuICogICAgIERlY29yYXRvci0+PkxvZ2dlcjogbG9nIGJlbmNobWFyayAoaWYgZW5hYmxlZClcbiAqICAgICBEZWNvcmF0b3ItLT4+Q2xpZW50OiByZXR1cm4gcmVzdWx0XG4gKiAgIGVuZFxuICogQGNhdGVnb3J5IE1ldGhvZCBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2coXG4gIGxldmVsOiBMb2dMZXZlbCA9IExvZ0xldmVsLmluZm8sXG4gIGJlbmNobWFyazogYm9vbGVhbiA9IGZhbHNlLFxuICB2ZXJib3NpdHkgPSAwXG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChcbiAgICB0YXJnZXQ6IGFueSxcbiAgICBwcm9wZXJ0eUtleT86IGFueSxcbiAgICBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yXG4gICkge1xuICAgIGlmICghZGVzY3JpcHRvcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTG9nZ2luZyBkZWNvcmF0aW9uIG9ubHkgYXBwbGllcyB0byBtZXRob2RzYCk7XG4gICAgY29uc3QgbG9nZ2VyID0gTG9nZ2luZy5mb3IodGFyZ2V0KS5mb3IodGFyZ2V0W3Byb3BlcnR5S2V5XSk7XG4gICAgY29uc3QgbWV0aG9kID0gbG9nZ2VyW2xldmVsXS5iaW5kKGxvZ2dlcikgYXMgYW55O1xuICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBuZXcgUHJveHkob3JpZ2luYWxNZXRob2QsIHtcbiAgICAgIGFwcGx5KGZuLCB0aGlzQXJnLCBhcmdzOiBhbnlbXSkge1xuICAgICAgICBtZXRob2QoYGNhbGxlZCB3aXRoICR7YXJnc31gLCB2ZXJib3NpdHkpO1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdC5hcHBseShmbiwgdGhpc0FyZywgYXJncyk7XG4gICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChiZW5jaG1hcmspXG4gICAgICAgICAgICAgICAgbWV0aG9kKGBjb21wbGV0ZWQgaW4gJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgLCB2ZXJib3NpdHkpO1xuICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYmVuY2htYXJrKVxuICAgICAgICAgICAgbWV0aG9kKGBjb21wbGV0ZWQgaW4gJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgLCB2ZXJib3NpdHkpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChiZW5jaG1hcmspIG1ldGhvZChgZmFpbGVkIGluICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYCwgdmVyYm9zaXR5KTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1ldGhvZCBkZWNvcmF0b3IgZm9yIGxvZ2dpbmcgZnVuY3Rpb24gY2FsbHMgd2l0aCBkZWJ1ZyBsZXZlbFxuICogQHN1bW1hcnkgQ29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgdGhlIGxvZyBkZWNvcmF0b3IgdGhhdCB1c2VzIExvZ0xldmVsLmRlYnVnXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtiZW5jaG1hcms9ZmFsc2VdIC0gV2hldGhlciB0byBsb2cgZXhlY3V0aW9uIHRpbWUgKGRlZmF1bHQ6IGZhbHNlKVxuICogQHJldHVybiB7RnVuY3Rpb259IEEgbWV0aG9kIGRlY29yYXRvciB0aGF0IHdyYXBzIHRoZSBvcmlnaW5hbCBtZXRob2Qgd2l0aCBkZWJ1ZyBsb2dnaW5nXG4gKiBAZnVuY3Rpb24gZGVidWdcbiAqIEBjYXRlZ29yeSBNZXRob2QgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVidWcoYmVuY2htYXJrOiBib29sZWFuID0gZmFsc2UpIHtcbiAgcmV0dXJuIGxvZyhMb2dMZXZlbC5kZWJ1ZywgYmVuY2htYXJrKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTWV0aG9kIGRlY29yYXRvciBmb3IgbG9nZ2luZyBmdW5jdGlvbiBjYWxscyB3aXRoIGluZm8gbGV2ZWxcbiAqIEBzdW1tYXJ5IENvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIHRoZSBsb2cgZGVjb3JhdG9yIHRoYXQgdXNlcyBMb2dMZXZlbC5pbmZvXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtiZW5jaG1hcms9ZmFsc2VdIC0gV2hldGhlciB0byBsb2cgZXhlY3V0aW9uIHRpbWUgKGRlZmF1bHQ6IGZhbHNlKVxuICogQHJldHVybiB7RnVuY3Rpb259IEEgbWV0aG9kIGRlY29yYXRvciB0aGF0IHdyYXBzIHRoZSBvcmlnaW5hbCBtZXRob2Qgd2l0aCBpbmZvIGxvZ2dpbmdcbiAqIEBmdW5jdGlvbiBpbmZvXG4gKiBAY2F0ZWdvcnkgTWV0aG9kIERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZm8oYmVuY2htYXJrOiBib29sZWFuID0gZmFsc2UpIHtcbiAgcmV0dXJuIGxvZyhMb2dMZXZlbC5pbmZvLCBiZW5jaG1hcmspO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNZXRob2QgZGVjb3JhdG9yIGZvciBsb2dnaW5nIGZ1bmN0aW9uIGNhbGxzIHdpdGggc2lsbHkgbGV2ZWxcbiAqIEBzdW1tYXJ5IENvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIHRoZSBsb2cgZGVjb3JhdG9yIHRoYXQgdXNlcyBMb2dMZXZlbC5zaWxseVxuICogQHBhcmFtIHtib29sZWFufSBbYmVuY2htYXJrPWZhbHNlXSAtIFdoZXRoZXIgdG8gbG9nIGV4ZWN1dGlvbiB0aW1lIChkZWZhdWx0OiBmYWxzZSlcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIG1ldGhvZCBkZWNvcmF0b3IgdGhhdCB3cmFwcyB0aGUgb3JpZ2luYWwgbWV0aG9kIHdpdGggc2lsbHkgbG9nZ2luZ1xuICogQGZ1bmN0aW9uIHNpbGx5XG4gKiBAY2F0ZWdvcnkgTWV0aG9kIERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpbGx5KGJlbmNobWFyazogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIHJldHVybiBsb2coTG9nTGV2ZWwuc2lsbHksIGJlbmNobWFyayk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1ldGhvZCBkZWNvcmF0b3IgZm9yIGxvZ2dpbmcgZnVuY3Rpb24gY2FsbHMgd2l0aCB2ZXJib3NlIGxldmVsXG4gKiBAc3VtbWFyeSBDb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCB0aGUgbG9nIGRlY29yYXRvciB0aGF0IHVzZXMgTG9nTGV2ZWwudmVyYm9zZSB3aXRoIGNvbmZpZ3VyYWJsZSB2ZXJib3NpdHlcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIG1ldGhvZCBkZWNvcmF0b3IgdGhhdCB3cmFwcyB0aGUgb3JpZ2luYWwgbWV0aG9kIHdpdGggdmVyYm9zZSBsb2dnaW5nXG4gKiBAZnVuY3Rpb24gdmVyYm9zZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyYm9zZSgpOiAoXG4gIHRhcmdldDogYW55LFxuICBwcm9wZXJ0eUtleT86IGFueSxcbiAgZGVzY3JpcHRvcj86IGFueVxuKSA9PiB2b2lkO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNZXRob2QgZGVjb3JhdG9yIGZvciBsb2dnaW5nIGZ1bmN0aW9uIGNhbGxzIHdpdGggdmVyYm9zZSBsZXZlbFxuICogQHN1bW1hcnkgQ29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgdGhlIGxvZyBkZWNvcmF0b3IgdGhhdCB1c2VzIExvZ0xldmVsLnZlcmJvc2Ugd2l0aCBjb25maWd1cmFibGUgdmVyYm9zaXR5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJlbmNobWFyayAtIFdoZXRoZXIgdG8gbG9nIGV4ZWN1dGlvbiB0aW1lXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBtZXRob2QgZGVjb3JhdG9yIHRoYXQgd3JhcHMgdGhlIG9yaWdpbmFsIG1ldGhvZCB3aXRoIHZlcmJvc2UgbG9nZ2luZ1xuICogQGZ1bmN0aW9uIHZlcmJvc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmJvc2UoXG4gIGJlbmNobWFyazogYm9vbGVhblxuKTogKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleT86IGFueSwgZGVzY3JpcHRvcj86IGFueSkgPT4gdm9pZDtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTWV0aG9kIGRlY29yYXRvciBmb3IgbG9nZ2luZyBmdW5jdGlvbiBjYWxscyB3aXRoIHZlcmJvc2UgbGV2ZWxcbiAqIEBzdW1tYXJ5IENvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIHRoZSBsb2cgZGVjb3JhdG9yIHRoYXQgdXNlcyBMb2dMZXZlbC52ZXJib3NlIHdpdGggY29uZmlndXJhYmxlIHZlcmJvc2l0eVxuICogQHBhcmFtIHtudW1iZXJ9IHZlcmJvc2l0eSAtIFRoZSB2ZXJib3NpdHkgbGV2ZWwgZm9yIHRoZSBsb2cgbWVzc2FnZXMgKGRlZmF1bHQ6IDApXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBtZXRob2QgZGVjb3JhdG9yIHRoYXQgd3JhcHMgdGhlIG9yaWdpbmFsIG1ldGhvZCB3aXRoIHZlcmJvc2UgbG9nZ2luZ1xuICogQGZ1bmN0aW9uIHZlcmJvc2VcbiAqIEBjYXRlZ29yeSBNZXRob2QgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyYm9zZShcbiAgdmVyYm9zaXR5OiBudW1iZXIgfCBib29sZWFuXG4pOiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5PzogYW55LCBkZXNjcmlwdG9yPzogYW55KSA9PiB2b2lkO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gTWV0aG9kIGRlY29yYXRvciBmb3IgbG9nZ2luZyBmdW5jdGlvbiBjYWxscyB3aXRoIHZlcmJvc2UgbGV2ZWxcbiAqIEBzdW1tYXJ5IENvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIHRoZSBsb2cgZGVjb3JhdG9yIHRoYXQgdXNlcyBMb2dMZXZlbC52ZXJib3NlIHdpdGggY29uZmlndXJhYmxlIHZlcmJvc2l0eVxuICogQHBhcmFtIHtudW1iZXJ9IHZlcmJvc2l0eSAtIFRoZSB2ZXJib3NpdHkgbGV2ZWwgZm9yIHRoZSBsb2cgbWVzc2FnZXMgKGRlZmF1bHQ6IDApXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtiZW5jaG1hcms9ZmFsc2VdIC0gV2hldGhlciB0byBsb2cgZXhlY3V0aW9uIHRpbWUgKGRlZmF1bHQ6IGZhbHNlKVxuICogQHJldHVybiB7RnVuY3Rpb259IEEgbWV0aG9kIGRlY29yYXRvciB0aGF0IHdyYXBzIHRoZSBvcmlnaW5hbCBtZXRob2Qgd2l0aCB2ZXJib3NlIGxvZ2dpbmdcbiAqIEBmdW5jdGlvbiB2ZXJib3NlXG4gKiBAY2F0ZWdvcnkgTWV0aG9kIERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmJvc2UodmVyYm9zaXR5OiBudW1iZXIgfCBib29sZWFuID0gMCwgYmVuY2htYXJrPzogYm9vbGVhbikge1xuICBpZiAodHlwZW9mIHZlcmJvc2l0eSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICBiZW5jaG1hcmsgPSB2ZXJib3NpdHk7XG4gICAgdmVyYm9zaXR5ID0gMDtcbiAgfVxuICByZXR1cm4gbG9nKExvZ0xldmVsLnZlcmJvc2UsIGJlbmNobWFyaywgdmVyYm9zaXR5KTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGRlY29yYXRvciB0aGF0IG1ha2VzIGEgbWV0aG9kIG5vbi1jb25maWd1cmFibGVcbiAqIEBzdW1tYXJ5IFRoaXMgZGVjb3JhdG9yIHByZXZlbnRzIGEgbWV0aG9kIGZyb20gYmVpbmcgb3ZlcnJpZGRlbiBieSBtYWtpbmcgaXQgbm9uLWNvbmZpZ3VyYWJsZS5cbiAqIEl0IHRocm93cyBhbiBlcnJvciBpZiB1c2VkIG9uIGFueXRoaW5nIG90aGVyIHRoYW4gYSBtZXRob2QuXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBkZWNvcmF0b3IgZnVuY3Rpb24gdGhhdCBjYW4gYmUgYXBwbGllZCB0byBtZXRob2RzXG4gKiBAZnVuY3Rpb24gZmluYWxcbiAqIEBjYXRlZ29yeSBNZXRob2QgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluYWwoKSB7XG4gIHJldHVybiAoXG4gICAgdGFyZ2V0OiBvYmplY3QsXG4gICAgcHJvcGVydHlLZXk/OiBhbnksXG4gICAgZGVzY3JpcHRvcj86IFByb3BlcnR5RGVzY3JpcHRvclxuICApID0+IHtcbiAgICBpZiAoIWRlc2NyaXB0b3IpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaW5hbCBkZWNvcmF0b3IgY2FuIG9ubHkgYmUgdXNlZCBvbiBtZXRob2RzXCIpO1xuICAgIGlmIChkZXNjcmlwdG9yPy5jb25maWd1cmFibGUpIHtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICB9O1xufVxuIl19
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBeUNBLGtCQTBDQztBQXlCRCw4QkFnQ0M7QUFTRCxzQkFZQztBQVNELG9CQUVDO0FBU0Qsc0JBRUM7QUFvQ0QsMEJBS0M7QUFTRCxzQkFTQztBQWxQRCwrQ0FBdUM7QUFDdkMsMkNBQW9DO0FBQ3BDLHFDQUE2QjtBQUM3QixtREFBNEM7QUFNNUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFDSCxTQUFnQixHQUFHLENBQ2pCLFFBQWtCLG9CQUFRLENBQUMsSUFBSSxFQUMvQixTQUFTLEdBQUcsQ0FBQyxFQUNiLGVBQWtDLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLGVBQWUsSUFBSSxFQUFFLEVBQzNFLFdBQWtDO0lBRWxDLE9BQU8sU0FBUyxHQUFHLENBQUMsTUFBVyxFQUFFLFdBQWlCLEVBQUUsVUFBZ0I7UUFDbEUsSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRO1lBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUNoRSxNQUFNLE1BQU0sR0FDVixNQUFNLFlBQVkseUJBQVc7WUFDM0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQWtDLENBQUMsQ0FBQztZQUMvRCxDQUFDLENBQUMsaUJBQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFRLENBQUM7UUFDakQsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUV4QyxVQUFVLENBQUMsS0FB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QUNoQixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUMsb0JBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBbUIsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixLQUFLO0lBQ25CLE9BQU8sQ0FBQyxNQUFjLEVBQUUsV0FBaUIsRUFBRSxVQUFnQixFQUFFLEVBQUU7UUFDN0QsSUFBSSxDQUFDLFVBQVU7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDakUsSUFBSSxVQUFVLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDN0IsVUFBVSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDbEMsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gXCIuL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG5vdyB9IGZyb20gXCIuL3RpbWVcIjtcbmltcG9ydCB7IExvZ2dlZENsYXNzIH0gZnJvbSBcIi4vTG9nZ2VkQ2xhc3NcIjtcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCB0eXBlIEFyZ0Zvcm1hdEZ1bmN0aW9uID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBzdHJpbmc7XG5leHBvcnQgdHlwZSBSZXR1cm5Gb3JtYXRGdW5jdGlvbiA9IChlPzogRXJyb3IsIHJlc3VsdD86IGFueSkgPT4gc3RyaW5nO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNZXRob2QgZGVjb3JhdG9yIGZvciBsb2dnaW5nIGZ1bmN0aW9uIGNhbGxzLlxuICogQHN1bW1hcnkgV3JhcHMgY2xhc3MgbWV0aG9kcyB0byBhdXRvbWF0aWNhbGx5IGxvZyBlbnRyeSwgZXhpdCwgdGltaW5nLCBhbmQgb3B0aW9uYWwgY3VzdG9tIG1lc3NhZ2VzIGF0IGEgY29uZmlndXJhYmxlIHtAbGluayBMb2dMZXZlbH0uXG4gKiBAcGFyYW0ge0xvZ0xldmVsfSBsZXZlbCAtIExvZyBsZXZlbCBhcHBsaWVkIHRvIHRoZSBnZW5lcmF0ZWQgbG9nIHN0YXRlbWVudHMgKGRlZmF1bHRzIHRvIGBMb2dMZXZlbC5pbmZvYCkuXG4gKiBAcGFyYW0ge251bWJlcn0gW3ZlcmJvc2l0eT0wXSAtIFZlcmJvc2l0eSB0aHJlc2hvbGQgcmVxdWlyZWQgZm9yIHRoZSBlbnRyeSBsb2cgdG8gYXBwZWFyLlxuICogQHBhcmFtIHtBcmdGb3JtYXRGdW5jdGlvbn0gW2VudHJ5TWVzc2FnZV0gLSBGb3JtYXR0ZXIgaW52b2tlZCB3aXRoIHRoZSBvcmlnaW5hbCBtZXRob2QgYXJndW1lbnRzIHRvIGRlc2NyaWJlIHRoZSBpbnZvY2F0aW9uLlxuICogQHBhcmFtIHtSZXR1cm5Gb3JtYXRGdW5jdGlvbn0gW2V4aXRNZXNzYWdlXSAtIE9wdGlvbmFsIGZvcm1hdHRlciB0aGF0IGRlc2NyaWJlcyB0aGUgb3V0Y29tZSBvciBmYWlsdXJlIG9mIHRoZSBjYWxsLlxuICogQHJldHVybiB7ZnVuY3Rpb24oYW55LCBhbnksIFByb3BlcnR5RGVzY3JpcHRvcik6IHZvaWR9IE1ldGhvZCBkZWNvcmF0b3IgcHJveHkgdGhhdCBpbmplY3RzIGxvZ2dpbmcgYmVoYXZpb3IuXG4gKiBAZnVuY3Rpb24gbG9nXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBEZWNvcmF0b3IgYXMgbG9nIGRlY29yYXRvclxuICogICBwYXJ0aWNpcGFudCBNZXRob2QgYXMgT3JpZ2luYWwgTWV0aG9kXG4gKiAgIHBhcnRpY2lwYW50IExvZ2dlciBhcyBMb2dnaW5nIGluc3RhbmNlXG4gKlxuICogICBDbGllbnQtPj5EZWNvcmF0b3I6IGNhbGwgZGVjb3JhdGVkIG1ldGhvZFxuICogICBEZWNvcmF0b3ItPj5Mb2dnZXI6IGxvZyBtZXRob2QgY2FsbFxuICogICBEZWNvcmF0b3ItPj5NZXRob2Q6IGNhbGwgb3JpZ2luYWwgbWV0aG9kXG4gKiAgIGFsdCByZXN1bHQgaXMgUHJvbWlzZVxuICogICAgIE1ldGhvZC0tPj5EZWNvcmF0b3I6IHJldHVybiBQcm9taXNlXG4gKiAgICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBhdHRhY2ggdGhlbiBoYW5kbGVyXG4gKiAgICAgTm90ZSBvdmVyIERlY29yYXRvcjogUHJvbWlzZSByZXNvbHZlc1xuICogICAgIERlY29yYXRvci0+PkxvZ2dlcjogbG9nIGJlbmNobWFyayAoaWYgZW5hYmxlZClcbiAqICAgICBEZWNvcmF0b3ItLT4+Q2xpZW50OiByZXR1cm4gcmVzdWx0XG4gKiAgIGVsc2UgcmVzdWx0IGlzIG5vdCBQcm9taXNlXG4gKiAgICAgTWV0aG9kLS0+PkRlY29yYXRvcjogcmV0dXJuIHJlc3VsdFxuICogICAgIERlY29yYXRvci0+PkxvZ2dlcjogbG9nIGJlbmNobWFyayAoaWYgZW5hYmxlZClcbiAqICAgICBEZWNvcmF0b3ItLT4+Q2xpZW50OiByZXR1cm4gcmVzdWx0XG4gKiAgIGVuZFxuICogQGNhdGVnb3J5IE1ldGhvZCBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2coXG4gIGxldmVsOiBMb2dMZXZlbCA9IExvZ0xldmVsLmluZm8sXG4gIHZlcmJvc2l0eSA9IDAsXG4gIGVudHJ5TWVzc2FnZTogQXJnRm9ybWF0RnVuY3Rpb24gPSAoLi4uYXJnczogYW55W10pID0+IGBjYWxsZWQgd2l0aCAke2FyZ3N9YCxcbiAgZXhpdE1lc3NhZ2U/OiBSZXR1cm5Gb3JtYXRGdW5jdGlvblxuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBsb2codGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5PzogYW55LCBkZXNjcmlwdG9yPzogYW55KSB7XG4gICAgaWYgKCFkZXNjcmlwdG9yIHx8IHR5cGVvZiBkZXNjcmlwdG9yID09PSBcIm51bWJlclwiKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMb2dnaW5nIGRlY29yYXRpb24gb25seSBhcHBsaWVzIHRvIG1ldGhvZHNgKTtcbiAgICBjb25zdCBsb2dnZXI6IExvZ2dlciA9XG4gICAgICB0YXJnZXQgaW5zdGFuY2VvZiBMb2dnZWRDbGFzc1xuICAgICAgICA/IHRhcmdldFtcImxvZ1wiXS5mb3IodGFyZ2V0W3Byb3BlcnR5S2V5IGFzIGtleW9mIHR5cGVvZiB0YXJnZXRdKVxuICAgICAgICA6IExvZ2dpbmcuZm9yKHRhcmdldCkuZm9yKHRhcmdldFtwcm9wZXJ0eUtleV0pO1xuICAgIGNvbnN0IG1ldGhvZCA9IGxvZ2dlcltsZXZlbF0uYmluZChsb2dnZXIpIGFzIGFueTtcbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gbmV3IFByb3h5KG9yaWdpbmFsTWV0aG9kLCB7XG4gICAgICBhcHBseShmbiwgdGhpc0FyZywgYXJnczogYW55W10pIHtcbiAgICAgICAgbWV0aG9kKGVudHJ5TWVzc2FnZSguLi5hcmdzKSwgdmVyYm9zaXR5KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0LmFwcGx5KGZuLCB0aGlzQXJnLCBhcmdzKTtcbiAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAudGhlbigocjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV4aXRNZXNzYWdlKSBtZXRob2QoZXhpdE1lc3NhZ2UodW5kZWZpbmVkLCByKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChleGl0TWVzc2FnZSkgbG9nZ2VyLmVycm9yKGV4aXRNZXNzYWdlKGUgYXMgRXJyb3IpKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV4aXRNZXNzYWdlKSBtZXRob2QoZXhpdE1lc3NhZ2UodW5kZWZpbmVkLCByZXN1bHQpKTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgICAgICBpZiAoZXhpdE1lc3NhZ2UpIGxvZ2dlci5lcnJvcihleGl0TWVzc2FnZShlcnIgYXMgRXJyb3IpKTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gIH07XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1ldGhvZCBkZWNvcmF0b3IgdGhhdCByZWNvcmRzIGV4ZWN1dGlvbiB0aW1lIGF0IHRoZSBiZW5jaG1hcmsgbGV2ZWwuXG4gKiBAc3VtbWFyeSBXcmFwcyB0aGUgdGFyZ2V0IG1ldGhvZCB0byBlbWl0IHtAbGluayBMb2dnZXIuYmVuY2htYXJrfSBlbnRyaWVzIGNhcHR1cmluZyBjb21wbGV0aW9uIHRpbWUgb3IgZmFpbHVyZSBsYXRlbmN5LlxuICogQHJldHVybiB7ZnVuY3Rpb24oYW55LCBhbnksICBQcm9wZXJ0eURlc2NyaXB0b3IpOiB2b2lkfSBNZXRob2QgZGVjb3JhdG9yIHByb3h5IHRoYXQgYmVuY2htYXJrcyB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24uXG4gKiBAZnVuY3Rpb24gYmVuY2htYXJrXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBEZWNvcmF0b3IgYXMgYmVuY2htYXJrXG4gKiAgIHBhcnRpY2lwYW50IE1ldGhvZCBhcyBPcmlnaW5hbCBNZXRob2RcbiAqICAgQ2FsbGVyLT4+RGVjb3JhdG9yOiBpbnZva2UoKVxuICogICBEZWNvcmF0b3ItPj5NZXRob2Q6IFJlZmxlY3QuYXBwbHkoLi4uKVxuICogICBhbHQgUHJvbWlzZSByZXN1bHRcbiAqICAgICBNZXRob2QtLT4+RGVjb3JhdG9yOiBQcm9taXNlXG4gKiAgICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBhdHRhY2ggdGhlbigpXG4gKiAgICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBsb2cgY29tcGxldGlvbiBkdXJhdGlvblxuICogICBlbHNlIFN5bmNocm9ub3VzIHJlc3VsdFxuICogICAgIE1ldGhvZC0tPj5EZWNvcmF0b3I6IHZhbHVlXG4gKiAgICAgRGVjb3JhdG9yLT4+RGVjb3JhdG9yOiBsb2cgY29tcGxldGlvbiBkdXJhdGlvblxuICogICBlbmRcbiAqICAgRGVjb3JhdG9yLS0+PkNhbGxlcjogcmV0dXJuIHJlc3VsdFxuICogQGNhdGVnb3J5IE1ldGhvZCBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZW5jaG1hcmsoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBiZW5jaG1hcmsodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5PzogYW55LCBkZXNjcmlwdG9yPzogYW55KSB7XG4gICAgaWYgKCFkZXNjcmlwdG9yIHx8IHR5cGVvZiBkZXNjcmlwdG9yID09PSBcIm51bWJlclwiKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBiZW5jaG1hcmsgZGVjb3JhdGlvbiBvbmx5IGFwcGxpZXMgdG8gbWV0aG9kc2ApO1xuICAgIGNvbnN0IGxvZ2dlcjogTG9nZ2VyID1cbiAgICAgIHRhcmdldCBpbnN0YW5jZW9mIExvZ2dlZENsYXNzXG4gICAgICAgID8gdGFyZ2V0W1wibG9nXCJdLmZvcih0YXJnZXRbcHJvcGVydHlLZXkgYXMga2V5b2YgdHlwZW9mIHRhcmdldF0pXG4gICAgICAgIDogTG9nZ2luZy5mb3IodGFyZ2V0KS5mb3IodGFyZ2V0W3Byb3BlcnR5S2V5XSk7XG4gICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IG5ldyBQcm94eShvcmlnaW5hbE1ldGhvZCwge1xuICAgICAgYXBwbHkoZm4sIHRoaXNBcmcsIGFyZ3M6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbm93KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdC5hcHBseShmbiwgdGhpc0FyZywgYXJncyk7XG4gICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGxvZ2dlci5iZW5jaG1hcmsoYGNvbXBsZXRlZCBpbiAke25vdygpIC0gc3RhcnR9bXNgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nZ2VyLmJlbmNobWFyayhgY29tcGxldGVkIGluICR7bm93KCkgLSBzdGFydH1tc2ApO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgICAgIGxvZ2dlci5iZW5jaG1hcmsoYGZhaWxlZCBpbiAke25vdygpIC0gc3RhcnR9bXNgKTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTWV0aG9kIGRlY29yYXRvciBmb3IgbG9nZ2luZyBmdW5jdGlvbiBjYWxscyB3aXRoIGRlYnVnIGxldmVsLlxuICogQHN1bW1hcnkgQ29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQge0BsaW5rIGxvZ30gdGhhdCBsb2dzIHVzaW5nIGBMb2dMZXZlbC5kZWJ1Z2AuXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihhbnksIGFueSwgUHJvcGVydHlEZXNjcmlwdG9yKTogdm9pZH0gRGVidWctbGV2ZWwgbG9nZ2luZyBkZWNvcmF0b3IuXG4gKiBAZnVuY3Rpb24gZGVidWdcbiAqIEBjYXRlZ29yeSBNZXRob2QgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVidWcoKSB7XG4gIHJldHVybiBsb2coXG4gICAgTG9nTGV2ZWwuZGVidWcsXG4gICAgMCxcbiAgICAoLi4uYXJnczogYW55W10pID0+IGBjYWxsZWQgd2l0aCAke2FyZ3N9YCxcbiAgICAoZT86IEVycm9yLCByZXN1bHQ/OiBhbnkpID0+XG4gICAgICBlXG4gICAgICAgID8gYEZhaWxlZCB3aXRoOiAke2V9YFxuICAgICAgICA6IHJlc3VsdFxuICAgICAgICAgID8gYENvbXBsZXRlZCB3aXRoICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gXG4gICAgICAgICAgOiBcImNvbXBsZXRlZFwiXG4gICk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1ldGhvZCBkZWNvcmF0b3IgZm9yIGxvZ2dpbmcgZnVuY3Rpb24gY2FsbHMgd2l0aCBpbmZvIGxldmVsLlxuICogQHN1bW1hcnkgQ29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQge0BsaW5rIGxvZ30gdGhhdCBsb2dzIHVzaW5nIGBMb2dMZXZlbC5pbmZvYC5cbiAqIEByZXR1cm4ge2Z1bmN0aW9uKGFueSwgYW55LCBQcm9wZXJ0eURlc2NyaXB0b3IpOiB2b2lkfSBJbmZvLWxldmVsIGxvZ2dpbmcgZGVjb3JhdG9yLlxuICogQGZ1bmN0aW9uIGluZm9cbiAqIEBjYXRlZ29yeSBNZXRob2QgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW5mbygpIHtcbiAgcmV0dXJuIGxvZyhMb2dMZXZlbC5pbmZvKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTWV0aG9kIGRlY29yYXRvciBmb3IgbG9nZ2luZyBmdW5jdGlvbiBjYWxscyB3aXRoIHNpbGx5IGxldmVsLlxuICogQHN1bW1hcnkgQ29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQge0BsaW5rIGxvZ30gdGhhdCBsb2dzIHVzaW5nIGBMb2dMZXZlbC5zaWxseWAuXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihhbnksIGFueSwgUHJvcGVydHlEZXNjcmlwdG9yKTogdm9pZH0gU2lsbHktbGV2ZWwgbG9nZ2luZyBkZWNvcmF0b3IuXG4gKiBAZnVuY3Rpb24gc2lsbHlcbiAqIEBjYXRlZ29yeSBNZXRob2QgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2lsbHkoKSB7XG4gIHJldHVybiBsb2coTG9nTGV2ZWwuc2lsbHkpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNZXRob2QgZGVjb3JhdG9yIGZvciBsb2dnaW5nIGZ1bmN0aW9uIGNhbGxzIHdpdGggdmVyYm9zZSBsZXZlbC5cbiAqIEBzdW1tYXJ5IENvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIHtAbGluayBsb2d9IHRoYXQgbG9ncyB1c2luZyBgTG9nTGV2ZWwudmVyYm9zZWAgd2l0aCBjb25maWd1cmFibGUgdmVyYm9zaXR5LlxuICogQHJldHVybiB7ZnVuY3Rpb24oYW55LCBhbnksIFByb3BlcnR5RGVzY3JpcHRvcik6IHZvaWR9IFZlcmJvc2UgbG9nZ2luZyBkZWNvcmF0b3IuXG4gKiBAZnVuY3Rpb24gdmVyYm9zZVxuICogQGNhdGVnb3J5IE1ldGhvZCBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJib3NlKCk6IChcbiAgdGFyZ2V0OiBhbnksXG4gIHByb3BlcnR5S2V5PzogYW55LFxuICBkZXNjcmlwdG9yPzogYW55XG4pID0+IHZvaWQ7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1ldGhvZCBkZWNvcmF0b3IgZm9yIGxvZ2dpbmcgZnVuY3Rpb24gY2FsbHMgd2l0aCB2ZXJib3NlIGxldmVsLlxuICogQHN1bW1hcnkgQ29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQge0BsaW5rIGxvZ30gdGhhdCBsb2dzIHVzaW5nIGBMb2dMZXZlbC52ZXJib3NlYCB3aGlsZSB0b2dnbGluZyBiZW5jaG1hcmtpbmcuXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihhbnksIFByb3BlcnR5RGVzY3JpcHRvcik6IHZvaWR9IFZlcmJvc2UgbG9nZ2luZyBkZWNvcmF0b3IuXG4gKiBAZnVuY3Rpb24gdmVyYm9zZVxuICogQGNhdGVnb3J5IE1ldGhvZCBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJib3NlKCk6IChcbiAgdGFyZ2V0OiBhbnksXG4gIHByb3BlcnR5S2V5PzogYW55LFxuICBkZXNjcmlwdG9yPzogYW55XG4pID0+IHZvaWQ7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1ldGhvZCBkZWNvcmF0b3IgZm9yIGxvZ2dpbmcgZnVuY3Rpb24gY2FsbHMgd2l0aCB2ZXJib3NlIGxldmVsLlxuICogQHN1bW1hcnkgQ29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQge0BsaW5rIGxvZ30gdGhhdCBsb2dzIHVzaW5nIGBMb2dMZXZlbC52ZXJib3NlYCB3aXRoIGNvbmZpZ3VyYWJsZSB2ZXJib3NpdHkgYW5kIG9wdGlvbmFsIGJlbmNobWFya2luZy5cbiAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IHZlcmJvc2l0eSAtIFZlcmJvc2l0eSBsZXZlbCBmb3IgbG9nIGZpbHRlcmluZyBvciBmbGFnIHRvIGVuYWJsZSBiZW5jaG1hcmtpbmcuXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihhbnksIGFueSxQcm9wZXJ0eURlc2NyaXB0b3IpOiB2b2lkfSBWZXJib3NlIGxvZ2dpbmcgZGVjb3JhdG9yLlxuICogQGZ1bmN0aW9uIHZlcmJvc2VcbiAqIEBjYXRlZ29yeSBNZXRob2QgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyYm9zZSh2ZXJib3NpdHk6IG51bWJlciB8IGJvb2xlYW4gPSAwKSB7XG4gIGlmICghdmVyYm9zaXR5KSB7XG4gICAgdmVyYm9zaXR5ID0gMDtcbiAgfVxuICByZXR1cm4gbG9nKExvZ0xldmVsLnZlcmJvc2UsIHZlcmJvc2l0eSBhcyBudW1iZXIpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgZGVjb3JhdG9yIHRoYXQgbWFrZXMgYSBtZXRob2Qgbm9uLWNvbmZpZ3VyYWJsZS5cbiAqIEBzdW1tYXJ5IFByZXZlbnRzIG92ZXJyaWRpbmcgYnkgbWFya2luZyB0aGUgbWV0aG9kIGRlc2NyaXB0b3IgYXMgbm9uLWNvbmZpZ3VyYWJsZSwgdGhyb3dpbmcgaWYgYXBwbGllZCB0byBub24tbWV0aG9kIHRhcmdldHMuXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihvYmplY3QsIGFueSwgUHJvcGVydHlEZXNjcmlwdG9yKTogUHJvcGVydHlEZXNjcmlwdG9yfHVuZGVmaW5lZH0gRGVjb3JhdG9yIHRoYXQgaGFyZGVucyB0aGUgbWV0aG9kIGRlc2NyaXB0b3IuXG4gKiBAZnVuY3Rpb24gZmluYWxcbiAqIEBjYXRlZ29yeSBNZXRob2QgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluYWwoKSB7XG4gIHJldHVybiAodGFyZ2V0OiBvYmplY3QsIHByb3BlcnR5S2V5PzogYW55LCBkZXNjcmlwdG9yPzogYW55KSA9PiB7XG4gICAgaWYgKCFkZXNjcmlwdG9yKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmluYWwgZGVjb3JhdG9yIGNhbiBvbmx5IGJlIHVzZWQgb24gbWV0aG9kc1wiKTtcbiAgICBpZiAoZGVzY3JpcHRvcj8uY29uZmlndXJhYmxlKSB7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cbiJdfQ==
|