From 1f0fe39156c2e61a86e396b59470c634892e705b Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Fri, 11 Jul 2025 15:44:25 +0100 Subject: [PATCH] refactor(CDN)!: Use an object for the constructor (#10978) BREAKING CHANGE: The CDN class requires an object to construct. --- packages/rest/__tests__/CDN.test.ts | 2 +- packages/rest/src/lib/CDN.ts | 30 +++++++++++++++++++++++++---- packages/rest/src/lib/REST.ts | 2 +- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/packages/rest/__tests__/CDN.test.ts b/packages/rest/__tests__/CDN.test.ts index 691d1f28d..5b6912259 100644 --- a/packages/rest/__tests__/CDN.test.ts +++ b/packages/rest/__tests__/CDN.test.ts @@ -8,7 +8,7 @@ const hash = 'abcdef'; const animatedHash = 'a_bcdef'; const defaultAvatar = 1_234 % 5; -const cdn = new CDN(baseCDN, baseMedia); +const cdn = new CDN({ cdn: baseCDN, mediaProxy: baseMedia }); test('appAsset default', () => { expect(cdn.appAsset(id, hash)).toEqual(`${baseCDN}/app-assets/${id}/${hash}.webp`); diff --git a/packages/rest/src/lib/CDN.ts b/packages/rest/src/lib/CDN.ts index 319d2bf2d..b08f64442 100644 --- a/packages/rest/src/lib/CDN.ts +++ b/packages/rest/src/lib/CDN.ts @@ -83,14 +83,36 @@ interface MakeURLOptions { size?: ImageSize; } +/** + * Options for initializing the {@link CDN} class. + */ +export interface CDNOptions { + /** + * The base URL for the CDN. + * + * @defaultValue `DefaultRestOptions.cdn` + */ + cdn?: string | undefined; + /** + * The base URL for the media proxy. + * + * @defaultValue `DefaultRestOptions.mediaProxy` + */ + mediaProxy?: string | undefined; +} + /** * The CDN link builder */ export class CDN { - public constructor( - private readonly cdn: string = DefaultRestOptions.cdn, - private readonly mediaProxy: string = DefaultRestOptions.mediaProxy, - ) {} + private readonly cdn: string; + + private readonly mediaProxy: string; + + public constructor({ cdn, mediaProxy }: CDNOptions = {}) { + this.cdn = cdn ?? DefaultRestOptions.cdn; + this.mediaProxy = mediaProxy ?? DefaultRestOptions.mediaProxy; + } /** * Generates an app asset URL for a client's asset. diff --git a/packages/rest/src/lib/REST.ts b/packages/rest/src/lib/REST.ts index a78b94e96..a39565577 100644 --- a/packages/rest/src/lib/REST.ts +++ b/packages/rest/src/lib/REST.ts @@ -78,7 +78,7 @@ export class REST extends AsyncEventEmitter { public constructor(options: Partial = {}) { super(); - this.cdn = new CDN(options.cdn ?? DefaultRestOptions.cdn, options.mediaProxy ?? DefaultRestOptions.mediaProxy); + this.cdn = new CDN(options); this.options = { ...DefaultRestOptions, ...options }; this.globalRemaining = Math.max(1, this.options.globalRequestsPerSecond); this.agent = options.agent ?? null;