mirror of
https://github.com/discordeno/discordeno.git
synced 2026-06-16 19:28:17 +00:00
refactor(structures/channel): auto-convert the paylaod fields to camel case (#730)
This commit is contained in:
+16
-24
@@ -6,8 +6,9 @@ import { editChannel } from "../helpers/channels/edit_channel.ts";
|
|||||||
import { editChannelOverwrite } from "../helpers/channels/edit_channel_overwrite.ts";
|
import { editChannelOverwrite } from "../helpers/channels/edit_channel_overwrite.ts";
|
||||||
import { sendMessage } from "../helpers/messages/send_message.ts";
|
import { sendMessage } from "../helpers/messages/send_message.ts";
|
||||||
import { disconnectMember } from "../helpers/mod.ts";
|
import { disconnectMember } from "../helpers/mod.ts";
|
||||||
|
import { Channel, DiscordChannel } from "../types/channels/channel.ts";
|
||||||
import { Collection } from "../util/collection.ts";
|
import { Collection } from "../util/collection.ts";
|
||||||
import { createNewProp } from "../util/utils.ts";
|
import { createNewProp, snakeKeysToCamelCase } from "../util/utils.ts";
|
||||||
|
|
||||||
const baseChannel: Partial<Channel> = {
|
const baseChannel: Partial<Channel> = {
|
||||||
get guild() {
|
get guild() {
|
||||||
@@ -61,41 +62,32 @@ const baseChannel: Partial<Channel> = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// deno-lint-ignore require-await
|
// deno-lint-ignore require-await
|
||||||
|
/** Create a structure object */
|
||||||
export async function createChannelStruct(
|
export async function createChannelStruct(
|
||||||
data: ChannelCreatePayload,
|
data: DiscordChannel,
|
||||||
guildId?: string,
|
guildId?: string,
|
||||||
) {
|
) {
|
||||||
const {
|
const {
|
||||||
guild_id: rawGuildId = "",
|
guildId: rawGuildId = "",
|
||||||
last_message_id: lastMessageId,
|
lastPinTimestamp,
|
||||||
user_limit: userLimit,
|
|
||||||
rate_limit_per_user: rateLimitPerUser,
|
|
||||||
parent_id: parentId = undefined,
|
|
||||||
last_pin_timestamp: lastPinTimestamp,
|
|
||||||
permission_overwrites: permissionOverwrites = [],
|
|
||||||
nsfw = false,
|
|
||||||
...rest
|
...rest
|
||||||
} = data;
|
} = snakeKeysToCamelCase(data) as Channel;
|
||||||
|
|
||||||
const restProps: Record<string, ReturnType<typeof createNewProp>> = {};
|
const props: Record<string, PropertyDescriptor> = {};
|
||||||
for (const key of Object.keys(rest)) {
|
Object.keys(rest).forEach((key) => {
|
||||||
// @ts-ignore index signature
|
// @ts-ignore index signature
|
||||||
restProps[key] = createNewProp(rest[key]);
|
props[key] = createNewProp(rest[key]);
|
||||||
}
|
});
|
||||||
|
|
||||||
const channel = Object.create(baseChannel, {
|
const channel: ChannelStruct = Object.create(baseChannel, {
|
||||||
...restProps,
|
...props,
|
||||||
guildId: createNewProp(guildId || rawGuildId),
|
guildId: createNewProp(guildId || rawGuildId),
|
||||||
lastMessageId: createNewProp(lastMessageId),
|
|
||||||
userLimit: createNewProp(userLimit),
|
|
||||||
rateLimitPerUser: createNewProp(rateLimitPerUser),
|
|
||||||
parentId: createNewProp(parentId),
|
|
||||||
lastPinTimestamp: createNewProp(
|
lastPinTimestamp: createNewProp(
|
||||||
lastPinTimestamp ? Date.parse(lastPinTimestamp) : undefined,
|
lastPinTimestamp ? Date.parse(lastPinTimestamp) : undefined,
|
||||||
),
|
),
|
||||||
permissionOverwrites: createNewProp(permissionOverwrites),
|
|
||||||
nsfw: createNewProp(nsfw),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return channel as Channel;
|
return channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type ChannelStruct = Channel & typeof baseChannel;
|
||||||
|
|||||||
+1
-1
@@ -31,7 +31,7 @@ export async function urlToBase64(url: string) {
|
|||||||
|
|
||||||
/** Allows easy way to add a prop to a base object when needing to use complicated getters solution. */
|
/** Allows easy way to add a prop to a base object when needing to use complicated getters solution. */
|
||||||
// deno-lint-ignore no-explicit-any
|
// deno-lint-ignore no-explicit-any
|
||||||
export function createNewProp(value: any): Partial<PropertyDescriptor> {
|
export function createNewProp(value: any): PropertyDescriptor {
|
||||||
return { configurable: true, enumerable: true, writable: true, value };
|
return { configurable: true, enumerable: true, writable: true, value };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user