@decaf-ts/utils 0.2.12 → 0.3.1

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 (110) hide show
  1. package/LICENSE.md +21 -157
  2. package/README.md +403 -12
  3. package/bin/build-scripts.cjs +236 -52
  4. package/bin/tag-release.cjs +168 -47
  5. package/bin/tag-release.sh +6 -0
  6. package/bin/update-scripts.cjs +207 -47
  7. package/dist/utils.cjs +364 -70
  8. package/dist/utils.esm.cjs +364 -70
  9. package/lib/cli/command.cjs +2 -2
  10. package/lib/cli/command.d.ts +1 -1
  11. package/lib/cli/commands/build-scripts.cjs +8 -6
  12. package/lib/cli/constants.cjs +3 -1
  13. package/lib/cli/constants.d.ts +2 -0
  14. package/lib/cli/types.cjs +1 -1
  15. package/lib/cli/types.d.ts +2 -0
  16. package/lib/esm/bin/build-scripts.js +2 -2
  17. package/lib/esm/bin/tag-release.js +2 -2
  18. package/lib/esm/bin/update-scripts.js +2 -2
  19. package/lib/esm/cli/command.d.ts +1 -1
  20. package/lib/esm/cli/command.js +7 -7
  21. package/lib/esm/cli/commands/build-scripts.js +11 -9
  22. package/lib/esm/cli/commands/index.js +4 -4
  23. package/lib/esm/cli/commands/tag-release.js +5 -5
  24. package/lib/esm/cli/commands/update-scripts.js +4 -4
  25. package/lib/esm/cli/constants.d.ts +2 -0
  26. package/lib/esm/cli/constants.js +3 -1
  27. package/lib/esm/cli/index.js +4 -4
  28. package/lib/esm/cli/types.d.ts +2 -0
  29. package/lib/esm/cli/types.js +1 -1
  30. package/lib/esm/index.d.ts +4 -4
  31. package/lib/esm/index.js +10 -10
  32. package/lib/esm/input/index.js +3 -3
  33. package/lib/esm/input/input.d.ts +65 -19
  34. package/lib/esm/input/input.js +61 -22
  35. package/lib/esm/input/types.d.ts +7 -7
  36. package/lib/esm/input/types.js +1 -1
  37. package/lib/esm/output/common.d.ts +2 -0
  38. package/lib/esm/output/common.js +4 -1
  39. package/lib/esm/output/index.js +2 -2
  40. package/lib/esm/utils/constants.d.ts +12 -6
  41. package/lib/esm/utils/constants.js +13 -7
  42. package/lib/esm/utils/environment.d.ts +13 -0
  43. package/lib/esm/utils/environment.js +16 -3
  44. package/lib/esm/utils/fs.d.ts +111 -5
  45. package/lib/esm/utils/fs.js +114 -8
  46. package/lib/esm/utils/http.d.ts +1 -1
  47. package/lib/esm/utils/http.js +2 -2
  48. package/lib/esm/utils/index.js +8 -8
  49. package/lib/esm/utils/md.d.ts +15 -15
  50. package/lib/esm/utils/md.js +1 -1
  51. package/lib/esm/utils/tests.d.ts +26 -3
  52. package/lib/esm/utils/tests.js +40 -2
  53. package/lib/esm/utils/text.d.ts +33 -7
  54. package/lib/esm/utils/text.js +34 -8
  55. package/lib/esm/utils/timeout.d.ts +11 -0
  56. package/lib/esm/utils/timeout.js +12 -1
  57. package/lib/esm/utils/types.d.ts +33 -2
  58. package/lib/esm/utils/types.js +1 -1
  59. package/lib/esm/utils/utils.d.ts +44 -2
  60. package/lib/esm/utils/utils.js +23 -5
  61. package/lib/esm/utils/web.d.ts +3 -2
  62. package/lib/esm/utils/web.js +4 -3
  63. package/lib/esm/writers/OutputWriter.d.ts +2 -2
  64. package/lib/esm/writers/OutputWriter.js +1 -1
  65. package/lib/esm/writers/RegexpOutputWriter.d.ts +51 -10
  66. package/lib/esm/writers/RegexpOutputWriter.js +53 -12
  67. package/lib/esm/writers/StandardOutputWriter.d.ts +49 -10
  68. package/lib/esm/writers/StandardOutputWriter.js +51 -12
  69. package/lib/esm/writers/index.js +5 -5
  70. package/lib/esm/writers/types.d.ts +2 -2
  71. package/lib/esm/writers/types.js +1 -1
  72. package/lib/index.cjs +5 -5
  73. package/lib/index.d.ts +4 -4
  74. package/lib/input/input.cjs +61 -22
  75. package/lib/input/input.d.ts +65 -19
  76. package/lib/input/types.cjs +1 -1
  77. package/lib/input/types.d.ts +7 -7
  78. package/lib/output/common.cjs +4 -1
  79. package/lib/output/common.d.ts +2 -0
  80. package/lib/utils/constants.cjs +13 -7
  81. package/lib/utils/constants.d.ts +12 -6
  82. package/lib/utils/environment.cjs +14 -1
  83. package/lib/utils/environment.d.ts +13 -0
  84. package/lib/utils/fs.cjs +112 -6
  85. package/lib/utils/fs.d.ts +111 -5
  86. package/lib/utils/http.cjs +2 -2
  87. package/lib/utils/http.d.ts +1 -1
  88. package/lib/utils/md.cjs +1 -1
  89. package/lib/utils/md.d.ts +15 -15
  90. package/lib/utils/tests.cjs +39 -1
  91. package/lib/utils/tests.d.ts +26 -3
  92. package/lib/utils/text.cjs +34 -8
  93. package/lib/utils/text.d.ts +33 -7
  94. package/lib/utils/timeout.cjs +12 -1
  95. package/lib/utils/timeout.d.ts +11 -0
  96. package/lib/utils/types.cjs +1 -1
  97. package/lib/utils/types.d.ts +33 -2
  98. package/lib/utils/utils.cjs +21 -3
  99. package/lib/utils/utils.d.ts +44 -2
  100. package/lib/utils/web.cjs +4 -3
  101. package/lib/utils/web.d.ts +3 -2
  102. package/lib/writers/OutputWriter.cjs +1 -1
  103. package/lib/writers/OutputWriter.d.ts +2 -2
  104. package/lib/writers/RegexpOutputWriter.cjs +52 -11
  105. package/lib/writers/RegexpOutputWriter.d.ts +51 -10
  106. package/lib/writers/StandardOutputWriter.cjs +50 -11
  107. package/lib/writers/StandardOutputWriter.d.ts +49 -10
  108. package/lib/writers/types.cjs +1 -1
  109. package/lib/writers/types.d.ts +2 -2
  110. package/package.json +2 -2
package/lib/utils/md.d.ts CHANGED
@@ -2,21 +2,21 @@
2
2
  * @description Single line markdown element type
3
3
  * @summary Represents the possible header levels in markdown
4
4
  * @typedef {"h1"|"h2"|"h3"|"h4"|"h5"|"h6"} MdSingleLineElement
5
- * @memberOf @decaf-ts/utils
5
+ * @memberOf module:utils
6
6
  */
7
7
  export type MdSingleLineElement = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
8
8
  /**
9
9
  * @description Multi-line element types in markdown
10
10
  * @summary Defines the available multi-line element types
11
11
  * @typedef {"p"|"blockquote"} MdMultiLineElement
12
- * @memberOf @decaf-ts/utils
12
+ * @memberOf module:utils
13
13
  */
14
14
  export type MdMultiLineElement = "p" | "blockquote";
15
15
  /**
16
16
  * @description List element types in markdown
17
17
  * @summary Defines the available list types
18
18
  * @typedef {"ul"|"ol"} MdListElement
19
- * @memberOf @decaf-ts/utils
19
+ * @memberOf module:utils
20
20
  */
21
21
  export type MdListElement = "ul" | "ol";
22
22
  /**
@@ -25,7 +25,7 @@ export type MdListElement = "ul" | "ol";
25
25
  * @typedef {Object} MdSingleLine
26
26
  * @property {string} [ul] - unordered list
27
27
  * @property {string} [ol] - ordered list
28
- * @memberOf @decaf-ts/utils
28
+ * @memberOf module:utils
29
29
  */
