{"version":3,"file":"misc.utils-Br_BHInb.cjs","names":["coll: T[]","filter: (val: T) => boolean","map: (val: T) => U","filter: (val: U) => boolean","arr: T[]","randomIdx: number","acc: Record<T, number>","value: T","original: T","extensions: U"],"sources":["../src/shared/misc.utils.ts"],"sourcesContent":["// Faster than .filter(...).map(...) # https://stackoverflow.com/a/47877054/2379922\nexport const filterMap = <T, U>(\n  coll: T[],\n  filter: (val: T) => boolean,\n  map: (val: T) => U,\n): Array<U> => {\n  return coll.reduce(\n    (acc, curr) => {\n      if (filter(curr)) {\n        acc.push(map(curr));\n      }\n\n      return acc;\n    },\n    [] as Array<U>,\n  );\n};\n\nexport const mapFilter = <T, U>(\n  coll: T[],\n  map: (val: T) => U,\n  filter: (val: U) => boolean,\n): Array<U> => {\n  return coll.reduce(\n    (acc, curr) => {\n      const mapped = map(curr);\n      if (filter(mapped)) {\n        acc.push(mapped);\n      }\n      return acc;\n    },\n    [] as Array<U>,\n  );\n};\n\nexport const randomChoice = <T>(arr: T[]): T =>\n  arr[Math.floor(Math.random() * arr.length)];\n\nexport const shuffleInplace = <T>(arr: T[]): T[] => {\n  let currIdx = arr.length;\n  let randomIdx: number;\n\n  while (currIdx !== 0) {\n    randomIdx = Math.floor(Math.random() * currIdx);\n    currIdx--;\n\n    const tmp = arr[currIdx];\n    arr[currIdx] = arr[randomIdx];\n    arr[randomIdx] = tmp;\n  }\n\n  return arr;\n};\n\nexport const shuffle = <T>(arr: T[]): T[] => {\n  const toShuffle = [...arr];\n\n  return shuffleInplace(toShuffle);\n};\n\nexport const counter = <T extends string | number | symbol>(\n  arr: T[],\n): Record<T, number> => {\n  return arr.reduce(\n    (acc: Record<T, number>, value: T) => {\n      acc[value] = (acc[value] || 0) + 1;\n      return acc;\n    },\n    {} as Record<T, number>,\n  );\n};\n\nexport const extend = <T, U extends Record<string, unknown>>(\n  original: T,\n  extensions: U,\n): T & U => {\n  //@ts-expect-error\n  return Object.assign(original, extensions);\n\n  // const res = original as T & U;\n  // //@ts-ignore\n  // for (const [k, v] of Object.entries(extensions)) res[k] = v;\n  //\n  // return res;\n};\n"],"mappings":";;;AACA,MAAa,YAAY,CACvBA,MACAC,QACAC,QACa;AACb,QAAO,KAAK,OACV,CAAC,KAAK,SAAS;AACb,MAAI,OAAO,KAAK,CACd,KAAI,KAAK,IAAI,KAAK,CAAC;AAGrB,SAAO;CACR,GACD,CAAE,EACH;AACF;AAED,MAAa,YAAY,CACvBF,MACAE,KACAC,WACa;AACb,QAAO,KAAK,OACV,CAAC,KAAK,SAAS;EACb,MAAM,SAAS,IAAI,KAAK;AACxB,MAAI,OAAO,OAAO,CAChB,KAAI,KAAK,OAAO;AAElB,SAAO;CACR,GACD,CAAE,EACH;AACF;AAED,MAAa,eAAe,CAAIC,QAC9B,IAAI,KAAK,MAAM,KAAK,QAAQ,GAAG,IAAI,OAAO;AAE5C,MAAa,iBAAiB,CAAIA,QAAkB;CAClD,IAAI,UAAU,IAAI;CAClB,IAAIC;AAEJ,QAAO,YAAY,GAAG;AACpB,cAAY,KAAK,MAAM,KAAK,QAAQ,GAAG,QAAQ;AAC/C;EAEA,MAAM,MAAM,IAAI;AAChB,MAAI,WAAW,IAAI;AACnB,MAAI,aAAa;CAClB;AAED,QAAO;AACR;AAED,MAAa,UAAU,CAAID,QAAkB;CAC3C,MAAM,YAAY,CAAC,GAAG,GAAI;AAE1B,QAAO,eAAe,UAAU;AACjC;AAED,MAAa,UAAU,CACrBA,QACsB;AACtB,QAAO,IAAI,OACT,CAACE,KAAwBC,UAAa;AACpC,MAAI,UAAU,IAAI,UAAU,KAAK;AACjC,SAAO;CACR,GACD,CAAE,EACH;AACF;AAED,MAAa,SAAS,CACpBC,UACAC,eACU;AAEV,QAAO,OAAO,OAAO,UAAU,WAAW;AAO3C"}