@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,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9pbnB1dC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6ImlucHV0L3R5cGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBmb3IgYSBzaW5nbGUgY29tbWFuZC1saW5lIGFyZ3VtZW50IG9wdGlvbi5cbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHN0cnVjdHVyZSBhbmQgYmVoYXZpb3Igb2YgYSBjb21tYW5kLWxpbmUgb3B0aW9uLlxuICogQGludGVyZmFjZSBQYXJzZUFyZ3NPcHRpb25Db25maWdcbiAqIEBwcm9wZXJ0eSB7KFwic3RyaW5nXCIgfCBcImJvb2xlYW5cIil9IHR5cGUgLSBUaGUgZGF0YSB0eXBlIG9mIHRoZSBvcHRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFttdWx0aXBsZV0gLSBXaGV0aGVyIHRoZSBvcHRpb24gY2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2hvcnRdIC0gVGhlIHNob3J0IChzaW5nbGUtY2hhcmFjdGVyKSBhbGlhcyBmb3IgdGhlIG9wdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgYm9vbGVhbiB8IHN0cmluZ1tdIHwgYm9vbGVhbltdfSBbZGVmYXVsdF0gLSBUaGUgZGVmYXVsdCB2YWx1ZShzKSBmb3IgdGhlIG9wdGlvbi5cbiAqIEBtZW1iZXJPZiBAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZUFyZ3NPcHRpb25Db25maWcge1xuICB0eXBlOiBcInN0cmluZ1wiIHwgXCJib29sZWFuXCI7XG4gIG11bHRpcGxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgc2hvcnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRlZmF1bHQ/OiBzdHJpbmcgfCBib29sZWFuIHwgc3RyaW5nW10gfCBib29sZWFuW10gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbmZpZ3VyYXRpb24gZm9yIGFsbCBjb21tYW5kLWxpbmUgYXJndW1lbnQgb3B0aW9ucy5cbiAqIEBzdW1tYXJ5IEEgbWFwcGluZyBvZiBsb25nIG9wdGlvbiBuYW1lcyB0byB0aGVpciBjb25maWd1cmF0aW9ucy5cbiAqIEBpbnRlcmZhY2UgUGFyc2VBcmdzT3B0aW9uc0NvbmZpZ1xuICogQG1lbWJlck9mIEBkZWNhZi10cy91dGlsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlQXJnc09wdGlvbnNDb25maWcge1xuICBbbG9uZ09wdGlvbjogc3RyaW5nXTogUGFyc2VBcmdzT3B0aW9uQ29uZmlnO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXByZXNlbnRzIGEgcGFyc2VkIGNvbW1hbmQtbGluZSBvcHRpb24gdG9rZW4uXG4gKiBAc3VtbWFyeSBDYW4gYmUgZWl0aGVyIGFuIG9wdGlvbiB3aXRoIGEgdmFsdWUgb3IgYW4gb3B0aW9uIHdpdGhvdXQgYSB2YWx1ZS5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IE9wdGlvblRva2VuXG4gKiBAbWVtYmVyT2YgQGRlY2FmLXRzL3V0aWxzXG4gKi9cbmV4cG9ydCB0eXBlIE9wdGlvblRva2VuID1cbiAgfCB7XG4gICAgICBraW5kOiBcIm9wdGlvblwiO1xuICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIHJhd05hbWU6IHN0cmluZztcbiAgICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgICBpbmxpbmVWYWx1ZTogYm9vbGVhbjtcbiAgICB9XG4gIHwge1xuICAgICAga2luZDogXCJvcHRpb25cIjtcbiAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICByYXdOYW1lOiBzdHJpbmc7XG4gICAgICB2YWx1ZTogdW5kZWZpbmVkO1xuICAgICAgaW5saW5lVmFsdWU6IHVuZGVmaW5lZDtcbiAgICB9O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXByZXNlbnRzIGEgcGFyc2VkIGNvbW1hbmQtbGluZSB0b2tlbi5cbiAqIEBzdW1tYXJ5IENhbiBiZSBhbiBvcHRpb24sIGEgcG9zaXRpb25hbCBhcmd1bWVudCwgb3IgYW4gb3B0aW9uIHRlcm1pbmF0b3IuXG4gKiBAdHlwZWRlZiB7T3B0aW9uVG9rZW4gfCBPYmplY3R9IFRva2VuXG4gKiBAbWVtYmVyT2YgQGRlY2FmLXRzL3V0aWxzXG4gKi9cbmV4cG9ydCB0eXBlIFRva2VuID1cbiAgfCBPcHRpb25Ub2tlblxuICB8IHsga2luZDogXCJwb3NpdGlvbmFsXCI7IGluZGV4OiBudW1iZXI7IHZhbHVlOiBzdHJpbmcgfVxuICB8IHsga2luZDogXCJvcHRpb24tdGVybWluYXRvclwiOyBpbmRleDogbnVtYmVyIH07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFRoZSByZXN1bHQgb2YgcGFyc2luZyBjb21tYW5kLWxpbmUgYXJndW1lbnRzLlxuICogQHN1bW1hcnkgQ29udGFpbnMgcGFyc2VkIHZhbHVlcywgcG9zaXRpb25hbCBhcmd1bWVudHMsIGFuZCBvcHRpb25hbGx5IHRoZSBwYXJzZWQgdG9rZW5zLlxuICogQHR5cGVkZWYge09iamVjdH0gUGFyc2VBcmdzUmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZyB8IGJvb2xlYW4gfCBzdHJpbmdbXSB8IGJvb2xlYW5bXSB8IHVuZGVmaW5lZH0gdmFsdWVzIC0gUGFyc2VkIG9wdGlvbiB2YWx1ZXMuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBwb3NpdGlvbmFscyAtIFBvc2l0aW9uYWwgYXJndW1lbnRzLlxuICogQHByb3BlcnR5IHtUb2tlbltdfSBbdG9rZW5zXSAtIFBhcnNlZCB0b2tlbnMgKGlmIHJlcXVlc3RlZCkuXG4gKiBAbWVtYmVyT2YgQGRlY2FmLXRzL3V0aWxzXG4gKi9cbmV4cG9ydCB0eXBlIFBhcnNlQXJnc1Jlc3VsdCA9IHtcbiAgdmFsdWVzOiB7IFtwOiBzdHJpbmddOiBzdHJpbmcgfCBib29sZWFuIHwgKHN0cmluZyB8IGJvb2xlYW4pW10gfCB1bmRlZmluZWQgfTtcbiAgcG9zaXRpb25hbHM6IHN0cmluZ1tdO1xuICB0b2tlbnM/OiBUb2tlbltdO1xufTtcbiJdfQ==
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.printBanner = printBanner;
7
+ exports.getSlogan = getSlogan;
8
+ const slogans_json_1 = __importDefault(require("../assets/slogans.json"));
9
+ const styled_string_builder_1 = require("styled-string-builder");
10
+ /**
11
+ * @description Array of ANSI color codes for banner styling.
12
+ * @summary Defines a set of ANSI color codes used to style the banner text.
13
+ */
14
+ const colors = [
15
+ "\x1b[38;5;215m", // soft orange
16
+ "\x1b[38;5;209m", // coral
17
+ "\x1b[38;5;205m", // pink
18
+ "\x1b[38;5;210m", // peachy
19
+ "\x1b[38;5;217m", // salmon
20
+ "\x1b[38;5;216m", // light coral
21
+ "\x1b[38;5;224m", // light peach
22
+ "\x1b[38;5;230m", // soft cream
23
+ "\x1b[38;5;230m", // soft cream
24
+ ];
25
+ /**
26
+ * @description Prints a styled banner to the console.
27
+ * @summary Generates and prints a colorful ASCII art banner with a random slogan.
28
+ * @param {VerbosityLogger} [logger] - Optional logger for verbose output.
29
+ * @function printBanner
30
+ * @mermaid
31
+ * sequenceDiagram
32
+ * participant printBanner
33
+ * participant getSlogan
34
+ * participant padEnd
35
+ * participant console
36
+ * printBanner->>getSlogan: Call getSlogan()
37
+ * getSlogan-->>printBanner: Return random slogan
38
+ * printBanner->>printBanner: Create banner ASCII art
39
+ * printBanner->>printBanner: Split banner into lines
40
+ * printBanner->>printBanner: Calculate max line length
41
+ * printBanner->>padEnd: Call padEnd with slogan
42
+ * padEnd-->>printBanner: Return padded slogan line
43
+ * loop For each banner line
44
+ * printBanner->>style: Call style(line)
45
+ * style-->>printBanner: Return styled line
46
+ * printBanner->>console: Log styled line
47
+ * end
48
+ */
49
+ function printBanner(logger) {
50
+ const message = getSlogan();
51
+ const banner = `# ░▒▓███████▓▒░ ░▒▓████████▓▒░ ░▒▓██████▓▒░ ░▒▓██████▓▒░ ░▒▓████████▓▒░ ░▒▓████████▓▒░ ░▒▓███████▓▒░
52
+ # ( ( ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░
53
+ # ) ) ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░
54
+ # [=======] ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓██████▓▒░ ░▒▓█▓▒░ ░▒▓████████▓▒░ ░▒▓██████▓▒░ ░▒▓█▓▒░ ░▒▓██████▓▒░
55
+ # \`-----´ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░
56
+ # ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░
57
+ # ░▒▓███████▓▒░ ░▒▓████████▓▒░ ░▒▓██████▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓███████▓▒░
58
+ #`.split("\n");
59
+ const maxLength = banner.reduce((max, line) => Math.max(max, line.length), 0);
60
+ banner.push(`# ${message.padStart(maxLength - 3)}`);
61
+ banner.forEach((line, index) => {
62
+ (logger ? logger.info.bind(logger) : console.log.bind(console))((0, styled_string_builder_1.style)(line || "").raw(colors[index]).text);
63
+ });
64
+ }
65
+ /**
66
+ * @description Retrieves a slogan from the predefined list.
67
+ * @summary Fetches a random slogan or a specific one by index from the slogans list.
68
+ * @param {number} [i] - Optional index to retrieve a specific slogan.
69
+ * @return {string} The selected slogan.
70
+ * @function getSlogan
71
+ * @mermaid
72
+ * sequenceDiagram
73
+ * participant getSlogan
74
+ * participant Math.random
75
+ * participant slogans
76
+ * alt i is undefined
77
+ * getSlogan->>Math.random: Generate random index
78
+ * Math.random-->>getSlogan: Return random index
79
+ * else i is defined
80
+ * Note over getSlogan: Use provided index
81
+ * end
82
+ * getSlogan->>slogans: Access slogan at index
83
+ * slogans-->>getSlogan: Return slogan
84
+ * alt Error occurs
85
+ * getSlogan->>getSlogan: Throw error
86
+ * end
87
+ * getSlogan-->>Caller: Return slogan
88
+ */
89
+ function getSlogan(i) {
90
+ try {
91
+ i =
92
+ typeof i === "undefined" ? Math.floor(Math.random() * slogans_json_1.default.length) : i;
93
+ return slogans_json_1.default[i].Slogan;
94
+ }
95
+ catch (error) {
96
+ throw new Error(`Failed to retrieve slogans: ${error}`);
97
+ }
98
+ }
99
+
100
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9vdXRwdXQvY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBNENBLGtDQWtCQztBQTBCRCw4QkFRQztBQS9GRCwwRUFBNkM7QUFDN0MsaUVBQThDO0FBRTlDOzs7R0FHRztBQUNILE1BQU0sTUFBTSxHQUFHO0lBQ2IsZ0JBQWdCLEVBQUUsY0FBYztJQUNoQyxnQkFBZ0IsRUFBRSxRQUFRO0lBQzFCLGdCQUFnQixFQUFFLE9BQU87SUFDekIsZ0JBQWdCLEVBQUUsU0FBUztJQUMzQixnQkFBZ0IsRUFBRSxTQUFTO0lBQzNCLGdCQUFnQixFQUFFLGNBQWM7SUFDaEMsZ0JBQWdCLEVBQUUsY0FBYztJQUNoQyxnQkFBZ0IsRUFBRSxhQUFhO0lBQy9CLGdCQUFnQixFQUFFLGFBQWE7Q0FDaEMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxNQUF3QjtJQUNsRCxNQUFNLE9BQU8sR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUM1QixNQUFNLE1BQU0sR0FDVjs7Ozs7OztFQU9GLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDN0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUM3RCxJQUFBLDZCQUFLLEVBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzFDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxTQUFnQixTQUFTLENBQUMsQ0FBVTtJQUNsQyxJQUFJLENBQUM7UUFDSCxDQUFDO1lBQ0MsT0FBTyxDQUFDLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxzQkFBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsT0FBTyxzQkFBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBQUMsT0FBTyxLQUFjLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7QUFDSCxDQUFDIiwiZmlsZSI6Im91dHB1dC9jb21tb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWZXJib3NpdHlMb2dnZXIgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHNsb2dhbnMgZnJvbSBcIi4uL2Fzc2V0cy9zbG9nYW5zLmpzb25cIjtcbmltcG9ydCB7IHN0eWxlIH0gZnJvbSBcInN0eWxlZC1zdHJpbmctYnVpbGRlclwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcnJheSBvZiBBTlNJIGNvbG9yIGNvZGVzIGZvciBiYW5uZXIgc3R5bGluZy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBzZXQgb2YgQU5TSSBjb2xvciBjb2RlcyB1c2VkIHRvIHN0eWxlIHRoZSBiYW5uZXIgdGV4dC5cbiAqL1xuY29uc3QgY29sb3JzID0gW1xuICBcIlxceDFiWzM4OzU7MjE1bVwiLCAvLyBzb2Z0IG9yYW5nZVxuICBcIlxceDFiWzM4OzU7MjA5bVwiLCAvLyBjb3JhbFxuICBcIlxceDFiWzM4OzU7MjA1bVwiLCAvLyBwaW5rXG4gIFwiXFx4MWJbMzg7NTsyMTBtXCIsIC8vIHBlYWNoeVxuICBcIlxceDFiWzM4OzU7MjE3bVwiLCAvLyBzYWxtb25cbiAgXCJcXHgxYlszODs1OzIxNm1cIiwgLy8gbGlnaHQgY29yYWxcbiAgXCJcXHgxYlszODs1OzIyNG1cIiwgLy8gbGlnaHQgcGVhY2hcbiAgXCJcXHgxYlszODs1OzIzMG1cIiwgLy8gc29mdCBjcmVhbVxuICBcIlxceDFiWzM4OzU7MjMwbVwiLCAvLyBzb2Z0IGNyZWFtXG5dO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQcmludHMgYSBzdHlsZWQgYmFubmVyIHRvIHRoZSBjb25zb2xlLlxuICogQHN1bW1hcnkgR2VuZXJhdGVzIGFuZCBwcmludHMgYSBjb2xvcmZ1bCBBU0NJSSBhcnQgYmFubmVyIHdpdGggYSByYW5kb20gc2xvZ2FuLlxuICogQHBhcmFtIHtWZXJib3NpdHlMb2dnZXJ9IFtsb2dnZXJdIC0gT3B0aW9uYWwgbG9nZ2VyIGZvciB2ZXJib3NlIG91dHB1dC5cbiAqIEBmdW5jdGlvbiBwcmludEJhbm5lclxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBwcmludEJhbm5lclxuICogICBwYXJ0aWNpcGFudCBnZXRTbG9nYW5cbiAqICAgcGFydGljaXBhbnQgcGFkRW5kXG4gKiAgIHBhcnRpY2lwYW50IGNvbnNvbGVcbiAqICAgcHJpbnRCYW5uZXItPj5nZXRTbG9nYW46IENhbGwgZ2V0U2xvZ2FuKClcbiAqICAgZ2V0U2xvZ2FuLS0+PnByaW50QmFubmVyOiBSZXR1cm4gcmFuZG9tIHNsb2dhblxuICogICBwcmludEJhbm5lci0+PnByaW50QmFubmVyOiBDcmVhdGUgYmFubmVyIEFTQ0lJIGFydFxuICogICBwcmludEJhbm5lci0+PnByaW50QmFubmVyOiBTcGxpdCBiYW5uZXIgaW50byBsaW5lc1xuICogICBwcmludEJhbm5lci0+PnByaW50QmFubmVyOiBDYWxjdWxhdGUgbWF4IGxpbmUgbGVuZ3RoXG4gKiAgIHByaW50QmFubmVyLT4+cGFkRW5kOiBDYWxsIHBhZEVuZCB3aXRoIHNsb2dhblxuICogICBwYWRFbmQtLT4+cHJpbnRCYW5uZXI6IFJldHVybiBwYWRkZWQgc2xvZ2FuIGxpbmVcbiAqICAgbG9vcCBGb3IgZWFjaCBiYW5uZXIgbGluZVxuICogICAgIHByaW50QmFubmVyLT4+c3R5bGU6IENhbGwgc3R5bGUobGluZSlcbiAqICAgICBzdHlsZS0tPj5wcmludEJhbm5lcjogUmV0dXJuIHN0eWxlZCBsaW5lXG4gKiAgICAgcHJpbnRCYW5uZXItPj5jb25zb2xlOiBMb2cgc3R5bGVkIGxpbmVcbiAqICAgZW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludEJhbm5lcihsb2dnZXI/OiBWZXJib3NpdHlMb2dnZXIpIHtcbiAgY29uc3QgbWVzc2FnZSA9IGdldFNsb2dhbigpO1xuICBjb25zdCBiYW5uZXI6IHN0cmluZyB8IHN0cmluZ1tdID1cbiAgICBgIyAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICAgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRIFxuIyAgICAgICggKCAgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICBcbiMgICAgICAgKSApICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgIFxuIyAgICBbPT09PT09PV0gICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgXG4jICAgICBcXGAtLS0tLcK0ICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSBcbiMgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgXG4jICAgICAgICAgICAgICAgICDilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgXG4jYC5zcGxpdChcIlxcblwiKTtcbiAgY29uc3QgbWF4TGVuZ3RoID0gYmFubmVyLnJlZHVjZSgobWF4LCBsaW5lKSA9PiBNYXRoLm1heChtYXgsIGxpbmUubGVuZ3RoKSwgMCk7XG4gIGJhbm5lci5wdXNoKGAjICAke21lc3NhZ2UucGFkU3RhcnQobWF4TGVuZ3RoIC0gMyl9YCk7XG4gIGJhbm5lci5mb3JFYWNoKChsaW5lLCBpbmRleCkgPT4ge1xuICAgIChsb2dnZXIgPyBsb2dnZXIuaW5mby5iaW5kKGxvZ2dlcikgOiBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpKShcbiAgICAgIHN0eWxlKGxpbmUgfHwgXCJcIikucmF3KGNvbG9yc1tpbmRleF0pLnRleHRcbiAgICApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgc2xvZ2FuIGZyb20gdGhlIHByZWRlZmluZWQgbGlzdC5cbiAqIEBzdW1tYXJ5IEZldGNoZXMgYSByYW5kb20gc2xvZ2FuIG9yIGEgc3BlY2lmaWMgb25lIGJ5IGluZGV4IGZyb20gdGhlIHNsb2dhbnMgbGlzdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbaV0gLSBPcHRpb25hbCBpbmRleCB0byByZXRyaWV2ZSBhIHNwZWNpZmljIHNsb2dhbi5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHNlbGVjdGVkIHNsb2dhbi5cbiAqIEBmdW5jdGlvbiBnZXRTbG9nYW5cbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgZ2V0U2xvZ2FuXG4gKiAgIHBhcnRpY2lwYW50IE1hdGgucmFuZG9tXG4gKiAgIHBhcnRpY2lwYW50IHNsb2dhbnNcbiAqICAgYWx0IGkgaXMgdW5kZWZpbmVkXG4gKiAgICAgZ2V0U2xvZ2FuLT4+TWF0aC5yYW5kb206IEdlbmVyYXRlIHJhbmRvbSBpbmRleFxuICogICAgIE1hdGgucmFuZG9tLS0+PmdldFNsb2dhbjogUmV0dXJuIHJhbmRvbSBpbmRleFxuICogICBlbHNlIGkgaXMgZGVmaW5lZFxuICogICAgIE5vdGUgb3ZlciBnZXRTbG9nYW46IFVzZSBwcm92aWRlZCBpbmRleFxuICogICBlbmRcbiAqICAgZ2V0U2xvZ2FuLT4+c2xvZ2FuczogQWNjZXNzIHNsb2dhbiBhdCBpbmRleFxuICogICBzbG9nYW5zLS0+PmdldFNsb2dhbjogUmV0dXJuIHNsb2dhblxuICogICBhbHQgRXJyb3Igb2NjdXJzXG4gKiAgICAgZ2V0U2xvZ2FuLT4+Z2V0U2xvZ2FuOiBUaHJvdyBlcnJvclxuICogICBlbmRcbiAqICAgZ2V0U2xvZ2FuLS0+PkNhbGxlcjogUmV0dXJuIHNsb2dhblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2xvZ2FuKGk/OiBudW1iZXIpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGkgPVxuICAgICAgdHlwZW9mIGkgPT09IFwidW5kZWZpbmVkXCIgPyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBzbG9nYW5zLmxlbmd0aCkgOiBpO1xuICAgIHJldHVybiBzbG9nYW5zW2ldLlNsb2dhbjtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZXRyaWV2ZSBzbG9nYW5zOiAke2Vycm9yfWApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,21 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./common.cjs"), exports);
18
+ __exportStar(require("./logging.cjs"), exports);
19
+ __exportStar(require("./types.cjs"), exports);
20
+
21
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9vdXRwdXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF5QjtBQUN6Qiw0Q0FBMEI7QUFDMUIsMENBQXdCIiwiZmlsZSI6Im91dHB1dC9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbG9nZ2luZyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbiJdfQ==
@@ -0,0 +1,355 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Logging = exports.MiniLogger = void 0;
4
+ const constants_1 = require("../utils/constants.cjs");
5
+ const styled_string_builder_1 = require("styled-string-builder");
6
+ /**
7
+ * @description A minimal logger implementation.
8
+ * @summary MiniLogger is a lightweight logging class that implements the VerbosityLogger interface.
9
+ * It provides basic logging functionality with support for different log levels and verbosity.
10
+ *
11
+ * @class
12
+ */
13
+ class MiniLogger {
14
+ /**
15
+ * @description Creates a new MiniLogger instance.
16
+ * @summary Initializes a MiniLogger with the given class name, optional configuration, and method name.
17
+ *
18
+ * @param context - The name of the class using this logger.
19
+ * @param [conf] - Optional logging configuration. Defaults to Info level and verbosity 0.
20
+ * @param [id] - Optional unique identifier for the logger instance.
21
+ */
22
+ constructor(context, conf, id) {
23
+ this.context = context;
24
+ this.conf = conf;
25
+ this.id = id;
26
+ }
27
+ config(key) {
28
+ if (this.conf && key in this.conf)
29
+ return this.conf[key];
30
+ return Logging.getConfig()[key];
31
+ }
32
+ for(method, config) {
33
+ method = method
34
+ ? typeof method === "string"
35
+ ? method
36
+ : method.name
37
+ : undefined;
38
+ return Logging.for([this.context, method].join("."), this.id, config);
39
+ }
40
+ /**
41
+ * @description Creates a formatted log string.
42
+ * @summary Generates a log string with timestamp, colored log level, and message.
43
+ *
44
+ * @param level - The log level as a string.
45
+ * @param message
46
+ * @param stack
47
+ * @return A formatted log string.
48
+ */
49
+ createLog(level, message, stack) {
50
+ const log = [];
51
+ const style = this.config("style");
52
+ if (this.config("timestamp")) {
53
+ const date = new Date().toISOString();
54
+ const timestamp = style ? Logging.theme(date, "timestamp", level) : date;
55
+ log.push(timestamp);
56
+ }
57
+ if (this.config("logLevel")) {
58
+ const lvl = style
59
+ ? Logging.theme(level, "logLevel", level)
60
+ : level;
61
+ log.push(lvl);
62
+ }
63
+ if (this.config("context")) {
64
+ const context = style
65
+ ? Logging.theme(this.context, "class", level)
66
+ : this.context;
67
+ log.push(context);
68
+ }
69
+ const msg = style
70
+ ? Logging.theme(typeof message === "string" ? message : message.message, "message", level)
71
+ : typeof message === "string"
72
+ ? message
73
+ : message.message;
74
+ log.push(msg);
75
+ if (stack || message instanceof Error) {
76
+ stack = style
77
+ ? Logging.theme((stack || message.stack), "stack", level)
78
+ : stack;
79
+ log.push(`\nStack trace:\n${stack}`);
80
+ }
81
+ return log.join(this.config("separator"));
82
+ }
83
+ /**
84
+ * @description Logs a message with the specified log level.
85
+ * @summary Checks if the message should be logged based on the current log level,
86
+ * then uses the appropriate console method to output the log.
87
+ *
88
+ * @param level - The log level of the message.
89
+ * @param msg - The message to be logged.
90
+ * @param stack
91
+ */
92
+ log(level, msg, stack) {
93
+ if (constants_1.NumericLogLevels[this.config("level")] <
94
+ constants_1.NumericLogLevels[level])
95
+ return;
96
+ let method;
97
+ switch (level) {
98
+ case constants_1.LogLevel.info:
99
+ method = console.log;
100
+ break;
101
+ case constants_1.LogLevel.verbose:
102
+ case constants_1.LogLevel.debug:
103
+ method = console.debug;
104
+ break;
105
+ case constants_1.LogLevel.error:
106
+ method = console.error;
107
+ break;
108
+ default:
109
+ throw new Error("Invalid log level");
110
+ }
111
+ method(this.createLog(level, msg, stack));
112
+ }
113
+ /**
114
+ * @description LLogs a `way too verbose` or a silly message.
115
+ * @summary Logs a message at the Silly level if the current verbosity allows it.
116
+ *
117
+ * @param msg - The message to be logged.
118
+ * @param verbosity - The verbosity level of the message (default: 0).
119
+ */
120
+ silly(msg, verbosity = 0) {
121
+ if (this.config("verbose") >= verbosity)
122
+ this.log(constants_1.LogLevel.verbose, msg);
123
+ }
124
+ /**
125
+ * @description Logs a verbose message.
126
+ * @summary Logs a message at the Verbose level if the current verbosity allows it.
127
+ *
128
+ * @param msg - The message to be logged.
129
+ * @param verbosity - The verbosity level of the message (default: 0).
130
+ */
131
+ verbose(msg, verbosity = 0) {
132
+ if (this.config("verbose") >= verbosity)
133
+ this.log(constants_1.LogLevel.verbose, msg);
134
+ }
135
+ /**
136
+ * @description Logs an info message.
137
+ * @summary Logs a message at the Info level.
138
+ *
139
+ * @param msg - The message to be logged.
140
+ */
141
+ info(msg) {
142
+ this.log(constants_1.LogLevel.info, msg);
143
+ }
144
+ /**
145
+ * @description Logs a debug message.
146
+ * @summary Logs a message at the Debug level.
147
+ *
148
+ * @param msg - The message to be logged.
149
+ */
150
+ debug(msg) {
151
+ this.log(constants_1.LogLevel.debug, msg);
152
+ }
153
+ /**
154
+ * @description Logs an error message.
155
+ * @summary Logs a message at the Error level.
156
+ *
157
+ * @param msg - The message to be logged.
158
+ */
159
+ error(msg) {
160
+ this.log(constants_1.LogLevel.error, msg);
161
+ }
162
+ setConfig(config) {
163
+ this.conf = { ...(this.conf || {}), ...config };
164
+ }
165
+ }
166
+ exports.MiniLogger = MiniLogger;
167
+ /**
168
+ * @description A static class for managing logging operations.
169
+ * @summary The Logging class provides a centralized logging mechanism with support for
170
+ * different log levels and verbosity. It uses a singleton pattern to maintain a global
171
+ * logger instance and allows creating specific loggers for different classes and methods.
172
+ *
173
+ * @class
174
+ */
175
+ class Logging {
176
+ /**
177
+ * @description Factory function for creating logger instances.
178
+ * @summary A function that creates new VerbosityLogger instances. By default, it creates a MiniLogger.
179
+ */
180
+ static { this._factory = (object, config, id) => {
181
+ return new MiniLogger(object, config, id);
182
+ }; }
183
+ /**
184
+ * @description Configuration for the logging system.
185
+ * @summary Stores the global verbosity level and log level settings.
186
+ */
187
+ static { this._config = constants_1.DefaultLoggingConfig; }
188
+ /**
189
+ * @description Private constructor to prevent instantiation.
190
+ * @summary Ensures that the Logging class cannot be instantiated as it's designed to be used statically.
191
+ */
192
+ constructor() { }
193
+ /**
194
+ * @description Setter for the logging configuration.
195
+ * @summary Allows updating the global logging configuration.
196
+ *
197
+ * @param config - An object containing verbosity and log level settings.
198
+ */
199
+ static setConfig(config) {
200
+ Object.assign(this._config, config);
201
+ }
202
+ static getConfig() {
203
+ return Object.assign({}, this._config);
204
+ }
205
+ /**
206
+ * @description Retrieves or creates the global logger instance.
207
+ * @summary Returns the existing global logger or creates a new one if it doesn't exist.
208
+ *
209
+ * @return The global VerbosityLogger instance.
210
+ */
211
+ static get() {
212
+ this.global = this.global ? this.global : this._factory("Logging");
213
+ return this.global;
214
+ }
215
+ /**
216
+ * @description Logs a verbose message.
217
+ * @summary Delegates the verbose logging to the global logger instance.
218
+ *
219
+ * @param msg - The message to be logged.
220
+ * @param verbosity - The verbosity level of the message (default: 0).
221
+ */
222
+ static verbose(msg, verbosity = 0) {
223
+ return this.get().verbose(msg, verbosity);
224
+ }
225
+ /**
226
+ * @description Logs an info message.
227
+ * @summary Delegates the info logging to the global logger instance.
228
+ *
229
+ * @param msg - The message to be logged.
230
+ */
231
+ static info(msg) {
232
+ return this.get().info(msg);
233
+ }
234
+ /**
235
+ * @description Logs a debug message.
236
+ * @summary Delegates the debug logging to the global logger instance.
237
+ *
238
+ * @param msg - The message to be logged.
239
+ */
240
+ static debug(msg) {
241
+ return this.get().debug(msg);
242
+ }
243
+ /**
244
+ * @description Logs a silly message.
245
+ * @summary Delegates the debug logging to the global logger instance.
246
+ *
247
+ * @param msg - The message to be logged.
248
+ */
249
+ static silly(msg) {
250
+ return this.get().silly(msg);
251
+ }
252
+ /**
253
+ * @description Logs an error message.
254
+ * @summary Delegates the error logging to the global logger instance.
255
+ *
256
+ * @param msg - The message to be logged.
257
+ */
258
+ static error(msg) {
259
+ return this.get().error(msg);
260
+ }
261
+ static for(object, id, config) {
262
+ object = typeof object === "string" ? object : object.name;
263
+ id = typeof id === "string" ? id : undefined;
264
+ config = typeof id === "object" ? id : config;
265
+ return this._factory(object, config, id);
266
+ }
267
+ /**
268
+ * @description Creates a logger for a specific reason or context.
269
+ *
270
+ * @summary This static method creates a new logger instance using the factory function,
271
+ * based on a given reason or context.
272
+ *
273
+ * @param reason - A string describing the reason or context for creating this logger.
274
+ * @param id
275
+ * @returns A new VerbosityLogger or ClassLogger instance.
276
+ */
277
+ static because(reason, id) {
278
+ return this._factory(reason, this._config, id);
279
+ }
280
+ static theme(text, type, loggerLevel, template = constants_1.DefaultTheme) {
281
+ if (!this._config.style)
282
+ return text;
283
+ const logger = Logging.get().for(this.theme);
284
+ function apply(txt, option, value) {
285
+ try {
286
+ const t = txt;
287
+ let c = (0, styled_string_builder_1.style)(t);
288
+ function applyColor(val, isBg = false) {
289
+ let f = isBg ? c.background : c.foreground;
290
+ if (!Array.isArray(val)) {
291
+ return f.call(c, value);
292
+ }
293
+ switch (val.length) {
294
+ case 1:
295
+ f = isBg ? c.bgColor256 : c.color256;
296
+ return f(val[0]);
297
+ case 3:
298
+ f = isBg ? c.bgRgb : c.rgb;
299
+ return c.rgb(val[0], val[1], val[2]);
300
+ default:
301
+ logger.error(`Not a valid color option: ${option}`);
302
+ return (0, styled_string_builder_1.style)(t);
303
+ }
304
+ }
305
+ function applyStyle(v) {
306
+ if (typeof v === "number") {
307
+ c = c.style(v);
308
+ }
309
+ else {
310
+ c = c[v];
311
+ }
312
+ }
313
+ switch (option) {
314
+ case "bg":
315
+ case "fg":
316
+ return applyColor(value).text;
317
+ case "style":
318
+ if (Array.isArray(value)) {
319
+ value.forEach(applyStyle);
320
+ }
321
+ else {
322
+ applyStyle(value);
323
+ }
324
+ return c.text;
325
+ default:
326
+ logger.error(`Not a valid theme option: ${option}`);
327
+ return t;
328
+ }
329
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
330
+ }
331
+ catch (e) {
332
+ logger.error(`Error applying style: ${option} with value ${value}`);
333
+ return txt;
334
+ }
335
+ }
336
+ const individualTheme = template[type];
337
+ if (!individualTheme || !Object.keys(individualTheme).length) {
338
+ return text;
339
+ }
340
+ let actualTheme = individualTheme;
341
+ const logLevels = Object.assign({}, constants_1.LogLevel);
342
+ if (Object.keys(individualTheme)[0] in logLevels)
343
+ actualTheme =
344
+ individualTheme[loggerLevel] || {};
345
+ return Object.keys(actualTheme).reduce((acc, key) => {
346
+ const val = actualTheme[key];
347
+ if (val)
348
+ return apply(acc, key, val);
349
+ return acc;
350
+ }, text);
351
+ }
352
+ }
353
+ exports.Logging = Logging;
354
+
355
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,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b3V0cHV0L2xvZ2dpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEZWZhdWx0TG9nZ2luZ0NvbmZpZyxcbiAgRGVmYXVsdFRoZW1lLFxuICBMb2dMZXZlbCxcbiAgTnVtZXJpY0xvZ0xldmVscyxcbn0gZnJvbSBcIi4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgTG9nZ2luZ0NvbmZpZyxcbiAgTG9nZ2luZ0NvbnRleHQsXG4gIFN0cmluZ0xpa2UsXG4gIFRoZW1lLFxuICBUaGVtZU9wdGlvbixcbiAgVGhlbWVPcHRpb25CeUxvZ0xldmVsLFxuICBWZXJib3NpdHlMb2dnZXIsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBDb2xvcml6ZU9wdGlvbnMsIHN0eWxlLCBTdHlsZWRTdHJpbmcgfSBmcm9tIFwic3R5bGVkLXN0cmluZy1idWlsZGVyXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEEgbWluaW1hbCBsb2dnZXIgaW1wbGVtZW50YXRpb24uXG4gKiBAc3VtbWFyeSBNaW5pTG9nZ2VyIGlzIGEgbGlnaHR3ZWlnaHQgbG9nZ2luZyBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIFZlcmJvc2l0eUxvZ2dlciBpbnRlcmZhY2UuXG4gKiBJdCBwcm92aWRlcyBiYXNpYyBsb2dnaW5nIGZ1bmN0aW9uYWxpdHkgd2l0aCBzdXBwb3J0IGZvciBkaWZmZXJlbnQgbG9nIGxldmVscyBhbmQgdmVyYm9zaXR5LlxuICpcbiAqIEBjbGFzc1xuICovXG5leHBvcnQgY2xhc3MgTWluaUxvZ2dlciBpbXBsZW1lbnRzIFZlcmJvc2l0eUxvZ2dlciB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBNaW5pTG9nZ2VyIGluc3RhbmNlLlxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIE1pbmlMb2dnZXIgd2l0aCB0aGUgZ2l2ZW4gY2xhc3MgbmFtZSwgb3B0aW9uYWwgY29uZmlndXJhdGlvbiwgYW5kIG1ldGhvZCBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyB1c2luZyB0aGlzIGxvZ2dlci5cbiAgICogQHBhcmFtIFtjb25mXSAtIE9wdGlvbmFsIGxvZ2dpbmcgY29uZmlndXJhdGlvbi4gRGVmYXVsdHMgdG8gSW5mbyBsZXZlbCBhbmQgdmVyYm9zaXR5IDAuXG4gICAqIEBwYXJhbSBbaWRdIC0gT3B0aW9uYWwgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBsb2dnZXIgaW5zdGFuY2UuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY29udGV4dDogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBjb25mPzogUGFydGlhbDxMb2dnaW5nQ29uZmlnPixcbiAgICBwcm90ZWN0ZWQgaWQ/OiBzdHJpbmdcbiAgKSB7fVxuXG4gIHByb3RlY3RlZCBjb25maWcoXG4gICAga2V5OiBrZXlvZiBMb2dnaW5nQ29uZmlnXG4gICk6IExvZ2dpbmdDb25maWdba2V5b2YgTG9nZ2luZ0NvbmZpZ10ge1xuICAgIGlmICh0aGlzLmNvbmYgJiYga2V5IGluIHRoaXMuY29uZikgcmV0dXJuIHRoaXMuY29uZltrZXldO1xuICAgIHJldHVybiBMb2dnaW5nLmdldENvbmZpZygpW2tleV07XG4gIH1cblxuICBmb3IoXG4gICAgbWV0aG9kPzogc3RyaW5nIHwgKCguLi5hcmdzOiBhbnlbXSkgPT4gYW55KSxcbiAgICBjb25maWc/OiBQYXJ0aWFsPExvZ2dpbmdDb25maWc+XG4gICk6IFZlcmJvc2l0eUxvZ2dlciB7XG4gICAgbWV0aG9kID0gbWV0aG9kXG4gICAgICA/IHR5cGVvZiBtZXRob2QgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyBtZXRob2RcbiAgICAgICAgOiBtZXRob2QubmFtZVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gTG9nZ2luZy5mb3IoW3RoaXMuY29udGV4dCwgbWV0aG9kXS5qb2luKFwiLlwiKSwgdGhpcy5pZCwgY29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGZvcm1hdHRlZCBsb2cgc3RyaW5nLlxuICAgKiBAc3VtbWFyeSBHZW5lcmF0ZXMgYSBsb2cgc3RyaW5nIHdpdGggdGltZXN0YW1wLCBjb2xvcmVkIGxvZyBsZXZlbCwgYW5kIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBsZXZlbCAtIFRoZSBsb2cgbGV2ZWwgYXMgYSBzdHJpbmcuXG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqIEBwYXJhbSBzdGFja1xuICAgKiBAcmV0dXJuIEEgZm9ybWF0dGVkIGxvZyBzdHJpbmcuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlTG9nKFxuICAgIGxldmVsOiBMb2dMZXZlbCxcbiAgICBtZXNzYWdlOiBTdHJpbmdMaWtlIHwgRXJyb3IsXG4gICAgc3RhY2s/OiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBsb2c6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzLmNvbmZpZyhcInN0eWxlXCIpO1xuICAgIGlmICh0aGlzLmNvbmZpZyhcInRpbWVzdGFtcFwiKSkge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IHN0eWxlID8gTG9nZ2luZy50aGVtZShkYXRlLCBcInRpbWVzdGFtcFwiLCBsZXZlbCkgOiBkYXRlO1xuICAgICAgbG9nLnB1c2godGltZXN0YW1wKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcoXCJsb2dMZXZlbFwiKSkge1xuICAgICAgY29uc3QgbHZsOiBzdHJpbmcgPSBzdHlsZVxuICAgICAgICA/IExvZ2dpbmcudGhlbWUobGV2ZWwsIFwibG9nTGV2ZWxcIiwgbGV2ZWwpXG4gICAgICAgIDogbGV2ZWw7XG4gICAgICBsb2cucHVzaChsdmwpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZyhcImNvbnRleHRcIikpIHtcbiAgICAgIGNvbnN0IGNvbnRleHQ6IHN0cmluZyA9IHN0eWxlXG4gICAgICAgID8gTG9nZ2luZy50aGVtZSh0aGlzLmNvbnRleHQsIFwiY2xhc3NcIiwgbGV2ZWwpXG4gICAgICAgIDogdGhpcy5jb250ZXh0O1xuICAgICAgbG9nLnB1c2goY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc3QgbXNnOiBzdHJpbmcgPSBzdHlsZVxuICAgICAgPyBMb2dnaW5nLnRoZW1lKFxuICAgICAgICAgIHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiID8gbWVzc2FnZSA6IChtZXNzYWdlIGFzIEVycm9yKS5tZXNzYWdlLFxuICAgICAgICAgIFwibWVzc2FnZVwiLFxuICAgICAgICAgIGxldmVsXG4gICAgICAgIClcbiAgICAgIDogdHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyBtZXNzYWdlXG4gICAgICAgIDogKG1lc3NhZ2UgYXMgRXJyb3IpLm1lc3NhZ2U7XG4gICAgbG9nLnB1c2gobXNnKTtcbiAgICBpZiAoc3RhY2sgfHwgbWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBzdGFjayA9IHN0eWxlXG4gICAgICAgID8gTG9nZ2luZy50aGVtZShcbiAgICAgICAgICAgIChzdGFjayB8fCAobWVzc2FnZSBhcyBFcnJvcikuc3RhY2spIGFzIHN0cmluZyxcbiAgICAgICAgICAgIFwic3RhY2tcIixcbiAgICAgICAgICAgIGxldmVsXG4gICAgICAgICAgKVxuICAgICAgICA6IHN0YWNrO1xuICAgICAgbG9nLnB1c2goYFxcblN0YWNrIHRyYWNlOlxcbiR7c3RhY2t9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvZy5qb2luKHRoaXMuY29uZmlnKFwic2VwYXJhdG9yXCIpIGFzIHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIHdpdGggdGhlIHNwZWNpZmllZCBsb2cgbGV2ZWwuXG4gICAqIEBzdW1tYXJ5IENoZWNrcyBpZiB0aGUgbWVzc2FnZSBzaG91bGQgYmUgbG9nZ2VkIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvZyBsZXZlbCxcbiAgICogdGhlbiB1c2VzIHRoZSBhcHByb3ByaWF0ZSBjb25zb2xlIG1ldGhvZCB0byBvdXRwdXQgdGhlIGxvZy5cbiAgICpcbiAgICogQHBhcmFtIGxldmVsIC0gVGhlIGxvZyBsZXZlbCBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICogQHBhcmFtIHN0YWNrXG4gICAqL1xuICBwcm90ZWN0ZWQgbG9nKFxuICAgIGxldmVsOiBMb2dMZXZlbCxcbiAgICBtc2c6IFN0cmluZ0xpa2UgfCBFcnJvcixcbiAgICBzdGFjaz86IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBOdW1lcmljTG9nTGV2ZWxzW3RoaXMuY29uZmlnKFwibGV2ZWxcIikgYXMgTG9nTGV2ZWxdIDxcbiAgICAgIE51bWVyaWNMb2dMZXZlbHNbbGV2ZWxdXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIGxldCBtZXRob2Q7XG4gICAgc3dpdGNoIChsZXZlbCkge1xuICAgICAgY2FzZSBMb2dMZXZlbC5pbmZvOlxuICAgICAgICBtZXRob2QgPSBjb25zb2xlLmxvZztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExvZ0xldmVsLnZlcmJvc2U6XG4gICAgICBjYXNlIExvZ0xldmVsLmRlYnVnOlxuICAgICAgICBtZXRob2QgPSBjb25zb2xlLmRlYnVnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTG9nTGV2ZWwuZXJyb3I6XG4gICAgICAgIG1ldGhvZCA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsb2cgbGV2ZWxcIik7XG4gICAgfVxuICAgIG1ldGhvZCh0aGlzLmNyZWF0ZUxvZyhsZXZlbCwgbXNnLCBzdGFjaykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMTG9ncyBhIGB3YXkgdG9vIHZlcmJvc2VgIG9yIGEgc2lsbHkgbWVzc2FnZS5cbiAgICogQHN1bW1hcnkgTG9ncyBhIG1lc3NhZ2UgYXQgdGhlIFNpbGx5IGxldmVsIGlmIHRoZSBjdXJyZW50IHZlcmJvc2l0eSBhbGxvd3MgaXQuXG4gICAqXG4gICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAqIEBwYXJhbSB2ZXJib3NpdHkgLSBUaGUgdmVyYm9zaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChkZWZhdWx0OiAwKS5cbiAgICovXG4gIHNpbGx5KG1zZzogU3RyaW5nTGlrZSwgdmVyYm9zaXR5OiBudW1iZXIgPSAwKTogdm9pZCB7XG4gICAgaWYgKCh0aGlzLmNvbmZpZyhcInZlcmJvc2VcIikgYXMgbnVtYmVyKSA+PSB2ZXJib3NpdHkpXG4gICAgICB0aGlzLmxvZyhMb2dMZXZlbC52ZXJib3NlLCBtc2cpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIGEgdmVyYm9zZSBtZXNzYWdlLlxuICAgKiBAc3VtbWFyeSBMb2dzIGEgbWVzc2FnZSBhdCB0aGUgVmVyYm9zZSBsZXZlbCBpZiB0aGUgY3VycmVudCB2ZXJib3NpdHkgYWxsb3dzIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLlxuICAgKiBAcGFyYW0gdmVyYm9zaXR5IC0gVGhlIHZlcmJvc2l0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoZGVmYXVsdDogMCkuXG4gICAqL1xuICB2ZXJib3NlKG1zZzogU3RyaW5nTGlrZSwgdmVyYm9zaXR5OiBudW1iZXIgPSAwKTogdm9pZCB7XG4gICAgaWYgKCh0aGlzLmNvbmZpZyhcInZlcmJvc2VcIikgYXMgbnVtYmVyKSA+PSB2ZXJib3NpdHkpXG4gICAgICB0aGlzLmxvZyhMb2dMZXZlbC52ZXJib3NlLCBtc2cpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIGFuIGluZm8gbWVzc2FnZS5cbiAgICogQHN1bW1hcnkgTG9ncyBhIG1lc3NhZ2UgYXQgdGhlIEluZm8gbGV2ZWwuXG4gICAqXG4gICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAqL1xuICBpbmZvKG1zZzogU3RyaW5nTGlrZSk6IHZvaWQge1xuICAgIHRoaXMubG9nKExvZ0xldmVsLmluZm8sIG1zZyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBkZWJ1ZyBtZXNzYWdlLlxuICAgKiBAc3VtbWFyeSBMb2dzIGEgbWVzc2FnZSBhdCB0aGUgRGVidWcgbGV2ZWwuXG4gICAqXG4gICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAqL1xuICBkZWJ1Zyhtc2c6IFN0cmluZ0xpa2UpOiB2b2lkIHtcbiAgICB0aGlzLmxvZyhMb2dMZXZlbC5kZWJ1ZywgbXNnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhbiBlcnJvciBtZXNzYWdlLlxuICAgKiBAc3VtbWFyeSBMb2dzIGEgbWVzc2FnZSBhdCB0aGUgRXJyb3IgbGV2ZWwuXG4gICAqXG4gICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAqL1xuICBlcnJvcihtc2c6IFN0cmluZ0xpa2UgfCBFcnJvcik6IHZvaWQge1xuICAgIHRoaXMubG9nKExvZ0xldmVsLmVycm9yLCBtc2cpO1xuICB9XG5cbiAgc2V0Q29uZmlnKGNvbmZpZzogUGFydGlhbDxMb2dnaW5nQ29uZmlnPikge1xuICAgIHRoaXMuY29uZiA9IHsgLi4uKHRoaXMuY29uZiB8fCB7fSksIC4uLmNvbmZpZyB9O1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEEgc3RhdGljIGNsYXNzIGZvciBtYW5hZ2luZyBsb2dnaW5nIG9wZXJhdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGUgTG9nZ2luZyBjbGFzcyBwcm92aWRlcyBhIGNlbnRyYWxpemVkIGxvZ2dpbmcgbWVjaGFuaXNtIHdpdGggc3VwcG9ydCBmb3JcbiAqIGRpZmZlcmVudCBsb2cgbGV2ZWxzIGFuZCB2ZXJib3NpdHkuIEl0IHVzZXMgYSBzaW5nbGV0b24gcGF0dGVybiB0byBtYWludGFpbiBhIGdsb2JhbFxuICogbG9nZ2VyIGluc3RhbmNlIGFuZCBhbGxvd3MgY3JlYXRpbmcgc3BlY2lmaWMgbG9nZ2VycyBmb3IgZGlmZmVyZW50IGNsYXNzZXMgYW5kIG1ldGhvZHMuXG4gKlxuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dnaW5nIHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgZ2xvYmFsIGxvZ2dlciBpbnN0YW5jZS5cbiAgICogQHN1bW1hcnkgQSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgVmVyYm9zaXR5TG9nZ2VyIHVzZWQgZm9yIGdsb2JhbCBsb2dnaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2xvYmFsPzogVmVyYm9zaXR5TG9nZ2VyO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgbG9nZ2VyIGluc3RhbmNlcy5cbiAgICogQHN1bW1hcnkgQSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgbmV3IFZlcmJvc2l0eUxvZ2dlciBpbnN0YW5jZXMuIEJ5IGRlZmF1bHQsIGl0IGNyZWF0ZXMgYSBNaW5pTG9nZ2VyLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX2ZhY3Rvcnk6IChcbiAgICBvYmplY3Q6IHN0cmluZyxcbiAgICBjb25maWc/OiBQYXJ0aWFsPExvZ2dpbmdDb25maWc+LFxuICAgIGlkPzogc3RyaW5nXG4gICkgPT4gVmVyYm9zaXR5TG9nZ2VyID0gKFxuICAgIG9iamVjdDogc3RyaW5nLFxuICAgIGNvbmZpZz86IFBhcnRpYWw8TG9nZ2luZ0NvbmZpZz4sXG4gICAgaWQ/OiBzdHJpbmdcbiAgKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBNaW5pTG9nZ2VyKG9iamVjdCwgY29uZmlnLCBpZCk7XG4gIH07XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBmb3IgdGhlIGxvZ2dpbmcgc3lzdGVtLlxuICAgKiBAc3VtbWFyeSBTdG9yZXMgdGhlIGdsb2JhbCB2ZXJib3NpdHkgbGV2ZWwgYW5kIGxvZyBsZXZlbCBzZXR0aW5ncy5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF9jb25maWc6IExvZ2dpbmdDb25maWcgPSBEZWZhdWx0TG9nZ2luZ0NvbmZpZztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByaXZhdGUgY29uc3RydWN0b3IgdG8gcHJldmVudCBpbnN0YW50aWF0aW9uLlxuICAgKiBAc3VtbWFyeSBFbnN1cmVzIHRoYXQgdGhlIExvZ2dpbmcgY2xhc3MgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBhcyBpdCdzIGRlc2lnbmVkIHRvIGJlIHVzZWQgc3RhdGljYWxseS5cbiAgICovXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0dGVyIGZvciB0aGUgbG9nZ2luZyBjb25maWd1cmF0aW9uLlxuICAgKiBAc3VtbWFyeSBBbGxvd3MgdXBkYXRpbmcgdGhlIGdsb2JhbCBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBBbiBvYmplY3QgY29udGFpbmluZyB2ZXJib3NpdHkgYW5kIGxvZyBsZXZlbCBzZXR0aW5ncy5cbiAgICovXG4gIHN0YXRpYyBzZXRDb25maWcoY29uZmlnOiBQYXJ0aWFsPExvZ2dpbmdDb25maWc+KSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9jb25maWcsIGNvbmZpZyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0Q29uZmlnKCk6IExvZ2dpbmdDb25maWcge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9jb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgb3IgY3JlYXRlcyB0aGUgZ2xvYmFsIGxvZ2dlciBpbnN0YW5jZS5cbiAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgZXhpc3RpbmcgZ2xvYmFsIGxvZ2dlciBvciBjcmVhdGVzIGEgbmV3IG9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgKlxuICAgKiBAcmV0dXJuIFRoZSBnbG9iYWwgVmVyYm9zaXR5TG9nZ2VyIGluc3RhbmNlLlxuICAgKi9cbiAgc3RhdGljIGdldCgpOiBWZXJib3NpdHlMb2dnZXIge1xuICAgIHRoaXMuZ2xvYmFsID0gdGhpcy5nbG9iYWwgPyB0aGlzLmdsb2JhbCA6IHRoaXMuX2ZhY3RvcnkoXCJMb2dnaW5nXCIpO1xuICAgIHJldHVybiB0aGlzLmdsb2JhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIHZlcmJvc2UgbWVzc2FnZS5cbiAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRoZSB2ZXJib3NlIGxvZ2dpbmcgdG8gdGhlIGdsb2JhbCBsb2dnZXIgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAqIEBwYXJhbSB2ZXJib3NpdHkgLSBUaGUgdmVyYm9zaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChkZWZhdWx0OiAwKS5cbiAgICovXG4gIHN0YXRpYyB2ZXJib3NlKG1zZzogU3RyaW5nTGlrZSwgdmVyYm9zaXR5OiBudW1iZXIgPSAwKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCkudmVyYm9zZShtc2csIHZlcmJvc2l0eSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ3MgYW4gaW5mbyBtZXNzYWdlLlxuICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdGhlIGluZm8gbG9nZ2luZyB0byB0aGUgZ2xvYmFsIGxvZ2dlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICovXG4gIHN0YXRpYyBpbmZvKG1zZzogU3RyaW5nTGlrZSk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLmdldCgpLmluZm8obXNnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIGRlYnVnIG1lc3NhZ2UuXG4gICAqIEBzdW1tYXJ5IERlbGVnYXRlcyB0aGUgZGVidWcgbG9nZ2luZyB0byB0aGUgZ2xvYmFsIGxvZ2dlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICovXG4gIHN0YXRpYyBkZWJ1Zyhtc2c6IFN0cmluZ0xpa2UpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoKS5kZWJ1Zyhtc2cpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIGEgc2lsbHkgbWVzc2FnZS5cbiAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRoZSBkZWJ1ZyBsb2dnaW5nIHRvIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLlxuICAgKi9cbiAgc3RhdGljIHNpbGx5KG1zZzogU3RyaW5nTGlrZSk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLmdldCgpLnNpbGx5KG1zZyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ3MgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRoZSBlcnJvciBsb2dnaW5nIHRvIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLlxuICAgKi9cbiAgc3RhdGljIGVycm9yKG1zZzogU3RyaW5nTGlrZSk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLmdldCgpLmVycm9yKG1zZyk7XG4gIH1cblxuICBzdGF0aWMgZm9yKFxuICAgIG9iamVjdDogTG9nZ2luZ0NvbnRleHQsXG4gICAgaWQ/OiBzdHJpbmcgfCBQYXJ0aWFsPExvZ2dpbmdDb25maWc+LFxuICAgIGNvbmZpZz86IFBhcnRpYWw8TG9nZ2luZ0NvbmZpZz5cbiAgKTogVmVyYm9zaXR5TG9nZ2VyIHtcbiAgICBvYmplY3QgPSB0eXBlb2Ygb2JqZWN0ID09PSBcInN0cmluZ1wiID8gb2JqZWN0IDogb2JqZWN0Lm5hbWU7XG4gICAgaWQgPSB0eXBlb2YgaWQgPT09IFwic3RyaW5nXCIgPyBpZCA6IHVuZGVmaW5lZDtcbiAgICBjb25maWcgPSB0eXBlb2YgaWQgPT09IFwib2JqZWN0XCIgPyAoaWQgYXMgUGFydGlhbDxMb2dnaW5nQ29uZmlnPikgOiBjb25maWc7XG4gICAgcmV0dXJuIHRoaXMuX2ZhY3Rvcnkob2JqZWN0LCBjb25maWcsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGxvZ2dlciBmb3IgYSBzcGVjaWZpYyByZWFzb24gb3IgY29udGV4dC5cbiAgICpcbiAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgbWV0aG9kIGNyZWF0ZXMgYSBuZXcgbG9nZ2VyIGluc3RhbmNlIHVzaW5nIHRoZSBmYWN0b3J5IGZ1bmN0aW9uLFxuICAgKiBiYXNlZCBvbiBhIGdpdmVuIHJlYXNvbiBvciBjb250ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0gcmVhc29uIC0gQSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgcmVhc29uIG9yIGNvbnRleHQgZm9yIGNyZWF0aW5nIHRoaXMgbG9nZ2VyLlxuICAgKiBAcGFyYW0gaWRcbiAgICogQHJldHVybnMgQSBuZXcgVmVyYm9zaXR5TG9nZ2VyIG9yIENsYXNzTG9nZ2VyIGluc3RhbmNlLlxuICAgKi9cbiAgc3RhdGljIGJlY2F1c2UocmVhc29uOiBzdHJpbmcsIGlkPzogc3RyaW5nKTogVmVyYm9zaXR5TG9nZ2VyIHtcbiAgICByZXR1cm4gdGhpcy5fZmFjdG9yeShyZWFzb24sIHRoaXMuX2NvbmZpZywgaWQpO1xuICB9XG5cbiAgc3RhdGljIHRoZW1lKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICB0eXBlOiBrZXlvZiBUaGVtZSB8IGtleW9mIExvZ0xldmVsLFxuICAgIGxvZ2dlckxldmVsOiBMb2dMZXZlbCxcbiAgICB0ZW1wbGF0ZTogVGhlbWUgPSBEZWZhdWx0VGhlbWVcbiAgKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuc3R5bGUpIHJldHVybiB0ZXh0O1xuICAgIGNvbnN0IGxvZ2dlciA9IExvZ2dpbmcuZ2V0KCkuZm9yKHRoaXMudGhlbWUpO1xuXG4gICAgZnVuY3Rpb24gYXBwbHkoXG4gICAgICB0eHQ6IHN0cmluZyxcbiAgICAgIG9wdGlvbjoga2V5b2YgVGhlbWVPcHRpb24sXG4gICAgICB2YWx1ZTogbnVtYmVyIHwgW251bWJlcl0gfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudW1iZXJbXSB8IHN0cmluZ1tdXG4gICAgKTogc3RyaW5nIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHQ6IHN0cmluZyB8IFN0eWxlZFN0cmluZyA9IHR4dDtcbiAgICAgICAgbGV0IGMgPSBzdHlsZSh0KTtcblxuICAgICAgICBmdW5jdGlvbiBhcHBseUNvbG9yKFxuICAgICAgICAgIHZhbDogbnVtYmVyIHwgW251bWJlcl0gfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgaXNCZyA9IGZhbHNlXG4gICAgICAgICk6IFN0eWxlZFN0cmluZyB7XG4gICAgICAgICAgbGV0IGY6XG4gICAgICAgICAgICB8IHR5cGVvZiBjLmJhY2tncm91bmRcbiAgICAgICAgICAgIHwgdHlwZW9mIGMuZm9yZWdyb3VuZFxuICAgICAgICAgICAgfCB0eXBlb2YgYy5yZ2JcbiAgICAgICAgICAgIHwgdHlwZW9mIGMuY29sb3IyNTYgPSBpc0JnID8gYy5iYWNrZ3JvdW5kIDogYy5mb3JlZ3JvdW5kO1xuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gKGYgYXMgdHlwZW9mIGMuYmFja2dyb3VuZCB8IHR5cGVvZiBjLmZvcmVncm91bmQpLmNhbGwoXG4gICAgICAgICAgICAgIGMsXG4gICAgICAgICAgICAgIHZhbHVlIGFzIG51bWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3dpdGNoICh2YWwubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGYgPSBpc0JnID8gYy5iZ0NvbG9yMjU2IDogYy5jb2xvcjI1NjtcbiAgICAgICAgICAgICAgcmV0dXJuIChmIGFzIHR5cGVvZiBjLmJnQ29sb3IyNTYgfCB0eXBlb2YgYy5jb2xvcjI1NikodmFsWzBdKTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgZiA9IGlzQmcgPyBjLmJnUmdiIDogYy5yZ2I7XG4gICAgICAgICAgICAgIHJldHVybiBjLnJnYih2YWxbMF0sIHZhbFsxXSwgdmFsWzJdKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgTm90IGEgdmFsaWQgY29sb3Igb3B0aW9uOiAke29wdGlvbn1gKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlKHQgYXMgc3RyaW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBhcHBseVN0eWxlKHY6IG51bWJlciB8IHN0cmluZyk6IHZvaWQge1xuICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgYyA9IGMuc3R5bGUodik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGMgPSBjW3YgYXMga2V5b2YgQ29sb3JpemVPcHRpb25zXSBhcyBTdHlsZWRTdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChvcHRpb24pIHtcbiAgICAgICAgICBjYXNlIFwiYmdcIjpcbiAgICAgICAgICBjYXNlIFwiZmdcIjpcbiAgICAgICAgICAgIHJldHVybiBhcHBseUNvbG9yKHZhbHVlIGFzIG51bWJlcikudGV4dDtcbiAgICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKGFwcGx5U3R5bGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZSh2YWx1ZSBhcyBudW1iZXIgfCBzdHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGMudGV4dDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBOb3QgYSB2YWxpZCB0aGVtZSBvcHRpb246ICR7b3B0aW9ufWApO1xuICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIGFwcGx5aW5nIHN0eWxlOiAke29wdGlvbn0gd2l0aCB2YWx1ZSAke3ZhbHVlfWApO1xuICAgICAgICByZXR1cm4gdHh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGluZGl2aWR1YWxUaGVtZSA9IHRlbXBsYXRlW3R5cGUgYXMga2V5b2YgVGhlbWVdO1xuICAgIGlmICghaW5kaXZpZHVhbFRoZW1lIHx8ICFPYmplY3Qua2V5cyhpbmRpdmlkdWFsVGhlbWUpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuXG4gICAgbGV0IGFjdHVhbFRoZW1lOiBUaGVtZU9wdGlvbiA9IGluZGl2aWR1YWxUaGVtZSBhcyBUaGVtZU9wdGlvbjtcblxuICAgIGNvbnN0IGxvZ0xldmVscyA9IE9iamVjdC5hc3NpZ24oe30sIExvZ0xldmVsKTtcbiAgICBpZiAoT2JqZWN0LmtleXMoaW5kaXZpZHVhbFRoZW1lKVswXSBpbiBsb2dMZXZlbHMpXG4gICAgICBhY3R1YWxUaGVtZSA9XG4gICAgICAgIChpbmRpdmlkdWFsVGhlbWUgYXMgVGhlbWVPcHRpb25CeUxvZ0xldmVsKVtsb2dnZXJMZXZlbF0gfHwge307XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoYWN0dWFsVGhlbWUpLnJlZHVjZSgoYWNjOiBzdHJpbmcsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSAoYWN0dWFsVGhlbWUgYXMgVGhlbWVPcHRpb24pW2tleSBhcyBrZXlvZiBUaGVtZU9wdGlvbl07XG4gICAgICBpZiAodmFsKVxuICAgICAgICByZXR1cm4gYXBwbHkoXG4gICAgICAgICAgYWNjLFxuICAgICAgICAgIGtleSBhcyBrZXlvZiBUaGVtZU9wdGlvbixcbiAgICAgICAgICB2YWwgYXNcbiAgICAgICAgICAgIHwgbnVtYmVyXG4gICAgICAgICAgICB8IFtudW1iZXJdXG4gICAgICAgICAgICB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXVxuICAgICAgICAgICAgfCBudW1iZXJbXVxuICAgICAgICAgICAgfCBzdHJpbmdbXVxuICAgICAgICApO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB0ZXh0KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9vdXRwdXQvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJvdXRwdXQvdHlwZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gXCIuLi91dGlscy9jb25zdGFudHNcIjtcbmltcG9ydCB7IHN0eWxlcyB9IGZyb20gXCJzdHlsZWQtc3RyaW5nLWJ1aWxkZXJcIjtcblxuZXhwb3J0IHR5cGUgU3RyaW5nTGlrZSA9IHN0cmluZyB8IHsgdG9TdHJpbmc6ICgpID0+IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBMb2dnaW5nQ29udGV4dCA9XG4gIHwgc3RyaW5nXG4gIHwgeyBuZXcgKC4uLmFyZ3M6IGFueVtdKTogYW55IH1cbiAgfCAoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnRlcmZhY2UgZm9yIGEgbG9nZ2VyIHdpdGggdmVyYm9zaXR5IGxldmVscy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgbWV0aG9kcyBmb3IgbG9nZ2luZyBhdCBkaWZmZXJlbnQgdmVyYm9zaXR5IGxldmVscy5cbiAqIEBpbnRlcmZhY2UgVmVyYm9zaXR5TG9nZ2VyXG4gKiBAbWVtYmVyT2YgQGRlY2FmLXRzL3V0aWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyYm9zaXR5TG9nZ2VyIHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIGEgYHdheSB0b28gdmVyYm9zZWAgb3IgYSBzaWxseSBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge1N0cmluZ0xpa2V9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGxvZy5cbiAgICovXG4gIHNpbGx5KG1zZzogU3RyaW5nTGlrZSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIHZlcmJvc2UgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtTdHJpbmdMaWtlfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBsb2cuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2ZXJib3NpdHkgLSBUaGUgdmVyYm9zaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlLlxuICAgKi9cbiAgdmVyYm9zZShtc2c6IFN0cmluZ0xpa2UsIHZlcmJvc2l0eT86IG51bWJlcik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIGFuIGluZm8gbWVzc2FnZS5cbiAgICogQHBhcmFtIHtTdHJpbmdMaWtlfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBsb2cuXG4gICAqL1xuICBpbmZvKG1zZzogU3RyaW5nTGlrZSk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7U3RyaW5nTGlrZSB8IEVycm9yfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBsb2cuXG4gICAqL1xuICBlcnJvcihtc2c6IFN0cmluZ0xpa2UgfCBFcnJvcik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIGEgZGVidWcgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGxvZy5cbiAgICovXG4gIGRlYnVnKG1zZzogU3RyaW5nTGlrZSk6IHZvaWQ7XG4gIGZvcihcbiAgICBtZXRob2Q/OiBzdHJpbmcgfCAoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpLFxuICAgIGNvbmZpZz86IFBhcnRpYWw8TG9nZ2luZ0NvbmZpZz5cbiAgKTogVmVyYm9zaXR5TG9nZ2VyO1xuXG4gIHNldENvbmZpZyhjb25maWc6IFBhcnRpYWw8TG9nZ2luZ0NvbmZpZz4pOiB2b2lkO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb25maWd1cmF0aW9uIGZvciBsb2dnaW5nLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgbG9nIGxldmVsIGFuZCB2ZXJib3NpdHkgZm9yIGxvZ2dpbmcuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMb2dnaW5nQ29uZmlnXG4gKiBAcHJvcGVydHkge0xvZ0xldmVsfSBsZXZlbCAtIFRoZSBsb2dnaW5nIGxldmVsLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHZlcmJvc2UgLSBUaGUgdmVyYm9zaXR5IGxldmVsLlxuICogQG1lbWJlck9mIEBkZWNhZi10cy91dGlsc1xuICovXG5leHBvcnQgdHlwZSBMb2dnaW5nQ29uZmlnID0ge1xuICBsZXZlbDogTG9nTGV2ZWw7XG4gIGxvZ0xldmVsPzogYm9vbGVhbjtcbiAgdmVyYm9zZTogbnVtYmVyO1xuICBzZXBhcmF0b3I6IHN0cmluZztcbiAgc3R5bGU/OiBib29sZWFuO1xuICB0aW1lc3RhbXA/OiBib29sZWFuO1xuICB0aW1lc3RhbXBGb3JtYXQ/OiBzdHJpbmc7XG4gIGNvbnRleHQ/OiBib29sZWFuO1xuICB0aGVtZT86IFRoZW1lO1xufTtcblxuLyoqXG4gLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwcmVzZW50cyBhIHRoZW1lIG9wdGlvbiBmb3IgY29uc29sZSBvdXRwdXQgc3R5bGluZy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHN0cnVjdHVyZSBmb3Igc3R5bGluZyBhIHNwZWNpZmljIGVsZW1lbnQgaW4gdGhlIGNvbnNvbGUgb3V0cHV0LlxuICogSXQgYWxsb3dzIGZvciBjdXN0b21pemF0aW9uIG9mIGZvcmVncm91bmQgY29sb3IsIGJhY2tncm91bmQgY29sb3IsIGFuZCBhZGRpdGlvbmFsIHN0eWxlcy5cbiAqIENvbG9ycyBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgc2luZ2xlIG51bWJlciwgYW4gUkdCIGFycmF5LCBvciBsZWZ0IHVuZGVmaW5lZCBmb3IgZGVmYXVsdC5cbiAqXG4gKiBAaW50ZXJmYWNlIFRoZW1lT3B0aW9uXG4gKiBAbWVtYmVyT2YgQGRlY2FmLXRzL3V0aWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWVPcHRpb24ge1xuICBmZz86IG51bWJlciB8IFtudW1iZXJdIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG4gIGJnPzogbnVtYmVyIHwgW251bWJlcl0gfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbiAgc3R5bGU/OiBudW1iZXJbXSB8IFtrZXlvZiB0eXBlb2Ygc3R5bGVzXTtcbn1cblxuZXhwb3J0IHR5cGUgVGhlbWVPcHRpb25CeUxvZ0xldmVsID0gUGFydGlhbDxSZWNvcmQ8TG9nTGV2ZWwsIFRoZW1lT3B0aW9uPj47XG5cbi8qKlxuIC8qKlxuICogQGRlc2NyaXB0aW9uIERlZmluZXMgdGhlIGNvbG9yIHRoZW1lIGZvciBjb25zb2xlIG91dHB1dC5cbiAqIEBzdW1tYXJ5IFRoaXMgaW50ZXJmYWNlIHNwZWNpZmllcyB0aGUgY29sb3Igc2NoZW1lIGZvciB2YXJpb3VzIGVsZW1lbnRzIG9mIGNvbnNvbGUgb3V0cHV0LFxuICogaW5jbHVkaW5nIHN0eWxpbmcgZm9yIGRpZmZlcmVudCBsb2cgbGV2ZWxzIGFuZCBjb21wb25lbnRzLiBJdCB1c2VzIFRoZW1lT3B0aW9uIHRvXG4gKiBkZWZpbmUgdGhlIHN0eWxpbmcgZm9yIGVhY2ggZWxlbWVudCwgYWxsb3dpbmcgZm9yIGN1c3RvbWl6YXRpb24gb2YgY29sb3JzIGFuZCBzdHlsZXNcbiAqIGZvciBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGxvZyBvdXRwdXQuXG4gKlxuICogQGludGVyZmFjZSBUaGVtZVxuICogQG1lbWJlck9mIEBkZWNhZi10cy91dGlsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW1lIHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdHlsaW5nIGZvciBjbGFzcyBuYW1lcyBpbiB0aGUgb3V0cHV0LlxuICAgKi9cbiAgY2xhc3M6IFRoZW1lT3B0aW9uIHwgVGhlbWVPcHRpb25CeUxvZ0xldmVsO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3R5bGluZyBmb3IgdGltZXN0YW1wcyBpbiB0aGUgb3V0cHV0LlxuICAgKi9cbiAgdGltZXN0YW1wOiBUaGVtZU9wdGlvbiB8IFRoZW1lT3B0aW9uQnlMb2dMZXZlbDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0eWxpbmcgZm9yIHRoZSBtYWluIG1lc3NhZ2UgdGV4dCBpbiB0aGUgb3V0cHV0LlxuICAgKi9cbiAgbWVzc2FnZTogVGhlbWVPcHRpb24gfCBUaGVtZU9wdGlvbkJ5TG9nTGV2ZWw7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdHlsaW5nIGZvciBtZXRob2QgbmFtZXMgaW4gdGhlIG91dHB1dC5cbiAgICovXG4gIG1ldGhvZDogVGhlbWVPcHRpb24gfCBUaGVtZU9wdGlvbkJ5TG9nTGV2ZWw7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdHlsaW5nIGZvciBpZGVudGlmaWVyIGVsZW1lbnRzIGluIHRoZSBvdXRwdXQuXG4gICAqL1xuICBpZDogVGhlbWVPcHRpb24gfCBUaGVtZU9wdGlvbkJ5TG9nTGV2ZWw7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdHlsaW5nIGZvciBpZGVudGlmaWVyIGVsZW1lbnRzIGluIHRoZSBvdXRwdXQuXG4gICAqL1xuICBzdGFjazogVGhlbWVPcHRpb247XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdHlsaW5nIGZvciBkaWZmZXJlbnQgbG9nIGxldmVscyBpbiB0aGUgb3V0cHV0LlxuICAgKi9cbiAgbG9nTGV2ZWw6IFRoZW1lT3B0aW9uQnlMb2dMZXZlbDtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwcmVzZW50cyBhIGNvbG9yIGZ1bmN0aW9uIGluIHRoZSBLbGV1ciBsaWJyYXJ5LlxuICogQHN1bW1hcnkgVGhlIENvbG9yIGludGVyZmFjZSBkZWZpbmVzIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgY2FsbGVkIHdpdGggb3Igd2l0aG91dCBhcmd1bWVudHNcbiAqIHRvIGFwcGx5IGNvbG9yIHN0eWxpbmcgdG8gdGV4dCBvciBjaGFpbiBtdWx0aXBsZSBjb2xvciBvcGVyYXRpb25zLlxuICpcbiAqIEBpbnRlcmZhY2UgQ29sb3JcbiAqIEBtZW1iZXJPZiBtb2R1bGU6QGRlY2FmLXRzL3V0aWxzXG4gKiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2xvciB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXBwbGllcyB0aGUgY29sb3IgdG8gdGhlIGdpdmVuIHRleHQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSB4IC0gVGhlIHRleHQgb3IgbnVtYmVyIHRvIGJlIGNvbG9yZWQuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbG9yZWQgdGV4dC5cbiAgICovXG4gICh4OiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBbGxvd3MgY2hhaW5pbmcgb2YgbXVsdGlwbGUgY29sb3Igb3BlcmF0aW9ucy5cbiAgICogQHJldHVybiB7S2xldXJ9IFRoZSBLbGV1ciBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgKCk6IEtsZXVyO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXByZXNlbnRzIHRoZSBtYWluIEtsZXVyIGludGVyZmFjZSB3aXRoIGFsbCBhdmFpbGFibGUgY29sb3IgYW5kIHN0eWxlIG1ldGhvZHMuXG4gKiBAc3VtbWFyeSBUaGUgS2xldXIgaW50ZXJmYWNlIHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFwcGx5aW5nIHZhcmlvdXMgY29sb3JzLCBiYWNrZ3JvdW5kIGNvbG9ycyxcbiAqIGFuZCB0ZXh0IHN0eWxlcyB0byBzdHJpbmdzIGluIHRlcm1pbmFsIG91dHB1dC5cbiAqXG4gKiBAaW50ZXJmYWNlIEtsZXVyXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkBkZWNhZi10cy91dGlsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEtsZXVyIHtcbiAgLy8gQ29sb3JzXG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyBibGFjayBjb2xvciB0byB0aGUgdGV4dC4gKi9cbiAgYmxhY2s6IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgcmVkIGNvbG9yIHRvIHRoZSB0ZXh0LiAqL1xuICByZWQ6IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgZ3JlZW4gY29sb3IgdG8gdGhlIHRleHQuICovXG4gIGdyZWVuOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHllbGxvdyBjb2xvciB0byB0aGUgdGV4dC4gKi9cbiAgeWVsbG93OiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGJsdWUgY29sb3IgdG8gdGhlIHRleHQuICovXG4gIGJsdWU6IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgbWFnZW50YSBjb2xvciB0byB0aGUgdGV4dC4gKi9cbiAgbWFnZW50YTogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyBjeWFuIGNvbG9yIHRvIHRoZSB0ZXh0LiAqL1xuICBjeWFuOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHdoaXRlIGNvbG9yIHRvIHRoZSB0ZXh0LiAqL1xuICB3aGl0ZTogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyBncmF5IGNvbG9yIHRvIHRoZSB0ZXh0LiAqL1xuICBncmF5OiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBbGlhcyBmb3IgZ3JheSBjb2xvci4gKi9cbiAgZ3JleTogQ29sb3I7XG5cbiAgLy8gQmFja2dyb3VuZHNcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGJsYWNrIGJhY2tncm91bmQgdG8gdGhlIHRleHQuICovXG4gIGJnQmxhY2s6IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgcmVkIGJhY2tncm91bmQgdG8gdGhlIHRleHQuICovXG4gIGJnUmVkOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGdyZWVuIGJhY2tncm91bmQgdG8gdGhlIHRleHQuICovXG4gIGJnR3JlZW46IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgeWVsbG93IGJhY2tncm91bmQgdG8gdGhlIHRleHQuICovXG4gIGJnWWVsbG93OiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGJsdWUgYmFja2dyb3VuZCB0byB0aGUgdGV4dC4gKi9cbiAgYmdCbHVlOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIG1hZ2VudGEgYmFja2dyb3VuZCB0byB0aGUgdGV4dC4gKi9cbiAgYmdNYWdlbnRhOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGN5YW4gYmFja2dyb3VuZCB0byB0aGUgdGV4dC4gKi9cbiAgYmdDeWFuOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHdoaXRlIGJhY2tncm91bmQgdG8gdGhlIHRleHQuICovXG4gIGJnV2hpdGU6IENvbG9yO1xuXG4gIC8vIE1vZGlmaWVyc1xuICAvKiogQGRlc2NyaXB0aW9uIFJlc2V0cyBhbGwgYXBwbGllZCBzdHlsZXMuICovXG4gIHJlc2V0OiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGJvbGQgc3R5bGUgdG8gdGhlIHRleHQuICovXG4gIGJvbGQ6IENvbG9yO1xuICAvKiogQGRlc2NyaXB0aW9uIEFwcGxpZXMgZGltIChkZWNyZWFzZWQgaW50ZW5zaXR5KSBzdHlsZSB0byB0aGUgdGV4dC4gKi9cbiAgZGltOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGl0YWxpYyBzdHlsZSB0byB0aGUgdGV4dC4gKi9cbiAgaXRhbGljOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHVuZGVybGluZSBzdHlsZSB0byB0aGUgdGV4dC4gKi9cbiAgdW5kZXJsaW5lOiBDb2xvcjtcbiAgLyoqIEBkZXNjcmlwdGlvbiBJbnZlcnRzIHRoZSBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycy4gKi9cbiAgaW52ZXJzZTogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gSGlkZXMgdGhlIHRleHQgKHNhbWUgY29sb3IgYXMgYmFja2dyb3VuZCkuICovXG4gIGhpZGRlbjogQ29sb3I7XG4gIC8qKiBAZGVzY3JpcHRpb24gQXBwbGllcyBzdHJpa2V0aHJvdWdoIHN0eWxlIHRvIHRoZSB0ZXh0LiAqL1xuICBzdHJpa2V0aHJvdWdoOiBDb2xvcjtcbn1cbiJdfQ==