@discordeno/utils 19.0.0-next.96ecfcc → 19.0.0-next.97be09d

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +6 -10
  2. package/dist/cjs/Collection.cjs +123 -0
  3. package/dist/cjs/base64.cjs +276 -0
  4. package/dist/cjs/bucket.cjs +95 -0
  5. package/dist/cjs/builders/embeds.cjs +292 -0
  6. package/dist/cjs/builders.cjs +27 -0
  7. package/dist/cjs/casing.cjs +75 -0
  8. package/dist/cjs/colors.cjs +456 -0
  9. package/dist/cjs/hash.cjs +37 -0
  10. package/dist/cjs/images.cjs +133 -0
  11. package/dist/cjs/index.cjs +35 -0
  12. package/dist/cjs/logger.cjs +157 -0
  13. package/dist/cjs/oauth2.cjs +26 -0
  14. package/dist/cjs/permissions.cjs +35 -0
  15. package/dist/cjs/reactions.cjs +21 -0
  16. package/dist/cjs/token.cjs +39 -0
  17. package/dist/cjs/typeguards.cjs +45 -0
  18. package/dist/cjs/urlToBase64.cjs +19 -0
  19. package/dist/cjs/utils.cjs +30 -0
  20. package/dist/esm/Collection.js +113 -0
  21. package/dist/esm/base64.js +262 -0
  22. package/dist/esm/bucket.js +80 -0
  23. package/dist/esm/builders/embeds.js +295 -0
  24. package/dist/esm/builders.js +5 -0
  25. package/dist/esm/casing.js +51 -0
  26. package/dist/esm/colors.js +467 -0
  27. package/dist/esm/hash.js +19 -0
  28. package/dist/esm/images.js +176 -0
  29. package/dist/esm/index.js +18 -0
  30. package/dist/esm/logger.js +130 -0
  31. package/dist/esm/oauth2.js +16 -0
  32. package/dist/esm/permissions.js +17 -0
  33. package/dist/esm/reactions.js +11 -0
  34. package/dist/esm/token.js +21 -0
  35. package/dist/esm/typeguards.js +18 -0
  36. package/dist/esm/urlToBase64.js +9 -0
  37. package/dist/esm/utils.js +15 -0
  38. package/dist/{Collection.d.ts → types/Collection.d.ts} +2 -2
  39. package/dist/types/Collection.d.ts.map +1 -0
  40. package/dist/types/base64.d.ts.map +1 -0
  41. package/dist/types/bucket.d.ts +43 -0
  42. package/dist/types/bucket.d.ts.map +1 -0
  43. package/dist/types/builders/embeds.d.ts +146 -0
  44. package/dist/types/builders/embeds.d.ts.map +1 -0
  45. package/dist/types/builders.d.ts +4 -0
  46. package/dist/types/builders.d.ts.map +1 -0
  47. package/dist/types/casing.d.ts +6 -0
  48. package/dist/types/casing.d.ts.map +1 -0
  49. package/dist/{colors.d.ts → types/colors.d.ts} +6 -2
  50. package/dist/types/colors.d.ts.map +1 -0
  51. package/dist/types/hash.d.ts.map +1 -0
  52. package/dist/types/images.d.ts +201 -0
  53. package/dist/types/images.d.ts.map +1 -0
  54. package/dist/{index.d.ts → types/index.d.ts} +3 -2
  55. package/dist/types/index.d.ts.map +1 -0
  56. package/dist/types/logger.d.ts.map +1 -0
  57. package/dist/types/oauth2.d.ts +58 -0
  58. package/dist/types/oauth2.d.ts.map +1 -0
  59. package/dist/types/permissions.d.ts.map +1 -0
  60. package/dist/types/reactions.d.ts.map +1 -0
  61. package/dist/{token.d.ts → types/token.d.ts} +1 -1
  62. package/dist/types/token.d.ts.map +1 -0
  63. package/dist/{typeguards.d.ts → types/typeguards.d.ts} +2 -1
  64. package/dist/types/typeguards.d.ts.map +1 -0
  65. package/dist/types/urlToBase64.d.ts.map +1 -0
  66. package/dist/types/utils.d.ts.map +1 -0
  67. package/package.json +24 -18
  68. package/dist/Collection.d.ts.map +0 -1
  69. package/dist/Collection.js +0 -2
  70. package/dist/base64.d.ts.map +0 -1
  71. package/dist/base64.js +0 -2
  72. package/dist/bucket.d.ts +0 -55
  73. package/dist/bucket.d.ts.map +0 -1
  74. package/dist/bucket.js +0 -2
  75. package/dist/casing.d.ts +0 -5
  76. package/dist/casing.d.ts.map +0 -1
  77. package/dist/casing.js +0 -2
  78. package/dist/colors.d.ts.map +0 -1
  79. package/dist/colors.js +0 -2
  80. package/dist/files.d.ts +0 -4
  81. package/dist/files.d.ts.map +0 -1
  82. package/dist/files.js +0 -2
  83. package/dist/hash.d.ts.map +0 -1
  84. package/dist/hash.js +0 -2
  85. package/dist/images.d.ts +0 -68
  86. package/dist/images.d.ts.map +0 -1
  87. package/dist/images.js +0 -2
  88. package/dist/index.d.ts.map +0 -1
  89. package/dist/index.js +0 -2
  90. package/dist/logger.d.ts.map +0 -1
  91. package/dist/logger.js +0 -2
  92. package/dist/permissions.d.ts.map +0 -1
  93. package/dist/permissions.js +0 -2
  94. package/dist/reactions.d.ts.map +0 -1
  95. package/dist/reactions.js +0 -2
  96. package/dist/token.d.ts.map +0 -1
  97. package/dist/token.js +0 -2
  98. package/dist/typeguards.d.ts.map +0 -1
  99. package/dist/typeguards.js +0 -2
  100. package/dist/urlToBase64.d.ts.map +0 -1
  101. package/dist/urlToBase64.js +0 -2
  102. package/dist/utils.d.ts.map +0 -1
  103. package/dist/utils.js +0 -2
  104. /package/dist/{base64.d.ts → types/base64.d.ts} +0 -0
  105. /package/dist/{hash.d.ts → types/hash.d.ts} +0 -0
  106. /package/dist/{logger.d.ts → types/logger.d.ts} +0 -0
  107. /package/dist/{permissions.d.ts → types/permissions.d.ts} +0 -0
  108. /package/dist/{reactions.d.ts → types/reactions.d.ts} +0 -0
  109. /package/dist/{urlToBase64.d.ts → types/urlToBase64.d.ts} +0 -0
  110. /package/dist/{utils.d.ts → types/utils.d.ts} +0 -0
