From 7ea3638dbcf38926596fb5da8b85040e70f1b98b Mon Sep 17 00:00:00 2001 From: Parbez Date: Wed, 1 May 2024 02:16:21 +0530 Subject: [PATCH] fix: don't mutate user provided array (#10014) * fix(builders): don't mutate user provided array * test: add normalize array tests * chore: revert vscode autochange * Update util.test.ts * refactor: remove unnecessary clone --------- Co-authored-by: Vlad Frangu Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com> Co-authored-by: Almeida --- packages/builders/__tests__/util.test.ts | 18 +++++++++++++++++- .../selectMenu/MentionableSelectMenu.ts | 2 +- packages/builders/src/util/normalizeArray.ts | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/builders/__tests__/util.test.ts b/packages/builders/__tests__/util.test.ts index 3e423a7ef..1a90e3acf 100644 --- a/packages/builders/__tests__/util.test.ts +++ b/packages/builders/__tests__/util.test.ts @@ -1,5 +1,5 @@ import { describe, test, expect } from 'vitest'; -import { enableValidators, disableValidators, isValidationEnabled } from '../src/index.js'; +import { enableValidators, disableValidators, isValidationEnabled, normalizeArray } from '../src/index.js'; describe('validation', () => { test('enables validation', () => { @@ -12,3 +12,19 @@ describe('validation', () => { expect(isValidationEnabled()).toBeFalsy(); }); }); + +describe('normalizeArray', () => { + test('normalizes an array or array (when input is an array)', () => { + expect(normalizeArray([[1, 2, 3]])).toEqual([1, 2, 3]); + }); + + test('normalizes an array (when input is rest parameter)', () => { + expect(normalizeArray([1, 2, 3])).toEqual([1, 2, 3]); + }); + + test('always returns a clone', () => { + const arr = [1, 2, 3]; + expect(normalizeArray([arr])).toEqual(arr); + expect(normalizeArray([arr])).not.toBe(arr); + }); +}); diff --git a/packages/builders/src/components/selectMenu/MentionableSelectMenu.ts b/packages/builders/src/components/selectMenu/MentionableSelectMenu.ts index b577822e9..2f5e71b7d 100644 --- a/packages/builders/src/components/selectMenu/MentionableSelectMenu.ts +++ b/packages/builders/src/components/selectMenu/MentionableSelectMenu.ts @@ -110,7 +110,7 @@ export class MentionableSelectMenuBuilder extends BaseSelectMenuBuilder(arr: RestOrArray): ItemType[] { - if (Array.isArray(arr[0])) return arr[0]; + if (Array.isArray(arr[0])) return [...arr[0]]; return arr as ItemType[]; }