@jubbio/core 1.3.1 → 1.3.2

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 (121) hide show
  1. package/dist/cjs/Client.d.ts +157 -0
  2. package/dist/cjs/Client.js +640 -0
  3. package/dist/cjs/builders/ActionRowBuilder.d.ts +53 -0
  4. package/dist/cjs/builders/ActionRowBuilder.js +68 -0
  5. package/dist/cjs/builders/ButtonBuilder.d.ts +77 -0
  6. package/dist/cjs/builders/ButtonBuilder.js +96 -0
  7. package/dist/cjs/builders/EmbedBuilder.d.ts +157 -0
  8. package/dist/cjs/builders/EmbedBuilder.js +208 -0
  9. package/dist/cjs/builders/ModalBuilder.d.ts +122 -0
  10. package/dist/cjs/builders/ModalBuilder.js +162 -0
  11. package/dist/cjs/builders/SelectMenuBuilder.d.ts +123 -0
  12. package/dist/cjs/builders/SelectMenuBuilder.js +165 -0
  13. package/dist/cjs/builders/SlashCommandBuilder.d.ts +197 -0
  14. package/dist/cjs/builders/SlashCommandBuilder.js +324 -0
  15. package/dist/cjs/builders/index.d.ts +9 -0
  16. package/dist/cjs/builders/index.js +26 -0
  17. package/dist/cjs/enums.d.ts +191 -0
  18. package/dist/cjs/enums.js +211 -0
  19. package/dist/cjs/index.d.ts +25 -0
  20. package/dist/cjs/index.js +130 -0
  21. package/dist/cjs/managers/BaseManager.d.ts +69 -0
  22. package/dist/cjs/managers/BaseManager.js +106 -0
  23. package/dist/cjs/managers/ChannelManager.d.ts +95 -0
  24. package/dist/cjs/managers/ChannelManager.js +205 -0
  25. package/dist/cjs/managers/GuildMemberManager.d.ts +74 -0
  26. package/dist/cjs/managers/GuildMemberManager.js +157 -0
  27. package/dist/cjs/managers/RoleManager.d.ts +84 -0
  28. package/dist/cjs/managers/RoleManager.js +207 -0
  29. package/dist/cjs/managers/index.d.ts +7 -0
  30. package/dist/cjs/managers/index.js +24 -0
  31. package/dist/cjs/rest/REST.d.ts +527 -0
  32. package/dist/cjs/rest/REST.js +904 -0
  33. package/dist/cjs/rest/index.d.ts +1 -0
  34. package/dist/cjs/rest/index.js +18 -0
  35. package/dist/cjs/sharding/ShardingManager.d.ts +179 -0
  36. package/dist/cjs/sharding/ShardingManager.js +375 -0
  37. package/dist/cjs/sharding/index.d.ts +4 -0
  38. package/dist/cjs/sharding/index.js +21 -0
  39. package/dist/cjs/structures/Channel.d.ts +122 -0
  40. package/dist/cjs/structures/Channel.js +240 -0
  41. package/dist/cjs/structures/Collection.d.ts +53 -0
  42. package/dist/cjs/structures/Collection.js +115 -0
  43. package/dist/cjs/structures/Guild.d.ts +59 -0
  44. package/dist/cjs/structures/Guild.js +94 -0
  45. package/dist/cjs/structures/GuildMember.d.ts +174 -0
  46. package/dist/cjs/structures/GuildMember.js +311 -0
  47. package/dist/cjs/structures/Interaction.d.ts +245 -0
  48. package/dist/cjs/structures/Interaction.js +450 -0
  49. package/dist/cjs/structures/Message.d.ts +98 -0
  50. package/dist/cjs/structures/Message.js +195 -0
  51. package/dist/cjs/structures/User.d.ts +37 -0
  52. package/dist/cjs/structures/User.js +65 -0
  53. package/dist/cjs/structures/index.d.ts +7 -0
  54. package/dist/cjs/structures/index.js +25 -0
  55. package/dist/cjs/structures.d.ts +1 -0
  56. package/dist/cjs/structures.js +19 -0
  57. package/dist/cjs/types.d.ts +255 -0
  58. package/dist/cjs/types.js +3 -0
  59. package/dist/cjs/utils/BitField.d.ts +66 -0
  60. package/dist/cjs/utils/BitField.js +138 -0
  61. package/dist/cjs/utils/Collection.d.ts +116 -0
  62. package/dist/cjs/utils/Collection.js +265 -0
  63. package/dist/cjs/utils/Collector.d.ts +152 -0
  64. package/dist/cjs/utils/Collector.js +314 -0
  65. package/dist/cjs/utils/DataResolver.d.ts +61 -0
  66. package/dist/cjs/utils/DataResolver.js +146 -0
  67. package/dist/cjs/utils/Formatters.d.ts +145 -0
  68. package/dist/cjs/utils/Formatters.js +213 -0
  69. package/dist/cjs/utils/IntentsBitField.d.ts +85 -0
  70. package/dist/cjs/utils/IntentsBitField.js +99 -0
  71. package/dist/cjs/utils/Partials.d.ts +104 -0
  72. package/dist/cjs/utils/Partials.js +148 -0
  73. package/dist/cjs/utils/PermissionsBitField.d.ts +118 -0
  74. package/dist/cjs/utils/PermissionsBitField.js +145 -0
  75. package/dist/cjs/utils/SnowflakeUtil.d.ts +63 -0
  76. package/dist/cjs/utils/SnowflakeUtil.js +93 -0
  77. package/dist/cjs/utils/Sweepers.d.ts +119 -0
  78. package/dist/cjs/utils/Sweepers.js +249 -0
  79. package/dist/cjs/utils/index.d.ts +13 -0
  80. package/dist/cjs/utils/index.js +30 -0
  81. package/dist/esm/Client.js +634 -0
  82. package/dist/esm/builders/ActionRowBuilder.js +64 -0
  83. package/dist/esm/builders/ButtonBuilder.js +92 -0
  84. package/dist/esm/builders/EmbedBuilder.js +204 -0
  85. package/dist/esm/builders/ModalBuilder.js +157 -0
  86. package/dist/esm/builders/SelectMenuBuilder.js +161 -0
  87. package/dist/esm/builders/SlashCommandBuilder.js +311 -0
  88. package/dist/esm/builders/index.js +10 -0
  89. package/dist/esm/enums.js +208 -0
  90. package/dist/esm/index.js +34 -0
  91. package/dist/esm/managers/BaseManager.js +100 -0
  92. package/dist/esm/managers/ChannelManager.js +200 -0
  93. package/dist/esm/managers/GuildMemberManager.js +153 -0
  94. package/dist/esm/managers/RoleManager.js +203 -0
  95. package/dist/esm/managers/index.js +8 -0
  96. package/dist/esm/rest/REST.js +900 -0
  97. package/dist/esm/rest/index.js +2 -0
  98. package/dist/esm/sharding/ShardingManager.js +366 -0
  99. package/dist/esm/sharding/index.js +5 -0
  100. package/dist/esm/structures/Channel.js +232 -0
  101. package/dist/esm/structures/Collection.js +111 -0
  102. package/dist/esm/structures/Guild.js +90 -0
  103. package/dist/esm/structures/GuildMember.js +306 -0
  104. package/dist/esm/structures/Interaction.js +438 -0
  105. package/dist/esm/structures/Message.js +191 -0
  106. package/dist/esm/structures/User.js +61 -0
  107. package/dist/esm/structures/index.js +9 -0
  108. package/dist/esm/structures.js +3 -0
  109. package/dist/esm/types.js +2 -0
  110. package/dist/esm/utils/BitField.js +134 -0
  111. package/dist/esm/utils/Collection.js +261 -0
  112. package/dist/esm/utils/Collector.js +305 -0
  113. package/dist/esm/utils/DataResolver.js +142 -0
  114. package/dist/esm/utils/Formatters.js +191 -0
  115. package/dist/esm/utils/IntentsBitField.js +93 -0
  116. package/dist/esm/utils/Partials.js +137 -0
  117. package/dist/esm/utils/PermissionsBitField.js +141 -0
  118. package/dist/esm/utils/SnowflakeUtil.js +89 -0
  119. package/dist/esm/utils/Sweepers.js +245 -0
  120. package/dist/esm/utils/index.js +14 -0
  121. package/package.json +14 -4
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Data resolver utilities for handling various data types
3
+ */
4
+ import { readFile } from 'fs/promises';
5
+ import { basename } from 'path';
6
+ /**
7
+ * Resolves various data types to usable formats
8
+ */
9
+ export class DataResolver {
10
+ /**
11
+ * Resolves a BufferResolvable to a Buffer
12
+ * @param resource The resource to resolve
13
+ */
14
+ static async resolveBuffer(resource) {
15
+ if (Buffer.isBuffer(resource))
16
+ return resource;
17
+ if (typeof resource === 'string') {
18
+ // Check if it's a file path
19
+ if (resource.startsWith('/') || resource.startsWith('./') || resource.startsWith('../') || /^[a-zA-Z]:/.test(resource)) {
20
+ return readFile(resource);
21
+ }
22
+ // Check if it's a URL
23
+ if (resource.startsWith('http://') || resource.startsWith('https://')) {
24
+ const response = await fetch(resource);
25
+ const arrayBuffer = await response.arrayBuffer();
26
+ return Buffer.from(arrayBuffer);
27
+ }
28
+ // Check if it's base64
29
+ if (resource.startsWith('data:')) {
30
+ const base64Data = resource.split(',')[1];
31
+ return Buffer.from(base64Data, 'base64');
32
+ }
33
+ // Assume it's a file path
34
+ return readFile(resource);
35
+ }
36
+ throw new TypeError('Invalid resource type');
37
+ }
38
+ /**
39
+ * Resolves a Base64Resolvable to a base64 string
40
+ * @param resource The resource to resolve
41
+ * @param mimeType The MIME type for the data URI
42
+ */
43
+ static async resolveBase64(resource, mimeType = 'image/png') {
44
+ const buffer = await this.resolveBuffer(resource);
45
+ return `data:${mimeType};base64,${buffer.toString('base64')}`;
46
+ }
47
+ /**
48
+ * Resolves a file to a name and buffer
49
+ * @param resource The file resource
50
+ */
51
+ static async resolveFile(resource) {
52
+ if (typeof resource === 'object' && 'attachment' in resource) {
53
+ const buffer = await this.resolveBuffer(resource.attachment);
54
+ const name = resource.name ?? 'file';
55
+ return { name, data: buffer };
56
+ }
57
+ const buffer = await this.resolveBuffer(resource);
58
+ const name = typeof resource === 'string' ? basename(resource) : 'file';
59
+ return { name, data: buffer };
60
+ }
61
+ /**
62
+ * Resolves multiple files
63
+ * @param resources The file resources
64
+ */
65
+ static async resolveFiles(resources) {
66
+ return Promise.all(resources.map(r => this.resolveFile(r)));
67
+ }
68
+ /**
69
+ * Resolves a color to a number
70
+ * @param color The color to resolve
71
+ */
72
+ static resolveColor(color) {
73
+ if (color === null)
74
+ return null;
75
+ if (typeof color === 'number') {
76
+ if (color < 0 || color > 0xFFFFFF)
77
+ throw new RangeError('Color must be between 0 and 16777215');
78
+ return color;
79
+ }
80
+ if (typeof color === 'string') {
81
+ if (color.startsWith('#')) {
82
+ return parseInt(color.slice(1), 16);
83
+ }
84
+ // Named colors
85
+ const namedColors = {
86
+ default: 0x000000,
87
+ white: 0xFFFFFF,
88
+ aqua: 0x1ABC9C,
89
+ green: 0x57F287,
90
+ blue: 0x3498DB,
91
+ yellow: 0xFEE75C,
92
+ purple: 0x9B59B6,
93
+ fuchsia: 0xEB459E,
94
+ gold: 0xF1C40F,
95
+ orange: 0xE67E22,
96
+ red: 0xED4245,
97
+ grey: 0x95A5A6,
98
+ navy: 0x34495E,
99
+ blurple: 0x5865F2,
100
+ };
101
+ const lower = color.toLowerCase();
102
+ if (lower in namedColors)
103
+ return namedColors[lower];
104
+ return parseInt(color, 16);
105
+ }
106
+ if (Array.isArray(color)) {
107
+ return (color[0] << 16) + (color[1] << 8) + color[2];
108
+ }
109
+ throw new TypeError('Invalid color type');
110
+ }
111
+ /**
112
+ * Resolves a string to a snowflake ID
113
+ * @param value The value to resolve
114
+ */
115
+ static resolveSnowflake(value) {
116
+ if (typeof value === 'object' && 'id' in value) {
117
+ return String(value.id);
118
+ }
119
+ return String(value);
120
+ }
121
+ /**
122
+ * Resolves an image to a base64 data URI
123
+ * @param image The image to resolve
124
+ */
125
+ static async resolveImage(image) {
126
+ const buffer = await this.resolveBuffer(image);
127
+ // Detect MIME type from magic bytes
128
+ let mimeType = 'image/png';
129
+ if (buffer[0] === 0xFF && buffer[1] === 0xD8) {
130
+ mimeType = 'image/jpeg';
131
+ }
132
+ else if (buffer[0] === 0x47 && buffer[1] === 0x49 && buffer[2] === 0x46) {
133
+ mimeType = 'image/gif';
134
+ }
135
+ else if (buffer[0] === 0x52 && buffer[1] === 0x49 && buffer[2] === 0x46 && buffer[3] === 0x46) {
136
+ mimeType = 'image/webp';
137
+ }
138
+ return `data:${mimeType};base64,${buffer.toString('base64')}`;
139
+ }
140
+ }
141
+ export default DataResolver;
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL0RhdGFSZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUtoQzs7R0FFRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ3ZCOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQTBCO1FBQ25ELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUUvQyxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLDRCQUE0QjtZQUM1QixJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDdkgsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUIsQ0FBQztZQUVELHNCQUFzQjtZQUN0QixJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN0RSxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxXQUFXLEdBQUcsTUFBTSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2pELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsQyxDQUFDO1lBRUQsdUJBQXVCO1lBQ3ZC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QUFDO1FBRS9DLG9DQUFvQztRQUNwQyxJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUM7UUFDM0IsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM3QyxRQUFRLEdBQUcsWUFBWSxDQUFDO1FBQzFCLENBQUM7YUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDMUUsUUFBUSxHQUFHLFdBQVcsQ0FBQztRQUN6QixDQUFDO2FBQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDaEcsUUFBUSxHQUFHLFlBQVksQ0FBQztRQUMxQixDQUFDO1FBRUQsT0FBTyxRQUFRLFFBQVEsV0FBVyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7SUFDaEUsQ0FBQztDQUNGO0FBRUQsZUFBZSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERhdGEgcmVzb2x2ZXIgdXRpbGl0aWVzIGZvciBoYW5kbGluZyB2YXJpb3VzIGRhdGEgdHlwZXNcbiAqL1xuXG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSAncGF0aCc7XG5cbmV4cG9ydCB0eXBlIEJ1ZmZlclJlc29sdmFibGUgPSBCdWZmZXIgfCBzdHJpbmc7XG5leHBvcnQgdHlwZSBCYXNlNjRSZXNvbHZhYmxlID0gQnVmZmVyIHwgc3RyaW5nO1xuXG4vKipcbiAqIFJlc29sdmVzIHZhcmlvdXMgZGF0YSB0eXBlcyB0byB1c2FibGUgZm9ybWF0c1xuICovXG5leHBvcnQgY2xhc3MgRGF0YVJlc29sdmVyIHtcbiAgLyoqXG4gICAqIFJlc29sdmVzIGEgQnVmZmVyUmVzb2x2YWJsZSB0byBhIEJ1ZmZlclxuICAgKiBAcGFyYW0gcmVzb3VyY2UgVGhlIHJlc291cmNlIHRvIHJlc29sdmVcbiAgICovXG4gIHN0YXRpYyBhc3luYyByZXNvbHZlQnVmZmVyKHJlc291cmNlOiBCdWZmZXJSZXNvbHZhYmxlKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHJlc291cmNlKSkgcmV0dXJuIHJlc291cmNlO1xuICAgIFxuICAgIGlmICh0eXBlb2YgcmVzb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGEgZmlsZSBwYXRoXG4gICAgICBpZiAocmVzb3VyY2Uuc3RhcnRzV2l0aCgnLycpIHx8IHJlc291cmNlLnN0YXJ0c1dpdGgoJy4vJykgfHwgcmVzb3VyY2Uuc3RhcnRzV2l0aCgnLi4vJykgfHwgL15bYS16QS1aXTovLnRlc3QocmVzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiByZWFkRmlsZShyZXNvdXJjZSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGl0J3MgYSBVUkxcbiAgICAgIGlmIChyZXNvdXJjZS5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgcmVzb3VyY2Uuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlc291cmNlKTtcbiAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpO1xuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYXJyYXlCdWZmZXIpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGJhc2U2NFxuICAgICAgaWYgKHJlc291cmNlLnN0YXJ0c1dpdGgoJ2RhdGE6JykpIHtcbiAgICAgICAgY29uc3QgYmFzZTY0RGF0YSA9IHJlc291cmNlLnNwbGl0KCcsJylbMV07XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShiYXNlNjREYXRhLCAnYmFzZTY0Jyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEFzc3VtZSBpdCdzIGEgZmlsZSBwYXRoXG4gICAgICByZXR1cm4gcmVhZEZpbGUocmVzb3VyY2UpO1xuICAgIH1cbiAgICBcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHJlc291cmNlIHR5cGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhIEJhc2U2NFJlc29sdmFibGUgdG8gYSBiYXNlNjQgc3RyaW5nXG4gICAqIEBwYXJhbSByZXNvdXJjZSBUaGUgcmVzb3VyY2UgdG8gcmVzb2x2ZVxuICAgKiBAcGFyYW0gbWltZVR5cGUgVGhlIE1JTUUgdHlwZSBmb3IgdGhlIGRhdGEgVVJJXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgcmVzb2x2ZUJhc2U2NChyZXNvdXJjZTogQmFzZTY0UmVzb2x2YWJsZSwgbWltZVR5cGUgPSAnaW1hZ2UvcG5nJyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgdGhpcy5yZXNvbHZlQnVmZmVyKHJlc291cmNlKTtcbiAgICByZXR1cm4gYGRhdGE6JHttaW1lVHlwZX07YmFzZTY0LCR7YnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGEgZmlsZSB0byBhIG5hbWUgYW5kIGJ1ZmZlclxuICAgKiBAcGFyYW0gcmVzb3VyY2UgVGhlIGZpbGUgcmVzb3VyY2VcbiAgICovXG4gIHN0YXRpYyBhc3luYyByZXNvbHZlRmlsZShyZXNvdXJjZTogQnVmZmVyUmVzb2x2YWJsZSB8IHsgbmFtZT86IHN0cmluZzsgYXR0YWNobWVudDogQnVmZmVyUmVzb2x2YWJsZSB9KTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgZGF0YTogQnVmZmVyIH0+IHtcbiAgICBpZiAodHlwZW9mIHJlc291cmNlID09PSAnb2JqZWN0JyAmJiAnYXR0YWNobWVudCcgaW4gcmVzb3VyY2UpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHRoaXMucmVzb2x2ZUJ1ZmZlcihyZXNvdXJjZS5hdHRhY2htZW50KTtcbiAgICAgIGNvbnN0IG5hbWUgPSByZXNvdXJjZS5uYW1lID8/ICdmaWxlJztcbiAgICAgIHJldHVybiB7IG5hbWUsIGRhdGE6IGJ1ZmZlciB9O1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB0aGlzLnJlc29sdmVCdWZmZXIocmVzb3VyY2UpO1xuICAgIGNvbnN0IG5hbWUgPSB0eXBlb2YgcmVzb3VyY2UgPT09ICdzdHJpbmcnID8gYmFzZW5hbWUocmVzb3VyY2UpIDogJ2ZpbGUnO1xuICAgIHJldHVybiB7IG5hbWUsIGRhdGE6IGJ1ZmZlciB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIG11bHRpcGxlIGZpbGVzXG4gICAqIEBwYXJhbSByZXNvdXJjZXMgVGhlIGZpbGUgcmVzb3VyY2VzXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgcmVzb2x2ZUZpbGVzKHJlc291cmNlczogKEJ1ZmZlclJlc29sdmFibGUgfCB7IG5hbWU/OiBzdHJpbmc7IGF0dGFjaG1lbnQ6IEJ1ZmZlclJlc29sdmFibGUgfSlbXSk6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IGRhdGE6IEJ1ZmZlciB9W10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVzb3VyY2VzLm1hcChyID0+IHRoaXMucmVzb2x2ZUZpbGUocikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhIGNvbG9yIHRvIGEgbnVtYmVyXG4gICAqIEBwYXJhbSBjb2xvciBUaGUgY29sb3IgdG8gcmVzb2x2ZVxuICAgKi9cbiAgc3RhdGljIHJlc29sdmVDb2xvcihjb2xvcjogbnVtYmVyIHwgc3RyaW5nIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgbnVsbCk6IG51bWJlciB8IG51bGwge1xuICAgIGlmIChjb2xvciA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChjb2xvciA8IDAgfHwgY29sb3IgPiAweEZGRkZGRikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0NvbG9yIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxNjc3NzIxNScpO1xuICAgICAgcmV0dXJuIGNvbG9yO1xuICAgIH1cbiAgICBcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKGNvbG9yLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoY29sb3Iuc2xpY2UoMSksIDE2KTtcbiAgICAgIH1cbiAgICAgIC8vIE5hbWVkIGNvbG9yc1xuICAgICAgY29uc3QgbmFtZWRDb2xvcnM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XG4gICAgICAgIGRlZmF1bHQ6IDB4MDAwMDAwLFxuICAgICAgICB3aGl0ZTogMHhGRkZGRkYsXG4gICAgICAgIGFxdWE6IDB4MUFCQzlDLFxuICAgICAgICBncmVlbjogMHg1N0YyODcsXG4gICAgICAgIGJsdWU6IDB4MzQ5OERCLFxuICAgICAgICB5ZWxsb3c6IDB4RkVFNzVDLFxuICAgICAgICBwdXJwbGU6IDB4OUI1OUI2LFxuICAgICAgICBmdWNoc2lhOiAweEVCNDU5RSxcbiAgICAgICAgZ29sZDogMHhGMUM0MEYsXG4gICAgICAgIG9yYW5nZTogMHhFNjdFMjIsXG4gICAgICAgIHJlZDogMHhFRDQyNDUsXG4gICAgICAgIGdyZXk6IDB4OTVBNUE2LFxuICAgICAgICBuYXZ5OiAweDM0NDk1RSxcbiAgICAgICAgYmx1cnBsZTogMHg1ODY1RjIsXG4gICAgICB9O1xuICAgICAgY29uc3QgbG93ZXIgPSBjb2xvci50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGxvd2VyIGluIG5hbWVkQ29sb3JzKSByZXR1cm4gbmFtZWRDb2xvcnNbbG93ZXJdO1xuICAgICAgcmV0dXJuIHBhcnNlSW50KGNvbG9yLCAxNik7XG4gICAgfVxuICAgIFxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbG9yKSkge1xuICAgICAgcmV0dXJuIChjb2xvclswXSA8PCAxNikgKyAoY29sb3JbMV0gPDwgOCkgKyBjb2xvclsyXTtcbiAgICB9XG4gICAgXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjb2xvciB0eXBlJyk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYSBzdHJpbmcgdG8gYSBzbm93Zmxha2UgSURcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byByZXNvbHZlXG4gICAqL1xuICBzdGF0aWMgcmVzb2x2ZVNub3dmbGFrZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgeyBpZDogc3RyaW5nIHwgbnVtYmVyIH0pOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICdpZCcgaW4gdmFsdWUpIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUuaWQpO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbiBpbWFnZSB0byBhIGJhc2U2NCBkYXRhIFVSSVxuICAgKiBAcGFyYW0gaW1hZ2UgVGhlIGltYWdlIHRvIHJlc29sdmVcbiAgICovXG4gIHN0YXRpYyBhc3luYyByZXNvbHZlSW1hZ2UoaW1hZ2U6IEJ1ZmZlclJlc29sdmFibGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHRoaXMucmVzb2x2ZUJ1ZmZlcihpbWFnZSk7XG4gICAgXG4gICAgLy8gRGV0ZWN0IE1JTUUgdHlwZSBmcm9tIG1hZ2ljIGJ5dGVzXG4gICAgbGV0IG1pbWVUeXBlID0gJ2ltYWdlL3BuZyc7XG4gICAgaWYgKGJ1ZmZlclswXSA9PT0gMHhGRiAmJiBidWZmZXJbMV0gPT09IDB4RDgpIHtcbiAgICAgIG1pbWVUeXBlID0gJ2ltYWdlL2pwZWcnO1xuICAgIH0gZWxzZSBpZiAoYnVmZmVyWzBdID09PSAweDQ3ICYmIGJ1ZmZlclsxXSA9PT0gMHg0OSAmJiBidWZmZXJbMl0gPT09IDB4NDYpIHtcbiAgICAgIG1pbWVUeXBlID0gJ2ltYWdlL2dpZic7XG4gICAgfSBlbHNlIGlmIChidWZmZXJbMF0gPT09IDB4NTIgJiYgYnVmZmVyWzFdID09PSAweDQ5ICYmIGJ1ZmZlclsyXSA9PT0gMHg0NiAmJiBidWZmZXJbM10gPT09IDB4NDYpIHtcbiAgICAgIG1pbWVUeXBlID0gJ2ltYWdlL3dlYnAnO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gYGRhdGE6JHttaW1lVHlwZX07YmFzZTY0LCR7YnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKX1gO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGFSZXNvbHZlcjtcbiJdfQ==
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Formatters for markdown and mentions
3
+ */
4
+ /**
5
+ * Formats a user mention
6
+ * @param userId The user ID to mention
7
+ */
8
+ export function userMention(userId) {
9
+ return `<@${userId}>`;
10
+ }
11
+ /**
12
+ * Formats a channel mention
13
+ * @param channelId The channel ID to mention
14
+ */
15
+ export function channelMention(channelId) {
16
+ return `<#${channelId}>`;
17
+ }
18
+ /**
19
+ * Formats a role mention
20
+ * @param roleId The role ID to mention
21
+ */
22
+ export function roleMention(roleId) {
23
+ return `<@&${roleId}>`;
24
+ }
25
+ /**
26
+ * Formats a custom emoji
27
+ * @param emojiId The emoji ID
28
+ * @param name The emoji name
29
+ * @param animated Whether the emoji is animated
30
+ */
31
+ export function formatEmoji(emojiId, name, animated = false) {
32
+ return `<${animated ? 'a' : ''}:${name}:${emojiId}>`;
33
+ }
34
+ /**
35
+ * Formats text as bold
36
+ * @param text The text to format
37
+ */
38
+ export function bold(text) {
39
+ return `**${text}**`;
40
+ }
41
+ /**
42
+ * Formats text as italic
43
+ * @param text The text to format
44
+ */
45
+ export function italic(text) {
46
+ return `*${text}*`;
47
+ }
48
+ /**
49
+ * Formats text as underline
50
+ * @param text The text to format
51
+ */
52
+ export function underline(text) {
53
+ return `__${text}__`;
54
+ }
55
+ /**
56
+ * Formats text as strikethrough
57
+ * @param text The text to format
58
+ */
59
+ export function strikethrough(text) {
60
+ return `~~${text}~~`;
61
+ }
62
+ /**
63
+ * Formats text as spoiler
64
+ * @param text The text to format
65
+ */
66
+ export function spoiler(text) {
67
+ return `||${text}||`;
68
+ }
69
+ /**
70
+ * Formats text as inline code
71
+ * @param text The text to format
72
+ */
73
+ export function inlineCode(text) {
74
+ return `\`${text}\``;
75
+ }
76
+ /**
77
+ * Formats text as a code block
78
+ * @param text The text to format
79
+ * @param language The language for syntax highlighting
80
+ */
81
+ export function codeBlock(text, language) {
82
+ return `\`\`\`${language ?? ''}\n${text}\n\`\`\``;
83
+ }
84
+ /**
85
+ * Formats text as a block quote
86
+ * @param text The text to format
87
+ */
88
+ export function blockQuote(text) {
89
+ return `>>> ${text}`;
90
+ }
91
+ /**
92
+ * Formats text as a single-line quote
93
+ * @param text The text to format
94
+ */
95
+ export function quote(text) {
96
+ return `> ${text}`;
97
+ }
98
+ /**
99
+ * Formats a URL as a hyperlink
100
+ * @param text The text to display
101
+ * @param url The URL to link to
102
+ * @param title Optional title for the link
103
+ */
104
+ export function hyperlink(text, url, title) {
105
+ return title ? `[${text}](${url} "${title}")` : `[${text}](${url})`;
106
+ }
107
+ /**
108
+ * Formats a URL to hide the embed
109
+ * @param url The URL to format
110
+ */
111
+ export function hideLinkEmbed(url) {
112
+ return `<${url}>`;
113
+ }
114
+ /**
115
+ * Time format styles
116
+ */
117
+ export var TimestampStyles;
118
+ (function (TimestampStyles) {
119
+ /** Short time format (e.g., 16:20) */
120
+ TimestampStyles["ShortTime"] = "t";
121
+ /** Long time format (e.g., 16:20:30) */
122
+ TimestampStyles["LongTime"] = "T";
123
+ /** Short date format (e.g., 20/04/2021) */
124
+ TimestampStyles["ShortDate"] = "d";
125
+ /** Long date format (e.g., 20 April 2021) */
126
+ TimestampStyles["LongDate"] = "D";
127
+ /** Short date/time format (e.g., 20 April 2021 16:20) */
128
+ TimestampStyles["ShortDateTime"] = "f";
129
+ /** Long date/time format (e.g., Tuesday, 20 April 2021 16:20) */
130
+ TimestampStyles["LongDateTime"] = "F";
131
+ /** Relative time format (e.g., 2 months ago) */
132
+ TimestampStyles["RelativeTime"] = "R";
133
+ })(TimestampStyles || (TimestampStyles = {}));
134
+ /**
135
+ * Formats a timestamp
136
+ * @param timestamp The timestamp (Date, number in ms, or seconds)
137
+ * @param style The style to use
138
+ */
139
+ export function time(timestamp, style) {
140
+ const seconds = timestamp instanceof Date
141
+ ? Math.floor(timestamp.getTime() / 1000)
142
+ : typeof timestamp === 'number' && timestamp > 1e12
143
+ ? Math.floor(timestamp / 1000)
144
+ : timestamp;
145
+ return style ? `<t:${seconds}:${style}>` : `<t:${seconds}>`;
146
+ }
147
+ /**
148
+ * Formats a heading (H1)
149
+ * @param text The text to format
150
+ */
151
+ export function heading(text, level = 1) {
152
+ return `${'#'.repeat(level)} ${text}`;
153
+ }
154
+ /**
155
+ * Formats an unordered list
156
+ * @param items The items to list
157
+ */
158
+ export function unorderedList(items) {
159
+ return items.map(item => `- ${item}`).join('\n');
160
+ }
161
+ /**
162
+ * Formats an ordered list
163
+ * @param items The items to list
164
+ */
165
+ export function orderedList(items) {
166
+ return items.map((item, i) => `${i + 1}. ${item}`).join('\n');
167
+ }
168
+ // Export all formatters as a namespace too (DJS compatibility)
169
+ export const Formatters = {
170
+ userMention,
171
+ channelMention,
172
+ roleMention,
173
+ formatEmoji,
174
+ bold,
175
+ italic,
176
+ underline,
177
+ strikethrough,
178
+ spoiler,
179
+ inlineCode,
180
+ codeBlock,
181
+ blockQuote,
182
+ quote,
183
+ hyperlink,
184
+ hideLinkEmbed,
185
+ time,
186
+ heading,
187
+ unorderedList,
188
+ orderedList,
189
+ TimestampStyles,
190
+ };
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9ybWF0dGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9Gb3JtYXR0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUF1QjtJQUNqRCxPQUFPLEtBQUssTUFBTSxHQUFHLENBQUM7QUFDeEIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsU0FBMEI7SUFDdkQsT0FBTyxLQUFLLFNBQVMsR0FBRyxDQUFDO0FBQzNCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQXVCO0lBQ2pELE9BQU8sTUFBTSxNQUFNLEdBQUcsQ0FBQztBQUN6QixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLE9BQXdCLEVBQUUsSUFBWSxFQUFFLFFBQVEsR0FBRyxLQUFLO0lBQ2xGLE9BQU8sSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUN2RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLElBQUksQ0FBQyxJQUFZO0lBQy9CLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQztBQUN2QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxJQUFZO0lBQ2pDLE9BQU8sSUFBSSxJQUFJLEdBQUcsQ0FBQztBQUNyQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxJQUFZO0lBQ3BDLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQztBQUN2QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUFZO0lBQ3hDLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQztBQUN2QixDQUFD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QUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQsK0RBQStEO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixXQUFXO0lBQ1gsY0FBYztJQUNkLFdBQVc7SUFDWCxXQUFXO0lBQ1gsSUFBSTtJQUNKLE1BQU07SUFDTixTQUFTO0lBQ1QsYUFBYTtJQUNiLE9BQU87SUFDUCxVQUFVO0lBQ1YsU0FBUztJQUNULFVBQVU7SUFDVixLQUFLO0lBQ0wsU0FBUztJQUNULGFBQWE7SUFDYixJQUFJO0lBQ0osT0FBTztJQUNQLGFBQWE7SUFDYixXQUFXO0lBQ1gsZUFBZTtDQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb3JtYXR0ZXJzIGZvciBtYXJrZG93biBhbmQgbWVudGlvbnNcbiAqL1xuXG4vKipcbiAqIEZvcm1hdHMgYSB1c2VyIG1lbnRpb25cbiAqIEBwYXJhbSB1c2VySWQgVGhlIHVzZXIgSUQgdG8gbWVudGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlck1lbnRpb24odXNlcklkOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYDxAJHt1c2VySWR9PmA7XG59XG5cbi8qKlxuICogRm9ybWF0cyBhIGNoYW5uZWwgbWVudGlvblxuICogQHBhcmFtIGNoYW5uZWxJZCBUaGUgY2hhbm5lbCBJRCB0byBtZW50aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFubmVsTWVudGlvbihjaGFubmVsSWQ6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgPCMke2NoYW5uZWxJZH0+YDtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIGEgcm9sZSBtZW50aW9uXG4gKiBAcGFyYW0gcm9sZUlkIFRoZSByb2xlIElEIHRvIG1lbnRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvbGVNZW50aW9uKHJvbGVJZDogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGA8QCYke3JvbGVJZH0+YDtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIGEgY3VzdG9tIGVtb2ppXG4gKiBAcGFyYW0gZW1vamlJZCBUaGUgZW1vamkgSURcbiAqIEBwYXJhbSBuYW1lIFRoZSBlbW9qaSBuYW1lXG4gKiBAcGFyYW0gYW5pbWF0ZWQgV2hldGhlciB0aGUgZW1vamkgaXMgYW5pbWF0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEVtb2ppKGVtb2ppSWQ6IHN0cmluZyB8IG51bWJlciwgbmFtZTogc3RyaW5nLCBhbmltYXRlZCA9IGZhbHNlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGA8JHthbmltYXRlZCA/ICdhJyA6ICcnfToke25hbWV9OiR7ZW1vamlJZH0+YDtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIHRleHQgYXMgYm9sZFxuICogQHBhcmFtIHRleHQgVGhlIHRleHQgdG8gZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib2xkKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgKioke3RleHR9KipgO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgdGV4dCBhcyBpdGFsaWNcbiAqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXRhbGljKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgKiR7dGV4dH0qYDtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIHRleHQgYXMgdW5kZXJsaW5lXG4gKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBmb3JtYXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuZGVybGluZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYF9fJHt0ZXh0fV9fYDtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIHRleHQgYXMgc3RyaWtldGhyb3VnaFxuICogQHBhcmFtIHRleHQgVGhlIHRleHQgdG8gZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpa2V0aHJvdWdoKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgfn4ke3RleHR9fn5gO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgdGV4dCBhcyBzcG9pbGVyXG4gKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBmb3JtYXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwb2lsZXIodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGB8fCR7dGV4dH18fGA7XG59XG5cbi8qKlxuICogRm9ybWF0cyB0ZXh0IGFzIGlubGluZSBjb2RlXG4gKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBmb3JtYXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlubGluZUNvZGUodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBcXGAke3RleHR9XFxgYDtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIHRleHQgYXMgYSBjb2RlIGJsb2NrXG4gKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBmb3JtYXRcbiAqIEBwYXJhbSBsYW5ndWFnZSBUaGUgbGFuZ3VhZ2UgZm9yIHN5bnRheCBoaWdobGlnaHRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvZGVCbG9jayh0ZXh0OiBzdHJpbmcsIGxhbmd1YWdlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBcXGBcXGBcXGAke2xhbmd1YWdlID8/ICcnfVxcbiR7dGV4dH1cXG5cXGBcXGBcXGBgO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgdGV4dCBhcyBhIGJsb2NrIHF1b3RlXG4gKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBmb3JtYXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJsb2NrUXVvdGUodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGA+Pj4gJHt0ZXh0fWA7XG59XG5cbi8qKlxuICogRm9ybWF0cyB0ZXh0IGFzIGEgc2luZ2xlLWxpbmUgcXVvdGVcbiAqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcXVvdGUodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGA+ICR7dGV4dH1gO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgYSBVUkwgYXMgYSBoeXBlcmxpbmtcbiAqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byBsaW5rIHRvXG4gKiBAcGFyYW0gdGl0bGUgT3B0aW9uYWwgdGl0bGUgZm9yIHRoZSBsaW5rXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoeXBlcmxpbmsodGV4dDogc3RyaW5nLCB1cmw6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGl0bGUgPyBgWyR7dGV4dH1dKCR7dXJsfSBcIiR7dGl0bGV9XCIpYCA6IGBbJHt0ZXh0fV0oJHt1cmx9KWA7XG59XG5cbi8qKlxuICogRm9ybWF0cyBhIFVSTCB0byBoaWRlIHRoZSBlbWJlZFxuICogQHBhcmFtIHVybCBUaGUgVVJMIHRvIGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlkZUxpbmtFbWJlZCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgPCR7dXJsfT5gO1xufVxuXG4vKipcbiAqIFRpbWUgZm9ybWF0IHN0eWxlc1xuICovXG5leHBvcnQgZW51bSBUaW1lc3RhbXBTdHlsZXMge1xuICAvKiogU2hvcnQgdGltZSBmb3JtYXQgKGUuZy4sIDE2OjIwKSAqL1xuICBTaG9ydFRpbWUgPSAndCcsXG4gIC8qKiBMb25nIHRpbWUgZm9ybWF0IChlLmcuLCAxNjoyMDozMCkgKi9cbiAgTG9uZ1RpbWUgPSAnVCcsXG4gIC8qKiBTaG9ydCBkYXRlIGZvcm1hdCAoZS5nLiwgMjAvMDQvMjAyMSkgKi9cbiAgU2hvcnREYXRlID0gJ2QnLFxuICAvKiogTG9uZyBkYXRlIGZvcm1hdCAoZS5nLiwgMjAgQXByaWwgMjAyMSkgKi9cbiAgTG9uZ0RhdGUgPSAnRCcsXG4gIC8qKiBTaG9ydCBkYXRlL3RpbWUgZm9ybWF0IChlLmcuLCAyMCBBcHJpbCAyMDIxIDE2OjIwKSAqL1xuICBTaG9ydERhdGVUaW1lID0gJ2YnLFxuICAvKiogTG9uZyBkYXRlL3RpbWUgZm9ybWF0IChlLmcuLCBUdWVzZGF5LCAyMCBBcHJpbCAyMDIxIDE2OjIwKSAqL1xuICBMb25nRGF0ZVRpbWUgPSAnRicsXG4gIC8qKiBSZWxhdGl2ZSB0aW1lIGZvcm1hdCAoZS5nLiwgMiBtb250aHMgYWdvKSAqL1xuICBSZWxhdGl2ZVRpbWUgPSAnUicsXG59XG5cbi8qKlxuICogRm9ybWF0cyBhIHRpbWVzdGFtcFxuICogQHBhcmFtIHRpbWVzdGFtcCBUaGUgdGltZXN0YW1wIChEYXRlLCBudW1iZXIgaW4gbXMsIG9yIHNlY29uZHMpXG4gKiBAcGFyYW0gc3R5bGUgVGhlIHN0eWxlIHRvIHVzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdGltZSh0aW1lc3RhbXA6IERhdGUgfCBudW1iZXIsIHN0eWxlPzogVGltZXN0YW1wU3R5bGVzKTogc3RyaW5nIHtcbiAgY29uc3Qgc2Vjb25kcyA9IHRpbWVzdGFtcCBpbnN0YW5jZW9mIERhdGUgXG4gICAgPyBNYXRoLmZsb29yKHRpbWVzdGFtcC5nZXRUaW1lKCkgLyAxMDAwKSBcbiAgICA6IHR5cGVvZiB0aW1lc3RhbXAgPT09ICdudW1iZXInICYmIHRpbWVzdGFtcCA+IDFlMTIgXG4gICAgICA/IE1hdGguZmxvb3IodGltZXN0YW1wIC8gMTAwMCkgXG4gICAgICA6IHRpbWVzdGFtcDtcbiAgXG4gIHJldHVybiBzdHlsZSA/IGA8dDoke3NlY29uZHN9OiR7c3R5bGV9PmAgOiBgPHQ6JHtzZWNvbmRzfT5gO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgYSBoZWFkaW5nIChIMSlcbiAqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGVhZGluZyh0ZXh0OiBzdHJpbmcsIGxldmVsOiAxIHwgMiB8IDMgPSAxKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAkeycjJy5yZXBlYXQobGV2ZWwpfSAke3RleHR9YDtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIGFuIHVub3JkZXJlZCBsaXN0XG4gKiBAcGFyYW0gaXRlbXMgVGhlIGl0ZW1zIHRvIGxpc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVub3JkZXJlZExpc3QoaXRlbXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGl0ZW1zLm1hcChpdGVtID0+IGAtICR7aXRlbX1gKS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIGFuIG9yZGVyZWQgbGlzdFxuICogQHBhcmFtIGl0ZW1zIFRoZSBpdGVtcyB0byBsaXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcmRlcmVkTGlzdChpdGVtczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpKSA9PiBgJHtpICsgMX0uICR7aXRlbX1gKS5qb2luKCdcXG4nKTtcbn1cblxuLy8gRXhwb3J0IGFsbCBmb3JtYXR0ZXJzIGFzIGEgbmFtZXNwYWNlIHRvbyAoREpTIGNvbXBhdGliaWxpdHkpXG5leHBvcnQgY29uc3QgRm9ybWF0dGVycyA9IHtcbiAgdXNlck1lbnRpb24sXG4gIGNoYW5uZWxNZW50aW9uLFxuICByb2xlTWVudGlvbixcbiAgZm9ybWF0RW1vamksXG4gIGJvbGQsXG4gIGl0YWxpYyxcbiAgdW5kZXJsaW5lLFxuICBzdHJpa2V0aHJvdWdoLFxuICBzcG9pbGVyLFxuICBpbmxpbmVDb2RlLFxuICBjb2RlQmxvY2ssXG4gIGJsb2NrUXVvdGUsXG4gIHF1b3RlLFxuICBoeXBlcmxpbmssXG4gIGhpZGVMaW5rRW1iZWQsXG4gIHRpbWUsXG4gIGhlYWRpbmcsXG4gIHVub3JkZXJlZExpc3QsXG4gIG9yZGVyZWRMaXN0LFxuICBUaW1lc3RhbXBTdHlsZXMsXG59O1xuIl19
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Intents BitField for calculating gateway intents
3
+ */
4
+ import { BitField } from './BitField';
5
+ /**
6
+ * Gateway Intent Bits
7
+ */
8
+ export const GatewayIntentBits = {
9
+ Guilds: 1 << 0,
10
+ GuildMembers: 1 << 1,
11
+ GuildModeration: 1 << 2,
12
+ GuildEmojisAndStickers: 1 << 3,
13
+ GuildIntegrations: 1 << 4,
14
+ GuildWebhooks: 1 << 5,
15
+ GuildInvites: 1 << 6,
16
+ GuildVoiceStates: 1 << 7,
17
+ GuildPresences: 1 << 8,
18
+ GuildMessages: 1 << 9,
19
+ GuildMessageReactions: 1 << 10,
20
+ GuildMessageTyping: 1 << 11,
21
+ DirectMessages: 1 << 12,
22
+ DirectMessageReactions: 1 << 13,
23
+ DirectMessageTyping: 1 << 14,
24
+ MessageContent: 1 << 15,
25
+ GuildScheduledEvents: 1 << 16,
26
+ AutoModerationConfiguration: 1 << 20,
27
+ AutoModerationExecution: 1 << 21,
28
+ };
29
+ /**
30
+ * All non-privileged intents
31
+ */
32
+ export const IntentsAll = Object.values(GatewayIntentBits).reduce((all, i) => all | i, 0);
33
+ /**
34
+ * Privileged intents that require approval
35
+ */
36
+ export const PrivilegedIntents = GatewayIntentBits.GuildMembers |
37
+ GatewayIntentBits.GuildPresences |
38
+ GatewayIntentBits.MessageContent;
39
+ /**
40
+ * Data structure for gateway intents
41
+ */
42
+ export class IntentsBitField extends BitField {
43
+ static Flags = GatewayIntentBits;
44
+ static DefaultBit = 0;
45
+ constructor(bits = 0) {
46
+ super(bits);
47
+ }
48
+ /**
49
+ * Check if any privileged intents are enabled
50
+ */
51
+ hasPrivileged() {
52
+ return this.any(PrivilegedIntents);
53
+ }
54
+ /**
55
+ * Get all privileged intents that are enabled
56
+ */
57
+ getPrivileged() {
58
+ const privileged = [];
59
+ if (this.has(GatewayIntentBits.GuildMembers))
60
+ privileged.push('GuildMembers');
61
+ if (this.has(GatewayIntentBits.GuildPresences))
62
+ privileged.push('GuildPresences');
63
+ if (this.has(GatewayIntentBits.MessageContent))
64
+ privileged.push('MessageContent');
65
+ return privileged;
66
+ }
67
+ }
68
+ /**
69
+ * Calculate intents from an array of intent names or values
70
+ */
71
+ export function calculateIntents(intents) {
72
+ return intents.reduce((acc, intent) => {
73
+ if (typeof intent === 'number')
74
+ return acc | intent;
75
+ if (intent in GatewayIntentBits)
76
+ return acc | GatewayIntentBits[intent];
77
+ return acc;
78
+ }, 0);
79
+ }
80
+ /**
81
+ * Get all intent names from a bitfield value
82
+ */
83
+ export function resolveIntents(bits) {
84
+ const names = [];
85
+ for (const [name, value] of Object.entries(GatewayIntentBits)) {
86
+ if ((bits & value) === value) {
87
+ names.push(name);
88
+ }
89
+ }
90
+ return names;
91
+ }
92
+ export default IntentsBitField;
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZW50c0JpdEZpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL0ludGVudHNCaXRGaWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQXNCLE1BQU0sWUFBWSxDQUFDO0FBTzFEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ2QsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ3BCLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FBQztJQUN2QixzQkFBc0IsRUFBRSxDQUFDLElBQUksQ0FBQztJQUM5QixpQkFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQztJQUN6QixhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ3BCLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ3hCLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQztJQUN0QixhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDckIscUJBQXFCLEVBQUUsQ0FBQyxJQUFJLEVBQUU7SUFDOUIsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLEVBQUU7SUFDM0IsY0FBYyxFQUFFLENBQUMsSUFBSSxFQUFFO0lBQ3ZCLHNCQUFzQixFQUFFLENBQUMsSUFBSSxFQUFFO0lBQy9CLG1CQUFtQixFQUFFLENBQUMsSUFBSSxFQUFFO0lBQzVCLGNBQWMsRUFBRSxDQUFDLElBQUksRUFBRTtJQUN2QixvQkFBb0IsRUFBRSxDQUFDLElBQUksRUFBRTtJQUM3QiwyQkFBMkIsRUFBRSxDQUFDLElBQUksRUFBRTtJQUNwQyx1QkFBdUIsRUFBRSxDQUFDLElBQUksRUFBRTtDQUN4QixDQUFDO0FBRVg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFMUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FDNUIsaUJBQWlCLENBQUMsWUFBWTtJQUM5QixpQkFBaUIsQ0FBQyxjQUFjO0lBQ2hDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQztBQUVuQzs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLFFBQW1DO0lBQ3RFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsaUJBQWlCLENBQUM7SUFDakMsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFFdEIsWUFBWSxPQUFzRCxDQUFDO1FBQ2pFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsTUFBTSxVQUFVLEdBQXdCLEVBQUUsQ0FBQztRQUMzQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDO1lBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5RSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDO1lBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xGLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7WUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbEYsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQzs7QUFHSDs7R0FFRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxPQUF1QztJQUN0RSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDNUMsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRO1lBQUUsT0FBTyxHQUFHLEdBQUcsTUFBTSxDQUFDO1FBQ3BELElBQUksTUFBTSxJQUFJLGlCQUFpQjtZQUFFLE9BQU8sR0FBRyxHQUFHLGlCQUFpQixDQUFDLE1BQXdDLENBQUMsQ0FBQztRQUMxRyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBWTtJQUN6QyxNQUFNLEtBQUssR0FBd0IsRUFBRSxDQUFDO0lBQ3RDLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztRQUM5RCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzdCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBeUIsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsZUFBZSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEludGVudHMgQml0RmllbGQgZm9yIGNhbGN1bGF0aW5nIGdhdGV3YXkgaW50ZW50c1xuICovXG5cbmltcG9ydCB7IEJpdEZpZWxkLCBCaXRGaWVsZFJlc29sdmFibGUgfSBmcm9tICcuL0JpdEZpZWxkJztcblxuLyoqXG4gKiBJbnRlbnQgZmxhZyBuYW1lc1xuICovXG5leHBvcnQgdHlwZSBJbnRlbnRGbGFnc1N0cmluZyA9IGtleW9mIHR5cGVvZiBJbnRlbnRzQml0RmllbGQuRmxhZ3M7XG5cbi8qKlxuICogR2F0ZXdheSBJbnRlbnQgQml0c1xuICovXG5leHBvcnQgY29uc3QgR2F0ZXdheUludGVudEJpdHMgPSB7XG4gIEd1aWxkczogMSA8PCAwLFxuICBHdWlsZE1lbWJlcnM6IDEgPDwgMSxcbiAgR3VpbGRNb2RlcmF0aW9uOiAxIDw8IDIsXG4gIEd1aWxkRW1vamlzQW5kU3RpY2tlcnM6IDEgPDwgMyxcbiAgR3VpbGRJbnRlZ3JhdGlvbnM6IDEgPDwgNCxcbiAgR3VpbGRXZWJob29rczogMSA8PCA1LFxuICBHdWlsZEludml0ZXM6IDEgPDwgNixcbiAgR3VpbGRWb2ljZVN0YXRlczogMSA8PCA3LFxuICBHdWlsZFByZXNlbmNlczogMSA8PCA4LFxuICBHdWlsZE1lc3NhZ2VzOiAxIDw8IDksXG4gIEd1aWxkTWVzc2FnZVJlYWN0aW9uczogMSA8PCAxMCxcbiAgR3VpbGRNZXNzYWdlVHlwaW5nOiAxIDw8IDExLFxuICBEaXJlY3RNZXNzYWdlczogMSA8PCAxMixcbiAgRGlyZWN0TWVzc2FnZVJlYWN0aW9uczogMSA8PCAxMyxcbiAgRGlyZWN0TWVzc2FnZVR5cGluZzogMSA8PCAxNCxcbiAgTWVzc2FnZUNvbnRlbnQ6IDEgPDwgMTUsXG4gIEd1aWxkU2NoZWR1bGVkRXZlbnRzOiAxIDw8IDE2LFxuICBBdXRvTW9kZXJhdGlvbkNvbmZpZ3VyYXRpb246IDEgPDwgMjAsXG4gIEF1dG9Nb2RlcmF0aW9uRXhlY3V0aW9uOiAxIDw8IDIxLFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBBbGwgbm9uLXByaXZpbGVnZWQgaW50ZW50c1xuICovXG5leHBvcnQgY29uc3QgSW50ZW50c0FsbCA9IE9iamVjdC52YWx1ZXMoR2F0ZXdheUludGVudEJpdHMpLnJlZHVjZSgoYWxsLCBpKSA9PiBhbGwgfCBpLCAwKTtcblxuLyoqXG4gKiBQcml2aWxlZ2VkIGludGVudHMgdGhhdCByZXF1aXJlIGFwcHJvdmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQcml2aWxlZ2VkSW50ZW50cyA9IFxuICBHYXRld2F5SW50ZW50Qml0cy5HdWlsZE1lbWJlcnMgfCBcbiAgR2F0ZXdheUludGVudEJpdHMuR3VpbGRQcmVzZW5jZXMgfCBcbiAgR2F0ZXdheUludGVudEJpdHMuTWVzc2FnZUNvbnRlbnQ7XG5cbi8qKlxuICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGdhdGV3YXkgaW50ZW50c1xuICovXG5leHBvcnQgY2xhc3MgSW50ZW50c0JpdEZpZWxkIGV4dGVuZHMgQml0RmllbGQ8SW50ZW50RmxhZ3NTdHJpbmcsIG51bWJlcj4ge1xuICBzdGF0aWMgRmxhZ3MgPSBHYXRld2F5SW50ZW50Qml0cztcbiAgc3RhdGljIERlZmF1bHRCaXQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGJpdHM6IEJpdEZpZWxkUmVzb2x2YWJsZTxJbnRlbnRGbGFnc1N0cmluZywgbnVtYmVyPiA9IDApIHtcbiAgICBzdXBlcihiaXRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbnkgcHJpdmlsZWdlZCBpbnRlbnRzIGFyZSBlbmFibGVkXG4gICAqL1xuICBoYXNQcml2aWxlZ2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFueShQcml2aWxlZ2VkSW50ZW50cyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBwcml2aWxlZ2VkIGludGVudHMgdGhhdCBhcmUgZW5hYmxlZFxuICAgKi9cbiAgZ2V0UHJpdmlsZWdlZCgpOiBJbnRlbnRGbGFnc1N0cmluZ1tdIHtcbiAgICBjb25zdCBwcml2aWxlZ2VkOiBJbnRlbnRGbGFnc1N0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMuaGFzKEdhdGV3YXlJbnRlbnRCaXRzLkd1aWxkTWVtYmVycykpIHByaXZpbGVnZWQucHVzaCgnR3VpbGRNZW1iZXJzJyk7XG4gICAgaWYgKHRoaXMuaGFzKEdhdGV3YXlJbnRlbnRCaXRzLkd1aWxkUHJlc2VuY2VzKSkgcHJpdmlsZWdlZC5wdXNoKCdHdWlsZFByZXNlbmNlcycpO1xuICAgIGlmICh0aGlzLmhhcyhHYXRld2F5SW50ZW50Qml0cy5NZXNzYWdlQ29udGVudCkpIHByaXZpbGVnZWQucHVzaCgnTWVzc2FnZUNvbnRlbnQnKTtcbiAgICByZXR1cm4gcHJpdmlsZWdlZDtcbiAgfVxufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBpbnRlbnRzIGZyb20gYW4gYXJyYXkgb2YgaW50ZW50IG5hbWVzIG9yIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlSW50ZW50cyhpbnRlbnRzOiAoSW50ZW50RmxhZ3NTdHJpbmcgfCBudW1iZXIpW10pOiBudW1iZXIge1xuICByZXR1cm4gaW50ZW50cy5yZWR1Y2U8bnVtYmVyPigoYWNjLCBpbnRlbnQpID0+IHtcbiAgICBpZiAodHlwZW9mIGludGVudCA9PT0gJ251bWJlcicpIHJldHVybiBhY2MgfCBpbnRlbnQ7XG4gICAgaWYgKGludGVudCBpbiBHYXRld2F5SW50ZW50Qml0cykgcmV0dXJuIGFjYyB8IEdhdGV3YXlJbnRlbnRCaXRzW2ludGVudCBhcyBrZXlvZiB0eXBlb2YgR2F0ZXdheUludGVudEJpdHNdO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIDApO1xufVxuXG4vKipcbiAqIEdldCBhbGwgaW50ZW50IG5hbWVzIGZyb20gYSBiaXRmaWVsZCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUludGVudHMoYml0czogbnVtYmVyKTogSW50ZW50RmxhZ3NTdHJpbmdbXSB7XG4gIGNvbnN0IG5hbWVzOiBJbnRlbnRGbGFnc1N0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhHYXRld2F5SW50ZW50Qml0cykpIHtcbiAgICBpZiAoKGJpdHMgJiB2YWx1ZSkgPT09IHZhbHVlKSB7XG4gICAgICBuYW1lcy5wdXNoKG5hbWUgYXMgSW50ZW50RmxhZ3NTdHJpbmcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVudHNCaXRGaWVsZDtcbiJdfQ==
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Partials - Handle uncached/partial data structures
3
+ */
4
+ /**
5
+ * Partial types that can be enabled
6
+ */
7
+ export var Partials;
8
+ (function (Partials) {
9
+ Partials[Partials["User"] = 0] = "User";
10
+ Partials[Partials["Channel"] = 1] = "Channel";
11
+ Partials[Partials["GuildMember"] = 2] = "GuildMember";
12
+ Partials[Partials["Message"] = 3] = "Message";
13
+ Partials[Partials["Reaction"] = 4] = "Reaction";
14
+ Partials[Partials["GuildScheduledEvent"] = 5] = "GuildScheduledEvent";
15
+ })(Partials || (Partials = {}));
16
+ /**
17
+ * Check if a structure is partial (missing data)
18
+ */
19
+ export function isPartial(obj) {
20
+ return obj?.partial === true;
21
+ }
22
+ /**
23
+ * Create a partial user structure
24
+ */
25
+ export function createPartialUser(id) {
26
+ return {
27
+ id,
28
+ partial: true,
29
+ username: null,
30
+ discriminator: null,
31
+ avatar: null,
32
+ bot: null,
33
+ async fetch() {
34
+ throw new Error('Cannot fetch partial user without client context');
35
+ },
36
+ toString() {
37
+ return `<@${id}>`;
38
+ },
39
+ };
40
+ }
41
+ /**
42
+ * Create a partial channel structure
43
+ */
44
+ export function createPartialChannel(id) {
45
+ return {
46
+ id,
47
+ partial: true,
48
+ type: null,
49
+ name: null,
50
+ async fetch() {
51
+ throw new Error('Cannot fetch partial channel without client context');
52
+ },
53
+ toString() {
54
+ return `<#${id}>`;
55
+ },
56
+ };
57
+ }
58
+ /**
59
+ * Create a partial message structure
60
+ */
61
+ export function createPartialMessage(id, channelId) {
62
+ return {
63
+ id,
64
+ channelId,
65
+ partial: true,
66
+ content: null,
67
+ author: null,
68
+ embeds: null,
69
+ attachments: null,
70
+ async fetch() {
71
+ throw new Error('Cannot fetch partial message without client context');
72
+ },
73
+ toString() {
74
+ return `Message(${id})`;
75
+ },
76
+ };
77
+ }
78
+ /**
79
+ * Create a partial guild member structure
80
+ */
81
+ export function createPartialGuildMember(userId, guildId) {
82
+ return {
83
+ id: userId,
84
+ guildId,
85
+ partial: true,
86
+ user: null,
87
+ nick: null,
88
+ roles: null,
89
+ joinedAt: null,
90
+ async fetch() {
91
+ throw new Error('Cannot fetch partial member without client context');
92
+ },
93
+ toString() {
94
+ return `<@${userId}>`;
95
+ },
96
+ };
97
+ }
98
+ /**
99
+ * Create a partial reaction structure
100
+ */
101
+ export function createPartialReaction(messageId, emoji) {
102
+ return {
103
+ messageId,
104
+ emoji,
105
+ partial: true,
106
+ count: null,
107
+ me: null,
108
+ async fetch() {
109
+ throw new Error('Cannot fetch partial reaction without client context');
110
+ },
111
+ toString() {
112
+ return emoji;
113
+ },
114
+ };
115
+ }
116
+ /**
117
+ * Make a structure partial-aware with fetch capability
118
+ */
119
+ export function makePartialAware(structure, client, fetchFn) {
120
+ return {
121
+ ...structure,
122
+ partial: false,
123
+ async fetch() {
124
+ const fetched = await fetchFn(structure.id);
125
+ Object.assign(this, fetched, { partial: false });
126
+ return this;
127
+ },
128
+ };
129
+ }
130
+ /**
131
+ * Check if partials are enabled for a type
132
+ */
133
+ export function hasPartial(client, partial) {
134
+ return client.options?.partials?.includes(partial) ?? false;
135
+ }
136
+ export default Partials;
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFydGlhbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvUGFydGlhbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLFFBT1g7QUFQRCxXQUFZLFFBQVE7SUFDbEIsdUNBQVEsQ0FBQTtJQUNSLDZDQUFXLENBQUE7SUFDWCxxREFBZSxDQUFBO0lBQ2YsNkNBQVcsQ0FBQTtJQUNYLCtDQUFZLENBQUE7SUFDWixxRUFBdUIsQ0FBQTtBQUN6QixDQUFDLEVBUFcsUUFBUSxLQUFSLFFBQVEsUUFPbkI7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBUTtJQUNoQyxPQUFPLEdBQUcsRUFBRSxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxFQUFVO0lBQzFDLE9BQU87UUFDTCxFQUFFO1FBQ0YsT0FBTyxFQUFFLElBQUk7UUFDYixRQUFRLEVBQUUsSUFBSTtRQUNkLGFBQWEsRUFBRSxJQUFJO1FBQ25CLE1BQU0sRUFBRSxJQUFJO1FBQ1osR0FBRyxFQUFFLElBQUk7UUFFVCxLQUFLLENBQUMsS0FBSztZQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBRUQsUUFBUTtZQUNOLE9BQU8sS0FBSyxFQUFFLEdBQUcsQ0FBQztRQUNwQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxFQUFVO0lBQzdDLE9BQU87UUFDTCxFQUFFO1FBQ0YsT0FBTyxFQUFFLElBQUk7UUFDYixJQUFJLEVBQUUsSUFBSTtRQUNWLElBQUksRUFBRSxJQUFJO1FBRVYsS0FBSyxDQUFDLEtBQUs7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUVELFFBQVE7WUFDTixPQUFPLEtBQUssRUFBRSxHQUFHLENBQUM7UUFDcEIsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsRUFBVSxFQUFFLFNBQWlCO0lBQ2hFLE9BQU87UUFDTCxFQUFFO1FBQ0YsU0FBUztRQUNULE9BQU8sRUFBRSxJQUFJO1FBQ2IsT0FBTyxFQUFFLElBQUk7UUFDYixNQUFNLEVBQUUsSUFBSTtRQUNaLE1BQU0sRUFBRSxJQUFJO1FBQ1osV0FBVyxFQUFFLElBQUk7UUFFakIsS0FBSyxDQUFDLEtBQUs7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUVELFFBQVE7WUFDTixPQUFPLFdBQVcsRUFBRSxHQUFHLENBQUM7UUFDMUIsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsTUFBYyxFQUFFLE9BQWU7SUFDdEUsT0FBTztRQUNMLEVBQUUsRUFBRSxNQUFNO1FBQ1YsT0FBTztRQUNQLE9BQU8sRUFBRSxJQUFJO1FBQ2IsSUFBSSxFQUFFLElBQUk7UUFDVixJQUFJLEVBQUUsSUFBSTtRQUNWLEtBQUssRUFBRSxJQUFJO1FBQ1gsUUFBUSxFQUFFLElBQUk7UUFFZCxLQUFLLENBQUMsS0FBSztZQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsUUFBUTtZQUNOLE9BQU8sS0FBSyxNQUFNLEdBQUcsQ0FBQztRQUN4QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxTQUFpQixFQUFFLEtBQWE7SUFDcEUsT0FBTztRQUNMLFNBQVM7UUFDVCxLQUFLO1FBQ0wsT0FBTyxFQUFFLElBQUk7UUFDYixLQUFLLEVBQUUsSUFBSTtRQUNYLEVBQUUsRUFBRSxJQUFJO1FBRVIsS0FBSyxDQUFDLEtBQUs7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVELFFBQVE7WUFDTixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQTJERDs7R0FFRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsU0FBWSxFQUNaLE1BQVcsRUFDWCxPQUFtQztJQUVuQyxPQUFPO1FBQ0wsR0FBRyxTQUFTO1FBQ1osT0FBTyxFQUFFLEtBQUs7UUFDZCxLQUFLLENBQUMsS0FBSztZQUNULE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNqRCxPQUFPLElBQVMsQ0FBQztRQUNuQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBVyxFQUFFLE9BQWlCO0lBQ3ZELE9BQU8sTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUM5RCxDQUFDO0FBRUQsZUFBZSxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBhcnRpYWxzIC0gSGFuZGxlIHVuY2FjaGVkL3BhcnRpYWwgZGF0YSBzdHJ1Y3R1cmVzXG4gKi9cblxuLyoqXG4gKiBQYXJ0aWFsIHR5cGVzIHRoYXQgY2FuIGJlIGVuYWJsZWRcbiAqL1xuZXhwb3J0IGVudW0gUGFydGlhbHMge1xuICBVc2VyID0gMCxcbiAgQ2hhbm5lbCA9IDEsXG4gIEd1aWxkTWVtYmVyID0gMixcbiAgTWVzc2FnZSA9IDMsXG4gIFJlYWN0aW9uID0gNCxcbiAgR3VpbGRTY2hlZHVsZWRFdmVudCA9IDUsXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBzdHJ1Y3R1cmUgaXMgcGFydGlhbCAobWlzc2luZyBkYXRhKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXJ0aWFsKG9iajogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBvYmo/LnBhcnRpYWwgPT09IHRydWU7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcGFydGlhbCB1c2VyIHN0cnVjdHVyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFydGlhbFVzZXIoaWQ6IHN0cmluZyk6IFBhcnRpYWxVc2VyIHtcbiAgcmV0dXJuIHtcbiAgICBpZCxcbiAgICBwYXJ0aWFsOiB0cnVlLFxuICAgIHVzZXJuYW1lOiBudWxsLFxuICAgIGRpc2NyaW1pbmF0b3I6IG51bGwsXG4gICAgYXZhdGFyOiBudWxsLFxuICAgIGJvdDogbnVsbCxcbiAgICBcbiAgICBhc3luYyBmZXRjaCgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZldGNoIHBhcnRpYWwgdXNlciB3aXRob3V0IGNsaWVudCBjb250ZXh0Jyk7XG4gICAgfSxcbiAgICBcbiAgICB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBgPEAke2lkfT5gO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcGFydGlhbCBjaGFubmVsIHN0cnVjdHVyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFydGlhbENoYW5uZWwoaWQ6IHN0cmluZyk6IFBhcnRpYWxDaGFubmVsIHtcbiAgcmV0dXJuIHtcbiAgICBpZCxcbiAgICBwYXJ0aWFsOiB0cnVlLFxuICAgIHR5cGU6IG51bGwsXG4gICAgbmFtZTogbnVsbCxcbiAgICBcbiAgICBhc3luYyBmZXRjaCgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZldGNoIHBhcnRpYWwgY2hhbm5lbCB3aXRob3V0IGNsaWVudCBjb250ZXh0Jyk7XG4gICAgfSxcbiAgICBcbiAgICB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBgPCMke2lkfT5gO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcGFydGlhbCBtZXNzYWdlIHN0cnVjdHVyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFydGlhbE1lc3NhZ2UoaWQ6IHN0cmluZywgY2hhbm5lbElkOiBzdHJpbmcpOiBQYXJ0aWFsTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgaWQsXG4gICAgY2hhbm5lbElkLFxuICAgIHBhcnRpYWw6IHRydWUsXG4gICAgY29udGVudDogbnVsbCxcbiAgICBhdXRob3I6IG51bGwsXG4gICAgZW1iZWRzOiBudWxsLFxuICAgIGF0dGFjaG1lbnRzOiBudWxsLFxuICAgIFxuICAgIGFzeW5jIGZldGNoKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmV0Y2ggcGFydGlhbCBtZXNzYWdlIHdpdGhvdXQgY2xpZW50IGNvbnRleHQnKTtcbiAgICB9LFxuICAgIFxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGBNZXNzYWdlKCR7aWR9KWA7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYXJ0aWFsIGd1aWxkIG1lbWJlciBzdHJ1Y3R1cmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhcnRpYWxHdWlsZE1lbWJlcih1c2VySWQ6IHN0cmluZywgZ3VpbGRJZDogc3RyaW5nKTogUGFydGlhbEd1aWxkTWVtYmVyIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogdXNlcklkLFxuICAgIGd1aWxkSWQsXG4gICAgcGFydGlhbDogdHJ1ZSxcbiAgICB1c2VyOiBudWxsLFxuICAgIG5pY2s6IG51bGwsXG4gICAgcm9sZXM6IG51bGwsXG4gICAgam9pbmVkQXQ6IG51bGwsXG4gICAgXG4gICAgYXN5bmMgZmV0Y2goKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBmZXRjaCBwYXJ0aWFsIG1lbWJlciB3aXRob3V0IGNsaWVudCBjb250ZXh0Jyk7XG4gICAgfSxcbiAgICBcbiAgICB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBgPEAke3VzZXJJZH0+YDtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHBhcnRpYWwgcmVhY3Rpb24gc3RydWN0dXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXJ0aWFsUmVhY3Rpb24obWVzc2FnZUlkOiBzdHJpbmcsIGVtb2ppOiBzdHJpbmcpOiBQYXJ0aWFsUmVhY3Rpb24ge1xuICByZXR1cm4ge1xuICAgIG1lc3NhZ2VJZCxcbiAgICBlbW9qaSxcbiAgICBwYXJ0aWFsOiB0cnVlLFxuICAgIGNvdW50OiBudWxsLFxuICAgIG1lOiBudWxsLFxuICAgIFxuICAgIGFzeW5jIGZldGNoKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmV0Y2ggcGFydGlhbCByZWFjdGlvbiB3aXRob3V0IGNsaWVudCBjb250ZXh0Jyk7XG4gICAgfSxcbiAgICBcbiAgICB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBlbW9qaTtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFBhcnRpYWwgc3RydWN0dXJlIHR5cGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGlhbFVzZXIge1xuICBpZDogc3RyaW5nO1xuICBwYXJ0aWFsOiB0cnVlO1xuICB1c2VybmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgZGlzY3JpbWluYXRvcjogc3RyaW5nIHwgbnVsbDtcbiAgYXZhdGFyOiBzdHJpbmcgfCBudWxsO1xuICBib3Q6IGJvb2xlYW4gfCBudWxsO1xuICBmZXRjaCgpOiBQcm9taXNlPGFueT47XG4gIHRvU3RyaW5nKCk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJ0aWFsQ2hhbm5lbCB7XG4gIGlkOiBzdHJpbmc7XG4gIHBhcnRpYWw6IHRydWU7XG4gIHR5cGU6IG51bWJlciB8IG51bGw7XG4gIG5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGZldGNoKCk6IFByb21pc2U8YW55PjtcbiAgdG9TdHJpbmcoKTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnRpYWxNZXNzYWdlIHtcbiAgaWQ6IHN0cmluZztcbiAgY2hhbm5lbElkOiBzdHJpbmc7XG4gIHBhcnRpYWw6IHRydWU7XG4gIGNvbnRlbnQ6IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcjogYW55IHwgbnVsbDtcbiAgZW1iZWRzOiBhbnlbXSB8IG51bGw7XG4gIGF0dGFjaG1lbnRzOiBhbnlbXSB8IG51bGw7XG4gIGZldGNoKCk6IFByb21pc2U8YW55PjtcbiAgdG9TdHJpbmcoKTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnRpYWxHdWlsZE1lbWJlciB7XG4gIGlkOiBzdHJpbmc7XG4gIGd1aWxkSWQ6IHN0cmluZztcbiAgcGFydGlhbDogdHJ1ZTtcbiAgdXNlcjogYW55IHwgbnVsbDtcbiAgbmljazogc3RyaW5nIHwgbnVsbDtcbiAgcm9sZXM6IHN0cmluZ1tdIHwgbnVsbDtcbiAgam9pbmVkQXQ6IERhdGUgfCBudWxsO1xuICBmZXRjaCgpOiBQcm9taXNlPGFueT47XG4gIHRvU3RyaW5nKCk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJ0aWFsUmVhY3Rpb24ge1xuICBtZXNzYWdlSWQ6IHN0cmluZztcbiAgZW1vamk6IHN0cmluZztcbiAgcGFydGlhbDogdHJ1ZTtcbiAgY291bnQ6IG51bWJlciB8IG51bGw7XG4gIG1lOiBib29sZWFuIHwgbnVsbDtcbiAgZmV0Y2goKTogUHJvbWlzZTxhbnk+O1xuICB0b1N0cmluZygpOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTWFrZSBhIHN0cnVjdHVyZSBwYXJ0aWFsLWF3YXJlIHdpdGggZmV0Y2ggY2FwYWJpbGl0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVBhcnRpYWxBd2FyZTxUIGV4dGVuZHMgeyBpZDogc3RyaW5nIH0+KFxuICBzdHJ1Y3R1cmU6IFQsXG4gIGNsaWVudDogYW55LFxuICBmZXRjaEZuOiAoaWQ6IHN0cmluZykgPT4gUHJvbWlzZTxUPlxuKTogVCAmIHsgcGFydGlhbDogYm9vbGVhbjsgZmV0Y2g6ICgpID0+IFByb21pc2U8VD4gfSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RydWN0dXJlLFxuICAgIHBhcnRpYWw6IGZhbHNlLFxuICAgIGFzeW5jIGZldGNoKCkge1xuICAgICAgY29uc3QgZmV0Y2hlZCA9IGF3YWl0IGZldGNoRm4oc3RydWN0dXJlLmlkKTtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgZmV0Y2hlZCwgeyBwYXJ0aWFsOiBmYWxzZSB9KTtcbiAgICAgIHJldHVybiB0aGlzIGFzIFQ7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBwYXJ0aWFscyBhcmUgZW5hYmxlZCBmb3IgYSB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNQYXJ0aWFsKGNsaWVudDogYW55LCBwYXJ0aWFsOiBQYXJ0aWFscyk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2xpZW50Lm9wdGlvbnM/LnBhcnRpYWxzPy5pbmNsdWRlcyhwYXJ0aWFsKSA/PyBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUGFydGlhbHM7XG4iXX0=