@decaf-ts/logging 0.3.8 → 0.3.10

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 (56) hide show
  1. package/LICENSE.md +3 -2
  2. package/dist/logging.cjs +588 -105
  3. package/dist/logging.esm.cjs +568 -102
  4. package/lib/constants.cjs +15 -6
  5. package/lib/constants.d.ts +7 -0
  6. package/lib/decorators.cjs +44 -27
  7. package/lib/decorators.d.ts +9 -0
  8. package/lib/environment.cjs +204 -0
  9. package/lib/environment.d.ts +86 -0
  10. package/lib/esm/constants.d.ts +7 -0
  11. package/lib/esm/constants.js +14 -5
  12. package/lib/esm/decorators.d.ts +9 -0
  13. package/lib/esm/decorators.js +43 -27
  14. package/lib/esm/environment.d.ts +86 -0
  15. package/lib/esm/environment.js +200 -0
  16. package/lib/esm/filters/LogFilter.d.ts +6 -0
  17. package/lib/esm/filters/LogFilter.js +7 -0
  18. package/lib/esm/filters/PatternFilter.d.ts +10 -0
  19. package/lib/esm/filters/PatternFilter.js +44 -0
  20. package/lib/esm/filters/index.d.ts +2 -0
  21. package/lib/esm/filters/index.js +3 -0
  22. package/lib/esm/index.d.ts +5 -2
  23. package/lib/esm/index.js +6 -3
  24. package/lib/esm/logging.d.ts +10 -11
  25. package/lib/esm/logging.js +38 -27
  26. package/lib/esm/text.d.ts +156 -0
  27. package/lib/esm/text.js +214 -0
  28. package/lib/esm/types.d.ts +31 -5
  29. package/lib/esm/types.js +1 -1
  30. package/lib/esm/web.d.ts +8 -0
  31. package/lib/esm/web.js +12 -0
  32. package/lib/esm/winston/winston.d.ts +2 -2
  33. package/lib/esm/winston/winston.js +4 -4
  34. package/lib/filters/LogFilter.cjs +11 -0
  35. package/lib/filters/LogFilter.d.ts +6 -0
  36. package/lib/filters/PatternFilter.cjs +48 -0
  37. package/lib/filters/PatternFilter.d.ts +10 -0
  38. package/lib/filters/index.cjs +19 -0
  39. package/lib/filters/index.d.ts +2 -0
  40. package/lib/index.cjs +6 -3
  41. package/lib/index.d.ts +5 -2
  42. package/lib/logging.cjs +37 -26
  43. package/lib/logging.d.ts +10 -11
  44. package/lib/text.cjs +227 -0
  45. package/lib/text.d.ts +156 -0
  46. package/lib/types.cjs +1 -1
  47. package/lib/types.d.ts +31 -5
  48. package/lib/web.cjs +15 -0
  49. package/lib/web.d.ts +8 -0
  50. package/lib/winston/winston.cjs +4 -4
  51. package/lib/winston/winston.d.ts +2 -2
  52. package/package.json +13 -4
  53. package/lib/esm/utils.d.ts +0 -12
  54. package/lib/esm/utils.js +0 -31
  55. package/lib/utils.cjs +0 -34
  56. package/lib/utils.d.ts +0 -12
