@decaf-ts/utils 0.1.6

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 (112) hide show
  1. package/LICENSE.md +157 -0
  2. package/README.md +95 -0
  3. package/dist/esm/utils.js +1 -0
  4. package/dist/types/bin/tag-release.d.ts +1 -0
  5. package/dist/types/bin/update-scripts.d.ts +1 -0
  6. package/dist/types/cli/command.d.ts +110 -0
  7. package/dist/types/cli/commands/index.d.ts +2 -0
  8. package/dist/types/cli/commands/tag-release.d.ts +105 -0
  9. package/dist/types/cli/commands/update-scripts.d.ts +211 -0
  10. package/dist/types/cli/constants.d.ts +73 -0
  11. package/dist/types/cli/index.d.ts +4 -0
  12. package/dist/types/cli/types.d.ts +28 -0
  13. package/dist/types/index.d.ts +39 -0
  14. package/dist/types/input/index.d.ts +2 -0
  15. package/dist/types/input/input.d.ts +472 -0
  16. package/dist/types/input/types.d.ts +76 -0
  17. package/dist/types/output/common.d.ts +51 -0
  18. package/dist/types/output/index.d.ts +3 -0
  19. package/dist/types/output/logging.d.ts +177 -0
  20. package/dist/types/output/types.d.ts +203 -0
  21. package/dist/types/utils/accumulator.d.ts +105 -0
  22. package/dist/types/utils/constants.d.ts +136 -0
  23. package/dist/types/utils/environment.d.ts +57 -0
  24. package/dist/types/utils/fs.d.ts +133 -0
  25. package/dist/types/utils/http.d.ts +41 -0
  26. package/dist/types/utils/index.d.ts +7 -0
  27. package/dist/types/utils/md.d.ts +156 -0
  28. package/dist/types/utils/tests.d.ts +170 -0
  29. package/dist/types/utils/text.d.ts +106 -0
  30. package/dist/types/utils/timeout.d.ts +1 -0
  31. package/dist/types/utils/types.d.ts +81 -0
  32. package/dist/types/utils/utils.d.ts +91 -0
  33. package/dist/types/utils/web.d.ts +7 -0
  34. package/dist/types/writers/OutputWriter.d.ts +49 -0
  35. package/dist/types/writers/RegexpOutputWriter.d.ts +69 -0
  36. package/dist/types/writers/StandardOutputWriter.d.ts +91 -0
  37. package/dist/types/writers/index.d.ts +4 -0
  38. package/dist/types/writers/types.d.ts +29 -0
  39. package/dist/utils.js +1 -0
  40. package/lib/assets/slogans.json +802 -0
  41. package/lib/bin/tag-release.cjs +12 -0
  42. package/lib/bin/update-scripts.cjs +12 -0
  43. package/lib/cli/command.cjs +153 -0
  44. package/lib/cli/commands/index.cjs +20 -0
  45. package/lib/cli/commands/tag-release.cjs +168 -0
  46. package/lib/cli/commands/update-scripts.cjs +511 -0
  47. package/lib/cli/constants.cjs +80 -0
  48. package/lib/cli/index.cjs +22 -0
  49. package/lib/cli/types.cjs +4 -0
  50. package/lib/esm/assets/slogans.json +802 -0
  51. package/lib/esm/bin/tag-release.js +10 -0
  52. package/lib/esm/bin/update-scripts.js +10 -0
  53. package/lib/esm/cli/command.js +149 -0
  54. package/lib/esm/cli/commands/index.js +4 -0
  55. package/lib/esm/cli/commands/tag-release.js +164 -0
  56. package/lib/esm/cli/commands/update-scripts.js +504 -0
  57. package/lib/esm/cli/constants.js +77 -0
  58. package/lib/esm/cli/index.js +6 -0
  59. package/lib/esm/cli/types.js +3 -0
  60. package/lib/esm/index.js +41 -0
  61. package/lib/esm/input/index.js +4 -0
  62. package/lib/esm/input/input.js +570 -0
  63. package/lib/esm/input/types.js +3 -0
  64. package/lib/esm/output/common.js +93 -0
  65. package/lib/esm/output/index.js +5 -0
  66. package/lib/esm/output/logging.js +350 -0
  67. package/lib/esm/output/types.js +3 -0
  68. package/lib/esm/utils/accumulator.js +145 -0
  69. package/lib/esm/utils/constants.js +176 -0
  70. package/lib/esm/utils/environment.js +91 -0
  71. package/lib/esm/utils/fs.js +271 -0
  72. package/lib/esm/utils/http.js +70 -0
  73. package/lib/esm/utils/index.js +9 -0
  74. package/lib/esm/utils/md.js +3 -0
  75. package/lib/esm/utils/tests.js +223 -0
  76. package/lib/esm/utils/text.js +142 -0
  77. package/lib/esm/utils/timeout.js +5 -0
  78. package/lib/esm/utils/types.js +3 -0
  79. package/lib/esm/utils/utils.js +220 -0
  80. package/lib/esm/utils/web.js +12 -0
  81. package/lib/esm/writers/OutputWriter.js +3 -0
  82. package/lib/esm/writers/RegexpOutputWriter.js +98 -0
  83. package/lib/esm/writers/StandardOutputWriter.js +127 -0
  84. package/lib/esm/writers/index.js +6 -0
  85. package/lib/esm/writers/types.js +3 -0
  86. package/lib/index.cjs +58 -0
  87. package/lib/input/index.cjs +20 -0
  88. package/lib/input/input.cjs +577 -0
  89. package/lib/input/types.cjs +4 -0
  90. package/lib/output/common.cjs +100 -0
  91. package/lib/output/index.cjs +21 -0
  92. package/lib/output/logging.cjs +355 -0
  93. package/lib/output/types.cjs +4 -0
  94. package/lib/utils/accumulator.cjs +149 -0
  95. package/lib/utils/constants.cjs +179 -0
  96. package/lib/utils/environment.cjs +95 -0
  97. package/lib/utils/fs.cjs +288 -0
  98. package/lib/utils/http.cjs +77 -0
  99. package/lib/utils/index.cjs +25 -0
  100. package/lib/utils/md.cjs +4 -0
  101. package/lib/utils/tests.cjs +263 -0
  102. package/lib/utils/text.cjs +153 -0
  103. package/lib/utils/timeout.cjs +8 -0
  104. package/lib/utils/types.cjs +4 -0
  105. package/lib/utils/utils.cjs +226 -0
  106. package/lib/utils/web.cjs +15 -0
  107. package/lib/writers/OutputWriter.cjs +4 -0
  108. package/lib/writers/RegexpOutputWriter.cjs +102 -0
  109. package/lib/writers/StandardOutputWriter.cjs +131 -0
  110. package/lib/writers/index.cjs +22 -0
  111. package/lib/writers/types.cjs +4 -0
  112. package/package.json +121 -0
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.TestReporter = exports.JestReportersTempPathEnvKey = void 0;
40
+ const path_1 = __importDefault(require("path"));
41
+ const fs_1 = __importDefault(require("fs"));
42
+ const fs_2 = require("./fs.cjs");
43
+ exports.JestReportersTempPathEnvKey = "JEST_HTML_REPORTERS_TEMP_DIR_PATH";
44
+ const dependencies = ["jest-html-reporters", "json2md", "chartjs-node-canvas"];
45
+ async function normalizeImport(importPromise) {
46
+ // CommonJS's `module.exports` is wrapped as `default` in ESModule.
47
+ return importPromise.then((m) => (m.default || m));
48
+ }
49
+ /**
50
+ * @description Test reporting utility class for managing test results and evidence
51
+ * @summary A comprehensive test reporter that handles various types of test artifacts including messages,
52
+ * attachments, data, images, tables, and graphs. It provides methods to report and store test evidence
53
+ * in different formats and manages dependencies for reporting functionality.
54
+ *
55
+ * @template T - Type of data being reported
56
+ * @param {string} [testCase="tests"] - Name of the test case
57
+ * @param {string} [basePath] - Base path for storing test reports
58
+ * @class
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * const reporter = new TestReporter('login-test');
63
+ *
64
+ * // Report test messages
65
+ * await reporter.reportMessage('Test Started', 'Login flow initiated');
66
+ *
67
+ * // Report test data
68
+ * await reporter.reportData('user-credentials', { username: 'test' }, 'json');
69
+ *
70
+ * // Report test results table
71
+ * await reporter.reportTable('test-results', {
72
+ * headers: ['Step', 'Status'],
73
+ * rows: [
74
+ * { Step: 'Login', Status: 'Pass' },
75
+ * { Step: 'Validation', Status: 'Pass' }
76
+ * ]
77
+ * });
78
+ *
79
+ * // Report test evidence
80
+ * await reporter.reportAttachment('Screenshot', screenshotBuffer);
81
+ * ```
82
+ *
83
+ * @mermaid
84
+ * sequenceDiagram
85
+ * participant Client
86
+ * participant TestReporter
87
+ * participant FileSystem
88
+ * participant Dependencies
89
+ *
90
+ * Client->>TestReporter: new TestReporter(testCase, basePath)
91
+ * TestReporter->>FileSystem: Create report directory
92
+ *
93
+ * alt Report Message
94
+ * Client->>TestReporter: reportMessage(title, message)
95
+ * TestReporter->>Dependencies: Import helpers
96
+ * TestReporter->>FileSystem: Store message
97
+ * else Report Data
98
+ * Client->>TestReporter: reportData(reference, data, type)
99
+ * TestReporter->>Dependencies: Process data
100
+ * TestReporter->>FileSystem: Store formatted data
101
+ * else Report Table
102
+ * Client->>TestReporter: reportTable(reference, tableDef)
103
+ * TestReporter->>Dependencies: Convert to MD format
104
+ * TestReporter->>FileSystem: Store table
105
+ * end
106
+ */
107
+ class TestReporter {
108
+ constructor(testCase = "tests", basePath = path_1.default.join(process.cwd(), "workdocs", "reports", "evidences")) {
109
+ this.testCase = testCase;
110
+ this.basePath = basePath;
111
+ this.basePath = path_1.default.join(basePath, this.testCase);
112
+ if (!fs_1.default.existsSync(this.basePath)) {
113
+ fs_1.default.mkdirSync(basePath, { recursive: true });
114
+ }
115
+ }
116
+ /**
117
+ * @description Imports required helper functions
118
+ * @summary Ensures all necessary dependencies are available and imports helper functions
119
+ * @return {Promise<void>} Promise that resolves when helpers are imported
120
+ */
121
+ async importHelpers() {
122
+ this.deps = await (0, fs_2.installIfNotAvailable)([dependencies[0]], this.deps);
123
+ // if (!process.env[JestReportersTempPathEnvKey])
124
+ // process.env[JestReportersTempPathEnvKey] = './workdocs/reports';
125
+ const { addMsg, addAttach } = await normalizeImport(Promise.resolve(`${`${dependencies[0]}/helper`}`).then(s => __importStar(require(s))));
126
+ TestReporter.addMsgFunction = addMsg;
127
+ TestReporter.addAttachFunction = addAttach;
128
+ }
129
+ /**
130
+ * @description Reports a message to the test report
131
+ * @summary Adds a formatted message to the test report with an optional title
132
+ * @param {string} title - Title of the message
133
+ * @param {string | object} message - Content of the message
134
+ * @return {Promise<void>} Promise that resolves when the message is reported
135
+ */
136
+ async reportMessage(title, message) {
137
+ if (!TestReporter.addMsgFunction)
138
+ await this.importHelpers();
139
+ const msg = `${title}${message ? `\n${message}` : ""}`;
140
+ await TestReporter.addMsgFunction({ message: msg });
141
+ }
142
+ /**
143
+ * @description Reports an attachment to the test report
144
+ * @summary Adds a formatted message to the test report with an optional title
145
+ * @param {string} title - Title of the message
146
+ * @param {string | Buffer} attachment - Content of the message
147
+ * @return {Promise<void>} Promise that resolves when the message is reported
148
+ */
149
+ async reportAttachment(title, attachment) {
150
+ if (!TestReporter.addAttachFunction)
151
+ await this.importHelpers();
152
+ await TestReporter.addAttachFunction({
153
+ attach: attachment,
154
+ description: title,
155
+ });
156
+ }
157
+ /**
158
+ * @description Reports data with specified type
159
+ * @summary Processes and stores data in the test report with formatting
160
+ * @param {string} reference - Reference identifier for the data
161
+ * @param {string | number | object} data - Data to be reported
162
+ * @param {PayloadType} type - Type of the payload
163
+ * @param {boolean} [trim=false] - Whether to trim the data
164
+ * @return {Promise<void>} Promise that resolves when data is reported
165
+ */
166
+ async report(reference, data, type, trim = false) {
167
+ try {
168
+ let attachFunction = this.reportMessage.bind(this);
169
+ let extension = ".txt";
170
+ switch (type) {
171
+ case "image":
172
+ data = Buffer.from(data);
173
+ extension = ".png";
174
+ attachFunction = this.reportAttachment.bind(this);
175
+ break;
176
+ case "json":
177
+ if (trim) {
178
+ if (data.request)
179
+ delete data["request"];
180
+ if (data.config)
181
+ delete data["config"];
182
+ }
183
+ data = JSON.stringify(data, null, 2);
184
+ extension = ".json";
185
+ break;
186
+ case "md":
187
+ extension = ".md";
188
+ break;
189
+ case "text":
190
+ extension = ".txt";
191
+ break;
192
+ default:
193
+ console.log(`Unsupported type ${type}. assuming text`);
194
+ }
195
+ reference = reference.includes("\n")
196
+ ? reference
197
+ : `${reference}${extension}`;
198
+ await attachFunction(reference, data);
199
+ }
200
+ catch (e) {
201
+ throw new Error(`Could not store attach artifact ${reference} under to test report ${this.testCase} - ${e}`);
202
+ }
203
+ }
204
+ async reportData(reference, data, type = "json", trim = false) {
205
+ return this.report(reference, data, type, trim);
206
+ }
207
+ async reportObject(reference, json, trim = false) {
208
+ return this.report(reference, json, "json", trim);
209
+ }
210
+ /**
211
+ * @description Reports a table in markdown format
212
+ * @summary Converts and stores a table definition in markdown format
213
+ * @param {string} reference - Reference identifier for the table
214
+ * @param {MdTableDefinition} tableDef - Table definition object
215
+ * @return {Promise<void>} Promise that resolves when table is reported
216
+ */
217
+ async reportTable(reference, tableDef) {
218
+ this.deps = await (0, fs_2.installIfNotAvailable)([dependencies[1]], this.deps);
219
+ let txt;
220
+ try {
221
+ const json2md = await normalizeImport(Promise.resolve(`${`${dependencies[1]}`}`).then(s => __importStar(require(s))));
222
+ txt = json2md(tableDef);
223
+ }
224
+ catch (e) {
225
+ throw new Error(`Could not convert JSON to Markdown - ${e}`);
226
+ }
227
+ return this.report(reference, txt, "md");
228
+ }
229
+ /**
230
+ * @description Reports a graph using Chart.js
231
+ * @summary Generates and stores a graph visualization
232
+ * @param {string} reference - Reference identifier for the graph
233
+ * @param {any} config - Chart.js configuration object
234
+ * @return {Promise<void>} Promise that resolves when graph is reported
235
+ */
236
+ async reportGraph(reference, config) {
237
+ this.deps = await (0, fs_2.installIfNotAvailable)([dependencies[2]], this.deps);
238
+ const { ChartJSNodeCanvas } = await normalizeImport(Promise.resolve(`${dependencies[2]}`).then(s => __importStar(require(s))));
239
+ const width = 600; //px
240
+ const height = 800; //px
241
+ const backgroundColour = "white"; // Uses https://www.w3schools.com/tags/canvas_fillstyle.asp
242
+ const chartJSNodeCanvas = new ChartJSNodeCanvas({
243
+ width,
244
+ height,
245
+ backgroundColour,
246
+ });
247
+ const image = await chartJSNodeCanvas.renderToBuffer(config);
248
+ return await this.reportImage(reference, image);
249
+ }
250
+ /**
251
+ * @description Reports an image to the test report
252
+ * @summary Stores an image buffer in the test report
253
+ * @param {string} reference - Reference identifier for the image
254
+ * @param {Buffer} buffer - Image data buffer
255
+ * @return {Promise<void>} Promise that resolves when image is reported
256
+ */
257
+ async reportImage(reference, buffer) {
258
+ return this.report(reference, buffer, "image");
259
+ }
260
+ }
261
+ exports.TestReporter = TestReporter;
262
+
263
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91dGlscy90ZXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBd0I7QUFDeEIsNENBQW9CO0FBRXBCLDZCQUE2QztBQW1DaEMsUUFBQSwyQkFBMkIsR0FBRyxtQ0FBbUMsQ0FBQztBQUUvRSxNQUFNLFlBQVksR0FBRyxDQUFDLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBRS9FLEtBQUssVUFBVSxlQUFlLENBQUksYUFBeUI7SUFDekQsbUVBQW1FO0lBQ25FLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBTSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5REc7QUFDSCxNQUFhLFlBQVk7SUF3QnZCLFlBQ1ksV0FBbUIsT0FBTyxFQUMxQixXQUFXLGNBQUksQ0FBQyxJQUFJLENBQzVCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFDYixVQUFVLEVBQ1YsU0FBUyxFQUNULFdBQVcsQ0FDWjtRQU5TLGFBQVEsR0FBUixRQUFRLENBQWtCO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBS2pCO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFlBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDbEMsWUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7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LCJmaWxlIjoidXRpbHMvdGVzdHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgTWRUYWJsZURlZmluaXRpb24gfSBmcm9tIFwiLi9tZFwiO1xuaW1wb3J0IHsgaW5zdGFsbElmTm90QXZhaWxhYmxlIH0gZnJvbSBcIi4vZnNcIjtcbmltcG9ydCB7IFNpbXBsZURlcGVuZGVuY3lNYXAgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgQWRkQXR0YWNoUGFyYW1zXG4gKiBAZGVzY3JpcHRpb24gUGFyYW1ldGVycyBmb3IgYWRkaW5nIGFuIGF0dGFjaG1lbnQgdG8gYSByZXBvcnRcbiAqIEBzdW1tYXJ5IEludGVyZmFjZSBmb3IgYXR0YWNobWVudCBwYXJhbWV0ZXJzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkBkZWNhZi10cy91dGlsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEF0dGFjaFBhcmFtcyB7XG4gIGF0dGFjaDogc3RyaW5nIHwgQnVmZmVyO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgb2JqZWN0O1xuICBjb250ZXh0PzogYW55O1xuICBidWZmZXJGb3JtYXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGludGVyZmFjZSBBZGRNc2dQYXJhbXNcbiAqIEBkZXNjcmlwdGlvbiBQYXJhbWV0ZXJzIGZvciBhZGRpbmcgYSBtZXNzYWdlIHRvIGEgcmVwb3J0XG4gKiBAc3VtbWFyeSBJbnRlcmZhY2UgZm9yIG1lc3NhZ2UgcGFyYW1ldGVyc1xuICogQG1lbWJlck9mIG1vZHVsZTpAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRNc2dQYXJhbXMge1xuICBtZXNzYWdlOiBzdHJpbmcgfCBvYmplY3Q7XG4gIGNvbnRleHQ/OiBhbnk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgeyhcImpzb25cInxcImltYWdlXCJ8XCJ0ZXh0XCJ8XCJtZFwiKX0gUGF5bG9hZFR5cGVcbiAqIEBkZXNjcmlwdGlvbiBUeXBlcyBvZiBwYXlsb2FkcyB0aGF0IGNhbiBiZSBoYW5kbGVkXG4gKiBAc3VtbWFyeSBVbmlvbiB0eXBlIGZvciBwYXlsb2FkIHR5cGVzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkBkZWNhZi10cy91dGlsc1xuICovXG5leHBvcnQgdHlwZSBQYXlsb2FkVHlwZSA9IFwianNvblwiIHwgXCJpbWFnZVwiIHwgXCJ0ZXh0XCIgfCBcIm1kXCI7XG5cbmV4cG9ydCBjb25zdCBKZXN0UmVwb3J0ZXJzVGVtcFBhdGhFbnZLZXkgPSBcIkpFU1RfSFRNTF9SRVBPUlRFUlNfVEVNUF9ESVJfUEFUSFwiO1xuXG5jb25zdCBkZXBlbmRlbmNpZXMgPSBbXCJqZXN0LWh0bWwtcmVwb3J0ZXJzXCIsIFwianNvbjJtZFwiLCBcImNoYXJ0anMtbm9kZS1jYW52YXNcIl07XG5cbmFzeW5jIGZ1bmN0aW9uIG5vcm1hbGl6ZUltcG9ydDxUPihpbXBvcnRQcm9taXNlOiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIC8vIENvbW1vbkpTJ3MgYG1vZHVsZS5leHBvcnRzYCBpcyB3cmFwcGVkIGFzIGBkZWZhdWx0YCBpbiBFU01vZHVsZS5cbiAgcmV0dXJuIGltcG9ydFByb21pc2UudGhlbigobTogYW55KSA9PiAobS5kZWZhdWx0IHx8IG0pIGFzIFQpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUZXN0IHJlcG9ydGluZyB1dGlsaXR5IGNsYXNzIGZvciBtYW5hZ2luZyB0ZXN0IHJlc3VsdHMgYW5kIGV2aWRlbmNlXG4gKiBAc3VtbWFyeSBBIGNvbXByZWhlbnNpdmUgdGVzdCByZXBvcnRlciB0aGF0IGhhbmRsZXMgdmFyaW91cyB0eXBlcyBvZiB0ZXN0IGFydGlmYWN0cyBpbmNsdWRpbmcgbWVzc2FnZXMsXG4gKiBhdHRhY2htZW50cywgZGF0YSwgaW1hZ2VzLCB0YWJsZXMsIGFuZCBncmFwaHMuIEl0IHByb3ZpZGVzIG1ldGhvZHMgdG8gcmVwb3J0IGFuZCBzdG9yZSB0ZXN0IGV2aWRlbmNlXG4gKiBpbiBkaWZmZXJlbnQgZm9ybWF0cyBhbmQgbWFuYWdlcyBkZXBlbmRlbmNpZXMgZm9yIHJlcG9ydGluZyBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIEB0ZW1wbGF0ZSBUIC0gVHlwZSBvZiBkYXRhIGJlaW5nIHJlcG9ydGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gW3Rlc3RDYXNlPVwidGVzdHNcIl0gLSBOYW1lIG9mIHRoZSB0ZXN0IGNhc2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYmFzZVBhdGhdIC0gQmFzZSBwYXRoIGZvciBzdG9yaW5nIHRlc3QgcmVwb3J0c1xuICogQGNsYXNzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlcG9ydGVyID0gbmV3IFRlc3RSZXBvcnRlcignbG9naW4tdGVzdCcpO1xuICpcbiAqIC8vIFJlcG9ydCB0ZXN0IG1lc3NhZ2VzXG4gKiBhd2FpdCByZXBvcnRlci5yZXBvcnRNZXNzYWdlKCdUZXN0IFN0YXJ0ZWQnLCAnTG9naW4gZmxvdyBpbml0aWF0ZWQnKTtcbiAqXG4gKiAvLyBSZXBvcnQgdGVzdCBkYXRhXG4gKiBhd2FpdCByZXBvcnRlci5yZXBvcnREYXRhKCd1c2VyLWNyZWRlbnRpYWxzJywgeyB1c2VybmFtZTogJ3Rlc3QnIH0sICdqc29uJyk7XG4gKlxuICogLy8gUmVwb3J0IHRlc3QgcmVzdWx0cyB0YWJsZVxuICogYXdhaXQgcmVwb3J0ZXIucmVwb3J0VGFibGUoJ3Rlc3QtcmVzdWx0cycsIHtcbiAqICAgaGVhZGVyczogWydTdGVwJywgJ1N0YXR1cyddLFxuICogICByb3dzOiBbXG4gKiAgICAgeyBTdGVwOiAnTG9naW4nLCBTdGF0dXM6ICdQYXNzJyB9LFxuICogICAgIHsgU3RlcDogJ1ZhbGlkYXRpb24nLCBTdGF0dXM6ICdQYXNzJyB9XG4gKiAgIF1cbiAqIH0pO1xuICpcbiAqIC8vIFJlcG9ydCB0ZXN0IGV2aWRlbmNlXG4gKiBhd2FpdCByZXBvcnRlci5yZXBvcnRBdHRhY2htZW50KCdTY3JlZW5zaG90Jywgc2NyZWVuc2hvdEJ1ZmZlcik7XG4gKiBgYGBcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBUZXN0UmVwb3J0ZXJcbiAqICAgcGFydGljaXBhbnQgRmlsZVN5c3RlbVxuICogICBwYXJ0aWNpcGFudCBEZXBlbmRlbmNpZXNcbiAqXG4gKiAgIENsaWVudC0+PlRlc3RSZXBvcnRlcjogbmV3IFRlc3RSZXBvcnRlcih0ZXN0Q2FzZSwgYmFzZVBhdGgpXG4gKiAgIFRlc3RSZXBvcnRlci0+PkZpbGVTeXN0ZW06IENyZWF0ZSByZXBvcnQgZGlyZWN0b3J5XG4gKlxuICogICBhbHQgUmVwb3J0IE1lc3NhZ2VcbiAqICAgICBDbGllbnQtPj5UZXN0UmVwb3J0ZXI6IHJlcG9ydE1lc3NhZ2UodGl0bGUsIG1lc3NhZ2UpXG4gKiAgICAgVGVzdFJlcG9ydGVyLT4+RGVwZW5kZW5jaWVzOiBJbXBvcnQgaGVscGVyc1xuICogICAgIFRlc3RSZXBvcnRlci0+PkZpbGVTeXN0ZW06IFN0b3JlIG1lc3NhZ2VcbiAqICAgZWxzZSBSZXBvcnQgRGF0YVxuICogICAgIENsaWVudC0+PlRlc3RSZXBvcnRlcjogcmVwb3J0RGF0YShyZWZlcmVuY2UsIGRhdGEsIHR5cGUpXG4gKiAgICAgVGVzdFJlcG9ydGVyLT4+RGVwZW5kZW5jaWVzOiBQcm9jZXNzIGRhdGFcbiAqICAgICBUZXN0UmVwb3J0ZXItPj5GaWxlU3lzdGVtOiBTdG9yZSBmb3JtYXR0ZWQgZGF0YVxuICogICBlbHNlIFJlcG9ydCBUYWJsZVxuICogICAgIENsaWVudC0+PlRlc3RSZXBvcnRlcjogcmVwb3J0VGFibGUocmVmZXJlbmNlLCB0YWJsZURlZilcbiAqICAgICBUZXN0UmVwb3J0ZXItPj5EZXBlbmRlbmNpZXM6IENvbnZlcnQgdG8gTUQgZm9ybWF0XG4gKiAgICAgVGVzdFJlcG9ydGVyLT4+RmlsZVN5c3RlbTogU3RvcmUgdGFibGVcbiAqICAgZW5kXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXN0UmVwb3J0ZXIge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZ1bmN0aW9uIGZvciBhZGRpbmcgbWVzc2FnZXMgdG8gdGhlIHRlc3QgcmVwb3J0XG4gICAqIEBzdW1tYXJ5IFN0YXRpYyBoYW5kbGVyIGZvciBwcm9jZXNzaW5nIGFuZCBzdG9yaW5nIHRlc3QgbWVzc2FnZXNcbiAgICogQHR5cGUge2Z1bmN0aW9uKEFkZE1zZ1BhcmFtcyk6IFByb21pc2U8dm9pZD59XG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIGFkZE1zZ0Z1bmN0aW9uOiAocGFyYW1zOiBBZGRNc2dQYXJhbXMpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiBmb3IgYWRkaW5nIGF0dGFjaG1lbnRzIHRvIHRoZSB0ZXN0IHJlcG9ydFxuICAgKiBAc3VtbWFyeSBTdGF0aWMgaGFuZGxlciBmb3IgcHJvY2Vzc2luZyBhbmQgc3RvcmluZyB0ZXN0IGF0dGFjaG1lbnRzXG4gICAqIEB0eXBlIHtmdW5jdGlvbihBZGRBdHRhY2hQYXJhbXMpOiBQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyBhZGRBdHRhY2hGdW5jdGlvbjogKFxuICAgIHBhcmFtczogQWRkQXR0YWNoUGFyYW1zXG4gICkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIE1hcCBvZiBkZXBlbmRlbmNpZXMgcmVxdWlyZWQgYnkgdGhlIHJlcG9ydGVyXG4gICAqIEBzdW1tYXJ5IFN0b3JlcyB0aGUgY3VycmVudCBzdGF0ZSBvZiBkZXBlbmRlbmNpZXNcbiAgICogQHR5cGUge1NpbXBsZURlcGVuZGVuY3lNYXB9XG4gICAqL1xuICBwcml2YXRlIGRlcHM/OiBTaW1wbGVEZXBlbmRlbmN5TWFwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0ZXN0Q2FzZTogc3RyaW5nID0gXCJ0ZXN0c1wiLFxuICAgIHByb3RlY3RlZCBiYXNlUGF0aCA9IHBhdGguam9pbihcbiAgICAgIHByb2Nlc3MuY3dkKCksXG4gICAgICBcIndvcmtkb2NzXCIsXG4gICAgICBcInJlcG9ydHNcIixcbiAgICAgIFwiZXZpZGVuY2VzXCJcbiAgICApXG4gICkge1xuICAgIHRoaXMuYmFzZVBhdGggPSBwYXRoLmpvaW4oYmFzZVBhdGgsIHRoaXMudGVzdENhc2UpO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLmJhc2VQYXRoKSkge1xuICAgICAgZnMubWtkaXJTeW5jKGJhc2VQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEltcG9ydHMgcmVxdWlyZWQgaGVscGVyIGZ1bmN0aW9uc1xuICAgKiBAc3VtbWFyeSBFbnN1cmVzIGFsbCBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzIGFyZSBhdmFpbGFibGUgYW5kIGltcG9ydHMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBoZWxwZXJzIGFyZSBpbXBvcnRlZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbXBvcnRIZWxwZXJzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZGVwcyA9IGF3YWl0IGluc3RhbGxJZk5vdEF2YWlsYWJsZShbZGVwZW5kZW5jaWVzWzBdXSwgdGhpcy5kZXBzKTtcbiAgICAvLyBpZiAoIXByb2Nlc3MuZW52W0plc3RSZXBvcnRlcnNUZW1wUGF0aEVudktleV0pXG4gICAgLy8gICBwcm9jZXNzLmVudltKZXN0UmVwb3J0ZXJzVGVtcFBhdGhFbnZLZXldID0gJy4vd29ya2RvY3MvcmVwb3J0cyc7XG4gICAgY29uc3QgeyBhZGRNc2csIGFkZEF0dGFjaCB9ID0gYXdhaXQgbm9ybWFsaXplSW1wb3J0KFxuICAgICAgaW1wb3J0KGAke2RlcGVuZGVuY2llc1swXX0vaGVscGVyYClcbiAgICApO1xuICAgIFRlc3RSZXBvcnRlci5hZGRNc2dGdW5jdGlvbiA9IGFkZE1zZztcbiAgICBUZXN0UmVwb3J0ZXIuYWRkQXR0YWNoRnVuY3Rpb24gPSBhZGRBdHRhY2g7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcG9ydHMgYSBtZXNzYWdlIHRvIHRoZSB0ZXN0IHJlcG9ydFxuICAgKiBAc3VtbWFyeSBBZGRzIGEgZm9ybWF0dGVkIG1lc3NhZ2UgdG8gdGhlIHRlc3QgcmVwb3J0IHdpdGggYW4gb3B0aW9uYWwgdGl0bGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gVGl0bGUgb2YgdGhlIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBvYmplY3R9IG1lc3NhZ2UgLSBDb250ZW50IG9mIHRoZSBtZXNzYWdlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBtZXNzYWdlIGlzIHJlcG9ydGVkXG4gICAqL1xuICBhc3luYyByZXBvcnRNZXNzYWdlKHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyB8IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghVGVzdFJlcG9ydGVyLmFkZE1zZ0Z1bmN0aW9uKSBhd2FpdCB0aGlzLmltcG9ydEhlbHBlcnMoKTtcbiAgICBjb25zdCBtc2cgPSBgJHt0aXRsZX0ke21lc3NhZ2UgPyBgXFxuJHttZXNzYWdlfWAgOiBcIlwifWA7XG4gICAgYXdhaXQgVGVzdFJlcG9ydGVyLmFkZE1zZ0Z1bmN0aW9uKHsgbWVzc2FnZTogbXNnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBvcnRzIGFuIGF0dGFjaG1lbnQgdG8gdGhlIHRlc3QgcmVwb3J0XG4gICAqIEBzdW1tYXJ5IEFkZHMgYSBmb3JtYXR0ZWQgbWVzc2FnZSB0byB0aGUgdGVzdCByZXBvcnQgd2l0aCBhbiBvcHRpb25hbCB0aXRsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSBUaXRsZSBvZiB0aGUgbWVzc2FnZVxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEJ1ZmZlcn0gYXR0YWNobWVudCAtIENvbnRlbnQgb2YgdGhlIG1lc3NhZ2VcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG1lc3NhZ2UgaXMgcmVwb3J0ZWRcbiAgICovXG4gIGFzeW5jIHJlcG9ydEF0dGFjaG1lbnQoXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICBhdHRhY2htZW50OiBzdHJpbmcgfCBCdWZmZXJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFUZXN0UmVwb3J0ZXIuYWRkQXR0YWNoRnVuY3Rpb24pIGF3YWl0IHRoaXMuaW1wb3J0SGVscGVycygpO1xuICAgIGF3YWl0IFRlc3RSZXBvcnRlci5hZGRBdHRhY2hGdW5jdGlvbih7XG4gICAgICBhdHRhY2g6IGF0dGFjaG1lbnQsXG4gICAgICBkZXNjcmlwdGlvbjogdGl0bGUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcG9ydHMgZGF0YSB3aXRoIHNwZWNpZmllZCB0eXBlXG4gICAqIEBzdW1tYXJ5IFByb2Nlc3NlcyBhbmQgc3RvcmVzIGRhdGEgaW4gdGhlIHRlc3QgcmVwb3J0IHdpdGggZm9ybWF0dGluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmZXJlbmNlIC0gUmVmZXJlbmNlIGlkZW50aWZpZXIgZm9yIHRoZSBkYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgb2JqZWN0fSBkYXRhIC0gRGF0YSB0byBiZSByZXBvcnRlZFxuICAgKiBAcGFyYW0ge1BheWxvYWRUeXBlfSB0eXBlIC0gVHlwZSBvZiB0aGUgcGF5bG9hZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0cmltPWZhbHNlXSAtIFdoZXRoZXIgdG8gdHJpbSB0aGUgZGF0YVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBkYXRhIGlzIHJlcG9ydGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgcmVwb3J0KFxuICAgIHJlZmVyZW5jZTogc3RyaW5nLFxuICAgIGRhdGE6IHN0cmluZyB8IG51bWJlciB8IG9iamVjdCB8IEJ1ZmZlcixcbiAgICB0eXBlOiBQYXlsb2FkVHlwZSxcbiAgICB0cmltOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBhdHRhY2hGdW5jdGlvbjpcbiAgICAgICAgfCB0eXBlb2YgdGhpcy5yZXBvcnRNZXNzYWdlXG4gICAgICAgIHwgdHlwZW9mIHRoaXMucmVwb3J0QXR0YWNobWVudCA9IHRoaXMucmVwb3J0TWVzc2FnZS5iaW5kKHRoaXMpO1xuICAgICAgbGV0IGV4dGVuc2lvbjogXCIucG5nXCIgfCBcIi50eHRcIiB8IFwiLm1kXCIgfCBcIi5qc29uXCIgPSBcIi50eHRcIjtcblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJpbWFnZVwiOlxuICAgICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhIGFzIEJ1ZmZlcik7XG4gICAgICAgICAgZXh0ZW5zaW9uID0gXCIucG5nXCI7XG4gICAgICAgICAgYXR0YWNoRnVuY3Rpb24gPSB0aGlzLnJlcG9ydEF0dGFjaG1lbnQuYmluZCh0aGlzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImpzb25cIjpcbiAgICAgICAgICBpZiAodHJpbSkge1xuICAgICAgICAgICAgaWYgKChkYXRhIGFzIHsgcmVxdWVzdD86IHVua25vd24gfSkucmVxdWVzdClcbiAgICAgICAgICAgICAgZGVsZXRlIChkYXRhIGFzIHsgcmVxdWVzdD86IHVua25vd24gfSlbXCJyZXF1ZXN0XCJdO1xuICAgICAgICAgICAgaWYgKChkYXRhIGFzIHsgY29uZmlnPzogdW5rbm93biB9KS5jb25maWcpXG4gICAgICAgICAgICAgIGRlbGV0ZSAoZGF0YSBhcyB7IGNvbmZpZz86IHVua25vd24gfSlbXCJjb25maWdcIl07XG4gICAgICAgICAgfVxuICAgICAgICAgIGRhdGEgPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKTtcbiAgICAgICAgICBleHRlbnNpb24gPSBcIi5qc29uXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtZFwiOlxuICAgICAgICAgIGV4dGVuc2lvbiA9IFwiLm1kXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgICAgZXh0ZW5zaW9uID0gXCIudHh0XCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS5sb2coYFVuc3VwcG9ydGVkIHR5cGUgJHt0eXBlfS4gYXNzdW1pbmcgdGV4dGApO1xuICAgICAgfVxuICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlLmluY2x1ZGVzKFwiXFxuXCIpXG4gICAgICAgID8gcmVmZXJlbmNlXG4gICAgICAgIDogYCR7cmVmZXJlbmNlfSR7ZXh0ZW5zaW9ufWA7XG4gICAgICBhd2FpdCBhdHRhY2hGdW5jdGlvbihyZWZlcmVuY2UsIGRhdGEgYXMgQnVmZmVyIHwgc3RyaW5nKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3Qgc3RvcmUgYXR0YWNoIGFydGlmYWN0ICR7cmVmZXJlbmNlfSB1bmRlciB0byB0ZXN0IHJlcG9ydCAke3RoaXMudGVzdENhc2V9IC0gJHtlfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVwb3J0RGF0YShcbiAgICByZWZlcmVuY2U6IHN0cmluZyxcbiAgICBkYXRhOiBzdHJpbmcgfCBudW1iZXIgfCBvYmplY3QsXG4gICAgdHlwZTogUGF5bG9hZFR5cGUgPSBcImpzb25cIixcbiAgICB0cmltID0gZmFsc2VcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMucmVwb3J0KHJlZmVyZW5jZSwgZGF0YSwgdHlwZSwgdHJpbSk7XG4gIH1cblxuICBhc3luYyByZXBvcnRPYmplY3QocmVmZXJlbmNlOiBzdHJpbmcsIGpzb246IG9iamVjdCwgdHJpbSA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMucmVwb3J0KHJlZmVyZW5jZSwganNvbiwgXCJqc29uXCIsIHRyaW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBvcnRzIGEgdGFibGUgaW4gbWFya2Rvd24gZm9ybWF0XG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIGFuZCBzdG9yZXMgYSB0YWJsZSBkZWZpbml0aW9uIGluIG1hcmtkb3duIGZvcm1hdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmZXJlbmNlIC0gUmVmZXJlbmNlIGlkZW50aWZpZXIgZm9yIHRoZSB0YWJsZVxuICAgKiBAcGFyYW0ge01kVGFibGVEZWZpbml0aW9ufSB0YWJsZURlZiAtIFRhYmxlIGRlZmluaXRpb24gb2JqZWN0XG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRhYmxlIGlzIHJlcG9ydGVkXG4gICAqL1xuICBhc3luYyByZXBvcnRUYWJsZShyZWZlcmVuY2U6IHN0cmluZywgdGFibGVEZWY6IE1kVGFibGVEZWZpbml0aW9uKSB7XG4gICAgdGhpcy5kZXBzID0gYXdhaXQgaW5zdGFsbElmTm90QXZhaWxhYmxlKFtkZXBlbmRlbmNpZXNbMV1dLCB0aGlzLmRlcHMpO1xuICAgIGxldCB0eHQ6IHN0cmluZztcbiAgICB0cnkge1xuICAgICAgY29uc3QganNvbjJtZCA9IGF3YWl0IG5vcm1hbGl6ZUltcG9ydChpbXBvcnQoYCR7ZGVwZW5kZW5jaWVzWzFdfWApKTtcbiAgICAgIHR4dCA9IGpzb24ybWQodGFibGVEZWYpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGNvbnZlcnQgSlNPTiB0byBNYXJrZG93biAtICR7ZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXBvcnQocmVmZXJlbmNlLCB0eHQsIFwibWRcIik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcG9ydHMgYSBncmFwaCB1c2luZyBDaGFydC5qc1xuICAgKiBAc3VtbWFyeSBHZW5lcmF0ZXMgYW5kIHN0b3JlcyBhIGdyYXBoIHZpc3VhbGl6YXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZmVyZW5jZSAtIFJlZmVyZW5jZSBpZGVudGlmaWVyIGZvciB0aGUgZ3JhcGhcbiAgICogQHBhcmFtIHthbnl9IGNvbmZpZyAtIENoYXJ0LmpzIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGdyYXBoIGlzIHJlcG9ydGVkXG4gICAqL1xuICBhc3luYyByZXBvcnRHcmFwaChyZWZlcmVuY2U6IHN0cmluZywgY29uZmlnOiBhbnkpIHtcbiAgICB0aGlzLmRlcHMgPSBhd2FpdCBpbnN0YWxsSWZOb3RBdmFpbGFibGUoW2RlcGVuZGVuY2llc1syXV0sIHRoaXMuZGVwcyk7XG4gICAgY29uc3QgeyBDaGFydEpTTm9kZUNhbnZhcyB9ID0gYXdhaXQgbm9ybWFsaXplSW1wb3J0KFxuICAgICAgaW1wb3J0KGRlcGVuZGVuY2llc1syXSlcbiAgICApO1xuXG4gICAgY29uc3Qgd2lkdGggPSA2MDA7IC8vcHhcbiAgICBjb25zdCBoZWlnaHQgPSA4MDA7IC8vcHhcbiAgICBjb25zdCBiYWNrZ3JvdW5kQ29sb3VyID0gXCJ3aGl0ZVwiOyAvLyBVc2VzIGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vdGFncy9jYW52YXNfZmlsbHN0eWxlLmFzcFxuICAgIGNvbnN0IGNoYXJ0SlNOb2RlQ2FudmFzID0gbmV3IENoYXJ0SlNOb2RlQ2FudmFzKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgYmFja2dyb3VuZENvbG91cixcbiAgICB9KTtcblxuICAgIGNvbnN0IGltYWdlID0gYXdhaXQgY2hhcnRKU05vZGVDYW52YXMucmVuZGVyVG9CdWZmZXIoY29uZmlnKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXBvcnRJbWFnZShyZWZlcmVuY2UsIGltYWdlKTtcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcG9ydHMgYW4gaW1hZ2UgdG8gdGhlIHRlc3QgcmVwb3J0XG4gICAqIEBzdW1tYXJ5IFN0b3JlcyBhbiBpbWFnZSBidWZmZXIgaW4gdGhlIHRlc3QgcmVwb3J0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZlcmVuY2UgLSBSZWZlcmVuY2UgaWRlbnRpZmllciBmb3IgdGhlIGltYWdlXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgLSBJbWFnZSBkYXRhIGJ1ZmZlclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBpbWFnZSBpcyByZXBvcnRlZFxuICAgKi9cbiAgYXN5bmMgcmVwb3J0SW1hZ2UocmVmZXJlbmNlOiBzdHJpbmcsIGJ1ZmZlcjogQnVmZmVyKSB7XG4gICAgcmV0dXJuIHRoaXMucmVwb3J0KHJlZmVyZW5jZSwgYnVmZmVyLCBcImltYWdlXCIpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.padEnd = padEnd;
4
+ exports.patchPlaceholders = patchPlaceholders;
5
+ exports.patchString = patchString;
6
+ exports.toCamelCase = toCamelCase;
7
+ exports.toENVFormat = toENVFormat;
8
+ exports.toSnakeCase = toSnakeCase;
9
+ exports.toKebabCase = toKebabCase;
10
+ exports.toPascalCase = toPascalCase;
11
+ exports.escapeRegExp = escapeRegExp;
12
+ /**
13
+ * @description Pads the end of a string with a specified character.
14
+ * @summary Extends the input string to a specified length by adding a padding character to the end.
15
+ * If the input string is already longer than the specified length, it is returned unchanged.
16
+ *
17
+ * @param {string} str - The input string to be padded.
18
+ * @param {number} length - The desired total length of the resulting string.
19
+ * @param {string} [char=" "] - The character to use for padding. Defaults to a space.
20
+ * @return {string} The padded string.
21
+ * @throws {Error} If the padding character is not exactly one character long.
22
+ *
23
+ * @function padEnd
24
+ *
25
+ * @memberOf module:TextUtils
26
+ */
27
+ function padEnd(str, length, char = " ") {
28
+ if (char.length !== 1)
29
+ throw new Error("Invalid character length for padding. must be one!");
30
+ return str.padEnd(length, char);
31
+ }
32
+ /**
33
+ * @description Replaces placeholders in a string with provided values.
34
+ * @summary Interpolates a string by replacing placeholders of the form ${variableName}
35
+ * with corresponding values from the provided object. If a placeholder doesn't have
36
+ * a corresponding value, it is left unchanged in the string.
37
+ *
38
+ * @param {string} input - The input string containing placeholders to be replaced.
39
+ * @param {Record<string, number | string>} values - An object containing key-value pairs for replacement.
40
+ * @return {string} The interpolated string with placeholders replaced by their corresponding values.
41
+ *
42
+ * @function patchPlaceholders
43
+ *
44
+ * @mermaid
45
+ * sequenceDiagram
46
+ * participant Caller
47
+ * participant patchString
48
+ * participant String.replace
49
+ * Caller->>patchString: Call with input and values
50
+ * patchString->>String.replace: Call with regex and replacement function
51
+ * String.replace->>patchString: Return replaced string
52
+ * patchString-->>Caller: Return patched string
53
+ *
54
+ * @memberOf module:TextUtils
55
+ */
56
+ function patchPlaceholders(input, values) {
57
+ return input.replace(/\$\{([a-zA-Z0-9_]+)\}/g, (match, variable) => values[variable] || match);
58
+ }
59
+ function patchString(input, values, flags = "g") {
60
+ Object.entries(values).forEach(([key, val]) => {
61
+ const regexp = new RegExp(escapeRegExp(key), flags);
62
+ input = input.replace(regexp, val);
63
+ });
64
+ return input;
65
+ }
66
+ /**
67
+ * @description Converts a string to camelCase.
68
+ * @summary Transforms the input string into camelCase format, where words are joined without spaces
69
+ * and each word after the first starts with a capital letter.
70
+ *
71
+ * @param {string} text - The input string to be converted.
72
+ * @return {string} The input string converted to camelCase.
73
+ *
74
+ * @function toCamelCase
75
+ *
76
+ * @memberOf module:TextUtils
77
+ */
78
+ function toCamelCase(text) {
79
+ return text
80
+ .replace(/(?:^\w|[A-Z]|\b\w)/g, (word, index) => index === 0 ? word.toLowerCase() : word.toUpperCase())
81
+ .replace(/\s+/g, "");
82
+ }
83
+ /**
84
+ * @description Converts a string to ENVIRONMENT_VARIABLE format.
85
+ * @summary Transforms the input string into uppercase with words separated by underscores,
86
+ * typically used for environment variable names.
87
+ *
88
+ * @param {string} text - The input string to be converted.
89
+ * @return {string} The input string converted to ENVIRONMENT_VARIABLE format.
90
+ *
91
+ * @function toENVFormat
92
+ *
93
+ * @memberOf module:TextUtils
94
+ */
95
+ function toENVFormat(text) {
96
+ return toSnakeCase(text).toUpperCase();
97
+ }
98
+ /**
99
+ * @description Converts a string to snake_case.
100
+ * @summary Transforms the input string into lowercase with words separated by underscores.
101
+ *
102
+ * @param {string} text - The input string to be converted.
103
+ * @return {string} The input string converted to snake_case.
104
+ *
105
+ * @function toSnakeCase
106
+ *
107
+ * @memberOf module:TextUtils
108
+ */
109
+ function toSnakeCase(text) {
110
+ return text
111
+ .replace(/([a-z])([A-Z])/g, "$1_$2")
112
+ .replace(/[\s-]+/g, "_")
113
+ .toLowerCase();
114
+ }
115
+ /**
116
+ * @description Converts a string to kebab-case.
117
+ * @summary Transforms the input string into lowercase with words separated by hyphens.
118
+ *
119
+ * @param {string} text - The input string to be converted.
120
+ * @return {string} The input string converted to kebab-case.
121
+ *
122
+ * @function toKebabCase
123
+ *
124
+ * @memberOf module:TextUtils
125
+ */
126
+ function toKebabCase(text) {
127
+ return text
128
+ .replace(/([a-z])([A-Z])/g, "$1-$2")
129
+ .replace(/[\s_]+/g, "-")
130
+ .toLowerCase();
131
+ }
132
+ /**
133
+ * @description Converts a string to PascalCase.
134
+ * @summary Transforms the input string into PascalCase format, where words are joined without spaces
135
+ * and each word starts with a capital letter.
136
+ *
137
+ * @param {string} text - The input string to be converted.
138
+ * @return {string} The input string converted to PascalCase.
139
+ *
140
+ * @function toPascalCase
141
+ *
142
+ * @memberOf module:TextUtils
143
+ */
144
+ function toPascalCase(text) {
145
+ return text
146
+ .replace(/(?:^\w|[A-Z]|\b\w)/g, (word) => word.toUpperCase())
147
+ .replace(/\s+/g, "");
148
+ }
149
+ function escapeRegExp(string) {
150
+ return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
151
+ }
152
+
153
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,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QUUsRUFBRSxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUVELFNBQWdCLFlBQVksQ0FBQyxNQUFjO0lBQ3pDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLG9DQUFvQztBQUM1RixDQUFDIiwiZmlsZSI6InV0aWxzL3RleHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXNjcmlwdGlvbiBQYWRzIHRoZSBlbmQgb2YgYSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBjaGFyYWN0ZXIuXG4gKiBAc3VtbWFyeSBFeHRlbmRzIHRoZSBpbnB1dCBzdHJpbmcgdG8gYSBzcGVjaWZpZWQgbGVuZ3RoIGJ5IGFkZGluZyBhIHBhZGRpbmcgY2hhcmFjdGVyIHRvIHRoZSBlbmQuXG4gKiBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIGFscmVhZHkgbG9uZ2VyIHRoYW4gdGhlIHNwZWNpZmllZCBsZW5ndGgsIGl0IGlzIHJldHVybmVkIHVuY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIGlucHV0IHN0cmluZyB0byBiZSBwYWRkZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoIC0gVGhlIGRlc2lyZWQgdG90YWwgbGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjaGFyPVwiIFwiXSAtIFRoZSBjaGFyYWN0ZXIgdG8gdXNlIGZvciBwYWRkaW5nLiBEZWZhdWx0cyB0byBhIHNwYWNlLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgcGFkZGVkIHN0cmluZy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcGFkZGluZyBjaGFyYWN0ZXIgaXMgbm90IGV4YWN0bHkgb25lIGNoYXJhY3RlciBsb25nLlxuICpcbiAqIEBmdW5jdGlvbiBwYWRFbmRcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlRleHRVdGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFkRW5kKFxuICBzdHI6IHN0cmluZyxcbiAgbGVuZ3RoOiBudW1iZXIsXG4gIGNoYXI6IHN0cmluZyA9IFwiIFwiXG4pOiBzdHJpbmcge1xuICBpZiAoY2hhci5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjaGFyYWN0ZXIgbGVuZ3RoIGZvciBwYWRkaW5nLiBtdXN0IGJlIG9uZSFcIik7XG4gIHJldHVybiBzdHIucGFkRW5kKGxlbmd0aCwgY2hhcik7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlcGxhY2VzIHBsYWNlaG9sZGVycyBpbiBhIHN0cmluZyB3aXRoIHByb3ZpZGVkIHZhbHVlcy5cbiAqIEBzdW1tYXJ5IEludGVycG9sYXRlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgcGxhY2Vob2xkZXJzIG9mIHRoZSBmb3JtICR7dmFyaWFibGVOYW1lfVxuICogd2l0aCBjb3JyZXNwb25kaW5nIHZhbHVlcyBmcm9tIHRoZSBwcm92aWRlZCBvYmplY3QuIElmIGEgcGxhY2Vob2xkZXIgZG9lc24ndCBoYXZlXG4gKiBhIGNvcnJlc3BvbmRpbmcgdmFsdWUsIGl0IGlzIGxlZnQgdW5jaGFuZ2VkIGluIHRoZSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IC0gVGhlIGlucHV0IHN0cmluZyBjb250YWluaW5nIHBsYWNlaG9sZGVycyB0byBiZSByZXBsYWNlZC5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPn0gdmFsdWVzIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciByZXBsYWNlbWVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGludGVycG9sYXRlZCBzdHJpbmcgd2l0aCBwbGFjZWhvbGRlcnMgcmVwbGFjZWQgYnkgdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gKlxuICogQGZ1bmN0aW9uIHBhdGNoUGxhY2Vob2xkZXJzXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgcGF0Y2hTdHJpbmdcbiAqICAgcGFydGljaXBhbnQgU3RyaW5nLnJlcGxhY2VcbiAqICAgQ2FsbGVyLT4+cGF0Y2hTdHJpbmc6IENhbGwgd2l0aCBpbnB1dCBhbmQgdmFsdWVzXG4gKiAgIHBhdGNoU3RyaW5nLT4+U3RyaW5nLnJlcGxhY2U6IENhbGwgd2l0aCByZWdleCBhbmQgcmVwbGFjZW1lbnQgZnVuY3Rpb25cbiAqICAgU3RyaW5nLnJlcGxhY2UtPj5wYXRjaFN0cmluZzogUmV0dXJuIHJlcGxhY2VkIHN0cmluZ1xuICogICBwYXRjaFN0cmluZy0tPj5DYWxsZXI6IFJldHVybiBwYXRjaGVkIHN0cmluZ1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6VGV4dFV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaFBsYWNlaG9sZGVycyhcbiAgaW5wdXQ6IHN0cmluZyxcbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+XG4pOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQucmVwbGFjZShcbiAgICAvXFwkXFx7KFthLXpBLVowLTlfXSspXFx9L2csXG4gICAgKG1hdGNoLCB2YXJpYWJsZSkgPT4gKHZhbHVlc1t2YXJpYWJsZSBhcyBzdHJpbmddIGFzIHN0cmluZykgfHwgbWF0Y2hcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoU3RyaW5nKFxuICBpbnB1dDogc3RyaW5nLFxuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz4sXG4gIGZsYWdzOiBzdHJpbmcgPSBcImdcIlxuKTogc3RyaW5nIHtcbiAgT2JqZWN0LmVudHJpZXModmFsdWVzKS5mb3JFYWNoKChba2V5LCB2YWxdKSA9PiB7XG4gICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAoa2V5KSwgZmxhZ3MpO1xuICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShyZWdleHAsIHZhbCBhcyBzdHJpbmcpO1xuICB9KTtcbiAgcmV0dXJuIGlucHV0O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBhIHN0cmluZyB0byBjYW1lbENhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBjYW1lbENhc2UgZm9ybWF0LCB3aGVyZSB3b3JkcyBhcmUgam9pbmVkIHdpdGhvdXQgc3BhY2VzXG4gKiBhbmQgZWFjaCB3b3JkIGFmdGVyIHRoZSBmaXJzdCBzdGFydHMgd2l0aCBhIGNhcGl0YWwgbGV0dGVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIGlucHV0IHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnB1dCBzdHJpbmcgY29udmVydGVkIHRvIGNhbWVsQ2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9DYW1lbENhc2VcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlRleHRVdGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9DYW1lbENhc2UodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHRcbiAgICAucmVwbGFjZSgvKD86Xlxcd3xbQS1aXXxcXGJcXHcpL2csICh3b3JkLCBpbmRleCkgPT5cbiAgICAgIGluZGV4ID09PSAwID8gd29yZC50b0xvd2VyQ2FzZSgpIDogd29yZC50b1VwcGVyQ2FzZSgpXG4gICAgKVxuICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBhIHN0cmluZyB0byBFTlZJUk9OTUVOVF9WQVJJQUJMRSBmb3JtYXQuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byB1cHBlcmNhc2Ugd2l0aCB3b3JkcyBzZXBhcmF0ZWQgYnkgdW5kZXJzY29yZXMsXG4gKiB0eXBpY2FsbHkgdXNlZCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHN0cmluZyBjb252ZXJ0ZWQgdG8gRU5WSVJPTk1FTlRfVkFSSUFCTEUgZm9ybWF0LlxuICpcbiAqIEBmdW5jdGlvbiB0b0VOVkZvcm1hdFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6VGV4dFV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0VOVkZvcm1hdCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9TbmFrZUNhc2UodGV4dCkudG9VcHBlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBzdHJpbmcgdG8gc25ha2VfY2FzZS5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIGxvd2VyY2FzZSB3aXRoIHdvcmRzIHNlcGFyYXRlZCBieSB1bmRlcnNjb3Jlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBzbmFrZV9jYXNlLlxuICpcbiAqIEBmdW5jdGlvbiB0b1NuYWtlQ2FzZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6VGV4dFV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1NuYWtlQ2FzZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCBcIiQxXyQyXCIpXG4gICAgLnJlcGxhY2UoL1tcXHMtXSsvZywgXCJfXCIpXG4gICAgLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIGtlYmFiLWNhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBsb3dlcmNhc2Ugd2l0aCB3b3JkcyBzZXBhcmF0ZWQgYnkgaHlwaGVucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBrZWJhYi1jYXNlLlxuICpcbiAqIEBmdW5jdGlvbiB0b0tlYmFiQ2FzZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6VGV4dFV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0tlYmFiQ2FzZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCBcIiQxLSQyXCIpXG4gICAgLnJlcGxhY2UoL1tcXHNfXSsvZywgXCItXCIpXG4gICAgLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIFBhc2NhbENhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBQYXNjYWxDYXNlIGZvcm1hdCwgd2hlcmUgd29yZHMgYXJlIGpvaW5lZCB3aXRob3V0IHNwYWNlc1xuICogYW5kIGVhY2ggd29yZCBzdGFydHMgd2l0aCBhIGNhcGl0YWwgbGV0dGVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIGlucHV0IHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnB1dCBzdHJpbmcgY29udmVydGVkIHRvIFBhc2NhbENhc2UuXG4gKlxuICogQGZ1bmN0aW9uIHRvUGFzY2FsQ2FzZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6VGV4dFV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Bhc2NhbENhc2UodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHRcbiAgICAucmVwbGFjZSgvKD86Xlxcd3xbQS1aXXxcXGJcXHcpL2csICh3b3JkKSA9PiB3b3JkLnRvVXBwZXJDYXNlKCkpXG4gICAgLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyaW5nOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIik7IC8vICQmIG1lYW5zIHRoZSB3aG9sZSBtYXRjaGVkIHN0cmluZ1xufVxuIl19
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.awaitTimeout = awaitTimeout;
4
+ async function awaitTimeout(ms) {
5
+ return new Promise((resolve) => setTimeout(resolve, ms));
6
+ }
7
+
8
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91dGlscy90aW1lb3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsb0NBRUM7QUFGTSxLQUFLLFVBQVUsWUFBWSxDQUFDLEVBQVU7SUFDM0MsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNELENBQUMiLCJmaWxlIjoidXRpbHMvdGltZW91dC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBhc3luYyBmdW5jdGlvbiBhd2FpdFRpbWVvdXQobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cbiJdfQ==
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy91dGlscy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6InV0aWxzL3R5cGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hpbGRQcm9jZXNzV2l0aG91dE51bGxTdHJlYW1zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSBcIi4vZW52aXJvbm1lbnRcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmaW5lcyB0aGUgc3RydWN0dXJlIGZvciBwcm9taXNlIHJlc29sdXRpb24gYW5kIHJlamVjdGlvbi5cbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIG1ldGhvZHMgdG8gcmVzb2x2ZSBvciByZWplY3QgYSBwcm9taXNlLlxuICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAdGVtcGxhdGUgRSAtIFRoZSB0eXBlIG9mIHRoZSBlcnJvciB2YWx1ZSwgZGVmYXVsdGluZyB0byBFcnJvci5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IFByb21pc2VFeGVjdXRvclxuICogQHByb3BlcnR5IHtmdW5jdGlvbihSKTogdm9pZH0gcmVzb2x2ZSAtIEZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIHByb21pc2UuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKEUpOiB2b2lkfSByZWplY3QgLSBGdW5jdGlvbiB0byByZWplY3QgdGhlIHByb21pc2UuXG4gKiBAbWVtYmVyT2YgQGRlY2FmLXRzL3V0aWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvbWlzZUV4ZWN1dG9yPFIsIEUgPSBFcnJvcj4ge1xuICByZXNvbHZlOiAodmFsdWU6IFIgfCBQcm9taXNlTGlrZTxSPikgPT4gdm9pZDtcbiAgcmVqZWN0OiAoZXJyb3I6IEUpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiBhIGNvbW1hbmQgZXhlY3V0aW9uLlxuICogQHN1bW1hcnkgRXh0ZW5kcyBQcm9taXNlIHdpdGggYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHJlbGF0ZWQgdG8gdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICogVGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSBjb21wcmVoZW5zaXZlIHdheSB0byBoYW5kbGUgYW5kIGludGVyYWN0IHdpdGggdGhlIHJlc3VsdHNcbiAqIG9mIGFuIGFzeW5jaHJvbm91cyBjb21tYW5kIGV4ZWN1dGlvbiwgaW5jbHVkaW5nIGFjY2VzcyB0byB0aGUgY29tbWFuZCBkZXRhaWxzLFxuICogb3V0cHV0IGxvZ3MsIGFuZCB0aGUgYWJpbGl0eSB0byBhYm9ydCB0aGUgZXhlY3V0aW9uLlxuICpcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHJlc29sdmVkIHZhbHVlLCBkZWZhdWx0aW5nIHRvIHZvaWQuXG4gKiBAaW50ZXJmYWNlIENvbW1hbmRSZXN1bHRcbiAqIEBleHRlbmRzIFByb21pc2U8Uj5cbiAqIEBtZW1iZXJPZiBAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kUmVzdWx0PFIgPSB2b2lkPiB7XG4gIHByb21pc2U6IFByb21pc2U8Uj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb250cm9sbGVyIHRvIGFib3J0IHRoZSBjb21tYW5kIGV4ZWN1dGlvbi5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgYSBtZWNoYW5pc20gdG8gY2FuY2VsIHRoZSBvbmdvaW5nIGNvbW1hbmQgZXhlY3V0aW9uLlxuICAgKi9cbiAgYWJvcnQ6IEFib3J0Q29udHJvbGxlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBleGVjdXRlZCBjb21tYW5kIHN0cmluZy5cbiAgICogQHN1bW1hcnkgQ29udGFpbnMgdGhlIGFjdHVhbCBjb21tYW5kIHRoYXQgd2FzIGV4ZWN1dGVkLlxuICAgKi9cbiAgY29tbWFuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGNoaWxkIHByb2Nlc3Mgb2JqZWN0LlxuICAgKiBAc3VtbWFyeSBSZXByZXNlbnRzIHRoZSBOb2RlLmpzIGNoaWxkIHByb2Nlc3MgdGhhdCB3YXMgc3Bhd25lZCB0byBleGVjdXRlIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgY21kPzogQ2hpbGRQcm9jZXNzV2l0aG91dE51bGxTdHJlYW1zO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXJyYXkgb2Ygc3Rkb3V0IGxvZ3MuXG4gICAqIEBzdW1tYXJ5IENvbnRhaW5zIGFsbCB0aGUgc3RhbmRhcmQgb3V0cHV0IG1lc3NhZ2VzIHByb2R1Y2VkIGR1cmluZyB0aGUgY29tbWFuZCBleGVjdXRpb24uXG4gICAqL1xuICBsb2dzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFycmF5IG9mIHN0ZGVyciBsb2dzLlxuICAgKiBAc3VtbWFyeSBDb250YWlucyBhbGwgdGhlIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2VzIHByb2R1Y2VkIGR1cmluZyB0aGUgY29tbWFuZCBleGVjdXRpb24uXG4gICAqL1xuICBlcnJzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIGFsbG93cyBjaGFpbmluZyBjb21tYW5kcy5cbiAgICogQHN1bW1hcnkgYWxsb3dzIGNoYWluaW5nIGNvbW1hbmRzIChvciBwaXBpbmcpLlxuICAgKi9cbiAgcGlwZTogPEU+KGNiOiAocjogUikgPT4gRSkgPT4gUHJvbWlzZTxFPjtcbn1cblxuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnRGYWN0b3J5PFQgZXh0ZW5kcyBvYmplY3QsIEUgZXh0ZW5kcyBFbnZpcm9ubWVudDxUPj4gPSAoXG4gIC4uLmFyZ3M6IHVua25vd25bXVxuKSA9PiBFO1xuXG5leHBvcnQgdHlwZSBEZXBlbmRlbmN5TWFwID0ge1xuICBwcm9kOiB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXTtcbiAgZGV2OiB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXTtcbiAgcGVlcjogeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W107XG59O1xuXG5leHBvcnQgdHlwZSBTaW1wbGVEZXBlbmRlbmN5TWFwID0ge1xuICBwcm9kPzogc3RyaW5nW107XG4gIGRldj86IHN0cmluZ1tdO1xuICBwZWVyPzogc3RyaW5nW107XG59O1xuIl19