{"version":3,"file":"shuffle.js","names":[],"sources":["../src/shuffle.ts"],"sourcesContent":["import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { ReorderedArray } from \"./internal/types/ReorderedArray\";\nimport { purry } from \"./purry\";\n\n/**\n * Shuffles the input array, returning a new array with the same elements in a random order.\n *\n * @param items - The array to shuffle.\n * @signature\n *    shuffle(array)\n * @example\n *    shuffle([4, 2, 7, 5]) // => [7, 5, 4, 2]\n * @dataFirst\n * @category Array\n */\nexport function shuffle<T extends IterableContainer>(\n  items: T,\n): ReorderedArray<T>;\n\n/**\n * Shuffles the input array, returning a new array with the same elements in a random order.\n *\n * @signature\n *    shuffle()(array)\n * @example\n *    pipe([4, 2, 7, 5], shuffle()) // => [7, 5, 4, 2]\n * @dataLast\n * @category Array\n */\nexport function shuffle(): <T extends IterableContainer>(\n  items: T,\n) => ReorderedArray<T>;\n\nexport function shuffle(...args: readonly unknown[]): unknown {\n  return purry(shuffleImplementation, args);\n}\n\nfunction shuffleImplementation<T>(items: readonly T[]): T[] {\n  const result = [...items];\n  for (let index = 0; index < items.length; index++) {\n    const rand = index + Math.floor(Math.random() * (items.length - index));\n    const value = result[rand]!;\n    result[rand] = result[index]!;\n    result[index] = value;\n  }\n  return result;\n}\n"],"mappings":"mCAiCA,SAAgB,EAAQ,GAAG,EAAmC,CAC5D,OAAO,EAAM,EAAuB,EAAK,CAG3C,SAAS,EAAyB,EAA0B,CAC1D,IAAM,EAAS,CAAC,GAAG,EAAM,CACzB,IAAK,IAAI,EAAQ,EAAG,EAAQ,EAAM,OAAQ,IAAS,CACjD,IAAM,EAAO,EAAQ,KAAK,MAAM,KAAK,QAAQ,EAAI,EAAM,OAAS,GAAO,CACjE,EAAQ,EAAO,GACrB,EAAO,GAAQ,EAAO,GACtB,EAAO,GAAS,EAElB,OAAO"}