package/lib/text.cjs ADDED
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stringFormat = void 0;
4
+ exports.padEnd = padEnd;
5
+ exports.patchPlaceholders = patchPlaceholders;
6
+ exports.patchString = patchString;
7
+ exports.toCamelCase = toCamelCase;
8
+ exports.toENVFormat = toENVFormat;
9
+ exports.toSnakeCase = toSnakeCase;
10
+ exports.toKebabCase = toKebabCase;
11
+ exports.toPascalCase = toPascalCase;
12
+ exports.escapeRegExp = escapeRegExp;
13
+ exports.sf = sf;
14
+ const constants_1 = require("./constants.cjs");
15
+ /**
16
+ * @description Pads the end of a string with a specified character.
17
+ * @summary Extends the input string to a specified length by adding a padding character to the end.
18
+ * If the input string is already longer than the specified length, it is returned unchanged.
19
+ *
20
+ * @param {string} str - The input string to be padded.
21
+ * @param {number} length - The desired total length of the resulting string.
22
+ * @param {string} [char=" "] - The character to use for padding. Defaults to a space.
23
+ * @return {string} The padded string.
24
+ * @throws {Error} If the padding character is not exactly one character long.
25
+ *
26
+ * @function padEnd
27
+ *
28
+ * @memberOf module:Logging
29
+ */
30
+ function padEnd(str, length, char = " ") {
31
+ if (char.length !== 1)
32
+ throw new Error("Invalid character length for padding. must be one!");
33
+ return str.padEnd(length, char);
34
+ }
35
+ /**
36
+ * @description Replaces placeholders in a string with provided values.
37
+ * @summary Interpolates a string by replacing placeholders of the form ${variableName}
38
+ * with corresponding values from the provided object. If a placeholder doesn't have
39
+ * a corresponding value, it is left unchanged in the string.
40
+ *
41
+ * @param {string} input - The input string containing placeholders to be replaced.
42
+ * @param {Record<string, number | string>} values - An object containing key-value pairs for replacement.
43
+ * @param prefix
44
+ * @param suffix
45
+ * @param flags
46
+ * @return {string} The interpolated string with placeholders replaced by their corresponding values.
47
+ *
48
+ * @function patchPlaceholders
49
+ *
50
+ * @mermaid
51
+ * sequenceDiagram
52
+ * participant Caller
53
+ * participant patchString
54
+ * participant String.replace
55
+ * Caller->>patchString: Call with input and values
56
+ * patchString->>String.replace: Call with regex and replacement function
57
+ * String.replace->>patchString: Return replaced string
58
+ * patchString-->>Caller: Return patched string
59
+ *
60
+ * @memberOf module:Logging
61
+ */
62
+ function patchPlaceholders(input, values, prefix = constants_1.DefaultPlaceholderWrappers[0], suffix = constants_1.DefaultPlaceholderWrappers[1], flags = "g") {
63
+ const placeholders = Object.entries(values).reduce((acc, [key, val]) => {
64
+ acc[`${prefix}${key}${suffix}`] = val;
65
+ return acc;
66
+ }, {});
67
+ return patchString(input, placeholders, flags);
68
+ }
69
+ /**
70
+ * @description Replaces occurrences of keys with their corresponding values in a string.
71
+ * @summary Iterates through a set of key-value pairs and replaces all occurrences of each key
72
+ * in the input string with its corresponding value. Supports regular expression flags for customized replacement.
73
+ *
74
+ * @param {string} input - The input string in which replacements will be made.
75
+ * @param {Record<string, number | string>} values - An object containing key-value pairs for replacement.
76
+ * @param {string} [flags="g"] - Regular expression flags to control the replacement behavior.
77
+ * @return {string} The string with all specified replacements applied.
78
+ *
79
+ * @function patchString
80
+ *
81
+ * @memberOf module:Logging
82
+ */
83
+ function patchString(input, values, flags = "g") {
84
+ Object.entries(values).forEach(([key, val]) => {
85
+ const regexp = new RegExp(escapeRegExp(key), flags);
86
+ input = input.replace(regexp, val);
87
+ });
88
+ return input;
89
+ }
90
+ /**
91
+ * @description Converts a string to camelCase.
92
+ * @summary Transforms the input string into camelCase format, where words are joined without spaces
93
+ * and each word after the first starts with a capital letter.
94
+ *
95
+ * @param {string} text - The input string to be converted.
96
+ * @return {string} The input string converted to camelCase.
97
+ *
98
+ * @function toCamelCase
99
+ *
100
+ * @memberOf module:Logging
101
+ */
102
+ function toCamelCase(text) {
103
+ return text
104
+ .replace(/(?:^\w|[A-Z]|\b\w)/g, (word, index) => index === 0 ? word.toLowerCase() : word.toUpperCase())
105
+ .replace(/\s+/g, "");
106
+ }
107
+ /**
108
+ * @description Converts a string to ENVIRONMENT_VARIABLE format.
109
+ * @summary Transforms the input string into uppercase with words separated by underscores,
110
+ * typically used for environment variable names.
111
+ *
112
+ * @param {string} text - The input string to be converted.
113
+ * @return {string} The input string converted to ENVIRONMENT_VARIABLE format.
114
+ *
115
+ * @function toENVFormat
116
+ *
117
+ * @memberOf module:Logging
118
+ */
119
+ function toENVFormat(text) {
120
+ return toSnakeCase(text).toUpperCase();
121
+ }
122
+ /**
123
+ * @description Converts a string to snake_case.
124
+ * @summary Transforms the input string into lowercase with words separated by underscores.
125
+ *
126
+ * @param {string} text - The input string to be converted.
127
+ * @return {string} The input string converted to snake_case.
128
+ *
129
+ * @function toSnakeCase
130
+ *
131
+ * @memberOf module:Logging
132
+ */
133
+ function toSnakeCase(text) {
134
+ return text
135
+ .replace(/([a-z])([A-Z])/g, "$1_$2")
136
+ .replace(/[\s-]+/g, "_")
137
+ .toLowerCase();
138
+ }
139
+ /**
140
+ * @description Converts a string to kebab-case.
141
+ * @summary Transforms the input string into lowercase with words separated by hyphens.
142
+ *
143
+ * @param {string} text - The input string to be converted.
144
+ * @return {string} The input string converted to kebab-case.
145
+ *
146
+ * @function toKebabCase
147
+ *
148
+ * @memberOf module:Logging
149
+ */
150
+ function toKebabCase(text) {
151
+ return text
152
+ .replace(/([a-z])([A-Z])/g, "$1-$2")
153
+ .replace(/[\s_]+/g, "-")
154
+ .toLowerCase();
155
+ }
156
+ /**
157
+ * @description Converts a string to PascalCase.
158
+ * @summary Transforms the input string into PascalCase format, where words are joined without spaces
159
+ * and each word starts with a capital letter.
160
+ *
161
+ * @param {string} text - The input string to be converted.
162
+ * @return {string} The input string converted to PascalCase.
163
+ *
164
+ * @function toPascalCase
165
+ *
166
+ * @memberOf module:Logging
167
+ */
168
+ function toPascalCase(text) {
169
+ return text
170
+ .replace(/(?:^\w|[A-Z]|\b\w)/g, (word) => word.toUpperCase())
171
+ .replace(/\s+/g, "");
172
+ }
173
+ /**
174
+ * @description Escapes special characters in a string for use in a regular expression.
175
+ * @summary Adds backslashes before characters that have special meaning in regular expressions,
176
+ * allowing the string to be used as a literal match in a RegExp.
177
+ *
178
+ * @param {string} string - The string to escape for regular expression use.
179
+ * @return {string} The escaped string safe for use in regular expressions.
180
+ *
181
+ * @function escapeRegExp
182
+ *
183
+ * @memberOf module:Logging
184
+ */
185
+ function escapeRegExp(string) {
186
+ return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
187
+ }
188
+ /**
189
+ * @summary Util function to provide string format functionality similar to C#'s string.format
190
+ *
191
+ * @param {string} string
192
+ * @param {Array<string | number> | Record<string, any>} [args] replacements made by order of appearance (replacement0 wil replace {0} and so on)
193
+ * @return {string} formatted string
194
+ *
195
+ * @function sf
196
+ * @memberOf module:Logging
197
+ */
198
+ function sf(string, ...args) {
199
+ if (args.length > 1) {
200
+ if (!args.every((arg) => typeof arg === "string" || typeof arg === "number"))
201
+ throw new Error(`Only string and number arguments are supported for multiple replacements.`);
202
+ }
203
+ if (args.length === 1 && typeof args[0] === "object") {
204
+ const obj = args[0];
205
+ return Object.entries(obj).reduce((acc, [key, val]) => {
206
+ return acc.replace(new RegExp(`\\{${key}\\}`, "g"), function () {
207
+ return val;
208
+ });
209
+ }, string);
210
+ }
211
+ return string.replace(/{(\d+)}/g, function (match, number) {
212
+ return typeof args[number] !== "undefined"
213
+ ? args[number].toString()
214
+ : "undefined";
215
+ });
216
+ }
217
+ /**
218
+ * @summary Util function to provide string format functionality similar to C#'s string.format
219
+ *
220
+ * @see sf
221
+ *
222
+ * @deprecated
223
+ * @function stringFormat
224
+ * @memberOf module:Logging
225
+ */
226
+ exports.stringFormat = sf;
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWlCQSx3QkFRQztBQTZCRCw4Q0FlQztBQWdCRCxrQ0FVQztBQWNELGtDQU1DO0FBY0Qsa0NBRUM7QUFhRCxrQ0FLQztBQWFELGtDQUtDO0FBY0Qsb0NBSUM7QUFjRCxvQ0FFQztBQVlELGdCQTJCQztBQWhQRCwrQ0FBeUQ7QUFFekQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFnQixNQUFNLENBQ3BCLEdBQVcsRUFDWCxNQUFjLEVBQ2QsT0FBZSxHQUFHO0lBRWxCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztJQUN4RSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFDSCxTQUFnQixpQkFBaUIsQ0FDL0IsS0FBYSxFQUNiLE1BQXVDLEVBQ3ZDLFNBQWlCLHNDQUEwQixDQUFDLENBQUMsQ0FBQyxFQUM5QyxTQUFpQixzQ0FBMEIsQ0FBQyxDQUFDLENBQUMsRUFDOUMsUUFBZ0IsR0FBRztJQUVuQixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FDaEQsQ0FBQyxHQUF3QixFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7UUFDdkMsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN0QyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFDRCxFQUFFLENBQ0gsQ0FBQztJQUNGLE9BQU8sV0FBVyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxTQUFnQixXQUFXLENBQ3pCLEtBQWEsRUFDYixNQUF1QyxFQUN2QyxRQUFnQixHQUFHO0lBRW5CLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRTtRQUM1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEQsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQWEsQ0FBQyxDQUFDO0lBQy9DLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixXQUFXLENBQUMsSUFBWTtJQUN0QyxPQUFPLElBQUk7U0FDUixPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDOUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3REO1NBQ0EsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixXQUFXLENBQUMsSUFBWTtJQUN0QyxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxJQUFZO0lBQ3RDLE9BQU8sSUFBSTtTQUNSLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUM7U0FDbkMsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUM7U0FDdkIsV0FBVyxFQUFFLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixXQUFXLENBQUMsSUFBWTtJQUN0QyxPQUFPLElBQUk7U0FDUixPQUFPLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO1NBQ25DLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO1NBQ3ZCLFdBQVcsRUFBRSxDQUFDO0FBQ25CLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLE9BQU8sSUFBSTtTQUNSLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzVELE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLE1BQWM7SUFDekMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsb0NBQW9DO0FBQzVGLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixFQUFFLENBQ2hCLE1BQWMsRUFDZCxHQUFHLElBQStDO0lBRWxELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNwQixJQUNFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQztZQUV4RSxNQUFNLElBQUksS0FBSyxDQUNiLDJFQUEyRSxDQUM1RSxDQUFDO0lBQ04sQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDckQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBd0IsQ0FBQztRQUMzQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDcEQsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ2xELE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxVQUFVLEtBQUssRUFBRSxNQUFNO1FBQ3ZELE9BQU8sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssV0FBVztZQUN4QyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUN6QixDQUFDLENBQUMsV0FBVyxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ1UsUUFBQSxZQUFZLEdBQUcsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVmYXVsdFBsYWNlaG9sZGVyV3JhcHBlcnMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFkcyB0aGUgZW5kIG9mIGEgc3RyaW5nIHdpdGggYSBzcGVjaWZpZWQgY2hhcmFjdGVyLlxuICogQHN1bW1hcnkgRXh0ZW5kcyB0aGUgaW5wdXQgc3RyaW5nIHRvIGEgc3BlY2lmaWVkIGxlbmd0aCBieSBhZGRpbmcgYSBwYWRkaW5nIGNoYXJhY3RlciB0byB0aGUgZW5kLlxuICogSWYgdGhlIGlucHV0IHN0cmluZyBpcyBhbHJlYWR5IGxvbmdlciB0aGFuIHRoZSBzcGVjaWZpZWQgbGVuZ3RoLCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgcGFkZGVkLlxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCAtIFRoZSBkZXNpcmVkIHRvdGFsIGxlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcj1cIiBcIl0gLSBUaGUgY2hhcmFjdGVyIHRvIHVzZSBmb3IgcGFkZGluZy4gRGVmYXVsdHMgdG8gYSBzcGFjZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHBhZGRlZCBzdHJpbmcuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBhZGRpbmcgY2hhcmFjdGVyIGlzIG5vdCBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgbG9uZy5cbiAqXG4gKiBAZnVuY3Rpb24gcGFkRW5kXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYWRFbmQoXG4gIHN0cjogc3RyaW5nLFxuICBsZW5ndGg6IG51bWJlcixcbiAgY2hhcjogc3RyaW5nID0gXCIgXCJcbik6IHN0cmluZyB7XG4gIGlmIChjaGFyLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNoYXJhY3RlciBsZW5ndGggZm9yIHBhZGRpbmcuIG11c3QgYmUgb25lIVwiKTtcbiAgcmV0dXJuIHN0ci5wYWRFbmQobGVuZ3RoLCBjaGFyKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwbGFjZXMgcGxhY2Vob2xkZXJzIGluIGEgc3RyaW5nIHdpdGggcHJvdmlkZWQgdmFsdWVzLlxuICogQHN1bW1hcnkgSW50ZXJwb2xhdGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBwbGFjZWhvbGRlcnMgb2YgdGhlIGZvcm0gJHt2YXJpYWJsZU5hbWV9XG4gKiB3aXRoIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZyb20gdGhlIHByb3ZpZGVkIG9iamVjdC4gSWYgYSBwbGFjZWhvbGRlciBkb2Vzbid0IGhhdmVcbiAqIGEgY29ycmVzcG9uZGluZyB2YWx1ZSwgaXQgaXMgbGVmdCB1bmNoYW5nZWQgaW4gdGhlIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgLSBUaGUgaW5wdXQgc3RyaW5nIGNvbnRhaW5pbmcgcGxhY2Vob2xkZXJzIHRvIGJlIHJlcGxhY2VkLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+fSB2YWx1ZXMgLSBBbiBvYmplY3QgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnMgZm9yIHJlcGxhY2VtZW50LlxuICogQHBhcmFtIHByZWZpeFxuICogQHBhcmFtIHN1ZmZpeFxuICogQHBhcmFtIGZsYWdzXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnRlcnBvbGF0ZWQgc3RyaW5nIHdpdGggcGxhY2Vob2xkZXJzIHJlcGxhY2VkIGJ5IHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICpcbiAqIEBmdW5jdGlvbiBwYXRjaFBsYWNlaG9sZGVyc1xuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IHBhdGNoU3RyaW5nXG4gKiAgIHBhcnRpY2lwYW50IFN0cmluZy5yZXBsYWNlXG4gKiAgIENhbGxlci0+PnBhdGNoU3RyaW5nOiBDYWxsIHdpdGggaW5wdXQgYW5kIHZhbHVlc1xuICogICBwYXRjaFN0cmluZy0+PlN0cmluZy5yZXBsYWNlOiBDYWxsIHdpdGggcmVnZXggYW5kIHJlcGxhY2VtZW50IGZ1bmN0aW9uXG4gKiAgIFN0cmluZy5yZXBsYWNlLT4+cGF0Y2hTdHJpbmc6IFJldHVybiByZXBsYWNlZCBzdHJpbmdcbiAqICAgcGF0Y2hTdHJpbmctLT4+Q2FsbGVyOiBSZXR1cm4gcGF0Y2hlZCBzdHJpbmdcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoUGxhY2Vob2xkZXJzKFxuICBpbnB1dDogc3RyaW5nLFxuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz4sXG4gIHByZWZpeDogc3RyaW5nID0gRGVmYXVsdFBsYWNlaG9sZGVyV3JhcHBlcnNbMF0sXG4gIHN1ZmZpeDogc3RyaW5nID0gRGVmYXVsdFBsYWNlaG9sZGVyV3JhcHBlcnNbMV0sXG4gIGZsYWdzOiBzdHJpbmcgPSBcImdcIlxuKTogc3RyaW5nIHtcbiAgY29uc3QgcGxhY2Vob2xkZXJzID0gT2JqZWN0LmVudHJpZXModmFsdWVzKS5yZWR1Y2UoXG4gICAgKGFjYzogUmVjb3JkPHN0cmluZywgYW55PiwgW2tleSwgdmFsXSkgPT4ge1xuICAgICAgYWNjW2Ake3ByZWZpeH0ke2tleX0ke3N1ZmZpeH1gXSA9IHZhbDtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSxcbiAgICB7fVxuICApO1xuICByZXR1cm4gcGF0Y2hTdHJpbmcoaW5wdXQsIHBsYWNlaG9sZGVycywgZmxhZ3MpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXBsYWNlcyBvY2N1cnJlbmNlcyBvZiBrZXlzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMgaW4gYSBzdHJpbmcuXG4gKiBAc3VtbWFyeSBJdGVyYXRlcyB0aHJvdWdoIGEgc2V0IG9mIGtleS12YWx1ZSBwYWlycyBhbmQgcmVwbGFjZXMgYWxsIG9jY3VycmVuY2VzIG9mIGVhY2gga2V5XG4gKiBpbiB0aGUgaW5wdXQgc3RyaW5nIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgdmFsdWUuIFN1cHBvcnRzIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFncyBmb3IgY3VzdG9taXplZCByZXBsYWNlbWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgLSBUaGUgaW5wdXQgc3RyaW5nIGluIHdoaWNoIHJlcGxhY2VtZW50cyB3aWxsIGJlIG1hZGUuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz59IHZhbHVlcyAtIEFuIG9iamVjdCBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgcmVwbGFjZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2ZsYWdzPVwiZ1wiXSAtIFJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFncyB0byBjb250cm9sIHRoZSByZXBsYWNlbWVudCBiZWhhdmlvci5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZyB3aXRoIGFsbCBzcGVjaWZpZWQgcmVwbGFjZW1lbnRzIGFwcGxpZWQuXG4gKlxuICogQGZ1bmN0aW9uIHBhdGNoU3RyaW5nXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaFN0cmluZyhcbiAgaW5wdXQ6IHN0cmluZyxcbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+LFxuICBmbGFnczogc3RyaW5nID0gXCJnXCJcbik6IHN0cmluZyB7XG4gIE9iamVjdC5lbnRyaWVzKHZhbHVlcykuZm9yRWFjaCgoW2tleSwgdmFsXSkgPT4ge1xuICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXhwKGtleSksIGZsYWdzKTtcbiAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UocmVnZXhwLCB2YWwgYXMgc3RyaW5nKTtcbiAgfSk7XG4gIHJldHVybiBpbnB1dDtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBzdHJpbmcgdG8gY2FtZWxDYXNlLlxuICogQHN1bW1hcnkgVHJhbnNmb3JtcyB0aGUgaW5wdXQgc3RyaW5nIGludG8gY2FtZWxDYXNlIGZvcm1hdCwgd2hlcmUgd29yZHMgYXJlIGpvaW5lZCB3aXRob3V0IHNwYWNlc1xuICogYW5kIGVhY2ggd29yZCBhZnRlciB0aGUgZmlyc3Qgc3RhcnRzIHdpdGggYSBjYXBpdGFsIGxldHRlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBjYW1lbENhc2UuXG4gKlxuICogQGZ1bmN0aW9uIHRvQ2FtZWxDYXNlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NhbWVsQ2FzZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC8oPzpeXFx3fFtBLVpdfFxcYlxcdykvZywgKHdvcmQsIGluZGV4KSA9PlxuICAgICAgaW5kZXggPT09IDAgPyB3b3JkLnRvTG93ZXJDYXNlKCkgOiB3b3JkLnRvVXBwZXJDYXNlKClcbiAgICApXG4gICAgLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIEVOVklST05NRU5UX1ZBUklBQkxFIGZvcm1hdC5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIHVwcGVyY2FzZSB3aXRoIHdvcmRzIHNlcGFyYXRlZCBieSB1bmRlcnNjb3JlcyxcbiAqIHR5cGljYWxseSB1c2VkIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBFTlZJUk9OTUVOVF9WQVJJQUJMRSBmb3JtYXQuXG4gKlxuICogQGZ1bmN0aW9uIHRvRU5WRm9ybWF0XG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0VOVkZvcm1hdCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9TbmFrZUNhc2UodGV4dCkudG9VcHBlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBzdHJpbmcgdG8gc25ha2VfY2FzZS5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIGxvd2VyY2FzZSB3aXRoIHdvcmRzIHNlcGFyYXRlZCBieSB1bmRlcnNjb3Jlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBzbmFrZV9jYXNlLlxuICpcbiAqIEBmdW5jdGlvbiB0b1NuYWtlQ2FzZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9TbmFrZUNhc2UodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHRcbiAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgXCIkMV8kMlwiKVxuICAgIC5yZXBsYWNlKC9bXFxzLV0rL2csIFwiX1wiKVxuICAgIC50b0xvd2VyQ2FzZSgpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBhIHN0cmluZyB0byBrZWJhYi1jYXNlLlxuICogQHN1bW1hcnkgVHJhbnNmb3JtcyB0aGUgaW5wdXQgc3RyaW5nIGludG8gbG93ZXJjYXNlIHdpdGggd29yZHMgc2VwYXJhdGVkIGJ5IGh5cGhlbnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHN0cmluZyBjb252ZXJ0ZWQgdG8ga2ViYWItY2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9LZWJhYkNhc2VcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvS2ViYWJDYXNlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIFwiJDEtJDJcIilcbiAgICAucmVwbGFjZSgvW1xcc19dKy9nLCBcIi1cIilcbiAgICAudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBzdHJpbmcgdG8gUGFzY2FsQ2FzZS5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIFBhc2NhbENhc2UgZm9ybWF0LCB3aGVyZSB3b3JkcyBhcmUgam9pbmVkIHdpdGhvdXQgc3BhY2VzXG4gKiBhbmQgZWFjaCB3b3JkIHN0YXJ0cyB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHN0cmluZyBjb252ZXJ0ZWQgdG8gUGFzY2FsQ2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9QYXNjYWxDYXNlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Bhc2NhbENhc2UodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHRcbiAgICAucmVwbGFjZSgvKD86Xlxcd3xbQS1aXXxcXGJcXHcpL2csICh3b3JkKSA9PiB3b3JkLnRvVXBwZXJDYXNlKCkpXG4gICAgLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVzY2FwZXMgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nIGZvciB1c2UgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKiBAc3VtbWFyeSBBZGRzIGJhY2tzbGFzaGVzIGJlZm9yZSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBzcGVjaWFsIG1lYW5pbmcgaW4gcmVndWxhciBleHByZXNzaW9ucyxcbiAqIGFsbG93aW5nIHRoZSBzdHJpbmcgdG8gYmUgdXNlZCBhcyBhIGxpdGVyYWwgbWF0Y2ggaW4gYSBSZWdFeHAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyAtIFRoZSBzdHJpbmcgdG8gZXNjYXBlIGZvciByZWd1bGFyIGV4cHJlc3Npb24gdXNlLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZXNjYXBlZCBzdHJpbmcgc2FmZSBmb3IgdXNlIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG4gKlxuICogQGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cmluZzogc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpOyAvLyAkJiBtZWFucyB0aGUgd2hvbGUgbWF0Y2hlZCBzdHJpbmdcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBVdGlsIGZ1bmN0aW9uIHRvIHByb3ZpZGUgc3RyaW5nIGZvcm1hdCBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gQyMncyBzdHJpbmcuZm9ybWF0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICogQHBhcmFtIHtBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgUmVjb3JkPHN0cmluZywgYW55Pn0gW2FyZ3NdIHJlcGxhY2VtZW50cyBtYWRlIGJ5IG9yZGVyIG9mIGFwcGVhcmFuY2UgKHJlcGxhY2VtZW50MCB3aWwgcmVwbGFjZSB7MH0gYW5kIHNvIG9uKVxuICogQHJldHVybiB7c3RyaW5nfSBmb3JtYXR0ZWQgc3RyaW5nXG4gKlxuICogQGZ1bmN0aW9uIHNmXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNmKFxuICBzdHJpbmc6IHN0cmluZyxcbiAgLi4uYXJnczogKHN0cmluZyB8IG51bWJlciB8IFJlY29yZDxzdHJpbmcsIGFueT4pW11cbikge1xuICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgaWYgKFxuICAgICAgIWFyZ3MuZXZlcnkoKGFyZykgPT4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgYXJnID09PSBcIm51bWJlclwiKVxuICAgIClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE9ubHkgc3RyaW5nIGFuZCBudW1iZXIgYXJndW1lbnRzIGFyZSBzdXBwb3J0ZWQgZm9yIG11bHRpcGxlIHJlcGxhY2VtZW50cy5gXG4gICAgICApO1xuICB9XG5cbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSBcIm9iamVjdFwiKSB7XG4gICAgY29uc3Qgb2JqID0gYXJnc1swXSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhvYmopLnJlZHVjZSgoYWNjLCBba2V5LCB2YWxdKSA9PiB7XG4gICAgICByZXR1cm4gYWNjLnJlcGxhY2UobmV3IFJlZ0V4cChgXFxcXHske2tleX1cXFxcfWAsIFwiZ1wiKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfSk7XG4gICAgfSwgc3RyaW5nKTtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgveyhcXGQrKX0vZywgZnVuY3Rpb24gKG1hdGNoLCBudW1iZXIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGFyZ3NbbnVtYmVyXSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgPyBhcmdzW251bWJlcl0udG9TdHJpbmcoKVxuICAgICAgOiBcInVuZGVmaW5lZFwiO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBVdGlsIGZ1bmN0aW9uIHRvIHByb3ZpZGUgc3RyaW5nIGZvcm1hdCBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gQyMncyBzdHJpbmcuZm9ybWF0XG4gKlxuICogQHNlZSBzZlxuICpcbiAqIEBkZXByZWNhdGVkXG4gKiBAZnVuY3Rpb24gc3RyaW5nRm9ybWF0XG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHN0cmluZ0Zvcm1hdCA9IHNmO1xuIl19
package/lib/text.d.ts ADDED
@@ -0,0 +1,156 @@
1
+ /**
2
+ * @description Pads the end of a string with a specified character.
3
+ * @summary Extends the input string to a specified length by adding a padding character to the end.
4
+ * If the input string is already longer than the specified length, it is returned unchanged.
5
+ *
6
+ * @param {string} str - The input string to be padded.
7
+ * @param {number} length - The desired total length of the resulting string.
8
+ * @param {string} [char=" "] - The character to use for padding. Defaults to a space.
9
+ * @return {string} The padded string.
10
+ * @throws {Error} If the padding character is not exactly one character long.
11
+ *
12
+ * @function padEnd
13
+ *
14
+ * @memberOf module:Logging
15
+ */
16
+ export declare function padEnd(str: string, length: number, char?: string): string;
17
+ /**
18
+ * @description Replaces placeholders in a string with provided values.
19
+ * @summary Interpolates a string by replacing placeholders of the form ${variableName}
20
+ * with corresponding values from the provided object. If a placeholder doesn't have
21
+ * a corresponding value, it is left unchanged in the string.
22
+ *
23
+ * @param {string} input - The input string containing placeholders to be replaced.
24
+ * @param {Record<string, number | string>} values - An object containing key-value pairs for replacement.
25
+ * @param prefix
26
+ * @param suffix
27
+ * @param flags
28
+ * @return {string} The interpolated string with placeholders replaced by their corresponding values.
29
+ *
30
+ * @function patchPlaceholders
31
+ *
32
+ * @mermaid
33
+ * sequenceDiagram
34
+ * participant Caller
35
+ * participant patchString
36
+ * participant String.replace
37
+ * Caller->>patchString: Call with input and values
38
+ * patchString->>String.replace: Call with regex and replacement function
39
+ * String.replace->>patchString: Return replaced string
40
+ * patchString-->>Caller: Return patched string
41
+ *
42
+ * @memberOf module:Logging
43
+ */
44
+ export declare function patchPlaceholders(input: string, values: Record<string, number | string>, prefix?: string, suffix?: string, flags?: string): string;
45
+ /**
46
+ * @description Replaces occurrences of keys with their corresponding values in a string.
47
+ * @summary Iterates through a set of key-value pairs and replaces all occurrences of each key
48
+ * in the input string with its corresponding value. Supports regular expression flags for customized replacement.
49
+ *
50
+ * @param {string} input - The input string in which replacements will be made.
51
+ * @param {Record<string, number | string>} values - An object containing key-value pairs for replacement.
52
+ * @param {string} [flags="g"] - Regular expression flags to control the replacement behavior.
53
+ * @return {string} The string with all specified replacements applied.
54
+ *
55
+ * @function patchString
56
+ *
57
+ * @memberOf module:Logging
58
+ */
59
+ export declare function patchString(input: string, values: Record<string, number | string>, flags?: string): string;
60
+ /**
61
+ * @description Converts a string to camelCase.
62
+ * @summary Transforms the input string into camelCase format, where words are joined without spaces
63
+ * and each word after the first starts with a capital letter.
64
+ *
65
+ * @param {string} text - The input string to be converted.
66
+ * @return {string} The input string converted to camelCase.
67
+ *
68
+ * @function toCamelCase
69
+ *
70
+ * @memberOf module:Logging
71
+ */
72
+ export declare function toCamelCase(text: string): string;
73
+ /**
74
+ * @description Converts a string to ENVIRONMENT_VARIABLE format.
75
+ * @summary Transforms the input string into uppercase with words separated by underscores,
76
+ * typically used for environment variable names.
77
+ *
78
+ * @param {string} text - The input string to be converted.
79
+ * @return {string} The input string converted to ENVIRONMENT_VARIABLE format.
80
+ *
81
+ * @function toENVFormat
82
+ *
83
+ * @memberOf module:Logging
84
+ */
85
+ export declare function toENVFormat(text: string): string;
86
+ /**
87
+ * @description Converts a string to snake_case.
88
+ * @summary Transforms the input string into lowercase with words separated by underscores.
89
+ *
90
+ * @param {string} text - The input string to be converted.
91
+ * @return {string} The input string converted to snake_case.
92
+ *
93
+ * @function toSnakeCase
94
+ *
95
+ * @memberOf module:Logging
96
+ */
97
+ export declare function toSnakeCase(text: string): string;
98
+ /**
99
+ * @description Converts a string to kebab-case.
100
+ * @summary Transforms the input string into lowercase with words separated by hyphens.
101
+ *
102
+ * @param {string} text - The input string to be converted.
103
+ * @return {string} The input string converted to kebab-case.
104
+ *
105
+ * @function toKebabCase
106
+ *
107
+ * @memberOf module:Logging
108
+ */
109
+ export declare function toKebabCase(text: string): string;
110
+ /**
111
+ * @description Converts a string to PascalCase.
112
+ * @summary Transforms the input string into PascalCase format, where words are joined without spaces
113
+ * and each word starts with a capital letter.
114
+ *
115
+ * @param {string} text - The input string to be converted.
116
+ * @return {string} The input string converted to PascalCase.
117
+ *
118
+ * @function toPascalCase
119
+ *
120
+ * @memberOf module:Logging
121
+ */
122
+ export declare function toPascalCase(text: string): string;
123
+ /**
124
+ * @description Escapes special characters in a string for use in a regular expression.
125
+ * @summary Adds backslashes before characters that have special meaning in regular expressions,
126
+ * allowing the string to be used as a literal match in a RegExp.
127
+ *
128
+ * @param {string} string - The string to escape for regular expression use.
129
+ * @return {string} The escaped string safe for use in regular expressions.
130
+ *
131
+ * @function escapeRegExp
132
+ *
133
+ * @memberOf module:Logging
134
+ */
135
+ export declare function escapeRegExp(string: string): string;
136
+ /**
137
+ * @summary Util function to provide string format functionality similar to C#'s string.format
138
+ *
139
+ * @param {string} string
140
+ * @param {Array<string | number> | Record<string, any>} [args] replacements made by order of appearance (replacement0 wil replace {0} and so on)
141
+ * @return {string} formatted string
142
+ *
143
+ * @function sf
144
+ * @memberOf module:Logging
145
+ */
146
+ export declare function sf(string: string, ...args: (string | number | Record<string, any>)[]): string;
147
+ /**
148
+ * @summary Util function to provide string format functionality similar to C#'s string.format
149
+ *
150
+ * @see sf
151
+ *
152
+ * @deprecated
153
+ * @function stringFormat
154
+ * @memberOf module:Logging
155
+ */
156
+ export declare const stringFormat: typeof sf;
package/lib/types.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0eWxlcyB9IGZyb20gXCJzdHlsZWQtc3RyaW5nLWJ1aWxkZXJcIjtcbmltcG9ydCB7IExvZ2dpbmdNb2RlLCBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIHR5cGUgcmVwcmVzZW50aW5nIHN0cmluZy1saWtlIHZhbHVlc1xuICogQHN1bW1hcnkgUmVwcmVzZW50cyBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gb2JqZWN0IHdpdGggYSB0b1N0cmluZyBtZXRob2QgdGhhdCByZXR1cm5zIGEgc3RyaW5nXG4gKiBAdHlwZWRlZiB7KHN0cmluZ3xPYmplY3QpfSBTdHJpbmdMaWtlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IHR5cGUgU3RyaW5nTGlrZSA9IHN0cmluZyB8IHsgdG9TdHJpbmc6ICgpID0+IHN0cmluZyB9O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIGdlbmVyaWMgZnVuY3Rpb24gdHlwZSB3aXRoIGFueSBhcmd1bWVudHMgYW5kIHJldHVyblxuICogQHN1bW1hcnkgUmVwcmVzZW50cyBhbnkgY2FsbGFibGUgc2lnbmF0dXJlLCB1c2VmdWwgZm9yIGFubm90YXRpbmcgaGlnaGVyLW9yZGVyIHV0aWxpdGllc1xuICogYW5kIGR5bmFtaWMgbWV0aG9kIHJlZmVyZW5jZXMgd2hlcmUgYXJndW1lbnQgYW5kIHJldHVybiB0eXBlcyBhcmUgbm90IGNvbnN0cmFpbmVkLlxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSBBbnlGdW5jdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCB0eXBlIEFueUZ1bmN0aW9uID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEEgY29uc3RydWN0YWJsZSBjbGFzcyB0eXBlXG4gKiBAc3VtbWFyeSBEZXNjcmliZXMgYSBjbGFzcyBjb25zdHJ1Y3RvciB0aGF0IHByb2R1Y2VzIGluc3RhbmNlcyBvZiB0eXBlIFQuIFVzZWZ1bCB3aGVuXG4gKiBwYXNzaW5nIGNsYXNzIHJlZmVyZW5jZXMgYXJvdW5kIChlLmcuLCBmb3IgY29udGV4dCBvciBkZXBlbmRlbmN5IGluamVjdGlvbikuXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2Z1bmN0aW9uKGFueVtdKTogVH0gQ2xhc3NcbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgdHlwZSBDbGFzczxUPiA9IHtcbiAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQ7XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIHR5cGUgcmVwcmVzZW50aW5nIGxvZ2dpbmcgY29udGV4dFxuICogQHN1bW1hcnkgUmVwcmVzZW50cyBhIGNvbnRleHQgZm9yIGxvZ2dpbmcsIHdoaWNoIGNhbiBiZSBhIHN0cmluZywgYSBjbGFzcyBjb25zdHJ1Y3Rvciwgb3IgYSBmdW5jdGlvblxuICogQHR5cGVkZWYgeyhzdHJpbmd8RnVuY3Rpb258T2JqZWN0KX0gTG9nZ2luZ0NvbnRleHRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgdHlwZSBMb2dnaW5nQ29udGV4dCA9IHN0cmluZyB8IENsYXNzPGFueT4gfCBBbnlGdW5jdGlvbjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBhIGxvZ2dlciB3aXRoIHZlcmJvc2l0eSBsZXZlbHMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIG1ldGhvZHMgZm9yIGxvZ2dpbmcgYXQgZGlmZmVyZW50IHZlcmJvc2l0eSBsZXZlbHMuXG4gKiBAaW50ZXJmYWNlIExvZ2dlclxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyIHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIGEgYHdheSB0b28gdmVyYm9zZWAgb3IgYSBzaWxseSBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge1N0cmluZ0xpa2V9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGxvZy5cbiAgICovXG4gIHNpbGx5KG1zZzogU3RyaW5nTGlrZSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIHZlcmJvc2UgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtTdHJpbmdMaWtlfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBsb2cuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2ZXJib3NpdHkgLSBUaGUgdmVyYm9zaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlLlxuICAgKi9cbiAgdmVyYm9zZShtc2c6IFN0cmluZ0xpa2UsIHZlcmJvc2l0eT86IG51bWJlcik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIGFuIGluZm8gbWVzc2FnZS5cbiAgICogQHBhcmFtIHtTdHJpbmdMaWtlfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBsb2cuXG4gICAqL1xuICBpbmZvKG1zZzogU3RyaW5nTGlrZSk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7U3RyaW5nTGlrZSB8IEVycm9yfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBsb2cuXG4gICAqL1xuICBlcnJvcihtc2c6IFN0cmluZ0xpa2UgfCBFcnJvcik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIGEgZGVidWcgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGxvZy5cbiAgICovXG4gIGRlYnVnKG1zZzogU3RyaW5nTGlrZSk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IGxvZ2dlciBmb3IgYSBzcGVjaWZpYyBtZXRob2Qgb3IgY29udGV4dFxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIGEgbmV3IGxvZ2dlciBpbnN0YW5jZSB0aGF0IGluY2x1ZGVzIHRoZSBzcGVjaWZpZWQgbWV0aG9kIG9yIGNvbnRleHQgaW4gaXRzIGxvZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFttZXRob2RdIC0gVGhlIG1ldGhvZCBuYW1lIG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGxvZ2dlciBmb3JcbiAgICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+fSBbY29uZmlnXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBuZXcgbG9nZ2VyXG4gICAqIEByZXR1cm4ge0xvZ2dlcn0gQSBuZXcgbG9nZ2VyIGluc3RhbmNlXG4gICAqL1xuICBmb3IoXG4gICAgbWV0aG9kPzogc3RyaW5nIHwgKCguLi5hcmdzOiBhbnlbXSkgPT4gYW55KSxcbiAgICBjb25maWc/OiBQYXJ0aWFsPExvZ2dpbmdDb25maWc+XG4gICk6IExvZ2dlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZXMgdGhlIGxvZ2dlciBjb25maWd1cmF0aW9uXG4gICAqIEBzdW1tYXJ5IFNldHMgb3IgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIGxvZ2dlciBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1BhcnRpYWw8TG9nZ2luZ0NvbmZpZz59IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYXBwbHlcbiAgICovXG4gIHNldENvbmZpZyhjb25maWc6IFBhcnRpYWw8TG9nZ2luZ0NvbmZpZz4pOiB2b2lkO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb25maWd1cmF0aW9uIGZvciBsb2dnaW5nLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgbG9nIGxldmVsIGFuZCB2ZXJib3NpdHkgZm9yIGxvZ2dpbmcuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMb2dnaW5nQ29uZmlnXG4gKiBAcHJvcGVydHkge0xvZ0xldmVsfSBsZXZlbCAtIFRoZSBsb2dnaW5nIGxldmVsLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbbG9nTGV2ZWxdIC0gV2hldGhlciB0byBkaXNwbGF5IGxvZyBsZXZlbCBpbiBvdXRwdXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmVyYm9zZSAtIFRoZSB2ZXJib3NpdHkgbGV2ZWwuXG4gKiBAcHJvcGVydHkge0xvZ2dpbmdNb2RlfSBbbW9kZV0gLSBPdXRwdXQgZm9ybWF0IG1vZGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29udGV4dFNlcGFyYXRvciAtIFNlcGFyYXRvciBiZXR3ZWVuIGNvbnRleHQgZW50cmllcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZXBhcmF0b3IgLSBTZXBhcmF0b3IgYmV0d2VlbiBsb2cgY29tcG9uZW50cy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3N0eWxlXSAtIFdoZXRoZXIgdG8gYXBwbHkgc3R5bGluZyB0byBsb2cgb3V0cHV0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbdGltZXN0YW1wXSAtIFdoZXRoZXIgdG8gaW5jbHVkZSB0aW1lc3RhbXBzIGluIGxvZyBtZXNzYWdlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdGltZXN0YW1wRm9ybWF0XSAtIEZvcm1hdCBmb3IgdGltZXN0YW1wcy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2NvbnRleHRdIC0gV2hldGhlciB0byBpbmNsdWRlIGNvbnRleHQgaW5mb3JtYXRpb24gaW4gbG9nIG1lc3NhZ2VzLlxuICogQHByb3BlcnR5IHtUaGVtZX0gW3RoZW1lXSAtIFRoZSB0aGVtZSB0byB1c2UgZm9yIHN0eWxpbmcgbG9nIG1lc3NhZ2VzLlxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSBbY29ycmVsYXRpb25JZF0gLSBDb3JyZWxhdGlvbiBJRCBmb3IgdHJhY2tpbmcgcmVsYXRlZCBsb2cgbWVzc2FnZXMuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTG9nZ2luZ0NvbmZpZyA9IHtcbiAgbGV2ZWw6IExvZ0xldmVsO1xuICBsb2dMZXZlbD86IGJvb2xlYW47XG4gIHZlcmJvc2U6IG51bWJlcjtcbiAgbW9kZT86IExvZ2dpbmdNb2RlO1xuICBjb250ZXh0U2VwYXJhdG9yOiBzdHJpbmc7XG4gIHNlcGFyYXRvcjogc3RyaW5nO1xuICBzdHlsZT86IGJvb2xlYW47XG4gIHRpbWVzdGFtcD86IGJvb2xlYW47XG4gIHRpbWVzdGFtcEZvcm1hdD86IHN0cmluZztcbiAgY29udGV4dD86IGJvb2xlYW47XG4gIHRoZW1lPzogVGhlbWU7XG4gIGZvcm1hdDogXCJyYXdcIiB8IFwianNvblwiO1xuICBwYXR0ZXJuOiBzdHJpbmc7XG4gIGNvcnJlbGF0aW9uSWQ/OiBzdHJpbmcgfCBudW1iZXI7XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIGZhY3RvcnkgZnVuY3Rpb24gdHlwZSBmb3IgY3JlYXRpbmcgbG9nZ2Vyc1xuICogQHN1bW1hcnkgRGVmaW5lcyBhIGZ1bmN0aW9uIHR5cGUgdGhhdCBjcmVhdGVzIGFuZCByZXR1cm5zIGEgbG9nZ2VyIGluc3RhbmNlIGZvciBhIGdpdmVuIG9iamVjdFxuICogQHRlbXBsYXRlIEwgLSBUaGUgbG9nZ2VyIHR5cGUsIGV4dGVuZGluZyB0aGUgYmFzZSBMb2dnZXIgaW50ZXJmYWNlXG4gKiBAdHlwZWRlZiB7RnVuY3Rpb259IExvZ2dlckZhY3RvcnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3QgLSBUaGUgb2JqZWN0IG9yIGNvbnRleHQgbmFtZSBmb3IgdGhlIGxvZ2dlclxuICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+fSBbY29uZmlnXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBsb2dnZXJcbiAqIEByZXR1cm4ge0x9IEEgbG9nZ2VyIGluc3RhbmNlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTG9nZ2VyRmFjdG9yeTxMIGV4dGVuZHMgTG9nZ2VyID0gTG9nZ2VyPiA9IChcbiAgb2JqZWN0OiBzdHJpbmcsXG4gIGNvbmZpZz86IFBhcnRpYWw8TG9nZ2luZ0NvbmZpZz4sXG4gIC4uLmFyZ3M6IGFueVtdXG4pID0+IEw7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgYSB0aGVtZSBvcHRpb24gZm9yIGNvbnNvbGUgb3V0cHV0IHN0eWxpbmcuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgZm9yIHN0eWxpbmcgYSBzcGVjaWZpYyBlbGVtZW50IGluIHRoZSBjb25zb2xlIG91dHB1dC5cbiAqIEl0IGFsbG93cyBmb3IgY3VzdG9taXphdGlvbiBvZiBmb3JlZ3JvdW5kIGNvbG9yLCBiYWNrZ3JvdW5kIGNvbG9yLCBhbmQgYWRkaXRpb25hbCBzdHlsZXMuXG4gKiBDb2xvcnMgY2FuIGJlIHNwZWNpZmllZCBhcyBhIHNpbmdsZSBudW1iZXIsIGFuIFJHQiBhcnJheSwgb3IgbGVmdCB1bmRlZmluZWQgZm9yIGRlZmF1bHQuXG4gKiBAaW50ZXJmYWNlIFRoZW1lT3B0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZU9wdGlvbiB7XG4gIGZnPzogbnVtYmVyIHwgW251bWJlcl0gfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbiAgYmc/OiBudW1iZXIgfCBbbnVtYmVyXSB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuICBzdHlsZT86IG51bWJlcltdIHwgW2tleW9mIHR5cGVvZiBzdHlsZXNdO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIHR5cGUgZm9yIHRoZW1lIG9wdGlvbnMgb3JnYW5pemVkIGJ5IGxvZyBsZXZlbFxuICogQHN1bW1hcnkgRGVmaW5lcyBhIHBhcnRpYWwgcmVjb3JkIG1hcHBpbmcgbG9nIGxldmVscyB0byB0aGVtZSBvcHRpb25zLCBhbGxvd2luZyBkaWZmZXJlbnQgc3R5bGluZyBmb3IgZGlmZmVyZW50IGxvZyBsZXZlbHNcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRoZW1lT3B0aW9uQnlMb2dMZXZlbFxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCB0eXBlIFRoZW1lT3B0aW9uQnlMb2dMZXZlbCA9IFBhcnRpYWw8UmVjb3JkPExvZ0xldmVsLCBUaGVtZU9wdGlvbj4+O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZpbmVzIHRoZSBjb2xvciB0aGVtZSBmb3IgY29uc29sZSBvdXRwdXQuXG4gKiBAc3VtbWFyeSBUaGlzIGludGVyZmFjZSBzcGVjaWZpZXMgdGhlIGNvbG9yIHNjaGVtZSBmb3IgdmFyaW91cyBlbGVtZW50cyBvZiBjb25zb2xlIG91dHB1dCxcbiAqIGluY2x1ZGluZyBzdHlsaW5nIGZvciBkaWZmZXJlbnQgbG9nIGxldmVscyBhbmQgY29tcG9uZW50cy4gSXQgdXNlcyBUaGVtZU9wdGlvbiB0b1xuICogZGVmaW5lIHRoZSBzdHlsaW5nIGZvciBlYWNoIGVsZW1lbnQsIGFsbG93aW5nIGZvciBjdXN0b21pemF0aW9uIG9mIGNvbG9ycyBhbmQgc3R5bGVzXG4gKiBmb3IgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBsb2cgb3V0cHV0LlxuICogQGludGVyZmFjZSBUaGVtZVxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWUge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0eWxpbmcgZm9yIGNsYXNzIG5hbWVzIGluIHRoZSBvdXRwdXQuXG4gICAqL1xuICBjbGFzczogVGhlbWVPcHRpb24gfCBUaGVtZU9wdGlvbkJ5TG9nTGV2ZWw7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdHlsaW5nIGZvciB0aW1lc3RhbXBzIGluIHRoZSBvdXRwdXQuXG4gICAqL1xuICB0aW1lc3RhbXA6IFRoZW1lT3B0aW9uIHwgVGhlbWVPcHRpb25CeUxvZ0xldmVsO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3R5bGluZyBmb3IgdGhlIG1haW4gbWVzc2FnZSB0ZXh0IGluIHRoZSBvdXRwdXQuXG4gICAqL1xuICBtZXNzYWdlOiBUaGVtZU9wdGlvbiB8IFRoZW1lT3B0aW9uQnlMb2dMZXZlbDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0eWxpbmcgZm9yIG1ldGhvZCBuYW1lcyBpbiB0aGUgb3V0cHV0LlxuICAgKi9cbiAgbWV0aG9kOiBUaGVtZU9wdGlvbiB8IFRoZW1lT3B0aW9uQnlMb2dMZXZlbDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0eWxpbmcgZm9yIGlkZW50aWZpZXIgZWxlbWVudHMgaW4gdGhlIG91dHB1dC5cbiAgICovXG4gIGlkOiBUaGVtZU9wdGlvbiB8IFRoZW1lT3B0aW9uQnlMb2dMZXZlbDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0eWxpbmcgZm9yIGlkZW50aWZpZXIgZWxlbWVudHMgaW4gdGhlIG91dHB1dC5cbiAgICovXG4gIHN0YWNrOiBUaGVtZU9wdGlvbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0eWxpbmcgZm9yIGRpZmZlcmVudCBsb2cgbGV2ZWxzIGluIHRoZSBvdXRwdXQuXG4gICAqL1xuICBsb2dMZXZlbDogVGhlbWVPcHRpb25CeUxvZ0xldmVsO1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0eWxlcyB9IGZyb20gXCJzdHlsZWQtc3RyaW5nLWJ1aWxkZXJcIjtcbmltcG9ydCB7IExvZ2dpbmdNb2RlLCBMb2dMZXZlbCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSB0eXBlIHJlcHJlc2VudGluZyBzdHJpbmctbGlrZSB2YWx1ZXNcbiAqIEBzdW1tYXJ5IFJlcHJlc2VudHMgZWl0aGVyIGEgc3RyaW5nIG9yIGFuIG9iamVjdCB3aXRoIGEgdG9TdHJpbmcgbWV0aG9kIHRoYXQgcmV0dXJucyBhIHN0cmluZ1xuICogQHR5cGVkZWYgeyhzdHJpbmd8T2JqZWN0KX0gU3RyaW5nTGlrZVxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCB0eXBlIFN0cmluZ0xpa2UgPSBzdHJpbmcgfCB7IHRvU3RyaW5nOiAoKSA9PiBzdHJpbmcgfTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBnZW5lcmljIGZ1bmN0aW9uIHR5cGUgd2l0aCBhbnkgYXJndW1lbnRzIGFuZCByZXR1cm5cbiAqIEBzdW1tYXJ5IFJlcHJlc2VudHMgYW55IGNhbGxhYmxlIHNpZ25hdHVyZSwgdXNlZnVsIGZvciBhbm5vdGF0aW5nIGhpZ2hlci1vcmRlciB1dGlsaXRpZXNcbiAqIGFuZCBkeW5hbWljIG1ldGhvZCByZWZlcmVuY2VzIHdoZXJlIGFyZ3VtZW50IGFuZCByZXR1cm4gdHlwZXMgYXJlIG5vdCBjb25zdHJhaW5lZC5cbiAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gQW55RnVuY3Rpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgdHlwZSBBbnlGdW5jdGlvbiA9ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIGNvbnN0cnVjdGFibGUgY2xhc3MgdHlwZVxuICogQHN1bW1hcnkgRGVzY3JpYmVzIGEgY2xhc3MgY29uc3RydWN0b3IgdGhhdCBwcm9kdWNlcyBpbnN0YW5jZXMgb2YgdHlwZSBULiBVc2VmdWwgd2hlblxuICogcGFzc2luZyBjbGFzcyByZWZlcmVuY2VzIGFyb3VuZCAoZS5nLiwgZm9yIGNvbnRleHQgb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24pLlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbihhbnlbXSk6IFR9IENsYXNzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IHR5cGUgQ2xhc3M8VD4gPSB7XG4gIG5ldyAoLi4uYXJnczogYW55W10pOiBUO1xufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSB0eXBlIHJlcHJlc2VudGluZyBsb2dnaW5nIGNvbnRleHRcbiAqIEBzdW1tYXJ5IFJlcHJlc2VudHMgYSBjb250ZXh0IGZvciBsb2dnaW5nLCB3aGljaCBjYW4gYmUgYSBzdHJpbmcsIGEgY2xhc3MgY29uc3RydWN0b3IsIG9yIGEgZnVuY3Rpb25cbiAqIEB0eXBlZGVmIHsoc3RyaW5nfEZ1bmN0aW9ufE9iamVjdCl9IExvZ2dpbmdDb250ZXh0XG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTG9nZ2luZ0NvbnRleHQgPSBzdHJpbmcgfCBDbGFzczxhbnk+IHwgQW55RnVuY3Rpb247XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1wZXJzb25hdGFibGU8VEhJUywgQVJHUyBleHRlbmRzIGFueVtdID0gYW55W10+IHtcbiAgZm9yKC4uLmFyZ3M6IEFSR1MpOiBUSElTO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnRlcmZhY2UgZm9yIGEgbG9nZ2VyIHdpdGggdmVyYm9zaXR5IGxldmVscy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgbWV0aG9kcyBmb3IgbG9nZ2luZyBhdCBkaWZmZXJlbnQgdmVyYm9zaXR5IGxldmVscy5cbiAqIEBpbnRlcmZhY2UgTG9nZ2VyXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dnZXJcbiAgZXh0ZW5kcyBJbXBlcnNvbmF0YWJsZTxcbiAgICBMb2dnZXIsXG4gICAgW1xuICAgICAgKFxuICAgICAgICB8IHN0cmluZ1xuICAgICAgICB8IHsgbmV3ICguLi5hcmdzOiBhbnlbXSk6IGFueSB9XG4gICAgICAgIHwgQW55RnVuY3Rpb25cbiAgICAgICAgfCBQYXJ0aWFsPExvZ2dpbmdDb25maWc+XG4gICAgICApLFxuICAgICAgUGFydGlhbDxMb2dnaW5nQ29uZmlnPixcbiAgICAgIC4uLmFueVtdLFxuICAgIF1cbiAgPiB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIGB3YXkgdG9vIHZlcmJvc2VgIG9yIGEgc2lsbHkgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtTdHJpbmdMaWtlfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBsb2cuXG4gICAqL1xuICBzaWxseShtc2c6IFN0cmluZ0xpa2UpOiB2b2lkO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSB2ZXJib3NlIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7U3RyaW5nTGlrZX0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gbG9nLlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmVyYm9zaXR5IC0gVGhlIHZlcmJvc2l0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZS5cbiAgICovXG4gIHZlcmJvc2UobXNnOiBTdHJpbmdMaWtlLCB2ZXJib3NpdHk/OiBudW1iZXIpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhbiBpbmZvIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7U3RyaW5nTGlrZX0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gbG9nLlxuICAgKi9cbiAgaW5mbyhtc2c6IFN0cmluZ0xpa2UpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhbiBlcnJvciBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge1N0cmluZ0xpa2UgfCBFcnJvcn0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gbG9nLlxuICAgKiBAcGFyYW0gZVxuICAgKi9cbiAgZXJyb3IobXNnOiBTdHJpbmdMaWtlIHwgRXJyb3IsIGU/OiBFcnJvcik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIGEgZGVidWcgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGxvZy5cbiAgICovXG4gIGRlYnVnKG1zZzogU3RyaW5nTGlrZSk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IGxvZ2dlciBmb3IgYSBzcGVjaWZpYyBtZXRob2Qgb3IgY29udGV4dFxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIGEgbmV3IGxvZ2dlciBpbnN0YW5jZSB0aGF0IGluY2x1ZGVzIHRoZSBzcGVjaWZpZWQgbWV0aG9kIG9yIGNvbnRleHQgaW4gaXRzIGxvZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFttZXRob2RdIC0gVGhlIG1ldGhvZCBuYW1lIG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGxvZ2dlciBmb3JcbiAgICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+fSBbY29uZmlnXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBuZXcgbG9nZ2VyXG4gICAqIEBwYXJhbSBhcmdzXG4gICAqIEByZXR1cm4ge0xvZ2dlcn0gQSBuZXcgbG9nZ2VyIGluc3RhbmNlXG4gICAqL1xuICBmb3IoXG4gICAgbWV0aG9kOlxuICAgICAgfCBzdHJpbmdcbiAgICAgIHwgeyBuZXcgKC4uLmFyZ3M6IGFueVtdKTogYW55IH1cbiAgICAgIHwgQW55RnVuY3Rpb25cbiAgICAgIHwgUGFydGlhbDxMb2dnaW5nQ29uZmlnPixcbiAgICBjb25maWc/OiBQYXJ0aWFsPExvZ2dpbmdDb25maWc+LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IExvZ2dlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZXMgdGhlIGxvZ2dlciBjb25maWd1cmF0aW9uXG4gICAqIEBzdW1tYXJ5IFNldHMgb3IgdXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIGxvZ2dlciBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1BhcnRpYWw8TG9nZ2luZ0NvbmZpZz59IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYXBwbHlcbiAgICovXG4gIHNldENvbmZpZyhjb25maWc6IFBhcnRpYWw8TG9nZ2luZ0NvbmZpZz4pOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dpbmdGaWx0ZXIge1xuICBmaWx0ZXIoY29uZmlnOiBMb2dnaW5nQ29uZmlnLCBtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ6IHN0cmluZ1tdKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb25maWd1cmF0aW9uIGZvciBsb2dnaW5nLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgbG9nIGxldmVsIGFuZCB2ZXJib3NpdHkgZm9yIGxvZ2dpbmcuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMb2dnaW5nQ29uZmlnXG4gKiBAcHJvcGVydHkge0xvZ0xldmVsfSBsZXZlbCAtIFRoZSBsb2dnaW5nIGxldmVsLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbbG9nTGV2ZWxdIC0gV2hldGhlciB0byBkaXNwbGF5IGxvZyBsZXZlbCBpbiBvdXRwdXQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmVyYm9zZSAtIFRoZSB2ZXJib3NpdHkgbGV2ZWwuXG4gKiBAcHJvcGVydHkge0xvZ2dpbmdNb2RlfSBbbW9kZV0gLSBPdXRwdXQgZm9ybWF0IG1vZGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29udGV4dFNlcGFyYXRvciAtIFNlcGFyYXRvciBiZXR3ZWVuIGNvbnRleHQgZW50cmllcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZXBhcmF0b3IgLSBTZXBhcmF0b3IgYmV0d2VlbiBsb2cgY29tcG9uZW50cy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3N0eWxlXSAtIFdoZXRoZXIgdG8gYXBwbHkgc3R5bGluZyB0byBsb2cgb3V0cHV0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbdGltZXN0YW1wXSAtIFdoZXRoZXIgdG8gaW5jbHVkZSB0aW1lc3RhbXBzIGluIGxvZyBtZXNzYWdlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdGltZXN0YW1wRm9ybWF0XSAtIEZvcm1hdCBmb3IgdGltZXN0YW1wcy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2NvbnRleHRdIC0gV2hldGhlciB0byBpbmNsdWRlIGNvbnRleHQgaW5mb3JtYXRpb24gaW4gbG9nIG1lc3NhZ2VzLlxuICogQHByb3BlcnR5IHtUaGVtZX0gW3RoZW1lXSAtIFRoZSB0aGVtZSB0byB1c2UgZm9yIHN0eWxpbmcgbG9nIG1lc3NhZ2VzLlxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSBbY29ycmVsYXRpb25JZF0gLSBDb3JyZWxhdGlvbiBJRCBmb3IgdHJhY2tpbmcgcmVsYXRlZCBsb2cgbWVzc2FnZXMuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTG9nZ2luZ0NvbmZpZyA9IHtcbiAgYXBwPzogc3RyaW5nO1xuICBlbnY6IFwiZGV2ZWxvcG1lbnRcIiB8IFwicHJvZHVjdGlvblwiIHwgXCJ0ZXN0XCIgfCBcInN0YWdpbmdcIiB8IHN0cmluZztcbiAgbGV2ZWw6IExvZ0xldmVsO1xuICBsb2dMZXZlbD86IGJvb2xlYW47XG4gIHZlcmJvc2U6IG51bWJlcjtcbiAgY29udGV4dFNlcGFyYXRvcjogc3RyaW5nO1xuICBzZXBhcmF0b3I6IHN0cmluZztcbiAgc3R5bGU/OiBib29sZWFuO1xuICB0aW1lc3RhbXA/OiBib29sZWFuO1xuICB0aW1lc3RhbXBGb3JtYXQ/OiBzdHJpbmc7XG4gIGNvbnRleHQ/OiBib29sZWFuO1xuICB0aGVtZT86IFRoZW1lO1xuICBmb3JtYXQ6IExvZ2dpbmdNb2RlO1xuICBwYXR0ZXJuOiBzdHJpbmc7XG4gIGNvcnJlbGF0aW9uSWQ/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGZpbHRlcnM/OiBzdHJpbmdbXSB8IExvZ2dpbmdGaWx0ZXJbXTtcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEEgZmFjdG9yeSBmdW5jdGlvbiB0eXBlIGZvciBjcmVhdGluZyBsb2dnZXJzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgZnVuY3Rpb24gdHlwZSB0aGF0IGNyZWF0ZXMgYW5kIHJldHVybnMgYSBsb2dnZXIgaW5zdGFuY2UgZm9yIGEgZ2l2ZW4gb2JqZWN0XG4gKiBAdGVtcGxhdGUgTCAtIFRoZSBsb2dnZXIgdHlwZSwgZXh0ZW5kaW5nIHRoZSBiYXNlIExvZ2dlciBpbnRlcmZhY2VcbiAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gTG9nZ2VyRmFjdG9yeVxuICogQHBhcmFtIHtzdHJpbmd9IG9iamVjdCAtIFRoZSBvYmplY3Qgb3IgY29udGV4dCBuYW1lIGZvciB0aGUgbG9nZ2VyXG4gKiBAcGFyYW0ge1BhcnRpYWw8TG9nZ2luZ0NvbmZpZz59IFtjb25maWddIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIGxvZ2dlclxuICogQHJldHVybiB7TH0gQSBsb2dnZXIgaW5zdGFuY2VcbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgdHlwZSBMb2dnZXJGYWN0b3J5PEwgZXh0ZW5kcyBMb2dnZXIgPSBMb2dnZXI+ID0gKFxuICBvYmplY3Q6IHN0cmluZyxcbiAgY29uZmlnPzogUGFydGlhbDxMb2dnaW5nQ29uZmlnPixcbiAgLi4uYXJnczogYW55W11cbikgPT4gTDtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwcmVzZW50cyBhIHRoZW1lIG9wdGlvbiBmb3IgY29uc29sZSBvdXRwdXQgc3R5bGluZy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHN0cnVjdHVyZSBmb3Igc3R5bGluZyBhIHNwZWNpZmljIGVsZW1lbnQgaW4gdGhlIGNvbnNvbGUgb3V0cHV0LlxuICogSXQgYWxsb3dzIGZvciBjdXN0b21pemF0aW9uIG9mIGZvcmVncm91bmQgY29sb3IsIGJhY2tncm91bmQgY29sb3IsIGFuZCBhZGRpdGlvbmFsIHN0eWxlcy5cbiAqIENvbG9ycyBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgc2luZ2xlIG51bWJlciwgYW4gUkdCIGFycmF5LCBvciBsZWZ0IHVuZGVmaW5lZCBmb3IgZGVmYXVsdC5cbiAqIEBpbnRlcmZhY2UgVGhlbWVPcHRpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lT3B0aW9uIHtcbiAgZmc/OiBudW1iZXIgfCBbbnVtYmVyXSB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuICBiZz86IG51bWJlciB8IFtudW1iZXJdIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG4gIHN0eWxlPzogbnVtYmVyW10gfCBba2V5b2YgdHlwZW9mIHN0eWxlc107XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEEgdHlwZSBmb3IgdGhlbWUgb3B0aW9ucyBvcmdhbml6ZWQgYnkgbG9nIGxldmVsXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgcGFydGlhbCByZWNvcmQgbWFwcGluZyBsb2cgbGV2ZWxzIHRvIHRoZW1lIG9wdGlvbnMsIGFsbG93aW5nIGRpZmZlcmVudCBzdHlsaW5nIGZvciBkaWZmZXJlbnQgbG9nIGxldmVsc1xuICogQHR5cGVkZWYge09iamVjdH0gVGhlbWVPcHRpb25CeUxvZ0xldmVsXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IHR5cGUgVGhlbWVPcHRpb25CeUxvZ0xldmVsID0gUGFydGlhbDxSZWNvcmQ8TG9nTGV2ZWwsIFRoZW1lT3B0aW9uPj47XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmluZXMgdGhlIGNvbG9yIHRoZW1lIGZvciBjb25zb2xlIG91dHB1dC5cbiAqIEBzdW1tYXJ5IFRoaXMgaW50ZXJmYWNlIHNwZWNpZmllcyB0aGUgY29sb3Igc2NoZW1lIGZvciB2YXJpb3VzIGVsZW1lbnRzIG9mIGNvbnNvbGUgb3V0cHV0LFxuICogaW5jbHVkaW5nIHN0eWxpbmcgZm9yIGRpZmZlcmVudCBsb2cgbGV2ZWxzIGFuZCBjb21wb25lbnRzLiBJdCB1c2VzIFRoZW1lT3B0aW9uIHRvXG4gKiBkZWZpbmUgdGhlIHN0eWxpbmcgZm9yIGVhY2ggZWxlbWVudCwgYWxsb3dpbmcgZm9yIGN1c3RvbWl6YXRpb24gb2YgY29sb3JzIGFuZCBzdHlsZXNcbiAqIGZvciBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGxvZyBvdXRwdXQuXG4gKiBAaW50ZXJmYWNlIFRoZW1lXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZSB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3R5bGluZyBmb3IgY2xhc3MgbmFtZXMgaW4gdGhlIG91dHB1dC5cbiAgICovXG4gIGFwcDogVGhlbWVPcHRpb24gfCBUaGVtZU9wdGlvbkJ5TG9nTGV2ZWw7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3R5bGluZyBmb3IgY2xhc3MgbmFtZXMgaW4gdGhlIG91dHB1dC5cbiAgICovXG4gIHNlcGFyYXRvcjogVGhlbWVPcHRpb24gfCBUaGVtZU9wdGlvbkJ5TG9nTGV2ZWw7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3R5bGluZyBmb3IgY2xhc3MgbmFtZXMgaW4gdGhlIG91dHB1dC5cbiAgICovXG4gIGNsYXNzOiBUaGVtZU9wdGlvbiB8IFRoZW1lT3B0aW9uQnlMb2dMZXZlbDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0eWxpbmcgZm9yIHRpbWVzdGFtcHMgaW4gdGhlIG91dHB1dC5cbiAgICovXG4gIHRpbWVzdGFtcDogVGhlbWVPcHRpb24gfCBUaGVtZU9wdGlvbkJ5TG9nTGV2ZWw7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdHlsaW5nIGZvciB0aGUgbWFpbiBtZXNzYWdlIHRleHQgaW4gdGhlIG91dHB1dC5cbiAgICovXG4gIG1lc3NhZ2U6IFRoZW1lT3B0aW9uIHwgVGhlbWVPcHRpb25CeUxvZ0xldmVsO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3R5bGluZyBmb3IgbWV0aG9kIG5hbWVzIGluIHRoZSBvdXRwdXQuXG4gICAqL1xuICBtZXRob2Q6IFRoZW1lT3B0aW9uIHwgVGhlbWVPcHRpb25CeUxvZ0xldmVsO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3R5bGluZyBmb3IgaWRlbnRpZmllciBlbGVtZW50cyBpbiB0aGUgb3V0cHV0LlxuICAgKi9cbiAgaWQ6IFRoZW1lT3B0aW9uIHwgVGhlbWVPcHRpb25CeUxvZ0xldmVsO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3R5bGluZyBmb3IgaWRlbnRpZmllciBlbGVtZW50cyBpbiB0aGUgb3V0cHV0LlxuICAgKi9cbiAgc3RhY2s6IFRoZW1lT3B0aW9uO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3R5bGluZyBmb3IgZGlmZmVyZW50IGxvZyBsZXZlbHMgaW4gdGhlIG91dHB1dC5cbiAgICovXG4gIGxvZ0xldmVsOiBUaGVtZU9wdGlvbkJ5TG9nTGV2ZWw7XG59XG4iXX0=
package/lib/types.d.ts CHANGED
@@ -35,13 +35,22 @@ export type Class<T> = {
35
35
  * @memberOf module:Logging
36
36
  */
37
37
  export type LoggingContext = string | Class<any> | AnyFunction;
38
+ export interface Impersonatable<THIS, ARGS extends any[] = any[]> {
39
+ for(...args: ARGS): THIS;
40
+ }
38
41
  /**
39
42
  * @description Interface for a logger with verbosity levels.
40
43
  * @summary Defines methods for logging at different verbosity levels.
41
44
  * @interface Logger
42
45
  * @memberOf module:Logging
43
46
  */
44
- export interface Logger {
47
+ export interface Logger extends Impersonatable<Logger, [
48
+ (string | {
49
+ new (...args: any[]): any;
50
+ } | AnyFunction | Partial<LoggingConfig>),
51
+ Partial<LoggingConfig>,
52
+ ...any[]
53
+ ]> {
45
54
  /**
46
55
  * @description Logs a `way too verbose` or a silly message.
47
56
  * @param {StringLike} msg - The message to log.
@@ -61,8 +70,9 @@ export interface Logger {
61
70
  /**
62
71
  * @description Logs an error message.
63
72
  * @param {StringLike | Error} msg - The message to log.
73
+ * @param e
64
74
  */
65
- error(msg: StringLike | Error): void;
75
+ error(msg: StringLike | Error, e?: Error): void;
66
76
  /**
67
77
  * @description Logs a debug message.
68
78
  * @param {string} msg - The message to log.
@@ -73,9 +83,12 @@ export interface Logger {
73
83
  * @summary Returns a new logger instance that includes the specified method or context in its logs
74
84
  * @param {string|Function} [method] - The method name or function to create a logger for
75
85
  * @param {Partial<LoggingConfig>} [config] - Optional configuration for the new logger
86
+ * @param args
76
87
  * @return {Logger} A new logger instance
77
88
  */
78
- for(method?: string | ((...args: any[]) => any), config?: Partial<LoggingConfig>): Logger;
89
+ for(method: string | {
90
+ new (...args: any[]): any;
91
+ } | AnyFunction | Partial<LoggingConfig>, config?: Partial<LoggingConfig>, ...args: any[]): Logger;
79
92
  /**
80
93
  * @description Updates the logger configuration
81
94
  * @summary Sets or updates the configuration options for this logger instance
@@ -83,6 +96,9 @@ export interface Logger {
83
96
  */
84
97
  setConfig(config: Partial<LoggingConfig>): void;
85
98
  }
99
+ export interface LoggingFilter {
100
+ filter(config: LoggingConfig, message: string, context: string[]): string;
101
+ }
86
102
  /**
87
103
  * @description Configuration for logging.
88
104
  * @summary Defines the log level and verbosity for logging.
@@ -102,10 +118,11 @@ export interface Logger {
102
118
  * @memberOf module:Logging
103
119
  */
104
120
  export type LoggingConfig = {
121
+ app?: string;
122
+ env: "development" | "production" | "test" | "staging" | string;
105
123
  level: LogLevel;
106
124
  logLevel?: boolean;
107
125
  verbose: number;
108
- mode?: LoggingMode;
109
126
  contextSeparator: string;
110
127
  separator: string;
111
128
  style?: boolean;
@@ -113,9 +130,10 @@ export type LoggingConfig = {
113
130
  timestampFormat?: string;
114
131
  context?: boolean;
115
132
  theme?: Theme;
116
- format: "raw" | "json";
133
+ format: LoggingMode;
117
134
  pattern: string;
118
135
  correlationId?: string | number;
136
+ filters?: string[] | LoggingFilter[];
119
137
  };
120
138
  /**
121
139
  * @description A factory function type for creating loggers
@@ -158,6 +176,14 @@ export type ThemeOptionByLogLevel = Partial<Record<LogLevel, ThemeOption>>;
158
176
  * @memberOf module:Logging
159
177
  */
160
178
  export interface Theme {
179
+ /**
180
+ * @description Styling for class names in the output.
181
+ */
182
+ app: ThemeOption | ThemeOptionByLogLevel;
183
+ /**
184
+ * @description Styling for class names in the output.
185
+ */
186
+ separator: ThemeOption | ThemeOptionByLogLevel;
161
187
  /**
162
188
  * @description Styling for class names in the output.
163
189
  */
package/lib/web.cjs ADDED
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isBrowser = isBrowser;
4
+ /**
5
+ * @description Determines if the current environment is a browser by checking the prototype chain of the global object.
6
+ * @summary Checks if the code is running in a browser environment.
7
+ * @return {boolean} True if the environment is a browser, false otherwise.
8
+ * @function isBrowser
9
+ * @memberOf module:Logging
10
+ */
11
+ function isBrowser() {
12
+ return (Object.getPrototypeOf(Object.getPrototypeOf(globalThis)) !==
13
+ Object.prototype);
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dlYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLDhCQUtDO0FBWkQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsU0FBUztJQUN2QixPQUFPLENBQ0wsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sQ0FBQyxTQUFTLENBQ2pCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZGVzY3JpcHRpb24gRGV0ZXJtaW5lcyBpZiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBhIGJyb3dzZXIgYnkgY2hlY2tpbmcgdGhlIHByb3RvdHlwZSBjaGFpbiBvZiB0aGUgZ2xvYmFsIG9iamVjdC5cbiAqIEBzdW1tYXJ5IENoZWNrcyBpZiB0aGUgY29kZSBpcyBydW5uaW5nIGluIGEgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGVudmlyb25tZW50IGlzIGEgYnJvd3NlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuICogQGZ1bmN0aW9uIGlzQnJvd3NlclxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Jyb3dzZXIoKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKE9iamVjdC5nZXRQcm90b3R5cGVPZihnbG9iYWxUaGlzKSkgIT09XG4gICAgT2JqZWN0LnByb3RvdHlwZVxuICApO1xufVxuIl19
package/lib/web.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @description Determines if the current environment is a browser by checking the prototype chain of the global object.
3
+ * @summary Checks if the code is running in a browser environment.
4
+ * @return {boolean} True if the environment is a browser, false otherwise.
5
+ * @function isBrowser
6
+ * @memberOf module:Logging
7
+ */
8
+ export declare function isBrowser(): boolean;
@@ -61,13 +61,13 @@ class WinstonLogger extends logging_1.MiniLogger {
61
61
  * @summary Overrides the base log method to use Winston for logging
62
62
  * @param {LogLevel} level - The log level of the message
63
63
  * @param {StringLike | Error} msg - The message to be logged or an Error object
64
- * @param {string} [stack] - Optional stack trace to include in the log
64
+ * @param {Error} [error] - Optional stack trace to include in the log
65
65
  * @return {void}
66
66
  */
67
- log(level, msg, stack) {
67
+ log(level, msg, error) {
68
68
  const logData = {
69
69
  level: level,
70
- message: this.createLog(level, msg, stack),
70
+ message: this.createLog(level, msg, error),
71
71
  };
72
72
  if (this.config("correlationId"))
73
73
  logData["correlationId"] = this.config("correlationId");
@@ -88,4 +88,4 @@ exports.WinstonLogger = WinstonLogger;
88
88
  */
89
89
  const WinstonFactory = (context, conf, ...args) => new WinstonLogger(context, conf, ...args);
90
90
  exports.WinstonFactory = WinstonFactory;
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luc3Rvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aW5zdG9uL3dpbnN0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsc0RBQTJEO0FBRzNELDhDQUFpRDtBQUdqRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQWEsYUFBYyxTQUFRLG9CQUFVO0lBRzNDLFlBQ0UsSUFBWSxFQUNaLElBQTZCLEVBQ25CLFVBQW9DO1FBRTlDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFGUixlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQUc5QyxNQUFNLE1BQU0sR0FBa0IsTUFBTSxDQUFDLE1BQU0sQ0FDekMsRUFBRSxFQUNGLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUNmLGlCQUFPLENBQUMsU0FBUyxFQUFFLENBQ3BCLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFO1lBQzdDLEtBQUssRUFBRSxLQUFLO1lBQ1osUUFBUSxFQUFFLEtBQUs7WUFDZixTQUFTLEVBQUUsS0FBSztZQUNoQixPQUFPLEVBQUUsS0FBSztTQUNmLENBQUMsQ0FBQztRQUNILE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBRXJFLE1BQU0sT0FBTyxHQUFHLENBQUMsaUJBQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsaUJBQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNsRSxJQUFJLFNBQVM7WUFDWCxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSSxLQUFLO1lBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRXRELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSTtZQUNuQyxJQUFJLGlCQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDN0IsTUFBTSxFQUFFLGlCQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQzthQUMzQyxDQUFDO1NBQ0gsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFrQjtZQUNuQyxLQUFLLEVBQUUsS0FBSztZQUNaLFdBQVcsRUFBRSxPQUFPO1lBQ3BCLE1BQU0sRUFBRSxpQkFBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDN0IsVUFBVSxFQUFFLFVBQVU7U0FDdkIsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsaUJBQU8sQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDZ0IsR0FBRyxDQUNwQixLQUFlLEVBQ2YsR0FBdUIsRUFDdkIsS0FBYztRQUVkLE1BQU0sT0FBTyxHQUFhO1lBQ3hCLEtBQUssRUFBRSxLQUFLO1lBQ1osT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUM7U0FDM0MsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDOUIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBL0RELHNDQStEQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSSxNQUFNLGNBQWMsR0FBa0IsQ0FDM0MsT0FBZSxFQUNmLElBQTZCLEVBQzdCLEdBQUcsSUFBVyxFQUNkLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFKbEMsUUFBQSxjQUFjLGtCQUlvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB3aW5zdG9uLCB7IExvZ0VudHJ5LCBMb2dnZXJPcHRpb25zIH0gZnJvbSBcIndpbnN0b25cIjtcbmltcG9ydCBUcmFuc3BvcnQgZnJvbSBcIndpbnN0b24tdHJhbnNwb3J0XCI7XG5pbXBvcnQgeyBMb2dnZXIsIExvZ2dlckZhY3RvcnksIExvZ2dpbmdDb25maWcsIFN0cmluZ0xpa2UgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IExvZ2dpbmcsIE1pbmlMb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgTG9nTGV2ZWwgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEEgbG9nZ2VyIGltcGxlbWVudGF0aW9uIHVzaW5nIFdpbnN0b25cbiAqIEBzdW1tYXJ5IFdpbnN0b25Mb2dnZXIgZXh0ZW5kcyBNaW5pTG9nZ2VyIHRvIHByb3ZpZGUgbG9nZ2luZyBmdW5jdGlvbmFsaXR5IHVzaW5nIHRoZSBXaW5zdG9uIGxpYnJhcnkuXG4gKiBJdCBjb25maWd1cmVzIFdpbnN0b24gd2l0aCBhcHByb3ByaWF0ZSB0cmFuc3BvcnRzIGFuZCBmb3JtYXRzIGJhc2VkIG9uIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udCAtIFRoZSBjb250ZXh0ICh0eXBpY2FsbHkgY2xhc3MgbmFtZSkgdGhpcyBsb2dnZXIgaXMgYXNzb2NpYXRlZCB3aXRoXG4gKiBAcGFyYW0ge1BhcnRpYWw8TG9nZ2luZ0NvbmZpZz59IFtjb25mXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdG8gb3ZlcnJpZGUgZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0ge1RyYW5zcG9ydFtdfFRyYW5zcG9ydH0gW3RyYW5zcG9ydHNdIC0gV2luc3RvbiB0cmFuc3BvcnRzIHRvIHVzZSBmb3IgbG9nZ2luZ1xuICogQGNsYXNzIFdpbnN0b25Mb2dnZXJcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSBXaW5zdG9uIGxvZ2dlciBmb3IgYSBjbGFzc1xuICogY29uc3QgbG9nZ2VyID0gbmV3IFdpbnN0b25Mb2dnZXIoJ015Q2xhc3MnKTtcbiAqXG4gKiAvLyBMb2cgbWVzc2FnZXMgYXQgZGlmZmVyZW50IGxldmVsc1xuICogbG9nZ2VyLmluZm8oJ0FwcGxpY2F0aW9uIHN0YXJ0ZWQnKTtcbiAqIGxvZ2dlci5lcnJvcihuZXcgRXJyb3IoJ1NvbWV0aGluZyB3ZW50IHdyb25nJykpO1xuICpcbiAqIC8vIENyZWF0ZSBhIGNoaWxkIGxvZ2dlciBmb3IgYSBzcGVjaWZpYyBtZXRob2RcbiAqIGNvbnN0IG1ldGhvZExvZ2dlciA9IGxvZ2dlci5mb3IoJ215TWV0aG9kJyk7XG4gKiBtZXRob2RMb2dnZXIuZGVidWcoJ1Byb2Nlc3NpbmcgZGF0YS4uLicpO1xuICovXG5leHBvcnQgY2xhc3MgV2luc3RvbkxvZ2dlciBleHRlbmRzIE1pbmlMb2dnZXIgaW1wbGVtZW50cyBMb2dnZXIge1xuICBwcm90ZWN0ZWQgd2luc3Rvbjogd2luc3Rvbi5Mb2dnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY29udDogc3RyaW5nLFxuICAgIGNvbmY/OiBQYXJ0aWFsPExvZ2dpbmdDb25maWc+LFxuICAgIHByb3RlY3RlZCB0cmFuc3BvcnRzPzogVHJhbnNwb3J0W10gfCBUcmFuc3BvcnRcbiAgKSB7XG4gICAgc3VwZXIoY29udCwgY29uZik7XG4gICAgY29uc3QgY29uZmlnOiBMb2dnaW5nQ29uZmlnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgdGhpcy5jb25mIHx8IHt9LFxuICAgICAgTG9nZ2luZy5nZXRDb25maWcoKVxuICAgICk7XG4gICAgdGhpcy5jb25mID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb25mIHx8IHt9LCB7XG4gICAgICBzdHlsZTogZmFsc2UsXG4gICAgICBsb2dMZXZlbDogZmFsc2UsXG4gICAgICB0aW1lc3RhbXA6IGZhbHNlLFxuICAgICAgY29udGV4dDogZmFsc2UsXG4gICAgfSk7XG4gICAgY29uc3QgeyBsZXZlbCwgY29udGV4dCwgc3R5bGUsIHRpbWVzdGFtcCwgdGltZXN0YW1wRm9ybWF0IH0gPSBjb25maWc7XG5cbiAgICBjb25zdCBmb3JtYXRzID0gW3dpbnN0b24uZm9ybWF0LnNwbGF0KCksIHdpbnN0b24uZm9ybWF0LnNpbXBsZSgpXTtcbiAgICBpZiAodGltZXN0YW1wKVxuICAgICAgZm9ybWF0cy51bnNoaWZ0KHdpbnN0b24uZm9ybWF0LnRpbWVzdGFtcCh7IGZvcm1hdDogdGltZXN0YW1wRm9ybWF0IH0pKTtcbiAgICBpZiAoc3R5bGUpIGZvcm1hdHMudW5zaGlmdCh3aW5zdG9uLmZvcm1hdC5jb2xvcml6ZSgpKTtcblxuICAgIHRoaXMudHJhbnNwb3J0cyA9IHRoaXMudHJhbnNwb3J0cyB8fCBbXG4gICAgICBuZXcgd2luc3Rvbi50cmFuc3BvcnRzLkNvbnNvbGUoe1xuICAgICAgICBmb3JtYXQ6IHdpbnN0b24uZm9ybWF0LmNvbWJpbmUoLi4uZm9ybWF0cyksXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgY29uc3Qgd2luc3RvbkNvbmZpZzogTG9nZ2VyT3B0aW9ucyA9IHtcbiAgICAgIGxldmVsOiBsZXZlbCxcbiAgICAgIGRlZmF1bHRNZXRhOiBjb250ZXh0LFxuICAgICAgZm9ybWF0OiB3aW5zdG9uLmZvcm1hdC5qc29uKCksXG4gICAgICB0cmFuc3BvcnRzOiB0cmFuc3BvcnRzLFxuICAgIH07XG4gICAgdGhpcy53aW5zdG9uID0gd2luc3Rvbi5jcmVhdGVMb2dnZXIod2luc3RvbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIHdpdGggdGhlIHNwZWNpZmllZCBsb2cgbGV2ZWwgdXNpbmcgV2luc3RvblxuICAgKiBAc3VtbWFyeSBPdmVycmlkZXMgdGhlIGJhc2UgbG9nIG1ldGhvZCB0byB1c2UgV2luc3RvbiBmb3IgbG9nZ2luZ1xuICAgKiBAcGFyYW0ge0xvZ0xldmVsfSBsZXZlbCAtIFRoZSBsb2cgbGV2ZWwgb2YgdGhlIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtTdHJpbmdMaWtlIHwgRXJyb3J9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZCBvciBhbiBFcnJvciBvYmplY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdGFja10gLSBPcHRpb25hbCBzdGFjayB0cmFjZSB0byBpbmNsdWRlIGluIHRoZSBsb2dcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBsb2coXG4gICAgbGV2ZWw6IExvZ0xldmVsLFxuICAgIG1zZzogU3RyaW5nTGlrZSB8IEVycm9yLFxuICAgIHN0YWNrPzogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IGxvZ0RhdGE6IExvZ0VudHJ5ID0ge1xuICAgICAgbGV2ZWw6IGxldmVsLFxuICAgICAgbWVzc2FnZTogdGhpcy5jcmVhdGVMb2cobGV2ZWwsIG1zZywgc3RhY2spLFxuICAgIH07XG4gICAgaWYgKHRoaXMuY29uZmlnKFwiY29ycmVsYXRpb25JZFwiKSlcbiAgICAgIGxvZ0RhdGFbXCJjb3JyZWxhdGlvbklkXCJdID0gdGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpO1xuICAgIHRoaXMud2luc3Rvbi5sb2cobG9nRGF0YSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgV2luc3RvbiBsb2dnZXJzXG4gKiBAc3VtbWFyeSBBIExvZ2dlckZhY3RvcnkgaW1wbGVtZW50YXRpb24gdGhhdCBjcmVhdGVzIFdpbnN0b25Mb2dnZXIgaW5zdGFuY2VzXG4gKiBAY29uc3QgV2luc3RvbkZhY3RvcnlcbiAqIEB0eXBlIHtMb2dnZXJGYWN0b3J5fVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHQgLSBUaGUgY29udGV4dCAodHlwaWNhbGx5IGNsYXNzIG5hbWUpIGZvciB0aGUgbG9nZ2VyXG4gKiBAcGFyYW0ge1BhcnRpYWw8TG9nZ2luZ0NvbmZpZz59IFtjb25mXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdG8gb3ZlcnJpZGUgZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0gey4uLmFueX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIFdpbnN0b25Mb2dnZXIgY29uc3RydWN0b3JcbiAqIEByZXR1cm4ge1dpbnN0b25Mb2dnZXJ9IEEgbmV3IFdpbnN0b25Mb2dnZXIgaW5zdGFuY2VcbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgY29uc3QgV2luc3RvbkZhY3Rvcnk6IExvZ2dlckZhY3RvcnkgPSAoXG4gIGNvbnRleHQ6IHN0cmluZyxcbiAgY29uZj86IFBhcnRpYWw8TG9nZ2luZ0NvbmZpZz4sXG4gIC4uLmFyZ3M6IGFueVtdXG4pID0+IG5ldyBXaW5zdG9uTG9nZ2VyKGNvbnRleHQsIGNvbmYsIC4uLmFyZ3MpO1xuIl19
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luc3Rvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aW5zdG9uL3dpbnN0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsc0RBQTJEO0FBRzNELDhDQUFpRDtBQUdqRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQWEsYUFBYyxTQUFRLG9CQUFVO0lBRzNDLFlBQ0UsSUFBWSxFQUNaLElBQTZCLEVBQ25CLFVBQW9DO1FBRTlDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFGUixlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQUc5QyxNQUFNLE1BQU0sR0FBa0IsTUFBTSxDQUFDLE1BQU0sQ0FDekMsRUFBRSxFQUNGLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUNmLGlCQUFPLENBQUMsU0FBUyxFQUFFLENBQ3BCLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFO1lBQzdDLEtBQUssRUFBRSxLQUFLO1lBQ1osUUFBUSxFQUFFLEtBQUs7WUFDZixTQUFTLEVBQUUsS0FBSztZQUNoQixPQUFPLEVBQUUsS0FBSztTQUNmLENBQUMsQ0FBQztRQUNILE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBRXJFLE1BQU0sT0FBTyxHQUFHLENBQUMsaUJBQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsaUJBQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNsRSxJQUFJLFNBQVM7WUFDWCxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSSxLQUFLO1lBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRXRELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSTtZQUNuQyxJQUFJLGlCQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDN0IsTUFBTSxFQUFFLGlCQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQzthQUMzQyxDQUFDO1NBQ0gsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFrQjtZQUNuQyxLQUFLLEVBQUUsS0FBSztZQUNaLFdBQVcsRUFBRSxPQUFPO1lBQ3BCLE1BQU0sRUFBRSxpQkFBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDN0IsVUFBVSxFQUFFLFVBQVU7U0FDdkIsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsaUJBQU8sQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDZ0IsR0FBRyxDQUNwQixLQUFlLEVBQ2YsR0FBdUIsRUFDdkIsS0FBYTtRQUViLE1BQU0sT0FBTyxHQUFhO1lBQ3hCLEtBQUssRUFBRSxLQUFLO1lBQ1osT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUM7U0FDM0MsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDOUIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBL0RELHNDQStEQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSSxNQUFNLGNBQWMsR0FBa0IsQ0FDM0MsT0FBZSxFQUNmLElBQTZCLEVBQzdCLEdBQUcsSUFBVyxFQUNkLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFKbEMsUUFBQSxjQUFjLGtCQUlvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB3aW5zdG9uLCB7IExvZ0VudHJ5LCBMb2dnZXJPcHRpb25zIH0gZnJvbSBcIndpbnN0b25cIjtcbmltcG9ydCBUcmFuc3BvcnQgZnJvbSBcIndpbnN0b24tdHJhbnNwb3J0XCI7XG5pbXBvcnQgeyBMb2dnZXIsIExvZ2dlckZhY3RvcnksIExvZ2dpbmdDb25maWcsIFN0cmluZ0xpa2UgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IExvZ2dpbmcsIE1pbmlMb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgTG9nTGV2ZWwgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEEgbG9nZ2VyIGltcGxlbWVudGF0aW9uIHVzaW5nIFdpbnN0b25cbiAqIEBzdW1tYXJ5IFdpbnN0b25Mb2dnZXIgZXh0ZW5kcyBNaW5pTG9nZ2VyIHRvIHByb3ZpZGUgbG9nZ2luZyBmdW5jdGlvbmFsaXR5IHVzaW5nIHRoZSBXaW5zdG9uIGxpYnJhcnkuXG4gKiBJdCBjb25maWd1cmVzIFdpbnN0b24gd2l0aCBhcHByb3ByaWF0ZSB0cmFuc3BvcnRzIGFuZCBmb3JtYXRzIGJhc2VkIG9uIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udCAtIFRoZSBjb250ZXh0ICh0eXBpY2FsbHkgY2xhc3MgbmFtZSkgdGhpcyBsb2dnZXIgaXMgYXNzb2NpYXRlZCB3aXRoXG4gKiBAcGFyYW0ge1BhcnRpYWw8TG9nZ2luZ0NvbmZpZz59IFtjb25mXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdG8gb3ZlcnJpZGUgZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0ge1RyYW5zcG9ydFtdfFRyYW5zcG9ydH0gW3RyYW5zcG9ydHNdIC0gV2luc3RvbiB0cmFuc3BvcnRzIHRvIHVzZSBmb3IgbG9nZ2luZ1xuICogQGNsYXNzIFdpbnN0b25Mb2dnZXJcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSBXaW5zdG9uIGxvZ2dlciBmb3IgYSBjbGFzc1xuICogY29uc3QgbG9nZ2VyID0gbmV3IFdpbnN0b25Mb2dnZXIoJ015Q2xhc3MnKTtcbiAqXG4gKiAvLyBMb2cgbWVzc2FnZXMgYXQgZGlmZmVyZW50IGxldmVsc1xuICogbG9nZ2VyLmluZm8oJ0FwcGxpY2F0aW9uIHN0YXJ0ZWQnKTtcbiAqIGxvZ2dlci5lcnJvcihuZXcgRXJyb3IoJ1NvbWV0aGluZyB3ZW50IHdyb25nJykpO1xuICpcbiAqIC8vIENyZWF0ZSBhIGNoaWxkIGxvZ2dlciBmb3IgYSBzcGVjaWZpYyBtZXRob2RcbiAqIGNvbnN0IG1ldGhvZExvZ2dlciA9IGxvZ2dlci5mb3IoJ215TWV0aG9kJyk7XG4gKiBtZXRob2RMb2dnZXIuZGVidWcoJ1Byb2Nlc3NpbmcgZGF0YS4uLicpO1xuICovXG5leHBvcnQgY2xhc3MgV2luc3RvbkxvZ2dlciBleHRlbmRzIE1pbmlMb2dnZXIgaW1wbGVtZW50cyBMb2dnZXIge1xuICBwcm90ZWN0ZWQgd2luc3Rvbjogd2luc3Rvbi5Mb2dnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY29udDogc3RyaW5nLFxuICAgIGNvbmY/OiBQYXJ0aWFsPExvZ2dpbmdDb25maWc+LFxuICAgIHByb3RlY3RlZCB0cmFuc3BvcnRzPzogVHJhbnNwb3J0W10gfCBUcmFuc3BvcnRcbiAgKSB7XG4gICAgc3VwZXIoY29udCwgY29uZik7XG4gICAgY29uc3QgY29uZmlnOiBMb2dnaW5nQ29uZmlnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgdGhpcy5jb25mIHx8IHt9LFxuICAgICAgTG9nZ2luZy5nZXRDb25maWcoKVxuICAgICk7XG4gICAgdGhpcy5jb25mID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb25mIHx8IHt9LCB7XG4gICAgICBzdHlsZTogZmFsc2UsXG4gICAgICBsb2dMZXZlbDogZmFsc2UsXG4gICAgICB0aW1lc3RhbXA6IGZhbHNlLFxuICAgICAgY29udGV4dDogZmFsc2UsXG4gICAgfSk7XG4gICAgY29uc3QgeyBsZXZlbCwgY29udGV4dCwgc3R5bGUsIHRpbWVzdGFtcCwgdGltZXN0YW1wRm9ybWF0IH0gPSBjb25maWc7XG5cbiAgICBjb25zdCBmb3JtYXRzID0gW3dpbnN0b24uZm9ybWF0LnNwbGF0KCksIHdpbnN0b24uZm9ybWF0LnNpbXBsZSgpXTtcbiAgICBpZiAodGltZXN0YW1wKVxuICAgICAgZm9ybWF0cy51bnNoaWZ0KHdpbnN0b24uZm9ybWF0LnRpbWVzdGFtcCh7IGZvcm1hdDogdGltZXN0YW1wRm9ybWF0IH0pKTtcbiAgICBpZiAoc3R5bGUpIGZvcm1hdHMudW5zaGlmdCh3aW5zdG9uLmZvcm1hdC5jb2xvcml6ZSgpKTtcblxuICAgIHRoaXMudHJhbnNwb3J0cyA9IHRoaXMudHJhbnNwb3J0cyB8fCBbXG4gICAgICBuZXcgd2luc3Rvbi50cmFuc3BvcnRzLkNvbnNvbGUoe1xuICAgICAgICBmb3JtYXQ6IHdpbnN0b24uZm9ybWF0LmNvbWJpbmUoLi4uZm9ybWF0cyksXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgY29uc3Qgd2luc3RvbkNvbmZpZzogTG9nZ2VyT3B0aW9ucyA9IHtcbiAgICAgIGxldmVsOiBsZXZlbCxcbiAgICAgIGRlZmF1bHRNZXRhOiBjb250ZXh0LFxuICAgICAgZm9ybWF0OiB3aW5zdG9uLmZvcm1hdC5qc29uKCksXG4gICAgICB0cmFuc3BvcnRzOiB0cmFuc3BvcnRzLFxuICAgIH07XG4gICAgdGhpcy53aW5zdG9uID0gd2luc3Rvbi5jcmVhdGVMb2dnZXIod2luc3RvbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIHdpdGggdGhlIHNwZWNpZmllZCBsb2cgbGV2ZWwgdXNpbmcgV2luc3RvblxuICAgKiBAc3VtbWFyeSBPdmVycmlkZXMgdGhlIGJhc2UgbG9nIG1ldGhvZCB0byB1c2UgV2luc3RvbiBmb3IgbG9nZ2luZ1xuICAgKiBAcGFyYW0ge0xvZ0xldmVsfSBsZXZlbCAtIFRoZSBsb2cgbGV2ZWwgb2YgdGhlIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtTdHJpbmdMaWtlIHwgRXJyb3J9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZCBvciBhbiBFcnJvciBvYmplY3RcbiAgICogQHBhcmFtIHtFcnJvcn0gW2Vycm9yXSAtIE9wdGlvbmFsIHN0YWNrIHRyYWNlIHRvIGluY2x1ZGUgaW4gdGhlIGxvZ1xuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGxvZyhcbiAgICBsZXZlbDogTG9nTGV2ZWwsXG4gICAgbXNnOiBTdHJpbmdMaWtlIHwgRXJyb3IsXG4gICAgZXJyb3I/OiBFcnJvclxuICApIHtcbiAgICBjb25zdCBsb2dEYXRhOiBMb2dFbnRyeSA9IHtcbiAgICAgIGxldmVsOiBsZXZlbCxcbiAgICAgIG1lc3NhZ2U6IHRoaXMuY3JlYXRlTG9nKGxldmVsLCBtc2csIGVycm9yKSxcbiAgICB9O1xuICAgIGlmICh0aGlzLmNvbmZpZyhcImNvcnJlbGF0aW9uSWRcIikpXG4gICAgICBsb2dEYXRhW1wiY29ycmVsYXRpb25JZFwiXSA9IHRoaXMuY29uZmlnKFwiY29ycmVsYXRpb25JZFwiKTtcbiAgICB0aGlzLndpbnN0b24ubG9nKGxvZ0RhdGEpO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIFdpbnN0b24gbG9nZ2Vyc1xuICogQHN1bW1hcnkgQSBMb2dnZXJGYWN0b3J5IGltcGxlbWVudGF0aW9uIHRoYXQgY3JlYXRlcyBXaW5zdG9uTG9nZ2VyIGluc3RhbmNlc1xuICogQGNvbnN0IFdpbnN0b25GYWN0b3J5XG4gKiBAdHlwZSB7TG9nZ2VyRmFjdG9yeX1cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0IC0gVGhlIGNvbnRleHQgKHR5cGljYWxseSBjbGFzcyBuYW1lKSBmb3IgdGhlIGxvZ2dlclxuICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+fSBbY29uZl0gLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIHRvIG92ZXJyaWRlIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHsuLi5hbnl9IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBXaW5zdG9uTG9nZ2VyIGNvbnN0cnVjdG9yXG4gKiBAcmV0dXJuIHtXaW5zdG9uTG9nZ2VyfSBBIG5ldyBXaW5zdG9uTG9nZ2VyIGluc3RhbmNlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IFdpbnN0b25GYWN0b3J5OiBMb2dnZXJGYWN0b3J5ID0gKFxuICBjb250ZXh0OiBzdHJpbmcsXG4gIGNvbmY/OiBQYXJ0aWFsPExvZ2dpbmdDb25maWc+LFxuICAuLi5hcmdzOiBhbnlbXVxuKSA9PiBuZXcgV2luc3RvbkxvZ2dlcihjb250ZXh0LCBjb25mLCAuLi5hcmdzKTtcbiJdfQ==