@jubbio/core 1.0.0
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.
- package/LICENSE +21 -0
- package/README.md +166 -0
- package/dist/Client.d.ts +147 -0
- package/dist/Client.js +471 -0
- package/dist/builders/ActionRowBuilder.d.ts +53 -0
- package/dist/builders/ActionRowBuilder.js +68 -0
- package/dist/builders/ButtonBuilder.d.ts +77 -0
- package/dist/builders/ButtonBuilder.js +96 -0
- package/dist/builders/EmbedBuilder.d.ts +157 -0
- package/dist/builders/EmbedBuilder.js +199 -0
- package/dist/builders/ModalBuilder.d.ts +122 -0
- package/dist/builders/ModalBuilder.js +162 -0
- package/dist/builders/SelectMenuBuilder.d.ts +123 -0
- package/dist/builders/SelectMenuBuilder.js +165 -0
- package/dist/builders/SlashCommandBuilder.d.ts +197 -0
- package/dist/builders/SlashCommandBuilder.js +324 -0
- package/dist/builders/index.d.ts +9 -0
- package/dist/builders/index.js +26 -0
- package/dist/enums.d.ts +196 -0
- package/dist/enums.js +216 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +128 -0
- package/dist/managers/BaseManager.d.ts +69 -0
- package/dist/managers/BaseManager.js +106 -0
- package/dist/managers/ChannelManager.d.ts +98 -0
- package/dist/managers/ChannelManager.js +209 -0
- package/dist/managers/GuildMemberManager.d.ts +74 -0
- package/dist/managers/GuildMemberManager.js +156 -0
- package/dist/managers/RoleManager.d.ts +84 -0
- package/dist/managers/RoleManager.js +207 -0
- package/dist/managers/index.d.ts +7 -0
- package/dist/managers/index.js +24 -0
- package/dist/rest/REST.d.ts +483 -0
- package/dist/rest/REST.js +805 -0
- package/dist/rest/index.d.ts +1 -0
- package/dist/rest/index.js +18 -0
- package/dist/sharding/ShardingManager.d.ts +179 -0
- package/dist/sharding/ShardingManager.js +375 -0
- package/dist/sharding/index.d.ts +4 -0
- package/dist/sharding/index.js +21 -0
- package/dist/structures/Channel.d.ts +120 -0
- package/dist/structures/Channel.js +224 -0
- package/dist/structures/Collection.d.ts +53 -0
- package/dist/structures/Collection.js +115 -0
- package/dist/structures/Guild.d.ts +59 -0
- package/dist/structures/Guild.js +90 -0
- package/dist/structures/GuildMember.d.ts +130 -0
- package/dist/structures/GuildMember.js +208 -0
- package/dist/structures/Interaction.d.ts +224 -0
- package/dist/structures/Interaction.js +404 -0
- package/dist/structures/Message.d.ts +93 -0
- package/dist/structures/Message.js +145 -0
- package/dist/structures/User.d.ts +37 -0
- package/dist/structures/User.js +65 -0
- package/dist/structures/index.d.ts +7 -0
- package/dist/structures/index.js +25 -0
- package/dist/structures.d.ts +1 -0
- package/dist/structures.js +19 -0
- package/dist/types.d.ts +255 -0
- package/dist/types.js +3 -0
- package/dist/utils/BitField.d.ts +66 -0
- package/dist/utils/BitField.js +138 -0
- package/dist/utils/Collection.d.ts +116 -0
- package/dist/utils/Collection.js +265 -0
- package/dist/utils/Collector.d.ts +152 -0
- package/dist/utils/Collector.js +314 -0
- package/dist/utils/DataResolver.d.ts +61 -0
- package/dist/utils/DataResolver.js +146 -0
- package/dist/utils/Formatters.d.ts +145 -0
- package/dist/utils/Formatters.js +213 -0
- package/dist/utils/IntentsBitField.d.ts +85 -0
- package/dist/utils/IntentsBitField.js +99 -0
- package/dist/utils/Partials.d.ts +105 -0
- package/dist/utils/Partials.js +149 -0
- package/dist/utils/PermissionsBitField.d.ts +118 -0
- package/dist/utils/PermissionsBitField.js +145 -0
- package/dist/utils/SnowflakeUtil.d.ts +63 -0
- package/dist/utils/SnowflakeUtil.js +93 -0
- package/dist/utils/Sweepers.d.ts +127 -0
- package/dist/utils/Sweepers.js +270 -0
- package/dist/utils/index.d.ts +13 -0
- package/dist/utils/index.js +30 -0
- package/package.json +37 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { APIChannel, APIEmbed } from '../types';
|
|
2
|
+
import { ChannelType } from '../enums';
|
|
3
|
+
import type { Client } from '../Client';
|
|
4
|
+
import { Message } from './Message';
|
|
5
|
+
import { Collection } from './Collection';
|
|
6
|
+
import { MessageCollector, MessageCollectorOptions } from '../utils/Collector';
|
|
7
|
+
/**
|
|
8
|
+
* Await messages options
|
|
9
|
+
*/
|
|
10
|
+
export interface AwaitMessagesOptions extends MessageCollectorOptions {
|
|
11
|
+
/** Errors to reject on */
|
|
12
|
+
errors?: string[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Base channel class
|
|
16
|
+
*/
|
|
17
|
+
export declare class BaseChannel {
|
|
18
|
+
/** Reference to the client */
|
|
19
|
+
readonly client: Client;
|
|
20
|
+
/** Channel ID */
|
|
21
|
+
readonly id: string;
|
|
22
|
+
/** Channel type */
|
|
23
|
+
readonly type: ChannelType;
|
|
24
|
+
constructor(client: Client, data: APIChannel);
|
|
25
|
+
/**
|
|
26
|
+
* Check if this is a text-based channel
|
|
27
|
+
*/
|
|
28
|
+
isTextBased(): this is TextChannel;
|
|
29
|
+
/**
|
|
30
|
+
* Check if this is a voice-based channel
|
|
31
|
+
*/
|
|
32
|
+
isVoiceBased(): this is VoiceChannel;
|
|
33
|
+
/**
|
|
34
|
+
* Convert to string (mention format)
|
|
35
|
+
*/
|
|
36
|
+
toString(): string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Text channel
|
|
40
|
+
*/
|
|
41
|
+
export declare class TextChannel extends BaseChannel {
|
|
42
|
+
/** Guild ID */
|
|
43
|
+
guildId?: string;
|
|
44
|
+
/** Channel name */
|
|
45
|
+
name?: string;
|
|
46
|
+
/** Channel topic */
|
|
47
|
+
topic?: string;
|
|
48
|
+
/** Channel position */
|
|
49
|
+
position?: number;
|
|
50
|
+
/** Parent category ID */
|
|
51
|
+
parentId?: string;
|
|
52
|
+
constructor(client: Client, data: APIChannel);
|
|
53
|
+
/**
|
|
54
|
+
* Send a message to this channel
|
|
55
|
+
*/
|
|
56
|
+
send(options: string | MessageCreateOptions): Promise<Message>;
|
|
57
|
+
/**
|
|
58
|
+
* Create a message collector
|
|
59
|
+
*/
|
|
60
|
+
createMessageCollector(options?: MessageCollectorOptions): MessageCollector;
|
|
61
|
+
/**
|
|
62
|
+
* Await messages in this channel
|
|
63
|
+
*/
|
|
64
|
+
awaitMessages(options?: AwaitMessagesOptions): Promise<Collection<string, Message>>;
|
|
65
|
+
/**
|
|
66
|
+
* Bulk delete messages
|
|
67
|
+
*/
|
|
68
|
+
bulkDelete(messages: number | string[] | Collection<string, Message>, filterOld?: boolean): Promise<Collection<string, Message>>;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Voice channel
|
|
72
|
+
*/
|
|
73
|
+
export declare class VoiceChannel extends BaseChannel {
|
|
74
|
+
/** Guild ID */
|
|
75
|
+
guildId?: string;
|
|
76
|
+
/** Channel name */
|
|
77
|
+
name?: string;
|
|
78
|
+
/** Channel position */
|
|
79
|
+
position?: number;
|
|
80
|
+
/** Parent category ID */
|
|
81
|
+
parentId?: string;
|
|
82
|
+
/** User limit */
|
|
83
|
+
userLimit?: number;
|
|
84
|
+
/** Bitrate */
|
|
85
|
+
bitrate?: number;
|
|
86
|
+
constructor(client: Client, data: APIChannel & {
|
|
87
|
+
user_limit?: number;
|
|
88
|
+
bitrate?: number;
|
|
89
|
+
});
|
|
90
|
+
/**
|
|
91
|
+
* Check if the channel is joinable
|
|
92
|
+
*/
|
|
93
|
+
get joinable(): boolean;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* DM channel
|
|
97
|
+
*/
|
|
98
|
+
export declare class DMChannel extends BaseChannel {
|
|
99
|
+
/** Recipient user ID */
|
|
100
|
+
recipientId?: string;
|
|
101
|
+
constructor(client: Client, data: APIChannel & {
|
|
102
|
+
recipient_id?: string;
|
|
103
|
+
});
|
|
104
|
+
/**
|
|
105
|
+
* Send a message to this DM
|
|
106
|
+
*/
|
|
107
|
+
send(options: string | MessageCreateOptions): Promise<Message>;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Message create options
|
|
111
|
+
*/
|
|
112
|
+
export interface MessageCreateOptions {
|
|
113
|
+
content?: string;
|
|
114
|
+
embeds?: APIEmbed[];
|
|
115
|
+
files?: any[];
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Create appropriate channel class based on type
|
|
119
|
+
*/
|
|
120
|
+
export declare function createChannel(client: Client, data: APIChannel): BaseChannel;
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DMChannel = exports.VoiceChannel = exports.TextChannel = exports.BaseChannel = void 0;
|
|
4
|
+
exports.createChannel = createChannel;
|
|
5
|
+
const enums_1 = require("../enums");
|
|
6
|
+
const Message_1 = require("./Message");
|
|
7
|
+
const Collection_1 = require("./Collection");
|
|
8
|
+
const Collector_1 = require("../utils/Collector");
|
|
9
|
+
/**
|
|
10
|
+
* Base channel class
|
|
11
|
+
*/
|
|
12
|
+
class BaseChannel {
|
|
13
|
+
/** Reference to the client */
|
|
14
|
+
client;
|
|
15
|
+
/** Channel ID */
|
|
16
|
+
id;
|
|
17
|
+
/** Channel type */
|
|
18
|
+
type;
|
|
19
|
+
constructor(client, data) {
|
|
20
|
+
this.client = client;
|
|
21
|
+
this.id = data.id;
|
|
22
|
+
this.type = data.type;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Check if this is a text-based channel
|
|
26
|
+
*/
|
|
27
|
+
isTextBased() {
|
|
28
|
+
return [
|
|
29
|
+
enums_1.ChannelType.GuildText,
|
|
30
|
+
enums_1.ChannelType.DM,
|
|
31
|
+
enums_1.ChannelType.GroupDM,
|
|
32
|
+
enums_1.ChannelType.GuildAnnouncement
|
|
33
|
+
].includes(this.type);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if this is a voice-based channel
|
|
37
|
+
*/
|
|
38
|
+
isVoiceBased() {
|
|
39
|
+
return [
|
|
40
|
+
enums_1.ChannelType.GuildVoice,
|
|
41
|
+
enums_1.ChannelType.GuildStageVoice
|
|
42
|
+
].includes(this.type);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Convert to string (mention format)
|
|
46
|
+
*/
|
|
47
|
+
toString() {
|
|
48
|
+
return `<#${this.id}>`;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.BaseChannel = BaseChannel;
|
|
52
|
+
/**
|
|
53
|
+
* Text channel
|
|
54
|
+
*/
|
|
55
|
+
class TextChannel extends BaseChannel {
|
|
56
|
+
/** Guild ID */
|
|
57
|
+
guildId;
|
|
58
|
+
/** Channel name */
|
|
59
|
+
name;
|
|
60
|
+
/** Channel topic */
|
|
61
|
+
topic;
|
|
62
|
+
/** Channel position */
|
|
63
|
+
position;
|
|
64
|
+
/** Parent category ID */
|
|
65
|
+
parentId;
|
|
66
|
+
constructor(client, data) {
|
|
67
|
+
super(client, data);
|
|
68
|
+
this.guildId = data.guild_id;
|
|
69
|
+
this.name = data.name;
|
|
70
|
+
this.topic = data.topic;
|
|
71
|
+
this.position = data.position;
|
|
72
|
+
this.parentId = data.parent_id;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Send a message to this channel
|
|
76
|
+
*/
|
|
77
|
+
async send(options) {
|
|
78
|
+
const content = typeof options === 'string' ? options : options.content;
|
|
79
|
+
const embeds = typeof options === 'string' ? undefined : options.embeds;
|
|
80
|
+
const data = await this.client.rest.createMessage(this.guildId || '', this.id, {
|
|
81
|
+
content,
|
|
82
|
+
embeds
|
|
83
|
+
});
|
|
84
|
+
return new Message_1.Message(this.client, data);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Create a message collector
|
|
88
|
+
*/
|
|
89
|
+
createMessageCollector(options) {
|
|
90
|
+
return new Collector_1.MessageCollector(this.client, this.id, options);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Await messages in this channel
|
|
94
|
+
*/
|
|
95
|
+
awaitMessages(options) {
|
|
96
|
+
return new Promise((resolve, reject) => {
|
|
97
|
+
const collector = this.createMessageCollector(options);
|
|
98
|
+
collector.once('end', (collected, reason) => {
|
|
99
|
+
if (options?.errors?.includes(reason)) {
|
|
100
|
+
reject(collected);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
resolve(collected);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Bulk delete messages
|
|
110
|
+
*/
|
|
111
|
+
async bulkDelete(messages, filterOld = true) {
|
|
112
|
+
let messageIds;
|
|
113
|
+
if (typeof messages === 'number') {
|
|
114
|
+
// Fetch messages first
|
|
115
|
+
const fetched = await this.client.rest.getMessages(this.guildId || '', this.id, { limit: messages });
|
|
116
|
+
messageIds = fetched.map(m => m.id);
|
|
117
|
+
}
|
|
118
|
+
else if (messages instanceof Collection_1.Collection) {
|
|
119
|
+
messageIds = [...messages.keys()];
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
messageIds = messages;
|
|
123
|
+
}
|
|
124
|
+
// Filter old messages (older than 14 days)
|
|
125
|
+
if (filterOld) {
|
|
126
|
+
const twoWeeksAgo = Date.now() - 14 * 24 * 60 * 60 * 1000;
|
|
127
|
+
messageIds = messageIds.filter(id => {
|
|
128
|
+
// Extract timestamp from snowflake
|
|
129
|
+
const timestamp = Number(BigInt(id) >> 22n) + 1420070400000;
|
|
130
|
+
return timestamp > twoWeeksAgo;
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
if (messageIds.length === 0) {
|
|
134
|
+
return new Collection_1.Collection();
|
|
135
|
+
}
|
|
136
|
+
if (messageIds.length === 1) {
|
|
137
|
+
await this.client.rest.deleteMessage(this.guildId || '', this.id, messageIds[0]);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
await this.client.rest.bulkDeleteMessages(this.guildId || '', this.id, messageIds);
|
|
141
|
+
}
|
|
142
|
+
// Return deleted messages as collection
|
|
143
|
+
const deleted = new Collection_1.Collection();
|
|
144
|
+
// Note: We don't have the actual message objects here
|
|
145
|
+
return deleted;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.TextChannel = TextChannel;
|
|
149
|
+
/**
|
|
150
|
+
* Voice channel
|
|
151
|
+
*/
|
|
152
|
+
class VoiceChannel extends BaseChannel {
|
|
153
|
+
/** Guild ID */
|
|
154
|
+
guildId;
|
|
155
|
+
/** Channel name */
|
|
156
|
+
name;
|
|
157
|
+
/** Channel position */
|
|
158
|
+
position;
|
|
159
|
+
/** Parent category ID */
|
|
160
|
+
parentId;
|
|
161
|
+
/** User limit */
|
|
162
|
+
userLimit;
|
|
163
|
+
/** Bitrate */
|
|
164
|
+
bitrate;
|
|
165
|
+
constructor(client, data) {
|
|
166
|
+
super(client, data);
|
|
167
|
+
this.guildId = data.guild_id;
|
|
168
|
+
this.name = data.name;
|
|
169
|
+
this.position = data.position;
|
|
170
|
+
this.parentId = data.parent_id;
|
|
171
|
+
this.userLimit = data.user_limit;
|
|
172
|
+
this.bitrate = data.bitrate;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Check if the channel is joinable
|
|
176
|
+
*/
|
|
177
|
+
get joinable() {
|
|
178
|
+
// TODO: Check permissions
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
exports.VoiceChannel = VoiceChannel;
|
|
183
|
+
/**
|
|
184
|
+
* DM channel
|
|
185
|
+
*/
|
|
186
|
+
class DMChannel extends BaseChannel {
|
|
187
|
+
/** Recipient user ID */
|
|
188
|
+
recipientId;
|
|
189
|
+
constructor(client, data) {
|
|
190
|
+
super(client, data);
|
|
191
|
+
this.recipientId = data.recipient_id;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Send a message to this DM
|
|
195
|
+
*/
|
|
196
|
+
async send(options) {
|
|
197
|
+
const content = typeof options === 'string' ? options : options.content;
|
|
198
|
+
const embeds = typeof options === 'string' ? undefined : options.embeds;
|
|
199
|
+
const data = await this.client.rest.createDMMessage(this.id, {
|
|
200
|
+
content,
|
|
201
|
+
embeds
|
|
202
|
+
});
|
|
203
|
+
return new Message_1.Message(this.client, data);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
exports.DMChannel = DMChannel;
|
|
207
|
+
/**
|
|
208
|
+
* Create appropriate channel class based on type
|
|
209
|
+
*/
|
|
210
|
+
function createChannel(client, data) {
|
|
211
|
+
switch (data.type) {
|
|
212
|
+
case enums_1.ChannelType.GuildText:
|
|
213
|
+
case enums_1.ChannelType.GuildAnnouncement:
|
|
214
|
+
return new TextChannel(client, data);
|
|
215
|
+
case enums_1.ChannelType.GuildVoice:
|
|
216
|
+
case enums_1.ChannelType.GuildStageVoice:
|
|
217
|
+
return new VoiceChannel(client, data);
|
|
218
|
+
case enums_1.ChannelType.DM:
|
|
219
|
+
return new DMChannel(client, data);
|
|
220
|
+
default:
|
|
221
|
+
return new BaseChannel(client, data);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhbm5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdHJ1Y3R1cmVzL0NoYW5uZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBK1BBLHNDQWFDO0FBM1FELG9DQUF1QztBQUV2Qyx1Q0FBb0M7QUFDcEMsNkNBQTBDO0FBQzFDLGtEQUErRTtBQVUvRTs7R0FFRztBQUNILE1BQWEsV0FBVztJQUN0Qiw4QkFBOEI7SUFDZCxNQUFNLENBQVM7SUFFL0IsaUJBQWlCO0lBQ0QsRUFBRSxDQUFTO0lBRTNCLG1CQUFtQjtJQUNILElBQUksQ0FBYztJQUVsQyxZQUFZLE1BQWMsRUFBRSxJQUFnQjtRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxPQUFPO1lBQ0wsbUJBQVcsQ0FBQyxTQUFTO1lBQ3JCLG1CQUFXLENBQUMsRUFBRTtZQUNkLG1CQUFXLENBQUMsT0FBTztZQUNuQixtQkFBVyxDQUFDLGlCQUFpQjtTQUM5QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWTtRQUNWLE9BQU87WUFDTCxtQkFBVyxDQUFDLFVBQVU7WUFDdEIsbUJBQVcsQ0FBQyxlQUFlO1NBQzVCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sT0FBTyxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUN6QixDQUFDO0NBQ0Y7QUE1Q0Qsa0NBNENDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFdBQVksU0FBUSxXQUFXO0lBQzFDLGVBQWU7SUFDUixPQUFPLENBQVU7SUFFeEIsbUJBQW1CO0lBQ1osSUFBSSxDQUFVO0lBRXJCLG9CQUFvQjtJQUNiLEtBQUssQ0FBVTtJQUV0Qix1QkFBdUI7SUFDaEIsUUFBUSxDQUFVO0lBRXpCLHlCQUF5QjtJQUNsQixRQUFRLENBQVU7SUFFekIsWUFBWSxNQUFjLEVBQUUsSUFBZ0I7UUFDMUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBc0M7UUFDL0MsTUFBTSxPQUFPLEdBQUcsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDeEUsTUFBTSxNQUFNLEdBQUcsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFFeEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUM3RSxPQUFPO1lBQ1AsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxpQkFBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsc0JBQXNCLENBQUMsT0FBaUM7UUFDdEQsT0FBTyxJQUFJLDRCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhLENBQUMsT0FBOEI7UUFDMUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFdkQsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQzFDLElBQUksT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDdEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNwQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNyQixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBeUQsRUFBRSxTQUFTLEdBQUcsSUFBSTtRQUMxRixJQUFJLFVBQW9CLENBQUM7UUFFekIsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNqQyx1QkFBdUI7WUFDdkIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3JHLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxJQUFJLFFBQVEsWUFBWSx1QkFBVSxFQUFFLENBQUM7WUFDMUMsVUFBVSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNOLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDeEIsQ0FBQztRQUVELDJDQUEyQztRQUMzQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDMUQsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ2xDLG1DQUFtQztnQkFDbkMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUM7Z0JBQzVELE9BQU8sU0FBUyxHQUFHLFdBQVcsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLHVCQUFVLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkYsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckYsQ0FBQztRQUVELHdDQUF3QztRQUN4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLHVCQUFVLEVBQW1CLENBQUM7UUFDbEQsc0RBQXNEO1FBQ3RELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQXpHRCxrQ0F5R0M7QUFFRDs7R0FFRztBQUNILE1BQWEsWUFBYSxTQUFRLFdBQVc7SUFDM0MsZUFBZTtJQUNSLE9BQU8sQ0FBVTtJQUV4QixtQkFBbUI7SUFDWixJQUFJLENBQVU7SUFFckIsdUJBQXVCO0lBQ2hCLFFBQVEsQ0FBVTtJQUV6Qix5QkFBeUI7SUFDbEIsUUFBUSxDQUFVO0lBRXpCLGlCQUFpQjtJQUNWLFNBQVMsQ0FBVTtJQUUxQixjQUFjO0lBQ1AsT0FBTyxDQUFVO0lBRXhCLFlBQVksTUFBYyxFQUFFLElBQTREO1FBQ3RGLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1YsMEJBQTBCO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBcENELG9DQW9DQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxTQUFVLFNBQVEsV0FBVztJQUN4Qyx3QkFBd0I7SUFDakIsV0FBVyxDQUFVO0lBRTVCLFlBQVksTUFBYyxFQUFFLElBQTRDO1FBQ3RFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBc0M7UUFDL0MsTUFBTSxPQUFPLEdBQUcsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDeEUsTUFBTSxNQUFNLEdBQUcsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFFeEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUMzRCxPQUFPO1lBQ1AsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxpQkFBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBdkJELDhCQXVCQztBQVdEOztHQUVHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLE1BQWMsRUFBRSxJQUFnQjtJQUM1RCxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixLQUFLLG1CQUFXLENBQUMsU0FBUyxDQUFDO1FBQzNCLEtBQUssbUJBQVcsQ0FBQyxpQkFBaUI7WUFDaEMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkMsS0FBSyxtQkFBVyxDQUFDLFVBQVUsQ0FBQztRQUM1QixLQUFLLG1CQUFXLENBQUMsZUFBZTtZQUM5QixPQUFPLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4QyxLQUFLLG1CQUFXLENBQUMsRUFBRTtZQUNqQixPQUFPLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyQztZQUNFLE9BQU8sSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBJQ2hhbm5lbCwgQVBJTWVzc2FnZSwgQVBJRW1iZWQgfSBmcm9tICcuLi90eXBlcyc7XHJcbmltcG9ydCB7IENoYW5uZWxUeXBlIH0gZnJvbSAnLi4vZW51bXMnO1xyXG5pbXBvcnQgdHlwZSB7IENsaWVudCB9IGZyb20gJy4uL0NsaWVudCc7XHJcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuL01lc3NhZ2UnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uIH0gZnJvbSAnLi9Db2xsZWN0aW9uJztcclxuaW1wb3J0IHsgTWVzc2FnZUNvbGxlY3RvciwgTWVzc2FnZUNvbGxlY3Rvck9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9Db2xsZWN0b3InO1xyXG5cclxuLyoqXHJcbiAqIEF3YWl0IG1lc3NhZ2VzIG9wdGlvbnNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXdhaXRNZXNzYWdlc09wdGlvbnMgZXh0ZW5kcyBNZXNzYWdlQ29sbGVjdG9yT3B0aW9ucyB7XHJcbiAgLyoqIEVycm9ycyB0byByZWplY3Qgb24gKi9cclxuICBlcnJvcnM/OiBzdHJpbmdbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEJhc2UgY2hhbm5lbCBjbGFzc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEJhc2VDaGFubmVsIHtcclxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBjbGllbnQgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50OiBDbGllbnQ7XHJcbiAgXHJcbiAgLyoqIENoYW5uZWwgSUQgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcclxuICBcclxuICAvKiogQ2hhbm5lbCB0eXBlICovXHJcbiAgcHVibGljIHJlYWRvbmx5IHR5cGU6IENoYW5uZWxUeXBlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IENsaWVudCwgZGF0YTogQVBJQ2hhbm5lbCkge1xyXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XHJcbiAgICB0aGlzLmlkID0gZGF0YS5pZDtcclxuICAgIHRoaXMudHlwZSA9IGRhdGEudHlwZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIHRoaXMgaXMgYSB0ZXh0LWJhc2VkIGNoYW5uZWxcclxuICAgKi9cclxuICBpc1RleHRCYXNlZCgpOiB0aGlzIGlzIFRleHRDaGFubmVsIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIENoYW5uZWxUeXBlLkd1aWxkVGV4dCxcclxuICAgICAgQ2hhbm5lbFR5cGUuRE0sXHJcbiAgICAgIENoYW5uZWxUeXBlLkdyb3VwRE0sXHJcbiAgICAgIENoYW5uZWxUeXBlLkd1aWxkQW5ub3VuY2VtZW50XHJcbiAgICBdLmluY2x1ZGVzKHRoaXMudHlwZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiB0aGlzIGlzIGEgdm9pY2UtYmFzZWQgY2hhbm5lbFxyXG4gICAqL1xyXG4gIGlzVm9pY2VCYXNlZCgpOiB0aGlzIGlzIFZvaWNlQ2hhbm5lbCB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBDaGFubmVsVHlwZS5HdWlsZFZvaWNlLFxyXG4gICAgICBDaGFubmVsVHlwZS5HdWlsZFN0YWdlVm9pY2VcclxuICAgIF0uaW5jbHVkZXModGhpcy50eXBlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnQgdG8gc3RyaW5nIChtZW50aW9uIGZvcm1hdClcclxuICAgKi9cclxuICB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGA8IyR7dGhpcy5pZH0+YDtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUZXh0IGNoYW5uZWxcclxuICovXHJcbmV4cG9ydCBjbGFzcyBUZXh0Q2hhbm5lbCBleHRlbmRzIEJhc2VDaGFubmVsIHtcclxuICAvKiogR3VpbGQgSUQgKi9cclxuICBwdWJsaWMgZ3VpbGRJZD86IHN0cmluZztcclxuICBcclxuICAvKiogQ2hhbm5lbCBuYW1lICovXHJcbiAgcHVibGljIG5hbWU/OiBzdHJpbmc7XHJcbiAgXHJcbiAgLyoqIENoYW5uZWwgdG9waWMgKi9cclxuICBwdWJsaWMgdG9waWM/OiBzdHJpbmc7XHJcbiAgXHJcbiAgLyoqIENoYW5uZWwgcG9zaXRpb24gKi9cclxuICBwdWJsaWMgcG9zaXRpb24/OiBudW1iZXI7XHJcbiAgXHJcbiAgLyoqIFBhcmVudCBjYXRlZ29yeSBJRCAqL1xyXG4gIHB1YmxpYyBwYXJlbnRJZD86IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoY2xpZW50OiBDbGllbnQsIGRhdGE6IEFQSUNoYW5uZWwpIHtcclxuICAgIHN1cGVyKGNsaWVudCwgZGF0YSk7XHJcbiAgICB0aGlzLmd1aWxkSWQgPSBkYXRhLmd1aWxkX2lkO1xyXG4gICAgdGhpcy5uYW1lID0gZGF0YS5uYW1lO1xyXG4gICAgdGhpcy50b3BpYyA9IGRhdGEudG9waWM7XHJcbiAgICB0aGlzLnBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbjtcclxuICAgIHRoaXMucGFyZW50SWQgPSBkYXRhLnBhcmVudF9pZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmQgYSBtZXNzYWdlIHRvIHRoaXMgY2hhbm5lbFxyXG4gICAqL1xyXG4gIGFzeW5jIHNlbmQob3B0aW9uczogc3RyaW5nIHwgTWVzc2FnZUNyZWF0ZU9wdGlvbnMpOiBQcm9taXNlPE1lc3NhZ2U+IHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycgPyBvcHRpb25zIDogb3B0aW9ucy5jb250ZW50O1xyXG4gICAgY29uc3QgZW1iZWRzID0gdHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnID8gdW5kZWZpbmVkIDogb3B0aW9ucy5lbWJlZHM7XHJcbiAgICBcclxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXN0LmNyZWF0ZU1lc3NhZ2UodGhpcy5ndWlsZElkIHx8ICcnLCB0aGlzLmlkLCB7XHJcbiAgICAgIGNvbnRlbnQsXHJcbiAgICAgIGVtYmVkc1xyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIHJldHVybiBuZXcgTWVzc2FnZSh0aGlzLmNsaWVudCwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBtZXNzYWdlIGNvbGxlY3RvclxyXG4gICAqL1xyXG4gIGNyZWF0ZU1lc3NhZ2VDb2xsZWN0b3Iob3B0aW9ucz86IE1lc3NhZ2VDb2xsZWN0b3JPcHRpb25zKTogTWVzc2FnZUNvbGxlY3RvciB7XHJcbiAgICByZXR1cm4gbmV3IE1lc3NhZ2VDb2xsZWN0b3IodGhpcy5jbGllbnQsIHRoaXMuaWQsIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXdhaXQgbWVzc2FnZXMgaW4gdGhpcyBjaGFubmVsXHJcbiAgICovXHJcbiAgYXdhaXRNZXNzYWdlcyhvcHRpb25zPzogQXdhaXRNZXNzYWdlc09wdGlvbnMpOiBQcm9taXNlPENvbGxlY3Rpb248c3RyaW5nLCBNZXNzYWdlPj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3QgY29sbGVjdG9yID0gdGhpcy5jcmVhdGVNZXNzYWdlQ29sbGVjdG9yKG9wdGlvbnMpO1xyXG4gICAgICBcclxuICAgICAgY29sbGVjdG9yLm9uY2UoJ2VuZCcsIChjb2xsZWN0ZWQsIHJlYXNvbikgPT4ge1xyXG4gICAgICAgIGlmIChvcHRpb25zPy5lcnJvcnM/LmluY2x1ZGVzKHJlYXNvbikpIHtcclxuICAgICAgICAgIHJlamVjdChjb2xsZWN0ZWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXNvbHZlKGNvbGxlY3RlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQnVsayBkZWxldGUgbWVzc2FnZXNcclxuICAgKi9cclxuICBhc3luYyBidWxrRGVsZXRlKG1lc3NhZ2VzOiBudW1iZXIgfCBzdHJpbmdbXSB8IENvbGxlY3Rpb248c3RyaW5nLCBNZXNzYWdlPiwgZmlsdGVyT2xkID0gdHJ1ZSk6IFByb21pc2U8Q29sbGVjdGlvbjxzdHJpbmcsIE1lc3NhZ2U+PiB7XHJcbiAgICBsZXQgbWVzc2FnZUlkczogc3RyaW5nW107XHJcbiAgICBcclxuICAgIGlmICh0eXBlb2YgbWVzc2FnZXMgPT09ICdudW1iZXInKSB7XHJcbiAgICAgIC8vIEZldGNoIG1lc3NhZ2VzIGZpcnN0XHJcbiAgICAgIGNvbnN0IGZldGNoZWQgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXN0LmdldE1lc3NhZ2VzKHRoaXMuZ3VpbGRJZCB8fCAnJywgdGhpcy5pZCwgeyBsaW1pdDogbWVzc2FnZXMgfSk7XHJcbiAgICAgIG1lc3NhZ2VJZHMgPSBmZXRjaGVkLm1hcChtID0+IG0uaWQpO1xyXG4gICAgfSBlbHNlIGlmIChtZXNzYWdlcyBpbnN0YW5jZW9mIENvbGxlY3Rpb24pIHtcclxuICAgICAgbWVzc2FnZUlkcyA9IFsuLi5tZXNzYWdlcy5rZXlzKCldO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbWVzc2FnZUlkcyA9IG1lc3NhZ2VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbHRlciBvbGQgbWVzc2FnZXMgKG9sZGVyIHRoYW4gMTQgZGF5cylcclxuICAgIGlmIChmaWx0ZXJPbGQpIHtcclxuICAgICAgY29uc3QgdHdvV2Vla3NBZ28gPSBEYXRlLm5vdygpIC0gMTQgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xyXG4gICAgICBtZXNzYWdlSWRzID0gbWVzc2FnZUlkcy5maWx0ZXIoaWQgPT4ge1xyXG4gICAgICAgIC8vIEV4dHJhY3QgdGltZXN0YW1wIGZyb20gc25vd2ZsYWtlXHJcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gTnVtYmVyKEJpZ0ludChpZCkgPj4gMjJuKSArIDE0MjAwNzA0MDAwMDA7XHJcbiAgICAgICAgcmV0dXJuIHRpbWVzdGFtcCA+IHR3b1dlZWtzQWdvO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWVzc2FnZUlkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1lc3NhZ2VJZHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LnJlc3QuZGVsZXRlTWVzc2FnZSh0aGlzLmd1aWxkSWQgfHwgJycsIHRoaXMuaWQsIG1lc3NhZ2VJZHNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXdhaXQgdGhpcy5jbGllbnQucmVzdC5idWxrRGVsZXRlTWVzc2FnZXModGhpcy5ndWlsZElkIHx8ICcnLCB0aGlzLmlkLCBtZXNzYWdlSWRzKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXR1cm4gZGVsZXRlZCBtZXNzYWdlcyBhcyBjb2xsZWN0aW9uXHJcbiAgICBjb25zdCBkZWxldGVkID0gbmV3IENvbGxlY3Rpb248c3RyaW5nLCBNZXNzYWdlPigpO1xyXG4gICAgLy8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0aGUgYWN0dWFsIG1lc3NhZ2Ugb2JqZWN0cyBoZXJlXHJcbiAgICByZXR1cm4gZGVsZXRlZDtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBWb2ljZSBjaGFubmVsXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgVm9pY2VDaGFubmVsIGV4dGVuZHMgQmFzZUNoYW5uZWwge1xyXG4gIC8qKiBHdWlsZCBJRCAqL1xyXG4gIHB1YmxpYyBndWlsZElkPzogc3RyaW5nO1xyXG4gIFxyXG4gIC8qKiBDaGFubmVsIG5hbWUgKi9cclxuICBwdWJsaWMgbmFtZT86IHN0cmluZztcclxuICBcclxuICAvKiogQ2hhbm5lbCBwb3NpdGlvbiAqL1xyXG4gIHB1YmxpYyBwb3NpdGlvbj86IG51bWJlcjtcclxuICBcclxuICAvKiogUGFyZW50IGNhdGVnb3J5IElEICovXHJcbiAgcHVibGljIHBhcmVudElkPzogc3RyaW5nO1xyXG4gIFxyXG4gIC8qKiBVc2VyIGxpbWl0ICovXHJcbiAgcHVibGljIHVzZXJMaW1pdD86IG51bWJlcjtcclxuICBcclxuICAvKiogQml0cmF0ZSAqL1xyXG4gIHB1YmxpYyBiaXRyYXRlPzogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IENsaWVudCwgZGF0YTogQVBJQ2hhbm5lbCAmIHsgdXNlcl9saW1pdD86IG51bWJlcjsgYml0cmF0ZT86IG51bWJlciB9KSB7XHJcbiAgICBzdXBlcihjbGllbnQsIGRhdGEpO1xyXG4gICAgdGhpcy5ndWlsZElkID0gZGF0YS5ndWlsZF9pZDtcclxuICAgIHRoaXMubmFtZSA9IGRhdGEubmFtZTtcclxuICAgIHRoaXMucG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uO1xyXG4gICAgdGhpcy5wYXJlbnRJZCA9IGRhdGEucGFyZW50X2lkO1xyXG4gICAgdGhpcy51c2VyTGltaXQgPSBkYXRhLnVzZXJfbGltaXQ7XHJcbiAgICB0aGlzLmJpdHJhdGUgPSBkYXRhLmJpdHJhdGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiB0aGUgY2hhbm5lbCBpcyBqb2luYWJsZVxyXG4gICAqL1xyXG4gIGdldCBqb2luYWJsZSgpOiBib29sZWFuIHtcclxuICAgIC8vIFRPRE86IENoZWNrIHBlcm1pc3Npb25zXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBETSBjaGFubmVsXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRE1DaGFubmVsIGV4dGVuZHMgQmFzZUNoYW5uZWwge1xyXG4gIC8qKiBSZWNpcGllbnQgdXNlciBJRCAqL1xyXG4gIHB1YmxpYyByZWNpcGllbnRJZD86IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoY2xpZW50OiBDbGllbnQsIGRhdGE6IEFQSUNoYW5uZWwgJiB7IHJlY2lwaWVudF9pZD86IHN0cmluZyB9KSB7XHJcbiAgICBzdXBlcihjbGllbnQsIGRhdGEpO1xyXG4gICAgdGhpcy5yZWNpcGllbnRJZCA9IGRhdGEucmVjaXBpZW50X2lkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZCBhIG1lc3NhZ2UgdG8gdGhpcyBETVxyXG4gICAqL1xyXG4gIGFzeW5jIHNlbmQob3B0aW9uczogc3RyaW5nIHwgTWVzc2FnZUNyZWF0ZU9wdGlvbnMpOiBQcm9taXNlPE1lc3NhZ2U+IHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycgPyBvcHRpb25zIDogb3B0aW9ucy5jb250ZW50O1xyXG4gICAgY29uc3QgZW1iZWRzID0gdHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnID8gdW5kZWZpbmVkIDogb3B0aW9ucy5lbWJlZHM7XHJcbiAgICBcclxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXN0LmNyZWF0ZURNTWVzc2FnZSh0aGlzLmlkLCB7XHJcbiAgICAgIGNvbnRlbnQsXHJcbiAgICAgIGVtYmVkc1xyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIHJldHVybiBuZXcgTWVzc2FnZSh0aGlzLmNsaWVudCwgZGF0YSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogTWVzc2FnZSBjcmVhdGUgb3B0aW9uc1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlQ3JlYXRlT3B0aW9ucyB7XHJcbiAgY29udGVudD86IHN0cmluZztcclxuICBlbWJlZHM/OiBBUElFbWJlZFtdO1xyXG4gIGZpbGVzPzogYW55W107XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYXBwcm9wcmlhdGUgY2hhbm5lbCBjbGFzcyBiYXNlZCBvbiB0eXBlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hhbm5lbChjbGllbnQ6IENsaWVudCwgZGF0YTogQVBJQ2hhbm5lbCk6IEJhc2VDaGFubmVsIHtcclxuICBzd2l0Y2ggKGRhdGEudHlwZSkge1xyXG4gICAgY2FzZSBDaGFubmVsVHlwZS5HdWlsZFRleHQ6XHJcbiAgICBjYXNlIENoYW5uZWxUeXBlLkd1aWxkQW5ub3VuY2VtZW50OlxyXG4gICAgICByZXR1cm4gbmV3IFRleHRDaGFubmVsKGNsaWVudCwgZGF0YSk7XHJcbiAgICBjYXNlIENoYW5uZWxUeXBlLkd1aWxkVm9pY2U6XHJcbiAgICBjYXNlIENoYW5uZWxUeXBlLkd1aWxkU3RhZ2VWb2ljZTpcclxuICAgICAgcmV0dXJuIG5ldyBWb2ljZUNoYW5uZWwoY2xpZW50LCBkYXRhKTtcclxuICAgIGNhc2UgQ2hhbm5lbFR5cGUuRE06XHJcbiAgICAgIHJldHVybiBuZXcgRE1DaGFubmVsKGNsaWVudCwgZGF0YSk7XHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICByZXR1cm4gbmV3IEJhc2VDaGFubmVsKGNsaWVudCwgZGF0YSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extended Map with utility methods
|
|
3
|
+
*/
|
|
4
|
+
export declare class Collection<K, V> extends Map<K, V> {
|
|
5
|
+
/**
|
|
6
|
+
* Get the first value in the collection
|
|
7
|
+
*/
|
|
8
|
+
first(): V | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Get the last value in the collection
|
|
11
|
+
*/
|
|
12
|
+
last(): V | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Get a random value from the collection
|
|
15
|
+
*/
|
|
16
|
+
random(): V | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Find a value matching a predicate
|
|
19
|
+
*/
|
|
20
|
+
find(fn: (value: V, key: K, collection: this) => boolean): V | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Filter values matching a predicate
|
|
23
|
+
*/
|
|
24
|
+
filter(fn: (value: V, key: K, collection: this) => boolean): Collection<K, V>;
|
|
25
|
+
/**
|
|
26
|
+
* Map values to a new array
|
|
27
|
+
*/
|
|
28
|
+
map<T>(fn: (value: V, key: K, collection: this) => T): T[];
|
|
29
|
+
/**
|
|
30
|
+
* Check if some values match a predicate
|
|
31
|
+
*/
|
|
32
|
+
some(fn: (value: V, key: K, collection: this) => boolean): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Check if every value matches a predicate
|
|
35
|
+
*/
|
|
36
|
+
every(fn: (value: V, key: K, collection: this) => boolean): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Reduce the collection to a single value
|
|
39
|
+
*/
|
|
40
|
+
reduce<T>(fn: (accumulator: T, value: V, key: K, collection: this) => T, initialValue: T): T;
|
|
41
|
+
/**
|
|
42
|
+
* Convert to array
|
|
43
|
+
*/
|
|
44
|
+
toArray(): V[];
|
|
45
|
+
/**
|
|
46
|
+
* Clone the collection
|
|
47
|
+
*/
|
|
48
|
+
clone(): Collection<K, V>;
|
|
49
|
+
/**
|
|
50
|
+
* Concat with another collection
|
|
51
|
+
*/
|
|
52
|
+
concat(...collections: Collection<K, V>[]): Collection<K, V>;
|
|
53
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Collection = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Extended Map with utility methods
|
|
6
|
+
*/
|
|
7
|
+
class Collection extends Map {
|
|
8
|
+
/**
|
|
9
|
+
* Get the first value in the collection
|
|
10
|
+
*/
|
|
11
|
+
first() {
|
|
12
|
+
return this.values().next().value;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get the last value in the collection
|
|
16
|
+
*/
|
|
17
|
+
last() {
|
|
18
|
+
const arr = [...this.values()];
|
|
19
|
+
return arr[arr.length - 1];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get a random value from the collection
|
|
23
|
+
*/
|
|
24
|
+
random() {
|
|
25
|
+
const arr = [...this.values()];
|
|
26
|
+
return arr[Math.floor(Math.random() * arr.length)];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Find a value matching a predicate
|
|
30
|
+
*/
|
|
31
|
+
find(fn) {
|
|
32
|
+
for (const [key, val] of this) {
|
|
33
|
+
if (fn(val, key, this))
|
|
34
|
+
return val;
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Filter values matching a predicate
|
|
40
|
+
*/
|
|
41
|
+
filter(fn) {
|
|
42
|
+
const results = new Collection();
|
|
43
|
+
for (const [key, val] of this) {
|
|
44
|
+
if (fn(val, key, this))
|
|
45
|
+
results.set(key, val);
|
|
46
|
+
}
|
|
47
|
+
return results;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Map values to a new array
|
|
51
|
+
*/
|
|
52
|
+
map(fn) {
|
|
53
|
+
const results = [];
|
|
54
|
+
for (const [key, val] of this) {
|
|
55
|
+
results.push(fn(val, key, this));
|
|
56
|
+
}
|
|
57
|
+
return results;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if some values match a predicate
|
|
61
|
+
*/
|
|
62
|
+
some(fn) {
|
|
63
|
+
for (const [key, val] of this) {
|
|
64
|
+
if (fn(val, key, this))
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check if every value matches a predicate
|
|
71
|
+
*/
|
|
72
|
+
every(fn) {
|
|
73
|
+
for (const [key, val] of this) {
|
|
74
|
+
if (!fn(val, key, this))
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Reduce the collection to a single value
|
|
81
|
+
*/
|
|
82
|
+
reduce(fn, initialValue) {
|
|
83
|
+
let accumulator = initialValue;
|
|
84
|
+
for (const [key, val] of this) {
|
|
85
|
+
accumulator = fn(accumulator, val, key, this);
|
|
86
|
+
}
|
|
87
|
+
return accumulator;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Convert to array
|
|
91
|
+
*/
|
|
92
|
+
toArray() {
|
|
93
|
+
return [...this.values()];
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Clone the collection
|
|
97
|
+
*/
|
|
98
|
+
clone() {
|
|
99
|
+
return new Collection(this);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Concat with another collection
|
|
103
|
+
*/
|
|
104
|
+
concat(...collections) {
|
|
105
|
+
const newColl = this.clone();
|
|
106
|
+
for (const coll of collections) {
|
|
107
|
+
for (const [key, val] of coll) {
|
|
108
|
+
newColl.set(key, val);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return newColl;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
exports.Collection = Collection;
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdHJ1Y3R1cmVzL0NvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCxNQUFhLFVBQWlCLFNBQVEsR0FBUztJQUM3Qzs7T0FFRztJQUNILEtBQUs7UUFDSCxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSTtRQUNGLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMvQixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDSixNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDL0IsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxDQUFDLEVBQW1EO1FBQ3RELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QixJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztnQkFBRSxPQUFPLEdBQUcsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEVBQW1EO1FBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUksVUFBVSxFQUFRLENBQUM7UUFDdkMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzlCLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxHQUFHLENBQUksRUFBNkM7UUFDbEQsTUFBTSxPQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksQ0FBQyxFQUFtRDtRQUN0RCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDOUIsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEVBQW1EO1FBQ3ZELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBSSxFQUE2RCxFQUFFLFlBQWU7UUFDdEYsSUFBSSxXQUFXLEdBQUcsWUFBWSxDQUFDO1FBQy9CLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QixXQUFXLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEdBQUcsV0FBK0I7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLEtBQUssTUFBTSxJQUFJLElBQUksV0FBVyxFQUFFLENBQUM7WUFDL0IsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN4QixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQWpIRCxnQ0FpSEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogRXh0ZW5kZWQgTWFwIHdpdGggdXRpbGl0eSBtZXRob2RzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbjxLLCBWPiBleHRlbmRzIE1hcDxLLCBWPiB7XHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBmaXJzdCB2YWx1ZSBpbiB0aGUgY29sbGVjdGlvblxyXG4gICAqL1xyXG4gIGZpcnN0KCk6IFYgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBsYXN0IHZhbHVlIGluIHRoZSBjb2xsZWN0aW9uXHJcbiAgICovXHJcbiAgbGFzdCgpOiBWIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IGFyciA9IFsuLi50aGlzLnZhbHVlcygpXTtcclxuICAgIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGEgcmFuZG9tIHZhbHVlIGZyb20gdGhlIGNvbGxlY3Rpb25cclxuICAgKi9cclxuICByYW5kb20oKTogViB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBhcnIgPSBbLi4udGhpcy52YWx1ZXMoKV07XHJcbiAgICByZXR1cm4gYXJyW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFyci5sZW5ndGgpXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbmQgYSB2YWx1ZSBtYXRjaGluZyBhIHByZWRpY2F0ZVxyXG4gICAqL1xyXG4gIGZpbmQoZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBib29sZWFuKTogViB8IHVuZGVmaW5lZCB7XHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xyXG4gICAgICBpZiAoZm4odmFsLCBrZXksIHRoaXMpKSByZXR1cm4gdmFsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbHRlciB2YWx1ZXMgbWF0Y2hpbmcgYSBwcmVkaWNhdGVcclxuICAgKi9cclxuICBmaWx0ZXIoZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBib29sZWFuKTogQ29sbGVjdGlvbjxLLCBWPiB7XHJcbiAgICBjb25zdCByZXN1bHRzID0gbmV3IENvbGxlY3Rpb248SywgVj4oKTtcclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzKSB7XHJcbiAgICAgIGlmIChmbih2YWwsIGtleSwgdGhpcykpIHJlc3VsdHMuc2V0KGtleSwgdmFsKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFwIHZhbHVlcyB0byBhIG5ldyBhcnJheVxyXG4gICAqL1xyXG4gIG1hcDxUPihmbjogKHZhbHVlOiBWLCBrZXk6IEssIGNvbGxlY3Rpb246IHRoaXMpID0+IFQpOiBUW10ge1xyXG4gICAgY29uc3QgcmVzdWx0czogVFtdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xyXG4gICAgICByZXN1bHRzLnB1c2goZm4odmFsLCBrZXksIHRoaXMpKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgc29tZSB2YWx1ZXMgbWF0Y2ggYSBwcmVkaWNhdGVcclxuICAgKi9cclxuICBzb21lKGZuOiAodmFsdWU6IFYsIGtleTogSywgY29sbGVjdGlvbjogdGhpcykgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcclxuICAgICAgaWYgKGZuKHZhbCwga2V5LCB0aGlzKSkgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBldmVyeSB2YWx1ZSBtYXRjaGVzIGEgcHJlZGljYXRlXHJcbiAgICovXHJcbiAgZXZlcnkoZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xyXG4gICAgICBpZiAoIWZuKHZhbCwga2V5LCB0aGlzKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWR1Y2UgdGhlIGNvbGxlY3Rpb24gdG8gYSBzaW5nbGUgdmFsdWVcclxuICAgKi9cclxuICByZWR1Y2U8VD4oZm46IChhY2N1bXVsYXRvcjogVCwgdmFsdWU6IFYsIGtleTogSywgY29sbGVjdGlvbjogdGhpcykgPT4gVCwgaW5pdGlhbFZhbHVlOiBUKTogVCB7XHJcbiAgICBsZXQgYWNjdW11bGF0b3IgPSBpbml0aWFsVmFsdWU7XHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xyXG4gICAgICBhY2N1bXVsYXRvciA9IGZuKGFjY3VtdWxhdG9yLCB2YWwsIGtleSwgdGhpcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IHRvIGFycmF5XHJcbiAgICovXHJcbiAgdG9BcnJheSgpOiBWW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLnZhbHVlcygpXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb25lIHRoZSBjb2xsZWN0aW9uXHJcbiAgICovXHJcbiAgY2xvbmUoKTogQ29sbGVjdGlvbjxLLCBWPiB7XHJcbiAgICByZXR1cm4gbmV3IENvbGxlY3Rpb24odGhpcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25jYXQgd2l0aCBhbm90aGVyIGNvbGxlY3Rpb25cclxuICAgKi9cclxuICBjb25jYXQoLi4uY29sbGVjdGlvbnM6IENvbGxlY3Rpb248SywgVj5bXSk6IENvbGxlY3Rpb248SywgVj4ge1xyXG4gICAgY29uc3QgbmV3Q29sbCA9IHRoaXMuY2xvbmUoKTtcclxuICAgIGZvciAoY29uc3QgY29sbCBvZiBjb2xsZWN0aW9ucykge1xyXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgY29sbCkge1xyXG4gICAgICAgIG5ld0NvbGwuc2V0KGtleSwgdmFsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld0NvbGw7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { APIGuild, APIChannel, APIGuildMember } from '../types';
|
|
2
|
+
import { Collection } from './Collection';
|
|
3
|
+
import { GuildMember } from './GuildMember';
|
|
4
|
+
import type { Client } from '../Client';
|
|
5
|
+
/**
|
|
6
|
+
* Represents a guild
|
|
7
|
+
*/
|
|
8
|
+
export declare class Guild {
|
|
9
|
+
/** Reference to the client */
|
|
10
|
+
readonly client: Client;
|
|
11
|
+
/** Guild ID */
|
|
12
|
+
readonly id: string;
|
|
13
|
+
/** Guild name */
|
|
14
|
+
name: string;
|
|
15
|
+
/** Guild icon URL */
|
|
16
|
+
icon?: string;
|
|
17
|
+
/** Owner ID */
|
|
18
|
+
ownerId: string;
|
|
19
|
+
/** Whether the guild is unavailable */
|
|
20
|
+
unavailable: boolean;
|
|
21
|
+
/** Cached members */
|
|
22
|
+
members: Collection<string, GuildMember>;
|
|
23
|
+
/** Cached channels */
|
|
24
|
+
channels: Collection<string, APIChannel>;
|
|
25
|
+
constructor(client: Client, data: APIGuild);
|
|
26
|
+
/**
|
|
27
|
+
* Get the guild icon URL
|
|
28
|
+
*/
|
|
29
|
+
iconURL(options?: {
|
|
30
|
+
size?: number;
|
|
31
|
+
}): string | null;
|
|
32
|
+
/**
|
|
33
|
+
* Get the voice adapter creator for @jubbio/voice
|
|
34
|
+
*/
|
|
35
|
+
get voiceAdapterCreator(): ((methods: {
|
|
36
|
+
onVoiceServerUpdate(data: any): void;
|
|
37
|
+
onVoiceStateUpdate(data: any): void;
|
|
38
|
+
destroy(): void;
|
|
39
|
+
}) => {
|
|
40
|
+
sendPayload(payload: any): boolean;
|
|
41
|
+
destroy(): void;
|
|
42
|
+
}) | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Fetch a member by ID
|
|
45
|
+
*/
|
|
46
|
+
fetchMember(userId: string): Promise<GuildMember | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Convert to string
|
|
49
|
+
*/
|
|
50
|
+
toString(): string;
|
|
51
|
+
/**
|
|
52
|
+
* Update guild data
|
|
53
|
+
*/
|
|
54
|
+
_patch(data: Partial<APIGuild>): void;
|
|
55
|
+
/**
|
|
56
|
+
* Add a member to cache
|
|
57
|
+
*/
|
|
58
|
+
_addMember(data: APIGuildMember): GuildMember;
|
|
59
|
+
}
|