diff --git a/packages/rest/src/manager.ts b/packages/rest/src/manager.ts index d900544e6..92dba16cd 100644 --- a/packages/rest/src/manager.ts +++ b/packages/rest/src/manager.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/restrict-template-expressions */ import TRANSFORMERS from '@discordeno/transformer' import type { BigString, Camelize, CreateMessageOptions, DiscordCreateMessage, DiscordMessage, DiscordUser, GetMessagesOptions } from '@discordeno/types' -import { delay } from '@discordeno/utils' +import { delay, camelize } from '@discordeno/utils' // TODO: make dynamic based on package.json file const version = '18.0.0-alpha.1' @@ -162,16 +162,15 @@ export function createRestManager (options: CreateRestManagerOptions): RestManag }, async get (url) { - return await rest.makeRequest('GET', url) + return camelize(await rest.makeRequest('GET', url)) }, async post (url, body) { - return await rest.makeRequest('POST', url, body) + return camelize(await rest.makeRequest('POST', url, body)) }, async getUser (id) { - const result = await rest.get(rest.routes.user(id)) - return TRANSFORMERS.user(result) + return await rest.get(rest.routes.user(id)) }, /** @@ -262,9 +261,9 @@ export interface RestManager { /** Make a request to be sent to the api. */ makeRequest: (method: RequestMethods, url: string, body?: Record) => Promise /** Make a get request to the api */ - get: (url: string) => Promise + get: (url: string) => Promise> /** Make a post request to the api. */ - post: (url: string, body?: Record) => Promise + post: (url: string, body?: Record) => Promise> /** * Get a user's data from the api * diff --git a/packages/types/src/discordeno.ts b/packages/types/src/discordeno.ts index eb4f1daf4..170163981 100644 --- a/packages/types/src/discordeno.ts +++ b/packages/types/src/discordeno.ts @@ -1,4 +1,4 @@ -import type { BigString } from "./shared" +import type { BigString } from './shared' export interface CreateMessageOptions { /** The message contents (up to 2000 characters) */ diff --git a/packages/utils/src/casing.ts b/packages/utils/src/casing.ts new file mode 100644 index 000000000..ae2119658 --- /dev/null +++ b/packages/utils/src/casing.ts @@ -0,0 +1,26 @@ +import type { Camelize } from '@discordeno/types' + +export const camelize = (object: T): Camelize => { + if (Array.isArray(object)) { + return object.map((element) => + camelize(element) + ) as Camelize + } + if (typeof object === 'object' && object !== null) { + const obj = {} as Camelize; + (Object.keys(object) as Array).forEach((key) => { + // @ts-expect-error + (obj[ + typeof key === 'string' + ? key.replace(/([-_][a-z])/gi, ($1) => { + return $1.toUpperCase().replace('-', '').replace('_', '') + }) + : key + ] as Camelize<(T & object)[keyof T]>) = camelize( + object[key] + ) + }) + return obj + } + return object as Camelize +} diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 84814912c..d563876a8 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1 +1,2 @@ +export * from './casing.js' export * from './utils.js'