@chatsift/discord-utils 0.5.1 → 0.6.1
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/README.md +3 -3
- package/dist/__tests__/embed.test.d.ts +2 -0
- package/dist/__tests__/embed.test.d.ts.map +1 -0
- package/dist/__tests__/sortChannels.test.d.ts +2 -0
- package/dist/__tests__/sortChannels.test.d.ts.map +1 -0
- package/dist/embed.d.ts +53 -0
- package/dist/embed.d.ts.map +1 -1
- package/dist/index.js +20 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +17 -6
- package/dist/index.mjs.map +1 -1
- package/dist/sortChannels.d.ts +16 -2
- package/dist/sortChannels.d.ts.map +1 -1
- package/package.json +14 -11
- package/dist/tsconfig.tsbuildinfo +0 -1
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# `@chatsift/discord-utils`
|
|
2
2
|
|
|
3
|
-
[](https://github.com/chatsift/
|
|
3
|
+
[](https://github.com/chatsift/chatsift/blob/main/LICENSE)
|
|
4
4
|
[](https://www.npmjs.com/package/@chatsift/discord-utils)
|
|
5
|
-
[](https://github.com/chatsift/chatsift/actions/workflows/test.yml)
|
|
6
6
|
|
|
7
7
|
Niche utilities for working with Discord's API
|
|
8
8
|
|
|
@@ -14,7 +14,7 @@ Niche utilities for working with Discord's API
|
|
|
14
14
|
|
|
15
15
|
## Contributing
|
|
16
16
|
|
|
17
|
-
Please see the main [README.md](https://github.com/chatsift/
|
|
17
|
+
Please see the main [README.md](https://github.com/chatsift/chatsift) for info on how to contribute to this package or the other `@chatsift` packages.
|
|
18
18
|
|
|
19
19
|
## LICENSE
|
|
20
20
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/embed.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sortChannels.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/sortChannels.test.ts"],"names":[],"mappings":""}
|
package/dist/embed.d.ts
CHANGED
|
@@ -1,20 +1,73 @@
|
|
|
1
1
|
import type { APIEmbed, APIEmbedField } from 'discord-api-types/v10';
|
|
2
|
+
/**
|
|
3
|
+
* Limits commonly encountered with Discord's API
|
|
4
|
+
*/
|
|
2
5
|
export declare const MESSAGE_LIMITS: {
|
|
6
|
+
/**
|
|
7
|
+
* How long a message can be in characters
|
|
8
|
+
*/
|
|
3
9
|
readonly CONTENT: 4000;
|
|
10
|
+
/**
|
|
11
|
+
* How many embeds can be in a message
|
|
12
|
+
*/
|
|
4
13
|
readonly EMBED_COUNT: 10;
|
|
14
|
+
/**
|
|
15
|
+
* Embed specific limits
|
|
16
|
+
*/
|
|
5
17
|
readonly EMBEDS: {
|
|
18
|
+
/**
|
|
19
|
+
* How long an embed title can be in characters
|
|
20
|
+
*/
|
|
6
21
|
readonly TITLE: 256;
|
|
22
|
+
/**
|
|
23
|
+
* How long an embed description can be in characters
|
|
24
|
+
*/
|
|
7
25
|
readonly DESCRIPTION: 4096;
|
|
26
|
+
/**
|
|
27
|
+
* How long an embed footer can be in characters
|
|
28
|
+
*/
|
|
8
29
|
readonly FOOTER: 2048;
|
|
30
|
+
/**
|
|
31
|
+
* How long an embed author can be in characters
|
|
32
|
+
*/
|
|
9
33
|
readonly AUTHOR: 256;
|
|
34
|
+
/**
|
|
35
|
+
* How many fields an embed can have
|
|
36
|
+
*/
|
|
10
37
|
readonly FIELD_COUNT: 25;
|
|
38
|
+
/**
|
|
39
|
+
* Field specific limits
|
|
40
|
+
*/
|
|
11
41
|
readonly FIELDS: {
|
|
42
|
+
/**
|
|
43
|
+
* How long a field name can be in characters
|
|
44
|
+
*/
|
|
12
45
|
readonly NAME: 256;
|
|
46
|
+
/**
|
|
47
|
+
* How long a field value can be in characters
|
|
48
|
+
*/
|
|
13
49
|
readonly VALUE: 1024;
|
|
14
50
|
};
|
|
15
51
|
};
|
|
16
52
|
};
|
|
53
|
+
/**
|
|
54
|
+
* Adds the given fields to an embed - mutating it
|
|
55
|
+
*
|
|
56
|
+
* @param embed - The embed to add fields to
|
|
57
|
+
* @param fields - The fields to add
|
|
58
|
+
*/
|
|
17
59
|
export declare function addFields(embed: APIEmbed, ...fields: APIEmbedField[]): APIEmbed;
|
|
60
|
+
/**
|
|
61
|
+
* Cuts off text after the given length - appending "..." at the end
|
|
62
|
+
*
|
|
63
|
+
* @param text - The text to cut off
|
|
64
|
+
* @param total - The maximum length of the text
|
|
65
|
+
*/
|
|
18
66
|
export declare function ellipsis(text: string, total: number): string;
|
|
67
|
+
/**
|
|
68
|
+
* Returns a fully truncated embed - safe to use with Discord's API - does not mutate the given embed
|
|
69
|
+
*
|
|
70
|
+
* @param embed - The embed to truncate
|
|
71
|
+
*/
|
|
19
72
|
export declare function truncateEmbed(embed: APIEmbed): APIEmbed;
|
|
20
73
|
//# sourceMappingURL=embed.d.ts.map
|
package/dist/embed.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../src/embed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../src/embed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAErE;;GAEG;AACH,eAAO,MAAM,cAAc;IAC1B;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;QAEF;;WAEG;;QAEH;;WAEG;;QAEH;;WAEG;;QAEH;;WAEG;;QAEH;;WAEG;;QAEH;;WAEG;;YAEF;;eAEG;;YAEH;;eAEG;;;;CAII,CAAC;AAEX;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,GAAG,QAAQ,CAG/E;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAW5D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CA2BvD"}
|
package/dist/index.js
CHANGED
|
@@ -19,15 +19,15 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
19
19
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
20
|
|
|
21
21
|
// src/index.ts
|
|
22
|
-
var
|
|
23
|
-
__export(
|
|
22
|
+
var index_exports = {};
|
|
23
|
+
__export(index_exports, {
|
|
24
24
|
MESSAGE_LIMITS: () => MESSAGE_LIMITS,
|
|
25
25
|
addFields: () => addFields,
|
|
26
26
|
ellipsis: () => ellipsis,
|
|
27
27
|
sortChannels: () => sortChannels,
|
|
28
28
|
truncateEmbed: () => truncateEmbed
|
|
29
29
|
});
|
|
30
|
-
module.exports = __toCommonJS(
|
|
30
|
+
module.exports = __toCommonJS(index_exports);
|
|
31
31
|
|
|
32
32
|
// src/embed.ts
|
|
33
33
|
var MESSAGE_LIMITS = {
|
|
@@ -118,28 +118,39 @@ __name(truncateEmbed, "truncateEmbed");
|
|
|
118
118
|
// src/sortChannels.ts
|
|
119
119
|
var import_v10 = require("discord-api-types/v10");
|
|
120
120
|
var GUILD_TEXT_TYPES = [import_v10.ChannelType.GuildText, import_v10.ChannelType.GuildNews, import_v10.ChannelType.GuildForum];
|
|
121
|
+
var THREAD_TYPES = [import_v10.ChannelType.PublicThread, import_v10.ChannelType.PrivateThread, import_v10.ChannelType.AnnouncementThread];
|
|
121
122
|
function sortChannels(unsorted) {
|
|
122
123
|
const filtered = unsorted.filter(
|
|
123
|
-
(channel) => GUILD_TEXT_TYPES.includes(channel.type) || channel.type === import_v10.ChannelType.GuildCategory
|
|
124
|
+
(channel) => GUILD_TEXT_TYPES.includes(channel.type) || channel.type === import_v10.ChannelType.GuildCategory || THREAD_TYPES.includes(channel.type)
|
|
124
125
|
);
|
|
125
|
-
const
|
|
126
|
-
const
|
|
126
|
+
const threads = filtered.filter((channel) => THREAD_TYPES.includes(channel.type));
|
|
127
|
+
const nonThreads = filtered.filter((channel) => !THREAD_TYPES.includes(channel.type));
|
|
128
|
+
const grouped = Object.groupBy(nonThreads, (channel) => channel.parent_id ?? "top");
|
|
129
|
+
const sortedTopLevel = grouped["top"]?.filter((channel) => !channel.parent_id).sort((a, b) => {
|
|
127
130
|
if (a.type === import_v10.ChannelType.GuildText && b.type === import_v10.ChannelType.GuildCategory) {
|
|
128
131
|
return -1;
|
|
129
132
|
}
|
|
130
133
|
if (a.type === import_v10.ChannelType.GuildCategory && b.type === import_v10.ChannelType.GuildText) {
|
|
131
134
|
return 1;
|
|
132
135
|
}
|
|
133
|
-
return a.position - b.position;
|
|
136
|
+
return (a.position ?? 0) - (b.position ?? 0);
|
|
134
137
|
});
|
|
135
138
|
const channels = [];
|
|
136
139
|
for (const top of sortedTopLevel ?? []) {
|
|
137
140
|
channels.push(top);
|
|
138
141
|
if (top.type === import_v10.ChannelType.GuildCategory) {
|
|
139
|
-
|
|
142
|
+
const categoryChannels = (grouped[top.id] ?? []).sort((a, b) => (a.position ?? 0) - (b.position ?? 0));
|
|
143
|
+
channels.push(...categoryChannels);
|
|
144
|
+
for (const channel of categoryChannels) {
|
|
145
|
+
const channelThreads = threads.filter((thread) => thread.parent_id === channel.id).sort((a, b) => Number(BigInt(b.id) - BigInt(a.id)));
|
|
146
|
+
channels.push(...channelThreads);
|
|
147
|
+
}
|
|
148
|
+
} else {
|
|
149
|
+
const channelThreads = threads.filter((thread) => thread.parent_id === top.id).sort((a, b) => Number(BigInt(b.id) - BigInt(a.id)));
|
|
150
|
+
channels.push(...channelThreads);
|
|
140
151
|
}
|
|
141
152
|
}
|
|
142
|
-
return channels.length ? channels : filtered.sort((a, b) => a.position - b.position);
|
|
153
|
+
return channels.length ? channels : filtered.sort((a, b) => (a.position ?? 0) - (b.position ?? 0));
|
|
143
154
|
}
|
|
144
155
|
__name(sortChannels, "sortChannels");
|
|
145
156
|
// Annotate the CommonJS export names for ESM import in node:
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/embed.ts","../src/sortChannels.ts"],"sourcesContent":["export * from './embed.js';\nexport * from './sortChannels.js';\n","import type { APIEmbed, APIEmbedField } from 'discord-api-types/v10';\n\n/**\n * Limits commonly encountered with Discord's API\n */\nexport const MESSAGE_LIMITS = {\n\t/**\n\t * How long a message can be in characters\n\t */\n\tCONTENT: 4_000,\n\t/**\n\t * How many embeds can be in a message\n\t */\n\tEMBED_COUNT: 10,\n\t/**\n\t * Embed specific limits\n\t */\n\tEMBEDS: {\n\t\t/**\n\t\t * How long an embed title can be in characters\n\t\t */\n\t\tTITLE: 256,\n\t\t/**\n\t\t * How long an embed description can be in characters\n\t\t */\n\t\tDESCRIPTION: 4_096,\n\t\t/**\n\t\t * How long an embed footer can be in characters\n\t\t */\n\t\tFOOTER: 2_048,\n\t\t/**\n\t\t * How long an embed author can be in characters\n\t\t */\n\t\tAUTHOR: 256,\n\t\t/**\n\t\t * How many fields an embed can have\n\t\t */\n\t\tFIELD_COUNT: 25,\n\t\t/**\n\t\t * Field specific limits\n\t\t */\n\t\tFIELDS: {\n\t\t\t/**\n\t\t\t * How long a field name can be in characters\n\t\t\t */\n\t\t\tNAME: 256,\n\t\t\t/**\n\t\t\t * How long a field value can be in characters\n\t\t\t */\n\t\t\tVALUE: 1_024,\n\t\t},\n\t},\n} as const;\n\n/**\n * Adds the given fields to an embed - mutating it\n *\n * @param embed - The embed to add fields to\n * @param fields - The fields to add\n */\nexport function addFields(embed: APIEmbed, ...fields: APIEmbedField[]): APIEmbed {\n\t(embed.fields ??= []).push(...fields);\n\treturn embed;\n}\n\n/**\n * Cuts off text after the given length - appending \"...\" at the end\n *\n * @param text - The text to cut off\n * @param total - The maximum length of the text\n */\nexport function ellipsis(text: string, total: number): string {\n\tif (text.length <= total) {\n\t\treturn text;\n\t}\n\n\tconst keep = total - 3;\n\tif (keep < 1) {\n\t\treturn text.slice(0, total);\n\t}\n\n\treturn `${text.slice(0, keep)}...`;\n}\n\n/**\n * Returns a fully truncated embed - safe to use with Discord's API - does not mutate the given embed\n *\n * @param embed - The embed to truncate\n */\nexport function truncateEmbed(embed: APIEmbed): APIEmbed {\n\treturn {\n\t\t...embed,\n\t\tdescription: embed.description ? ellipsis(embed.description, MESSAGE_LIMITS.EMBEDS.DESCRIPTION) : undefined,\n\t\ttitle: embed.title ? ellipsis(embed.title, MESSAGE_LIMITS.EMBEDS.TITLE) : undefined,\n\t\tauthor: embed.author\n\t\t\t? {\n\t\t\t\t\t...embed.author,\n\t\t\t\t\tname: ellipsis(embed.author.name, MESSAGE_LIMITS.EMBEDS.AUTHOR),\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tfooter: embed.footer\n\t\t\t? {\n\t\t\t\t\t...embed.footer,\n\t\t\t\t\ttext: ellipsis(embed.footer.text, MESSAGE_LIMITS.EMBEDS.FOOTER),\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tfields: embed.fields\n\t\t\t? embed.fields\n\t\t\t\t\t.map((field) => ({\n\t\t\t\t\t\tname: ellipsis(field.name, MESSAGE_LIMITS.EMBEDS.FIELDS.NAME),\n\t\t\t\t\t\tvalue: ellipsis(field.value, MESSAGE_LIMITS.EMBEDS.FIELDS.VALUE),\n\t\t\t\t\t}))\n\t\t\t\t\t.slice(0, MESSAGE_LIMITS.EMBEDS.FIELD_COUNT)\n\t\t\t: [],\n\t};\n}\n","import
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/embed.ts","../src/sortChannels.ts"],"sourcesContent":["export * from './embed.js';\nexport * from './sortChannels.js';\n","import type { APIEmbed, APIEmbedField } from 'discord-api-types/v10';\n\n/**\n * Limits commonly encountered with Discord's API\n */\nexport const MESSAGE_LIMITS = {\n\t/**\n\t * How long a message can be in characters\n\t */\n\tCONTENT: 4_000,\n\t/**\n\t * How many embeds can be in a message\n\t */\n\tEMBED_COUNT: 10,\n\t/**\n\t * Embed specific limits\n\t */\n\tEMBEDS: {\n\t\t/**\n\t\t * How long an embed title can be in characters\n\t\t */\n\t\tTITLE: 256,\n\t\t/**\n\t\t * How long an embed description can be in characters\n\t\t */\n\t\tDESCRIPTION: 4_096,\n\t\t/**\n\t\t * How long an embed footer can be in characters\n\t\t */\n\t\tFOOTER: 2_048,\n\t\t/**\n\t\t * How long an embed author can be in characters\n\t\t */\n\t\tAUTHOR: 256,\n\t\t/**\n\t\t * How many fields an embed can have\n\t\t */\n\t\tFIELD_COUNT: 25,\n\t\t/**\n\t\t * Field specific limits\n\t\t */\n\t\tFIELDS: {\n\t\t\t/**\n\t\t\t * How long a field name can be in characters\n\t\t\t */\n\t\t\tNAME: 256,\n\t\t\t/**\n\t\t\t * How long a field value can be in characters\n\t\t\t */\n\t\t\tVALUE: 1_024,\n\t\t},\n\t},\n} as const;\n\n/**\n * Adds the given fields to an embed - mutating it\n *\n * @param embed - The embed to add fields to\n * @param fields - The fields to add\n */\nexport function addFields(embed: APIEmbed, ...fields: APIEmbedField[]): APIEmbed {\n\t(embed.fields ??= []).push(...fields);\n\treturn embed;\n}\n\n/**\n * Cuts off text after the given length - appending \"...\" at the end\n *\n * @param text - The text to cut off\n * @param total - The maximum length of the text\n */\nexport function ellipsis(text: string, total: number): string {\n\tif (text.length <= total) {\n\t\treturn text;\n\t}\n\n\tconst keep = total - 3;\n\tif (keep < 1) {\n\t\treturn text.slice(0, total);\n\t}\n\n\treturn `${text.slice(0, keep)}...`;\n}\n\n/**\n * Returns a fully truncated embed - safe to use with Discord's API - does not mutate the given embed\n *\n * @param embed - The embed to truncate\n */\nexport function truncateEmbed(embed: APIEmbed): APIEmbed {\n\t// @ts-expect-error - Because of the explicit undefined\n\treturn {\n\t\t...embed,\n\t\tdescription: embed.description ? ellipsis(embed.description, MESSAGE_LIMITS.EMBEDS.DESCRIPTION) : undefined,\n\t\ttitle: embed.title ? ellipsis(embed.title, MESSAGE_LIMITS.EMBEDS.TITLE) : undefined,\n\t\tauthor: embed.author\n\t\t\t? {\n\t\t\t\t\t...embed.author,\n\t\t\t\t\tname: ellipsis(embed.author.name, MESSAGE_LIMITS.EMBEDS.AUTHOR),\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tfooter: embed.footer\n\t\t\t? {\n\t\t\t\t\t...embed.footer,\n\t\t\t\t\ttext: ellipsis(embed.footer.text, MESSAGE_LIMITS.EMBEDS.FOOTER),\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tfields: embed.fields\n\t\t\t? embed.fields\n\t\t\t\t\t.map((field) => ({\n\t\t\t\t\t\tname: ellipsis(field.name, MESSAGE_LIMITS.EMBEDS.FIELDS.NAME),\n\t\t\t\t\t\tvalue: ellipsis(field.value, MESSAGE_LIMITS.EMBEDS.FIELDS.VALUE),\n\t\t\t\t\t}))\n\t\t\t\t\t.slice(0, MESSAGE_LIMITS.EMBEDS.FIELD_COUNT)\n\t\t\t: [],\n\t};\n}\n","import { ChannelType } from 'discord-api-types/v10';\n\nconst GUILD_TEXT_TYPES = [ChannelType.GuildText, ChannelType.GuildNews, ChannelType.GuildForum];\nconst THREAD_TYPES = [ChannelType.PublicThread, ChannelType.PrivateThread, ChannelType.AnnouncementThread];\n\n/**\n * The minimal channel shape `sortChannels` actually reads from -- callers aren't required to hand it a full\n * over-the-wire `APIChannel`, just anything with these fields (e.g. a dashboard's slimmer cached projection).\n */\nexport interface SortableChannelLike {\n\tid: string;\n\tparent_id?: string | null;\n\tposition?: number;\n\ttype: ChannelType;\n}\n\n/**\n * Sorts an array of text, category channels, and threads. Generic over `TChannel` so the input shape is\n * preserved on the way out instead of being widened/narrowed to a specific Discord API union.\n */\nexport function sortChannels<TChannel extends SortableChannelLike>(unsorted: TChannel[]): TChannel[] {\n\tconst filtered = unsorted.filter(\n\t\t(channel) =>\n\t\t\tGUILD_TEXT_TYPES.includes(channel.type) ||\n\t\t\tchannel.type === ChannelType.GuildCategory ||\n\t\t\tTHREAD_TYPES.includes(channel.type),\n\t);\n\n\t// Separate threads from other channels\n\tconst threads = filtered.filter((channel) => THREAD_TYPES.includes(channel.type));\n\tconst nonThreads = filtered.filter((channel) => !THREAD_TYPES.includes(channel.type));\n\n\t// Group the non-thread channels by their category - or \"top\" if they aren't in one\n\tconst grouped = Object.groupBy(nonThreads, (channel) => channel.parent_id ?? 'top');\n\n\t// Sort the top level channels - text channels are above category channels, otherwise use their position\n\tconst sortedTopLevel = grouped['top']\n\t\t?.filter((channel) => !channel.parent_id)\n\t\t.sort((a, b) => {\n\t\t\tif (a.type === ChannelType.GuildText && b.type === ChannelType.GuildCategory) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\tif (a.type === ChannelType.GuildCategory && b.type === ChannelType.GuildText) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn (a.position ?? 0) - (b.position ?? 0);\n\t\t});\n\n\tconst channels: TChannel[] = [];\n\tfor (const top of sortedTopLevel ?? []) {\n\t\tchannels.push(top);\n\n\t\tif (top.type === ChannelType.GuildCategory) {\n\t\t\t// Add channels in this category\n\t\t\tconst categoryChannels = (grouped[top.id] ?? []).sort((a, b) => (a.position ?? 0) - (b.position ?? 0));\n\t\t\tchannels.push(...categoryChannels);\n\n\t\t\t// Add threads for each channel in the category\n\t\t\tfor (const channel of categoryChannels) {\n\t\t\t\tconst channelThreads = threads\n\t\t\t\t\t.filter((thread) => thread.parent_id === channel.id)\n\t\t\t\t\t.sort((a, b) => Number(BigInt(b.id) - BigInt(a.id)));\n\t\t\t\tchannels.push(...channelThreads);\n\t\t\t}\n\t\t} else {\n\t\t\t// Add threads for top-level channels\n\t\t\tconst channelThreads = threads\n\t\t\t\t.filter((thread) => thread.parent_id === top.id)\n\t\t\t\t.sort((a, b) => Number(BigInt(b.id) - BigInt(a.id)));\n\t\t\tchannels.push(...channelThreads);\n\t\t}\n\t}\n\n\treturn channels.length ? channels : filtered.sort((a, b) => (a.position ?? 0) - (b.position ?? 0));\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.mjs
CHANGED
|
@@ -90,28 +90,39 @@ __name(truncateEmbed, "truncateEmbed");
|
|
|
90
90
|
// src/sortChannels.ts
|
|
91
91
|
import { ChannelType } from "discord-api-types/v10";
|
|
92
92
|
var GUILD_TEXT_TYPES = [ChannelType.GuildText, ChannelType.GuildNews, ChannelType.GuildForum];
|
|
93
|
+
var THREAD_TYPES = [ChannelType.PublicThread, ChannelType.PrivateThread, ChannelType.AnnouncementThread];
|
|
93
94
|
function sortChannels(unsorted) {
|
|
94
95
|
const filtered = unsorted.filter(
|
|
95
|
-
(channel) => GUILD_TEXT_TYPES.includes(channel.type) || channel.type === ChannelType.GuildCategory
|
|
96
|
+
(channel) => GUILD_TEXT_TYPES.includes(channel.type) || channel.type === ChannelType.GuildCategory || THREAD_TYPES.includes(channel.type)
|
|
96
97
|
);
|
|
97
|
-
const
|
|
98
|
-
const
|
|
98
|
+
const threads = filtered.filter((channel) => THREAD_TYPES.includes(channel.type));
|
|
99
|
+
const nonThreads = filtered.filter((channel) => !THREAD_TYPES.includes(channel.type));
|
|
100
|
+
const grouped = Object.groupBy(nonThreads, (channel) => channel.parent_id ?? "top");
|
|
101
|
+
const sortedTopLevel = grouped["top"]?.filter((channel) => !channel.parent_id).sort((a, b) => {
|
|
99
102
|
if (a.type === ChannelType.GuildText && b.type === ChannelType.GuildCategory) {
|
|
100
103
|
return -1;
|
|
101
104
|
}
|
|
102
105
|
if (a.type === ChannelType.GuildCategory && b.type === ChannelType.GuildText) {
|
|
103
106
|
return 1;
|
|
104
107
|
}
|
|
105
|
-
return a.position - b.position;
|
|
108
|
+
return (a.position ?? 0) - (b.position ?? 0);
|
|
106
109
|
});
|
|
107
110
|
const channels = [];
|
|
108
111
|
for (const top of sortedTopLevel ?? []) {
|
|
109
112
|
channels.push(top);
|
|
110
113
|
if (top.type === ChannelType.GuildCategory) {
|
|
111
|
-
|
|
114
|
+
const categoryChannels = (grouped[top.id] ?? []).sort((a, b) => (a.position ?? 0) - (b.position ?? 0));
|
|
115
|
+
channels.push(...categoryChannels);
|
|
116
|
+
for (const channel of categoryChannels) {
|
|
117
|
+
const channelThreads = threads.filter((thread) => thread.parent_id === channel.id).sort((a, b) => Number(BigInt(b.id) - BigInt(a.id)));
|
|
118
|
+
channels.push(...channelThreads);
|
|
119
|
+
}
|
|
120
|
+
} else {
|
|
121
|
+
const channelThreads = threads.filter((thread) => thread.parent_id === top.id).sort((a, b) => Number(BigInt(b.id) - BigInt(a.id)));
|
|
122
|
+
channels.push(...channelThreads);
|
|
112
123
|
}
|
|
113
124
|
}
|
|
114
|
-
return channels.length ? channels : filtered.sort((a, b) => a.position - b.position);
|
|
125
|
+
return channels.length ? channels : filtered.sort((a, b) => (a.position ?? 0) - (b.position ?? 0));
|
|
115
126
|
}
|
|
116
127
|
__name(sortChannels, "sortChannels");
|
|
117
128
|
export {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/embed.ts","../src/sortChannels.ts"],"sourcesContent":["import type { APIEmbed, APIEmbedField } from 'discord-api-types/v10';\n\n/**\n * Limits commonly encountered with Discord's API\n */\nexport const MESSAGE_LIMITS = {\n\t/**\n\t * How long a message can be in characters\n\t */\n\tCONTENT: 4_000,\n\t/**\n\t * How many embeds can be in a message\n\t */\n\tEMBED_COUNT: 10,\n\t/**\n\t * Embed specific limits\n\t */\n\tEMBEDS: {\n\t\t/**\n\t\t * How long an embed title can be in characters\n\t\t */\n\t\tTITLE: 256,\n\t\t/**\n\t\t * How long an embed description can be in characters\n\t\t */\n\t\tDESCRIPTION: 4_096,\n\t\t/**\n\t\t * How long an embed footer can be in characters\n\t\t */\n\t\tFOOTER: 2_048,\n\t\t/**\n\t\t * How long an embed author can be in characters\n\t\t */\n\t\tAUTHOR: 256,\n\t\t/**\n\t\t * How many fields an embed can have\n\t\t */\n\t\tFIELD_COUNT: 25,\n\t\t/**\n\t\t * Field specific limits\n\t\t */\n\t\tFIELDS: {\n\t\t\t/**\n\t\t\t * How long a field name can be in characters\n\t\t\t */\n\t\t\tNAME: 256,\n\t\t\t/**\n\t\t\t * How long a field value can be in characters\n\t\t\t */\n\t\t\tVALUE: 1_024,\n\t\t},\n\t},\n} as const;\n\n/**\n * Adds the given fields to an embed - mutating it\n *\n * @param embed - The embed to add fields to\n * @param fields - The fields to add\n */\nexport function addFields(embed: APIEmbed, ...fields: APIEmbedField[]): APIEmbed {\n\t(embed.fields ??= []).push(...fields);\n\treturn embed;\n}\n\n/**\n * Cuts off text after the given length - appending \"...\" at the end\n *\n * @param text - The text to cut off\n * @param total - The maximum length of the text\n */\nexport function ellipsis(text: string, total: number): string {\n\tif (text.length <= total) {\n\t\treturn text;\n\t}\n\n\tconst keep = total - 3;\n\tif (keep < 1) {\n\t\treturn text.slice(0, total);\n\t}\n\n\treturn `${text.slice(0, keep)}...`;\n}\n\n/**\n * Returns a fully truncated embed - safe to use with Discord's API - does not mutate the given embed\n *\n * @param embed - The embed to truncate\n */\nexport function truncateEmbed(embed: APIEmbed): APIEmbed {\n\treturn {\n\t\t...embed,\n\t\tdescription: embed.description ? ellipsis(embed.description, MESSAGE_LIMITS.EMBEDS.DESCRIPTION) : undefined,\n\t\ttitle: embed.title ? ellipsis(embed.title, MESSAGE_LIMITS.EMBEDS.TITLE) : undefined,\n\t\tauthor: embed.author\n\t\t\t? {\n\t\t\t\t\t...embed.author,\n\t\t\t\t\tname: ellipsis(embed.author.name, MESSAGE_LIMITS.EMBEDS.AUTHOR),\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tfooter: embed.footer\n\t\t\t? {\n\t\t\t\t\t...embed.footer,\n\t\t\t\t\ttext: ellipsis(embed.footer.text, MESSAGE_LIMITS.EMBEDS.FOOTER),\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tfields: embed.fields\n\t\t\t? embed.fields\n\t\t\t\t\t.map((field) => ({\n\t\t\t\t\t\tname: ellipsis(field.name, MESSAGE_LIMITS.EMBEDS.FIELDS.NAME),\n\t\t\t\t\t\tvalue: ellipsis(field.value, MESSAGE_LIMITS.EMBEDS.FIELDS.VALUE),\n\t\t\t\t\t}))\n\t\t\t\t\t.slice(0, MESSAGE_LIMITS.EMBEDS.FIELD_COUNT)\n\t\t\t: [],\n\t};\n}\n","import
|
|
1
|
+
{"version":3,"sources":["../src/embed.ts","../src/sortChannels.ts"],"sourcesContent":["import type { APIEmbed, APIEmbedField } from 'discord-api-types/v10';\n\n/**\n * Limits commonly encountered with Discord's API\n */\nexport const MESSAGE_LIMITS = {\n\t/**\n\t * How long a message can be in characters\n\t */\n\tCONTENT: 4_000,\n\t/**\n\t * How many embeds can be in a message\n\t */\n\tEMBED_COUNT: 10,\n\t/**\n\t * Embed specific limits\n\t */\n\tEMBEDS: {\n\t\t/**\n\t\t * How long an embed title can be in characters\n\t\t */\n\t\tTITLE: 256,\n\t\t/**\n\t\t * How long an embed description can be in characters\n\t\t */\n\t\tDESCRIPTION: 4_096,\n\t\t/**\n\t\t * How long an embed footer can be in characters\n\t\t */\n\t\tFOOTER: 2_048,\n\t\t/**\n\t\t * How long an embed author can be in characters\n\t\t */\n\t\tAUTHOR: 256,\n\t\t/**\n\t\t * How many fields an embed can have\n\t\t */\n\t\tFIELD_COUNT: 25,\n\t\t/**\n\t\t * Field specific limits\n\t\t */\n\t\tFIELDS: {\n\t\t\t/**\n\t\t\t * How long a field name can be in characters\n\t\t\t */\n\t\t\tNAME: 256,\n\t\t\t/**\n\t\t\t * How long a field value can be in characters\n\t\t\t */\n\t\t\tVALUE: 1_024,\n\t\t},\n\t},\n} as const;\n\n/**\n * Adds the given fields to an embed - mutating it\n *\n * @param embed - The embed to add fields to\n * @param fields - The fields to add\n */\nexport function addFields(embed: APIEmbed, ...fields: APIEmbedField[]): APIEmbed {\n\t(embed.fields ??= []).push(...fields);\n\treturn embed;\n}\n\n/**\n * Cuts off text after the given length - appending \"...\" at the end\n *\n * @param text - The text to cut off\n * @param total - The maximum length of the text\n */\nexport function ellipsis(text: string, total: number): string {\n\tif (text.length <= total) {\n\t\treturn text;\n\t}\n\n\tconst keep = total - 3;\n\tif (keep < 1) {\n\t\treturn text.slice(0, total);\n\t}\n\n\treturn `${text.slice(0, keep)}...`;\n}\n\n/**\n * Returns a fully truncated embed - safe to use with Discord's API - does not mutate the given embed\n *\n * @param embed - The embed to truncate\n */\nexport function truncateEmbed(embed: APIEmbed): APIEmbed {\n\t// @ts-expect-error - Because of the explicit undefined\n\treturn {\n\t\t...embed,\n\t\tdescription: embed.description ? ellipsis(embed.description, MESSAGE_LIMITS.EMBEDS.DESCRIPTION) : undefined,\n\t\ttitle: embed.title ? ellipsis(embed.title, MESSAGE_LIMITS.EMBEDS.TITLE) : undefined,\n\t\tauthor: embed.author\n\t\t\t? {\n\t\t\t\t\t...embed.author,\n\t\t\t\t\tname: ellipsis(embed.author.name, MESSAGE_LIMITS.EMBEDS.AUTHOR),\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tfooter: embed.footer\n\t\t\t? {\n\t\t\t\t\t...embed.footer,\n\t\t\t\t\ttext: ellipsis(embed.footer.text, MESSAGE_LIMITS.EMBEDS.FOOTER),\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tfields: embed.fields\n\t\t\t? embed.fields\n\t\t\t\t\t.map((field) => ({\n\t\t\t\t\t\tname: ellipsis(field.name, MESSAGE_LIMITS.EMBEDS.FIELDS.NAME),\n\t\t\t\t\t\tvalue: ellipsis(field.value, MESSAGE_LIMITS.EMBEDS.FIELDS.VALUE),\n\t\t\t\t\t}))\n\t\t\t\t\t.slice(0, MESSAGE_LIMITS.EMBEDS.FIELD_COUNT)\n\t\t\t: [],\n\t};\n}\n","import { ChannelType } from 'discord-api-types/v10';\n\nconst GUILD_TEXT_TYPES = [ChannelType.GuildText, ChannelType.GuildNews, ChannelType.GuildForum];\nconst THREAD_TYPES = [ChannelType.PublicThread, ChannelType.PrivateThread, ChannelType.AnnouncementThread];\n\n/**\n * The minimal channel shape `sortChannels` actually reads from -- callers aren't required to hand it a full\n * over-the-wire `APIChannel`, just anything with these fields (e.g. a dashboard's slimmer cached projection).\n */\nexport interface SortableChannelLike {\n\tid: string;\n\tparent_id?: string | null;\n\tposition?: number;\n\ttype: ChannelType;\n}\n\n/**\n * Sorts an array of text, category channels, and threads. Generic over `TChannel` so the input shape is\n * preserved on the way out instead of being widened/narrowed to a specific Discord API union.\n */\nexport function sortChannels<TChannel extends SortableChannelLike>(unsorted: TChannel[]): TChannel[] {\n\tconst filtered = unsorted.filter(\n\t\t(channel) =>\n\t\t\tGUILD_TEXT_TYPES.includes(channel.type) ||\n\t\t\tchannel.type === ChannelType.GuildCategory ||\n\t\t\tTHREAD_TYPES.includes(channel.type),\n\t);\n\n\t// Separate threads from other channels\n\tconst threads = filtered.filter((channel) => THREAD_TYPES.includes(channel.type));\n\tconst nonThreads = filtered.filter((channel) => !THREAD_TYPES.includes(channel.type));\n\n\t// Group the non-thread channels by their category - or \"top\" if they aren't in one\n\tconst grouped = Object.groupBy(nonThreads, (channel) => channel.parent_id ?? 'top');\n\n\t// Sort the top level channels - text channels are above category channels, otherwise use their position\n\tconst sortedTopLevel = grouped['top']\n\t\t?.filter((channel) => !channel.parent_id)\n\t\t.sort((a, b) => {\n\t\t\tif (a.type === ChannelType.GuildText && b.type === ChannelType.GuildCategory) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\tif (a.type === ChannelType.GuildCategory && b.type === ChannelType.GuildText) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn (a.position ?? 0) - (b.position ?? 0);\n\t\t});\n\n\tconst channels: TChannel[] = [];\n\tfor (const top of sortedTopLevel ?? []) {\n\t\tchannels.push(top);\n\n\t\tif (top.type === ChannelType.GuildCategory) {\n\t\t\t// Add channels in this category\n\t\t\tconst categoryChannels = (grouped[top.id] ?? []).sort((a, b) => (a.position ?? 0) - (b.position ?? 0));\n\t\t\tchannels.push(...categoryChannels);\n\n\t\t\t// Add threads for each channel in the category\n\t\t\tfor (const channel of categoryChannels) {\n\t\t\t\tconst channelThreads = threads\n\t\t\t\t\t.filter((thread) => thread.parent_id === channel.id)\n\t\t\t\t\t.sort((a, b) => Number(BigInt(b.id) - BigInt(a.id)));\n\t\t\t\tchannels.push(...channelThreads);\n\t\t\t}\n\t\t} else {\n\t\t\t// Add threads for top-level channels\n\t\t\tconst channelThreads = threads\n\t\t\t\t.filter((thread) => thread.parent_id === top.id)\n\t\t\t\t.sort((a, b) => Number(BigInt(b.id) - BigInt(a.id)));\n\t\t\tchannels.push(...channelThreads);\n\t\t}\n\t}\n\n\treturn channels.length ? channels : filtered.sort((a, b) => (a.position ?? 0) - (b.position ?? 0));\n}\n"],"mappings":"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","names":[]}
|
package/dist/sortChannels.d.ts
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { ChannelType } from 'discord-api-types/v10';
|
|
2
|
+
/**
|
|
3
|
+
* The minimal channel shape `sortChannels` actually reads from -- callers aren't required to hand it a full
|
|
4
|
+
* over-the-wire `APIChannel`, just anything with these fields (e.g. a dashboard's slimmer cached projection).
|
|
5
|
+
*/
|
|
6
|
+
export interface SortableChannelLike {
|
|
7
|
+
id: string;
|
|
8
|
+
parent_id?: string | null;
|
|
9
|
+
position?: number;
|
|
10
|
+
type: ChannelType;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Sorts an array of text, category channels, and threads. Generic over `TChannel` so the input shape is
|
|
14
|
+
* preserved on the way out instead of being widened/narrowed to a specific Discord API union.
|
|
15
|
+
*/
|
|
16
|
+
export declare function sortChannels<TChannel extends SortableChannelLike>(unsorted: TChannel[]): TChannel[];
|
|
3
17
|
//# sourceMappingURL=sortChannels.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortChannels.d.ts","sourceRoot":"","sources":["../src/sortChannels.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"sortChannels.d.ts","sourceRoot":"","sources":["../src/sortChannels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKpD;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,SAAS,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAwDnG"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chatsift/discord-utils",
|
|
3
3
|
"description": "Niche utilities for working with Discord's raw API",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.6.1",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"exports": {
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
8
9
|
"import": "./dist/index.mjs",
|
|
9
|
-
"require": "./dist/index.js"
|
|
10
|
-
"types": "./dist/index.d.ts"
|
|
10
|
+
"require": "./dist/index.js"
|
|
11
11
|
},
|
|
12
12
|
"directories": {
|
|
13
13
|
"lib": "src"
|
|
@@ -18,25 +18,28 @@
|
|
|
18
18
|
"scripts": {
|
|
19
19
|
"build": "tsup && tsc",
|
|
20
20
|
"test": "vitest run",
|
|
21
|
+
"test:watch": "vitest",
|
|
21
22
|
"lint": "eslint src",
|
|
22
|
-
"
|
|
23
|
+
"lint:fix": "eslint src --fix",
|
|
24
|
+
"clean": "rimraf dist"
|
|
23
25
|
},
|
|
24
26
|
"repository": {
|
|
25
27
|
"type": "git",
|
|
26
|
-
"url": "https://github.com/chatsift/chatsift.git"
|
|
28
|
+
"url": "https://github.com/chatsift/chatsift.git",
|
|
29
|
+
"directory": "packages/npm/discord-utils"
|
|
27
30
|
},
|
|
28
31
|
"bugs": {
|
|
29
32
|
"url": "https://github.com/chatsift/chatsift/issues"
|
|
30
33
|
},
|
|
31
34
|
"homepage": "https://github.com/chatsift/chatsift",
|
|
32
35
|
"devDependencies": {
|
|
33
|
-
"@types/node": "^
|
|
34
|
-
"tsup": "^8.
|
|
35
|
-
"typescript": "
|
|
36
|
-
"vitest": "^
|
|
36
|
+
"@types/node": "^24.9.1",
|
|
37
|
+
"tsup": "^8.5.1",
|
|
38
|
+
"typescript": "~6.0.3",
|
|
39
|
+
"vitest": "^4.1.10"
|
|
37
40
|
},
|
|
38
41
|
"dependencies": {
|
|
39
|
-
"discord-api-types": "^0.
|
|
40
|
-
"tslib": "^2.
|
|
42
|
+
"discord-api-types": "^0.38.50",
|
|
43
|
+
"tslib": "^2.8.1"
|
|
41
44
|
}
|
|
42
45
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"program":{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/typescript/lib/lib.esnext.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/typescript/lib/lib.esnext.string.d.ts","../../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../../node_modules/typescript/lib/lib.esnext.object.d.ts","../../../node_modules/typescript/lib/lib.esnext.regexp.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/tslib/tslib.d.ts","../../../node_modules/discord-api-types/globals.d.ts","../../../node_modules/discord-api-types/rest/common.d.ts","../../../node_modules/discord-api-types/payloads/common.d.ts","../../../node_modules/discord-api-types/payloads/v10/permissions.d.ts","../../../node_modules/discord-api-types/payloads/v10/user.d.ts","../../../node_modules/discord-api-types/payloads/v10/emoji.d.ts","../../../node_modules/discord-api-types/payloads/v10/oauth2.d.ts","../../../node_modules/discord-api-types/payloads/v10/sticker.d.ts","../../../node_modules/discord-api-types/payloads/v10/guild.d.ts","../../../node_modules/discord-api-types/payloads/v10/automoderation.d.ts","../../../node_modules/discord-api-types/payloads/v10/guildscheduledevent.d.ts","../../../node_modules/discord-api-types/payloads/v10/stageinstance.d.ts","../../../node_modules/discord-api-types/payloads/v10/webhook.d.ts","../../../node_modules/discord-api-types/payloads/v10/auditlog.d.ts","../../../node_modules/discord-api-types/payloads/v10/invite.d.ts","../../../node_modules/discord-api-types/payloads/v10/poll.d.ts","../../../node_modules/discord-api-types/payloads/v10/teams.d.ts","../../../node_modules/discord-api-types/utils/internals.d.ts","../../../node_modules/discord-api-types/rest/v10/application.d.ts","../../../node_modules/discord-api-types/rest/v10/auditlog.d.ts","../../../node_modules/discord-api-types/rest/v10/automoderation.d.ts","../../../node_modules/discord-api-types/rest/v10/poll.d.ts","../../../node_modules/discord-api-types/rest/v10/channel.d.ts","../../../node_modules/discord-api-types/rest/v10/emoji.d.ts","../../../node_modules/discord-api-types/rest/v10/gateway.d.ts","../../../node_modules/discord-api-types/rest/v10/guild.d.ts","../../../node_modules/discord-api-types/rest/v10/guildscheduledevent.d.ts","../../../node_modules/discord-api-types/rest/v10/webhook.d.ts","../../../node_modules/discord-api-types/rest/v10/interactions.d.ts","../../../node_modules/discord-api-types/rest/v10/invite.d.ts","../../../node_modules/discord-api-types/rest/v10/oauth2.d.ts","../../../node_modules/discord-api-types/rest/v10/stageinstance.d.ts","../../../node_modules/discord-api-types/rest/v10/sticker.d.ts","../../../node_modules/discord-api-types/rest/v10/template.d.ts","../../../node_modules/discord-api-types/rest/v10/user.d.ts","../../../node_modules/discord-api-types/rest/v10/voice.d.ts","../../../node_modules/discord-api-types/rest/v10/monetization.d.ts","../../../node_modules/discord-api-types/rest/v10/index.d.ts","../../../node_modules/discord-api-types/payloads/v10/template.d.ts","../../../node_modules/discord-api-types/payloads/v10/voice.d.ts","../../../node_modules/discord-api-types/payloads/v10/monetization.d.ts","../../../node_modules/discord-api-types/payloads/v10/index.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/responses.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/base.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/_applicationcommands/_chatinput/shared.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/_applicationcommands/_chatinput/base.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/_applicationcommands/_chatinput/attachment.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/_applicationcommands/_chatinput/boolean.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/_applicationcommands/_chatinput/channel.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/_applicationcommands/_chatinput/integer.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/_applicationcommands/_chatinput/mentionable.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/_applicationcommands/_chatinput/number.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/_applicationcommands/_chatinput/role.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/_applicationcommands/_chatinput/string.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/_applicationcommands/_chatinput/subcommand.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/_applicationcommands/_chatinput/subcommandgroup.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/_applicationcommands/_chatinput/user.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/_applicationcommands/internals.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/_applicationcommands/chatinput.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/_applicationcommands/contextmenu.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/_applicationcommands/permissions.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/applicationcommands.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/autocomplete.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/messagecomponents.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/modalsubmit.d.ts","../../../node_modules/discord-api-types/payloads/v10/_interactions/ping.d.ts","../../../node_modules/discord-api-types/payloads/v10/interactions.d.ts","../../../node_modules/discord-api-types/payloads/v10/application.d.ts","../../../node_modules/discord-api-types/payloads/v10/channel.d.ts","../../../node_modules/discord-api-types/payloads/v10/gateway.d.ts","../../../node_modules/discord-api-types/gateway/common.d.ts","../../../node_modules/discord-api-types/gateway/v10.d.ts","../../../node_modules/discord-api-types/rpc/common.d.ts","../../../node_modules/discord-api-types/rpc/v10.d.ts","../../../node_modules/discord-api-types/utils/v10.d.ts","../../../node_modules/discord-api-types/v10.d.ts","../src/embed.ts","../src/sortchannels.ts","../src/index.ts","../../../node_modules/@types/acorn/node_modules/@types/estree/index.d.ts","../../../node_modules/@types/acorn/index.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/dom-events.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/globals.global.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@types/concat-stream/index.d.ts","../../../node_modules/@types/conventional-commits-parser/index.d.ts","../../../node_modules/@types/cross-spawn/index.d.ts","../../../node_modules/@types/ms/index.d.ts","../../../node_modules/@types/debug/index.d.ts","../../../node_modules/@types/eslint/helpers.d.ts","../../../node_modules/@types/eslint/node_modules/@types/estree/index.d.ts","../../../node_modules/@types/json-schema/index.d.ts","../../../node_modules/@types/eslint/index.d.ts","../../../node_modules/@types/estree/index.d.ts","../../../node_modules/@types/estree-jsx/node_modules/@types/estree/index.d.ts","../../../node_modules/@types/estree-jsx/index.d.ts","../../../node_modules/@types/unist/index.d.ts","../../../node_modules/@types/hast/index.d.ts","../../../node_modules/@types/is-empty/index.d.ts","../../../node_modules/@types/mdast/index.d.ts","../../../node_modules/@types/normalize-package-data/index.d.ts","../../../node_modules/pg-types/index.d.ts","../../../node_modules/pg-protocol/dist/messages.d.ts","../../../node_modules/pg-protocol/dist/serializer.d.ts","../../../node_modules/pg-protocol/dist/parser.d.ts","../../../node_modules/pg-protocol/dist/index.d.ts","../../../node_modules/@types/pg/index.d.ts","../../../node_modules/@types/retry/index.d.ts","../../../node_modules/@types/semver/classes/semver.d.ts","../../../node_modules/@types/semver/functions/parse.d.ts","../../../node_modules/@types/semver/functions/valid.d.ts","../../../node_modules/@types/semver/functions/clean.d.ts","../../../node_modules/@types/semver/functions/inc.d.ts","../../../node_modules/@types/semver/functions/diff.d.ts","../../../node_modules/@types/semver/functions/major.d.ts","../../../node_modules/@types/semver/functions/minor.d.ts","../../../node_modules/@types/semver/functions/patch.d.ts","../../../node_modules/@types/semver/functions/prerelease.d.ts","../../../node_modules/@types/semver/functions/compare.d.ts","../../../node_modules/@types/semver/functions/rcompare.d.ts","../../../node_modules/@types/semver/functions/compare-loose.d.ts","../../../node_modules/@types/semver/functions/compare-build.d.ts","../../../node_modules/@types/semver/functions/sort.d.ts","../../../node_modules/@types/semver/functions/rsort.d.ts","../../../node_modules/@types/semver/functions/gt.d.ts","../../../node_modules/@types/semver/functions/lt.d.ts","../../../node_modules/@types/semver/functions/eq.d.ts","../../../node_modules/@types/semver/functions/neq.d.ts","../../../node_modules/@types/semver/functions/gte.d.ts","../../../node_modules/@types/semver/functions/lte.d.ts","../../../node_modules/@types/semver/functions/cmp.d.ts","../../../node_modules/@types/semver/functions/coerce.d.ts","../../../node_modules/@types/semver/classes/comparator.d.ts","../../../node_modules/@types/semver/classes/range.d.ts","../../../node_modules/@types/semver/functions/satisfies.d.ts","../../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../../node_modules/@types/semver/ranges/min-version.d.ts","../../../node_modules/@types/semver/ranges/valid.d.ts","../../../node_modules/@types/semver/ranges/outside.d.ts","../../../node_modules/@types/semver/ranges/gtr.d.ts","../../../node_modules/@types/semver/ranges/ltr.d.ts","../../../node_modules/@types/semver/ranges/intersects.d.ts","../../../node_modules/@types/semver/ranges/simplify.d.ts","../../../node_modules/@types/semver/ranges/subset.d.ts","../../../node_modules/@types/semver/internals/identifiers.d.ts","../../../node_modules/@types/semver/index.d.ts","../../../node_modules/@types/supports-color/index.d.ts","../../../node_modules/@types/ws/index.d.ts","../../../node_modules/@types/yargs-parser/index.d.ts","../../../node_modules/@types/yargs/index.d.ts"],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","17edc026abf73c5c2dd508652d63f68ec4efd9d4856e3469890d27598209feb5",{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true},{"version":"ae37d6ccd1560b0203ab88d46987393adaaa78c919e51acf32fb82c86502e98c","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"d3d7b04b45033f57351c8434f60b6be1ea71a2dfec2d0a0c3c83badbb0e3e693","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true},{"version":"9d540251809289a05349b70ab5f4b7b99f922af66ab3c39ba56a475dcf95d5ff","affectsGlobalScope":true},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true},{"version":"0b11f3ca66aa33124202c80b70cd203219c3d4460cfc165e0707aa9ec710fc53","affectsGlobalScope":true},{"version":"6a3f5a0129cc80cf439ab71164334d649b47059a4f5afca90282362407d0c87f","affectsGlobalScope":true},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true},{"version":"15b98a533864d324e5f57cd3cfc0579b231df58c1c0f6063ea0fcb13c3c74ff9","affectsGlobalScope":true},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"4a882ffbb4ed09d9b7734f784aebb1dfe488d63725c40759165c5d9c657ca029","b5557e20f64bcf823a12d8fc205dbc948f79300dcd5c58e9c2c41477cfb47046","6a2b4ef4f1ab46c5310acc3d8f05b6f5554c8ca7404a59f40e4249c8e1043080","2adcf899bb7cba5fed9beb746784ac0e4be318784d8508c45061719c0df7cff4","005e759b6411813747f284a6dbd949ebdafafaf1e1ce0de0d65079980d4e4ac6","edf2fd0aad3f855d0242c25c74c81a3d0acab39c826cb1ab4633ac92aa31475d","d0863f81c9f2c13fca21445a0ae679e6f51b57283719f30c64d85a5d08a02a0c","7dcfa67ddc7767293a28ffad01f6af160b0f63c16637310bed5ab4989c5871cd","a2bcc4ce3027fff027f577650165392e58b6b8910a6d4f6481abb3ba2032ae83","d051053481c54e5027b14fc9d8ac2ebe653d1bb4ee71ee2a95c110b29d17e1ee","75700defb2dd3a05768e05d996b520a7e061725dbbc48972f0445d594884856b","c7e70a30601919dd952a453fd156a90917402e6a759163a78b1c50dca4c34e1d","d05a4958e2c16c7d23cd2d6ce798a47f22ebce0261edaa170e95e9e3f2750359","5d310ff3cc8e4a88bc14327b847af9f2fe5cfea07a0d97c6569aba7e6b8bc85f","23241b2e3d9a2fe07d2495ab1183e0d0faf207c4661b0ecf1fb7a4d386f907bd","1e587d16581358b223c464ca38b48eb3aa88e5a3f7c482f899f897b266265b71","b42d4692d0cd7e058f88532ad4007f916fbca2aa8cf7a130f2931e4ece44e198","36dd9c9d9bf84b27500bfc23fed15dbd0b229b8a3a3a8008dd826f77cf2b8d8c","63bb04d80bf30daab935e4c801f4d5fa63c0148b31c944af141eb5c65fc74408","184bee67f9ad85bd099054be5bd0c0fff9cce40dd3588e0f8c62d3634a796463","d53bacf6bea149fd81f4c4812f7b3d28cf104697eb3e370aa6d7c1fd0b254535","4ef86f6b4715067fb89f82f5e2c04b7c6629adb80286fe9149b5a4cde1e69bba","e2bba3d460f3f694b792535c93bb22b87acb9fabd2f71aff89e34e728d1ac9b2","b226268a11b24af6337c7d81e4dd6873d01c7948aaafbd4f63686fda4f87b521","6627b63f41c59d7186d5bfa8eea261e530d2d14a663284850dc51a7a6301f471","4236ff71b9fdc1b6441be8b98a8426f8bf5dabf775a72fdf53b459122d128b1c","e5b7d21bc5f3e300fb11f45d45d7324040a70bdca9f8ba691210ce8355818f25","cd798d80c4496e7ee3c328935869d5fca63f4bc38cf71889524c627c3e5e519d","07b3b44d04859b9635b25f3b5e03eae0da09c2109f613563a869fdab411653a3","e3e2aeadd5ae7a06f807fe7809c047c960326cccd4954dd306d0102565baa666","115e358a8ea88f92998a862985bbc766e4145ebd460cda1f3dc28f33567256b7","e722b184263636c187705534c864042b0c9da89361f821f6ae130f9aca69aa5a","016d436b025cb2fb275ce4aee80af5f1c33d5183e38a8251a5f6ff5cde6e22f9","a893b6c1167c4bada6e1b8a8a015e0fdb2ce5e66479942a6149fb9fc202424f5","fe13392d4d214ceba1aea269cc2799f2d14ba553945738a3db25c2608f663a40","13c713af0e10d90a9b2babf21659922423f78c1a4a76d8ec32347de496be276d","7254777d3c5c0b3678ee73417c361a90e68317beb4dd16cf5d02d88203cd1691","548610f6faf652c5b24305d72c7c4016dc6365f49bea168e1658092c18c54881","9e4c9c98fddaa8b6f1c579246eccbb436bd545580dbda967b6466ef07dcfae00","98d5d5c53e7ee6b9a1e26d438869e40a35c4b29077e3517733152482ab290ac7","fec471dab196078c0805e766caee6f4f1d811e87d87afaed3f71550f2272e2f6","4d0f87ed1cd40e612d64d7f4270b8b8648540a008e60f0efa310d7f2ad40e319","756d455c644abecdc5a8b400e9dd00d3561bcb1d0a0d7ec8a62821ba43662a63","a3506205e611b2afce34f39b17be7a059bfd67eff28c8ad558096a530c0de2a0","acb24795949690693d494f6d15cc82b354cec87e9e14e032aa649f1ef70169d0","814db46e524d863ceea59dba38b93e60e0c5555fce08afcfe6b3a86f90ca1dce","265a4739974854eb43539419a6c86faab7e161b1133496c62f8bf2725542244d","a1accfaac01020c1b866634f7a698fdd48612caccf305e16844665cb7ecac399","ec00441ae4838b8d595acfe3b2750750e4335802b06ba1f41fb03453c2c776b5","ac1689d264991e5f58deb5a82ee44940f091a709b8ca815b38d5a7cb1305ce9f","a6965d48ee610b134de51099ead16d6392545911b1be22a80333cc4ff3be912f","c548226db013facd262a4bc1c32c44a13eda7e1181aa6f569f9bdd531c95b0d5","208c6a8bd5529257694b07dc1f8ed085c89bd5e18134de61da4e95a1ec896461","543f461070fbd4b33bd05a5ba3e472e1297bb1db3c3101092bd69bfdddd3b1a1","8aa0740691fc5b898cc04641c3ecc589c297ac27337c3b8ec053f4f4cb11c253","32e0cd3a65bd475e955272ba0cc0fbaceac58de169baec25b3bb3f81234f6d4a","a73ba7d094b61e88566e3577166f63389a945f209a3ec20c6a151545f0d7544d","3745762b83e5d49983a4183821125e3417473f992c4bf1d6dd6cea91efb4166f","ade458e350eda79fa74ecb678d9c51cc17f592d56df3e47286ef28e71401a989","9a2de03d56206eb28256c21e7c92a33a9a1d6010591cba2c768f25ea27895abd","48fc0e6891264b697feea9ac9d6932b980f1b4a4fc1ea5731e5979a00f811d0d","e69548fdcfdcda206290a7ace25206167ef66cac83e877e8f1e3bd8a4ed3e649","4abe19a40937aca63a6e66204e9bc711da0762e1fd6f412ea720ad60905cc8f7","444b53f5769d9b2c284316f1b1fbaed64a75b0ccb6c3953861a9eaa3e38c5ed9","49bddd70b375e6ba2b0f6e8dca81608dff0e9496dc28a87b79a622b8d1d4b41f","3dd3a106a9b038c53f8e16bdf8ea1b04f2236d576f982e91b59c9d0b22877eb0","4359e8ba73374bb7d25c0d4181c4e9f9fd6174569897788596feac600ec69639","ba673eb458990de2d6d446c138113053bfa1013319835eb54f0060627a83dab6","ecb6ee9b10f9418873d68531c396d1731a98131274631a452cdb0ac2982d7806","57add3bda78c269dab64114114ecd2adc9df136e37e4a40c50bbdaaa099941d5","e291f1af6e280e00d93a5eacd864badf8d0b2d3123766585355dbb35b4d9eaa7","90a10667ea89295bf4d0e696cd9d472773dfa1a09abc826de69bd656f659430b","7080eced720f697f5eb20787acab50899f454c26d7d0cab57129d741f06c56c1","39a1119b0bc182c5ddbc82f945e18e944c898c95628d3294662c207d28b018ca","ea6af8604356c23c42ac3ac436f6b0d8300142e0f64573f8c3f67f259b8786cb","4d520fef6ce674f1cc21c5cd524e02d9ad45cd59051090b5d9a4986a36d41d2c","c2b976310a797531e7b098d4c615d36e68cf849f904bce95a40e1fc1f1e2fdb1",{"version":"edc423bb7358571338f7b74df3c4121a358dfbca47747e51c439de3399883c0c","signature":"2c6e7d7165e9eff1d49043f80f426b7f1af17a5057b4a4ee63f029ba2db4c588"},{"version":"4ad91d71117b7e8ecb35873787442bf10755b44becb76a20a56a0a3f0dbf1213","signature":"f69296c63b0b7642ddc4e3b6830a84fe579157db05662a839464798750f97ae6"},"2edd785d1e1b9ad49e8febb04d799b0db089bd0cb1d1fbb94c320dcf38781625","ee7d8894904b465b072be0d2e4b45cf6b887cdba16a467645c4e200982ece7ea","3777eb752cef9aa8dd35bb997145413310008aa54ec44766de81a7ad891526cd","2db0dd3aaa2ed285950273ce96ae8a450b45423aa9da2d10e194570f1233fa6b","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1",{"version":"e7be367719c613d580d4b27fdf8fe64c9736f48217f4b322c0d63b2971460918","affectsGlobalScope":true},"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36",{"version":"dd78bfe9dfcadb2c4cd3a3a36df38fb3ef8ed2c601b57f6ad9a29e38a17ff39c","affectsGlobalScope":true},"62f1c00d3d246e0e3cf0224f91e122d560428ec1ccc36bb51d4574a84f1dbad0","53f0960fdcc53d097918adfd8861ffbe0db989c56ffc16c052197bf115da5ed6",{"version":"662163e5327f260b23ca0a1a1ad8a74078aabb587c904fcb5ef518986987eaff","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb",{"version":"f85c06e750743acf31f0cfd3be284a364d469761649e29547d0dd6be48875150","affectsGlobalScope":true},"b0c0d1d13be149f790a75b381b413490f98558649428bb916fd2d71a3f47a134","3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","0364f8bb461d6e84252412d4e5590feda4eb582f77d47f7a024a7a9ff105dfdc","5433f7f77cd1fd53f45bd82445a4e437b2f6a72a32070e907530a4fea56c30c8","d0ca5d7df114035258a9d01165be309371fcccf0cccd9d57b1453204686d1ed0",{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true},{"version":"9a30b7fefd7f8abbca4828d481c61c18e40fe5ff107e113b1c1fcd2c8dcf2743","affectsGlobalScope":true},"173b6275a81ebdb283b180654890f46516c21199734fed01a773b1c168b8c45c","304f66274aa8119e8d65a49b1cff84cbf803def6afe1b2cc987386e9a9890e22","1b9adafe8a7fefaeaf9099a0e06f602903f6268438147b843a33a5233ac71745","98273274f2dbb79b0b2009b20f74eca4a7146a3447c912d580cd5d2d94a7ae30","c933f7ba4b201c98b14275fd11a14abb950178afd2074703250fe3654fc10cd2","2eaa31492906bc8525aff3c3ec2236e22d90b0dfeee77089f196cd0adf0b3e3b",{"version":"ea455cc68871b049bcecd9f56d4cf27b852d6dafd5e3b54468ca87cc11604e4d","affectsGlobalScope":true},"8f5814f29dbaf8bacd1764aebdf1c8a6eb86381f6a188ddbac0fcbaab855ce52","a63d03de72adfb91777784015bd3b4125abd2f5ef867fc5a13920b5649e8f52b","d20e003f3d518a7c1f749dbe27c6ab5e3be7b3c905a48361b04a9557de4a6900",{"version":"1d4d78c8b23c9ddaaaa49485e6adc2ec01086dfe5d8d4d36ca4cdc98d2f7e74a","affectsGlobalScope":true},{"version":"44fc16356b81c0463cc7d7b2b35dcf324d8144136f5bc5ce73ced86f2b3475b5","affectsGlobalScope":true},"575fb200043b11b464db8e42cc64379c5fd322b6d787638e005b5ee98a64486d","6de2f225d942562733e231a695534b30039bdf1875b377bb7255881f0df8ede8","56249fd3ef1f6b90888e606f4ea648c43978ef43a7263aafad64f8d83cd3b8aa","139ad1dc93a503da85b7a0d5f615bddbae61ad796bc68fedd049150db67a1e26","7b166975fdbd3b37afb64707b98bca88e46577bbc6c59871f9383a7df2daacd1","9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","81505c54d7cad0009352eaa21bd923ab7cdee7ec3405357a54d9a5da033a2084","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","3c1f19c7abcda6b3a4cf9438a15c7307a080bd3b51dfd56b198d9f86baf19447","2ee1645e0df9d84467cfe1d67b0ad3003c2f387de55874d565094464ee6f2927",{"version":"7da97d603bf3dd0000f56467c56cb6efaf5f94692980474925fae6c33412b12a","affectsGlobalScope":true},{"version":"9cf780e96b687e4bdfd1907ed26a688c18b89797490a00598fa8b8ab683335dd","affectsGlobalScope":true},"98e00f3613402504bc2a2c9a621800ab48e0a463d1eed062208a4ae98ad8f84c","9ae88ce9f73446c24b2d2452e993b676da1b31fca5ceb7276e7f36279f693ed1","e49d7625faff2a7842e4e7b9b197f972633fca685afcf6b4403400c97d087c36","b82c38abc53922b1b3670c3af6f333c21b735722a8f156e7d357a2da7c53a0a0",{"version":"b423f53647708043299ded4daa68d95c967a2ac30aa1437adc4442129d7d0a6c","affectsGlobalScope":true},{"version":"7245af181218216bacb01fbdf51095617a51661f20d77178c69a377e16fb69ed","affectsGlobalScope":true},"4f0fc7b7f54422bd97cfaf558ddb4bca86893839367b746a8f86b60ac7619673","4cdd8b6b51599180a387cc7c1c50f49eca5ce06595d781638fd0216520d98246","d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c",{"version":"8704423bf338bff381ebc951ed819935d0252d90cd6de7dffe5b0a5debb65d07","affectsGlobalScope":true},"7c6929fd7cbf38499b6a600b91c3b603d1d78395046dc3499b2b92d01418b94b",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"a42be67ed1ddaec743582f41fc219db96a1b69719fccac6d1464321178d610fc","d009e415638e5ec78f1073f698f2f2aa6a66883989dced9a46b3ac3967cb56f8","f96f3c445afc7d65d4790386e37c5b57f095f285cc89b8315b209fe0c81837c1","5e3a55837aa1f42af2d2334c9b750f59f5f50a2205471875f5dd6aadc3e49ddb","68cc8d6fcc2f270d7108f02f3ebc59480a54615be3e09a47e14527f349e9d53e","3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1",{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true},"ee7d8894904b465b072be0d2e4b45cf6b887cdba16a467645c4e200982ece7ea","f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","7852500a7dc3f9cb6b73d619f6e0249119211ea662fd5e16c59ee5aba3deeb80","bee89e1eb6425eb49894f3f25e4562dc2564e84e5aa7610b7e13d8ecddf8f5db","ee7d8894904b465b072be0d2e4b45cf6b887cdba16a467645c4e200982ece7ea","5d08a179b846f5ee674624b349ebebe2121c455e3a265dc93da4e8d9e89722b4","89121c1bf2990f5219bfd802a3e7fc557de447c62058d6af68d6b6348d64499a","79b4369233a12c6fa4a07301ecb7085802c98f3a77cf9ab97eee27e1656f82e6","b3bcbf3f1afe9bd5ad07f57ef717a9178e099416a939f01427c5972e8dab7122","d4a22007b481fe2a2e6bfd3a42c00cd62d41edb36d30fc4697df2692e9891fc8","22293bd6fa12747929f8dfca3ec1684a3fe08638aa18023dd286ab337e88a592","a589f9f052276a3fc00b75e62f73b93ea568fce3e935b86ed7052945f99d9dc2","17230b34bb564a3a2e36f9d3985372ccab4ad1722df2c43f7c5c2b553f68e5db","6e5c9272f6b3783be7bdddaf207cccdb8e033be3d14c5beacc03ae9d27d50929","9b4f7ff9681448c72abe38ea8eefd7ffe0c3aefe495137f02012a08801373f71","0dfe35191a04e8f9dc7caeb9f52f2ee07402736563d12cbccd15fb5f31ac877f","5e3ded3624072ab70ba827b9279789f5c761456eb4e859281a5dd60537dedb25","199f9ead0daf25ae4c5632e3d1f42570af59685294a38123eef457407e13f365","cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","1e60b6a5f644623f61e7ddb2f7f81cc56a0142329ca253e5fb237e7a719026c7","a9bf72dc672eed91bf61d8086559e11d84c8faa3bd42d11859feee3ff33fc8af","bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","5d30d04a14ed8527ac5d654dc345a4db11b593334c11a65efb6e4facc5484a0e"],"root":[[149,151]],"options":{"alwaysStrict":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"module":99,"noEmitHelpers":true,"noImplicitOverride":true,"noUncheckedIndexedAccess":true,"outDir":"./","removeComments":true,"skipLibCheck":true,"sourceMap":true,"strict":true,"target":7,"verbatimModuleSyntax":true},"fileIdsList":[[152,253],[222,241],[192,241],[245],[152,247,249,253],[254],[154],[190],[191,196,225],[192,197,203,204,211,222,233],[192,193,203,211],[194,234],[195,196,204,212],[196,222,230],[197,199,203,211],[190,198],[199,200],[203],[201,203],[190,203],[203,204,205,222,233],[203,204,205,218,222,225],[188,191,238],[199,203,206,211,222,233],[203,204,206,207,211,222,230,233],[206,208,222,230,233],[154,155,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240],[203,209],[210,233,238],[199,203,211,222],[212],[213],[190,214],[211,212,215,232,238],[216],[217],[203,218,219],[218,220,234,236],[191,203,222,223,224,225],[191,222,224],[222,223],[225],[226],[190,222],[203,228,229],[228,229],[196,211,222,230],[231],[211,232],[191,206,217,233],[196,234],[222,235],[210,236],[237],[191,196,203,205,214,222,233,236,238],[222,239],[203,222,230,241,259,260,263,264],[266,305],[266,290,305],[305],[266],[266,291,305],[266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304],[291,305],[203,206,208,222,230,233,239,241],[308],[73,90,114,142,143],[74],[73,117,118],[117,148],[117,118],[73,117,118,141],[148],[117,118,131],[117,118,127],[114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,134],[73,116,130,134,141],[73,134],[73],[73,115,116,131,132,133,148],[114],[73,77,81,113,115,141,148],[73,116,139,141],[114,141],[115,116],[114,134,141,148],[73,75,77,79,81,89,139],[73,76,77,80,81,82,83,84,85,139,141],[73,76,77,78,80,81,88,139,140],[73,76,77],[73,77,78,141],[73,76,77,78,79,80,142],[73,77,81],[75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,111,112,113,139,140,141,142],[115,116,134,135,136,137,138],[77,81,83,84,140,141],[78],[73,81],[73,77],[73,77,110],[73,114],[90,140],[73,86],[73,90,94,114],[73,90,95,114],[73,90,148],[73,74,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109],[90,100,114],[73,148],[90,114],[73,90,94,95,114],[145],[73,110,114,144,146,147],[241,260,261,262],[241],[222,241,260],[165,169,233],[165,222,233],[160],[162,165,230,233],[211,230],[160,241],[162,165,211,233],[157,158,161,164,191,203,222,233],[157,163],[161,165,191,225,233,241],[191,241],[181,191,241],[159,160,241],[165],[159,160,161,162,163,164,165,166,167,169,170,171,172,173,174,175,176,177,178,179,180,182,183,184,185,186,187],[165,172,173],[163,165,173,174],[164],[157,160,165],[165,169,173,174],[169],[163,165,168,233],[157,162,163,165,169,172],[191,222],[160,165,181,191,238,241],[72,148],[72,149,150]],"referencedMap":[[153,1],[242,2],[243,2],[244,3],[246,4],[250,5],[253,1],[255,6],[257,6],[154,7],[155,7],[190,8],[191,9],[192,10],[193,11],[194,12],[195,13],[196,14],[197,15],[198,16],[199,17],[200,17],[202,18],[201,19],[203,20],[204,21],[205,22],[189,23],[206,24],[207,25],[208,26],[241,27],[209,28],[210,29],[211,30],[212,31],[213,32],[214,33],[215,34],[216,35],[217,36],[218,37],[219,37],[220,38],[222,39],[224,40],[223,41],[225,42],[226,43],[227,44],[228,45],[229,46],[230,47],[231,48],[232,49],[233,50],[234,51],[235,52],[236,53],[237,54],[238,55],[239,56],[264,57],[290,58],[291,59],[266,60],[269,60],[288,58],[289,58],[279,58],[278,61],[276,58],[271,58],[284,58],[282,58],[286,58],[270,58],[283,58],[287,58],[272,58],[273,58],[285,58],[267,58],[274,58],[275,58],[277,58],[281,58],[292,62],[280,58],[268,58],[305,63],[299,62],[301,64],[300,62],[293,62],[294,62],[296,62],[298,62],[302,64],[303,64],[295,64],[297,64],[307,65],[309,66],[144,67],[75,68],[119,69],[118,70],[120,71],[121,72],[122,71],[123,69],[124,71],[125,69],[117,73],[126,71],[127,74],[128,75],[129,69],[131,76],[132,77],[130,78],[133,79],[134,80],[135,81],[116,82],[136,83],[137,84],[138,85],[115,86],[140,87],[86,88],[82,79],[141,89],[78,90],[142,91],[81,92],[83,93],[114,94],[139,95],[87,96],[113,79],[76,79],[88,97],[84,98],[80,99],[89,99],[111,100],[77,98],[112,98],[85,101],[91,102],[92,103],[93,101],[95,104],[96,101],[97,81],[98,105],[99,106],[110,107],[101,108],[102,101],[109,109],[103,101],[94,109],[104,101],[105,81],[106,110],[107,101],[108,81],[100,111],[146,112],[147,81],[148,113],[263,114],[260,115],[262,116],[172,117],[179,118],[171,117],[186,119],[163,120],[162,121],[185,115],[180,122],[183,123],[165,124],[164,125],[160,126],[159,127],[182,128],[161,129],[166,130],[170,130],[188,131],[187,130],[174,132],[175,133],[177,134],[173,135],[176,136],[181,115],[168,137],[169,138],[178,139],[158,140],[184,141],[149,142],[151,143],[150,142]]},"version":"5.5.4"}
|