@@ -0,0 +1,292 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "EmbedsBuilder", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return EmbedsBuilder;
9
+ }
10
+ });
11
+ let EmbedsBuilder = class EmbedsBuilder extends Array {
12
+ #currentEmbedIndex;
13
+ /**
14
+ * Adds a new field to the embed fields array.
15
+ *
16
+ * @param {string} name - Field name
17
+ * @param {string} value - Field value
18
+ * @param {?boolean} [inline=false] - Field should be inline or not.
19
+ * @returns {EmbedsBuilder}
20
+ */ addField(name, value, inline) {
21
+ if (this.#currentEmbed.fields === undefined) {
22
+ this.#currentEmbed.fields = [];
23
+ }
24
+ this.#currentEmbed.fields.push({
25
+ name,
26
+ value,
27
+ inline
28
+ });
29
+ return this;
30
+ }
31
+ /**
32
+ * Creates a blank embed.
33
+ *
34
+ * @returns {EmbedsBuilder}
35
+ */ newEmbed() {
36
+ if (this.length >= 10) {
37
+ throw new Error('Maximum embed count exceeded. You can not have more than 10 embeds.');
38
+ }
39
+ this.push({});
40
+ this.setCurrentEmbed();
41
+ return this;
42
+ }
43
+ /**
44
+ * Set the current embed author.
45
+ *
46
+ * @param {string} name - Name of the author
47
+ * @param {?Omit<DiscordEmbedAuthor, 'name'>} [options] - Extra author options
48
+ * @returns {EmbedsBuilder}
49
+ */ setAuthor(name, options) {
50
+ this.#currentEmbed.author = {
51
+ ...this.#currentEmbed.author,
52
+ ...options,
53
+ name
54
+ };
55
+ return this;
56
+ }
57
+ /**
58
+ * Set the color on the side of the current embed.
59
+ *
60
+ * @param {(number | string)} color - The color, in base16 or hex color code
61
+ * @returns {EmbedsBuilder}
62
+ */ setColor(color) {
63
+ if (typeof color === 'string') {
64
+ const convertedValue = parseInt(color.replace('#', ''), 16);
65
+ color = Number.isNaN(convertedValue) ? 0 : convertedValue;
66
+ }
67
+ this.#currentEmbed.color = color;
68
+ return this;
69
+ }
70
+ /**
71
+ * Set the current embed to a different index.
72
+ *
73
+ * WARNING: Only use this method if you know what you're doing. Make sure to set it back to the latest when you're done.
74
+ *
75
+ * @param {?number} [index] - The index of the embed in the EmbedsBuilder array
76
+ * @returns {EmbedsBuilder}
77
+ */ setCurrentEmbed(index) {
78
+ if (index === undefined) {
79
+ this.#currentEmbedIndex = this.length - 1;
80
+ return this;
81
+ }
82
+ if (index >= this.length || index < 0) {
83
+ throw new Error('Can not set the current embed to a index out of bounds.');
84
+ }
85
+ this.#currentEmbedIndex = index;
86
+ return this;
87
+ }
88
+ /**
89
+ * Set the description of the current embed.
90
+ *
91
+ * @param {string} description - Description
92
+ * @returns {EmbedsBuilder}
93
+ */ setDescription(description) {
94
+ this.#currentEmbed.description = description;
95
+ return this;
96
+ }
97
+ /**
98
+ * Overwrite all fields on the current embed.
99
+ *
100
+ * @param {DiscordEmbedField[]} fields
101
+ * @returns {EmbedsBuilder}
102
+ */ setFields(fields) {
103
+ this.#currentEmbed.fields = fields;
104
+ return this;
105
+ }
106
+ /**
107
+ * Set the footer in the current embed.
108
+ *
109
+ * @param {string} text - The text to display in the footer
110
+ * @param {?Omit<DiscordEmbedFooter, 'text'>} [options]
111
+ * @returns {EmbedsBuilder}
112
+ */ setFooter(text, options) {
113
+ this.#currentEmbed.footer = {
114
+ ...this.#currentEmbed.footer,
115
+ ...options,
116
+ text
117
+ };
118
+ return this;
119
+ }
120
+ /**
121
+ * Set the image in the current embed.
122
+ *
123
+ * @param {string} url - URL of the image
124
+ * @param {?Omit<DiscordEmbedImage, 'url'>} [options]
125
+ * @returns {EmbedsBuilder}
126
+ */ setImage(url, options) {
127
+ this.#currentEmbed.image = {
128
+ ...this.#currentEmbed.image,
129
+ ...options,
130
+ url
131
+ };
132
+ return this;
133
+ }
134
+ /**
135
+ * Set the provider of the current embed.
136
+ *
137
+ * @param {string} name
138
+ * @param {?string} [url]
139
+ * @returns {EmbedsBuilder}
140
+ */ setProvider(name, url) {
141
+ this.#currentEmbed.provider = {
142
+ name,
143
+ url
144
+ };
145
+ return this;
146
+ }
147
+ /**
148
+ * Set the color of the current embed to a random value.
149
+ *
150
+ * @returns {EmbedsBuilder}
151
+ */ setRandomColor() {
152
+ return this.setColor(Math.floor(Math.random() * (0xffffff + 1)));
153
+ }
154
+ /**
155
+ * Set the title of the current embed.
156
+ *
157
+ * @param {string} title
158
+ * @param {?string} [url]
159
+ * @returns {EmbedsBuilder}
160
+ */ setTitle(title, url) {
161
+ this.#currentEmbed.title = title;
162
+ if (url) {
163
+ this.setUrl(url);
164
+ }
165
+ return this;
166
+ }
167
+ /**
168
+ * Set the timestamp of the current embed.
169
+ *
170
+ * @param {?(string | number | Date)} [timestamp]
171
+ * @returns {EmbedsBuilder}
172
+ */ setTimestamp(timestamp) {
173
+ this.#currentEmbed.timestamp = new Date(timestamp).toISOString();
174
+ return this;
175
+ }
176
+ /**
177
+ * Set the thumbnail of the current embed.
178
+ *
179
+ * @param {string} url - URL of the image
180
+ * @param {?Omit<DiscordEmbedThumbnail, 'url'>} [options]
181
+ * @returns {EmbedsBuilder}
182
+ */ setThumbnail(url, options) {
183
+ this.#currentEmbed.thumbnail = {
184
+ ...this.#currentEmbed.thumbnail,
185
+ ...options,
186
+ url
187
+ };
188
+ return this;
189
+ }
190
+ /**
191
+ * Set the URL of the current embed title.
192
+ *
193
+ * @param {string} url
194
+ * @returns {EmbedsBuilder}
195
+ */ setUrl(url) {
196
+ this.#currentEmbed.url = url;
197
+ return this;
198
+ }
199
+ /**
200
+ * Set the video of the current embed.
201
+ *
202
+ * @param {string} url
203
+ * @param {?Omit<DiscordEmbedVideo, 'url'>} [options]
204
+ * @returns {EmbedsBuilder}
205
+ */ setVideo(url, options) {
206
+ this.#currentEmbed.video = {
207
+ ...this.#currentEmbed.video,
208
+ ...options,
209
+ url
210
+ };
211
+ return this;
212
+ }
213
+ /**
214
+ * Validate all embeds available against current known Discord limits to help prevent bad requests.
215
+ *
216
+ * @returns {EmbedsBuilder}
217
+ */ validate() {
218
+ let totalCharacters = 0;
219
+ if (this.length > 10) {
220
+ throw new Error('You can not have more than 10 embeds on a single message.');
221
+ }
222
+ this.forEach(({ author, description, fields, footer, title }, index)=>{
223
+ if (title) {
224
+ const trimmedTitle = title.trim();
225
+ if (trimmedTitle.length > 256) {
226
+ throw new Error(`Title of embed ${index} can not be longer than 256 characters.`);
227
+ }
228
+ totalCharacters += trimmedTitle.length;
229
+ }
230
+ if (description) {
231
+ const trimmedDescription = description.trim();
232
+ if (trimmedDescription.length > 4096) {
233
+ throw new Error(`Description of embed ${index} can not be longer than 4096 characters.`);
234
+ }
235
+ totalCharacters += trimmedDescription.length;
236
+ }
237
+ if (fields) {
238
+ if (fields.length > 25) {
239
+ throw new Error(`embed ${index} can not have more than 25 fields.`);
240
+ }
241
+ fields.forEach(({ name, value }, fieldIndex)=>{
242
+ const trimmedName = name.trim();
243
+ const trimmedValue = value.trim();
244
+ if (trimmedName.length > 256) {
245
+ throw new Error(`Name of field ${fieldIndex} on embed ${index} can not be longer than 256 characters.`);
246
+ }
247
+ if (trimmedValue.length > 4096) {
248
+ throw new Error(`Value of field ${fieldIndex} on embed ${index} can not be longer than 1024 characters.`);
249
+ }
250
+ totalCharacters += trimmedName.length;
251
+ totalCharacters += trimmedValue.length;
252
+ });
253
+ }
254
+ if (footer) {
255
+ const trimmedFooterText = footer.text.trim();
256
+ if (trimmedFooterText.length > 2048) {
257
+ throw new Error(`Footer text of embed ${index} can not be longer than 2048 characters.`);
258
+ }
259
+ totalCharacters += trimmedFooterText.length;
260
+ }
261
+ if (author) {
262
+ const trimmedAuthorName = author.name.trim();
263
+ if (trimmedAuthorName.length > 256) {
264
+ throw new Error(`Author name of embed ${index} can not be longer than 256 characters.`);
265
+ }
266
+ totalCharacters += trimmedAuthorName.length;
267
+ }
268
+ });
269
+ if (totalCharacters > 6000) {
270
+ throw new Error('Total character length of all embeds can not exceed 6000 characters.');
271
+ }
272
+ return this;
273
+ }
274
+ /**
275
+ * Returns the current embed.
276
+ *
277
+ * @readonly
278
+ * @type {DiscordEmbed}
279
+ */ get #currentEmbed() {
280
+ if (this.length === 0) {
281
+ this.newEmbed();
282
+ this.setCurrentEmbed();
283
+ }
284
+ return this[this.#currentEmbedIndex];
285
+ }
286
+ constructor(...args){
287
+ super(...args);
288
+ this.#currentEmbedIndex = 0;
289
+ }
290
+ };
291
+
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9idWlsZGVycy9lbWJlZHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBEaXNjb3JkRW1iZWQsXG4gIERpc2NvcmRFbWJlZEF1dGhvcixcbiAgRGlzY29yZEVtYmVkRmllbGQsXG4gIERpc2NvcmRFbWJlZEZvb3RlcixcbiAgRGlzY29yZEVtYmVkSW1hZ2UsXG4gIERpc2NvcmRFbWJlZFRodW1ibmFpbCxcbiAgRGlzY29yZEVtYmVkVmlkZW8sXG59IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuXG4vKipcbiAqIEEgYnVpbGRlciB0byBoZWxwIGNyZWF0ZSBEaXNjb3JkIGVtYmVkcy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgRW1iZWRzQnVpbGRlclxuICogQHR5cGVkZWYge0VtYmVkc0J1aWxkZXJ9XG4gKiBAZXh0ZW5kcyB7QXJyYXk8RGlzY29yZEVtYmVkPn1cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBlbWJlZHMgPSBuZXcgRW1iZWRCdWlsZGVyKClcbiAqICAuc2V0VGl0bGUoJ015IEVtYmVkJylcbiAqICAuc2V0RGVzY3JpcHRpb24oJ1RoaXMgaXMgbXkgbmV3IGVtYmVkJylcbiAqICAubmV3RW1iZWQoKVxuICogIC5zZXRUaXRsZSgnTXkgU2Vjb25kIEVtYmVkJylcbiAqL1xuZXhwb3J0IGNsYXNzIEVtYmVkc0J1aWxkZXIgZXh0ZW5kcyBBcnJheTxEaXNjb3JkRW1iZWQ+IHtcbiAgI2N1cnJlbnRFbWJlZEluZGV4OiBudW1iZXIgPSAwXG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZmllbGQgdG8gdGhlIGVtYmVkIGZpZWxkcyBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBGaWVsZCBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIEZpZWxkIHZhbHVlXG4gICAqIEBwYXJhbSB7P2Jvb2xlYW59IFtpbmxpbmU9ZmFsc2VdIC0gRmllbGQgc2hvdWxkIGJlIGlubGluZSBvciBub3QuXG4gICAqIEByZXR1cm5zIHtFbWJlZHNCdWlsZGVyfVxuICAgKi9cbiAgYWRkRmllbGQobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBpbmxpbmU/OiBib29sZWFuKTogRW1iZWRzQnVpbGRlciB7XG4gICAgaWYgKHRoaXMuI2N1cnJlbnRFbWJlZC5maWVsZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy4jY3VycmVudEVtYmVkLmZpZWxkcyA9IFtdXG4gICAgfVxuXG4gICAgdGhpcy4jY3VycmVudEVtYmVkLmZpZWxkcy5wdXNoKHtcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIGlubGluZSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgYmxhbmsgZW1iZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtFbWJlZHNCdWlsZGVyfVxuICAgKi9cbiAgbmV3RW1iZWQoKTogRW1iZWRzQnVpbGRlciB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID49IDEwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01heGltdW0gZW1iZWQgY291bnQgZXhjZWVkZWQuIFlvdSBjYW4gbm90IGhhdmUgbW9yZSB0aGFuIDEwIGVtYmVkcy4nKVxuICAgIH1cblxuICAgIHRoaXMucHVzaCh7fSlcbiAgICB0aGlzLnNldEN1cnJlbnRFbWJlZCgpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCBlbWJlZCBhdXRob3IuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgYXV0aG9yXG4gICAqIEBwYXJhbSB7P09taXQ8RGlzY29yZEVtYmVkQXV0aG9yLCAnbmFtZSc+fSBbb3B0aW9uc10gLSBFeHRyYSBhdXRob3Igb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7RW1iZWRzQnVpbGRlcn1cbiAgICovXG4gIHNldEF1dGhvcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PERpc2NvcmRFbWJlZEF1dGhvciwgJ25hbWUnPik6IEVtYmVkc0J1aWxkZXIge1xuICAgIHRoaXMuI2N1cnJlbnRFbWJlZC5hdXRob3IgPSB7XG4gICAgICAuLi50aGlzLiNjdXJyZW50RW1iZWQuYXV0aG9yLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG5hbWUsXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbG9yIG9uIHRoZSBzaWRlIG9mIHRoZSBjdXJyZW50IGVtYmVkLlxuICAgKlxuICAgKiBAcGFyYW0geyhudW1iZXIgfCBzdHJpbmcpfSBjb2xvciAtIFRoZSBjb2xvciwgaW4gYmFzZTE2IG9yIGhleCBjb2xvciBjb2RlXG4gICAqIEByZXR1cm5zIHtFbWJlZHNCdWlsZGVyfVxuICAgKi9cbiAgc2V0Q29sb3IoY29sb3I6IG51bWJlciB8IHN0cmluZyk6IEVtYmVkc0J1aWxkZXIge1xuICAgIGlmICh0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBjb252ZXJ0ZWRWYWx1ZSA9IHBhcnNlSW50KGNvbG9yLnJlcGxhY2UoJyMnLCAnJyksIDE2KVxuICAgICAgY29sb3IgPSBOdW1iZXIuaXNOYU4oY29udmVydGVkVmFsdWUpID8gMCA6IGNvbnZlcnRlZFZhbHVlXG4gICAgfVxuXG4gICAgdGhpcy4jY3VycmVudEVtYmVkLmNvbG9yID0gY29sb3JcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjdXJyZW50IGVtYmVkIHRvIGEgZGlmZmVyZW50IGluZGV4LlxuICAgKlxuICAgKiBXQVJOSU5HOiBPbmx5IHVzZSB0aGlzIG1ldGhvZCBpZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy4gTWFrZSBzdXJlIHRvIHNldCBpdCBiYWNrIHRvIHRoZSBsYXRlc3Qgd2hlbiB5b3UncmUgZG9uZS5cbiAgICpcbiAgICogQHBhcmFtIHs/bnVtYmVyfSBbaW5kZXhdIC0gVGhlIGluZGV4IG9mIHRoZSBlbWJlZCBpbiB0aGUgRW1iZWRzQnVpbGRlciBhcnJheVxuICAgKiBAcmV0dXJucyB7RW1iZWRzQnVpbGRlcn1cbiAgICovXG4gIHNldEN1cnJlbnRFbWJlZChpbmRleD86IG51bWJlcik6IEVtYmVkc0J1aWxkZXIge1xuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLiNjdXJyZW50RW1iZWRJbmRleCA9IHRoaXMubGVuZ3RoIC0gMVxuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGlmIChpbmRleCA+PSB0aGlzLmxlbmd0aCB8fCBpbmRleCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBzZXQgdGhlIGN1cnJlbnQgZW1iZWQgdG8gYSBpbmRleCBvdXQgb2YgYm91bmRzLicpXG4gICAgfVxuXG4gICAgdGhpcy4jY3VycmVudEVtYmVkSW5kZXggPSBpbmRleFxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjdXJyZW50IGVtYmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb24gLSBEZXNjcmlwdGlvblxuICAgKiBAcmV0dXJucyB7RW1iZWRzQnVpbGRlcn1cbiAgICovXG4gIHNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBFbWJlZHNCdWlsZGVyIHtcbiAgICB0aGlzLiNjdXJyZW50RW1iZWQuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvblxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVyd3JpdGUgYWxsIGZpZWxkcyBvbiB0aGUgY3VycmVudCBlbWJlZC5cbiAgICpcbiAgICogQHBhcmFtIHtEaXNjb3JkRW1iZWRGaWVsZFtdfSBmaWVsZHNcbiAgICogQHJldHVybnMge0VtYmVkc0J1aWxkZXJ9XG4gICAqL1xuICBzZXRGaWVsZHMoZmllbGRzOiBEaXNjb3JkRW1iZWRGaWVsZFtdKTogRW1iZWRzQnVpbGRlciB7XG4gICAgdGhpcy4jY3VycmVudEVtYmVkLmZpZWxkcyA9IGZpZWxkc1xuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGZvb3RlciBpbiB0aGUgY3VycmVudCBlbWJlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCB0byBkaXNwbGF5IGluIHRoZSBmb290ZXJcbiAgICogQHBhcmFtIHs/T21pdDxEaXNjb3JkRW1iZWRGb290ZXIsICd0ZXh0Jz59IFtvcHRpb25zXVxuICAgKiBAcmV0dXJucyB7RW1iZWRzQnVpbGRlcn1cbiAgICovXG4gIHNldEZvb3Rlcih0ZXh0OiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PERpc2NvcmRFbWJlZEZvb3RlciwgJ3RleHQnPik6IEVtYmVkc0J1aWxkZXIge1xuICAgIHRoaXMuI2N1cnJlbnRFbWJlZC5mb290ZXIgPSB7XG4gICAgICAuLi50aGlzLiNjdXJyZW50RW1iZWQuZm9vdGVyLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHRleHQsXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGltYWdlIGluIHRoZSBjdXJyZW50IGVtYmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gVVJMIG9mIHRoZSBpbWFnZVxuICAgKiBAcGFyYW0gez9PbWl0PERpc2NvcmRFbWJlZEltYWdlLCAndXJsJz59IFtvcHRpb25zXVxuICAgKiBAcmV0dXJucyB7RW1iZWRzQnVpbGRlcn1cbiAgICovXG4gIHNldEltYWdlKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxEaXNjb3JkRW1iZWRJbWFnZSwgJ3VybCc+KTogRW1iZWRzQnVpbGRlciB7XG4gICAgdGhpcy4jY3VycmVudEVtYmVkLmltYWdlID0ge1xuICAgICAgLi4udGhpcy4jY3VycmVudEVtYmVkLmltYWdlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHVybCxcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcHJvdmlkZXIgb2YgdGhlIGN1cnJlbnQgZW1iZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gW3VybF1cbiAgICogQHJldHVybnMge0VtYmVkc0J1aWxkZXJ9XG4gICAqL1xuICBzZXRQcm92aWRlcihuYW1lOiBzdHJpbmcsIHVybD86IHN0cmluZyk6IEVtYmVkc0J1aWxkZXIge1xuICAgIHRoaXMuI2N1cnJlbnRFbWJlZC5wcm92aWRlciA9IHtcbiAgICAgIG5hbWUsXG4gICAgICB1cmwsXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGNvbG9yIG9mIHRoZSBjdXJyZW50IGVtYmVkIHRvIGEgcmFuZG9tIHZhbHVlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RW1iZWRzQnVpbGRlcn1cbiAgICovXG4gIHNldFJhbmRvbUNvbG9yKCk6IEVtYmVkc0J1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldENvbG9yKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICgweGZmZmZmZiArIDEpKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRpdGxlIG9mIHRoZSBjdXJyZW50IGVtYmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcbiAgICogQHBhcmFtIHs/c3RyaW5nfSBbdXJsXVxuICAgKiBAcmV0dXJucyB7RW1iZWRzQnVpbGRlcn1cbiAgICovXG4gIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcsIHVybD86IHN0cmluZyk6IEVtYmVkc0J1aWxkZXIge1xuICAgIHRoaXMuI2N1cnJlbnRFbWJlZC50aXRsZSA9IHRpdGxlXG5cbiAgICBpZiAodXJsKSB7XG4gICAgICB0aGlzLnNldFVybCh1cmwpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRpbWVzdGFtcCBvZiB0aGUgY3VycmVudCBlbWJlZC5cbiAgICpcbiAgICogQHBhcmFtIHs/KHN0cmluZyB8IG51bWJlciB8IERhdGUpfSBbdGltZXN0YW1wXVxuICAgKiBAcmV0dXJucyB7RW1iZWRzQnVpbGRlcn1cbiAgICovXG4gIHNldFRpbWVzdGFtcCh0aW1lc3RhbXA/OiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlKTogRW1iZWRzQnVpbGRlciB7XG4gICAgdGhpcy4jY3VycmVudEVtYmVkLnRpbWVzdGFtcCA9IG5ldyBEYXRlKHRpbWVzdGFtcCEpLnRvSVNPU3RyaW5nKClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0aHVtYm5haWwgb2YgdGhlIGN1cnJlbnQgZW1iZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSBVUkwgb2YgdGhlIGltYWdlXG4gICAqIEBwYXJhbSB7P09taXQ8RGlzY29yZEVtYmVkVGh1bWJuYWlsLCAndXJsJz59IFtvcHRpb25zXVxuICAgKiBAcmV0dXJucyB7RW1iZWRzQnVpbGRlcn1cbiAgICovXG4gIHNldFRodW1ibmFpbCh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8RGlzY29yZEVtYmVkVGh1bWJuYWlsLCAndXJsJz4pOiBFbWJlZHNCdWlsZGVyIHtcbiAgICB0aGlzLiNjdXJyZW50RW1iZWQudGh1bWJuYWlsID0ge1xuICAgICAgLi4udGhpcy4jY3VycmVudEVtYmVkLnRodW1ibmFpbCxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB1cmwsXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIFVSTCBvZiB0aGUgY3VycmVudCBlbWJlZCB0aXRsZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcmV0dXJucyB7RW1iZWRzQnVpbGRlcn1cbiAgICovXG4gIHNldFVybCh1cmw6IHN0cmluZyk6IEVtYmVkc0J1aWxkZXIge1xuICAgIHRoaXMuI2N1cnJlbnRFbWJlZC51cmwgPSB1cmxcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB2aWRlbyBvZiB0aGUgY3VycmVudCBlbWJlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0gez9PbWl0PERpc2NvcmRFbWJlZFZpZGVvLCAndXJsJz59IFtvcHRpb25zXVxuICAgKiBAcmV0dXJucyB7RW1iZWRzQnVpbGRlcn1cbiAgICovXG4gIHNldFZpZGVvKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxEaXNjb3JkRW1iZWRWaWRlbywgJ3VybCc+KTogRW1iZWRzQnVpbGRlciB7XG4gICAgdGhpcy4jY3VycmVudEVtYmVkLnZpZGVvID0ge1xuICAgICAgLi4udGhpcy4jY3VycmVudEVtYmVkLnZpZGVvLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHVybCxcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFsbCBlbWJlZHMgYXZhaWxhYmxlIGFnYWluc3QgY3VycmVudCBrbm93biBEaXNjb3JkIGxpbWl0cyB0byBoZWxwIHByZXZlbnQgYmFkIHJlcXVlc3RzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RW1iZWRzQnVpbGRlcn1cbiAgICovXG4gIHZhbGlkYXRlKCk6IEVtYmVkc0J1aWxkZXIge1xuICAgIGxldCB0b3RhbENoYXJhY3RlcnMgPSAwXG5cbiAgICBpZiAodGhpcy5sZW5ndGggPiAxMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgY2FuIG5vdCBoYXZlIG1vcmUgdGhhbiAxMCBlbWJlZHMgb24gYSBzaW5nbGUgbWVzc2FnZS4nKVxuICAgIH1cblxuICAgIHRoaXMuZm9yRWFjaCgoeyBhdXRob3IsIGRlc2NyaXB0aW9uLCBmaWVsZHMsIGZvb3RlciwgdGl0bGUgfSwgaW5kZXgpID0+IHtcbiAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICBjb25zdCB0cmltbWVkVGl0bGUgPSB0aXRsZS50cmltKClcblxuICAgICAgICBpZiAodHJpbW1lZFRpdGxlLmxlbmd0aCA+IDI1Nikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGl0bGUgb2YgZW1iZWQgJHtpbmRleH0gY2FuIG5vdCBiZSBsb25nZXIgdGhhbiAyNTYgY2hhcmFjdGVycy5gKVxuICAgICAgICB9XG5cbiAgICAgICAgdG90YWxDaGFyYWN0ZXJzICs9IHRyaW1tZWRUaXRsZS5sZW5ndGhcbiAgICAgIH1cblxuICAgICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWREZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLnRyaW0oKVxuXG4gICAgICAgIGlmICh0cmltbWVkRGVzY3JpcHRpb24ubGVuZ3RoID4gNDA5Nikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRGVzY3JpcHRpb24gb2YgZW1iZWQgJHtpbmRleH0gY2FuIG5vdCBiZSBsb25nZXIgdGhhbiA0MDk2IGNoYXJhY3RlcnMuYClcbiAgICAgICAgfVxuXG4gICAgICAgIHRvdGFsQ2hhcmFjdGVycyArPSB0cmltbWVkRGVzY3JpcHRpb24ubGVuZ3RoXG4gICAgICB9XG5cbiAgICAgIGlmIChmaWVsZHMpIHtcbiAgICAgICAgaWYgKGZpZWxkcy5sZW5ndGggPiAyNSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZW1iZWQgJHtpbmRleH0gY2FuIG5vdCBoYXZlIG1vcmUgdGhhbiAyNSBmaWVsZHMuYClcbiAgICAgICAgfVxuXG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKCh7IG5hbWUsIHZhbHVlIH0sIGZpZWxkSW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCB0cmltbWVkTmFtZSA9IG5hbWUudHJpbSgpXG4gICAgICAgICAgY29uc3QgdHJpbW1lZFZhbHVlID0gdmFsdWUudHJpbSgpXG5cbiAgICAgICAgICBpZiAodHJpbW1lZE5hbWUubGVuZ3RoID4gMjU2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5hbWUgb2YgZmllbGQgJHtmaWVsZEluZGV4fSBvbiBlbWJlZCAke2luZGV4fSBjYW4gbm90IGJlIGxvbmdlciB0aGFuIDI1NiBjaGFyYWN0ZXJzLmApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRyaW1tZWRWYWx1ZS5sZW5ndGggPiA0MDk2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlIG9mIGZpZWxkICR7ZmllbGRJbmRleH0gb24gZW1iZWQgJHtpbmRleH0gY2FuIG5vdCBiZSBsb25nZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMuYClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0b3RhbENoYXJhY3RlcnMgKz0gdHJpbW1lZE5hbWUubGVuZ3RoXG4gICAgICAgICAgdG90YWxDaGFyYWN0ZXJzICs9IHRyaW1tZWRWYWx1ZS5sZW5ndGhcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGZvb3Rlcikge1xuICAgICAgICBjb25zdCB0cmltbWVkRm9vdGVyVGV4dCA9IGZvb3Rlci50ZXh0LnRyaW0oKVxuXG4gICAgICAgIGlmICh0cmltbWVkRm9vdGVyVGV4dC5sZW5ndGggPiAyMDQ4KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb290ZXIgdGV4dCBvZiBlbWJlZCAke2luZGV4fSBjYW4gbm90IGJlIGxvbmdlciB0aGFuIDIwNDggY2hhcmFjdGVycy5gKVxuICAgICAgICB9XG5cbiAgICAgICAgdG90YWxDaGFyYWN0ZXJzICs9IHRyaW1tZWRGb290ZXJUZXh0Lmxlbmd0aFxuICAgICAgfVxuXG4gICAgICBpZiAoYXV0aG9yKSB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWRBdXRob3JOYW1lID0gYXV0aG9yLm5hbWUudHJpbSgpXG5cbiAgICAgICAgaWYgKHRyaW1tZWRBdXRob3JOYW1lLmxlbmd0aCA+IDI1Nikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXV0aG9yIG5hbWUgb2YgZW1iZWQgJHtpbmRleH0gY2FuIG5vdCBiZSBsb25nZXIgdGhhbiAyNTYgY2hhcmFjdGVycy5gKVxuICAgICAgICB9XG5cbiAgICAgICAgdG90YWxDaGFyYWN0ZXJzICs9IHRyaW1tZWRBdXRob3JOYW1lLmxlbmd0aFxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpZiAodG90YWxDaGFyYWN0ZXJzID4gNjAwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb3RhbCBjaGFyYWN0ZXIgbGVuZ3RoIG9mIGFsbCBlbWJlZHMgY2FuIG5vdCBleGNlZWQgNjAwMCBjaGFyYWN0ZXJzLicpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGVtYmVkLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge0Rpc2NvcmRFbWJlZH1cbiAgICovXG4gIGdldCAjY3VycmVudEVtYmVkKCk6IERpc2NvcmRFbWJlZCB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLm5ld0VtYmVkKClcbiAgICAgIHRoaXMuc2V0Q3VycmVudEVtYmVkKClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1t0aGlzLiNjdXJyZW50RW1iZWRJbmRleF1cbiAgfVxufVxuIl0sIm5hbWVzIjpbIkVtYmVkc0J1aWxkZXIiLCJBcnJheSIsImN1cnJlbnRFbWJlZEluZGV4IiwiYWRkRmllbGQiLCJuYW1lIiwidmFsdWUiLCJpbmxpbmUiLCJjdXJyZW50RW1iZWQiLCJmaWVsZHMiLCJ1bmRlZmluZWQiLCJwdXNoIiwibmV3RW1iZWQiLCJsZW5ndGgiLCJFcnJvciIsInNldEN1cnJlbnRFbWJlZCIsInNldEF1dGhvciIsIm9wdGlvbnMiLCJhdXRob3IiLCJzZXRDb2xvciIsImNvbG9yIiwiY29udmVydGVkVmFsdWUiLCJwYXJzZUludCIsInJlcGxhY2UiLCJOdW1iZXIiLCJpc05hTiIsImluZGV4Iiwic2V0RGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsInNldEZpZWxkcyIsInNldEZvb3RlciIsInRleHQiLCJmb290ZXIiLCJzZXRJbWFnZSIsInVybCIsImltYWdlIiwic2V0UHJvdmlkZXIiLCJwcm92aWRlciIsInNldFJhbmRvbUNvbG9yIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwic2V0VGl0bGUiLCJ0aXRsZSIsInNldFVybCIsInNldFRpbWVzdGFtcCIsInRpbWVzdGFtcCIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsInNldFRodW1ibmFpbCIsInRodW1ibmFpbCIsInNldFZpZGVvIiwidmlkZW8iLCJ2YWxpZGF0ZSIsInRvdGFsQ2hhcmFjdGVycyIsImZvckVhY2giLCJ0cmltbWVkVGl0bGUiLCJ0cmltIiwidHJpbW1lZERlc2NyaXB0aW9uIiwiZmllbGRJbmRleCIsInRyaW1tZWROYW1lIiwidHJpbW1lZFZhbHVlIiwidHJpbW1lZEZvb3RlclRleHQiLCJ0cmltbWVkQXV0aG9yTmFtZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkF3QmFBOzs7ZUFBQUE7OztBQUFOLElBQUEsQUFBTUEsZ0JBQU4sTUFBTUEsc0JBQXNCQztJQUNqQyxDQUFDQyxpQkFBaUIsQ0FBWTtJQUU5Qjs7Ozs7OztHQU9DLEdBQ0RDLFNBQVNDLElBQVksRUFBRUMsS0FBYSxFQUFFQyxNQUFnQixFQUFpQjtRQUNyRSxJQUFJLElBQUksQ0FBQyxDQUFDQyxZQUFZLENBQUNDLE1BQU0sS0FBS0MsV0FBVztZQUMzQyxJQUFJLENBQUMsQ0FBQ0YsWUFBWSxDQUFDQyxNQUFNLEdBQUcsRUFBRTtRQUNoQztRQUVBLElBQUksQ0FBQyxDQUFDRCxZQUFZLENBQUNDLE1BQU0sQ0FBQ0UsSUFBSSxDQUFDO1lBQzdCTjtZQUNBQztZQUNBQztRQUNGO1FBRUEsT0FBTyxJQUFJO0lBQ2I7SUFFQTs7OztHQUlDLEdBQ0RLLFdBQTBCO1FBQ3hCLElBQUksSUFBSSxDQUFDQyxNQUFNLElBQUksSUFBSTtZQUNyQixNQUFNLElBQUlDLE1BQU07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
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "createEmbeds", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return createEmbeds;
9
+ }
10
+ });
11
+ const _embeds = _export_star(require("./builders/embeds.cjs"), exports);
12
+ function _export_star(from, to) {
13
+ Object.keys(from).forEach(function(k) {
14
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
15
+ Object.defineProperty(to, k, {
16
+ enumerable: true,
17
+ get: function() {
18
+ return from[k];
19
+ }
20
+ });
21
+ }
22
+ });
23
+ return from;
24
+ }
25
+ const createEmbeds = ()=>new _embeds.EmbedsBuilder();
26
+
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbWJlZHNCdWlsZGVyIH0gZnJvbSAnLi9idWlsZGVycy9lbWJlZHMuanMnXG5cbmV4cG9ydCAqIGZyb20gJy4vYnVpbGRlcnMvZW1iZWRzLmpzJ1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRW1iZWRzID0gKCk6IEVtYmVkc0J1aWxkZXIgPT4gbmV3IEVtYmVkc0J1aWxkZXIoKVxuIl0sIm5hbWVzIjpbImNyZWF0ZUVtYmVkcyIsIkVtYmVkc0J1aWxkZXIiXSwibWFwcGluZ3MiOiI7Ozs7K0JBSWFBOzs7ZUFBQUE7OztxQ0FKaUI7Ozs7Ozs7Ozs7Ozs7O0FBSXZCLE1BQU1BLGVBQWUsSUFBcUIsSUFBSUMscUJBQWEifQ==
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ camelToSnakeCase: function() {
13
+ return camelToSnakeCase;
14
+ },
15
+ camelize: function() {
16
+ return camelize;
17
+ },
18
+ snakeToCamelCase: function() {
19
+ return snakeToCamelCase;
20
+ },
21
+ snakelize: function() {
22
+ return snakelize;
23
+ }
24
+ });
25
+ function camelize(object) {
26
+ if (Array.isArray(object)) {
27
+ return object.map((element)=>camelize(element));
28
+ }
29
+ if (typeof object === 'object' && object !== null) {
30
+ const obj = {};
31
+ Object.keys(object).forEach((key)=>{
32
+ obj[snakeToCamelCase(key)] = camelize(object[key]);
33
+ });
34
+ return obj;
35
+ }
36
+ return object;
37
+ }
38
+ function snakelize(object) {
39
+ if (Array.isArray(object)) {
40
+ return object.map((element)=>snakelize(element));
41
+ }
42
+ if (typeof object === 'object' && object !== null) {
43
+ const obj = {};
44
+ Object.keys(object).forEach((key)=>{
45
+ obj[camelToSnakeCase(key)] = snakelize(object[key]);
46
+ });
47
+ return obj;
48
+ }
49
+ return object;
50
+ }
51
+ function snakeToCamelCase(str) {
52
+ if (!str.includes('_')) return str;
53
+ let result = '';
54
+ for(let i = 0, len = str.length; i < len; ++i){
55
+ if (str[i] === '_') {
56
+ result += str[++i].toUpperCase();
57
+ continue;
58
+ }
59
+ result += str[i];
60
+ }
61
+ return result;
62
+ }
63
+ function camelToSnakeCase(str) {
64
+ let result = '';
65
+ for(let i = 0, len = str.length; i < len; ++i){
66
+ if (str[i] >= 'A' && str[i] <= 'Z') {
67
+ result += `_${str[i].toLowerCase()}`;
68
+ continue;
69
+ }
70
+ result += str[i];
71
+ }
72
+ return result;
73
+ }
74
+
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jYXNpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDYW1lbGl6ZSwgU25ha2VsaXplIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjYW1lbGl6ZTxUPihvYmplY3Q6IFQpOiBDYW1lbGl6ZTxUPiB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICByZXR1cm4gb2JqZWN0Lm1hcCgoZWxlbWVudCkgPT4gY2FtZWxpemUoZWxlbWVudCkpIGFzIENhbWVsaXplPFQ+XG4gIH1cblxuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgb2JqID0ge30gYXMgQ2FtZWxpemU8VD5cbiAgICA7KE9iamVjdC5rZXlzKG9iamVjdCkgYXMgQXJyYXk8a2V5b2YgVD4pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBqcyBoYWNrXG4gICAgICA7KG9ialtzbmFrZVRvQ2FtZWxDYXNlKGtleSldIGFzIENhbWVsaXplPChUICYgb2JqZWN0KVtrZXlvZiBUXT4pID0gY2FtZWxpemUob2JqZWN0W2tleV0pXG4gICAgfSlcbiAgICByZXR1cm4gb2JqXG4gIH1cbiAgcmV0dXJuIG9iamVjdCBhcyBDYW1lbGl6ZTxUPlxufVxuXG5leHBvcnQgZnVuY3Rpb24gc25ha2VsaXplPFQ+KG9iamVjdDogVCk6IFNuYWtlbGl6ZTxUPiB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICByZXR1cm4gb2JqZWN0Lm1hcCgoZWxlbWVudCkgPT4gc25ha2VsaXplKGVsZW1lbnQpKSBhcyBTbmFrZWxpemU8VD5cbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICBjb25zdCBvYmogPSB7fSBhcyBTbmFrZWxpemU8VD5cbiAgICA7KE9iamVjdC5rZXlzKG9iamVjdCkgYXMgQXJyYXk8a2V5b2YgVD4pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBqcyBoYWNrXG4gICAgICA7KG9ialtjYW1lbFRvU25ha2VDYXNlKGtleSldIGFzIFNuYWtlbGl6ZTwoVCAmIG9iamVjdClba2V5b2YgVF0+KSA9IHNuYWtlbGl6ZShvYmplY3Rba2V5XSlcbiAgICB9KVxuICAgIHJldHVybiBvYmpcbiAgfVxuICByZXR1cm4gb2JqZWN0IGFzIFNuYWtlbGl6ZTxUPlxufVxuXG5leHBvcnQgZnVuY3Rpb24gc25ha2VUb0NhbWVsQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghc3RyLmluY2x1ZGVzKCdfJykpIHJldHVybiBzdHJcblxuICBsZXQgcmVzdWx0ID0gJydcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHN0ci5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChzdHJbaV0gPT09ICdfJykge1xuICAgICAgcmVzdWx0ICs9IHN0clsrK2ldLnRvVXBwZXJDYXNlKClcblxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICByZXN1bHQgKz0gc3RyW2ldXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW1lbFRvU25ha2VDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHJlc3VsdCA9ICcnXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzdHIubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoc3RyW2ldID49ICdBJyAmJiBzdHJbaV0gPD0gJ1onKSB7XG4gICAgICByZXN1bHQgKz0gYF8ke3N0cltpXS50b0xvd2VyQ2FzZSgpfWBcblxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICByZXN1bHQgKz0gc3RyW2ldXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG4iXSwibmFtZXMiOlsiY2FtZWxUb1NuYWtlQ2FzZSIsImNhbWVsaXplIiwic25ha2VUb0NhbWVsQ2FzZSIsInNuYWtlbGl6ZSIsIm9iamVjdCIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImVsZW1lbnQiLCJvYmoiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInN0ciIsImluY2x1ZGVzIiwicmVzdWx0IiwiaSIsImxlbiIsImxlbmd0aCIsInRvVXBwZXJDYXNlIiwidG9Mb3dlckNhc2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBbURnQkEsZ0JBQWdCO2VBQWhCQTs7SUFqREFDLFFBQVE7ZUFBUkE7O0lBZ0NBQyxnQkFBZ0I7ZUFBaEJBOztJQWhCQUMsU0FBUztlQUFUQTs7O0FBaEJULFNBQVNGLFNBQVlHLE1BQVM7SUFDbkMsSUFBSUMsTUFBTUMsT0FBTyxDQUFDRixTQUFTO1FBQ3pCLE9BQU9BLE9BQU9HLEdBQUcsQ0FBQyxDQUFDQyxVQUFZUCxTQUFTTztJQUMxQztJQUVBLElBQUksT0FBT0osV0FBVyxZQUFZQSxXQUFXLE1BQU07UUFDakQsTUFBTUssTUFBTSxDQUFDO1FBQ1hDLE9BQU9DLElBQUksQ0FBQ1AsUUFBMkJRLE9BQU8sQ0FBQyxDQUFDQztZQUU5Q0osR0FBRyxDQUFDUCxpQkFBaUJXLEtBQUssR0FBdUNaLFNBQVNHLE1BQU0sQ0FBQ1MsSUFBSTtRQUN6RjtRQUNBLE9BQU9KO0lBQ1Q7SUFDQSxPQUFPTDtBQUNUO0FBRU8sU0FBU0QsVUFBYUMsTUFBUztJQUNwQyxJQUFJQyxNQUFNQyxPQUFPLENBQUNGLFNBQVM7UUFDekIsT0FBT0EsT0FBT0csR0FBRyxDQUFDLENBQUNDLFVBQVlMLFVBQVVLO0lBQzNDO0lBRUEsSUFBSSxPQUFPSixXQUFXLFlBQVlBLFdBQVcsTUFBTTtRQUNqRCxNQUFNSyxNQUFNLENBQUM7UUFDWEMsT0FBT0MsSUFBSSxDQUFDUCxRQUEyQlEsT0FBTyxDQUFDLENBQUNDO1lBRTlDSixHQUFHLENBQUNULGlCQUFpQmEsS0FBSyxHQUF3Q1YsVUFBVUMsTUFBTSxDQUFDUyxJQUFJO1FBQzNGO1FBQ0EsT0FBT0o7SUFDVDtJQUNBLE9BQU9MO0FBQ1Q7QUFFTyxTQUFTRixpQkFBaUJZLEdBQVc7SUFDMUMsSUFBSSxDQUFDQSxJQUFJQyxRQUFRLENBQUMsTUFBTSxPQUFPRDtJQUUvQixJQUFJRSxTQUFTO0lBQ2IsSUFBSyxJQUFJQyxJQUFJLEdBQUdDLE1BQU1KLElBQUlLLE1BQU0sRUFBRUYsSUFBSUMsS0FBSyxFQUFFRCxFQUFHO1FBQzlDLElBQUlILEdBQUcsQ0FBQ0csRUFBRSxLQUFLLEtBQUs7WUFDbEJELFVBQVVGLEdBQUcsQ0FBQyxFQUFFRyxFQUFFLENBQUNHLFdBQVc7WUFFOUI7UUFDRjtRQUVBSixVQUFVRixHQUFHLENBQUNHLEVBQUU7SUFDbEI7SUFFQSxPQUFPRDtBQUNUO0FBRU8sU0FBU2hCLGlCQUFpQmMsR0FBVztJQUMxQyxJQUFJRSxTQUFTO0lBQ2IsSUFBSyxJQUFJQyxJQUFJLEdBQUdDLE1BQU1KLElBQUlLLE1BQU0sRUFBRUYsSUFBSUMsS0FBSyxFQUFFRCxFQUFHO1FBQzlDLElBQUlILEdBQUcsQ0FBQ0csRUFBRSxJQUFJLE9BQU9ILEdBQUcsQ0FBQ0csRUFBRSxJQUFJLEtBQUs7WUFDbENELFVBQVUsQ0FBQyxDQUFDLEVBQUVGLEdBQUcsQ0FBQ0csRUFBRSxDQUFDSSxXQUFXLEdBQUcsQ0FBQztZQUVwQztRQUNGO1FBRUFMLFVBQVVGLEdBQUcsQ0FBQ0csRUFBRTtJQUNsQjtJQUVBLE9BQU9EO0FBQ1QifQ==