30
30
  export type MdSingleLine = {
31
31
  [k in MdSingleLineElement]?: string;
@@ -36,7 +36,7 @@ export type MdSingleLine = {
36
36
  * @typedef {Object} MdMultiLine
37
37
  * @property {string|string[]} [p] - Paragraph content
38
38
  * @property {string|string[]} [blockquote] - Blockquote content
39
- * @memberOf @decaf-ts/utils
39
+ * @memberOf module:utils
40
40
  */
41
41
  export type MdMultiLine = {
42
42
  [k in MdMultiLineElement]?: string | string[];
@@ -48,7 +48,7 @@ export type MdMultiLine = {
48
48
  * @property {string} [title] - Optional image title
49
49
  * @property {string} source - Image source URL
50
50
  * @property {string} [alt] - Optional alternative text
51
- * @memberOf @decaf-ts/utils
51
+ * @memberOf module:utils
52
52
  */
53
53
  export type MdImageDefinition = {
54
54
  title?: string;
@@ -60,7 +60,7 @@ export type MdImageDefinition = {
60
60
  * @summary Represents an image element with its properties
61
61
  * @typedef {Object} MdImage
62
62
  * @property {MdImageDefinition} img - The image definition object
63
- * @memberOf @decaf-ts/utils
63
+ * @memberOf module:utils
64
64
  */
65
65
  export type MdImage = {
66
66
  img: MdImageDefinition;
@@ -71,7 +71,7 @@ export type MdImage = {
71
71
  * @typedef {Object} MdListItem
72
72
  * @property {string[]} ul - Unordered list items
73
73
  * @property {string[]} ol - Ordered list items
74
- * @memberOf @decaf-ts/utils
74
+ * @memberOf module:utils
75
75
  */
76
76
  export type MdListItem = {
77
77
  [k in MdListElement]: string[];
@@ -82,7 +82,7 @@ export type MdListItem = {
82
82
  * @typedef {Object} MdTableDefinition
83
83
  * @property {string[]} headers - Array of table header names
84
84
  * @property {Object[]} rows - Array of row objects containing column values
85
- * @memberOf @decaf-ts/utils
85
+ * @memberOf module:utils
86
86
  */
87
87
  export type MdTableDefinition = {
88
88
  headers: string[];
@@ -95,7 +95,7 @@ export type MdTableDefinition = {
95
95
  * @summary Represents a table structure with headers and rows
96
96
  * @typedef {Object} MdTable
97
97
  * @property {MdTableDefinition} table - The table definition object
98
- * @memberOf @decaf-ts/utils
98
+ * @memberOf module:utils
99
99
  */
100
100
  export type MdTable = {
101
101
  table: MdTableDefinition;
@@ -106,7 +106,7 @@ export type MdTable = {
106
106
  * @typedef {Object} MdCodeDefinition
107
107
  * @property {string} [language] - Optional programming language specification
108
108
  * @property {string|string[]} content - The code content as string or array of strings
109
- * @memberOf @decaf-ts/utils
109
+ * @memberOf module:utils
110
110
  */
111
111
  export type MdCodeDefinition = {
112
112
  language?: string;
@@ -117,7 +117,7 @@ export type MdCodeDefinition = {
117
117
  * @summary Represents a code block with optional language specification
118
118
  * @typedef {Object} MdCode
119
119
  * @property {MdCodeDefinition} code - The code block definition object
120
- * @memberOf @decaf-ts/utils
120
+ * @memberOf module:utils
121
121
  */
122
122
  export type MdCode = {
123
123
  code: MdCodeDefinition;
@@ -127,7 +127,7 @@ export type MdCode = {
127
127
  * @summary Represents a horizontal rule separator
128
128
  * @typedef {Object} MdSeparator
129
129
  * @property {string} hr - The horizontal rule representation
130
- * @memberOf @decaf-ts/utils
130
+ * @memberOf module:utils
131
131
  */
132
132
  export type MdSeparator = {
133
133
  hr: string;
@@ -137,7 +137,7 @@ export type MdSeparator = {
137
137
  * @summary Represents a hyperlink with title and source
138
138
  * @typedef {Object} MdLink
139
139
  * @property {{title: string, source: string}} link - The link definition object
140
- * @memberOf @decaf-ts/utils
140
+ * @memberOf module:utils
141
141
  */
142
142
  export type MdLink = {
143
143
  link: {
@@ -151,6 +151,6 @@ export type MdLink = {
151
151
  * This type combines various markdown elements including headers, paragraphs, images, lists,
152
152
  * tables, code blocks, separators, and links into a union type for flexible markdown content creation.
153
153
  * @typedef {(MdSingleLine | MdMultiLine | MdImage | MdListItem | MdTable | MdCode | MdSeparator | MdLink)} MdElements
154
- * @memberOf @decaf-ts/utils
154
+ * @memberOf module:utils
155
155
  */
156
156
  export type MdElements = MdSingleLine | MdMultiLine | MdImage | MdListItem | MdTable | MdCode | MdSeparator | MdLink;
@@ -40,8 +40,29 @@ exports.TestReporter = exports.JestReportersTempPathEnvKey = void 0;
40
40
  const path_1 = __importDefault(require("path"));
41
41
  const fs_1 = __importDefault(require("fs"));
42
42
  const fs_2 = require("./fs.cjs");
43
+ /**
44
+ * @description Environment variable key for Jest HTML reporters temporary directory path
45
+ * @summary Constant defining the environment variable key for Jest HTML reporters
46
+ * @const JestReportersTempPathEnvKey
47
+ * @memberOf module:utils
48
+ */
43
49
  exports.JestReportersTempPathEnvKey = "JEST_HTML_REPORTERS_TEMP_DIR_PATH";
50
+ /**
51
+ * @description Array of dependencies required by the test reporter
52
+ * @summary List of npm packages needed for reporting functionality
53
+ * @const dependencies
54
+ * @memberOf module:utils
55
+ */
44
56
  const dependencies = ["jest-html-reporters", "json2md", "chartjs-node-canvas"];
57
+ /**
58
+ * @description Normalizes imports to handle both CommonJS and ESModule formats
59
+ * @summary Utility function to handle module import differences between formats
60
+ * @template T - Type of the imported module
61
+ * @param {Promise<T>} importPromise - Promise returned by dynamic import
62
+ * @return {Promise<T>} Normalized module
63
+ * @function normalizeImport
64
+ * @memberOf module:utils
65
+ */
45
66
  async function normalizeImport(importPromise) {
46
67
  // CommonJS's `module.exports` is wrapped as `default` in ESModule.
47
68
  return importPromise.then((m) => (m.default || m));
@@ -201,9 +222,26 @@ class TestReporter {
201
222
  throw new Error(`Could not store attach artifact ${reference} under to test report ${this.testCase} - ${e}`);
202
223
  }
203
224
  }
225
+ /**
226
+ * @description Reports data with a specified type
227
+ * @summary Wrapper method for reporting various types of data
228
+ * @param {string} reference - Reference identifier for the data
229
+ * @param {string | number | object} data - Data to be reported
230
+ * @param {PayloadType} [type="json"] - Type of the payload
231
+ * @param {boolean} [trim=false] - Whether to trim the data
232
+ * @return {Promise<void>} Promise that resolves when data is reported
233
+ */
204
234
  async reportData(reference, data, type = "json", trim = false) {
205
235
  return this.report(reference, data, type, trim);
206
236
  }
237
+ /**
238
+ * @description Reports a JSON object
239
+ * @summary Convenience method for reporting JSON objects
240
+ * @param {string} reference - Reference identifier for the object
241
+ * @param {object} json - JSON object to be reported
242
+ * @param {boolean} [trim=false] - Whether to trim the object
243
+ * @return {Promise<void>} Promise that resolves when object is reported
244
+ */
207
245
  async reportObject(reference, json, trim = false) {
208
246
  return this.report(reference, json, "json", trim);
209
247
  }
@@ -259,4 +297,4 @@ class TestReporter {
259
297
  }
260
298
  }
261
299
  exports.TestReporter = TestReporter;
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdGVzdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQXdCO0FBQ3hCLDRDQUFvQjtBQUVwQixpQ0FBNkM7QUFtQ2hDLFFBQUEsMkJBQTJCLEdBQUcsbUNBQW1DLENBQUM7QUFFL0UsTUFBTSxZQUFZLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxTQUFTLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUUvRSxLQUFLLFVBQVUsZUFBZSxDQUFJLGFBQXlCO0lBQ3pELG1FQUFtRTtJQUNuRSxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQU0sQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeURHO0FBQ0gsTUFBYSxZQUFZO0lBd0J2QixZQUNZLFdBQW1CLE9BQU8sRUFDMUIsV0FBVyxjQUFJLENBQUMsSUFBSSxDQUM1QixPQUFPLENBQUMsR0FBRyxFQUFFLEVBQ2IsVUFBVSxFQUNWLFNBQVMsRUFDVCxXQUFXLENBQ1o7UUFOUyxhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUtqQjtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxZQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2xDLFlBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFD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LENBQUMsQ0FBQztJQUNqRCxDQUFDO0NBQ0Y7QUFuTkQsb0NBbU5DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IE1kVGFibGVEZWZpbml0aW9uIH0gZnJvbSBcIi4vbWRcIjtcbmltcG9ydCB7IGluc3RhbGxJZk5vdEF2YWlsYWJsZSB9IGZyb20gXCIuL2ZzXCI7XG5pbXBvcnQgeyBTaW1wbGVEZXBlbmRlbmN5TWFwIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIEFkZEF0dGFjaFBhcmFtc1xuICogQGRlc2NyaXB0aW9uIFBhcmFtZXRlcnMgZm9yIGFkZGluZyBhbiBhdHRhY2htZW50IHRvIGEgcmVwb3J0XG4gKiBAc3VtbWFyeSBJbnRlcmZhY2UgZm9yIGF0dGFjaG1lbnQgcGFyYW1ldGVyc1xuICogQG1lbWJlck9mIG1vZHVsZTpAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRBdHRhY2hQYXJhbXMge1xuICBhdHRhY2g6IHN0cmluZyB8IEJ1ZmZlcjtcbiAgZGVzY3JpcHRpb246IHN0cmluZyB8IG9iamVjdDtcbiAgY29udGV4dD86IGFueTtcbiAgYnVmZmVyRm9ybWF0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBpbnRlcmZhY2UgQWRkTXNnUGFyYW1zXG4gKiBAZGVzY3JpcHRpb24gUGFyYW1ldGVycyBmb3IgYWRkaW5nIGEgbWVzc2FnZSB0byBhIHJlcG9ydFxuICogQHN1bW1hcnkgSW50ZXJmYWNlIGZvciBtZXNzYWdlIHBhcmFtZXRlcnNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6QGRlY2FmLXRzL3V0aWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkTXNnUGFyYW1zIHtcbiAgbWVzc2FnZTogc3RyaW5nIHwgb2JqZWN0O1xuICBjb250ZXh0PzogYW55O1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHsoXCJqc29uXCJ8XCJpbWFnZVwifFwidGV4dFwifFwibWRcIil9IFBheWxvYWRUeXBlXG4gKiBAZGVzY3JpcHRpb24gVHlwZXMgb2YgcGF5bG9hZHMgdGhhdCBjYW4gYmUgaGFuZGxlZFxuICogQHN1bW1hcnkgVW5pb24gdHlwZSBmb3IgcGF5bG9hZCB0eXBlc1xuICogQG1lbWJlck9mIG1vZHVsZTpAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IHR5cGUgUGF5bG9hZFR5cGUgPSBcImpzb25cIiB8IFwiaW1hZ2VcIiB8IFwidGV4dFwiIHwgXCJtZFwiO1xuXG5leHBvcnQgY29uc3QgSmVzdFJlcG9ydGVyc1RlbXBQYXRoRW52S2V5ID0gXCJKRVNUX0hUTUxfUkVQT1JURVJTX1RFTVBfRElSX1BBVEhcIjtcblxuY29uc3QgZGVwZW5kZW5jaWVzID0gW1wiamVzdC1odG1sLXJlcG9ydGVyc1wiLCBcImpzb24ybWRcIiwgXCJjaGFydGpzLW5vZGUtY2FudmFzXCJdO1xuXG5hc3luYyBmdW5jdGlvbiBub3JtYWxpemVJbXBvcnQ8VD4oaW1wb3J0UHJvbWlzZTogUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAvLyBDb21tb25KUydzIGBtb2R1bGUuZXhwb3J0c2AgaXMgd3JhcHBlZCBhcyBgZGVmYXVsdGAgaW4gRVNNb2R1bGUuXG4gIHJldHVybiBpbXBvcnRQcm9taXNlLnRoZW4oKG06IGFueSkgPT4gKG0uZGVmYXVsdCB8fCBtKSBhcyBUKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVGVzdCByZXBvcnRpbmcgdXRpbGl0eSBjbGFzcyBmb3IgbWFuYWdpbmcgdGVzdCByZXN1bHRzIGFuZCBldmlkZW5jZVxuICogQHN1bW1hcnkgQSBjb21wcmVoZW5zaXZlIHRlc3QgcmVwb3J0ZXIgdGhhdCBoYW5kbGVzIHZhcmlvdXMgdHlwZXMgb2YgdGVzdCBhcnRpZmFjdHMgaW5jbHVkaW5nIG1lc3NhZ2VzLFxuICogYXR0YWNobWVudHMsIGRhdGEsIGltYWdlcywgdGFibGVzLCBhbmQgZ3JhcGhzLiBJdCBwcm92aWRlcyBtZXRob2RzIHRvIHJlcG9ydCBhbmQgc3RvcmUgdGVzdCBldmlkZW5jZVxuICogaW4gZGlmZmVyZW50IGZvcm1hdHMgYW5kIG1hbmFnZXMgZGVwZW5kZW5jaWVzIGZvciByZXBvcnRpbmcgZnVuY3Rpb25hbGl0eS5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFR5cGUgb2YgZGF0YSBiZWluZyByZXBvcnRlZFxuICogQHBhcmFtIHtzdHJpbmd9IFt0ZXN0Q2FzZT1cInRlc3RzXCJdIC0gTmFtZSBvZiB0aGUgdGVzdCBjYXNlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2Jhc2VQYXRoXSAtIEJhc2UgcGF0aCBmb3Igc3RvcmluZyB0ZXN0IHJlcG9ydHNcbiAqIEBjbGFzc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZXBvcnRlciA9IG5ldyBUZXN0UmVwb3J0ZXIoJ2xvZ2luLXRlc3QnKTtcbiAqXG4gKiAvLyBSZXBvcnQgdGVzdCBtZXNzYWdlc1xuICogYXdhaXQgcmVwb3J0ZXIucmVwb3J0TWVzc2FnZSgnVGVzdCBTdGFydGVkJywgJ0xvZ2luIGZsb3cgaW5pdGlhdGVkJyk7XG4gKlxuICogLy8gUmVwb3J0IHRlc3QgZGF0YVxuICogYXdhaXQgcmVwb3J0ZXIucmVwb3J0RGF0YSgndXNlci1jcmVkZW50aWFscycsIHsgdXNlcm5hbWU6ICd0ZXN0JyB9LCAnanNvbicpO1xuICpcbiAqIC8vIFJlcG9ydCB0ZXN0IHJlc3VsdHMgdGFibGVcbiAqIGF3YWl0IHJlcG9ydGVyLnJlcG9ydFRhYmxlKCd0ZXN0LXJlc3VsdHMnLCB7XG4gKiAgIGhlYWRlcnM6IFsnU3RlcCcsICdTdGF0dXMnXSxcbiAqICAgcm93czogW1xuICogICAgIHsgU3RlcDogJ0xvZ2luJywgU3RhdHVzOiAnUGFzcycgfSxcbiAqICAgICB7IFN0ZXA6ICdWYWxpZGF0aW9uJywgU3RhdHVzOiAnUGFzcycgfVxuICogICBdXG4gKiB9KTtcbiAqXG4gKiAvLyBSZXBvcnQgdGVzdCBldmlkZW5jZVxuICogYXdhaXQgcmVwb3J0ZXIucmVwb3J0QXR0YWNobWVudCgnU2NyZWVuc2hvdCcsIHNjcmVlbnNob3RCdWZmZXIpO1xuICogYGBgXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgVGVzdFJlcG9ydGVyXG4gKiAgIHBhcnRpY2lwYW50IEZpbGVTeXN0ZW1cbiAqICAgcGFydGljaXBhbnQgRGVwZW5kZW5jaWVzXG4gKlxuICogICBDbGllbnQtPj5UZXN0UmVwb3J0ZXI6IG5ldyBUZXN0UmVwb3J0ZXIodGVzdENhc2UsIGJhc2VQYXRoKVxuICogICBUZXN0UmVwb3J0ZXItPj5GaWxlU3lzdGVtOiBDcmVhdGUgcmVwb3J0IGRpcmVjdG9yeVxuICpcbiAqICAgYWx0IFJlcG9ydCBNZXNzYWdlXG4gKiAgICAgQ2xpZW50LT4+VGVzdFJlcG9ydGVyOiByZXBvcnRNZXNzYWdlKHRpdGxlLCBtZXNzYWdlKVxuICogICAgIFRlc3RSZXBvcnRlci0+PkRlcGVuZGVuY2llczogSW1wb3J0IGhlbHBlcnNcbiAqICAgICBUZXN0UmVwb3J0ZXItPj5GaWxlU3lzdGVtOiBTdG9yZSBtZXNzYWdlXG4gKiAgIGVsc2UgUmVwb3J0IERhdGFcbiAqICAgICBDbGllbnQtPj5UZXN0UmVwb3J0ZXI6IHJlcG9ydERhdGEocmVmZXJlbmNlLCBkYXRhLCB0eXBlKVxuICogICAgIFRlc3RSZXBvcnRlci0+PkRlcGVuZGVuY2llczogUHJvY2VzcyBkYXRhXG4gKiAgICAgVGVzdFJlcG9ydGVyLT4+RmlsZVN5c3RlbTogU3RvcmUgZm9ybWF0dGVkIGRhdGFcbiAqICAgZWxzZSBSZXBvcnQgVGFibGVcbiAqICAgICBDbGllbnQtPj5UZXN0UmVwb3J0ZXI6IHJlcG9ydFRhYmxlKHJlZmVyZW5jZSwgdGFibGVEZWYpXG4gKiAgICAgVGVzdFJlcG9ydGVyLT4+RGVwZW5kZW5jaWVzOiBDb252ZXJ0IHRvIE1EIGZvcm1hdFxuICogICAgIFRlc3RSZXBvcnRlci0+PkZpbGVTeXN0ZW06IFN0b3JlIHRhYmxlXG4gKiAgIGVuZFxuICovXG5leHBvcnQgY2xhc3MgVGVzdFJlcG9ydGVyIHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiBmb3IgYWRkaW5nIG1lc3NhZ2VzIHRvIHRoZSB0ZXN0IHJlcG9ydFxuICAgKiBAc3VtbWFyeSBTdGF0aWMgaGFuZGxlciBmb3IgcHJvY2Vzc2luZyBhbmQgc3RvcmluZyB0ZXN0IG1lc3NhZ2VzXG4gICAqIEB0eXBlIHtmdW5jdGlvbihBZGRNc2dQYXJhbXMpOiBQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyBhZGRNc2dGdW5jdGlvbjogKHBhcmFtczogQWRkTXNnUGFyYW1zKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRnVuY3Rpb24gZm9yIGFkZGluZyBhdHRhY2htZW50cyB0byB0aGUgdGVzdCByZXBvcnRcbiAgICogQHN1bW1hcnkgU3RhdGljIGhhbmRsZXIgZm9yIHByb2Nlc3NpbmcgYW5kIHN0b3JpbmcgdGVzdCBhdHRhY2htZW50c1xuICAgKiBAdHlwZSB7ZnVuY3Rpb24oQWRkQXR0YWNoUGFyYW1zKTogUHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgYWRkQXR0YWNoRnVuY3Rpb246IChcbiAgICBwYXJhbXM6IEFkZEF0dGFjaFBhcmFtc1xuICApID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBNYXAgb2YgZGVwZW5kZW5jaWVzIHJlcXVpcmVkIGJ5IHRoZSByZXBvcnRlclxuICAgKiBAc3VtbWFyeSBTdG9yZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgZGVwZW5kZW5jaWVzXG4gICAqIEB0eXBlIHtTaW1wbGVEZXBlbmRlbmN5TWFwfVxuICAgKi9cbiAgcHJpdmF0ZSBkZXBzPzogU2ltcGxlRGVwZW5kZW5jeU1hcDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGVzdENhc2U6IHN0cmluZyA9IFwidGVzdHNcIixcbiAgICBwcm90ZWN0ZWQgYmFzZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICBwcm9jZXNzLmN3ZCgpLFxuICAgICAgXCJ3b3JrZG9jc1wiLFxuICAgICAgXCJyZXBvcnRzXCIsXG4gICAgICBcImV2aWRlbmNlc1wiXG4gICAgKVxuICApIHtcbiAgICB0aGlzLmJhc2VQYXRoID0gcGF0aC5qb2luKGJhc2VQYXRoLCB0aGlzLnRlc3RDYXNlKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5iYXNlUGF0aCkpIHtcbiAgICAgIGZzLm1rZGlyU3luYyhiYXNlUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbXBvcnRzIHJlcXVpcmVkIGhlbHBlciBmdW5jdGlvbnNcbiAgICogQHN1bW1hcnkgRW5zdXJlcyBhbGwgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBhcmUgYXZhaWxhYmxlIGFuZCBpbXBvcnRzIGhlbHBlciBmdW5jdGlvbnNcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gaGVscGVycyBhcmUgaW1wb3J0ZWRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW1wb3J0SGVscGVycygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmRlcHMgPSBhd2FpdCBpbnN0YWxsSWZOb3RBdmFpbGFibGUoW2RlcGVuZGVuY2llc1swXV0sIHRoaXMuZGVwcyk7XG4gICAgLy8gaWYgKCFwcm9jZXNzLmVudltKZXN0UmVwb3J0ZXJzVGVtcFBhdGhFbnZLZXldKVxuICAgIC8vICAgcHJvY2Vzcy5lbnZbSmVzdFJlcG9ydGVyc1RlbXBQYXRoRW52S2V5XSA9ICcuL3dvcmtkb2NzL3JlcG9ydHMnO1xuICAgIGNvbnN0IHsgYWRkTXNnLCBhZGRBdHRhY2ggfSA9IGF3YWl0IG5vcm1hbGl6ZUltcG9ydChcbiAgICAgIGltcG9ydChgJHtkZXBlbmRlbmNpZXNbMF19L2hlbHBlcmApXG4gICAgKTtcbiAgICBUZXN0UmVwb3J0ZXIuYWRkTXNnRnVuY3Rpb24gPSBhZGRNc2c7XG4gICAgVGVzdFJlcG9ydGVyLmFkZEF0dGFjaEZ1bmN0aW9uID0gYWRkQXR0YWNoO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBvcnRzIGEgbWVzc2FnZSB0byB0aGUgdGVzdCByZXBvcnRcbiAgICogQHN1bW1hcnkgQWRkcyBhIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHRoZSB0ZXN0IHJlcG9ydCB3aXRoIGFuIG9wdGlvbmFsIHRpdGxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIFRpdGxlIG9mIHRoZSBtZXNzYWdlXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgb2JqZWN0fSBtZXNzYWdlIC0gQ29udGVudCBvZiB0aGUgbWVzc2FnZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbWVzc2FnZSBpcyByZXBvcnRlZFxuICAgKi9cbiAgYXN5bmMgcmVwb3J0TWVzc2FnZSh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcgfCBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIVRlc3RSZXBvcnRlci5hZGRNc2dGdW5jdGlvbikgYXdhaXQgdGhpcy5pbXBvcnRIZWxwZXJzKCk7XG4gICAgY29uc3QgbXNnID0gYCR7dGl0bGV9JHttZXNzYWdlID8gYFxcbiR7bWVzc2FnZX1gIDogXCJcIn1gO1xuICAgIGF3YWl0IFRlc3RSZXBvcnRlci5hZGRNc2dGdW5jdGlvbih7IG1lc3NhZ2U6IG1zZyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwb3J0cyBhbiBhdHRhY2htZW50IHRvIHRoZSB0ZXN0IHJlcG9ydFxuICAgKiBAc3VtbWFyeSBBZGRzIGEgZm9ybWF0dGVkIG1lc3NhZ2UgdG8gdGhlIHRlc3QgcmVwb3J0IHdpdGggYW4gb3B0aW9uYWwgdGl0bGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gVGl0bGUgb2YgdGhlIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IGF0dGFjaG1lbnQgLSBDb250ZW50IG9mIHRoZSBtZXNzYWdlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBtZXNzYWdlIGlzIHJlcG9ydGVkXG4gICAqL1xuICBhc3luYyByZXBvcnRBdHRhY2htZW50KFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgYXR0YWNobWVudDogc3RyaW5nIHwgQnVmZmVyXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghVGVzdFJlcG9ydGVyLmFkZEF0dGFjaEZ1bmN0aW9uKSBhd2FpdCB0aGlzLmltcG9ydEhlbHBlcnMoKTtcbiAgICBhd2FpdCBUZXN0UmVwb3J0ZXIuYWRkQXR0YWNoRnVuY3Rpb24oe1xuICAgICAgYXR0YWNoOiBhdHRhY2htZW50LFxuICAgICAgZGVzY3JpcHRpb246IHRpdGxlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBvcnRzIGRhdGEgd2l0aCBzcGVjaWZpZWQgdHlwZVxuICAgKiBAc3VtbWFyeSBQcm9jZXNzZXMgYW5kIHN0b3JlcyBkYXRhIGluIHRoZSB0ZXN0IHJlcG9ydCB3aXRoIGZvcm1hdHRpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZmVyZW5jZSAtIFJlZmVyZW5jZSBpZGVudGlmaWVyIGZvciB0aGUgZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IG9iamVjdH0gZGF0YSAtIERhdGEgdG8gYmUgcmVwb3J0ZWRcbiAgICogQHBhcmFtIHtQYXlsb2FkVHlwZX0gdHlwZSAtIFR5cGUgb2YgdGhlIHBheWxvYWRcbiAgICogQHBhcmFtIHtib29sZWFufSBbdHJpbT1mYWxzZV0gLSBXaGV0aGVyIHRvIHRyaW0gdGhlIGRhdGFcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gZGF0YSBpcyByZXBvcnRlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHJlcG9ydChcbiAgICByZWZlcmVuY2U6IHN0cmluZyxcbiAgICBkYXRhOiBzdHJpbmcgfCBudW1iZXIgfCBvYmplY3QgfCBCdWZmZXIsXG4gICAgdHlwZTogUGF5bG9hZFR5cGUsXG4gICAgdHJpbTogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHRyeSB7XG4gICAgICBsZXQgYXR0YWNoRnVuY3Rpb246XG4gICAgICAgIHwgdHlwZW9mIHRoaXMucmVwb3J0TWVzc2FnZVxuICAgICAgICB8IHR5cGVvZiB0aGlzLnJlcG9ydEF0dGFjaG1lbnQgPSB0aGlzLnJlcG9ydE1lc3NhZ2UuYmluZCh0aGlzKTtcbiAgICAgIGxldCBleHRlbnNpb246IFwiLnBuZ1wiIHwgXCIudHh0XCIgfCBcIi5tZFwiIHwgXCIuanNvblwiID0gXCIudHh0XCI7XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiaW1hZ2VcIjpcbiAgICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSBhcyBCdWZmZXIpO1xuICAgICAgICAgIGV4dGVuc2lvbiA9IFwiLnBuZ1wiO1xuICAgICAgICAgIGF0dGFjaEZ1bmN0aW9uID0gdGhpcy5yZXBvcnRBdHRhY2htZW50LmJpbmQodGhpcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICAgICAgaWYgKHRyaW0pIHtcbiAgICAgICAgICAgIGlmICgoZGF0YSBhcyB7IHJlcXVlc3Q/OiB1bmtub3duIH0pLnJlcXVlc3QpXG4gICAgICAgICAgICAgIGRlbGV0ZSAoZGF0YSBhcyB7IHJlcXVlc3Q/OiB1bmtub3duIH0pW1wicmVxdWVzdFwiXTtcbiAgICAgICAgICAgIGlmICgoZGF0YSBhcyB7IGNvbmZpZz86IHVua25vd24gfSkuY29uZmlnKVxuICAgICAgICAgICAgICBkZWxldGUgKGRhdGEgYXMgeyBjb25maWc/OiB1bmtub3duIH0pW1wiY29uZmlnXCJdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7XG4gICAgICAgICAgZXh0ZW5zaW9uID0gXCIuanNvblwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibWRcIjpcbiAgICAgICAgICBleHRlbnNpb24gPSBcIi5tZFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidGV4dFwiOlxuICAgICAgICAgIGV4dGVuc2lvbiA9IFwiLnR4dFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUubG9nKGBVbnN1cHBvcnRlZCB0eXBlICR7dHlwZX0uIGFzc3VtaW5nIHRleHRgKTtcbiAgICAgIH1cbiAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZS5pbmNsdWRlcyhcIlxcblwiKVxuICAgICAgICA/IHJlZmVyZW5jZVxuICAgICAgICA6IGAke3JlZmVyZW5jZX0ke2V4dGVuc2lvbn1gO1xuICAgICAgYXdhaXQgYXR0YWNoRnVuY3Rpb24ocmVmZXJlbmNlLCBkYXRhIGFzIEJ1ZmZlciB8IHN0cmluZyk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IHN0b3JlIGF0dGFjaCBhcnRpZmFjdCAke3JlZmVyZW5jZX0gdW5kZXIgdG8gdGVzdCByZXBvcnQgJHt0aGlzLnRlc3RDYXNlfSAtICR7ZX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlcG9ydERhdGEoXG4gICAgcmVmZXJlbmNlOiBzdHJpbmcsXG4gICAgZGF0YTogc3RyaW5nIHwgbnVtYmVyIHwgb2JqZWN0LFxuICAgIHR5cGU6IFBheWxvYWRUeXBlID0gXCJqc29uXCIsXG4gICAgdHJpbSA9IGZhbHNlXG4gICkge1xuICAgIHJldHVybiB0aGlzLnJlcG9ydChyZWZlcmVuY2UsIGRhdGEsIHR5cGUsIHRyaW0pO1xuICB9XG5cbiAgYXN5bmMgcmVwb3J0T2JqZWN0KHJlZmVyZW5jZTogc3RyaW5nLCBqc29uOiBvYmplY3QsIHRyaW0gPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLnJlcG9ydChyZWZlcmVuY2UsIGpzb24sIFwianNvblwiLCB0cmltKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwb3J0cyBhIHRhYmxlIGluIG1hcmtkb3duIGZvcm1hdFxuICAgKiBAc3VtbWFyeSBDb252ZXJ0cyBhbmQgc3RvcmVzIGEgdGFibGUgZGVmaW5pdGlvbiBpbiBtYXJrZG93biBmb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZmVyZW5jZSAtIFJlZmVyZW5jZSBpZGVudGlmaWVyIGZvciB0aGUgdGFibGVcbiAgICogQHBhcmFtIHtNZFRhYmxlRGVmaW5pdGlvbn0gdGFibGVEZWYgLSBUYWJsZSBkZWZpbml0aW9uIG9iamVjdFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0YWJsZSBpcyByZXBvcnRlZFxuICAgKi9cbiAgYXN5bmMgcmVwb3J0VGFibGUocmVmZXJlbmNlOiBzdHJpbmcsIHRhYmxlRGVmOiBNZFRhYmxlRGVmaW5pdGlvbikge1xuICAgIHRoaXMuZGVwcyA9IGF3YWl0IGluc3RhbGxJZk5vdEF2YWlsYWJsZShbZGVwZW5kZW5jaWVzWzFdXSwgdGhpcy5kZXBzKTtcbiAgICBsZXQgdHh0OiBzdHJpbmc7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGpzb24ybWQgPSBhd2FpdCBub3JtYWxpemVJbXBvcnQoaW1wb3J0KGAke2RlcGVuZGVuY2llc1sxXX1gKSk7XG4gICAgICB0eHQgPSBqc29uMm1kKHRhYmxlRGVmKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBjb252ZXJ0IEpTT04gdG8gTWFya2Rvd24gLSAke2V9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVwb3J0KHJlZmVyZW5jZSwgdHh0LCBcIm1kXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBvcnRzIGEgZ3JhcGggdXNpbmcgQ2hhcnQuanNcbiAgICogQHN1bW1hcnkgR2VuZXJhdGVzIGFuZCBzdG9yZXMgYSBncmFwaCB2aXN1YWxpemF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZlcmVuY2UgLSBSZWZlcmVuY2UgaWRlbnRpZmllciBmb3IgdGhlIGdyYXBoXG4gICAqIEBwYXJhbSB7YW55fSBjb25maWcgLSBDaGFydC5qcyBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBncmFwaCBpcyByZXBvcnRlZFxuICAgKi9cbiAgYXN5bmMgcmVwb3J0R3JhcGgocmVmZXJlbmNlOiBzdHJpbmcsIGNvbmZpZzogYW55KSB7XG4gICAgdGhpcy5kZXBzID0gYXdhaXQgaW5zdGFsbElmTm90QXZhaWxhYmxlKFtkZXBlbmRlbmNpZXNbMl1dLCB0aGlzLmRlcHMpO1xuICAgIGNvbnN0IHsgQ2hhcnRKU05vZGVDYW52YXMgfSA9IGF3YWl0IG5vcm1hbGl6ZUltcG9ydChcbiAgICAgIGltcG9ydChkZXBlbmRlbmNpZXNbMl0pXG4gICAgKTtcblxuICAgIGNvbnN0IHdpZHRoID0gNjAwOyAvL3B4XG4gICAgY29uc3QgaGVpZ2h0ID0gODAwOyAvL3B4XG4gICAgY29uc3QgYmFja2dyb3VuZENvbG91ciA9IFwid2hpdGVcIjsgLy8gVXNlcyBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL3RhZ3MvY2FudmFzX2ZpbGxzdHlsZS5hc3BcbiAgICBjb25zdCBjaGFydEpTTm9kZUNhbnZhcyA9IG5ldyBDaGFydEpTTm9kZUNhbnZhcyh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGJhY2tncm91bmRDb2xvdXIsXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbWFnZSA9IGF3YWl0IGNoYXJ0SlNOb2RlQ2FudmFzLnJlbmRlclRvQnVmZmVyKGNvbmZpZyk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucmVwb3J0SW1hZ2UocmVmZXJlbmNlLCBpbWFnZSk7XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBvcnRzIGFuIGltYWdlIHRvIHRoZSB0ZXN0IHJlcG9ydFxuICAgKiBAc3VtbWFyeSBTdG9yZXMgYW4gaW1hZ2UgYnVmZmVyIGluIHRoZSB0ZXN0IHJlcG9ydFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmZXJlbmNlIC0gUmVmZXJlbmNlIGlkZW50aWZpZXIgZm9yIHRoZSBpbWFnZVxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIC0gSW1hZ2UgZGF0YSBidWZmZXJcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gaW1hZ2UgaXMgcmVwb3J0ZWRcbiAgICovXG4gIGFzeW5jIHJlcG9ydEltYWdlKHJlZmVyZW5jZTogc3RyaW5nLCBidWZmZXI6IEJ1ZmZlcikge1xuICAgIHJldHVybiB0aGlzLnJlcG9ydChyZWZlcmVuY2UsIGJ1ZmZlciwgXCJpbWFnZVwiKTtcbiAgfVxufVxuIl19
300
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdGVzdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQXdCO0FBQ3hCLDRDQUFvQjtBQUVwQixpQ0FBNkM7QUFtQzdDOzs7OztHQUtHO0FBQ1UsUUFBQSwyQkFBMkIsR0FBRyxtQ0FBbUMsQ0FBQztBQUUvRTs7Ozs7R0FLRztBQUNILE1BQU0sWUFBWSxHQUFHLENBQUMscUJBQXFCLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFFL0U7Ozs7Ozs7O0dBUUc7QUFDSCxLQUFLLFVBQVUsZUFBZSxDQUFJLGFBQXlCO0lBQ3pELG1FQUFtRTtJQUNuRSxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQU0sQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeURHO0FBQ0gsTUFBYSxZQUFZO0lBd0J2QixZQUNZLFdBQW1CLE9BQU8sRUFDMUIsV0FBVyxjQUFJLENBQUMsSUFBSSxDQUM1QixPQUFPLENBQUMsR0FBRyxFQUFFLEVBQ2IsVUFBVSxFQUNWLFNBQVMsRUFDVCxXQUFXLENBQ1o7UUFOUyxhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUtqQjtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxZQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2xDLFlBQUUsQ0FBQyxTQUFT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VyxDQUFDLFNBQWlCLEVBQUUsTUFBYztRQUNqRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRCxDQUFDO0NBQ0Y7QUFwT0Qsb0NBb09DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IE1kVGFibGVEZWZpbml0aW9uIH0gZnJvbSBcIi4vbWRcIjtcbmltcG9ydCB7IGluc3RhbGxJZk5vdEF2YWlsYWJsZSB9IGZyb20gXCIuL2ZzXCI7XG5pbXBvcnQgeyBTaW1wbGVEZXBlbmRlbmN5TWFwIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIEFkZEF0dGFjaFBhcmFtc1xuICogQGRlc2NyaXB0aW9uIFBhcmFtZXRlcnMgZm9yIGFkZGluZyBhbiBhdHRhY2htZW50IHRvIGEgcmVwb3J0XG4gKiBAc3VtbWFyeSBJbnRlcmZhY2UgZm9yIGF0dGFjaG1lbnQgcGFyYW1ldGVyc1xuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEF0dGFjaFBhcmFtcyB7XG4gIGF0dGFjaDogc3RyaW5nIHwgQnVmZmVyO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgb2JqZWN0O1xuICBjb250ZXh0PzogYW55O1xuICBidWZmZXJGb3JtYXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGludGVyZmFjZSBBZGRNc2dQYXJhbXNcbiAqIEBkZXNjcmlwdGlvbiBQYXJhbWV0ZXJzIGZvciBhZGRpbmcgYSBtZXNzYWdlIHRvIGEgcmVwb3J0XG4gKiBAc3VtbWFyeSBJbnRlcmZhY2UgZm9yIG1lc3NhZ2UgcGFyYW1ldGVyc1xuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZE1zZ1BhcmFtcyB7XG4gIG1lc3NhZ2U6IHN0cmluZyB8IG9iamVjdDtcbiAgY29udGV4dD86IGFueTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7KFwianNvblwifFwiaW1hZ2VcInxcInRleHRcInxcIm1kXCIpfSBQYXlsb2FkVHlwZVxuICogQGRlc2NyaXB0aW9uIFR5cGVzIG9mIHBheWxvYWRzIHRoYXQgY2FuIGJlIGhhbmRsZWRcbiAqIEBzdW1tYXJ5IFVuaW9uIHR5cGUgZm9yIHBheWxvYWQgdHlwZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IHR5cGUgUGF5bG9hZFR5cGUgPSBcImpzb25cIiB8IFwiaW1hZ2VcIiB8IFwidGV4dFwiIHwgXCJtZFwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFbnZpcm9ubWVudCB2YXJpYWJsZSBrZXkgZm9yIEplc3QgSFRNTCByZXBvcnRlcnMgdGVtcG9yYXJ5IGRpcmVjdG9yeSBwYXRoXG4gKiBAc3VtbWFyeSBDb25zdGFudCBkZWZpbmluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUga2V5IGZvciBKZXN0IEhUTUwgcmVwb3J0ZXJzXG4gKiBAY29uc3QgSmVzdFJlcG9ydGVyc1RlbXBQYXRoRW52S2V5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBKZXN0UmVwb3J0ZXJzVGVtcFBhdGhFbnZLZXkgPSBcIkpFU1RfSFRNTF9SRVBPUlRFUlNfVEVNUF9ESVJfUEFUSFwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcnJheSBvZiBkZXBlbmRlbmNpZXMgcmVxdWlyZWQgYnkgdGhlIHRlc3QgcmVwb3J0ZXJcbiAqIEBzdW1tYXJ5IExpc3Qgb2YgbnBtIHBhY2thZ2VzIG5lZWRlZCBmb3IgcmVwb3J0aW5nIGZ1bmN0aW9uYWxpdHlcbiAqIEBjb25zdCBkZXBlbmRlbmNpZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuY29uc3QgZGVwZW5kZW5jaWVzID0gW1wiamVzdC1odG1sLXJlcG9ydGVyc1wiLCBcImpzb24ybWRcIiwgXCJjaGFydGpzLW5vZGUtY2FudmFzXCJdO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBOb3JtYWxpemVzIGltcG9ydHMgdG8gaGFuZGxlIGJvdGggQ29tbW9uSlMgYW5kIEVTTW9kdWxlIGZvcm1hdHNcbiAqIEBzdW1tYXJ5IFV0aWxpdHkgZnVuY3Rpb24gdG8gaGFuZGxlIG1vZHVsZSBpbXBvcnQgZGlmZmVyZW5jZXMgYmV0d2VlbiBmb3JtYXRzXG4gKiBAdGVtcGxhdGUgVCAtIFR5cGUgb2YgdGhlIGltcG9ydGVkIG1vZHVsZVxuICogQHBhcmFtIHtQcm9taXNlPFQ+fSBpbXBvcnRQcm9taXNlIC0gUHJvbWlzZSByZXR1cm5lZCBieSBkeW5hbWljIGltcG9ydFxuICogQHJldHVybiB7UHJvbWlzZTxUPn0gTm9ybWFsaXplZCBtb2R1bGVcbiAqIEBmdW5jdGlvbiBub3JtYWxpemVJbXBvcnRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gbm9ybWFsaXplSW1wb3J0PFQ+KGltcG9ydFByb21pc2U6IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgLy8gQ29tbW9uSlMncyBgbW9kdWxlLmV4cG9ydHNgIGlzIHdyYXBwZWQgYXMgYGRlZmF1bHRgIGluIEVTTW9kdWxlLlxuICByZXR1cm4gaW1wb3J0UHJvbWlzZS50aGVuKChtOiBhbnkpID0+IChtLmRlZmF1bHQgfHwgbSkgYXMgVCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFRlc3QgcmVwb3J0aW5nIHV0aWxpdHkgY2xhc3MgZm9yIG1hbmFnaW5nIHRlc3QgcmVzdWx0cyBhbmQgZXZpZGVuY2VcbiAqIEBzdW1tYXJ5IEEgY29tcHJlaGVuc2l2ZSB0ZXN0IHJlcG9ydGVyIHRoYXQgaGFuZGxlcyB2YXJpb3VzIHR5cGVzIG9mIHRlc3QgYXJ0aWZhY3RzIGluY2x1ZGluZyBtZXNzYWdlcyxcbiAqIGF0dGFjaG1lbnRzLCBkYXRhLCBpbWFnZXMsIHRhYmxlcywgYW5kIGdyYXBocy4gSXQgcHJvdmlkZXMgbWV0aG9kcyB0byByZXBvcnQgYW5kIHN0b3JlIHRlc3QgZXZpZGVuY2VcbiAqIGluIGRpZmZlcmVudCBmb3JtYXRzIGFuZCBtYW5hZ2VzIGRlcGVuZGVuY2llcyBmb3IgcmVwb3J0aW5nIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogQHRlbXBsYXRlIFQgLSBUeXBlIG9mIGRhdGEgYmVpbmcgcmVwb3J0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdGVzdENhc2U9XCJ0ZXN0c1wiXSAtIE5hbWUgb2YgdGhlIHRlc3QgY2FzZVxuICogQHBhcmFtIHtzdHJpbmd9IFtiYXNlUGF0aF0gLSBCYXNlIHBhdGggZm9yIHN0b3JpbmcgdGVzdCByZXBvcnRzXG4gKiBAY2xhc3NcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVwb3J0ZXIgPSBuZXcgVGVzdFJlcG9ydGVyKCdsb2dpbi10ZXN0Jyk7XG4gKlxuICogLy8gUmVwb3J0IHRlc3QgbWVzc2FnZXNcbiAqIGF3YWl0IHJlcG9ydGVyLnJlcG9ydE1lc3NhZ2UoJ1Rlc3QgU3RhcnRlZCcsICdMb2dpbiBmbG93IGluaXRpYXRlZCcpO1xuICpcbiAqIC8vIFJlcG9ydCB0ZXN0IGRhdGFcbiAqIGF3YWl0IHJlcG9ydGVyLnJlcG9ydERhdGEoJ3VzZXItY3JlZGVudGlhbHMnLCB7IHVzZXJuYW1lOiAndGVzdCcgfSwgJ2pzb24nKTtcbiAqXG4gKiAvLyBSZXBvcnQgdGVzdCByZXN1bHRzIHRhYmxlXG4gKiBhd2FpdCByZXBvcnRlci5yZXBvcnRUYWJsZSgndGVzdC1yZXN1bHRzJywge1xuICogICBoZWFkZXJzOiBbJ1N0ZXAnLCAnU3RhdHVzJ10sXG4gKiAgIHJvd3M6IFtcbiAqICAgICB7IFN0ZXA6ICdMb2dpbicsIFN0YXR1czogJ1Bhc3MnIH0sXG4gKiAgICAgeyBTdGVwOiAnVmFsaWRhdGlvbicsIFN0YXR1czogJ1Bhc3MnIH1cbiAqICAgXVxuICogfSk7XG4gKlxuICogLy8gUmVwb3J0IHRlc3QgZXZpZGVuY2VcbiAqIGF3YWl0IHJlcG9ydGVyLnJlcG9ydEF0dGFjaG1lbnQoJ1NjcmVlbnNob3QnLCBzY3JlZW5zaG90QnVmZmVyKTtcbiAqIGBgYFxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IFRlc3RSZXBvcnRlclxuICogICBwYXJ0aWNpcGFudCBGaWxlU3lzdGVtXG4gKiAgIHBhcnRpY2lwYW50IERlcGVuZGVuY2llc1xuICpcbiAqICAgQ2xpZW50LT4+VGVzdFJlcG9ydGVyOiBuZXcgVGVzdFJlcG9ydGVyKHRlc3RDYXNlLCBiYXNlUGF0aClcbiAqICAgVGVzdFJlcG9ydGVyLT4+RmlsZVN5c3RlbTogQ3JlYXRlIHJlcG9ydCBkaXJlY3RvcnlcbiAqXG4gKiAgIGFsdCBSZXBvcnQgTWVzc2FnZVxuICogICAgIENsaWVudC0+PlRlc3RSZXBvcnRlcjogcmVwb3J0TWVzc2FnZSh0aXRsZSwgbWVzc2FnZSlcbiAqICAgICBUZXN0UmVwb3J0ZXItPj5EZXBlbmRlbmNpZXM6IEltcG9ydCBoZWxwZXJzXG4gKiAgICAgVGVzdFJlcG9ydGVyLT4+RmlsZVN5c3RlbTogU3RvcmUgbWVzc2FnZVxuICogICBlbHNlIFJlcG9ydCBEYXRhXG4gKiAgICAgQ2xpZW50LT4+VGVzdFJlcG9ydGVyOiByZXBvcnREYXRhKHJlZmVyZW5jZSwgZGF0YSwgdHlwZSlcbiAqICAgICBUZXN0UmVwb3J0ZXItPj5EZXBlbmRlbmNpZXM6IFByb2Nlc3MgZGF0YVxuICogICAgIFRlc3RSZXBvcnRlci0+PkZpbGVTeXN0ZW06IFN0b3JlIGZvcm1hdHRlZCBkYXRhXG4gKiAgIGVsc2UgUmVwb3J0IFRhYmxlXG4gKiAgICAgQ2xpZW50LT4+VGVzdFJlcG9ydGVyOiByZXBvcnRUYWJsZShyZWZlcmVuY2UsIHRhYmxlRGVmKVxuICogICAgIFRlc3RSZXBvcnRlci0+PkRlcGVuZGVuY2llczogQ29udmVydCB0byBNRCBmb3JtYXRcbiAqICAgICBUZXN0UmVwb3J0ZXItPj5GaWxlU3lzdGVtOiBTdG9yZSB0YWJsZVxuICogICBlbmRcbiAqL1xuZXhwb3J0IGNsYXNzIFRlc3RSZXBvcnRlciB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRnVuY3Rpb24gZm9yIGFkZGluZyBtZXNzYWdlcyB0byB0aGUgdGVzdCByZXBvcnRcbiAgICogQHN1bW1hcnkgU3RhdGljIGhhbmRsZXIgZm9yIHByb2Nlc3NpbmcgYW5kIHN0b3JpbmcgdGVzdCBtZXNzYWdlc1xuICAgKiBAdHlwZSB7ZnVuY3Rpb24oQWRkTXNnUGFyYW1zKTogUHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgYWRkTXNnRnVuY3Rpb246IChwYXJhbXM6IEFkZE1zZ1BhcmFtcykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZ1bmN0aW9uIGZvciBhZGRpbmcgYXR0YWNobWVudHMgdG8gdGhlIHRlc3QgcmVwb3J0XG4gICAqIEBzdW1tYXJ5IFN0YXRpYyBoYW5kbGVyIGZvciBwcm9jZXNzaW5nIGFuZCBzdG9yaW5nIHRlc3QgYXR0YWNobWVudHNcbiAgICogQHR5cGUge2Z1bmN0aW9uKEFkZEF0dGFjaFBhcmFtcyk6IFByb21pc2U8dm9pZD59XG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIGFkZEF0dGFjaEZ1bmN0aW9uOiAoXG4gICAgcGFyYW1zOiBBZGRBdHRhY2hQYXJhbXNcbiAgKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTWFwIG9mIGRlcGVuZGVuY2llcyByZXF1aXJlZCBieSB0aGUgcmVwb3J0ZXJcbiAgICogQHN1bW1hcnkgU3RvcmVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGRlcGVuZGVuY2llc1xuICAgKiBAdHlwZSB7U2ltcGxlRGVwZW5kZW5jeU1hcH1cbiAgICovXG4gIHByaXZhdGUgZGVwcz86IFNpbXBsZURlcGVuZGVuY3lNYXA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHRlc3RDYXNlOiBzdHJpbmcgPSBcInRlc3RzXCIsXG4gICAgcHJvdGVjdGVkIGJhc2VQYXRoID0gcGF0aC5qb2luKFxuICAgICAgcHJvY2Vzcy5jd2QoKSxcbiAgICAgIFwid29ya2RvY3NcIixcbiAgICAgIFwicmVwb3J0c1wiLFxuICAgICAgXCJldmlkZW5jZXNcIlxuICAgIClcbiAgKSB7XG4gICAgdGhpcy5iYXNlUGF0aCA9IHBhdGguam9pbihiYXNlUGF0aCwgdGhpcy50ZXN0Q2FzZSk7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuYmFzZVBhdGgpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoYmFzZVBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW1wb3J0cyByZXF1aXJlZCBoZWxwZXIgZnVuY3Rpb25zXG4gICAqIEBzdW1tYXJ5IEVuc3VyZXMgYWxsIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgYXJlIGF2YWlsYWJsZSBhbmQgaW1wb3J0cyBoZWxwZXIgZnVuY3Rpb25zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGhlbHBlcnMgYXJlIGltcG9ydGVkXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGltcG9ydEhlbHBlcnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5kZXBzID0gYXdhaXQgaW5zdGFsbElmTm90QXZhaWxhYmxlKFtkZXBlbmRlbmNpZXNbMF1dLCB0aGlzLmRlcHMpO1xuICAgIC8vIGlmICghcHJvY2Vzcy5lbnZbSmVzdFJlcG9ydGVyc1RlbXBQYXRoRW52S2V5XSlcbiAgICAvLyAgIHByb2Nlc3MuZW52W0plc3RSZXBvcnRlcnNUZW1wUGF0aEVudktleV0gPSAnLi93b3JrZG9jcy9yZXBvcnRzJztcbiAgICBjb25zdCB7IGFkZE1zZywgYWRkQXR0YWNoIH0gPSBhd2FpdCBub3JtYWxpemVJbXBvcnQoXG4gICAgICBpbXBvcnQoYCR7ZGVwZW5kZW5jaWVzWzBdfS9oZWxwZXJgKVxuICAgICk7XG4gICAgVGVzdFJlcG9ydGVyLmFkZE1zZ0Z1bmN0aW9uID0gYWRkTXNnO1xuICAgIFRlc3RSZXBvcnRlci5hZGRBdHRhY2hGdW5jdGlvbiA9IGFkZEF0dGFjaDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwb3J0cyBhIG1lc3NhZ2UgdG8gdGhlIHRlc3QgcmVwb3J0XG4gICAqIEBzdW1tYXJ5IEFkZHMgYSBmb3JtYXR0ZWQgbWVzc2FnZSB0byB0aGUgdGVzdCByZXBvcnQgd2l0aCBhbiBvcHRpb25hbCB0aXRsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSBUaXRsZSBvZiB0aGUgbWVzc2FnZVxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG9iamVjdH0gbWVzc2FnZSAtIENvbnRlbnQgb2YgdGhlIG1lc3NhZ2VcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG1lc3NhZ2UgaXMgcmVwb3J0ZWRcbiAgICovXG4gIGFzeW5jIHJlcG9ydE1lc3NhZ2UodGl0bGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nIHwgb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFUZXN0UmVwb3J0ZXIuYWRkTXNnRnVuY3Rpb24pIGF3YWl0IHRoaXMuaW1wb3J0SGVscGVycygpO1xuICAgIGNvbnN0IG1zZyA9IGAke3RpdGxlfSR7bWVzc2FnZSA/IGBcXG4ke21lc3NhZ2V9YCA6IFwiXCJ9YDtcbiAgICBhd2FpdCBUZXN0UmVwb3J0ZXIuYWRkTXNnRnVuY3Rpb24oeyBtZXNzYWdlOiBtc2cgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcG9ydHMgYW4gYXR0YWNobWVudCB0byB0aGUgdGVzdCByZXBvcnRcbiAgICogQHN1bW1hcnkgQWRkcyBhIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHRoZSB0ZXN0IHJlcG9ydCB3aXRoIGFuIG9wdGlvbmFsIHRpdGxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIFRpdGxlIG9mIHRoZSBtZXNzYWdlXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgQnVmZmVyfSBhdHRhY2htZW50IC0gQ29udGVudCBvZiB0aGUgbWVzc2FnZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbWVzc2FnZSBpcyByZXBvcnRlZFxuICAgKi9cbiAgYXN5bmMgcmVwb3J0QXR0YWNobWVudChcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIGF0dGFjaG1lbnQ6IHN0cmluZyB8IEJ1ZmZlclxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIVRlc3RSZXBvcnRlci5hZGRBdHRhY2hGdW5jdGlvbikgYXdhaXQgdGhpcy5pbXBvcnRIZWxwZXJzKCk7XG4gICAgYXdhaXQgVGVzdFJlcG9ydGVyLmFkZEF0dGFjaEZ1bmN0aW9uKHtcbiAgICAgIGF0dGFjaDogYXR0YWNobWVudCxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aXRsZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwb3J0cyBkYXRhIHdpdGggc3BlY2lmaWVkIHR5cGVcbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIGFuZCBzdG9yZXMgZGF0YSBpbiB0aGUgdGVzdCByZXBvcnQgd2l0aCBmb3JtYXR0aW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZlcmVuY2UgLSBSZWZlcmVuY2UgaWRlbnRpZmllciBmb3IgdGhlIGRhdGFcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBvYmplY3R9IGRhdGEgLSBEYXRhIHRvIGJlIHJlcG9ydGVkXG4gICAqIEBwYXJhbSB7UGF5bG9hZFR5cGV9IHR5cGUgLSBUeXBlIG9mIHRoZSBwYXlsb2FkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RyaW09ZmFsc2VdIC0gV2hldGhlciB0byB0cmltIHRoZSBkYXRhXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGRhdGEgaXMgcmVwb3J0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyByZXBvcnQoXG4gICAgcmVmZXJlbmNlOiBzdHJpbmcsXG4gICAgZGF0YTogc3RyaW5nIHwgbnVtYmVyIHwgb2JqZWN0IHwgQnVmZmVyLFxuICAgIHR5cGU6IFBheWxvYWRUeXBlLFxuICAgIHRyaW06IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICB0cnkge1xuICAgICAgbGV0IGF0dGFjaEZ1bmN0aW9uOlxuICAgICAgICB8IHR5cGVvZiB0aGlzLnJlcG9ydE1lc3NhZ2VcbiAgICAgICAgfCB0eXBlb2YgdGhpcy5yZXBvcnRBdHRhY2htZW50ID0gdGhpcy5yZXBvcnRNZXNzYWdlLmJpbmQodGhpcyk7XG4gICAgICBsZXQgZXh0ZW5zaW9uOiBcIi5wbmdcIiB8IFwiLnR4dFwiIHwgXCIubWRcIiB8IFwiLmpzb25cIiA9IFwiLnR4dFwiO1xuXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcImltYWdlXCI6XG4gICAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEgYXMgQnVmZmVyKTtcbiAgICAgICAgICBleHRlbnNpb24gPSBcIi5wbmdcIjtcbiAgICAgICAgICBhdHRhY2hGdW5jdGlvbiA9IHRoaXMucmVwb3J0QXR0YWNobWVudC5iaW5kKHRoaXMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwianNvblwiOlxuICAgICAgICAgIGlmICh0cmltKSB7XG4gICAgICAgICAgICBpZiAoKGRhdGEgYXMgeyByZXF1ZXN0PzogdW5rbm93biB9KS5yZXF1ZXN0KVxuICAgICAgICAgICAgICBkZWxldGUgKGRhdGEgYXMgeyByZXF1ZXN0PzogdW5rbm93biB9KVtcInJlcXVlc3RcIl07XG4gICAgICAgICAgICBpZiAoKGRhdGEgYXMgeyBjb25maWc/OiB1bmtub3duIH0pLmNvbmZpZylcbiAgICAgICAgICAgICAgZGVsZXRlIChkYXRhIGFzIHsgY29uZmlnPzogdW5rbm93biB9KVtcImNvbmZpZ1wiXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGF0YSA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xuICAgICAgICAgIGV4dGVuc2lvbiA9IFwiLmpzb25cIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm1kXCI6XG4gICAgICAgICAgZXh0ZW5zaW9uID0gXCIubWRcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICBleHRlbnNpb24gPSBcIi50eHRcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLmxvZyhgVW5zdXBwb3J0ZWQgdHlwZSAke3R5cGV9LiBhc3N1bWluZyB0ZXh0YCk7XG4gICAgICB9XG4gICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2UuaW5jbHVkZXMoXCJcXG5cIilcbiAgICAgICAgPyByZWZlcmVuY2VcbiAgICAgICAgOiBgJHtyZWZlcmVuY2V9JHtleHRlbnNpb259YDtcbiAgICAgIGF3YWl0IGF0dGFjaEZ1bmN0aW9uKHJlZmVyZW5jZSwgZGF0YSBhcyBCdWZmZXIgfCBzdHJpbmcpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBzdG9yZSBhdHRhY2ggYXJ0aWZhY3QgJHtyZWZlcmVuY2V9IHVuZGVyIHRvIHRlc3QgcmVwb3J0ICR7dGhpcy50ZXN0Q2FzZX0gLSAke2V9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcG9ydHMgZGF0YSB3aXRoIGEgc3BlY2lmaWVkIHR5cGVcbiAgICogQHN1bW1hcnkgV3JhcHBlciBtZXRob2QgZm9yIHJlcG9ydGluZyB2YXJpb3VzIHR5cGVzIG9mIGRhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZmVyZW5jZSAtIFJlZmVyZW5jZSBpZGVudGlmaWVyIGZvciB0aGUgZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IG9iamVjdH0gZGF0YSAtIERhdGEgdG8gYmUgcmVwb3J0ZWRcbiAgICogQHBhcmFtIHtQYXlsb2FkVHlwZX0gW3R5cGU9XCJqc29uXCJdIC0gVHlwZSBvZiB0aGUgcGF5bG9hZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0cmltPWZhbHNlXSAtIFdoZXRoZXIgdG8gdHJpbSB0aGUgZGF0YVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBkYXRhIGlzIHJlcG9ydGVkXG4gICAqL1xuICBhc3luYyByZXBvcnREYXRhKFxuICAgIHJlZmVyZW5jZTogc3RyaW5nLFxuICAgIGRhdGE6IHN0cmluZyB8IG51bWJlciB8IG9iamVjdCxcbiAgICB0eXBlOiBQYXlsb2FkVHlwZSA9IFwianNvblwiLFxuICAgIHRyaW0gPSBmYWxzZVxuICApIHtcbiAgICByZXR1cm4gdGhpcy5yZXBvcnQocmVmZXJlbmNlLCBkYXRhLCB0eXBlLCB0cmltKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwb3J0cyBhIEpTT04gb2JqZWN0XG4gICAqIEBzdW1tYXJ5IENvbnZlbmllbmNlIG1ldGhvZCBmb3IgcmVwb3J0aW5nIEpTT04gb2JqZWN0c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmZXJlbmNlIC0gUmVmZXJlbmNlIGlkZW50aWZpZXIgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHtvYmplY3R9IGpzb24gLSBKU09OIG9iamVjdCB0byBiZSByZXBvcnRlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0cmltPWZhbHNlXSAtIFdoZXRoZXIgdG8gdHJpbSB0aGUgb2JqZWN0XG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIG9iamVjdCBpcyByZXBvcnRlZFxuICAgKi9cbiAgYXN5bmMgcmVwb3J0T2JqZWN0KHJlZmVyZW5jZTogc3RyaW5nLCBqc29uOiBvYmplY3QsIHRyaW0gPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLnJlcG9ydChyZWZlcmVuY2UsIGpzb24sIFwianNvblwiLCB0cmltKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwb3J0cyBhIHRhYmxlIGluIG1hcmtkb3duIGZvcm1hdFxuICAgKiBAc3VtbWFyeSBDb252ZXJ0cyBhbmQgc3RvcmVzIGEgdGFibGUgZGVmaW5pdGlvbiBpbiBtYXJrZG93biBmb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZmVyZW5jZSAtIFJlZmVyZW5jZSBpZGVudGlmaWVyIGZvciB0aGUgdGFibGVcbiAgICogQHBhcmFtIHtNZFRhYmxlRGVmaW5pdGlvbn0gdGFibGVEZWYgLSBUYWJsZSBkZWZpbml0aW9uIG9iamVjdFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0YWJsZSBpcyByZXBvcnRlZFxuICAgKi9cbiAgYXN5bmMgcmVwb3J0VGFibGUocmVmZXJlbmNlOiBzdHJpbmcsIHRhYmxlRGVmOiBNZFRhYmxlRGVmaW5pdGlvbikge1xuICAgIHRoaXMuZGVwcyA9IGF3YWl0IGluc3RhbGxJZk5vdEF2YWlsYWJsZShbZGVwZW5kZW5jaWVzWzFdXSwgdGhpcy5kZXBzKTtcbiAgICBsZXQgdHh0OiBzdHJpbmc7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGpzb24ybWQgPSBhd2FpdCBub3JtYWxpemVJbXBvcnQoaW1wb3J0KGAke2RlcGVuZGVuY2llc1sxXX1gKSk7XG4gICAgICB0eHQgPSBqc29uMm1kKHRhYmxlRGVmKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBjb252ZXJ0IEpTT04gdG8gTWFya2Rvd24gLSAke2V9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVwb3J0KHJlZmVyZW5jZSwgdHh0LCBcIm1kXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBvcnRzIGEgZ3JhcGggdXNpbmcgQ2hhcnQuanNcbiAgICogQHN1bW1hcnkgR2VuZXJhdGVzIGFuZCBzdG9yZXMgYSBncmFwaCB2aXN1YWxpemF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZlcmVuY2UgLSBSZWZlcmVuY2UgaWRlbnRpZmllciBmb3IgdGhlIGdyYXBoXG4gICAqIEBwYXJhbSB7YW55fSBjb25maWcgLSBDaGFydC5qcyBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBncmFwaCBpcyByZXBvcnRlZFxuICAgKi9cbiAgYXN5bmMgcmVwb3J0R3JhcGgocmVmZXJlbmNlOiBzdHJpbmcsIGNvbmZpZzogYW55KSB7XG4gICAgdGhpcy5kZXBzID0gYXdhaXQgaW5zdGFsbElmTm90QXZhaWxhYmxlKFtkZXBlbmRlbmNpZXNbMl1dLCB0aGlzLmRlcHMpO1xuICAgIGNvbnN0IHsgQ2hhcnRKU05vZGVDYW52YXMgfSA9IGF3YWl0IG5vcm1hbGl6ZUltcG9ydChcbiAgICAgIGltcG9ydChkZXBlbmRlbmNpZXNbMl0pXG4gICAgKTtcblxuICAgIGNvbnN0IHdpZHRoID0gNjAwOyAvL3B4XG4gICAgY29uc3QgaGVpZ2h0ID0gODAwOyAvL3B4XG4gICAgY29uc3QgYmFja2dyb3VuZENvbG91ciA9IFwid2hpdGVcIjsgLy8gVXNlcyBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL3RhZ3MvY2FudmFzX2ZpbGxzdHlsZS5hc3BcbiAgICBjb25zdCBjaGFydEpTTm9kZUNhbnZhcyA9IG5ldyBDaGFydEpTTm9kZUNhbnZhcyh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGJhY2tncm91bmRDb2xvdXIsXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbWFnZSA9IGF3YWl0IGNoYXJ0SlNOb2RlQ2FudmFzLnJlbmRlclRvQnVmZmVyKGNvbmZpZyk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucmVwb3J0SW1hZ2UocmVmZXJlbmNlLCBpbWFnZSk7XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBvcnRzIGFuIGltYWdlIHRvIHRoZSB0ZXN0IHJlcG9ydFxuICAgKiBAc3VtbWFyeSBTdG9yZXMgYW4gaW1hZ2UgYnVmZmVyIGluIHRoZSB0ZXN0IHJlcG9ydFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmZXJlbmNlIC0gUmVmZXJlbmNlIGlkZW50aWZpZXIgZm9yIHRoZSBpbWFnZVxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIC0gSW1hZ2UgZGF0YSBidWZmZXJcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gaW1hZ2UgaXMgcmVwb3J0ZWRcbiAgICovXG4gIGFzeW5jIHJlcG9ydEltYWdlKHJlZmVyZW5jZTogc3RyaW5nLCBidWZmZXI6IEJ1ZmZlcikge1xuICAgIHJldHVybiB0aGlzLnJlcG9ydChyZWZlcmVuY2UsIGJ1ZmZlciwgXCJpbWFnZVwiKTtcbiAgfVxufVxuIl19
@@ -3,7 +3,7 @@ import { MdTableDefinition } from "./md";
3
3
  * @interface AddAttachParams
4
4
  * @description Parameters for adding an attachment to a report
5
5
  * @summary Interface for attachment parameters
6
- * @memberOf module:@decaf-ts/utils
6
+ * @memberOf module:utils
7
7
  */
8
8
  export interface AddAttachParams {
9
9
  attach: string | Buffer;
@@ -15,7 +15,7 @@ export interface AddAttachParams {
15
15
  * @interface AddMsgParams
16
16
  * @description Parameters for adding a message to a report
17
17
  * @summary Interface for message parameters
18
- * @memberOf module:@decaf-ts/utils
18
+ * @memberOf module:utils
19
19
  */
20
20
  export interface AddMsgParams {
21
21
  message: string | object;
@@ -25,9 +25,15 @@ export interface AddMsgParams {
25
25
  * @typedef {("json"|"image"|"text"|"md")} PayloadType
26
26
  * @description Types of payloads that can be handled
27
27
  * @summary Union type for payload types
28
- * @memberOf module:@decaf-ts/utils
28
+ * @memberOf module:utils
29
29
  */
30
30
  export type PayloadType = "json" | "image" | "text" | "md";
31
+ /**
32
+ * @description Environment variable key for Jest HTML reporters temporary directory path
33
+ * @summary Constant defining the environment variable key for Jest HTML reporters
34
+ * @const JestReportersTempPathEnvKey
35
+ * @memberOf module:utils
36
+ */
31
37
  export declare const JestReportersTempPathEnvKey = "JEST_HTML_REPORTERS_TEMP_DIR_PATH";
32
38
  /**
33
39
  * @description Test reporting utility class for managing test results and evidence
@@ -141,7 +147,24 @@ export declare class TestReporter {
141
147
  * @return {Promise<void>} Promise that resolves when data is reported
142
148
  */
143
149
  protected report(reference: string, data: string | number | object | Buffer, type: PayloadType, trim?: boolean): Promise<void>;
150
+ /**
151
+ * @description Reports data with a specified type
152
+ * @summary Wrapper method for reporting various types of data
153
+ * @param {string} reference - Reference identifier for the data
154
+ * @param {string | number | object} data - Data to be reported
155
+ * @param {PayloadType} [type="json"] - Type of the payload
156
+ * @param {boolean} [trim=false] - Whether to trim the data
157
+ * @return {Promise<void>} Promise that resolves when data is reported
158
+ */
144
159
  reportData(reference: string, data: string | number | object, type?: PayloadType, trim?: boolean): Promise<void>;
160
+ /**
161
+ * @description Reports a JSON object
162
+ * @summary Convenience method for reporting JSON objects
163
+ * @param {string} reference - Reference identifier for the object
164
+ * @param {object} json - JSON object to be reported
165
+ * @param {boolean} [trim=false] - Whether to trim the object
166
+ * @return {Promise<void>} Promise that resolves when object is reported
167
+ */
145
168
  reportObject(reference: string, json: object, trim?: boolean): Promise<void>;
146
169
  /**
147
170
  * @description Reports a table in markdown format
@@ -22,7 +22,7 @@ exports.escapeRegExp = escapeRegExp;
22
22
  *
23
23
  * @function padEnd
24
24
  *
25
- * @memberOf module:TextUtils
25
+ * @memberOf module:utils
26
26
  */
27
27
  function padEnd(str, length, char = " ") {
28
28
  if (char.length !== 1)
@@ -51,11 +51,25 @@ function padEnd(str, length, char = " ") {
51
51
  * String.replace->>patchString: Return replaced string
52
52
  * patchString-->>Caller: Return patched string
53
53
  *
54
- * @memberOf module:TextUtils
54
+ * @memberOf module:utils
55
55
  */
56
56
  function patchPlaceholders(input, values) {
57
57
  return input.replace(/\$\{([a-zA-Z0-9_]+)\}/g, (match, variable) => values[variable] || match);
58
58
  }
59
+ /**
60
+ * @description Replaces occurrences of keys with their corresponding values in a string.
61
+ * @summary Iterates through a set of key-value pairs and replaces all occurrences of each key
62
+ * in the input string with its corresponding value. Supports regular expression flags for customized replacement.
63
+ *
64
+ * @param {string} input - The input string in which replacements will be made.
65
+ * @param {Record<string, number | string>} values - An object containing key-value pairs for replacement.
66
+ * @param {string} [flags="g"] - Regular expression flags to control the replacement behavior.
67
+ * @return {string} The string with all specified replacements applied.
68
+ *
69
+ * @function patchString
70
+ *
71
+ * @memberOf module:utils
72
+ */
59
73
  function patchString(input, values, flags = "g") {
60
74
  Object.entries(values).forEach(([key, val]) => {
61
75
  const regexp = new RegExp(escapeRegExp(key), flags);
@@ -73,7 +87,7 @@ function patchString(input, values, flags = "g") {
73
87
  *
74
88
  * @function toCamelCase
75
89
  *
76
- * @memberOf module:TextUtils
90
+ * @memberOf module:utils
77
91
  */
78
92
  function toCamelCase(text) {
79
93
  return text
@@ -90,7 +104,7 @@ function toCamelCase(text) {
90
104
  *
91
105
  * @function toENVFormat
92
106
  *
93
- * @memberOf module:TextUtils
107
+ * @memberOf module:utils
94
108
  */
95
109
  function toENVFormat(text) {
96
110
  return toSnakeCase(text).toUpperCase();
@@ -104,7 +118,7 @@ function toENVFormat(text) {
104
118
  *
105
119
  * @function toSnakeCase
106
120
  *
107
- * @memberOf module:TextUtils
121
+ * @memberOf module:utils
108
122
  */
109
123
  function toSnakeCase(text) {
110
124
  return text
@@ -121,7 +135,7 @@ function toSnakeCase(text) {
121
135
  *
122
136
  * @function toKebabCase
123
137
  *
124
- * @memberOf module:TextUtils
138
+ * @memberOf module:utils
125
139
  */
126
140
  function toKebabCase(text) {
127
141
  return text
@@ -139,14 +153,26 @@ function toKebabCase(text) {
139
153
  *
140
154
  * @function toPascalCase
141
155
  *
142
- * @memberOf module:TextUtils
156
+ * @memberOf module:utils
143
157
  */
144
158
  function toPascalCase(text) {
145
159
  return text
146
160
  .replace(/(?:^\w|[A-Z]|\b\w)/g, (word) => word.toUpperCase())
147
161
  .replace(/\s+/g, "");
148
162
  }
163
+ /**
164
+ * @description Escapes special characters in a string for use in a regular expression.
165
+ * @summary Adds backslashes before characters that have special meaning in regular expressions,
166
+ * allowing the string to be used as a literal match in a RegExp.
167
+ *
168
+ * @param {string} string - The string to escape for regular expression use.
169
+ * @return {string} The escaped string safe for use in regular expressions.
170
+ *
171
+ * @function escapeRegExp
172
+ *
173
+ * @memberOf module:utils
174
+ */
149
175
  function escapeRegExp(string) {
150
176
  return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
151
177
  }
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy90ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZUEsd0JBUUM7QUEwQkQsOENBUUM7QUFFRCxrQ0FVQztBQWNELGtDQU1DO0FBY0Qsa0NBRUM7QUFhRCxrQ0FLQztBQWFELGtDQUtDO0FBY0Qsb0NBSUM7QUFFRCxvQ0FFQztBQW5LRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILFNBQWdCLE1BQU0sQ0FDcEIsR0FBVyxFQUNYLE1BQWMsRUFDZCxPQUFlLEdBQUc7SUFFbEIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUM7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0lBQ3hFLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILFNBQWdCLGlCQUFpQixDQUMvQixLQUFhLEVBQ2IsTUFBdUM7SUFFdkMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUNsQix3QkFBd0IsRUFDeEIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBRSxNQUFNLENBQUMsUUFBa0IsQ0FBWSxJQUFJLEtBQUssQ0FDckUsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixXQUFXLENBQ3pCLEtBQWEsRUFDYixNQUF1QyxFQUN2QyxRQUFnQixHQUFHO0lBRW5CLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRTtRQUM1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEQsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQWEsQ0FBQyxDQUFDO0lBQy9DLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixXQUFXLENBQUMsSUFBWTtJQUN0QyxPQUFPLElBQUk7U0FDUixPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDOUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3REO1NBQ0EsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixXQUFXLENBQUMsSUFBWTtJQUN0QyxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxJQUFZO0lBQ3RDLE9BQU8sSUFBSTtTQUNSLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUM7U0FDbkMsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUM7U0FDdkIsV0FBVyxFQUFFLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixXQUFXLENBQUMsSUFBWTtJQUN0QyxPQUFPLElBQUk7U0FDUixPQUFPLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO1NBQ25DLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO1NBQ3ZCLFdBQVcsRUFBRSxDQUFDO0FBQ25CLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLE9BQU8sSUFBSTtTQUNSLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzVELE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUVELFNBQWdCLFlBQVksQ0FBQyxNQUFjO0lBQ3pDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLG9DQUFvQztBQUM1RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFkcyB0aGUgZW5kIG9mIGEgc3RyaW5nIHdpdGggYSBzcGVjaWZpZWQgY2hhcmFjdGVyLlxuICogQHN1bW1hcnkgRXh0ZW5kcyB0aGUgaW5wdXQgc3RyaW5nIHRvIGEgc3BlY2lmaWVkIGxlbmd0aCBieSBhZGRpbmcgYSBwYWRkaW5nIGNoYXJhY3RlciB0byB0aGUgZW5kLlxuICogSWYgdGhlIGlucHV0IHN0cmluZyBpcyBhbHJlYWR5IGxvbmdlciB0aGFuIHRoZSBzcGVjaWZpZWQgbGVuZ3RoLCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgcGFkZGVkLlxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCAtIFRoZSBkZXNpcmVkIHRvdGFsIGxlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcj1cIiBcIl0gLSBUaGUgY2hhcmFjdGVyIHRvIHVzZSBmb3IgcGFkZGluZy4gRGVmYXVsdHMgdG8gYSBzcGFjZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHBhZGRlZCBzdHJpbmcuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBhZGRpbmcgY2hhcmFjdGVyIGlzIG5vdCBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgbG9uZy5cbiAqXG4gKiBAZnVuY3Rpb24gcGFkRW5kXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpUZXh0VXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhZEVuZChcbiAgc3RyOiBzdHJpbmcsXG4gIGxlbmd0aDogbnVtYmVyLFxuICBjaGFyOiBzdHJpbmcgPSBcIiBcIlxuKTogc3RyaW5nIHtcbiAgaWYgKGNoYXIubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGxlbmd0aCBmb3IgcGFkZGluZy4gbXVzdCBiZSBvbmUhXCIpO1xuICByZXR1cm4gc3RyLnBhZEVuZChsZW5ndGgsIGNoYXIpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXBsYWNlcyBwbGFjZWhvbGRlcnMgaW4gYSBzdHJpbmcgd2l0aCBwcm92aWRlZCB2YWx1ZXMuXG4gKiBAc3VtbWFyeSBJbnRlcnBvbGF0ZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIHBsYWNlaG9sZGVycyBvZiB0aGUgZm9ybSAke3ZhcmlhYmxlTmFtZX1cbiAqIHdpdGggY29ycmVzcG9uZGluZyB2YWx1ZXMgZnJvbSB0aGUgcHJvdmlkZWQgb2JqZWN0LiBJZiBhIHBsYWNlaG9sZGVyIGRvZXNuJ3QgaGF2ZVxuICogYSBjb3JyZXNwb25kaW5nIHZhbHVlLCBpdCBpcyBsZWZ0IHVuY2hhbmdlZCBpbiB0aGUgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAtIFRoZSBpbnB1dCBzdHJpbmcgY29udGFpbmluZyBwbGFjZWhvbGRlcnMgdG8gYmUgcmVwbGFjZWQuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz59IHZhbHVlcyAtIEFuIG9iamVjdCBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgcmVwbGFjZW1lbnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnRlcnBvbGF0ZWQgc3RyaW5nIHdpdGggcGxhY2Vob2xkZXJzIHJlcGxhY2VkIGJ5IHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICpcbiAqIEBmdW5jdGlvbiBwYXRjaFBsYWNlaG9sZGVyc1xuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IHBhdGNoU3RyaW5nXG4gKiAgIHBhcnRpY2lwYW50IFN0cmluZy5yZXBsYWNlXG4gKiAgIENhbGxlci0+PnBhdGNoU3RyaW5nOiBDYWxsIHdpdGggaW5wdXQgYW5kIHZhbHVlc1xuICogICBwYXRjaFN0cmluZy0+PlN0cmluZy5yZXBsYWNlOiBDYWxsIHdpdGggcmVnZXggYW5kIHJlcGxhY2VtZW50IGZ1bmN0aW9uXG4gKiAgIFN0cmluZy5yZXBsYWNlLT4+cGF0Y2hTdHJpbmc6IFJldHVybiByZXBsYWNlZCBzdHJpbmdcbiAqICAgcGF0Y2hTdHJpbmctLT4+Q2FsbGVyOiBSZXR1cm4gcGF0Y2hlZCBzdHJpbmdcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlRleHRVdGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hQbGFjZWhvbGRlcnMoXG4gIGlucHV0OiBzdHJpbmcsXG4gIHZhbHVlczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPlxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlucHV0LnJlcGxhY2UoXG4gICAgL1xcJFxceyhbYS16QS1aMC05X10rKVxcfS9nLFxuICAgIChtYXRjaCwgdmFyaWFibGUpID0+ICh2YWx1ZXNbdmFyaWFibGUgYXMgc3RyaW5nXSBhcyBzdHJpbmcpIHx8IG1hdGNoXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaFN0cmluZyhcbiAgaW5wdXQ6IHN0cmluZyxcbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+LFxuICBmbGFnczogc3RyaW5nID0gXCJnXCJcbik6IHN0cmluZyB7XG4gIE9iamVjdC5lbnRyaWVzKHZhbHVlcykuZm9yRWFjaCgoW2tleSwgdmFsXSkgPT4ge1xuICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXhwKGtleSksIGZsYWdzKTtcbiAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UocmVnZXhwLCB2YWwgYXMgc3RyaW5nKTtcbiAgfSk7XG4gIHJldHVybiBpbnB1dDtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBzdHJpbmcgdG8gY2FtZWxDYXNlLlxuICogQHN1bW1hcnkgVHJhbnNmb3JtcyB0aGUgaW5wdXQgc3RyaW5nIGludG8gY2FtZWxDYXNlIGZvcm1hdCwgd2hlcmUgd29yZHMgYXJlIGpvaW5lZCB3aXRob3V0IHNwYWNlc1xuICogYW5kIGVhY2ggd29yZCBhZnRlciB0aGUgZmlyc3Qgc3RhcnRzIHdpdGggYSBjYXBpdGFsIGxldHRlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBjYW1lbENhc2UuXG4gKlxuICogQGZ1bmN0aW9uIHRvQ2FtZWxDYXNlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpUZXh0VXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2FtZWxDYXNlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyg/Ol5cXHd8W0EtWl18XFxiXFx3KS9nLCAod29yZCwgaW5kZXgpID0+XG4gICAgICBpbmRleCA9PT0gMCA/IHdvcmQudG9Mb3dlckNhc2UoKSA6IHdvcmQudG9VcHBlckNhc2UoKVxuICAgIClcbiAgICAucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBzdHJpbmcgdG8gRU5WSVJPTk1FTlRfVkFSSUFCTEUgZm9ybWF0LlxuICogQHN1bW1hcnkgVHJhbnNmb3JtcyB0aGUgaW5wdXQgc3RyaW5nIGludG8gdXBwZXJjYXNlIHdpdGggd29yZHMgc2VwYXJhdGVkIGJ5IHVuZGVyc2NvcmVzLFxuICogdHlwaWNhbGx5IHVzZWQgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIGlucHV0IHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnB1dCBzdHJpbmcgY29udmVydGVkIHRvIEVOVklST05NRU5UX1ZBUklBQkxFIGZvcm1hdC5cbiAqXG4gKiBAZnVuY3Rpb24gdG9FTlZGb3JtYXRcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlRleHRVdGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9FTlZGb3JtYXQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRvU25ha2VDYXNlKHRleHQpLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIHNuYWtlX2Nhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBsb3dlcmNhc2Ugd2l0aCB3b3JkcyBzZXBhcmF0ZWQgYnkgdW5kZXJzY29yZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHN0cmluZyBjb252ZXJ0ZWQgdG8gc25ha2VfY2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9TbmFrZUNhc2VcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlRleHRVdGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9TbmFrZUNhc2UodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHRcbiAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgXCIkMV8kMlwiKVxuICAgIC5yZXBsYWNlKC9bXFxzLV0rL2csIFwiX1wiKVxuICAgIC50b0xvd2VyQ2FzZSgpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBhIHN0cmluZyB0byBrZWJhYi1jYXNlLlxuICogQHN1bW1hcnkgVHJhbnNmb3JtcyB0aGUgaW5wdXQgc3RyaW5nIGludG8gbG93ZXJjYXNlIHdpdGggd29yZHMgc2VwYXJhdGVkIGJ5IGh5cGhlbnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHN0cmluZyBjb252ZXJ0ZWQgdG8ga2ViYWItY2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9LZWJhYkNhc2VcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlRleHRVdGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9LZWJhYkNhc2UodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHRcbiAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgXCIkMS0kMlwiKVxuICAgIC5yZXBsYWNlKC9bXFxzX10rL2csIFwiLVwiKVxuICAgIC50b0xvd2VyQ2FzZSgpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBhIHN0cmluZyB0byBQYXNjYWxDYXNlLlxuICogQHN1bW1hcnkgVHJhbnNmb3JtcyB0aGUgaW5wdXQgc3RyaW5nIGludG8gUGFzY2FsQ2FzZSBmb3JtYXQsIHdoZXJlIHdvcmRzIGFyZSBqb2luZWQgd2l0aG91dCBzcGFjZXNcbiAqIGFuZCBlYWNoIHdvcmQgc3RhcnRzIHdpdGggYSBjYXBpdGFsIGxldHRlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBQYXNjYWxDYXNlLlxuICpcbiAqIEBmdW5jdGlvbiB0b1Bhc2NhbENhc2VcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlRleHRVdGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9QYXNjYWxDYXNlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyg/Ol5cXHd8W0EtWl18XFxiXFx3KS9nLCAod29yZCkgPT4gd29yZC50b1VwcGVyQ2FzZSgpKVxuICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cmluZzogc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpOyAvLyAkJiBtZWFucyB0aGUgd2hvbGUgbWF0Y2hlZCBzdHJpbmdcbn1cbiJdfQ==
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy90ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZUEsd0JBUUM7QUEwQkQsOENBUUM7QUFnQkQsa0NBVUM7QUFjRCxrQ0FNQztBQWNELGtDQUVDO0FBYUQsa0NBS0M7QUFhRCxrQ0FLQztBQWNELG9DQUlDO0FBY0Qsb0NBRUM7QUE3TEQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFnQixNQUFNLENBQ3BCLEdBQVcsRUFDWCxNQUFjLEVBQ2QsT0FBZSxHQUFHO0lBRWxCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztJQUN4RSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxTQUFnQixpQkFBaUIsQ0FDL0IsS0FBYSxFQUNiLE1BQXVDO0lBRXZDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FDbEIsd0JBQXdCLEVBQ3hCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUUsTUFBTSxDQUFDLFFBQWtCLENBQVksSUFBSSxLQUFLLENBQ3JFLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQWdCLFdBQVcsQ0FDekIsS0FBYSxFQUNiLE1BQXVDLEVBQ3ZDLFFBQWdCLEdBQUc7SUFFbkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFO1FBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRCxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBYSxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxJQUFZO0lBQ3RDLE9BQU8sSUFBSTtTQUNSLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUM5QyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDdEQ7U0FDQSxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxJQUFZO0lBQ3RDLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLElBQVk7SUFDdEMsT0FBTyxJQUFJO1NBQ1IsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQztTQUNuQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQztTQUN2QixXQUFXLEVBQUUsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxJQUFZO0lBQ3RDLE9BQU8sSUFBSTtTQUNSLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUM7U0FDbkMsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUM7U0FDdkIsV0FBVyxFQUFFLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLElBQVk7SUFDdkMsT0FBTyxJQUFJO1NBQ1IsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDNUQsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFnQixZQUFZLENBQUMsTUFBYztJQUN6QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxvQ0FBb0M7QUFDNUYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIFBhZHMgdGhlIGVuZCBvZiBhIHN0cmluZyB3aXRoIGEgc3BlY2lmaWVkIGNoYXJhY3Rlci5cbiAqIEBzdW1tYXJ5IEV4dGVuZHMgdGhlIGlucHV0IHN0cmluZyB0byBhIHNwZWNpZmllZCBsZW5ndGggYnkgYWRkaW5nIGEgcGFkZGluZyBjaGFyYWN0ZXIgdG8gdGhlIGVuZC5cbiAqIElmIHRoZSBpbnB1dCBzdHJpbmcgaXMgYWxyZWFkeSBsb25nZXIgdGhhbiB0aGUgc3BlY2lmaWVkIGxlbmd0aCwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIHBhZGRlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggLSBUaGUgZGVzaXJlZCB0b3RhbCBsZW5ndGggb2YgdGhlIHJlc3VsdGluZyBzdHJpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NoYXI9XCIgXCJdIC0gVGhlIGNoYXJhY3RlciB0byB1c2UgZm9yIHBhZGRpbmcuIERlZmF1bHRzIHRvIGEgc3BhY2UuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBwYWRkZWQgc3RyaW5nLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYWRkaW5nIGNoYXJhY3RlciBpcyBub3QgZXhhY3RseSBvbmUgY2hhcmFjdGVyIGxvbmcuXG4gKlxuICogQGZ1bmN0aW9uIHBhZEVuZFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhZEVuZChcbiAgc3RyOiBzdHJpbmcsXG4gIGxlbmd0aDogbnVtYmVyLFxuICBjaGFyOiBzdHJpbmcgPSBcIiBcIlxuKTogc3RyaW5nIHtcbiAgaWYgKGNoYXIubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGxlbmd0aCBmb3IgcGFkZGluZy4gbXVzdCBiZSBvbmUhXCIpO1xuICByZXR1cm4gc3RyLnBhZEVuZChsZW5ndGgsIGNoYXIpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXBsYWNlcyBwbGFjZWhvbGRlcnMgaW4gYSBzdHJpbmcgd2l0aCBwcm92aWRlZCB2YWx1ZXMuXG4gKiBAc3VtbWFyeSBJbnRlcnBvbGF0ZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIHBsYWNlaG9sZGVycyBvZiB0aGUgZm9ybSAke3ZhcmlhYmxlTmFtZX1cbiAqIHdpdGggY29ycmVzcG9uZGluZyB2YWx1ZXMgZnJvbSB0aGUgcHJvdmlkZWQgb2JqZWN0LiBJZiBhIHBsYWNlaG9sZGVyIGRvZXNuJ3QgaGF2ZVxuICogYSBjb3JyZXNwb25kaW5nIHZhbHVlLCBpdCBpcyBsZWZ0IHVuY2hhbmdlZCBpbiB0aGUgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAtIFRoZSBpbnB1dCBzdHJpbmcgY29udGFpbmluZyBwbGFjZWhvbGRlcnMgdG8gYmUgcmVwbGFjZWQuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz59IHZhbHVlcyAtIEFuIG9iamVjdCBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgcmVwbGFjZW1lbnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnRlcnBvbGF0ZWQgc3RyaW5nIHdpdGggcGxhY2Vob2xkZXJzIHJlcGxhY2VkIGJ5IHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICpcbiAqIEBmdW5jdGlvbiBwYXRjaFBsYWNlaG9sZGVyc1xuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IHBhdGNoU3RyaW5nXG4gKiAgIHBhcnRpY2lwYW50IFN0cmluZy5yZXBsYWNlXG4gKiAgIENhbGxlci0+PnBhdGNoU3RyaW5nOiBDYWxsIHdpdGggaW5wdXQgYW5kIHZhbHVlc1xuICogICBwYXRjaFN0cmluZy0+PlN0cmluZy5yZXBsYWNlOiBDYWxsIHdpdGggcmVnZXggYW5kIHJlcGxhY2VtZW50IGZ1bmN0aW9uXG4gKiAgIFN0cmluZy5yZXBsYWNlLT4+cGF0Y2hTdHJpbmc6IFJldHVybiByZXBsYWNlZCBzdHJpbmdcbiAqICAgcGF0Y2hTdHJpbmctLT4+Q2FsbGVyOiBSZXR1cm4gcGF0Y2hlZCBzdHJpbmdcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaFBsYWNlaG9sZGVycyhcbiAgaW5wdXQ6IHN0cmluZyxcbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+XG4pOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQucmVwbGFjZShcbiAgICAvXFwkXFx7KFthLXpBLVowLTlfXSspXFx9L2csXG4gICAgKG1hdGNoLCB2YXJpYWJsZSkgPT4gKHZhbHVlc1t2YXJpYWJsZSBhcyBzdHJpbmddIGFzIHN0cmluZykgfHwgbWF0Y2hcbiAgKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwbGFjZXMgb2NjdXJyZW5jZXMgb2Yga2V5cyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGluIGEgc3RyaW5nLlxuICogQHN1bW1hcnkgSXRlcmF0ZXMgdGhyb3VnaCBhIHNldCBvZiBrZXktdmFsdWUgcGFpcnMgYW5kIHJlcGxhY2VzIGFsbCBvY2N1cnJlbmNlcyBvZiBlYWNoIGtleVxuICogaW4gdGhlIGlucHV0IHN0cmluZyB3aXRoIGl0cyBjb3JyZXNwb25kaW5nIHZhbHVlLiBTdXBwb3J0cyByZWd1bGFyIGV4cHJlc3Npb24gZmxhZ3MgZm9yIGN1c3RvbWl6ZWQgcmVwbGFjZW1lbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IC0gVGhlIGlucHV0IHN0cmluZyBpbiB3aGljaCByZXBsYWNlbWVudHMgd2lsbCBiZSBtYWRlLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+fSB2YWx1ZXMgLSBBbiBvYmplY3QgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnMgZm9yIHJlcGxhY2VtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IFtmbGFncz1cImdcIl0gLSBSZWd1bGFyIGV4cHJlc3Npb24gZmxhZ3MgdG8gY29udHJvbCB0aGUgcmVwbGFjZW1lbnQgYmVoYXZpb3IuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgd2l0aCBhbGwgc3BlY2lmaWVkIHJlcGxhY2VtZW50cyBhcHBsaWVkLlxuICpcbiAqIEBmdW5jdGlvbiBwYXRjaFN0cmluZ1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoU3RyaW5nKFxuICBpbnB1dDogc3RyaW5nLFxuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz4sXG4gIGZsYWdzOiBzdHJpbmcgPSBcImdcIlxuKTogc3RyaW5nIHtcbiAgT2JqZWN0LmVudHJpZXModmFsdWVzKS5mb3JFYWNoKChba2V5LCB2YWxdKSA9PiB7XG4gICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAoa2V5KSwgZmxhZ3MpO1xuICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShyZWdleHAsIHZhbCBhcyBzdHJpbmcpO1xuICB9KTtcbiAgcmV0dXJuIGlucHV0O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBhIHN0cmluZyB0byBjYW1lbENhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBjYW1lbENhc2UgZm9ybWF0LCB3aGVyZSB3b3JkcyBhcmUgam9pbmVkIHdpdGhvdXQgc3BhY2VzXG4gKiBhbmQgZWFjaCB3b3JkIGFmdGVyIHRoZSBmaXJzdCBzdGFydHMgd2l0aCBhIGNhcGl0YWwgbGV0dGVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIGlucHV0IHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnB1dCBzdHJpbmcgY29udmVydGVkIHRvIGNhbWVsQ2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9DYW1lbENhc2VcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NhbWVsQ2FzZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC8oPzpeXFx3fFtBLVpdfFxcYlxcdykvZywgKHdvcmQsIGluZGV4KSA9PlxuICAgICAgaW5kZXggPT09IDAgPyB3b3JkLnRvTG93ZXJDYXNlKCkgOiB3b3JkLnRvVXBwZXJDYXNlKClcbiAgICApXG4gICAgLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIEVOVklST05NRU5UX1ZBUklBQkxFIGZvcm1hdC5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIHVwcGVyY2FzZSB3aXRoIHdvcmRzIHNlcGFyYXRlZCBieSB1bmRlcnNjb3JlcyxcbiAqIHR5cGljYWxseSB1c2VkIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBFTlZJUk9OTUVOVF9WQVJJQUJMRSBmb3JtYXQuXG4gKlxuICogQGZ1bmN0aW9uIHRvRU5WRm9ybWF0XG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9FTlZGb3JtYXQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRvU25ha2VDYXNlKHRleHQpLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIHNuYWtlX2Nhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBsb3dlcmNhc2Ugd2l0aCB3b3JkcyBzZXBhcmF0ZWQgYnkgdW5kZXJzY29yZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHN0cmluZyBjb252ZXJ0ZWQgdG8gc25ha2VfY2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9TbmFrZUNhc2VcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1NuYWtlQ2FzZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCBcIiQxXyQyXCIpXG4gICAgLnJlcGxhY2UoL1tcXHMtXSsvZywgXCJfXCIpXG4gICAgLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIGtlYmFiLWNhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBsb3dlcmNhc2Ugd2l0aCB3b3JkcyBzZXBhcmF0ZWQgYnkgaHlwaGVucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBrZWJhYi1jYXNlLlxuICpcbiAqIEBmdW5jdGlvbiB0b0tlYmFiQ2FzZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvS2ViYWJDYXNlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIFwiJDEtJDJcIilcbiAgICAucmVwbGFjZSgvW1xcc19dKy9nLCBcIi1cIilcbiAgICAudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBzdHJpbmcgdG8gUGFzY2FsQ2FzZS5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIFBhc2NhbENhc2UgZm9ybWF0LCB3aGVyZSB3b3JkcyBhcmUgam9pbmVkIHdpdGhvdXQgc3BhY2VzXG4gKiBhbmQgZWFjaCB3b3JkIHN0YXJ0cyB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHN0cmluZyBjb252ZXJ0ZWQgdG8gUGFzY2FsQ2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9QYXNjYWxDYXNlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9QYXNjYWxDYXNlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyg/Ol5cXHd8W0EtWl18XFxiXFx3KS9nLCAod29yZCkgPT4gd29yZC50b1VwcGVyQ2FzZSgpKVxuICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFc2NhcGVzIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBhIHN0cmluZyBmb3IgdXNlIGluIGEgcmVndWxhciBleHByZXNzaW9uLlxuICogQHN1bW1hcnkgQWRkcyBiYWNrc2xhc2hlcyBiZWZvcmUgY2hhcmFjdGVycyB0aGF0IGhhdmUgc3BlY2lhbCBtZWFuaW5nIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMsXG4gKiBhbGxvd2luZyB0aGUgc3RyaW5nIHRvIGJlIHVzZWQgYXMgYSBsaXRlcmFsIG1hdGNoIGluIGEgUmVnRXhwLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgLSBUaGUgc3RyaW5nIHRvIGVzY2FwZSBmb3IgcmVndWxhciBleHByZXNzaW9uIHVzZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGVzY2FwZWQgc3RyaW5nIHNhZmUgZm9yIHVzZSBpbiByZWd1bGFyIGV4cHJlc3Npb25zLlxuICpcbiAqIEBmdW5jdGlvbiBlc2NhcGVSZWdFeHBcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyaW5nOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIik7IC8vICQmIG1lYW5zIHRoZSB3aG9sZSBtYXRjaGVkIHN0cmluZ1xufVxuIl19
@@ -11,7 +11,7 @@
11
11
  *
12
12
  * @function padEnd
13
13
  *
14
- * @memberOf module:TextUtils
14
+ * @memberOf module:utils
15
15
  */
16
16
  export declare function padEnd(str: string, length: number, char?: string): string;
17
17
  /**
@@ -36,9 +36,23 @@ export declare function padEnd(str: string, length: number, char?: string): stri
36
36
  * String.replace->>patchString: Return replaced string
37
37
  * patchString-->>Caller: Return patched string
38
38
  *
39
- * @memberOf module:TextUtils
39
+ * @memberOf module:utils
40
40
  */
41
41
  export declare function patchPlaceholders(input: string, values: Record<string, number | string>): string;
42
+ /**
43
+ * @description Replaces occurrences of keys with their corresponding values in a string.
44
+ * @summary Iterates through a set of key-value pairs and replaces all occurrences of each key
45
+ * in the input string with its corresponding value. Supports regular expression flags for customized replacement.
46
+ *
47
+ * @param {string} input - The input string in which replacements will be made.
48
+ * @param {Record<string, number | string>} values - An object containing key-value pairs for replacement.
49
+ * @param {string} [flags="g"] - Regular expression flags to control the replacement behavior.
50
+ * @return {string} The string with all specified replacements applied.
51
+ *
52
+ * @function patchString
53
+ *
54
+ * @memberOf module:utils
55
+ */
42
56
  export declare function patchString(input: string, values: Record<string, number | string>, flags?: string): string;
43
57
  /**
44
58
  * @description Converts a string to camelCase.
@@ -50,7 +64,7 @@ export declare function patchString(input: string, values: Record<string, number
50
64
  *
51
65
  * @function toCamelCase
52
66
  *
53
- * @memberOf module:TextUtils
67
+ * @memberOf module:utils
54
68
  */
55
69
  export declare function toCamelCase(text: string): string;
56
70
  /**
@@ -63,7 +77,7 @@ export declare function toCamelCase(text: string): string;
63
77
  *
64
78
  * @function toENVFormat
65
79
  *
66
- * @memberOf module:TextUtils
80
+ * @memberOf module:utils
67
81
  */
68
82
  export declare function toENVFormat(text: string): string;
69
83
  /**
@@ -75,7 +89,7 @@ export declare function toENVFormat(text: string): string;
75
89
  *
76
90
  * @function toSnakeCase
77
91
  *
78
- * @memberOf module:TextUtils
92
+ * @memberOf module:utils
79
93
  */
80
94
  export declare function toSnakeCase(text: string): string;
81
95
  /**
@@ -87,7 +101,7 @@ export declare function toSnakeCase(text: string): string;
87
101
  *
88
102
  * @function toKebabCase
89
103
  *
90
- * @memberOf module:TextUtils
104
+ * @memberOf module:utils
91
105
  */
92
106
  export declare function toKebabCase(text: string): string;
93
107
  /**
@@ -100,7 +114,19 @@ export declare function toKebabCase(text: string): string;
100
114
  *
101
115
  * @function toPascalCase
102
116
  *
103
- * @memberOf module:TextUtils
117
+ * @memberOf module:utils
104
118
  */
105
119
  export declare function toPascalCase(text: string): string;
120
+ /**
121
+ * @description Escapes special characters in a string for use in a regular expression.
122
+ * @summary Adds backslashes before characters that have special meaning in regular expressions,
123
+ * allowing the string to be used as a literal match in a RegExp.
124
+ *
125
+ * @param {string} string - The string to escape for regular expression use.
126
+ * @return {string} The escaped string safe for use in regular expressions.
127
+ *
128
+ * @function escapeRegExp
129
+ *
130
+ * @memberOf module:utils
131
+ */
106
132
  export declare function escapeRegExp(string: string): string;
@@ -1,7 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.awaitTimeout = awaitTimeout;
4
+ /**
5
+ * @description Creates a promise that resolves after a specified time.
6
+ * @summary Utility function that pauses execution for a given number of milliseconds.
7
+ *
8
+ * @param {number} ms - The number of milliseconds to wait.
9
+ * @return {Promise<void>} A promise that resolves after the specified timeout.
10
+ *
11
+ * @function awaitTimeout
12
+ *
13
+ * @memberOf module:utils
14
+ */
4
15
  async function awaitTimeout(ms) {
5
16
  return new Promise((resolve) => setTimeout(resolve, ms));
6
17
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZW91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy90aW1lb3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsb0NBRUM7QUFGTSxLQUFLLFVBQVUsWUFBWSxDQUFDLEVBQVU7SUFDM0MsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgYXN5bmMgZnVuY3Rpb24gYXdhaXRUaW1lb3V0KG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG4iXX0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZW91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy90aW1lb3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBV0Esb0NBRUM7QUFiRDs7Ozs7Ozs7OztHQVVHO0FBQ0ksS0FBSyxVQUFVLFlBQVksQ0FBQyxFQUFVO0lBQzNDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciBhIHNwZWNpZmllZCB0aW1lLlxuICogQHN1bW1hcnkgVXRpbGl0eSBmdW5jdGlvbiB0aGF0IHBhdXNlcyBleGVjdXRpb24gZm9yIGEgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbXMgLSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0LlxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aW1lb3V0LlxuICpcbiAqIEBmdW5jdGlvbiBhd2FpdFRpbWVvdXRcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhd2FpdFRpbWVvdXQobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cbiJdfQ==
@@ -1 +1,12 @@
1
+ /**
2
+ * @description Creates a promise that resolves after a specified time.
3
+ * @summary Utility function that pauses execution for a given number of milliseconds.
4
+ *
5
+ * @param {number} ms - The number of milliseconds to wait.
6
+ * @return {Promise<void>} A promise that resolves after the specified timeout.
7
+ *
8
+ * @function awaitTimeout
9
+ *
10
+ * @memberOf module:utils
11
+ */
1
12
  export declare function awaitTimeout(ms: number): Promise<void>;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoaWxkUHJvY2Vzc1dpdGhvdXROdWxsU3RyZWFtcyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gXCIuL2Vudmlyb25tZW50XCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmluZXMgdGhlIHN0cnVjdHVyZSBmb3IgcHJvbWlzZSByZXNvbHV0aW9uIGFuZCByZWplY3Rpb24uXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBtZXRob2RzIHRvIHJlc29sdmUgb3IgcmVqZWN0IGEgcHJvbWlzZS5cbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQHRlbXBsYXRlIEUgLSBUaGUgdHlwZSBvZiB0aGUgZXJyb3IgdmFsdWUsIGRlZmF1bHRpbmcgdG8gRXJyb3IuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQcm9taXNlRXhlY3V0b3JcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oUik6IHZvaWR9IHJlc29sdmUgLSBGdW5jdGlvbiB0byByZXNvbHZlIHRoZSBwcm9taXNlLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbihFKTogdm9pZH0gcmVqZWN0IC0gRnVuY3Rpb24gdG8gcmVqZWN0IHRoZSBwcm9taXNlLlxuICogQG1lbWJlck9mIEBkZWNhZi10cy91dGlsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb21pc2VFeGVjdXRvcjxSLCBFID0gRXJyb3I+IHtcbiAgcmVzb2x2ZTogKHZhbHVlOiBSIHwgUHJvbWlzZUxpa2U8Uj4pID0+IHZvaWQ7XG4gIHJlamVjdDogKGVycm9yOiBFKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgYSBjb21tYW5kIGV4ZWN1dGlvbi5cbiAqIEBzdW1tYXJ5IEV4dGVuZHMgUHJvbWlzZSB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcyByZWxhdGVkIHRvIHRoZSBjb21tYW5kIGV4ZWN1dGlvbi5cbiAqIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSB3YXkgdG8gaGFuZGxlIGFuZCBpbnRlcmFjdCB3aXRoIHRoZSByZXN1bHRzXG4gKiBvZiBhbiBhc3luY2hyb25vdXMgY29tbWFuZCBleGVjdXRpb24sIGluY2x1ZGluZyBhY2Nlc3MgdG8gdGhlIGNvbW1hbmQgZGV0YWlscyxcbiAqIG91dHB1dCBsb2dzLCBhbmQgdGhlIGFiaWxpdHkgdG8gYWJvcnQgdGhlIGV4ZWN1dGlvbi5cbiAqXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSByZXNvbHZlZCB2YWx1ZSwgZGVmYXVsdGluZyB0byB2b2lkLlxuICogQGludGVyZmFjZSBDb21tYW5kUmVzdWx0XG4gKiBAZXh0ZW5kcyBQcm9taXNlPFI+XG4gKiBAbWVtYmVyT2YgQGRlY2FmLXRzL3V0aWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZFJlc3VsdDxSID0gdm9pZD4ge1xuICBwcm9taXNlOiBQcm9taXNlPFI+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbGxlciB0byBhYm9ydCB0aGUgY29tbWFuZCBleGVjdXRpb24uXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgbWVjaGFuaXNtIHRvIGNhbmNlbCB0aGUgb25nb2luZyBjb21tYW5kIGV4ZWN1dGlvbi5cbiAgICovXG4gIGFib3J0OiBBYm9ydENvbnRyb2xsZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgZXhlY3V0ZWQgY29tbWFuZCBzdHJpbmcuXG4gICAqIEBzdW1tYXJ5IENvbnRhaW5zIHRoZSBhY3R1YWwgY29tbWFuZCB0aGF0IHdhcyBleGVjdXRlZC5cbiAgICovXG4gIGNvbW1hbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBjaGlsZCBwcm9jZXNzIG9iamVjdC5cbiAgICogQHN1bW1hcnkgUmVwcmVzZW50cyB0aGUgTm9kZS5qcyBjaGlsZCBwcm9jZXNzIHRoYXQgd2FzIHNwYXduZWQgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZC5cbiAgICovXG4gIGNtZD86IENoaWxkUHJvY2Vzc1dpdGhvdXROdWxsU3RyZWFtcztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFycmF5IG9mIHN0ZG91dCBsb2dzLlxuICAgKiBAc3VtbWFyeSBDb250YWlucyBhbGwgdGhlIHN0YW5kYXJkIG91dHB1dCBtZXNzYWdlcyBwcm9kdWNlZCBkdXJpbmcgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICAgKi9cbiAgbG9nczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBcnJheSBvZiBzdGRlcnIgbG9ncy5cbiAgICogQHN1bW1hcnkgQ29udGFpbnMgYWxsIHRoZSBzdGFuZGFyZCBlcnJvciBtZXNzYWdlcyBwcm9kdWNlZCBkdXJpbmcgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICAgKi9cbiAgZXJyczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBhbGxvd3MgY2hhaW5pbmcgY29tbWFuZHMuXG4gICAqIEBzdW1tYXJ5IGFsbG93cyBjaGFpbmluZyBjb21tYW5kcyAob3IgcGlwaW5nKS5cbiAgICovXG4gIHBpcGU6IDxFPihjYjogKHI6IFIpID0+IEUpID0+IFByb21pc2U8RT47XG59XG5cbmV4cG9ydCB0eXBlIEVudmlyb25tZW50RmFjdG9yeTxUIGV4dGVuZHMgb2JqZWN0LCBFIGV4dGVuZHMgRW52aXJvbm1lbnQ8VD4+ID0gKFxuICAuLi5hcmdzOiB1bmtub3duW11cbikgPT4gRTtcblxuZXhwb3J0IHR5cGUgRGVwZW5kZW5jeU1hcCA9IHtcbiAgcHJvZDogeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W107XG4gIGRldjogeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W107XG4gIHBlZXI6IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdO1xufTtcblxuZXhwb3J0IHR5cGUgU2ltcGxlRGVwZW5kZW5jeU1hcCA9IHtcbiAgcHJvZD86IHN0cmluZ1tdO1xuICBkZXY/OiBzdHJpbmdbXTtcbiAgcGVlcj86IHN0cmluZ1tdO1xufTtcbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoaWxkUHJvY2Vzc1dpdGhvdXROdWxsU3RyZWFtcyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gXCIuL2Vudmlyb25tZW50XCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmluZXMgdGhlIHN0cnVjdHVyZSBmb3IgcHJvbWlzZSByZXNvbHV0aW9uIGFuZCByZWplY3Rpb24uXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBtZXRob2RzIHRvIHJlc29sdmUgb3IgcmVqZWN0IGEgcHJvbWlzZS5cbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQHRlbXBsYXRlIEUgLSBUaGUgdHlwZSBvZiB0aGUgZXJyb3IgdmFsdWUsIGRlZmF1bHRpbmcgdG8gRXJyb3IuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQcm9taXNlRXhlY3V0b3JcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oUik6IHZvaWR9IHJlc29sdmUgLSBGdW5jdGlvbiB0byByZXNvbHZlIHRoZSBwcm9taXNlLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbihFKTogdm9pZH0gcmVqZWN0IC0gRnVuY3Rpb24gdG8gcmVqZWN0IHRoZSBwcm9taXNlLlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb21pc2VFeGVjdXRvcjxSLCBFID0gRXJyb3I+IHtcbiAgcmVzb2x2ZTogKHZhbHVlOiBSIHwgUHJvbWlzZUxpa2U8Uj4pID0+IHZvaWQ7XG4gIHJlamVjdDogKGVycm9yOiBFKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgYSBjb21tYW5kIGV4ZWN1dGlvbi5cbiAqIEBzdW1tYXJ5IEV4dGVuZHMgUHJvbWlzZSB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcyByZWxhdGVkIHRvIHRoZSBjb21tYW5kIGV4ZWN1dGlvbi5cbiAqIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSB3YXkgdG8gaGFuZGxlIGFuZCBpbnRlcmFjdCB3aXRoIHRoZSByZXN1bHRzXG4gKiBvZiBhbiBhc3luY2hyb25vdXMgY29tbWFuZCBleGVjdXRpb24sIGluY2x1ZGluZyBhY2Nlc3MgdG8gdGhlIGNvbW1hbmQgZGV0YWlscyxcbiAqIG91dHB1dCBsb2dzLCBhbmQgdGhlIGFiaWxpdHkgdG8gYWJvcnQgdGhlIGV4ZWN1dGlvbi5cbiAqXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSByZXNvbHZlZCB2YWx1ZSwgZGVmYXVsdGluZyB0byB2b2lkLlxuICogQGludGVyZmFjZSBDb21tYW5kUmVzdWx0XG4gKiBAZXh0ZW5kcyBQcm9taXNlPFI+XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZFJlc3VsdDxSID0gdm9pZD4ge1xuICBwcm9taXNlOiBQcm9taXNlPFI+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbGxlciB0byBhYm9ydCB0aGUgY29tbWFuZCBleGVjdXRpb24uXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgbWVjaGFuaXNtIHRvIGNhbmNlbCB0aGUgb25nb2luZyBjb21tYW5kIGV4ZWN1dGlvbi5cbiAgICovXG4gIGFib3J0OiBBYm9ydENvbnRyb2xsZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgZXhlY3V0ZWQgY29tbWFuZCBzdHJpbmcuXG4gICAqIEBzdW1tYXJ5IENvbnRhaW5zIHRoZSBhY3R1YWwgY29tbWFuZCB0aGF0IHdhcyBleGVjdXRlZC5cbiAgICovXG4gIGNvbW1hbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBjaGlsZCBwcm9jZXNzIG9iamVjdC5cbiAgICogQHN1bW1hcnkgUmVwcmVzZW50cyB0aGUgTm9kZS5qcyBjaGlsZCBwcm9jZXNzIHRoYXQgd2FzIHNwYXduZWQgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZC5cbiAgICovXG4gIGNtZD86IENoaWxkUHJvY2Vzc1dpdGhvdXROdWxsU3RyZWFtcztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFycmF5IG9mIHN0ZG91dCBsb2dzLlxuICAgKiBAc3VtbWFyeSBDb250YWlucyBhbGwgdGhlIHN0YW5kYXJkIG91dHB1dCBtZXNzYWdlcyBwcm9kdWNlZCBkdXJpbmcgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICAgKi9cbiAgbG9nczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBcnJheSBvZiBzdGRlcnIgbG9ncy5cbiAgICogQHN1bW1hcnkgQ29udGFpbnMgYWxsIHRoZSBzdGFuZGFyZCBlcnJvciBtZXNzYWdlcyBwcm9kdWNlZCBkdXJpbmcgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICAgKi9cbiAgZXJyczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBhbGxvd3MgY2hhaW5pbmcgY29tbWFuZHMuXG4gICAqIEBzdW1tYXJ5IGFsbG93cyBjaGFpbmluZyBjb21tYW5kcyAob3IgcGlwaW5nKS5cbiAgICovXG4gIHBpcGU6IDxFPihjYjogKHI6IFIpID0+IEUpID0+IFByb21pc2U8RT47XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZhY3RvcnkgdHlwZSBmb3IgY3JlYXRpbmcgRW52aXJvbm1lbnQgaW5zdGFuY2VzLlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGZ1bmN0aW9uIHR5cGUgdGhhdCBjcmVhdGVzIGFuZCByZXR1cm5zIEVudmlyb25tZW50IGluc3RhbmNlcy5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIG9iamVjdCB0aGUgRW52aXJvbm1lbnQgd2lsbCBhY2N1bXVsYXRlLlxuICogQHRlbXBsYXRlIEUgLSBUaGUgc3BlY2lmaWMgRW52aXJvbm1lbnQgdHlwZSB0byBiZSBjcmVhdGVkLCBleHRlbmRpbmcgRW52aXJvbm1lbnQ8VD4uXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb24oLi4udW5rbm93bltdKTogRX0gRW52aXJvbm1lbnRGYWN0b3J5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCB0eXBlIEVudmlyb25tZW50RmFjdG9yeTxUIGV4dGVuZHMgb2JqZWN0LCBFIGV4dGVuZHMgRW52aXJvbm1lbnQ8VD4+ID0gKFxuICAuLi5hcmdzOiB1bmtub3duW11cbikgPT4gRTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTWFwIG9mIHByb2plY3QgZGVwZW5kZW5jaWVzIHdpdGggZGV0YWlsZWQgaW5mb3JtYXRpb24uXG4gKiBAc3VtbWFyeSBSZXByZXNlbnRzIHRoZSBzdHJ1Y3R1cmUgb2YgcHJvamVjdCBkZXBlbmRlbmNpZXMgY2F0ZWdvcml6ZWQgYnkgdHlwZSAocHJvZHVjdGlvbiwgZGV2ZWxvcG1lbnQsIHBlZXIpLlxuICogRWFjaCBjYXRlZ29yeSBjb250YWlucyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggbmFtZSBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZXBlbmRlbmN5TWFwXG4gKiBAcHJvcGVydHkge0FycmF5PHtuYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZ30+fSBwcm9kIC0gUHJvZHVjdGlvbiBkZXBlbmRlbmNpZXMgd2l0aCBuYW1lIGFuZCB2ZXJzaW9uLlxuICogQHByb3BlcnR5IHtBcnJheTx7bmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmd9Pn0gZGV2IC0gRGV2ZWxvcG1lbnQgZGVwZW5kZW5jaWVzIHdpdGggbmFtZSBhbmQgdmVyc2lvbi5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8e25hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nfT59IHBlZXIgLSBQZWVyIGRlcGVuZGVuY2llcyB3aXRoIG5hbWUgYW5kIHZlcnNpb24uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCB0eXBlIERlcGVuZGVuY3lNYXAgPSB7XG4gIHByb2Q6IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdO1xuICBkZXY6IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdO1xuICBwZWVyOiB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXTtcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFNpbXBsaWZpZWQgbWFwIG9mIHByb2plY3QgZGVwZW5kZW5jaWVzLlxuICogQHN1bW1hcnkgUmVwcmVzZW50cyBhIHNpbXBsaWZpZWQgc3RydWN0dXJlIG9mIHByb2plY3QgZGVwZW5kZW5jaWVzIGNhdGVnb3JpemVkIGJ5IHR5cGUuXG4gKiBFYWNoIGNhdGVnb3J5IGNvbnRhaW5zIGFuIG9wdGlvbmFsIGFycmF5IG9mIGRlcGVuZGVuY3kgbmFtZXMgd2l0aG91dCB2ZXJzaW9uIGluZm9ybWF0aW9uLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNpbXBsZURlcGVuZGVuY3lNYXBcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtwcm9kXSAtIE9wdGlvbmFsIGFycmF5IG9mIHByb2R1Y3Rpb24gZGVwZW5kZW5jeSBuYW1lcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtkZXZdIC0gT3B0aW9uYWwgYXJyYXkgb2YgZGV2ZWxvcG1lbnQgZGVwZW5kZW5jeSBuYW1lcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtwZWVyXSAtIE9wdGlvbmFsIGFycmF5IG9mIHBlZXIgZGVwZW5kZW5jeSBuYW1lcy5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IHR5cGUgU2ltcGxlRGVwZW5kZW5jeU1hcCA9IHtcbiAgcHJvZD86IHN0cmluZ1tdO1xuICBkZXY/OiBzdHJpbmdbXTtcbiAgcGVlcj86IHN0cmluZ1tdO1xufTtcbiJdfQ==