diff --git a/packages/cli-kit/src/public/common/array.test.ts b/packages/cli-kit/src/public/common/array.test.ts index 720becbac0..ce95f124be 100644 --- a/packages/cli-kit/src/public/common/array.test.ts +++ b/packages/cli-kit/src/public/common/array.test.ts @@ -1,6 +1,20 @@ -import {difference, uniq, uniqBy} from './array.js' +import {difference, takeRandomFromArray, uniq, uniqBy} from './array.js' import {describe, test, expect} from 'vitest' +describe('takeRandomFromArray', () => { + test('returns an element from the array', () => { + const array = [1, 2, 3] + const got = takeRandomFromArray(array) + expect(array).toContain(got) + }) + + test('returns undefined for an empty array', () => { + const array: number[] = [] + const got = takeRandomFromArray(array) + expect(got).toBeUndefined() + }) +}) + describe('uniqBy', () => { test('removes duplicates', () => { // When diff --git a/packages/cli-kit/src/public/common/array.ts b/packages/cli-kit/src/public/common/array.ts index 8b22c0b7b9..b2f78dcc59 100644 --- a/packages/cli-kit/src/public/common/array.ts +++ b/packages/cli-kit/src/public/common/array.ts @@ -1,5 +1,6 @@ import lodashUniqBy from 'lodash/uniqBy.js' import lodashDifference from 'lodash/difference.js' +import {randomInt} from 'node:crypto' import type {List, ValueIteratee} from 'lodash' /** @@ -9,7 +10,8 @@ import type {List, ValueIteratee} from 'lodash' * @returns A random element from the array. */ export function takeRandomFromArray(array: T[]): T { - return array[Math.floor(Math.random() * array.length)]! + if (array.length === 0) return undefined as unknown as T + return array[randomInt(array.length)]! } /**