{"version":3,"sources":["../src/asNumber.ts","../src/median.ts"],"sourcesContent":["/**\n * Coerce `u` into a number if possible, otherwise just return 0.\n */\nexport function asNumber(u: unknown, defaultValue = 0): number {\n  // If u is a valid number, return it.\n  if (typeof u === \"number\") {\n    return isFinite(u) ? u : defaultValue;\n  }\n\n  // Try to make into a number if not already a number.\n  u = Number(u);\n\n  // If u is a valid number, return it.\n  if (typeof u === \"number\" && isFinite(u)) {\n    return u;\n  }\n\n  // Return `defaultValue` for everything else. This is usually ok if want to\n  // just ignore all other noise.\n  return defaultValue;\n}\n","import { asNumber } from \"./asNumber\";\n\n/**\n * Compute the median (middle number) of all the numbers in the given array.\n * Non-numbers will be coerced into numbers if possible.\n */\nexport function median(numbers: unknown[]): number {\n  if (numbers.length === 0) {\n    return 0;\n  }\n\n  // Create a copy with slice() to avoid mutating the original array.\n  const sorted = numbers\n    .map(asNumber)\n    .slice()\n    .sort((a, b) => a - b);\n\n  const middleIndex = Math.floor(sorted.length / 2);\n\n  // Is odd length -> return middle number.\n  if (sorted.length % 2 === 1) {\n    return sorted[middleIndex];\n  }\n\n  // Is even length -> return mean of middle 2 numbers.\n  const value1 = sorted[middleIndex - 1];\n  const value2 = sorted[middleIndex];\n  return (value1 + value2) / 2;\n}\n"],"mappings":"AAGO,SAASA,EAASC,EAAYC,EAAe,EAAW,CAE7D,OAAI,OAAOD,GAAM,SACR,SAASA,CAAC,EAAIA,EAAIC,GAI3BD,EAAI,OAAOA,CAAC,EAGR,OAAOA,GAAM,UAAY,SAASA,CAAC,EAC9BA,EAKFC,EACT,CCdO,SAASC,EAAOC,EAA4B,CACjD,GAAIA,EAAQ,SAAW,EACrB,MAAO,GAIT,IAAMC,EAASD,EACZ,IAAIE,CAAQ,EACZ,MAAM,EACN,KAAK,CAACC,EAAGC,IAAMD,EAAIC,CAAC,EAEjBC,EAAc,KAAK,MAAMJ,EAAO,OAAS,CAAC,EAGhD,GAAIA,EAAO,OAAS,IAAM,EACxB,OAAOA,EAAOI,CAAW,EAI3B,IAAMC,EAASL,EAAOI,EAAc,CAAC,EAC/BE,EAASN,EAAOI,CAAW,EACjC,OAAQC,EAASC,GAAU,CAC7B","names":["asNumber","u","defaultValue","median","numbers","sorted","asNumber","a","b","middleIndex","value1","value2"]}