@decaf-ts/logging 0.3.12 → 0.3.14

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 (43) hide show
  1. package/dist/logging.cjs +542 -99
  2. package/dist/logging.esm.cjs +539 -100
  3. package/lib/LoggedClass.cjs +9 -12
  4. package/lib/LoggedClass.d.ts +6 -10
  5. package/lib/constants.cjs +40 -8
  6. package/lib/constants.d.ts +35 -7
  7. package/lib/decorators.cjs +114 -50
  8. package/lib/decorators.d.ts +58 -43
  9. package/lib/environment.cjs +73 -22
  10. package/lib/environment.d.ts +46 -29
  11. package/lib/esm/LoggedClass.d.ts +6 -10
  12. package/lib/esm/LoggedClass.js +9 -12
  13. package/lib/esm/constants.d.ts +35 -7
  14. package/lib/esm/constants.js +40 -8
  15. package/lib/esm/decorators.d.ts +58 -43
  16. package/lib/esm/decorators.js +113 -50
  17. package/lib/esm/environment.d.ts +46 -29
  18. package/lib/esm/environment.js +73 -22
  19. package/lib/esm/filters/LogFilter.d.ts +37 -0
  20. package/lib/esm/filters/LogFilter.js +30 -1
  21. package/lib/esm/filters/PatternFilter.d.ts +46 -0
  22. package/lib/esm/filters/PatternFilter.js +41 -1
  23. package/lib/esm/index.d.ts +7 -10
  24. package/lib/esm/index.js +8 -11
  25. package/lib/esm/logging.d.ts +14 -0
  26. package/lib/esm/logging.js +22 -1
  27. package/lib/esm/time.d.ts +149 -0
  28. package/lib/esm/time.js +212 -0
  29. package/lib/esm/types.d.ts +89 -51
  30. package/lib/esm/types.js +1 -1
  31. package/lib/filters/LogFilter.cjs +30 -1
  32. package/lib/filters/LogFilter.d.ts +37 -0
  33. package/lib/filters/PatternFilter.cjs +41 -1
  34. package/lib/filters/PatternFilter.d.ts +46 -0
  35. package/lib/index.cjs +8 -11
  36. package/lib/index.d.ts +7 -10
  37. package/lib/logging.cjs +22 -1
  38. package/lib/logging.d.ts +14 -0
  39. package/lib/time.cjs +217 -0
  40. package/lib/time.d.ts +149 -0
  41. package/lib/types.cjs +1 -1
  42. package/lib/types.d.ts +89 -51
  43. package/package.json +2 -2
@@ -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
- /** Error events that are likely to cause problems. */
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
- /** Routine information, such as ongoing status or performance. */
38
+ /** @description Informational events describing normal operation. */
20
39
  info = "info",
21
- /** Additional relevant information. */
40
+ /** @description Verbose diagnostic information for detailed tracing. */
22
41
  verbose = "verbose",
23
- /** Debug or trace information. */
42
+ /** @description Debug or trace details aimed at developers. */
24
43
  debug = "debug",
25
- /** way too verbose or silly information. */
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
- * @const NumericLogLevels
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;
@@ -1,9 +1,26 @@
1
+ /**
2
+ * @description Global key used to store environment variables in browser contexts.
3
+ * @summary Enables the logging environment helpers to locate serialized environment configuration on `globalThis`.
4
+ * @const BrowserEnvKey
5
+ * @type {string}
6
+ * @memberOf module:Logging
7
+ */
1
8
  export const BrowserEnvKey = "ENV";
2
9
  /**
3
10
  * @description Delimiter used for composing nested environment variable names.
4
11
  * @summary Joins parent and child keys when mapping object paths to ENV strings.
12
+ * @const ENV_PATH_DELIMITER
13
+ * @type {string}
14
+ * @memberOf module:Logging
5
15
  */
6
16
  export const ENV_PATH_DELIMITER = "__";
17
+ /**
18
+ * @description Default prefix and suffix used for template placeholders.
19
+ * @summary Provides wrapper strings applied when interpolating messages with {@link patchPlaceholders}.
20
+ * @const DefaultPlaceholderWrappers
21
+ * @type {string[]}
22
+ * @memberOf module:Logging
23
+ */
7
24
  export const DefaultPlaceholderWrappers = ["${", "}"];
8
25
  /**
9
26
  * @description Enum for log levels.
@@ -14,21 +31,24 @@ export const DefaultPlaceholderWrappers = ["${", "}"];
14
31
  */
15
32
  export var LogLevel;
