{"version":3,"file":"sortBy.cjs","names":[],"sources":["../../src/collection/sortBy.ts"],"sourcesContent":["/**\n * Creates an array of elements, sorted in ascending order by the results of running each element thru iteratee\n * @param collection - The collection to iterate over\n * @param iteratees - The iteratees to sort by\n * @returns Returns the new sorted array\n * @example\n * const users = [\n *   { name: 'John', age: 30 },\n *   { name: 'Jane', age: 25 }\n * ];\n * sortBy(users, 'age');\n * // => [{name: 'Jane', age: 25}, {name: 'John', age: 30}]\n */\nexport function sortBy<T>(\n  collection: T[],\n  iteratees: ((item: T) => unknown) | string | Array<((item: T) => unknown) | string>,\n): T[] {\n  const iterateeArray = Array.isArray(iteratees) ? iteratees : [iteratees];\n\n  return [...collection].sort((a, b) => {\n    for (const iteratee of iterateeArray) {\n      let aVal: unknown;\n      let bVal: unknown;\n\n      if (typeof iteratee === 'function') {\n        aVal = iteratee(a);\n        bVal = iteratee(b);\n      } else if (typeof iteratee === 'string') {\n        aVal = (a as Record<string, unknown>)[iteratee];\n        bVal = (b as Record<string, unknown>)[iteratee];\n      } else {\n        aVal = a;\n        bVal = b;\n      }\n\n      const left = aVal as string | number;\n      const right = bVal as string | number;\n      if (left < right) return -1;\n      if (left > right) return 1;\n    }\n\n    return 0;\n  });\n}\n"],"mappings":";;;;;;;;;;;;;;;AAaA,SAAgB,OACd,YACA,WACK;CACL,MAAM,gBAAgB,MAAM,QAAQ,SAAS,IAAI,YAAY,CAAC,SAAS;CAEvE,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC,MAAM,GAAG,MAAM;EACpC,KAAK,MAAM,YAAY,eAAe;GACpC,IAAI;GACJ,IAAI;GAEJ,IAAI,OAAO,aAAa,YAAY;IAClC,OAAO,SAAS,CAAC;IACjB,OAAO,SAAS,CAAC;GACnB,OAAO,IAAI,OAAO,aAAa,UAAU;IACvC,OAAQ,EAA8B;IACtC,OAAQ,EAA8B;GACxC,OAAO;IACL,OAAO;IACP,OAAO;GACT;GAEA,MAAM,OAAO;GACb,MAAM,QAAQ;GACd,IAAI,OAAO,OAAO,OAAO;GACzB,IAAI,OAAO,OAAO,OAAO;EAC3B;EAEA,OAAO;CACT,CAAC;AACH"}