@discordeno/utils 21.0.1-next.fca0b40 → 22.0.1-next.f274ec6

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