16
33
  (function (LogLevel) {
17
- /** Error events that are likely to cause problems. */
34
+ /** @description Benchmark events that capture performance metrics. */
35
+ LogLevel["benchmark"] = "benchmark";
36
+ /** @description Error events that indicate failures requiring attention. */
18
37
  LogLevel["error"] = "error";
19
- /** Routine information, such as ongoing status or performance. */
38
+ /** @description Informational events describing normal operation. */
20
39
  LogLevel["info"] = "info";
21
- /** Additional relevant information. */
40
+ /** @description Verbose diagnostic information for detailed tracing. */
22
41
  LogLevel["verbose"] = "verbose";
23
- /** Debug or trace information. */
42
+ /** @description Debug or trace details aimed at developers. */
24
43
  LogLevel["debug"] = "debug";
25
- /** way too verbose or silly information. */
44
+ /** @description Extremely chatty or playful log entries. */
26
45
  LogLevel["silly"] = "silly";
27
46
  })(LogLevel || (LogLevel = {}));
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
- * @const NumericLogLevels
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 var 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 const NumericLogLevels = {
67
+ benchmark: 0,
40
68
  error: 2,
41
69
  info: 4,
42
70
  verbose: 6,
@@ -59,7 +87,6 @@ export var LoggingMode;
59
87
  /**
60
88
  * @description Default theme for styling log output.
61
89
  * @summary Defines the default color and style settings for various components of log messages.
62
- * @const DefaultTheme
63
90
  * @typedef {Theme} DefaultTheme
64
91
  * @property {Object} class - Styling for class names.
65
92
  * @property {number} class.fg - Foreground color code for class names (34).
@@ -79,6 +106,7 @@ export var LoggingMode;
79
106
  * @property {Object} logLevel.verbose - Styling for verbose level logs (empty object).
80
107
  * @property {Object} logLevel.debug - Styling for debug level logs.
81
108
  * @property {number} logLevel.debug.fg - Foreground color code for debug level logs (33).
109
+ * @const DefaultTheme
82
110
  * @memberOf module:Logging
83
111
  */
84
112
  export const DefaultTheme = {
@@ -99,6 +127,10 @@ export const DefaultTheme = {
99
127
  },
100
128
  method: {},
101
129
  logLevel: {
130
+ benchmark: {
131
+ fg: 32,
132
+ style: ["bold"],
133
+ },
102
134
  error: {
103
135
  fg: 31,
104
136
  style: ["bold"],
@@ -149,4 +181,4 @@ export const DefaultLoggingConfig = {
149
181
  pattern: "{level} [{timestamp}] {app} {context} {separator} {message} {stack}",
150
182
  theme: DefaultTheme,
151
183
  };
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBRW5DOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUV2QyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUV0RDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQU4sSUFBWSxRQVdYO0FBWEQsV0FBWSxRQUFRO0lBQ2xCLHNEQUFzRDtJQUN0RCwyQkFBZSxDQUFBO0lBQ2Ysa0VBQWtFO0lBQ2xFLHlCQUFhLENBQUE7SUFDYix1Q0FBdUM7SUFDdkMsK0JBQW1CLENBQUE7SUFDbkIsa0NBQWtDO0lBQ2xDLDJCQUFlLENBQUE7SUFDZiw0Q0FBNEM7SUFDNUMsMkJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBWFcsUUFBUSxLQUFSLFFBQVEsUUFXbkI7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUc7SUFDOUIsS0FBSyxFQUFFLENBQUM7SUFDUixJQUFJLEVBQUUsQ0FBQztJQUNQLE9BQU8sRUFBRSxDQUFDO0lBQ1YsS0FBSyxFQUFFLENBQUM7SUFDUixLQUFLLEVBQUUsQ0FBQztDQUNULENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBTixJQUFZLFdBS1g7QUFMRCxXQUFZLFdBQVc7SUFDckIsNENBQTRDO0lBQzVDLDBCQUFXLENBQUE7SUFDWCxzQ0FBc0M7SUFDdEMsNEJBQWEsQ0FBQTtBQUNmLENBQUMsRUFMVyxXQUFXLEtBQVgsV0FBVyxRQUt0QjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQVU7SUFDakMsR0FBRyxFQUFFLEVBQUU7SUFDUCxTQUFTLEVBQUUsRUFBRTtJQUNiLEtBQUssRUFBRTtRQUNMLEVBQUUsRUFBRSxFQUFFO0tBQ1A7SUFDRCxFQUFFLEVBQUU7UUFDRixFQUFFLEVBQUUsRUFBRTtLQUNQO0lBQ0QsS0FBSyxFQUFFLEVBQUU7SUFDVCxTQUFTLEVBQUUsRUFBRTtJQUNiLE9BQU8sRUFBRTtRQUNQLEtBQUssRUFBRTtZQUNMLEVBQUUsRUFBRSxFQUFFO1NBQ1A7S0FDRjtJQUNELE1BQU0sRUFBRSxFQUFFO0lBQ1YsUUFBUSxFQUFFO1FBQ1IsS0FBSyxFQUFFO1lBQ0wsRUFBRSxFQUFFLEVBQUU7WUFDTixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUM7U0FDaEI7UUFDRCxJQUFJLEVBQUU7WUFDSixFQUFFLEVBQUUsRUFBRTtZQUNOLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQztTQUNoQjtRQUNELE9BQU8sRUFBRTtZQUNQLEVBQUUsRUFBRSxFQUFFO1lBQ04sS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDO1NBQ2hCO1FBQ0QsS0FBSyxFQUFFO1lBQ0wsRUFBRSxFQUFFLEVBQUU7WUFDTixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUM7U0FDaEI7S0FDRjtDQUNGLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFrQjtJQUNqRCxHQUFHLEVBQUUsYUFBYTtJQUNsQixPQUFPLEVBQUUsQ0FBQztJQUNWLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSTtJQUNwQixRQUFRLEVBQUUsSUFBSTtJQUNkLEtBQUssRUFBRSxLQUFLO0lBQ1osZ0JBQWdCLEVBQUUsR0FBRztJQUNyQixTQUFTLEVBQUUsR0FBRztJQUNkLFNBQVMsRUFBRSxJQUFJO0lBQ2YsZUFBZSxFQUFFLGNBQWM7SUFDL0IsT0FBTyxFQUFFLElBQUk7SUFDYixNQUFNLEVBQUUsV0FBVyxDQUFDLEdBQUc7SUFDdkIsT0FBTyxFQUNMLHFFQUFxRTtJQUN2RSxLQUFLLEVBQUUsWUFBWTtDQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9nZ2luZ0NvbmZpZywgVGhlbWUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5leHBvcnQgY29uc3QgQnJvd3NlckVudktleSA9IFwiRU5WXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlbGltaXRlciB1c2VkIGZvciBjb21wb3NpbmcgbmVzdGVkIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzLlxuICogQHN1bW1hcnkgSm9pbnMgcGFyZW50IGFuZCBjaGlsZCBrZXlzIHdoZW4gbWFwcGluZyBvYmplY3QgcGF0aHMgdG8gRU5WIHN0cmluZ3MuXG4gKi9cbmV4cG9ydCBjb25zdCBFTlZfUEFUSF9ERUxJTUlURVIgPSBcIl9fXCI7XG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0UGxhY2Vob2xkZXJXcmFwcGVycyA9IFtcIiR7XCIsIFwifVwiXTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRW51bSBmb3IgbG9nIGxldmVscy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgZGlmZmVyZW50IGxldmVscyBvZiBsb2dnaW5nIGZvciB0aGUgYXBwbGljYXRpb24uXG4gKiBAZW51bSB7c3RyaW5nfVxuICogQHJlYWRvbmx5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGVudW0gTG9nTGV2ZWwge1xuICAvKiogRXJyb3IgZXZlbnRzIHRoYXQgYXJlIGxpa2VseSB0byBjYXVzZSBwcm9ibGVtcy4gKi9cbiAgZXJyb3IgPSBcImVycm9yXCIsXG4gIC8qKiBSb3V0aW5lIGluZm9ybWF0aW9uLCBzdWNoIGFzIG9uZ29pbmcgc3RhdHVzIG9yIHBlcmZvcm1hbmNlLiAqL1xuICBpbmZvID0gXCJpbmZvXCIsXG4gIC8qKiBBZGRpdGlvbmFsIHJlbGV2YW50IGluZm9ybWF0aW9uLiAqL1xuICB2ZXJib3NlID0gXCJ2ZXJib3NlXCIsXG4gIC8qKiBEZWJ1ZyBvciB0cmFjZSBpbmZvcm1hdGlvbi4gKi9cbiAgZGVidWcgPSBcImRlYnVnXCIsXG4gIC8qKiB3YXkgdG9vIHZlcmJvc2Ugb3Igc2lsbHkgaW5mb3JtYXRpb24uICovXG4gIHNpbGx5ID0gXCJzaWxseVwiLFxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBOdW1lcmljIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggbG9nIGxldmVscy5cbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiBsb2cgbGV2ZWxzIGZvciBjb21wYXJpc29uIGFuZCBmaWx0ZXJpbmcuXG4gKiBAY29uc3QgTnVtZXJpY0xvZ0xldmVsc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGVycm9yIC0gTnVtZXJpYyB2YWx1ZSBmb3IgZXJyb3IgbGV2ZWwgKDIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGluZm8gLSBOdW1lcmljIHZhbHVlIGZvciBpbmZvIGxldmVsICg0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB2ZXJib3NlIC0gTnVtZXJpYyB2YWx1ZSBmb3IgdmVyYm9zZSBsZXZlbCAoNikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZGVidWcgLSBOdW1lcmljIHZhbHVlIGZvciBkZWJ1ZyBsZXZlbCAoNykuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2lsbHkgLSBOdW1lcmljIHZhbHVlIGZvciBzaWxseSBsZXZlbCAoOSkuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IE51bWVyaWNMb2dMZXZlbHMgPSB7XG4gIGVycm9yOiAyLFxuICBpbmZvOiA0LFxuICB2ZXJib3NlOiA2LFxuICBkZWJ1ZzogNyxcbiAgc2lsbHk6IDksXG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFbnVtIGZvciBsb2dnaW5nIG91dHB1dCBtb2Rlcy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgZGlmZmVyZW50IG91dHB1dCBmb3JtYXRzIGZvciBsb2cgbWVzc2FnZXMuXG4gKiBAZW51bSB7c3RyaW5nfVxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBlbnVtIExvZ2dpbmdNb2RlIHtcbiAgLyoqIFJhdyB0ZXh0IGZvcm1hdCBmb3IgaHVtYW4gcmVhZGFiaWxpdHkgKi9cbiAgUkFXID0gXCJyYXdcIixcbiAgLyoqIEpTT04gZm9ybWF0IGZvciBtYWNoaW5lIHBhcnNpbmcgKi9cbiAgSlNPTiA9IFwianNvblwiLFxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IHRoZW1lIGZvciBzdHlsaW5nIGxvZyBvdXRwdXQuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBkZWZhdWx0IGNvbG9yIGFuZCBzdHlsZSBzZXR0aW5ncyBmb3IgdmFyaW91cyBjb21wb25lbnRzIG9mIGxvZyBtZXNzYWdlcy5cbiAqIEBjb25zdCBEZWZhdWx0VGhlbWVcbiAqIEB0eXBlZGVmIHtUaGVtZX0gRGVmYXVsdFRoZW1lXG4gKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3MgLSBTdHlsaW5nIGZvciBjbGFzcyBuYW1lcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjbGFzcy5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgY2xhc3MgbmFtZXMgKDM0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBpZCAtIFN0eWxpbmcgZm9yIGlkZW50aWZpZXJzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGlkLmZnIC0gRm9yZWdyb3VuZCBjb2xvciBjb2RlIGZvciBpZGVudGlmaWVycyAoMzYpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IHN0YWNrIC0gU3R5bGluZyBmb3Igc3RhY2sgdHJhY2VzIChlbXB0eSBvYmplY3QpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IHRpbWVzdGFtcCAtIFN0eWxpbmcgZm9yIHRpbWVzdGFtcHMgKGVtcHR5IG9iamVjdCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbWVzc2FnZSAtIFN0eWxpbmcgZm9yIGRpZmZlcmVudCB0eXBlcyBvZiBtZXNzYWdlcy5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBtZXNzYWdlLmVycm9yIC0gU3R5bGluZyBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbWVzc2FnZS5lcnJvci5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgZXJyb3IgbWVzc2FnZXMgKDMxKS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBtZXRob2QgLSBTdHlsaW5nIGZvciBtZXRob2QgbmFtZXMgKGVtcHR5IG9iamVjdCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwgLSBTdHlsaW5nIGZvciBkaWZmZXJlbnQgbG9nIGxldmVscy5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dMZXZlbC5lcnJvciAtIFN0eWxpbmcgZm9yIGVycm9yIGxldmVsIGxvZ3MuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbG9nTGV2ZWwuZXJyb3IuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGVycm9yIGxldmVsIGxvZ3MgKDMxKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IGxvZ0xldmVsLmVycm9yLnN0eWxlIC0gU3R5bGUgYXR0cmlidXRlcyBmb3IgZXJyb3IgbGV2ZWwgbG9ncyAoW1wiYm9sZFwiXSkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwuaW5mbyAtIFN0eWxpbmcgZm9yIGluZm8gbGV2ZWwgbG9ncyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dMZXZlbC52ZXJib3NlIC0gU3R5bGluZyBmb3IgdmVyYm9zZSBsZXZlbCBsb2dzIChlbXB0eSBvYmplY3QpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsLmRlYnVnIC0gU3R5bGluZyBmb3IgZGVidWcgbGV2ZWwgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb2dMZXZlbC5kZWJ1Zy5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgZGVidWcgbGV2ZWwgbG9ncyAoMzMpLlxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0VGhlbWU6IFRoZW1lID0ge1xuICBhcHA6IHt9LFxuICBzZXBhcmF0b3I6IHt9LFxuICBjbGFzczoge1xuICAgIGZnOiAzNCxcbiAgfSxcbiAgaWQ6IHtcbiAgICBmZzogMzYsXG4gIH0sXG4gIHN0YWNrOiB7fSxcbiAgdGltZXN0YW1wOiB7fSxcbiAgbWVzc2FnZToge1xuICAgIGVycm9yOiB7XG4gICAgICBmZzogMzEsXG4gICAgfSxcbiAgfSxcbiAgbWV0aG9kOiB7fSxcbiAgbG9nTGV2ZWw6IHtcbiAgICBlcnJvcjoge1xuICAgICAgZmc6IDMxLFxuICAgICAgc3R5bGU6IFtcImJvbGRcIl0sXG4gICAgfSxcbiAgICBpbmZvOiB7XG4gICAgICBmZzogMzQsXG4gICAgICBzdHlsZTogW1wiYm9sZFwiXSxcbiAgICB9LFxuICAgIHZlcmJvc2U6IHtcbiAgICAgIGZnOiAzNCxcbiAgICAgIHN0eWxlOiBbXCJib2xkXCJdLFxuICAgIH0sXG4gICAgZGVidWc6IHtcbiAgICAgIGZnOiAzMyxcbiAgICAgIHN0eWxlOiBbXCJib2xkXCJdLFxuICAgIH0sXG4gIH0sXG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGxvZ2dpbmcuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgbG9nZ2luZyBzeXN0ZW0sIGluY2x1ZGluZyB2ZXJib3NpdHksIGxvZyBsZXZlbCwgc3R5bGluZywgYW5kIHRpbWVzdGFtcCBmb3JtYXQuXG4gKiBAY29uc3QgRGVmYXVsdExvZ2dpbmdDb25maWdcbiAqIEB0eXBlZGVmIHtMb2dnaW5nQ29uZmlnfSBEZWZhdWx0TG9nZ2luZ0NvbmZpZ1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHZlcmJvc2UgLSBWZXJib3NpdHkgbGV2ZWwgKDApLlxuICogQHByb3BlcnR5IHtMb2dMZXZlbH0gbGV2ZWwgLSBEZWZhdWx0IGxvZyBsZXZlbCAoTG9nTGV2ZWwuaW5mbykuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGxvZ0xldmVsIC0gV2hldGhlciB0byBkaXNwbGF5IGxvZyBsZXZlbCBpbiBvdXRwdXQgKHRydWUpLlxuICogQHByb3BlcnR5IHtMb2dnaW5nTW9kZX0gbW9kZSAtIE91dHB1dCBmb3JtYXQgbW9kZSAoTG9nZ2luZ01vZGUuUkFXKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3R5bGUgLSBXaGV0aGVyIHRvIGFwcGx5IHN0eWxpbmcgdG8gbG9nIG91dHB1dCAoZmFsc2UpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNlcGFyYXRvciAtIFNlcGFyYXRvciBiZXR3ZWVuIGxvZyBjb21wb25lbnRzIChcIiAtIFwiKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdGltZXN0YW1wIC0gV2hldGhlciB0byBpbmNsdWRlIHRpbWVzdGFtcHMgaW4gbG9nIG1lc3NhZ2VzICh0cnVlKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aW1lc3RhbXBGb3JtYXQgLSBGb3JtYXQgZm9yIHRpbWVzdGFtcHMgKFwiSEg6bW06c3MuU1NTXCIpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBjb250ZXh0IC0gV2hldGhlciB0byBpbmNsdWRlIGNvbnRleHQgaW5mb3JtYXRpb24gaW4gbG9nIG1lc3NhZ2VzICh0cnVlKS5cbiAqIEBwcm9wZXJ0eSB7VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIHRvIHVzZSBmb3Igc3R5bGluZyBsb2cgbWVzc2FnZXMgKERlZmF1bHRUaGVtZSkuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRMb2dnaW5nQ29uZmlnOiBMb2dnaW5nQ29uZmlnID0ge1xuICBlbnY6IFwiZGV2ZWxvcG1lbnRcIixcbiAgdmVyYm9zZTogMCxcbiAgbGV2ZWw6IExvZ0xldmVsLmluZm8sXG4gIGxvZ0xldmVsOiB0cnVlLFxuICBzdHlsZTogZmFsc2UsXG4gIGNvbnRleHRTZXBhcmF0b3I6IFwiLlwiLFxuICBzZXBhcmF0b3I6IFwiLVwiLFxuICB0aW1lc3RhbXA6IHRydWUsXG4gIHRpbWVzdGFtcEZvcm1hdDogXCJISDptbTpzcy5TU1NcIixcbiAgY29udGV4dDogdHJ1ZSxcbiAgZm9ybWF0OiBMb2dnaW5nTW9kZS5SQVcsXG4gIHBhdHRlcm46XG4gICAgXCJ7bGV2ZWx9IFt7dGltZXN0YW1wfV0ge2FwcH0ge2NvbnRleHR9IHtzZXBhcmF0b3J9IHttZXNzYWdlfSB7c3RhY2t9XCIsXG4gIHRoZW1lOiBEZWZhdWx0VGhlbWUsXG59O1xuIl19
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBRW5DOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUV2Qzs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUV0RDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQU4sSUFBWSxRQWFYO0FBYkQsV0FBWSxRQUFRO0lBQ2xCLHNFQUFzRTtJQUN0RSxtQ0FBdUIsQ0FBQTtJQUN2Qiw0RUFBNEU7SUFDNUUsMkJBQWUsQ0FBQTtJQUNmLHFFQUFxRTtJQUNyRSx5QkFBYSxDQUFBO0lBQ2Isd0VBQXdFO0lBQ3hFLCtCQUFtQixDQUFBO0lBQ25CLCtEQUErRDtJQUMvRCwyQkFBZSxDQUFBO0lBQ2YsNERBQTREO0lBQzVELDJCQUFlLENBQUE7QUFDakIsQ0FBQyxFQWJXLFFBQVEsS0FBUixRQUFRLFFBYW5CO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixTQUFTLEVBQUUsQ0FBQztJQUNaLEtBQUssRUFBRSxDQUFDO0lBQ1IsSUFBSSxFQUFFLENBQUM7SUFDUCxPQUFPLEVBQUUsQ0FBQztJQUNWLEtBQUssRUFBRSxDQUFDO0lBQ1IsS0FBSyxFQUFFLENBQUM7Q0FDVCxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQU4sSUFBWSxXQUtYO0FBTEQsV0FBWSxXQUFXO0lBQ3JCLDRDQUE0QztJQUM1QywwQkFBVyxDQUFBO0lBQ1gsc0NBQXNDO0lBQ3RDLDRCQUFhLENBQUE7QUFDZixDQUFDLEVBTFcsV0FBVyxLQUFYLFdBQVcsUUFLdEI7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFVO0lBQ2pDLEdBQUcsRUFBRSxFQUFFO0lBQ1AsU0FBUyxFQUFFLEVBQUU7SUFDYixLQUFLLEVBQUU7UUFDTCxFQUFFLEVBQUUsRUFBRTtLQUNQO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsRUFBRSxFQUFFLEVBQUU7S0FDUDtJQUNELEtBQUssRUFBRSxFQUFFO0lBQ1QsU0FBUyxFQUFFLEVBQUU7SUFDYixPQUFPLEVBQUU7UUFDUCxLQUFLLEVBQUU7WUFDTCxFQUFFLEVBQUUsRUFBRTtTQUNQO0tBQ0Y7SUFDRCxNQUFNLEVBQUUsRUFBRTtJQUNWLFFBQVEsRUFBRTtRQUNSLFNBQVMsRUFBRTtZQUNULEVBQUUsRUFBRSxFQUFFO1lBQ04sS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDO1NBQ2hCO1FBQ0QsS0FBSyxFQUFFO1lBQ0wsRUFBRSxFQUFFLEVBQUU7WUFDTixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUM7U0FDaEI7UUFDRCxJQUFJLEVBQUU7WUFDSixFQUFFLEVBQUUsRUFBRTtZQUNOLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQztTQUNoQjtRQUNELE9BQU8sRUFBRTtZQUNQLEVBQUUsRUFBRSxFQUFFO1lBQ04sS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDO1NBQ2hCO1FBQ0QsS0FBSyxFQUFFO1lBQ0wsRUFBRSxFQUFFLEVBQUU7WUFDTixLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUM7U0FDaEI7S0FDRjtDQUNGLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFrQjtJQUNqRCxHQUFHLEVBQUUsYUFBYTtJQUNsQixPQUFPLEVBQUUsQ0FBQztJQUNWLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSTtJQUNwQixRQUFRLEVBQUUsSUFBSTtJQUNkLEtBQUssRUFBRSxLQUFLO0lBQ1osZ0JBQWdCLEVBQUUsR0FBRztJQUNyQixTQUFTLEVBQUUsR0FBRztJQUNkLFNBQVMsRUFBRSxJQUFJO0lBQ2YsZUFBZSxFQUFFLGNBQWM7SUFDL0IsT0FBTyxFQUFFLElBQUk7SUFDYixNQUFNLEVBQUUsV0FBVyxDQUFDLEdBQUc7SUFDdkIsT0FBTyxFQUNMLHFFQUFxRTtJQUN2RSxLQUFLLEVBQUUsWUFBWTtDQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9nZ2luZ0NvbmZpZywgVGhlbWUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBHbG9iYWwga2V5IHVzZWQgdG8gc3RvcmUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIGJyb3dzZXIgY29udGV4dHMuXG4gKiBAc3VtbWFyeSBFbmFibGVzIHRoZSBsb2dnaW5nIGVudmlyb25tZW50IGhlbHBlcnMgdG8gbG9jYXRlIHNlcmlhbGl6ZWQgZW52aXJvbm1lbnQgY29uZmlndXJhdGlvbiBvbiBgZ2xvYmFsVGhpc2AuXG4gKiBAY29uc3QgQnJvd3NlckVudktleVxuICogQHR5cGUge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgY29uc3QgQnJvd3NlckVudktleSA9IFwiRU5WXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlbGltaXRlciB1c2VkIGZvciBjb21wb3NpbmcgbmVzdGVkIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzLlxuICogQHN1bW1hcnkgSm9pbnMgcGFyZW50IGFuZCBjaGlsZCBrZXlzIHdoZW4gbWFwcGluZyBvYmplY3QgcGF0aHMgdG8gRU5WIHN0cmluZ3MuXG4gKiBAY29uc3QgRU5WX1BBVEhfREVMSU1JVEVSXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBFTlZfUEFUSF9ERUxJTUlURVIgPSBcIl9fXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmF1bHQgcHJlZml4IGFuZCBzdWZmaXggdXNlZCBmb3IgdGVtcGxhdGUgcGxhY2Vob2xkZXJzLlxuICogQHN1bW1hcnkgUHJvdmlkZXMgd3JhcHBlciBzdHJpbmdzIGFwcGxpZWQgd2hlbiBpbnRlcnBvbGF0aW5nIG1lc3NhZ2VzIHdpdGgge0BsaW5rIHBhdGNoUGxhY2Vob2xkZXJzfS5cbiAqIEBjb25zdCBEZWZhdWx0UGxhY2Vob2xkZXJXcmFwcGVyc1xuICogQHR5cGUge3N0cmluZ1tdfVxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0UGxhY2Vob2xkZXJXcmFwcGVycyA9IFtcIiR7XCIsIFwifVwiXTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRW51bSBmb3IgbG9nIGxldmVscy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgZGlmZmVyZW50IGxldmVscyBvZiBsb2dnaW5nIGZvciB0aGUgYXBwbGljYXRpb24uXG4gKiBAZW51bSB7c3RyaW5nfVxuICogQHJlYWRvbmx5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGVudW0gTG9nTGV2ZWwge1xuICAvKiogQGRlc2NyaXB0aW9uIEJlbmNobWFyayBldmVudHMgdGhhdCBjYXB0dXJlIHBlcmZvcm1hbmNlIG1ldHJpY3MuICovXG4gIGJlbmNobWFyayA9IFwiYmVuY2htYXJrXCIsXG4gIC8qKiBAZGVzY3JpcHRpb24gRXJyb3IgZXZlbnRzIHRoYXQgaW5kaWNhdGUgZmFpbHVyZXMgcmVxdWlyaW5nIGF0dGVudGlvbi4gKi9cbiAgZXJyb3IgPSBcImVycm9yXCIsXG4gIC8qKiBAZGVzY3JpcHRpb24gSW5mb3JtYXRpb25hbCBldmVudHMgZGVzY3JpYmluZyBub3JtYWwgb3BlcmF0aW9uLiAqL1xuICBpbmZvID0gXCJpbmZvXCIsXG4gIC8qKiBAZGVzY3JpcHRpb24gVmVyYm9zZSBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGZvciBkZXRhaWxlZCB0cmFjaW5nLiAqL1xuICB2ZXJib3NlID0gXCJ2ZXJib3NlXCIsXG4gIC8qKiBAZGVzY3JpcHRpb24gRGVidWcgb3IgdHJhY2UgZGV0YWlscyBhaW1lZCBhdCBkZXZlbG9wZXJzLiAqL1xuICBkZWJ1ZyA9IFwiZGVidWdcIixcbiAgLyoqIEBkZXNjcmlwdGlvbiBFeHRyZW1lbHkgY2hhdHR5IG9yIHBsYXlmdWwgbG9nIGVudHJpZXMuICovXG4gIHNpbGx5ID0gXCJzaWxseVwiLFxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBOdW1lcmljIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggbG9nIGxldmVscy5cbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiBsb2cgbGV2ZWxzIGZvciBjb21wYXJpc29uIGFuZCBmaWx0ZXJpbmcuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBOdW1lcmljTG9nTGV2ZWxzU2hhcGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZW5jaG1hcmsgLSBOdW1lcmljIHZhbHVlIGZvciBiZW5jaG1hcmsgbGV2ZWwgKDApLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGVycm9yIC0gTnVtZXJpYyB2YWx1ZSBmb3IgZXJyb3IgbGV2ZWwgKDIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGluZm8gLSBOdW1lcmljIHZhbHVlIGZvciBpbmZvIGxldmVsICg0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB2ZXJib3NlIC0gTnVtZXJpYyB2YWx1ZSBmb3IgdmVyYm9zZSBsZXZlbCAoNikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZGVidWcgLSBOdW1lcmljIHZhbHVlIGZvciBkZWJ1ZyBsZXZlbCAoNykuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2lsbHkgLSBOdW1lcmljIHZhbHVlIGZvciBzaWxseSBsZXZlbCAoOSkuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gTnVtZXJpYyB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGxvZyBsZXZlbHMuXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBhIG51bWVyaWMgcmVwcmVzZW50YXRpb24gb2YgbG9nIGxldmVscyBmb3IgY29tcGFyaXNvbiBhbmQgZmlsdGVyaW5nLlxuICogQGNvbnN0IE51bWVyaWNMb2dMZXZlbHNcbiAqIEB0eXBlIHtOdW1lcmljTG9nTGV2ZWxzU2hhcGV9XG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IE51bWVyaWNMb2dMZXZlbHMgPSB7XG4gIGJlbmNobWFyazogMCxcbiAgZXJyb3I6IDIsXG4gIGluZm86IDQsXG4gIHZlcmJvc2U6IDYsXG4gIGRlYnVnOiA3LFxuICBzaWxseTogOSxcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVudW0gZm9yIGxvZ2dpbmcgb3V0cHV0IG1vZGVzLlxuICogQHN1bW1hcnkgRGVmaW5lcyBkaWZmZXJlbnQgb3V0cHV0IGZvcm1hdHMgZm9yIGxvZyBtZXNzYWdlcy5cbiAqIEBlbnVtIHtzdHJpbmd9XG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGVudW0gTG9nZ2luZ01vZGUge1xuICAvKiogUmF3IHRleHQgZm9ybWF0IGZvciBodW1hbiByZWFkYWJpbGl0eSAqL1xuICBSQVcgPSBcInJhd1wiLFxuICAvKiogSlNPTiBmb3JtYXQgZm9yIG1hY2hpbmUgcGFyc2luZyAqL1xuICBKU09OID0gXCJqc29uXCIsXG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmF1bHQgdGhlbWUgZm9yIHN0eWxpbmcgbG9nIG91dHB1dC5cbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGRlZmF1bHQgY29sb3IgYW5kIHN0eWxlIHNldHRpbmdzIGZvciB2YXJpb3VzIGNvbXBvbmVudHMgb2YgbG9nIG1lc3NhZ2VzLlxuICogQHR5cGVkZWYge1RoZW1lfSBEZWZhdWx0VGhlbWVcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjbGFzcyAtIFN0eWxpbmcgZm9yIGNsYXNzIG5hbWVzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNsYXNzLmZnIC0gRm9yZWdyb3VuZCBjb2xvciBjb2RlIGZvciBjbGFzcyBuYW1lcyAoMzQpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGlkIC0gU3R5bGluZyBmb3IgaWRlbnRpZmllcnMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaWQuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGlkZW50aWZpZXJzICgzNikuXG4gKiBAcHJvcGVydHkge09iamVjdH0gc3RhY2sgLSBTdHlsaW5nIGZvciBzdGFjayB0cmFjZXMgKGVtcHR5IG9iamVjdCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gdGltZXN0YW1wIC0gU3R5bGluZyBmb3IgdGltZXN0YW1wcyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBtZXNzYWdlIC0gU3R5bGluZyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIG1lc3NhZ2VzLlxuICogQHByb3BlcnR5IHtPYmplY3R9IG1lc3NhZ2UuZXJyb3IgLSBTdHlsaW5nIGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtZXNzYWdlLmVycm9yLmZnIC0gRm9yZWdyb3VuZCBjb2xvciBjb2RlIGZvciBlcnJvciBtZXNzYWdlcyAoMzEpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IG1ldGhvZCAtIFN0eWxpbmcgZm9yIG1ldGhvZCBuYW1lcyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dMZXZlbCAtIFN0eWxpbmcgZm9yIGRpZmZlcmVudCBsb2cgbGV2ZWxzLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsLmVycm9yIC0gU3R5bGluZyBmb3IgZXJyb3IgbGV2ZWwgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb2dMZXZlbC5lcnJvci5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgZXJyb3IgbGV2ZWwgbG9ncyAoMzEpLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gbG9nTGV2ZWwuZXJyb3Iuc3R5bGUgLSBTdHlsZSBhdHRyaWJ1dGVzIGZvciBlcnJvciBsZXZlbCBsb2dzIChbXCJib2xkXCJdKS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dMZXZlbC5pbmZvIC0gU3R5bGluZyBmb3IgaW5mbyBsZXZlbCBsb2dzIChlbXB0eSBvYmplY3QpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsLnZlcmJvc2UgLSBTdHlsaW5nIGZvciB2ZXJib3NlIGxldmVsIGxvZ3MgKGVtcHR5IG9iamVjdCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwuZGVidWcgLSBTdHlsaW5nIGZvciBkZWJ1ZyBsZXZlbCBsb2dzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxvZ0xldmVsLmRlYnVnLmZnIC0gRm9yZWdyb3VuZCBjb2xvciBjb2RlIGZvciBkZWJ1ZyBsZXZlbCBsb2dzICgzMykuXG4gKiBAY29uc3QgRGVmYXVsdFRoZW1lXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRUaGVtZTogVGhlbWUgPSB7XG4gIGFwcDoge30sXG4gIHNlcGFyYXRvcjoge30sXG4gIGNsYXNzOiB7XG4gICAgZmc6IDM0LFxuICB9LFxuICBpZDoge1xuICAgIGZnOiAzNixcbiAgfSxcbiAgc3RhY2s6IHt9LFxuICB0aW1lc3RhbXA6IHt9LFxuICBtZXNzYWdlOiB7XG4gICAgZXJyb3I6IHtcbiAgICAgIGZnOiAzMSxcbiAgICB9LFxuICB9LFxuICBtZXRob2Q6IHt9LFxuICBsb2dMZXZlbDoge1xuICAgIGJlbmNobWFyazoge1xuICAgICAgZmc6IDMyLFxuICAgICAgc3R5bGU6IFtcImJvbGRcIl0sXG4gICAgfSxcbiAgICBlcnJvcjoge1xuICAgICAgZmc6IDMxLFxuICAgICAgc3R5bGU6IFtcImJvbGRcIl0sXG4gICAgfSxcbiAgICBpbmZvOiB7XG4gICAgICBmZzogMzQsXG4gICAgICBzdHlsZTogW1wiYm9sZFwiXSxcbiAgICB9LFxuICAgIHZlcmJvc2U6IHtcbiAgICAgIGZnOiAzNCxcbiAgICAgIHN0eWxlOiBbXCJib2xkXCJdLFxuICAgIH0sXG4gICAgZGVidWc6IHtcbiAgICAgIGZnOiAzMyxcbiAgICAgIHN0eWxlOiBbXCJib2xkXCJdLFxuICAgIH0sXG4gIH0sXG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGxvZ2dpbmcuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgbG9nZ2luZyBzeXN0ZW0sIGluY2x1ZGluZyB2ZXJib3NpdHksIGxvZyBsZXZlbCwgc3R5bGluZywgYW5kIHRpbWVzdGFtcCBmb3JtYXQuXG4gKiBAY29uc3QgRGVmYXVsdExvZ2dpbmdDb25maWdcbiAqIEB0eXBlZGVmIHtMb2dnaW5nQ29uZmlnfSBEZWZhdWx0TG9nZ2luZ0NvbmZpZ1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHZlcmJvc2UgLSBWZXJib3NpdHkgbGV2ZWwgKDApLlxuICogQHByb3BlcnR5IHtMb2dMZXZlbH0gbGV2ZWwgLSBEZWZhdWx0IGxvZyBsZXZlbCAoTG9nTGV2ZWwuaW5mbykuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGxvZ0xldmVsIC0gV2hldGhlciB0byBkaXNwbGF5IGxvZyBsZXZlbCBpbiBvdXRwdXQgKHRydWUpLlxuICogQHByb3BlcnR5IHtMb2dnaW5nTW9kZX0gbW9kZSAtIE91dHB1dCBmb3JtYXQgbW9kZSAoTG9nZ2luZ01vZGUuUkFXKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3R5bGUgLSBXaGV0aGVyIHRvIGFwcGx5IHN0eWxpbmcgdG8gbG9nIG91dHB1dCAoZmFsc2UpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNlcGFyYXRvciAtIFNlcGFyYXRvciBiZXR3ZWVuIGxvZyBjb21wb25lbnRzIChcIiAtIFwiKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdGltZXN0YW1wIC0gV2hldGhlciB0byBpbmNsdWRlIHRpbWVzdGFtcHMgaW4gbG9nIG1lc3NhZ2VzICh0cnVlKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aW1lc3RhbXBGb3JtYXQgLSBGb3JtYXQgZm9yIHRpbWVzdGFtcHMgKFwiSEg6bW06c3MuU1NTXCIpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBjb250ZXh0IC0gV2hldGhlciB0byBpbmNsdWRlIGNvbnRleHQgaW5mb3JtYXRpb24gaW4gbG9nIG1lc3NhZ2VzICh0cnVlKS5cbiAqIEBwcm9wZXJ0eSB7VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIHRvIHVzZSBmb3Igc3R5bGluZyBsb2cgbWVzc2FnZXMgKERlZmF1bHRUaGVtZSkuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRMb2dnaW5nQ29uZmlnOiBMb2dnaW5nQ29uZmlnID0ge1xuICBlbnY6IFwiZGV2ZWxvcG1lbnRcIixcbiAgdmVyYm9zZTogMCxcbiAgbGV2ZWw6IExvZ0xldmVsLmluZm8sXG4gIGxvZ0xldmVsOiB0cnVlLFxuICBzdHlsZTogZmFsc2UsXG4gIGNvbnRleHRTZXBhcmF0b3I6IFwiLlwiLFxuICBzZXBhcmF0b3I6IFwiLVwiLFxuICB0aW1lc3RhbXA6IHRydWUsXG4gIHRpbWVzdGFtcEZvcm1hdDogXCJISDptbTpzcy5TU1NcIixcbiAgY29udGV4dDogdHJ1ZSxcbiAgZm9ybWF0OiBMb2dnaW5nTW9kZS5SQVcsXG4gIHBhdHRlcm46XG4gICAgXCJ7bGV2ZWx9IFt7dGltZXN0YW1wfV0ge2FwcH0ge2NvbnRleHR9IHtzZXBhcmF0b3J9IHttZXNzYWdlfSB7c3RhY2t9XCIsXG4gIHRoZW1lOiBEZWZhdWx0VGhlbWUsXG59O1xuIl19
@@ -1,11 +1,14 @@
1
1
  import { LogLevel } from "./constants";
2
+ export type ArgFormatFunction = (...args: any[]) => string;
3
+ export type ReturnFormatFunction = (e?: Error, result?: any) => string;
2
4
  /**
3
- * @description Method decorator for logging function calls
4
- * @summary Creates a decorator that logs method calls with specified level, benchmarking, and verbosity
5
- * @param {LogLevel} level - The log level to use (default: LogLevel.info)
6
- * @param {boolean} [benchmark=false] - Whether to log execution time (default: false)
7
- * @param {number} [verbosity=0] - The verbosity level for the log messages (default: 0)
8
- * @return {Function} A method decorator that wraps the original method with logging
5
+ * @description Method decorator for logging function calls.
6
+ * @summary Wraps class methods to automatically log entry, exit, timing, and optional custom messages at a configurable {@link LogLevel}.
7
+ * @param {LogLevel} level - Log level applied to the generated log statements (defaults to `LogLevel.info`).
8
+ * @param {number} [verbosity=0] - Verbosity threshold required for the entry log to appear.
9
+ * @param {ArgFormatFunction} [entryMessage] - Formatter invoked with the original method arguments to describe the invocation.
10
+ * @param {ReturnFormatFunction} [exitMessage] - Optional formatter that describes the outcome or failure of the call.
11
+ * @return {function(any, any, PropertyDescriptor): void} Method decorator proxy that injects logging behavior.
9
12
  * @function log
10
13
  * @mermaid
11
14
  * sequenceDiagram
@@ -30,64 +33,76 @@ import { LogLevel } from "./constants";
30
33
  * end
31
34
  * @category Method Decorators
32
35
  */
33
- export declare function log(level?: LogLevel, benchmark?: boolean, verbosity?: number): (target: any, propertyKey?: any, descriptor?: PropertyDescriptor) => void;
36
+ export declare function log(level?: LogLevel, verbosity?: number, entryMessage?: ArgFormatFunction, exitMessage?: ReturnFormatFunction): (target: any, propertyKey?: any, descriptor?: any) => any;
34
37
  /**
35
- * @description Method decorator for logging function calls with debug level
36
- * @summary Convenience wrapper around the log decorator that uses LogLevel.debug
37
- * @param {boolean} [benchmark=false] - Whether to log execution time (default: false)
38
- * @return {Function} A method decorator that wraps the original method with debug logging
38
+ * @description Method decorator that records execution time at the benchmark level.
39
+ * @summary Wraps the target method to emit {@link Logger.benchmark} entries capturing completion time or failure latency.
40
+ * @return {function(any, any, PropertyDescriptor): void} Method decorator proxy that benchmarks the original implementation.
41
+ * @function benchmark
42
+ * @mermaid
43
+ * sequenceDiagram
44
+ * participant Caller
45
+ * participant Decorator as benchmark
46
+ * participant Method as Original Method
47
+ * Caller->>Decorator: invoke()
48
+ * Decorator->>Method: Reflect.apply(...)
49
+ * alt Promise result
50
+ * Method-->>Decorator: Promise
51
+ * Decorator->>Decorator: attach then()
52
+ * Decorator->>Decorator: log completion duration
53
+ * else Synchronous result
54
+ * Method-->>Decorator: value
55
+ * Decorator->>Decorator: log completion duration
56
+ * end
57
+ * Decorator-->>Caller: return result
58
+ * @category Method Decorators
59
+ */
60
+ export declare function benchmark(): (target: any, propertyKey?: any, descriptor?: any) => any;
61
+ /**
62
+ * @description Method decorator for logging function calls with debug level.
63
+ * @summary Convenience wrapper around {@link log} that logs using `LogLevel.debug`.
64
+ * @return {function(any, any, PropertyDescriptor): void} Debug-level logging decorator.
39
65
  * @function debug
40
66
  * @category Method Decorators
41
67
  */
42
- export declare function debug(benchmark?: boolean): (target: any, propertyKey?: any, descriptor?: PropertyDescriptor) => void;
68
+ export declare function debug(): (target: any, propertyKey?: any, descriptor?: any) => any;
43
69
  /**
44
- * @description Method decorator for logging function calls with info level
45
- * @summary Convenience wrapper around the log decorator that uses LogLevel.info
46
- * @param {boolean} [benchmark=false] - Whether to log execution time (default: false)
47
- * @return {Function} A method decorator that wraps the original method with info logging
70
+ * @description Method decorator for logging function calls with info level.
71
+ * @summary Convenience wrapper around {@link log} that logs using `LogLevel.info`.
72
+ * @return {function(any, any, PropertyDescriptor): void} Info-level logging decorator.
48
73
  * @function info
49
74
  * @category Method Decorators
50
75
  */
51
- export declare function info(benchmark?: boolean): (target: any, propertyKey?: any, descriptor?: PropertyDescriptor) => void;
76
+ export declare function info(): (target: any, propertyKey?: any, descriptor?: any) => any;
52
77
  /**
53
- * @description Method decorator for logging function calls with silly level
54
- * @summary Convenience wrapper around the log decorator that uses LogLevel.silly
55
- * @param {boolean} [benchmark=false] - Whether to log execution time (default: false)
56
- * @return {Function} A method decorator that wraps the original method with silly logging
78
+ * @description Method decorator for logging function calls with silly level.
79
+ * @summary Convenience wrapper around {@link log} that logs using `LogLevel.silly`.
80
+ * @return {function(any, any, PropertyDescriptor): void} Silly-level logging decorator.
57
81
  * @function silly
58
82
  * @category Method Decorators
59
83
  */
60
- export declare function silly(benchmark?: boolean): (target: any, propertyKey?: any, descriptor?: PropertyDescriptor) => void;
84
+ export declare function silly(): (target: any, propertyKey?: any, descriptor?: any) => any;
61
85
  /**
62
- * @description Method decorator for logging function calls with verbose level
63
- * @summary Convenience wrapper around the log decorator that uses LogLevel.verbose with configurable verbosity
64
- * @return {Function} A method decorator that wraps the original method with verbose logging
86
+ * @description Method decorator for logging function calls with verbose level.
87
+ * @summary Convenience wrapper around {@link log} that logs using `LogLevel.verbose` with configurable verbosity.
88
+ * @return {function(any, any, PropertyDescriptor): void} Verbose logging decorator.
65
89
  * @function verbose
90
+ * @category Method Decorators
66
91
  */
67
92
  export declare function verbose(): (target: any, propertyKey?: any, descriptor?: any) => void;
68
93
  /**
69
- * @description Method decorator for logging function calls with verbose level
70
- * @summary Convenience wrapper around the log decorator that uses LogLevel.verbose with configurable verbosity
71
- * @param {boolean} benchmark - Whether to log execution time
72
- * @return {Function} A method decorator that wraps the original method with verbose logging
73
- * @function verbose
74
- */
75
- export declare function verbose(benchmark: boolean): (target: any, propertyKey?: any, descriptor?: any) => void;
76
- /**
77
- * @description Method decorator for logging function calls with verbose level
78
- * @summary Convenience wrapper around the log decorator that uses LogLevel.verbose with configurable verbosity
79
- * @param {number} verbosity - The verbosity level for the log messages (default: 0)
80
- * @return {Function} A method decorator that wraps the original method with verbose logging
94
+ * @description Method decorator for logging function calls with verbose level.
95
+ * @summary Convenience wrapper around {@link log} that logs using `LogLevel.verbose` while toggling benchmarking.
96
+ * @return {function(any, PropertyDescriptor): void} Verbose logging decorator.
81
97
  * @function verbose
82
98
  * @category Method Decorators
83
99
  */
84
- export declare function verbose(verbosity: number | boolean): (target: any, propertyKey?: any, descriptor?: any) => void;
100
+ export declare function verbose(): (target: any, propertyKey?: any, descriptor?: any) => void;
85
101
  /**
86
- * @description Creates a decorator that makes a method non-configurable
87
- * @summary This decorator prevents a method from being overridden by making it non-configurable.
88
- * It throws an error if used on anything other than a method.
89
- * @return {Function} A decorator function that can be applied to methods
102
+ * @description Creates a decorator that makes a method non-configurable.
103
+ * @summary Prevents overriding by marking the method descriptor as non-configurable, throwing if applied to non-method targets.
104
+ * @return {function(object, any, PropertyDescriptor): PropertyDescriptor|undefined} Decorator that hardens the method descriptor.
90
105
  * @function final
91
106
  * @category Method Decorators
92
107
  */
93
- export declare function final(): (target: object, propertyKey?: any, descriptor?: PropertyDescriptor) => PropertyDescriptor;
108
+ export declare function final(): (target: object, propertyKey?: any, descriptor?: any) => any;