@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
package/dist/colors.js ADDED
@@ -0,0 +1,467 @@
1
+ // Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
2
+ // A module to print ANSI terminal colors. Inspired by chalk, kleur, and colors
3
+ // on npm.
4
+ // https://deno.land/std@0.153.0/fmt/colors.ts?source
5
+ let enabled = true;
6
+ /**
7
+ * Set changing text color to enabled or disabled
8
+ * @param value
9
+ */ export function setColorEnabled(value) {
10
+ enabled = value;
11
+ }
12
+ /** Get whether text color change is enabled or disabled. */ export function getColorEnabled() {
13
+ return enabled;
14
+ }
15
+ /**
16
+ * Builds color code
17
+ * @param open
18
+ * @param close
19
+ */ function code(open, close) {
20
+ return {
21
+ open: `\x1b[${open.join(';')}m`,
22
+ close: `\x1b[${close}m`,
23
+ regexp: new RegExp(`\\x1b\\[${close}m`, 'g')
24
+ };
25
+ }
26
+ /**
27
+ * Applies color and background based on color code and its associated text
28
+ * @param str text to apply color settings to
29
+ * @param code color code to apply
30
+ */ function run(str, code) {
31
+ return enabled ? `${code.open}${str.replace(code.regexp, code.open)}${code.close}` : str;
32
+ }
33
+ /**
34
+ * Reset the text modified
35
+ * @param str text to reset
36
+ */ export function reset(str) {
37
+ return run(str, code([
38
+ 0
39
+ ], 0));
40
+ }
41
+ /**
42
+ * Make the text bold.
43
+ * @param str text to make bold
44
+ */ export function bold(str) {
45
+ return run(str, code([
46
+ 1
47
+ ], 22));
48
+ }
49
+ /**
50
+ * The text emits only a small amount of light.
51
+ * @param str text to dim
52
+ */ export function dim(str) {
53
+ return run(str, code([
54
+ 2
55
+ ], 22));
56
+ }
57
+ /**
58
+ * Make the text italic.
59
+ * @param str text to make italic
60
+ */ export function italic(str) {
61
+ return run(str, code([
62
+ 3
63
+ ], 23));
64
+ }
65
+ /**
66
+ * Make the text underline.
67
+ * @param str text to underline
68
+ */ export function underline(str) {
69
+ return run(str, code([
70
+ 4
71
+ ], 24));
72
+ }
73
+ /**
74
+ * Invert background color and text color.
75
+ * @param str text to invert its color
76
+ */ export function inverse(str) {
77
+ return run(str, code([
78
+ 7
79
+ ], 27));
80
+ }
81
+ /**
82
+ * Make the text hidden.
83
+ * @param str text to hide
84
+ */ export function hidden(str) {
85
+ return run(str, code([
86
+ 8
87
+ ], 28));
88
+ }
89
+ /**
90
+ * Put horizontal line through the center of the text.
91
+ * @param str text to strike through
92
+ */ export function strikethrough(str) {
93
+ return run(str, code([
94
+ 9
95
+ ], 29));
96
+ }
97
+ /**
98
+ * Set text color to black.
99
+ * @param str text to make black
100
+ */ export function black(str) {
101
+ return run(str, code([
102
+ 30
103
+ ], 39));
104
+ }
105
+ /**
106
+ * Set text color to red.
107
+ * @param str text to make red
108
+ */ export function red(str) {
109
+ return run(str, code([
110
+ 31
111
+ ], 39));
112
+ }
113
+ /**
114
+ * Set text color to green.
115
+ * @param str text to make green
116
+ */ export function green(str) {
117
+ return run(str, code([
118
+ 32
119
+ ], 39));
120
+ }
121
+ /**
122
+ * Set text color to yellow.
123
+ * @param str text to make yellow
124
+ */ export function yellow(str) {
125
+ return run(str, code([
126
+ 33
127
+ ], 39));
128
+ }
129
+ /**
130
+ * Set text color to blue.
131
+ * @param str text to make blue
132
+ */ export function blue(str) {
133
+ return run(str, code([
134
+ 34
135
+ ], 39));
136
+ }
137
+ /**
138
+ * Set text color to magenta.
139
+ * @param str text to make magenta
140
+ */ export function magenta(str) {
141
+ return run(str, code([
142
+ 35
143
+ ], 39));
144
+ }
145
+ /**
146
+ * Set text color to cyan.
147
+ * @param str text to make cyan
148
+ */ export function cyan(str) {
149
+ return run(str, code([
150
+ 36
151
+ ], 39));
152
+ }
153
+ /**
154
+ * Set text color to white.
155
+ * @param str text to make white
156
+ */ export function white(str) {
157
+ return run(str, code([
158
+ 37
159
+ ], 39));
160
+ }
161
+ /**
162
+ * Set text color to gray.
163
+ * @param str text to make gray
164
+ */ export function gray(str) {
165
+ return brightBlack(str);
166
+ }
167
+ /**
168
+ * Set text color to bright black.
169
+ * @param str text to make bright-black
170
+ */ export function brightBlack(str) {
171
+ return run(str, code([
172
+ 90
173
+ ], 39));
174
+ }
175
+ /**
176
+ * Set text color to bright red.
177
+ * @param str text to make bright-red
178
+ */ export function brightRed(str) {
179
+ return run(str, code([
180
+ 91
181
+ ], 39));
182
+ }
183
+ /**
184
+ * Set text color to bright green.
185
+ * @param str text to make bright-green
186
+ */ export function brightGreen(str) {
187
+ return run(str, code([
188
+ 92
189
+ ], 39));
190
+ }
191
+ /**
192
+ * Set text color to bright yellow.
193
+ * @param str text to make bright-yellow
194
+ */ export function brightYellow(str) {
195
+ return run(str, code([
196
+ 93
197
+ ], 39));
198
+ }
199
+ /**
200
+ * Set text color to bright blue.
201
+ * @param str text to make bright-blue
202
+ */ export function brightBlue(str) {
203
+ return run(str, code([
204
+ 94
205
+ ], 39));
206
+ }
207
+ /**
208
+ * Set text color to bright magenta.
209
+ * @param str text to make bright-magenta
210
+ */ export function brightMagenta(str) {
211
+ return run(str, code([
212
+ 95
213
+ ], 39));
214
+ }
215
+ /**
216
+ * Set text color to bright cyan.
217
+ * @param str text to make bright-cyan
218
+ */ export function brightCyan(str) {
219
+ return run(str, code([
220
+ 96
221
+ ], 39));
222
+ }
223
+ /**
224
+ * Set text color to bright white.
225
+ * @param str text to make bright-white
226
+ */ export function brightWhite(str) {
227
+ return run(str, code([
228
+ 97
229
+ ], 39));
230
+ }
231
+ /**
232
+ * Set background color to black.
233
+ * @param str text to make its background black
234
+ */ export function bgBlack(str) {
235
+ return run(str, code([
236
+ 40
237
+ ], 49));
238
+ }
239
+ /**
240
+ * Set background color to red.
241
+ * @param str text to make its background red
242
+ */ export function bgRed(str) {
243
+ return run(str, code([
244
+ 41
245
+ ], 49));
246
+ }
247
+ /**
248
+ * Set background color to green.
249
+ * @param str text to make its background green
250
+ */ export function bgGreen(str) {
251
+ return run(str, code([
252
+ 42
253
+ ], 49));
254
+ }
255
+ /**
256
+ * Set background color to yellow.
257
+ * @param str text to make its background yellow
258
+ */ export function bgYellow(str) {
259
+ return run(str, code([
260
+ 43
261
+ ], 49));
262
+ }
263
+ /**
264
+ * Set background color to blue.
265
+ * @param str text to make its background blue
266
+ */ export function bgBlue(str) {
267
+ return run(str, code([
268
+ 44
269
+ ], 49));
270
+ }
271
+ /**
272
+ * Set background color to magenta.
273
+ * @param str text to make its background magenta
274
+ */ export function bgMagenta(str) {
275
+ return run(str, code([
276
+ 45
277
+ ], 49));
278
+ }
279
+ /**
280
+ * Set background color to cyan.
281
+ * @param str text to make its background cyan
282
+ */ export function bgCyan(str) {
283
+ return run(str, code([
284
+ 46
285
+ ], 49));
286
+ }
287
+ /**
288
+ * Set background color to white.
289
+ * @param str text to make its background white
290
+ */ export function bgWhite(str) {
291
+ return run(str, code([
292
+ 47
293
+ ], 49));
294
+ }
295
+ /**
296
+ * Set background color to bright black.
297
+ * @param str text to make its background bright-black
298
+ */ export function bgBrightBlack(str) {
299
+ return run(str, code([
300
+ 100
301
+ ], 49));
302
+ }
303
+ /**
304
+ * Set background color to bright red.
305
+ * @param str text to make its background bright-red
306
+ */ export function bgBrightRed(str) {
307
+ return run(str, code([
308
+ 101
309
+ ], 49));
310
+ }
311
+ /**
312
+ * Set background color to bright green.
313
+ * @param str text to make its background bright-green
314
+ */ export function bgBrightGreen(str) {
315
+ return run(str, code([
316
+ 102
317
+ ], 49));
318
+ }
319
+ /**
320
+ * Set background color to bright yellow.
321
+ * @param str text to make its background bright-yellow
322
+ */ export function bgBrightYellow(str) {
323
+ return run(str, code([
324
+ 103
325
+ ], 49));
326
+ }
327
+ /**
328
+ * Set background color to bright blue.
329
+ * @param str text to make its background bright-blue
330
+ */ export function bgBrightBlue(str) {
331
+ return run(str, code([
332
+ 104
333
+ ], 49));
334
+ }
335
+ /**
336
+ * Set background color to bright magenta.
337
+ * @param str text to make its background bright-magenta
338
+ */ export function bgBrightMagenta(str) {
339
+ return run(str, code([
340
+ 105
341
+ ], 49));
342
+ }
343
+ /**
344
+ * Set background color to bright cyan.
345
+ * @param str text to make its background bright-cyan
346
+ */ export function bgBrightCyan(str) {
347
+ return run(str, code([
348
+ 106
349
+ ], 49));
350
+ }
351
+ /**
352
+ * Set background color to bright white.
353
+ * @param str text to make its background bright-white
354
+ */ export function bgBrightWhite(str) {
355
+ return run(str, code([
356
+ 107
357
+ ], 49));
358
+ }
359
+ /* Special Color Sequences */ /**
360
+ * Clam and truncate color codes
361
+ * @param n
362
+ * @param max number to truncate to
363
+ * @param min number to truncate from
364
+ */ function clampAndTruncate(n, max = 255, min = 0) {
365
+ return Math.trunc(Math.max(Math.min(n, max), min));
366
+ }
367
+ /**
368
+ * Set text color using paletted 8bit colors.
369
+ * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit
370
+ * @param str text color to apply paletted 8bit colors to
371
+ * @param color code
372
+ */ export function rgb8(str, color) {
373
+ return run(str, code([
374
+ 38,
375
+ 5,
376
+ clampAndTruncate(color)
377
+ ], 39));
378
+ }
379
+ /**
380
+ * Set background color using paletted 8bit colors.
381
+ * https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit
382
+ * @param str text color to apply paletted 8bit background colors to
383
+ * @param color code
384
+ */ export function bgRgb8(str, color) {
385
+ return run(str, code([
386
+ 48,
387
+ 5,
388
+ clampAndTruncate(color)
389
+ ], 49));
390
+ }
391
+ /**
392
+ * Set text color using 24bit rgb.
393
+ * `color` can be a number in range `0x000000` to `0xffffff` or
394
+ * an `Rgb`.
395
+ *
396
+ * To produce the color magenta:
397
+ *
398
+ * ```ts
399
+ * import { rgb24 } from "./colors.ts";
400
+ * rgb24("foo", 0xff00ff);
401
+ * rgb24("foo", {r: 255, g: 0, b: 255});
402
+ * ```
403
+ * @param str text color to apply 24bit rgb to
404
+ * @param color code
405
+ */ export function rgb24(str, color) {
406
+ if (typeof color === 'number') {
407
+ return run(str, code([
408
+ 38,
409
+ 2,
410
+ color >> 16 & 0xff,
411
+ color >> 8 & 0xff,
412
+ color & 0xff
413
+ ], 39));
414
+ }
415
+ return run(str, code([
416
+ 38,
417
+ 2,
418
+ clampAndTruncate(color.r),
419
+ clampAndTruncate(color.g),
420
+ clampAndTruncate(color.b)
421
+ ], 39));
422
+ }
423
+ /**
424
+ * Set background color using 24bit rgb.
425
+ * `color` can be a number in range `0x000000` to `0xffffff` or
426
+ * an `Rgb`.
427
+ *
428
+ * To produce the color magenta:
429
+ *
430
+ * ```ts
431
+ * import { bgRgb24 } from "./colors.ts";
432
+ * bgRgb24("foo", 0xff00ff);
433
+ * bgRgb24("foo", {r: 255, g: 0, b: 255});
434
+ * ```
435
+ * @param str text color to apply 24bit rgb to
436
+ * @param color code
437
+ */ export function bgRgb24(str, color) {
438
+ if (typeof color === 'number') {
439
+ return run(str, code([
440
+ 48,
441
+ 2,
442
+ color >> 16 & 0xff,
443
+ color >> 8 & 0xff,
444
+ color & 0xff
445
+ ], 49));
446
+ }
447
+ return run(str, code([
448
+ 48,
449
+ 2,
450
+ clampAndTruncate(color.r),
451
+ clampAndTruncate(color.g),
452
+ clampAndTruncate(color.b)
453
+ ], 49));
454
+ }
455
+ // https://github.com/chalk/ansi-regex/blob/02fa893d619d3da85411acc8fd4e2eea0e95a9d9/index.js
456
+ const ANSI_PATTERN = new RegExp([
457
+ '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
458
+ '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))'
459
+ ].join('|'), 'g');
460
+ /**
461
+ * Remove ANSI escape codes from the string.
462
+ * @param string to remove ANSI escape codes from
463
+ */ export function stripColor(string) {
464
+ return string.replace(ANSI_PATTERN, '');
465
+ }
466
+
467
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2xvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIEEgbW9kdWxlIHRvIHByaW50IEFOU0kgdGVybWluYWwgY29sb3JzLiBJbnNwaXJlZCBieSBjaGFsaywga2xldXIsIGFuZCBjb2xvcnNcbi8vIG9uIG5wbS5cbi8vIGh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL2ZtdC9jb2xvcnMudHM/c291cmNlXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZSB7XG4gIG9wZW46IHN0cmluZ1xuICBjbG9zZTogc3RyaW5nXG4gIHJlZ2V4cDogUmVnRXhwXG59XG5cbi8qKiBSR0IgOC1iaXRzIHBlciBjaGFubmVsLiBFYWNoIGluIHJhbmdlIGAwLT4yNTVgIG9yIGAweDAwLT4weGZmYCAqL1xuZXhwb3J0IGludGVyZmFjZSBSZ2Ige1xuICByOiBudW1iZXJcbiAgZzogbnVtYmVyXG4gIGI6IG51bWJlclxufVxuXG5sZXQgZW5hYmxlZCA9IHRydWVcblxuLyoqXG4gKiBTZXQgY2hhbmdpbmcgdGV4dCBjb2xvciB0byBlbmFibGVkIG9yIGRpc2FibGVkXG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldENvbG9yRW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICBlbmFibGVkID0gdmFsdWVcbn1cblxuLyoqIEdldCB3aGV0aGVyIHRleHQgY29sb3IgY2hhbmdlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sb3JFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZW5hYmxlZFxufVxuXG4vKipcbiAqIEJ1aWxkcyBjb2xvciBjb2RlXG4gKiBAcGFyYW0gb3BlblxuICogQHBhcmFtIGNsb3NlXG4gKi9cbmZ1bmN0aW9uIGNvZGUob3BlbjogbnVtYmVyW10sIGNsb3NlOiBudW1iZXIpOiBDb2RlIHtcbiAgcmV0dXJuIHtcbiAgICBvcGVuOiBgXFx4MWJbJHtvcGVuLmpvaW4oJzsnKX1tYCxcbiAgICBjbG9zZTogYFxceDFiWyR7Y2xvc2V9bWAsXG4gICAgcmVnZXhwOiBuZXcgUmVnRXhwKGBcXFxceDFiXFxcXFske2Nsb3NlfW1gLCAnZycpLFxuICB9XG59XG5cbi8qKlxuICogQXBwbGllcyBjb2xvciBhbmQgYmFja2dyb3VuZCBiYXNlZCBvbiBjb2xvciBjb2RlIGFuZCBpdHMgYXNzb2NpYXRlZCB0ZXh0XG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gYXBwbHkgY29sb3Igc2V0dGluZ3MgdG9cbiAqIEBwYXJhbSBjb2RlIGNvbG9yIGNvZGUgdG8gYXBwbHlcbiAqL1xuZnVuY3Rpb24gcnVuKHN0cjogc3RyaW5nLCBjb2RlOiBDb2RlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGVuYWJsZWQgPyBgJHtjb2RlLm9wZW59JHtzdHIucmVwbGFjZShjb2RlLnJlZ2V4cCwgY29kZS5vcGVuKX0ke2NvZGUuY2xvc2V9YCA6IHN0clxufVxuXG4vKipcbiAqIFJlc2V0IHRoZSB0ZXh0IG1vZGlmaWVkXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gcmVzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzBdLCAwKSlcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSB0ZXh0IGJvbGQuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBib2xkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib2xkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzFdLCAyMikpXG59XG5cbi8qKlxuICogVGhlIHRleHQgZW1pdHMgb25seSBhIHNtYWxsIGFtb3VudCBvZiBsaWdodC5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBkaW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpbShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFsyXSwgMjIpKVxufVxuXG4vKipcbiAqIE1ha2UgdGhlIHRleHQgaXRhbGljLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRhbGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpdGFsaWMoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbM10sIDIzKSlcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSB0ZXh0IHVuZGVybGluZS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byB1bmRlcmxpbmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuZGVybGluZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0XSwgMjQpKVxufVxuXG4vKipcbiAqIEludmVydCBiYWNrZ3JvdW5kIGNvbG9yIGFuZCB0ZXh0IGNvbG9yLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIGludmVydCBpdHMgY29sb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbN10sIDI3KSlcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSB0ZXh0IGhpZGRlbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBoaWRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaWRkZW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOF0sIDI4KSlcbn1cblxuLyoqXG4gKiBQdXQgaG9yaXpvbnRhbCBsaW5lIHRocm91Z2ggdGhlIGNlbnRlciBvZiB0aGUgdGV4dC5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBzdHJpa2UgdGhyb3VnaFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaWtldGhyb3VnaChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs5XSwgMjkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJsYWNrLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYmxhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJsYWNrKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzMwXSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIHJlZC5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIHJlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzMxXSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGdyZWVuLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgZ3JlZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyZWVuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzMyXSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIHllbGxvdy5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIHllbGxvd1xuICovXG5leHBvcnQgZnVuY3Rpb24geWVsbG93KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzMzXSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJsdWUuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBibHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBibHVlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzM0XSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIG1hZ2VudGEuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBtYWdlbnRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWdlbnRhKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzM1XSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGN5YW4uXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBjeWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjeWFuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzM2XSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIHdoaXRlLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2Ugd2hpdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoaXRlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzM3XSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGdyYXkuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBncmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmF5KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGJyaWdodEJsYWNrKHN0cilcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgYmxhY2suXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBicmlnaHQtYmxhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyaWdodEJsYWNrKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzkwXSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCByZWQuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBicmlnaHQtcmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicmlnaHRSZWQoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTFdLCAzOSkpXG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8gYnJpZ2h0IGdyZWVuLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYnJpZ2h0LWdyZWVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicmlnaHRHcmVlbihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs5Ml0sIDM5KSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgeWVsbG93LlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYnJpZ2h0LXllbGxvd1xuICovXG5leHBvcnQgZnVuY3Rpb24gYnJpZ2h0WWVsbG93KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzkzXSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCBibHVlLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYnJpZ2h0LWJsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyaWdodEJsdWUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTRdLCAzOSkpXG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8gYnJpZ2h0IG1hZ2VudGEuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBicmlnaHQtbWFnZW50YVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnJpZ2h0TWFnZW50YShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs5NV0sIDM5KSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgY3lhbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGJyaWdodC1jeWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicmlnaHRDeWFuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzk2XSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJyaWdodCB3aGl0ZS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGJyaWdodC13aGl0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnJpZ2h0V2hpdGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbOTddLCAzOSkpXG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYmxhY2suXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBibGFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCbGFjayhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0MF0sIDQ5KSlcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byByZWQuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCByZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnUmVkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQxXSwgNDkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGdyZWVuLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgZ3JlZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnR3JlZW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDJdLCA0OSkpXG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8geWVsbG93LlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgeWVsbG93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ1llbGxvdyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0M10sIDQ5KSlcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBibHVlLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYmx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCbHVlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQ0XSwgNDkpKVxufVxuXG4vKipcbiAqICBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBtYWdlbnRhLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgbWFnZW50YVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdNYWdlbnRhKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQ1XSwgNDkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGN5YW4uXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBjeWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0N5YW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDZdLCA0OSkpXG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gd2hpdGUuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCB3aGl0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdXaGl0ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0N10sIDQ5KSlcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgYmxhY2suXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBicmlnaHQtYmxhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQnJpZ2h0QmxhY2soc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTAwXSwgNDkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGJyaWdodCByZWQuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBicmlnaHQtcmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JyaWdodFJlZChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFsxMDFdLCA0OSkpXG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYnJpZ2h0IGdyZWVuLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYnJpZ2h0LWdyZWVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JyaWdodEdyZWVuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwMl0sIDQ5KSlcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgeWVsbG93LlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYnJpZ2h0LXllbGxvd1xuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCcmlnaHRZZWxsb3coc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTAzXSwgNDkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGJyaWdodCBibHVlLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYnJpZ2h0LWJsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQnJpZ2h0Qmx1ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFsxMDRdLCA0OSkpXG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYnJpZ2h0IG1hZ2VudGEuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBicmlnaHQtbWFnZW50YVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCcmlnaHRNYWdlbnRhKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwNV0sIDQ5KSlcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBicmlnaHQgY3lhbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGJyaWdodC1jeWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JyaWdodEN5YW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMTA2XSwgNDkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHRvIGJyaWdodCB3aGl0ZS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGJyaWdodC13aGl0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCcmlnaHRXaGl0ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFsxMDddLCA0OSkpXG59XG5cbi8qIFNwZWNpYWwgQ29sb3IgU2VxdWVuY2VzICovXG5cbi8qKlxuICogQ2xhbSBhbmQgdHJ1bmNhdGUgY29sb3IgY29kZXNcbiAqIEBwYXJhbSBuXG4gKiBAcGFyYW0gbWF4IG51bWJlciB0byB0cnVuY2F0ZSB0b1xuICogQHBhcmFtIG1pbiBudW1iZXIgdG8gdHJ1bmNhdGUgZnJvbVxuICovXG5mdW5jdGlvbiBjbGFtcEFuZFRydW5jYXRlKG46IG51bWJlciwgbWF4ID0gMjU1LCBtaW4gPSAwKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgudHJ1bmMoTWF0aC5tYXgoTWF0aC5taW4obiwgbWF4KSwgbWluKSlcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB1c2luZyBwYWxldHRlZCA4Yml0IGNvbG9ycy5cbiAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjOC1iaXRcbiAqIEBwYXJhbSBzdHIgdGV4dCBjb2xvciB0byBhcHBseSBwYWxldHRlZCA4Yml0IGNvbG9ycyB0b1xuICogQHBhcmFtIGNvbG9yIGNvZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJnYjgoc3RyOiBzdHJpbmcsIGNvbG9yOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMzgsIDUsIGNsYW1wQW5kVHJ1bmNhdGUoY29sb3IpXSwgMzkpKVxufVxuXG4vKipcbiAqIFNldCBiYWNrZ3JvdW5kIGNvbG9yIHVzaW5nIHBhbGV0dGVkIDhiaXQgY29sb3JzLlxuICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9lc2NhcGVfY29kZSM4LWJpdFxuICogQHBhcmFtIHN0ciB0ZXh0IGNvbG9yIHRvIGFwcGx5IHBhbGV0dGVkIDhiaXQgYmFja2dyb3VuZCBjb2xvcnMgdG9cbiAqIEBwYXJhbSBjb2xvciBjb2RlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ1JnYjgoc3RyOiBzdHJpbmcsIGNvbG9yOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDgsIDUsIGNsYW1wQW5kVHJ1bmNhdGUoY29sb3IpXSwgNDkpKVxufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHVzaW5nIDI0Yml0IHJnYi5cbiAqIGBjb2xvcmAgY2FuIGJlIGEgbnVtYmVyIGluIHJhbmdlIGAweDAwMDAwMGAgdG8gYDB4ZmZmZmZmYCBvclxuICogYW4gYFJnYmAuXG4gKlxuICogVG8gcHJvZHVjZSB0aGUgY29sb3IgbWFnZW50YTpcbiAqXG4gKiBgYGB0c1xuICogICAgICBpbXBvcnQgeyByZ2IyNCB9IGZyb20gXCIuL2NvbG9ycy50c1wiO1xuICogICAgICByZ2IyNChcImZvb1wiLCAweGZmMDBmZik7XG4gKiAgICAgIHJnYjI0KFwiZm9vXCIsIHtyOiAyNTUsIGc6IDAsIGI6IDI1NX0pO1xuICogYGBgXG4gKiBAcGFyYW0gc3RyIHRleHQgY29sb3IgdG8gYXBwbHkgMjRiaXQgcmdiIHRvXG4gKiBAcGFyYW0gY29sb3IgY29kZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmdiMjQoc3RyOiBzdHJpbmcsIGNvbG9yOiBudW1iZXIgfCBSZ2IpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGNvbG9yID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBydW4oc3RyLCBjb2RlKFszOCwgMiwgKGNvbG9yID4+IDE2KSAmIDB4ZmYsIChjb2xvciA+PiA4KSAmIDB4ZmYsIGNvbG9yICYgMHhmZl0sIDM5KSlcbiAgfVxuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMzgsIDIsIGNsYW1wQW5kVHJ1bmNhdGUoY29sb3IuciksIGNsYW1wQW5kVHJ1bmNhdGUoY29sb3IuZyksIGNsYW1wQW5kVHJ1bmNhdGUoY29sb3IuYildLCAzOSkpXG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdXNpbmcgMjRiaXQgcmdiLlxuICogYGNvbG9yYCBjYW4gYmUgYSBudW1iZXIgaW4gcmFuZ2UgYDB4MDAwMDAwYCB0byBgMHhmZmZmZmZgIG9yXG4gKiBhbiBgUmdiYC5cbiAqXG4gKiBUbyBwcm9kdWNlIHRoZSBjb2xvciBtYWdlbnRhOlxuICpcbiAqIGBgYHRzXG4gKiAgICAgIGltcG9ydCB7IGJnUmdiMjQgfSBmcm9tIFwiLi9jb2xvcnMudHNcIjtcbiAqICAgICAgYmdSZ2IyNChcImZvb1wiLCAweGZmMDBmZik7XG4gKiAgICAgIGJnUmdiMjQoXCJmb29cIiwge3I6IDI1NSwgZzogMCwgYjogMjU1fSk7XG4gKiBgYGBcbiAqIEBwYXJhbSBzdHIgdGV4dCBjb2xvciB0byBhcHBseSAyNGJpdCByZ2IgdG9cbiAqIEBwYXJhbSBjb2xvciBjb2RlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ1JnYjI0KHN0cjogc3RyaW5nLCBjb2xvcjogbnVtYmVyIHwgUmdiKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gcnVuKHN0ciwgY29kZShbNDgsIDIsIChjb2xvciA+PiAxNikgJiAweGZmLCAoY29sb3IgPj4gOCkgJiAweGZmLCBjb2xvciAmIDB4ZmZdLCA0OSkpXG4gIH1cbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQ4LCAyLCBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLnIpLCBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLmcpLCBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLmIpXSwgNDkpKVxufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvYW5zaS1yZWdleC9ibG9iLzAyZmE4OTNkNjE5ZDNkYTg1NDExYWNjOGZkNGUyZWVhMGU5NWE5ZDkvaW5kZXguanNcbmNvbnN0IEFOU0lfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXG4gIFtcbiAgICAnW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KScsXG4gICAgJyg/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnEtdXk9Pjx+XSkpJyxcbiAgXS5qb2luKCd8JyksXG4gICdnJyxcbilcblxuLyoqXG4gKiBSZW1vdmUgQU5TSSBlc2NhcGUgY29kZXMgZnJvbSB0aGUgc3RyaW5nLlxuICogQHBhcmFtIHN0cmluZyB0byByZW1vdmUgQU5TSSBlc2NhcGUgY29kZXMgZnJvbVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBDb2xvcihzdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZShBTlNJX1BBVFRFUk4sICcnKVxufVxuIl0sIm5hbWVzIjpbImVuYWJsZWQiLCJzZXRDb2xvckVuYWJsZWQiLCJ2YWx1ZSIsImdldENvbG9yRW5hYmxlZCIsImNvZGUiLCJvcGVuIiwiY2xvc2UiLCJqb2luIiwicmVnZXhwIiwiUmVnRXhwIiwicnVuIiwic3RyIiwicmVwbGFjZSIsInJlc2V0IiwiYm9sZCIsImRpbSIsIml0YWxpYyIsInVuZGVybGluZSIsImludmVyc2UiLCJoaWRkZW4iLCJzdHJpa2V0aHJvdWdoIiwiYmxhY2siLCJyZWQiLCJncmVlbiIsInllbGxvdyIsImJsdWUiLCJtYWdlbnRhIiwiY3lhbiIsIndoaXRlIiwiZ3JheSIsImJyaWdodEJsYWNrIiwiYnJpZ2h0UmVkIiwiYnJpZ2h0R3JlZW4iLCJicmlnaHRZZWxsb3ciLCJicmlnaHRCbHVlIiwiYnJpZ2h0TWFnZW50YSIsImJyaWdodEN5YW4iLCJicmlnaHRXaGl0ZSIsImJnQmxhY2siLCJiZ1JlZCIsImJnR3JlZW4iLCJiZ1llbGxvdyIsImJnQmx1ZSIsImJnTWFnZW50YSIsImJnQ3lhbiIsImJnV2hpdGUiLCJiZ0JyaWdodEJsYWNrIiwiYmdCcmlnaHRSZWQiLCJiZ0JyaWdodEdyZWVuIiwiYmdCcmlnaHRZZWxsb3ciLCJiZ0JyaWdodEJsdWUiLCJiZ0JyaWdodE1hZ2VudGEiLCJiZ0JyaWdodEN5YW4iLCJiZ0JyaWdodFdoaXRlIiwiY2xhbXBBbmRUcnVuY2F0ZSIsIm4iLCJtYXgiLCJtaW4iLCJNYXRoIiwidHJ1bmMiLCJyZ2I4IiwiY29sb3IiLCJiZ1JnYjgiLCJyZ2IyNCIsInIiLCJnIiwiYiIsImJnUmdiMjQiLCJBTlNJX1BBVFRFUk4iLCJzdHJpcENvbG9yIiwic3RyaW5nIl0sIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDMUUsK0VBQStFO0FBQy9FLFVBQVU7QUFDVixxREFBcUQ7QUFlckQsSUFBSUEsVUFBVTtBQUVkOzs7Q0FHQyxHQUNELE9BQU8sU0FBU0MsZ0JBQWdCQyxLQUFjO0lBQzVDRixVQUFVRTtBQUNaO0FBRUEsMERBQTBELEdBQzFELE9BQU8sU0FBU0M7SUFDZCxPQUFPSDtBQUNUO0FBRUE7Ozs7Q0FJQyxHQUNELFNBQVNJLEtBQUtDLElBQWMsRUFBRUMsS0FBYTtJ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
@@ -0,0 +1,2 @@
1
+ export declare const DISCORDENO_VERSION = "22.0.0-beta.1";
2
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,kBAAkB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export const DISCORDENO_VERSION = '22.0.0-beta.1';
2
+
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IERJU0NPUkRFTk9fVkVSU0lPTiA9ICcyMi4wLjAtYmV0YS4xJ1xuIl0sIm5hbWVzIjpbIkRJU0NPUkRFTk9fVkVSU0lPTiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNQSxxQkFBcUIsZ0JBQWUifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWrD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKrD"}
package/dist/hash.js ADDED
@@ -0,0 +1,19 @@
1
+ export function iconHashToBigInt(hash) {
2
+ // The icon is animated so it needs special handling
3
+ if (hash.startsWith('a_')) {
4
+ // Change the `a_` to just be `a`
5
+ hash = `a${hash.substring(2)}`;
6
+ } else {
7
+ // The icon is not animated but it could be that it starts with a 0 so we just put a `b` in front so nothing breaks
8
+ hash = `b${hash}`;
9
+ }
10
+ return BigInt(`0x${hash}`);
11
+ }
12
+ export function iconBigintToHash(icon) {
13
+ // Convert the bigint back to a hash
14
+ const hash = icon.toString(16);
15
+ // Hashes starting with a are animated and with b are not so need to handle that
16
+ return hash.startsWith('a') ? `a_${hash.substring(1)}` : hash.substring(1);
17
+ }
18
+
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9oYXNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBpY29uSGFzaFRvQmlnSW50KGhhc2g6IHN0cmluZyk6IGJpZ2ludCB7XG4gIC8vIFRoZSBpY29uIGlzIGFuaW1hdGVkIHNvIGl0IG5lZWRzIHNwZWNpYWwgaGFuZGxpbmdcbiAgaWYgKGhhc2guc3RhcnRzV2l0aCgnYV8nKSkge1xuICAgIC8vIENoYW5nZSB0aGUgYGFfYCB0byBqdXN0IGJlIGBhYFxuICAgIGhhc2ggPSBgYSR7aGFzaC5zdWJzdHJpbmcoMil9YFxuICB9IGVsc2Uge1xuICAgIC8vIFRoZSBpY29uIGlzIG5vdCBhbmltYXRlZCBidXQgaXQgY291bGQgYmUgdGhhdCBpdCBzdGFydHMgd2l0aCBhIDAgc28gd2UganVzdCBwdXQgYSBgYmAgaW4gZnJvbnQgc28gbm90aGluZyBicmVha3NcbiAgICBoYXNoID0gYGIke2hhc2h9YFxuICB9XG5cbiAgcmV0dXJuIEJpZ0ludChgMHgke2hhc2h9YClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGljb25CaWdpbnRUb0hhc2goaWNvbjogYmlnaW50KTogc3RyaW5nIHtcbiAgLy8gQ29udmVydCB0aGUgYmlnaW50IGJhY2sgdG8gYSBoYXNoXG4gIGNvbnN0IGhhc2ggPSBpY29uLnRvU3RyaW5nKDE2KVxuICAvLyBIYXNoZXMgc3RhcnRpbmcgd2l0aCBhIGFyZSBhbmltYXRlZCBhbmQgd2l0aCBiIGFyZSBub3Qgc28gbmVlZCB0byBoYW5kbGUgdGhhdFxuICByZXR1cm4gaGFzaC5zdGFydHNXaXRoKCdhJykgPyBgYV8ke2hhc2guc3Vic3RyaW5nKDEpfWAgOiBoYXNoLnN1YnN0cmluZygxKVxufVxuIl0sIm5hbWVzIjpbImljb25IYXNoVG9CaWdJbnQiLCJoYXNoIiwic3RhcnRzV2l0aCIsInN1YnN0cmluZyIsIkJpZ0ludCIsImljb25CaWdpbnRUb0hhc2giLCJpY29uIiwidG9TdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sU0FBU0EsaUJBQWlCQyxJQUFZO0lBQzNDLG9EQUFvRDtJQUNwRCxJQUFJQSxLQUFLQyxVQUFVLENBQUMsT0FBTztRQUN6QixpQ0FBaUM7UUFDakNELE9BQU8sQ0FBQyxDQUFDLEVBQUVBLEtBQUtFLFNBQVMsQ0FBQyxJQUFJO0lBQ2hDLE9BQU87UUFDTCxtSEFBbUg7UUFDbkhGLE9BQU8sQ0FBQyxDQUFDLEVBQUVBLE1BQU07SUFDbkI7SUFFQSxPQUFPRyxPQUFPLENBQUMsRUFBRSxFQUFFSCxNQUFNO0FBQzNCO0FBRUEsT0FBTyxTQUFTSSxpQkFBaUJDLElBQVk7SUFDM0Msb0NBQW9DO0lBQ3BDLE1BQU1MLE9BQU9LLEtBQUtDLFFBQVEsQ0FBQztJQUMzQixnRkFBZ0Y7SUFDaEYsT0FBT04sS0FBS0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUVELEtBQUtFLFNBQVMsQ0FBQyxJQUFJLEdBQUdGLEtBQUtFLFNBQVMsQ0FBQztBQUMxRSJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../src/images.ts"],"names":[],"mappings":"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"}