{"version":3,"file":"fieldComparers.cjs","sources":["../../../src/field/fieldComparers.ts"],"sourcesContent":["import { isNumber } from 'lodash';\n\nimport { isDateTimeInput, dateTime } from '../datetime/moment_wrapper';\nimport { Field, FieldType } from '../types/dataFrame';\n\ntype IndexComparer = (a: number, b: number) => number;\n\nexport const fieldIndexComparer = (field: Field, reverse = false): IndexComparer => {\n  const values = field.values;\n\n  switch (field.type) {\n    case FieldType.number:\n      return numericIndexComparer(values, reverse);\n    case FieldType.string:\n      return stringIndexComparer(values, reverse);\n    case FieldType.boolean:\n      return booleanIndexComparer(values, reverse);\n    case FieldType.time:\n      if (typeof field.values[0] === 'number') {\n        return timestampIndexComparer(values, reverse, field.nanos);\n      }\n      return timeIndexComparer(values, reverse, field.nanos);\n    default:\n      return naturalIndexComparer(reverse);\n  }\n};\n\nconst timeComparer = (a: unknown, b: unknown): number => {\n  if (!a || !b) {\n    return falsyComparer(a, b);\n  }\n\n  if (isNumber(a) && isNumber(b)) {\n    return numericComparer(a, b);\n  }\n\n  if (isDateTimeInput(a) && isDateTimeInput(b)) {\n    if (dateTime(a).isBefore(b)) {\n      return -1;\n    }\n\n    if (dateTime(b).isBefore(a)) {\n      return 1;\n    }\n  }\n\n  return 0;\n};\n\nconst numericComparer = (a: number, b: number): number => {\n  return a - b;\n};\n\n// Using the Intl.Collator object compare method results in much faster\n// string sorting than .localeCompare\nconst compare = new Intl.Collator('en', { sensitivity: 'base' }).compare;\n\nconst stringComparer = (a: string, b: string): number => {\n  if (!a || !b) {\n    return falsyComparer(a, b);\n  }\n\n  return compare(String(a), String(b));\n};\n\nconst booleanComparer = (a: boolean, b: boolean): number => {\n  return falsyComparer(a, b);\n};\n\nconst falsyComparer = (a: unknown, b: unknown): number => {\n  if (!a && b) {\n    return 1;\n  }\n\n  if (a && !b) {\n    return -1;\n  }\n\n  return 0;\n};\n\nconst timestampIndexComparer = (values: number[], reverse: boolean, nanos?: number[]): IndexComparer => {\n  let mult = reverse ? -1 : 1;\n\n  if (nanos !== undefined) {\n    return (a: number, b: number): number => mult * (values[a] - values[b] || nanos[a] - nanos[b]);\n  }\n\n  return (a: number, b: number): number => mult * (values[a] - values[b]);\n};\n\nconst timeIndexComparer = (values: unknown[], reverse: boolean, nanos?: number[]): IndexComparer => {\n  const mult = reverse ? -1 : 1;\n\n  if (nanos !== undefined) {\n    return (a: number, b: number): number => mult * (timeComparer(values[a], values[b]) || nanos[a] - nanos[b]);\n  }\n\n  return (a: number, b: number): number => mult * timeComparer(values[a], values[b]);\n};\n\nconst booleanIndexComparer = (values: boolean[], reverse: boolean): IndexComparer => {\n  return (a: number, b: number): number => {\n    const vA = values[a];\n    const vB = values[b];\n    return reverse ? booleanComparer(vB, vA) : booleanComparer(vA, vB);\n  };\n};\n\nconst numericIndexComparer = (values: number[], reverse: boolean): IndexComparer => {\n  return (a: number, b: number): number => {\n    const vA = values[a];\n    const vB = values[b];\n    return reverse ? numericComparer(vB, vA) : numericComparer(vA, vB);\n  };\n};\n\nconst stringIndexComparer = (values: string[], reverse: boolean): IndexComparer => {\n  return (a: number, b: number): number => {\n    const vA = values[a];\n    const vB = values[b];\n    return reverse ? stringComparer(vB, vA) : stringComparer(vA, vB);\n  };\n};\n\nconst naturalIndexComparer = (reverse: boolean): IndexComparer => {\n  return (a: number, b: number): number => {\n    return reverse ? numericComparer(b, a) : numericComparer(a, b);\n  };\n};\n"],"names":["FieldType","isNumber","isDateTimeInput","dateTime"],"mappings":"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"}