feat(CDN): Support emoji size (#9787)

* feat(CDN): support emoji size

* refactor: try to warn in all environments

* feat: add prefix

* refactor: better feedback message

---------

Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
This commit is contained in:
Jiralite
2023-09-02 10:56:09 +01:00
committed by GitHub
parent 23a6424261
commit 778df45166
3 changed files with 57 additions and 3 deletions

View File

@@ -8,6 +8,9 @@ import {
type ImageSize, type ImageSize,
type StickerExtension, type StickerExtension,
} from './utils/constants.js'; } from './utils/constants.js';
import { deprecationWarning } from './utils/utils.js';
let deprecationEmittedForEmoji = false;
/** /**
* The options used for image URLs * The options used for image URLs
@@ -158,10 +161,38 @@ export class CDN {
* Generates an emoji's URL for an emoji. * Generates an emoji's URL for an emoji.
* *
* @param emojiId - The emoji id * @param emojiId - The emoji id
* @param extension - The extension of the emoji * @param options - Optional options for the emoji
*/ */
public emoji(emojiId: string, extension?: ImageExtension): string { public emoji(emojiId: string, options?: Readonly<BaseImageURLOptions>): string;
return this.makeURL(`/emojis/${emojiId}`, { extension });
/**
* Generates an emoji's URL for an emoji.
*
* @param emojiId - The emoji id
* @param extension - The extension of the emoji
* @deprecated This overload is deprecated. Pass an object containing the extension instead.
*/
// eslint-disable-next-line @typescript-eslint/unified-signatures
public emoji(emojiId: string, extension?: ImageExtension): string;
public emoji(emojiId: string, options?: ImageExtension | Readonly<BaseImageURLOptions>): string {
let resolvedOptions;
if (typeof options === 'string') {
if (!deprecationEmittedForEmoji) {
deprecationWarning(
'Passing a string for the second parameter of CDN#emoji() is deprecated. Use an object instead.',
);
deprecationEmittedForEmoji = true;
}
resolvedOptions = { extension: options };
} else {
resolvedOptions = options;
}
return this.makeURL(`/emojis/${emojiId}`, resolvedOptions);
} }
/** /**

View File

@@ -59,3 +59,10 @@ export const OverwrittenMimeTypes = {
} as const satisfies Readonly<Record<string, string>>; } as const satisfies Readonly<Record<string, string>>;
export const BurstHandlerMajorIdKey = 'burst'; export const BurstHandlerMajorIdKey = 'burst';
/**
* Prefix for deprecation warnings.
*
* @internal
*/
export const DEPRECATION_WARNING_PREFIX = 'DeprecationWarning' as const;

View File

@@ -1,6 +1,7 @@
import type { RESTPatchAPIChannelJSONBody, Snowflake } from 'discord-api-types/v10'; import type { RESTPatchAPIChannelJSONBody, Snowflake } from 'discord-api-types/v10';
import type { REST } from '../REST.js'; import type { REST } from '../REST.js';
import { RateLimitError } from '../errors/RateLimitError.js'; import { RateLimitError } from '../errors/RateLimitError.js';
import { DEPRECATION_WARNING_PREFIX } from './constants.js';
import { RequestMethod, type RateLimitData, type ResponseLike } from './types.js'; import { RequestMethod, type RateLimitData, type ResponseLike } from './types.js';
function serializeSearchParam(value: unknown): string | null { function serializeSearchParam(value: unknown): string | null {
@@ -140,3 +141,18 @@ export async function sleep(ms: number): Promise<void> {
export function isBufferLike(value: unknown): value is ArrayBuffer | Buffer | Uint8Array | Uint8ClampedArray { export function isBufferLike(value: unknown): value is ArrayBuffer | Buffer | Uint8Array | Uint8ClampedArray {
return value instanceof ArrayBuffer || value instanceof Uint8Array || value instanceof Uint8ClampedArray; return value instanceof ArrayBuffer || value instanceof Uint8Array || value instanceof Uint8ClampedArray;
} }
/**
* Irrespective environment warning.
*
* @remarks Only the message is needed. The deprecation prefix is handled already.
* @param message - A string the warning will emit with
* @internal
*/
export function deprecationWarning(message: string) {
if (typeof globalThis.process === 'undefined') {
console.warn(`${DEPRECATION_WARNING_PREFIX}: ${message}`);
} else {
process.emitWarning(message, DEPRECATION_WARNING_PREFIX);
}
}