@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,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snowflake utilities
|
|
3
|
+
* API compatible with Discord.js SnowflakeUtil
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* A container for useful snowflake-related methods
|
|
7
|
+
*/
|
|
8
|
+
export declare class SnowflakeUtil {
|
|
9
|
+
/**
|
|
10
|
+
* Jubbio's epoch value
|
|
11
|
+
*/
|
|
12
|
+
static readonly EPOCH = 1420070400000n;
|
|
13
|
+
/**
|
|
14
|
+
* Generates a snowflake ID
|
|
15
|
+
* @param timestamp Timestamp or date to generate from
|
|
16
|
+
*/
|
|
17
|
+
static generate(timestamp?: number | Date): string;
|
|
18
|
+
/**
|
|
19
|
+
* Deconstructs a snowflake ID
|
|
20
|
+
* @param snowflake Snowflake to deconstruct
|
|
21
|
+
*/
|
|
22
|
+
static deconstruct(snowflake: string): DeconstructedSnowflake;
|
|
23
|
+
/**
|
|
24
|
+
* Retrieves the timestamp from a snowflake
|
|
25
|
+
* @param snowflake Snowflake to get the timestamp from
|
|
26
|
+
*/
|
|
27
|
+
static timestampFrom(snowflake: string): number;
|
|
28
|
+
/**
|
|
29
|
+
* Retrieves the date from a snowflake
|
|
30
|
+
* @param snowflake Snowflake to get the date from
|
|
31
|
+
*/
|
|
32
|
+
static dateFrom(snowflake: string): Date;
|
|
33
|
+
/**
|
|
34
|
+
* Compares two snowflakes
|
|
35
|
+
* @param a First snowflake
|
|
36
|
+
* @param b Second snowflake
|
|
37
|
+
* @returns -1 if a < b, 0 if a === b, 1 if a > b
|
|
38
|
+
*/
|
|
39
|
+
static compare(a: string, b: string): -1 | 0 | 1;
|
|
40
|
+
/**
|
|
41
|
+
* Checks if a value is a valid snowflake
|
|
42
|
+
* @param value Value to check
|
|
43
|
+
*/
|
|
44
|
+
static isValid(value: unknown): value is string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Deconstructed snowflake data
|
|
48
|
+
*/
|
|
49
|
+
export interface DeconstructedSnowflake {
|
|
50
|
+
/** Timestamp the snowflake was created */
|
|
51
|
+
timestamp: number;
|
|
52
|
+
/** Date the snowflake was created */
|
|
53
|
+
date: Date;
|
|
54
|
+
/** Worker ID in the snowflake */
|
|
55
|
+
workerId: number;
|
|
56
|
+
/** Process ID in the snowflake */
|
|
57
|
+
processId: number;
|
|
58
|
+
/** Increment in the snowflake */
|
|
59
|
+
increment: number;
|
|
60
|
+
/** Binary representation of the snowflake */
|
|
61
|
+
binary: string;
|
|
62
|
+
}
|
|
63
|
+
export default SnowflakeUtil;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Snowflake utilities
|
|
4
|
+
* API compatible with Discord.js SnowflakeUtil
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.SnowflakeUtil = void 0;
|
|
8
|
+
// Jubbio epoch (same as Discord: 2015-01-01T00:00:00.000Z)
|
|
9
|
+
const EPOCH = 1420070400000n;
|
|
10
|
+
/**
|
|
11
|
+
* A container for useful snowflake-related methods
|
|
12
|
+
*/
|
|
13
|
+
class SnowflakeUtil {
|
|
14
|
+
/**
|
|
15
|
+
* Jubbio's epoch value
|
|
16
|
+
*/
|
|
17
|
+
static EPOCH = EPOCH;
|
|
18
|
+
/**
|
|
19
|
+
* Generates a snowflake ID
|
|
20
|
+
* @param timestamp Timestamp or date to generate from
|
|
21
|
+
*/
|
|
22
|
+
static generate(timestamp = Date.now()) {
|
|
23
|
+
const time = timestamp instanceof Date ? timestamp.getTime() : timestamp;
|
|
24
|
+
return ((BigInt(time) - EPOCH) << 22n).toString();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Deconstructs a snowflake ID
|
|
28
|
+
* @param snowflake Snowflake to deconstruct
|
|
29
|
+
*/
|
|
30
|
+
static deconstruct(snowflake) {
|
|
31
|
+
const bigIntSnowflake = BigInt(snowflake);
|
|
32
|
+
return {
|
|
33
|
+
timestamp: Number((bigIntSnowflake >> 22n) + EPOCH),
|
|
34
|
+
get date() {
|
|
35
|
+
return new Date(this.timestamp);
|
|
36
|
+
},
|
|
37
|
+
workerId: Number((bigIntSnowflake & 0x3e0000n) >> 17n),
|
|
38
|
+
processId: Number((bigIntSnowflake & 0x1f000n) >> 12n),
|
|
39
|
+
increment: Number(bigIntSnowflake & 0xfffn),
|
|
40
|
+
binary: bigIntSnowflake.toString(2).padStart(64, '0'),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Retrieves the timestamp from a snowflake
|
|
45
|
+
* @param snowflake Snowflake to get the timestamp from
|
|
46
|
+
*/
|
|
47
|
+
static timestampFrom(snowflake) {
|
|
48
|
+
return Number((BigInt(snowflake) >> 22n) + EPOCH);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Retrieves the date from a snowflake
|
|
52
|
+
* @param snowflake Snowflake to get the date from
|
|
53
|
+
*/
|
|
54
|
+
static dateFrom(snowflake) {
|
|
55
|
+
return new Date(SnowflakeUtil.timestampFrom(snowflake));
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Compares two snowflakes
|
|
59
|
+
* @param a First snowflake
|
|
60
|
+
* @param b Second snowflake
|
|
61
|
+
* @returns -1 if a < b, 0 if a === b, 1 if a > b
|
|
62
|
+
*/
|
|
63
|
+
static compare(a, b) {
|
|
64
|
+
const bigA = BigInt(a);
|
|
65
|
+
const bigB = BigInt(b);
|
|
66
|
+
if (bigA < bigB)
|
|
67
|
+
return -1;
|
|
68
|
+
if (bigA > bigB)
|
|
69
|
+
return 1;
|
|
70
|
+
return 0;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Checks if a value is a valid snowflake
|
|
74
|
+
* @param value Value to check
|
|
75
|
+
*/
|
|
76
|
+
static isValid(value) {
|
|
77
|
+
if (typeof value !== 'string')
|
|
78
|
+
return false;
|
|
79
|
+
if (!/^\d{17,20}$/.test(value))
|
|
80
|
+
return false;
|
|
81
|
+
try {
|
|
82
|
+
const timestamp = SnowflakeUtil.timestampFrom(value);
|
|
83
|
+
return timestamp > Number(EPOCH) && timestamp < Date.now() + 1000 * 60 * 60 * 24 * 365; // Within reasonable range
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
exports.SnowflakeUtil = SnowflakeUtil;
|
|
91
|
+
// Export as default too for convenience
|
|
92
|
+
exports.default = SnowflakeUtil;
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU25vd2ZsYWtlVXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9Tbm93Zmxha2VVdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7OztBQUVILDJEQUEyRDtBQUMzRCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUM7QUFFN0I7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFDeEI7O09BRUc7SUFDSCxNQUFNLENBQVUsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUU5Qjs7O09BR0c7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQTJCLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDbkQsTUFBTSxJQUFJLEdBQUcsU0FBUyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDekUsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQWlCO1FBQ2xDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQyxPQUFPO1lBQ0wsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLGVBQWUsSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDbkQsSUFBSSxJQUFJO2dCQUNOLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7WUFDRCxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztZQUN0RCxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQztZQUN0RCxTQUFTLEVBQUUsTUFBTSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7WUFDM0MsTUFBTSxFQUFFLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7U0FDdEQsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQWlCO1FBQ3BDLE9BQU8sTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQWlCO1FBQy9CLE9BQU8sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDakMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJO1lBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMzQixJQUFJLElBQUksR0FBRyxJQUFJO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUIsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFjO1FBQzNCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzdDLElBQUksQ0FBQztZQUNILE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckQsT0FBTyxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLDBCQUEwQjtRQUNwSCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQzs7QUE1RUgsc0NBNkVDO0FBb0JELHdDQUF3QztBQUN4QyxrQkFBZSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogU25vd2ZsYWtlIHV0aWxpdGllc1xyXG4gKiBBUEkgY29tcGF0aWJsZSB3aXRoIERpc2NvcmQuanMgU25vd2ZsYWtlVXRpbFxyXG4gKi9cclxuXHJcbi8vIEp1YmJpbyBlcG9jaCAoc2FtZSBhcyBEaXNjb3JkOiAyMDE1LTAxLTAxVDAwOjAwOjAwLjAwMFopXHJcbmNvbnN0IEVQT0NIID0gMTQyMDA3MDQwMDAwMG47XHJcblxyXG4vKipcclxuICogQSBjb250YWluZXIgZm9yIHVzZWZ1bCBzbm93Zmxha2UtcmVsYXRlZCBtZXRob2RzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU25vd2ZsYWtlVXRpbCB7XHJcbiAgLyoqXHJcbiAgICogSnViYmlvJ3MgZXBvY2ggdmFsdWVcclxuICAgKi9cclxuICBzdGF0aWMgcmVhZG9ubHkgRVBPQ0ggPSBFUE9DSDtcclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGVzIGEgc25vd2ZsYWtlIElEXHJcbiAgICogQHBhcmFtIHRpbWVzdGFtcCBUaW1lc3RhbXAgb3IgZGF0ZSB0byBnZW5lcmF0ZSBmcm9tXHJcbiAgICovXHJcbiAgc3RhdGljIGdlbmVyYXRlKHRpbWVzdGFtcDogbnVtYmVyIHwgRGF0ZSA9IERhdGUubm93KCkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdGltZSA9IHRpbWVzdGFtcCBpbnN0YW5jZW9mIERhdGUgPyB0aW1lc3RhbXAuZ2V0VGltZSgpIDogdGltZXN0YW1wO1xyXG4gICAgcmV0dXJuICgoQmlnSW50KHRpbWUpIC0gRVBPQ0gpIDw8IDIybikudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlY29uc3RydWN0cyBhIHNub3dmbGFrZSBJRFxyXG4gICAqIEBwYXJhbSBzbm93Zmxha2UgU25vd2ZsYWtlIHRvIGRlY29uc3RydWN0XHJcbiAgICovXHJcbiAgc3RhdGljIGRlY29uc3RydWN0KHNub3dmbGFrZTogc3RyaW5nKTogRGVjb25zdHJ1Y3RlZFNub3dmbGFrZSB7XHJcbiAgICBjb25zdCBiaWdJbnRTbm93Zmxha2UgPSBCaWdJbnQoc25vd2ZsYWtlKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRpbWVzdGFtcDogTnVtYmVyKChiaWdJbnRTbm93Zmxha2UgPj4gMjJuKSArIEVQT0NIKSxcclxuICAgICAgZ2V0IGRhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudGltZXN0YW1wKTtcclxuICAgICAgfSxcclxuICAgICAgd29ya2VySWQ6IE51bWJlcigoYmlnSW50U25vd2ZsYWtlICYgMHgzRTAwMDBuKSA+PiAxN24pLFxyXG4gICAgICBwcm9jZXNzSWQ6IE51bWJlcigoYmlnSW50U25vd2ZsYWtlICYgMHgxRjAwMG4pID4+IDEybiksXHJcbiAgICAgIGluY3JlbWVudDogTnVtYmVyKGJpZ0ludFNub3dmbGFrZSAmIDB4RkZGbiksXHJcbiAgICAgIGJpbmFyeTogYmlnSW50U25vd2ZsYWtlLnRvU3RyaW5nKDIpLnBhZFN0YXJ0KDY0LCAnMCcpLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyB0aGUgdGltZXN0YW1wIGZyb20gYSBzbm93Zmxha2VcclxuICAgKiBAcGFyYW0gc25vd2ZsYWtlIFNub3dmbGFrZSB0byBnZXQgdGhlIHRpbWVzdGFtcCBmcm9tXHJcbiAgICovXHJcbiAgc3RhdGljIHRpbWVzdGFtcEZyb20oc25vd2ZsYWtlOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE51bWJlcigoQmlnSW50KHNub3dmbGFrZSkgPj4gMjJuKSArIEVQT0NIKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyB0aGUgZGF0ZSBmcm9tIGEgc25vd2ZsYWtlXHJcbiAgICogQHBhcmFtIHNub3dmbGFrZSBTbm93Zmxha2UgdG8gZ2V0IHRoZSBkYXRlIGZyb21cclxuICAgKi9cclxuICBzdGF0aWMgZGF0ZUZyb20oc25vd2ZsYWtlOiBzdHJpbmcpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShTbm93Zmxha2VVdGlsLnRpbWVzdGFtcEZyb20oc25vd2ZsYWtlKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wYXJlcyB0d28gc25vd2ZsYWtlc1xyXG4gICAqIEBwYXJhbSBhIEZpcnN0IHNub3dmbGFrZVxyXG4gICAqIEBwYXJhbSBiIFNlY29uZCBzbm93Zmxha2VcclxuICAgKiBAcmV0dXJucyAtMSBpZiBhIDwgYiwgMCBpZiBhID09PSBiLCAxIGlmIGEgPiBiXHJcbiAgICovXHJcbiAgc3RhdGljIGNvbXBhcmUoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiAtMSB8IDAgfCAxIHtcclxuICAgIGNvbnN0IGJpZ0EgPSBCaWdJbnQoYSk7XHJcbiAgICBjb25zdCBiaWdCID0gQmlnSW50KGIpO1xyXG4gICAgaWYgKGJpZ0EgPCBiaWdCKSByZXR1cm4gLTE7XHJcbiAgICBpZiAoYmlnQSA+IGJpZ0IpIHJldHVybiAxO1xyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBhIHZhbGlkIHNub3dmbGFrZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBjaGVja1xyXG4gICAqL1xyXG4gIHN0YXRpYyBpc1ZhbGlkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgc3RyaW5nIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoIS9eXFxkezE3LDIwfSQvLnRlc3QodmFsdWUpKSByZXR1cm4gZmFsc2U7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCB0aW1lc3RhbXAgPSBTbm93Zmxha2VVdGlsLnRpbWVzdGFtcEZyb20odmFsdWUpO1xyXG4gICAgICByZXR1cm4gdGltZXN0YW1wID4gTnVtYmVyKEVQT0NIKSAmJiB0aW1lc3RhbXAgPCBEYXRlLm5vdygpICsgMTAwMCAqIDYwICogNjAgKiAyNCAqIDM2NTsgLy8gV2l0aGluIHJlYXNvbmFibGUgcmFuZ2VcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogRGVjb25zdHJ1Y3RlZCBzbm93Zmxha2UgZGF0YVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBEZWNvbnN0cnVjdGVkU25vd2ZsYWtlIHtcclxuICAvKiogVGltZXN0YW1wIHRoZSBzbm93Zmxha2Ugd2FzIGNyZWF0ZWQgKi9cclxuICB0aW1lc3RhbXA6IG51bWJlcjtcclxuICAvKiogRGF0ZSB0aGUgc25vd2ZsYWtlIHdhcyBjcmVhdGVkICovXHJcbiAgZGF0ZTogRGF0ZTtcclxuICAvKiogV29ya2VyIElEIGluIHRoZSBzbm93Zmxha2UgKi9cclxuICB3b3JrZXJJZDogbnVtYmVyO1xyXG4gIC8qKiBQcm9jZXNzIElEIGluIHRoZSBzbm93Zmxha2UgKi9cclxuICBwcm9jZXNzSWQ6IG51bWJlcjtcclxuICAvKiogSW5jcmVtZW50IGluIHRoZSBzbm93Zmxha2UgKi9cclxuICBpbmNyZW1lbnQ6IG51bWJlcjtcclxuICAvKiogQmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzbm93Zmxha2UgKi9cclxuICBiaW5hcnk6IHN0cmluZztcclxufVxyXG5cclxuLy8gRXhwb3J0IGFzIGRlZmF1bHQgdG9vIGZvciBjb252ZW5pZW5jZVxyXG5leHBvcnQgZGVmYXVsdCBTbm93Zmxha2VVdGlsO1xyXG4iXX0=
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sweepers - Automatic cache cleanup utilities
|
|
3
|
+
*/
|
|
4
|
+
import { Collection } from './Collection';
|
|
5
|
+
/**
|
|
6
|
+
* Sweeper options for a specific cache
|
|
7
|
+
*/
|
|
8
|
+
export interface SweeperOptions {
|
|
9
|
+
/** Interval in seconds between sweeps */
|
|
10
|
+
interval: number;
|
|
11
|
+
/** Filter function to determine what to sweep */
|
|
12
|
+
filter: () => (value: any, key: string, collection: Collection<string, any>) => boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Global sweeper configuration
|
|
16
|
+
*/
|
|
17
|
+
export interface SweeperDefinitions {
|
|
18
|
+
/** Sweep application commands */
|
|
19
|
+
applicationCommands?: SweeperOptions;
|
|
20
|
+
/** Sweep bans */
|
|
21
|
+
bans?: SweeperOptions;
|
|
22
|
+
/** Sweep emojis */
|
|
23
|
+
emojis?: SweeperOptions;
|
|
24
|
+
/** Sweep invites */
|
|
25
|
+
invites?: SweeperOptions;
|
|
26
|
+
/** Sweep guild members */
|
|
27
|
+
guildMembers?: SweeperOptions;
|
|
28
|
+
/** Sweep messages */
|
|
29
|
+
messages?: SweeperOptions;
|
|
30
|
+
/** Sweep presences */
|
|
31
|
+
presences?: SweeperOptions;
|
|
32
|
+
/** Sweep reactions */
|
|
33
|
+
reactions?: SweeperOptions;
|
|
34
|
+
/** Sweep stage instances */
|
|
35
|
+
stageInstances?: SweeperOptions;
|
|
36
|
+
/** Sweep stickers */
|
|
37
|
+
stickers?: SweeperOptions;
|
|
38
|
+
/** Sweep thread members */
|
|
39
|
+
threadMembers?: SweeperOptions;
|
|
40
|
+
/** Sweep threads */
|
|
41
|
+
threads?: SweeperOptions;
|
|
42
|
+
/** Sweep users */
|
|
43
|
+
users?: SweeperOptions;
|
|
44
|
+
/** Sweep voice states */
|
|
45
|
+
voiceStates?: SweeperOptions;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Sweeper filters - predefined filter functions
|
|
49
|
+
*/
|
|
50
|
+
export declare const Sweepers: {
|
|
51
|
+
/**
|
|
52
|
+
* Filter that sweeps items older than a certain lifetime
|
|
53
|
+
*/
|
|
54
|
+
filterByLifetime<T extends {
|
|
55
|
+
createdTimestamp?: number;
|
|
56
|
+
createdAt?: Date;
|
|
57
|
+
}>(options?: {
|
|
58
|
+
lifetime?: number;
|
|
59
|
+
getComparisonTimestamp?: (value: T) => number;
|
|
60
|
+
excludeFromSweep?: (value: T) => boolean;
|
|
61
|
+
}): () => (value: T) => boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Filter that sweeps archived threads
|
|
64
|
+
*/
|
|
65
|
+
archivedThreadSweepFilter(lifetime?: number): () => (thread: any) => boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Filter that sweeps expired invites
|
|
68
|
+
*/
|
|
69
|
+
expiredInviteSweepFilter(): () => (invite: any) => boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Filter that sweeps outdated presences
|
|
72
|
+
*/
|
|
73
|
+
outdatedPresenceSweepFilter(lifetime?: number): () => (presence: any) => boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Filter that sweeps all items (use with caution)
|
|
76
|
+
*/
|
|
77
|
+
sweepAll(): () => () => boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Filter that sweeps nothing
|
|
80
|
+
*/
|
|
81
|
+
sweepNone(): () => () => boolean;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Sweeper manager class
|
|
85
|
+
*/
|
|
86
|
+
export declare class SweeperManager {
|
|
87
|
+
private client;
|
|
88
|
+
private intervals;
|
|
89
|
+
private options;
|
|
90
|
+
constructor(client: any, options?: SweeperDefinitions);
|
|
91
|
+
/**
|
|
92
|
+
* Start all configured sweepers
|
|
93
|
+
*/
|
|
94
|
+
start(): void;
|
|
95
|
+
/**
|
|
96
|
+
* Start a specific sweeper
|
|
97
|
+
*/
|
|
98
|
+
private startSweeper;
|
|
99
|
+
/**
|
|
100
|
+
* Stop a specific sweeper
|
|
101
|
+
*/
|
|
102
|
+
stopSweeper(name: keyof SweeperDefinitions): void;
|
|
103
|
+
/**
|
|
104
|
+
* Stop all sweepers
|
|
105
|
+
*/
|
|
106
|
+
stop(): void;
|
|
107
|
+
/**
|
|
108
|
+
* Manually trigger a sweep
|
|
109
|
+
*/
|
|
110
|
+
sweep(name: keyof SweeperDefinitions, filter?: () => (value: any, key: string, collection: Collection<string, any>) => boolean): number;
|
|
111
|
+
/**
|
|
112
|
+
* Get the cache for a sweeper type
|
|
113
|
+
*/
|
|
114
|
+
private getCache;
|
|
115
|
+
/**
|
|
116
|
+
* Get sweeper statistics
|
|
117
|
+
*/
|
|
118
|
+
getStats(): Record<string, {
|
|
119
|
+
interval: number;
|
|
120
|
+
running: boolean;
|
|
121
|
+
}>;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Default sweeper options for common use cases
|
|
125
|
+
*/
|
|
126
|
+
export declare const DefaultSweeperOptions: SweeperDefinitions;
|
|
127
|
+
export default SweeperManager;
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Sweepers - Automatic cache cleanup utilities
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DefaultSweeperOptions = exports.SweeperManager = exports.Sweepers = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Sweeper filters - predefined filter functions
|
|
9
|
+
*/
|
|
10
|
+
exports.Sweepers = {
|
|
11
|
+
/**
|
|
12
|
+
* Filter that sweeps items older than a certain lifetime
|
|
13
|
+
*/
|
|
14
|
+
filterByLifetime(options = {}) {
|
|
15
|
+
const lifetime = options.lifetime ?? 14400; // 4 hours default
|
|
16
|
+
const getTimestamp = options.getComparisonTimestamp ??
|
|
17
|
+
((v) => v.createdTimestamp ?? v.createdAt?.getTime() ?? 0);
|
|
18
|
+
const exclude = options.excludeFromSweep ?? (() => false);
|
|
19
|
+
return () => {
|
|
20
|
+
const now = Date.now();
|
|
21
|
+
const cutoff = now - (lifetime * 1000);
|
|
22
|
+
return (value) => {
|
|
23
|
+
if (exclude(value))
|
|
24
|
+
return false;
|
|
25
|
+
const timestamp = getTimestamp(value);
|
|
26
|
+
return timestamp < cutoff;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
/**
|
|
31
|
+
* Filter that sweeps archived threads
|
|
32
|
+
*/
|
|
33
|
+
archivedThreadSweepFilter(lifetime = 14400) {
|
|
34
|
+
return () => {
|
|
35
|
+
const now = Date.now();
|
|
36
|
+
const cutoff = now - (lifetime * 1000);
|
|
37
|
+
return (thread) => {
|
|
38
|
+
if (!thread.archived)
|
|
39
|
+
return false;
|
|
40
|
+
const archivedAt = thread.archivedAt?.getTime() ?? thread.archiveTimestamp ?? 0;
|
|
41
|
+
return archivedAt < cutoff;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
/**
|
|
46
|
+
* Filter that sweeps expired invites
|
|
47
|
+
*/
|
|
48
|
+
expiredInviteSweepFilter() {
|
|
49
|
+
return () => {
|
|
50
|
+
const now = Date.now();
|
|
51
|
+
return (invite) => {
|
|
52
|
+
if (!invite.expiresAt && !invite.expiresTimestamp)
|
|
53
|
+
return false;
|
|
54
|
+
const expiresAt = invite.expiresAt?.getTime() ?? invite.expiresTimestamp ?? Infinity;
|
|
55
|
+
return expiresAt < now;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
},
|
|
59
|
+
/**
|
|
60
|
+
* Filter that sweeps outdated presences
|
|
61
|
+
*/
|
|
62
|
+
outdatedPresenceSweepFilter(lifetime = 21600) {
|
|
63
|
+
return () => {
|
|
64
|
+
const now = Date.now();
|
|
65
|
+
const cutoff = now - (lifetime * 1000);
|
|
66
|
+
return (presence) => {
|
|
67
|
+
const lastUpdate = presence.lastModified ?? presence.updatedAt?.getTime() ?? 0;
|
|
68
|
+
return lastUpdate < cutoff;
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
/**
|
|
73
|
+
* Filter that sweeps all items (use with caution)
|
|
74
|
+
*/
|
|
75
|
+
sweepAll() {
|
|
76
|
+
return () => () => true;
|
|
77
|
+
},
|
|
78
|
+
/**
|
|
79
|
+
* Filter that sweeps nothing
|
|
80
|
+
*/
|
|
81
|
+
sweepNone() {
|
|
82
|
+
return () => () => false;
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Sweeper manager class
|
|
87
|
+
*/
|
|
88
|
+
class SweeperManager {
|
|
89
|
+
client;
|
|
90
|
+
intervals = new Map();
|
|
91
|
+
options;
|
|
92
|
+
constructor(client, options = {}) {
|
|
93
|
+
this.client = client;
|
|
94
|
+
this.options = options;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Start all configured sweepers
|
|
98
|
+
*/
|
|
99
|
+
start() {
|
|
100
|
+
for (const [key, config] of Object.entries(this.options)) {
|
|
101
|
+
if (config && config.interval > 0) {
|
|
102
|
+
this.startSweeper(key, config);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Start a specific sweeper
|
|
108
|
+
*/
|
|
109
|
+
startSweeper(name, config) {
|
|
110
|
+
// Clear existing interval if any
|
|
111
|
+
this.stopSweeper(name);
|
|
112
|
+
const interval = setInterval(() => {
|
|
113
|
+
this.sweep(name, config.filter);
|
|
114
|
+
}, config.interval * 1000);
|
|
115
|
+
this.intervals.set(name, interval);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Stop a specific sweeper
|
|
119
|
+
*/
|
|
120
|
+
stopSweeper(name) {
|
|
121
|
+
const interval = this.intervals.get(name);
|
|
122
|
+
if (interval) {
|
|
123
|
+
clearInterval(interval);
|
|
124
|
+
this.intervals.delete(name);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Stop all sweepers
|
|
129
|
+
*/
|
|
130
|
+
stop() {
|
|
131
|
+
for (const name of this.intervals.keys()) {
|
|
132
|
+
this.stopSweeper(name);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Manually trigger a sweep
|
|
137
|
+
*/
|
|
138
|
+
sweep(name, filter) {
|
|
139
|
+
const cache = this.getCache(name);
|
|
140
|
+
if (!cache)
|
|
141
|
+
return 0;
|
|
142
|
+
const filterFn = filter ?? this.options[name]?.filter;
|
|
143
|
+
if (!filterFn)
|
|
144
|
+
return 0;
|
|
145
|
+
return cache.sweep(filterFn());
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get the cache for a sweeper type
|
|
149
|
+
*/
|
|
150
|
+
getCache(name) {
|
|
151
|
+
switch (name) {
|
|
152
|
+
case 'users':
|
|
153
|
+
return this.client.users?.cache ?? null;
|
|
154
|
+
case 'guildMembers':
|
|
155
|
+
// Sweep across all guilds
|
|
156
|
+
let memberCount = 0;
|
|
157
|
+
this.client.guilds?.cache.forEach((guild) => {
|
|
158
|
+
if (guild.members?.cache) {
|
|
159
|
+
const filter = this.options.guildMembers?.filter;
|
|
160
|
+
if (filter)
|
|
161
|
+
memberCount += guild.members.cache.sweep(filter());
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
return null; // Already handled
|
|
165
|
+
case 'messages':
|
|
166
|
+
// Sweep across all channels
|
|
167
|
+
this.client.channels?.cache.forEach((channel) => {
|
|
168
|
+
if (channel.messages?.cache) {
|
|
169
|
+
const filter = this.options.messages?.filter;
|
|
170
|
+
if (filter)
|
|
171
|
+
channel.messages.cache.sweep(filter());
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
return null;
|
|
175
|
+
case 'threads':
|
|
176
|
+
return this.client.channels?.cache.filter((c) => c.isThread?.()) ?? null;
|
|
177
|
+
case 'presences':
|
|
178
|
+
// Sweep across all guilds
|
|
179
|
+
this.client.guilds?.cache.forEach((guild) => {
|
|
180
|
+
if (guild.presences?.cache) {
|
|
181
|
+
const filter = this.options.presences?.filter;
|
|
182
|
+
if (filter)
|
|
183
|
+
guild.presences.cache.sweep(filter());
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
return null;
|
|
187
|
+
case 'voiceStates':
|
|
188
|
+
this.client.guilds?.cache.forEach((guild) => {
|
|
189
|
+
if (guild.voiceStates?.cache) {
|
|
190
|
+
const filter = this.options.voiceStates?.filter;
|
|
191
|
+
if (filter)
|
|
192
|
+
guild.voiceStates.cache.sweep(filter());
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
return null;
|
|
196
|
+
case 'reactions':
|
|
197
|
+
// Sweep reactions from all messages
|
|
198
|
+
this.client.channels?.cache.forEach((channel) => {
|
|
199
|
+
channel.messages?.cache.forEach((message) => {
|
|
200
|
+
if (message.reactions?.cache) {
|
|
201
|
+
const filter = this.options.reactions?.filter;
|
|
202
|
+
if (filter)
|
|
203
|
+
message.reactions.cache.sweep(filter());
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
return null;
|
|
208
|
+
case 'emojis':
|
|
209
|
+
return this.client.emojis?.cache ?? null;
|
|
210
|
+
case 'stickers':
|
|
211
|
+
return this.client.stickers?.cache ?? null;
|
|
212
|
+
case 'invites':
|
|
213
|
+
// Sweep across all guilds
|
|
214
|
+
this.client.guilds?.cache.forEach((guild) => {
|
|
215
|
+
if (guild.invites?.cache) {
|
|
216
|
+
const filter = this.options.invites?.filter;
|
|
217
|
+
if (filter)
|
|
218
|
+
guild.invites.cache.sweep(filter());
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
return null;
|
|
222
|
+
case 'bans':
|
|
223
|
+
this.client.guilds?.cache.forEach((guild) => {
|
|
224
|
+
if (guild.bans?.cache) {
|
|
225
|
+
const filter = this.options.bans?.filter;
|
|
226
|
+
if (filter)
|
|
227
|
+
guild.bans.cache.sweep(filter());
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
return null;
|
|
231
|
+
default:
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Get sweeper statistics
|
|
237
|
+
*/
|
|
238
|
+
getStats() {
|
|
239
|
+
const stats = {};
|
|
240
|
+
for (const [name, config] of Object.entries(this.options)) {
|
|
241
|
+
if (config) {
|
|
242
|
+
stats[name] = {
|
|
243
|
+
interval: config.interval,
|
|
244
|
+
running: this.intervals.has(name),
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return stats;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
exports.SweeperManager = SweeperManager;
|
|
252
|
+
/**
|
|
253
|
+
* Default sweeper options for common use cases
|
|
254
|
+
*/
|
|
255
|
+
exports.DefaultSweeperOptions = {
|
|
256
|
+
messages: {
|
|
257
|
+
interval: 3600, // 1 hour
|
|
258
|
+
filter: exports.Sweepers.filterByLifetime({ lifetime: 1800 }), // 30 minutes
|
|
259
|
+
},
|
|
260
|
+
threads: {
|
|
261
|
+
interval: 3600,
|
|
262
|
+
filter: exports.Sweepers.archivedThreadSweepFilter(14400), // 4 hours
|
|
263
|
+
},
|
|
264
|
+
invites: {
|
|
265
|
+
interval: 3600,
|
|
266
|
+
filter: exports.Sweepers.expiredInviteSweepFilter(),
|
|
267
|
+
},
|
|
268
|
+
};
|
|
269
|
+
exports.default = SweeperManager;
|
|
270
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3dlZXBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvU3dlZXBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFnREg7O0dBRUc7QUFDVSxRQUFBLFFBQVEsR0FBRztJQUN0Qjs7T0FFRztJQUNILGdCQUFnQixDQUE0RCxVQUl4RSxFQUFFO1FBQ0osTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxrQkFBa0I7UUFDOUQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLHNCQUFzQjtZQUNqRCxDQUFDLENBQUMsQ0FBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxRCxPQUFPLEdBQUcsRUFBRTtZQUNWLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QixNQUFNLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFFdkMsT0FBTyxDQUFDLEtBQVEsRUFBRSxFQUFFO2dCQUNsQixJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUM7b0JBQUUsT0FBTyxLQUFLLENBQUM7Z0JBQ2pDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEMsT0FBTyxTQUFTLEdBQUcsTUFBTSxDQUFDO1lBQzVCLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILHlCQUF5QixDQUFDLFFBQVEsR0FBRyxLQUFLO1FBQ3hDLE9BQU8sR0FBRyxFQUFFO1lBQ1YsTUFBTSxHQUFHLEdB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QWE7S0FDckU7SUFDRCxPQUFPLEVBQUU7UUFDUCxRQUFRLEVBQUUsSUFBSTtRQUNkLE1BQU0sRUFBRSxnQkFBUSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVU7S0FDOUQ7SUFDRCxPQUFPLEVBQUU7UUFDUCxRQUFRLEVBQUUsSUFBSTtRQUNkLE1BQU0sRUFBRSxnQkFBUSxDQUFDLHdCQUF3QixFQUFFO0tBQzVDO0NBQ0YsQ0FBQztBQUVGLGtCQUFlLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBTd2VlcGVycyAtIEF1dG9tYXRpYyBjYWNoZSBjbGVhbnVwIHV0aWxpdGllc1xyXG4gKi9cclxuXHJcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuL0NvbGxlY3Rpb24nO1xyXG5cclxuLyoqXHJcbiAqIFN3ZWVwZXIgb3B0aW9ucyBmb3IgYSBzcGVjaWZpYyBjYWNoZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBTd2VlcGVyT3B0aW9ucyB7XHJcbiAgLyoqIEludGVydmFsIGluIHNlY29uZHMgYmV0d2VlbiBzd2VlcHMgKi9cclxuICBpbnRlcnZhbDogbnVtYmVyO1xyXG4gIC8qKiBGaWx0ZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdG8gc3dlZXAgKi9cclxuICBmaWx0ZXI6ICgpID0+ICh2YWx1ZTogYW55LCBrZXk6IHN0cmluZywgY29sbGVjdGlvbjogQ29sbGVjdGlvbjxzdHJpbmcsIGFueT4pID0+IGJvb2xlYW47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHbG9iYWwgc3dlZXBlciBjb25maWd1cmF0aW9uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFN3ZWVwZXJEZWZpbml0aW9ucyB7XHJcbiAgLyoqIFN3ZWVwIGFwcGxpY2F0aW9uIGNvbW1hbmRzICovXHJcbiAgYXBwbGljYXRpb25Db21tYW5kcz86IFN3ZWVwZXJPcHRpb25zO1xyXG4gIC8qKiBTd2VlcCBiYW5zICovXHJcbiAgYmFucz86IFN3ZWVwZXJPcHRpb25zO1xyXG4gIC8qKiBTd2VlcCBlbW9qaXMgKi9cclxuICBlbW9qaXM/OiBTd2VlcGVyT3B0aW9ucztcclxuICAvKiogU3dlZXAgaW52aXRlcyAqL1xyXG4gIGludml0ZXM/OiBTd2VlcGVyT3B0aW9ucztcclxuICAvKiogU3dlZXAgZ3VpbGQgbWVtYmVycyAqL1xyXG4gIGd1aWxkTWVtYmVycz86IFN3ZWVwZXJPcHRpb25zO1xyXG4gIC8qKiBTd2VlcCBtZXNzYWdlcyAqL1xyXG4gIG1lc3NhZ2VzPzogU3dlZXBlck9wdGlvbnM7XHJcbiAgLyoqIFN3ZWVwIHByZXNlbmNlcyAqL1xyXG4gIHByZXNlbmNlcz86IFN3ZWVwZXJPcHRpb25zO1xyXG4gIC8qKiBTd2VlcCByZWFjdGlvbnMgKi9cclxuICByZWFjdGlvbnM/OiBTd2VlcGVyT3B0aW9ucztcclxuICAvKiogU3dlZXAgc3RhZ2UgaW5zdGFuY2VzICovXHJcbiAgc3RhZ2VJbnN0YW5jZXM/OiBTd2VlcGVyT3B0aW9ucztcclxuICAvKiogU3dlZXAgc3RpY2tlcnMgKi9cclxuICBzdGlja2Vycz86IFN3ZWVwZXJPcHRpb25zO1xyXG4gIC8qKiBTd2VlcCB0aHJlYWQgbWVtYmVycyAqL1xyXG4gIHRocmVhZE1lbWJlcnM/OiBTd2VlcGVyT3B0aW9ucztcclxuICAvKiogU3dlZXAgdGhyZWFkcyAqL1xyXG4gIHRocmVhZHM/OiBTd2VlcGVyT3B0aW9ucztcclxuICAvKiogU3dlZXAgdXNlcnMgKi9cclxuICB1c2Vycz86IFN3ZWVwZXJPcHRpb25zO1xyXG4gIC8qKiBTd2VlcCB2b2ljZSBzdGF0ZXMgKi9cclxuICB2b2ljZVN0YXRlcz86IFN3ZWVwZXJPcHRpb25zO1xyXG59XHJcblxyXG4vKipcclxuICogU3dlZXBlciBmaWx0ZXJzIC0gcHJlZGVmaW5lZCBmaWx0ZXIgZnVuY3Rpb25zXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgU3dlZXBlcnMgPSB7XHJcbiAgLyoqXHJcbiAgICogRmlsdGVyIHRoYXQgc3dlZXBzIGl0ZW1zIG9sZGVyIHRoYW4gYSBjZXJ0YWluIGxpZmV0aW1lXHJcbiAgICovXHJcbiAgZmlsdGVyQnlMaWZldGltZTxUIGV4dGVuZHMgeyBjcmVhdGVkVGltZXN0YW1wPzogbnVtYmVyOyBjcmVhdGVkQXQ/OiBEYXRlIH0+KG9wdGlvbnM6IHtcclxuICAgIGxpZmV0aW1lPzogbnVtYmVyO1xyXG4gICAgZ2V0Q29tcGFyaXNvblRpbWVzdGFtcD86ICh2YWx1ZTogVCkgPT4gbnVtYmVyO1xyXG4gICAgZXhjbHVkZUZyb21Td2VlcD86ICh2YWx1ZTogVCkgPT4gYm9vbGVhbjtcclxuICB9ID0ge30pIHtcclxuICAgIGNvbnN0IGxpZmV0aW1lID0gb3B0aW9ucy5saWZldGltZSA/PyAxNDQwMDsgLy8gNCBob3VycyBkZWZhdWx0XHJcbiAgICBjb25zdCBnZXRUaW1lc3RhbXAgPSBvcHRpb25zLmdldENvbXBhcmlzb25UaW1lc3RhbXAgPz8gXHJcbiAgICAgICgodjogVCkgPT4gdi5jcmVhdGVkVGltZXN0YW1wID8/IHYuY3JlYXRlZEF0Py5nZXRUaW1lKCkgPz8gMCk7XHJcbiAgICBjb25zdCBleGNsdWRlID0gb3B0aW9ucy5leGNsdWRlRnJvbVN3ZWVwID8/ICgoKSA9PiBmYWxzZSk7XHJcbiAgICBcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcbiAgICAgIGNvbnN0IGN1dG9mZiA9IG5vdyAtIChsaWZldGltZSAqIDEwMDApO1xyXG4gICAgICBcclxuICAgICAgcmV0dXJuICh2YWx1ZTogVCkgPT4ge1xyXG4gICAgICAgIGlmIChleGNsdWRlKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IGdldFRpbWVzdGFtcCh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHRpbWVzdGFtcCA8IGN1dG9mZjtcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgfSxcclxuXHJcbiAgLyoqXHJcbiAgICogRmlsdGVyIHRoYXQgc3dlZXBzIGFyY2hpdmVkIHRocmVhZHNcclxuICAgKi9cclxuICBhcmNoaXZlZFRocmVhZFN3ZWVwRmlsdGVyKGxpZmV0aW1lID0gMTQ0MDApIHtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcbiAgICAgIGNvbnN0IGN1dG9mZiA9IG5vdyAtIChsaWZldGltZSAqIDEwMDApO1xyXG4gICAgICBcclxuICAgICAgcmV0dXJuICh0aHJlYWQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghdGhyZWFkLmFyY2hpdmVkKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgYXJjaGl2ZWRBdCA9IHRocmVhZC5hcmNoaXZlZEF0Py5nZXRUaW1lKCkgPz8gdGhyZWFkLmFyY2hpdmVUaW1lc3RhbXAgPz8gMDtcclxuICAgICAgICByZXR1cm4gYXJjaGl2ZWRBdCA8IGN1dG9mZjtcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgfSxcclxuXHJcbiAgLyoqXHJcbiAgICogRmlsdGVyIHRoYXQgc3dlZXBzIGV4cGlyZWQgaW52aXRlc1xyXG4gICAqL1xyXG4gIGV4cGlyZWRJbnZpdGVTd2VlcEZpbHRlcigpIHtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcbiAgICAgIHJldHVybiAoaW52aXRlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIWludml0ZS5leHBpcmVzQXQgJiYgIWludml0ZS5leHBpcmVzVGltZXN0YW1wKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZXhwaXJlc0F0ID0gaW52aXRlLmV4cGlyZXNBdD8uZ2V0VGltZSgpID8/IGludml0ZS5leHBpcmVzVGltZXN0YW1wID8/IEluZmluaXR5O1xyXG4gICAgICAgIHJldHVybiBleHBpcmVzQXQgPCBub3c7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gIH0sXHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbHRlciB0aGF0IHN3ZWVwcyBvdXRkYXRlZCBwcmVzZW5jZXNcclxuICAgKi9cclxuICBvdXRkYXRlZFByZXNlbmNlU3dlZXBGaWx0ZXIobGlmZXRpbWUgPSAyMTYwMCkge1xyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgY29uc3QgY3V0b2ZmID0gbm93IC0gKGxpZmV0aW1lICogMTAwMCk7XHJcbiAgICAgIFxyXG4gICAgICByZXR1cm4gKHByZXNlbmNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBsYXN0VXBkYXRlID0gcHJlc2VuY2UubGFzdE1vZGlmaWVkID8/IHByZXNlbmNlLnVwZGF0ZWRBdD8uZ2V0VGltZSgpID8/IDA7XHJcbiAgICAgICAgcmV0dXJuIGxhc3RVcGRhdGUgPCBjdXRvZmY7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gIH0sXHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbHRlciB0aGF0IHN3ZWVwcyBhbGwgaXRlbXMgKHVzZSB3aXRoIGNhdXRpb24pXHJcbiAgICovXHJcbiAgc3dlZXBBbGwoKSB7XHJcbiAgICByZXR1cm4gKCkgPT4gKCkgPT4gdHJ1ZTtcclxuICB9LFxyXG5cclxuICAvKipcclxuICAgKiBGaWx0ZXIgdGhhdCBzd2VlcHMgbm90aGluZ1xyXG4gICAqL1xyXG4gIHN3ZWVwTm9uZSgpIHtcclxuICAgIHJldHVybiAoKSA9PiAoKSA9PiBmYWxzZTtcclxuICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN3ZWVwZXIgbWFuYWdlciBjbGFzc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFN3ZWVwZXJNYW5hZ2VyIHtcclxuICBwcml2YXRlIGNsaWVudDogYW55O1xyXG4gIHByaXZhdGUgaW50ZXJ2YWxzOiBNYXA8c3RyaW5nLCBOb2RlSlMuVGltZW91dD4gPSBuZXcgTWFwKCk7XHJcbiAgcHJpdmF0ZSBvcHRpb25zOiBTd2VlcGVyRGVmaW5pdGlvbnM7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNsaWVudDogYW55LCBvcHRpb25zOiBTd2VlcGVyRGVmaW5pdGlvbnMgPSB7fSkge1xyXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgYWxsIGNvbmZpZ3VyZWQgc3dlZXBlcnNcclxuICAgKi9cclxuICBzdGFydCgpOiB2b2lkIHtcclxuICAgIGZvciAoY29uc3QgW2tleSwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLm9wdGlvbnMpKSB7XHJcbiAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmludGVydmFsID4gMCkge1xyXG4gICAgICAgIHRoaXMuc3RhcnRTd2VlcGVyKGtleSBhcyBrZXlvZiBTd2VlcGVyRGVmaW5pdGlvbnMsIGNvbmZpZyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IGEgc3BlY2lmaWMgc3dlZXBlclxyXG4gICAqL1xyXG4gIHByaXZhdGUgc3RhcnRTd2VlcGVyKG5hbWU6IGtleW9mIFN3ZWVwZXJEZWZpbml0aW9ucywgY29uZmlnOiBTd2VlcGVyT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgLy8gQ2xlYXIgZXhpc3RpbmcgaW50ZXJ2YWwgaWYgYW55XHJcbiAgICB0aGlzLnN0b3BTd2VlcGVyKG5hbWUpO1xyXG4gICAgXHJcbiAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgdGhpcy5zd2VlcChuYW1lLCBjb25maWcuZmlsdGVyKTtcclxuICAgIH0sIGNvbmZpZy5pbnRlcnZhbCAqIDEwMDApO1xyXG4gICAgXHJcbiAgICB0aGlzLmludGVydmFscy5zZXQobmFtZSwgaW50ZXJ2YWwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBhIHNwZWNpZmljIHN3ZWVwZXJcclxuICAgKi9cclxuICBzdG9wU3dlZXBlcihuYW1lOiBrZXlvZiBTd2VlcGVyRGVmaW5pdGlvbnMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGludGVydmFsID0gdGhpcy5pbnRlcnZhbHMuZ2V0KG5hbWUpO1xyXG4gICAgaWYgKGludGVydmFsKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xyXG4gICAgICB0aGlzLmludGVydmFscy5kZWxldGUobmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGFsbCBzd2VlcGVyc1xyXG4gICAqL1xyXG4gIHN0b3AoKTogdm9pZCB7XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgdGhpcy5pbnRlcnZhbHMua2V5cygpKSB7XHJcbiAgICAgIHRoaXMuc3RvcFN3ZWVwZXIobmFtZSBhcyBrZXlvZiBTd2VlcGVyRGVmaW5pdGlvbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFudWFsbHkgdHJpZ2dlciBhIHN3ZWVwXHJcbiAgICovXHJcbiAgc3dlZXAobmFtZToga2V5b2YgU3dlZXBlckRlZmluaXRpb25zLCBmaWx0ZXI/OiAoKSA9PiAodmFsdWU6IGFueSwga2V5OiBzdHJpbmcsIGNvbGxlY3Rpb246IENvbGxlY3Rpb248c3RyaW5nLCBhbnk+KSA9PiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGNhY2hlID0gdGhpcy5nZXRDYWNoZShuYW1lKTtcclxuICAgIGlmICghY2FjaGUpIHJldHVybiAwO1xyXG4gICAgXHJcbiAgICBjb25zdCBmaWx0ZXJGbiA9IGZpbHRlciA/PyB0aGlzLm9wdGlvbnNbbmFtZV0/LmZpbHRlcjtcclxuICAgIGlmICghZmlsdGVyRm4pIHJldHVybiAwO1xyXG4gICAgXHJcbiAgICByZXR1cm4gY2FjaGUuc3dlZXAoZmlsdGVyRm4oKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGNhY2hlIGZvciBhIHN3ZWVwZXIgdHlwZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0Q2FjaGUobmFtZToga2V5b2YgU3dlZXBlckRlZmluaXRpb25zKTogQ29sbGVjdGlvbjxzdHJpbmcsIGFueT4gfCBudWxsIHtcclxuICAgIHN3aXRjaCAobmFtZSkge1xyXG4gICAgICBjYXNlICd1c2Vycyc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnVzZXJzPy5jYWNoZSA/PyBudWxsO1xyXG4gICAgICBjYXNlICdndWlsZE1lbWJlcnMnOlxyXG4gICAgICAgIC8vIFN3ZWVwIGFjcm9zcyBhbGwgZ3VpbGRzXHJcbiAgICAgICAgbGV0IG1lbWJlckNvdW50ID0gMDtcclxuICAgICAgICB0aGlzLmNsaWVudC5ndWlsZHM/LmNhY2hlLmZvckVhY2goKGd1aWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChndWlsZC5tZW1iZXJzPy5jYWNoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZ3VpbGRNZW1iZXJzPy5maWx0ZXI7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIpIG1lbWJlckNvdW50ICs9IGd1aWxkLm1lbWJlcnMuY2FjaGUuc3dlZXAoZmlsdGVyKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBudWxsOyAvLyBBbHJlYWR5IGhhbmRsZWRcclxuICAgICAgY2FzZSAnbWVzc2FnZXMnOlxyXG4gICAgICAgIC8vIFN3ZWVwIGFjcm9zcyBhbGwgY2hhbm5lbHNcclxuICAgICAgICB0aGlzLmNsaWVudC5jaGFubmVscz8uY2FjaGUuZm9yRWFjaCgoY2hhbm5lbDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hhbm5lbC5tZXNzYWdlcz8uY2FjaGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5vcHRpb25zLm1lc3NhZ2VzPy5maWx0ZXI7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIpIGNoYW5uZWwubWVzc2FnZXMuY2FjaGUuc3dlZXAoZmlsdGVyKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICBjYXNlICd0aHJlYWRzJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuY2hhbm5lbHM/LmNhY2hlLmZpbHRlcigoYzogYW55KSA9PiBjLmlzVGhyZWFkPy4oKSkgPz8gbnVsbDtcclxuICAgICAgY2FzZSAncHJlc2VuY2VzJzpcclxuICAgICAgICAvLyBTd2VlcCBhY3Jvc3MgYWxsIGd1aWxkc1xyXG4gICAgICAgIHRoaXMuY2xpZW50Lmd1aWxkcz8uY2FjaGUuZm9yRWFjaCgoZ3VpbGQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGd1aWxkLnByZXNlbmNlcz8uY2FjaGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5vcHRpb25zLnByZXNlbmNlcz8uZmlsdGVyO1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyKSBndWlsZC5wcmVzZW5jZXMuY2FjaGUuc3dlZXAoZmlsdGVyKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICBjYXNlICd2b2ljZVN0YXRlcyc6XHJcbiAgICAgICAgdGhpcy5jbGllbnQuZ3VpbGRzPy5jYWNoZS5mb3JFYWNoKChndWlsZDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZ3VpbGQudm9pY2VTdGF0ZXM/LmNhY2hlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMub3B0aW9ucy52b2ljZVN0YXRlcz8uZmlsdGVyO1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyKSBndWlsZC52b2ljZVN0YXRlcy5jYWNoZS5zd2VlcChmaWx0ZXIoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIGNhc2UgJ3JlYWN0aW9ucyc6XHJcbiAgICAgICAgLy8gU3dlZXAgcmVhY3Rpb25zIGZyb20gYWxsIG1lc3NhZ2VzXHJcbiAgICAgICAgdGhpcy5jbGllbnQuY2hhbm5lbHM/LmNhY2hlLmZvckVhY2goKGNoYW5uZWw6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY2hhbm5lbC5tZXNzYWdlcz8uY2FjaGUuZm9yRWFjaCgobWVzc2FnZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlYWN0aW9ucz8uY2FjaGUpIHtcclxuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMucmVhY3Rpb25zPy5maWx0ZXI7XHJcbiAgICAgICAgICAgICAgaWYgKGZpbHRlcikgbWVzc2FnZS5yZWFjdGlvbnMuY2FjaGUuc3dlZXAoZmlsdGVyKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgY2FzZSAnZW1vamlzJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZW1vamlzPy5jYWNoZSA/PyBudWxsO1xyXG4gICAgICBjYXNlICdzdGlja2Vycyc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnN0aWNrZXJzPy5jYWNoZSA/PyBudWxsO1xyXG4gICAgICBjYXNlICdpbnZpdGVzJzpcclxuICAgICAgICAvLyBTd2VlcCBhY3Jvc3MgYWxsIGd1aWxkc1xyXG4gICAgICAgIHRoaXMuY2xpZW50Lmd1aWxkcz8uY2FjaGUuZm9yRWFjaCgoZ3VpbGQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGd1aWxkLmludml0ZXM/LmNhY2hlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMub3B0aW9ucy5pbnZpdGVzPy5maWx0ZXI7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIpIGd1aWxkLmludml0ZXMuY2FjaGUuc3dlZXAoZmlsdGVyKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICBjYXNlICdiYW5zJzpcclxuICAgICAgICB0aGlzLmNsaWVudC5ndWlsZHM/LmNhY2hlLmZvckVhY2goKGd1aWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChndWlsZC5iYW5zPy5jYWNoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuYmFucz8uZmlsdGVyO1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyKSBndWlsZC5iYW5zLmNhY2hlLnN3ZWVwKGZpbHRlcigpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBzd2VlcGVyIHN0YXRpc3RpY3NcclxuICAgKi9cclxuICBnZXRTdGF0cygpOiBSZWNvcmQ8c3RyaW5nLCB7IGludGVydmFsOiBudW1iZXI7IHJ1bm5pbmc6IGJvb2xlYW4gfT4ge1xyXG4gICAgY29uc3Qgc3RhdHM6IFJlY29yZDxzdHJpbmcsIHsgaW50ZXJ2YWw6IG51bWJlcjsgcnVubmluZzogYm9vbGVhbiB9PiA9IHt9O1xyXG4gICAgXHJcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMub3B0aW9ucykpIHtcclxuICAgICAgaWYgKGNvbmZpZykge1xyXG4gICAgICAgIHN0YXRzW25hbWVdID0ge1xyXG4gICAgICAgICAgaW50ZXJ2YWw6IGNvbmZpZy5pbnRlcnZhbCxcclxuICAgICAgICAgIHJ1bm5pbmc6IHRoaXMuaW50ZXJ2YWxzLmhhcyhuYW1lKSxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBzdGF0cztcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IHN3ZWVwZXIgb3B0aW9ucyBmb3IgY29tbW9uIHVzZSBjYXNlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IERlZmF1bHRTd2VlcGVyT3B0aW9uczogU3dlZXBlckRlZmluaXRpb25zID0ge1xyXG4gIG1lc3NhZ2VzOiB7XHJcbiAgICBpbnRlcnZhbDogMzYwMCwgLy8gMSBob3VyXHJcbiAgICBmaWx0ZXI6IFN3ZWVwZXJzLmZpbHRlckJ5TGlmZXRpbWUoeyBsaWZldGltZTogMTgwMCB9KSwgLy8gMzAgbWludXRlc1xyXG4gIH0sXHJcbiAgdGhyZWFkczoge1xyXG4gICAgaW50ZXJ2YWw6IDM2MDAsXHJcbiAgICBmaWx0ZXI6IFN3ZWVwZXJzLmFyY2hpdmVkVGhyZWFkU3dlZXBGaWx0ZXIoMTQ0MDApLCAvLyA0IGhvdXJzXHJcbiAgfSxcclxuICBpbnZpdGVzOiB7XHJcbiAgICBpbnRlcnZhbDogMzYwMCxcclxuICAgIGZpbHRlcjogU3dlZXBlcnMuZXhwaXJlZEludml0ZVN3ZWVwRmlsdGVyKCksXHJcbiAgfSxcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFN3ZWVwZXJNYW5hZ2VyO1xyXG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility exports
|
|
3
|
+
*/
|
|
4
|
+
export * from './Collection';
|
|
5
|
+
export * from './Formatters';
|
|
6
|
+
export * from './SnowflakeUtil';
|
|
7
|
+
export * from './BitField';
|
|
8
|
+
export * from './PermissionsBitField';
|
|
9
|
+
export * from './IntentsBitField';
|
|
10
|
+
export * from './DataResolver';
|
|
11
|
+
export * from './Collector';
|
|
12
|
+
export * from './Partials';
|
|
13
|
+
export * from './Sweepers';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Utility exports
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
17
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
__exportStar(require("./Collection"), exports);
|
|
21
|
+
__exportStar(require("./Formatters"), exports);
|
|
22
|
+
__exportStar(require("./SnowflakeUtil"), exports);
|
|
23
|
+
__exportStar(require("./BitField"), exports);
|
|
24
|
+
__exportStar(require("./PermissionsBitField"), exports);
|
|
25
|
+
__exportStar(require("./IntentsBitField"), exports);
|
|
26
|
+
__exportStar(require("./DataResolver"), exports);
|
|
27
|
+
__exportStar(require("./Collector"), exports);
|
|
28
|
+
__exportStar(require("./Partials"), exports);
|
|
29
|
+
__exportStar(require("./Sweepers"), exports);
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsK0NBQTZCO0FBQzdCLCtDQUE2QjtBQUM3QixrREFBZ0M7QUFDaEMsNkNBQTJCO0FBQzNCLHdEQUFzQztBQUN0QyxvREFBa0M7QUFDbEMsaURBQStCO0FBQy9CLDhDQUE0QjtBQUM1Qiw2Q0FBMkI7QUFDM0IsNkNBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFV0aWxpdHkgZXhwb3J0c1xyXG4gKi9cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vRm9ybWF0dGVycyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vU25vd2ZsYWtlVXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQml0RmllbGQnO1xyXG5leHBvcnQgKiBmcm9tICcuL1Blcm1pc3Npb25zQml0RmllbGQnO1xyXG5leHBvcnQgKiBmcm9tICcuL0ludGVudHNCaXRGaWVsZCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vRGF0YVJlc29sdmVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0b3InO1xyXG5leHBvcnQgKiBmcm9tICcuL1BhcnRpYWxzJztcclxuZXhwb3J0ICogZnJvbSAnLi9Td2VlcGVycyc7XHJcbiJdfQ==
|