{"version":3,"file":"dateTimeFormatters.cjs","sources":["../../../src/valueFormats/dateTimeFormatters.ts"],"sourcesContent":["import { localTimeFormat, systemDateFormats } from '../datetime/formats';\nimport { dateTimeFormat, dateTimeFormatTimeAgo } from '../datetime/formatter';\nimport { toDuration as duration, toUtc, dateTime } from '../datetime/moment_wrapper';\nimport { DecimalCount } from '../types/displayValue';\nimport { TimeZone } from '../types/time';\n\nimport { toFixed, toFixedScaled, FormattedValue, ValueFormatter } from './valueFormats';\n\ninterface IntervalsInSeconds {\n  [interval: string]: number;\n}\n\nexport enum Interval {\n  Year = 'year',\n  Month = 'month',\n  Week = 'week',\n  Day = 'day',\n  Hour = 'hour',\n  Minute = 'minute',\n  Second = 'second',\n  Millisecond = 'millisecond',\n}\n\nconst UNITS = [\n  Interval.Year,\n  Interval.Month,\n  Interval.Week,\n  Interval.Day,\n  Interval.Hour,\n  Interval.Minute,\n  Interval.Second,\n  Interval.Millisecond,\n];\n\nconst INTERVALS_IN_SECONDS: IntervalsInSeconds = {\n  [Interval.Year]: 31536000,\n  [Interval.Month]: 2592000,\n  [Interval.Week]: 604800,\n  [Interval.Day]: 86400,\n  [Interval.Hour]: 3600,\n  [Interval.Minute]: 60,\n  [Interval.Second]: 1,\n  [Interval.Millisecond]: 0.001,\n};\n\nexport function toNanoSeconds(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 1000) {\n    return { text: toFixed(size, decimals), suffix: ' ns' };\n  } else if (Math.abs(size) < 1000000) {\n    return toFixedScaled(size / 1000, decimals, ' µs');\n  } else if (Math.abs(size) < 1000000000) {\n    return toFixedScaled(size / 1000000, decimals, ' ms');\n  } else if (Math.abs(size) < 60000000000) {\n    return toFixedScaled(size / 1000000000, decimals, ' s');\n  } else if (Math.abs(size) < 3600000000000) {\n    return toFixedScaled(size / 60000000000, decimals, ' min');\n  } else if (Math.abs(size) < 86400000000000) {\n    return toFixedScaled(size / 3600000000000, decimals, ' hour');\n  } else {\n    return toFixedScaled(size / 86400000000000, decimals, ' day');\n  }\n}\n\nexport function toMicroSeconds(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 1000) {\n    return { text: toFixed(size, decimals), suffix: ' µs' };\n  } else if (Math.abs(size) < 1000000) {\n    return toFixedScaled(size / 1000, decimals, ' ms');\n  } else {\n    return toFixedScaled(size / 1000000, decimals, ' s');\n  }\n}\n\nexport function toMilliSeconds(size: number, decimals?: DecimalCount, scaledDecimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 1000) {\n    return { text: toFixed(size, decimals), suffix: ' ms' };\n  } else if (Math.abs(size) < 60000) {\n    // Less than 1 min\n    return toFixedScaled(size / 1000, decimals, ' s');\n  } else if (Math.abs(size) < 3600000) {\n    // Less than 1 hour, divide in minutes\n    return toFixedScaled(size / 60000, decimals, ' min');\n  } else if (Math.abs(size) < 86400000) {\n    // Less than one day, divide in hours\n    return toFixedScaled(size / 3600000, decimals, ' hour');\n  } else if (Math.abs(size) < 31536000000) {\n    // Less than one year, divide in days\n    return toFixedScaled(size / 86400000, decimals, ' day');\n  }\n\n  return toFixedScaled(size / 31536000000, decimals, ' year');\n}\n\nexport function toSeconds(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  // If 0, use s unit instead of ns\n  if (size === 0) {\n    return { text: '0', suffix: ' s' };\n  }\n\n  // Less than 1 µs, divide in ns\n  if (Math.abs(size) < 0.000001) {\n    return toFixedScaled(size * 1e9, decimals, ' ns');\n  }\n  // Less than 1 ms, divide in µs\n  if (Math.abs(size) < 0.001) {\n    return toFixedScaled(size * 1e6, decimals, ' µs');\n  }\n  // Less than 1 second, divide in ms\n  if (Math.abs(size) < 1) {\n    return toFixedScaled(size * 1e3, decimals, ' ms');\n  }\n\n  if (Math.abs(size) < 60) {\n    return { text: toFixed(size, decimals), suffix: ' s' };\n  } else if (Math.abs(size) < 3600) {\n    // Less than 1 hour, divide in minutes\n    return toFixedScaled(size / 60, decimals, ' min');\n  } else if (Math.abs(size) < 86400) {\n    // Less than one day, divide in hours\n    return toFixedScaled(size / 3600, decimals, ' hour');\n  } else if (Math.abs(size) < 604800) {\n    // Less than one week, divide in days\n    return toFixedScaled(size / 86400, decimals, ' day');\n  } else if (Math.abs(size) < 31536000) {\n    // Less than one year, divide in week\n    return toFixedScaled(size / 604800, decimals, ' week');\n  }\n\n  return toFixedScaled(size / 3.15569e7, decimals, ' year');\n}\n\nexport function toMinutes(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 60) {\n    return { text: toFixed(size, decimals), suffix: ' min' };\n  } else if (Math.abs(size) < 1440) {\n    return toFixedScaled(size / 60, decimals, ' hour');\n  } else if (Math.abs(size) < 10080) {\n    return toFixedScaled(size / 1440, decimals, ' day');\n  } else if (Math.abs(size) < 604800) {\n    return toFixedScaled(size / 10080, decimals, ' week');\n  } else {\n    return toFixedScaled(size / 5.25948e5, decimals, ' year');\n  }\n}\n\nexport function toHours(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 24) {\n    return { text: toFixed(size, decimals), suffix: ' hour' };\n  } else if (Math.abs(size) < 168) {\n    return toFixedScaled(size / 24, decimals, ' day');\n  } else if (Math.abs(size) < 8760) {\n    return toFixedScaled(size / 168, decimals, ' week');\n  } else {\n    return toFixedScaled(size / 8760, decimals, ' year');\n  }\n}\n\nexport function toDays(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 7) {\n    return toFixedScaled(size, decimals, ' day');\n  } else if (Math.abs(size) < 365) {\n    return toFixedScaled(size / 7, decimals, ' week');\n  } else {\n    return toFixedScaled(size / 365, decimals, ' year');\n  }\n}\n\nexport function toDuration(size: number, decimals: DecimalCount, timeScale: Interval): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (size === 0) {\n    return { text: '0', suffix: ' ' + timeScale + 's' };\n  }\n\n  if (size < 0) {\n    const v = toDuration(-size, decimals, timeScale);\n    if (!v.suffix) {\n      v.suffix = '';\n    }\n    v.suffix += ' ago';\n    return v;\n  }\n\n  // convert $size to milliseconds\n  // intervals_in_seconds uses seconds (duh), convert them to milliseconds here to minimize floating point errors\n  size *= INTERVALS_IN_SECONDS[timeScale] * 1000;\n\n  const strings = [];\n\n  // after first value >= 1 print only $decimals more\n  let decrementDecimals = false;\n  let decimalsCount = 0;\n\n  if (decimals !== null && decimals !== undefined) {\n    decimalsCount = decimals;\n  }\n\n  for (let i = 0; i < UNITS.length && decimalsCount >= 0; i++) {\n    const interval = INTERVALS_IN_SECONDS[UNITS[i]] * 1000;\n    const value = size / interval;\n    if (value >= 1 || decrementDecimals) {\n      decrementDecimals = true;\n      const floor = Math.floor(value);\n      const unit = UNITS[i] + (floor !== 1 ? 's' : '');\n      strings.push(floor + ' ' + unit);\n      size = size % interval;\n      decimalsCount--;\n    }\n  }\n\n  return { text: strings.join(', ') };\n}\n\nexport function toClock(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  // < 1 second\n  if (size < 1000) {\n    return {\n      text: toUtc(size).format('SSS\\\\m\\\\s'),\n    };\n  }\n\n  // < 1 minute\n  if (size < 60000) {\n    let format = 'ss\\\\s:SSS\\\\m\\\\s';\n    if (decimals === 0) {\n      format = 'ss\\\\s';\n    }\n    return { text: toUtc(size).format(format) };\n  }\n\n  // < 1 hour\n  if (size < 3600000) {\n    let format = 'mm\\\\m:ss\\\\s:SSS\\\\m\\\\s';\n    if (decimals === 0) {\n      format = 'mm\\\\m';\n    } else if (decimals === 1) {\n      format = 'mm\\\\m:ss\\\\s';\n    }\n    return { text: toUtc(size).format(format) };\n  }\n\n  let format = 'mm\\\\m:ss\\\\s:SSS\\\\m\\\\s';\n\n  const hours = `${Math.floor(duration(size, 'milliseconds').asHours())}h`;\n\n  if (decimals === 0) {\n    format = '';\n  } else if (decimals === 1) {\n    format = 'mm\\\\m';\n  } else if (decimals === 2) {\n    format = 'mm\\\\m:ss\\\\s';\n  }\n\n  const text = format ? `${hours}:${toUtc(size).format(format)}` : hours;\n  return { text };\n}\n\nexport function toDurationInMilliseconds(size: number, decimals: DecimalCount): FormattedValue {\n  return toDuration(size, decimals, Interval.Millisecond);\n}\n\nexport function toDurationInSeconds(size: number, decimals: DecimalCount): FormattedValue {\n  return toDuration(size, decimals, Interval.Second);\n}\n\nexport function toDurationInHoursMinutesSeconds(size: number): FormattedValue {\n  if (size < 0) {\n    const v = toDurationInHoursMinutesSeconds(-size);\n    if (!v.suffix) {\n      v.suffix = '';\n    }\n    v.suffix += ' ago';\n    return v;\n  }\n  const strings = [];\n  const numHours = Math.floor(size / 3600);\n  const numMinutes = Math.floor((size % 3600) / 60);\n  const numSeconds = Math.floor((size % 3600) % 60);\n  numHours > 9 ? strings.push('' + numHours) : strings.push('0' + numHours);\n  numMinutes > 9 ? strings.push('' + numMinutes) : strings.push('0' + numMinutes);\n  numSeconds > 9 ? strings.push('' + numSeconds) : strings.push('0' + numSeconds);\n  return { text: strings.join(':') };\n}\n\nexport function toDurationInDaysHoursMinutesSeconds(size: number): FormattedValue {\n  if (size < 0) {\n    const v = toDurationInDaysHoursMinutesSeconds(-size);\n    if (!v.suffix) {\n      v.suffix = '';\n    }\n    v.suffix += ' ago';\n    return v;\n  }\n  let dayString = '';\n  const numDays = Math.floor(size / (24 * 3600));\n  if (numDays > 0) {\n    dayString = numDays + ' d ';\n  }\n  const hmsString = toDurationInHoursMinutesSeconds(size - numDays * 24 * 3600);\n  return { text: dayString + hmsString.text };\n}\n\nexport function toTimeTicks(size: number, decimals: DecimalCount): FormattedValue {\n  return toSeconds(size / 100, decimals);\n}\n\nexport function toClockMilliseconds(size: number, decimals: DecimalCount): FormattedValue {\n  return toClock(size, decimals);\n}\n\nexport function toClockSeconds(size: number, decimals: DecimalCount): FormattedValue {\n  return toClock(size * 1000, decimals);\n}\n\nexport function toDateTimeValueFormatter(pattern: string, todayPattern?: string): ValueFormatter {\n  return (value: number, decimals: DecimalCount, scaledDecimals: DecimalCount, timeZone?: TimeZone): FormattedValue => {\n    if (todayPattern) {\n      if (dateTime().isSame(value, 'day')) {\n        return {\n          text: dateTimeFormat(value, { format: todayPattern, timeZone }),\n        };\n      }\n    }\n    return { text: dateTimeFormat(value, { format: pattern, timeZone }) };\n  };\n}\n\nexport const dateTimeAsIso = toDateTimeValueFormatter('YYYY-MM-DD HH:mm:ss');\nexport const dateTimeAsIsoNoDateIfToday = toDateTimeValueFormatter('YYYY-MM-DD HH:mm:ss', 'HH:mm:ss');\nexport const dateTimeAsUS = toDateTimeValueFormatter('MM/DD/YYYY h:mm:ss a');\nexport const dateTimeAsUSNoDateIfToday = toDateTimeValueFormatter('MM/DD/YYYY h:mm:ss a', 'h:mm:ss a');\n\nexport function getDateTimeAsLocalFormat() {\n  return toDateTimeValueFormatter(\n    localTimeFormat({\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit',\n    })\n  );\n}\n\nexport function getDateTimeAsLocalFormatNoDateIfToday() {\n  return toDateTimeValueFormatter(\n    localTimeFormat({\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit',\n    }),\n    localTimeFormat({\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit',\n    })\n  );\n}\n\nexport function dateTimeSystemFormatter(\n  value: number,\n  decimals: DecimalCount,\n  scaledDecimals: DecimalCount,\n  timeZone?: TimeZone,\n  showMs?: boolean\n): FormattedValue {\n  return {\n    text: dateTimeFormat(value, {\n      format: showMs ? systemDateFormats.fullDateMS : systemDateFormats.fullDate,\n      timeZone,\n    }),\n  };\n}\n\nexport function dateTimeFromNow(\n  value: number,\n  decimals: DecimalCount,\n  scaledDecimals: DecimalCount,\n  timeZone?: TimeZone\n): FormattedValue {\n  return { text: dateTimeFormatTimeAgo(value, { timeZone }) };\n}\n"],"names":["Interval","toFixed","toFixedScaled","toUtc","format","duration","dateTime","dateTimeFormat","localTimeFormat","systemDateFormats","dateTimeFormatTimeAgo"],"mappings":"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"}