{"version":3,"file":"rangeutil.mjs","sources":["../../../src/datetime/rangeutil.ts"],"sourcesContent":["import { formatDateRange, t } from '@grafana/i18n';\n\nimport { RawTimeRange, TimeRange, TimeZone, IntervalValues, RelativeTimeRange, TimeOption } from '../types/time';\nimport { getFeatureToggle } from '../utils/featureToggles';\n\nimport * as dateMath from './datemath';\nimport { timeZoneAbbrevation, dateTimeFormat, dateTimeFormatTimeAgo, toIANATimezone } from './formatter';\nimport { isDateTime, DateTime, dateTime } from './moment_wrapper';\nimport { dateTimeParse } from './parser';\n\nconst spans: { [key: string]: { display: string; section?: number } } = {\n  s: { display: 'second' },\n  m: { display: 'minute' },\n  h: { display: 'hour' },\n  d: { display: 'day' },\n  w: { display: 'week' },\n  M: { display: 'month' },\n  y: { display: 'year' },\n};\n\nconst getLastNMinutesDisplay = (count: number) => {\n  return t('grafana-data.datetime.rangeutils.lastNMinutes', 'Last {{count}} minutes', {\n    count,\n    defaultValue_one: 'Last {{count}} minute',\n  });\n};\n\nconst getLastNHoursDisplay = (count: number) => {\n  return t('grafana-data.datetime.rangeutils.lastNHours', 'Last {{count}} hours', {\n    count,\n    defaultValue_one: 'Last {{count}} hour',\n  });\n};\n\nconst getLastNDaysDisplay = (count: number) => {\n  return t('grafana-data.datetime.rangeutils.lastNDays', 'Last {{count}} days', {\n    count,\n    defaultValue_one: 'Last {{count}} day',\n  });\n};\n\nconst getLastNMonthsDisplay = (count: number) => {\n  return t('grafana-data.datetime.rangeutils.lastNMonths', 'Last {{count}} months', {\n    count,\n    defaultValue_one: 'Last {{count}} month',\n  });\n};\n\nconst getLastNYearsDisplay = (count: number) => {\n  return t('grafana-data.datetime.rangeutils.lastNYears', 'Last {{count}} years', {\n    count,\n    defaultValue_one: 'Last {{count}} year',\n  });\n};\n\nconst getNextNMinutesDisplay = (count: number) => {\n  return t('grafana-data.datetime.rangeutils.nextNMinutes', 'Next {{count}} minutes', {\n    count,\n    defaultValue_one: 'Next {{count}} minute',\n  });\n};\n\nconst getNextNHoursDisplay = (count: number) => {\n  return t('grafana-data.datetime.rangeutils.nextNHours', 'Next {{count}} hours', {\n    count,\n    defaultValue_one: 'Next {{count}} hour',\n  });\n};\n\nconst getNextNDaysDisplay = (count: number) => {\n  return t('grafana-data.datetime.rangeutils.nextNDays', 'Next {{count}} days', {\n    count,\n    defaultValue_one: 'Next {{count}} day',\n  });\n};\n\nconst getNextNMonthsDisplay = (count: number) => {\n  return t('grafana-data.datetime.rangeutils.nextNMonths', 'Next {{count}} months', {\n    count,\n    defaultValue_one: 'Next {{count}} month',\n  });\n};\n\nconst getNextNYearsDisplay = (count: number) => {\n  return t('grafana-data.datetime.rangeutils.nextNYears', 'Next {{count}} years', {\n    count,\n    defaultValue_one: 'Next {{count}} year',\n  });\n};\n\nconst getBaseRangeOptions: () => TimeOption[] = () => [\n  { from: 'now/d', to: 'now/d', display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.today', 'Today') },\n  {\n    from: 'now/d',\n    to: 'now',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.todaySoFar', 'Today so far'),\n  },\n  {\n    from: 'now/w',\n    to: 'now/w',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisWeek', 'This week'),\n  },\n  {\n    from: 'now/w',\n    to: 'now',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisWeekSoFar', 'This week so far'),\n  },\n  {\n    from: 'now/M',\n    to: 'now/M',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisMonth', 'This month'),\n  },\n  {\n    from: 'now/M',\n    to: 'now',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisMonthSoFar', 'This month so far'),\n  },\n  {\n    from: 'now/y',\n    to: 'now/y',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisYear', 'This year'),\n  },\n  {\n    from: 'now/y',\n    to: 'now',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisYearSoFar', 'This year so far'),\n  },\n\n  {\n    from: 'now-1d/d',\n    to: 'now-1d/d',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.yesterday', 'Yesterday'),\n  },\n  {\n    from: 'now-2d/d',\n    to: 'now-2d/d',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.dayBeforeYesterday', 'Day before yesterday'),\n  },\n  {\n    from: 'now-7d/d',\n    to: 'now-7d/d',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisDayLastWeek', 'This day last week'),\n  },\n  {\n    from: 'now-1w/w',\n    to: 'now-1w/w',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.previousWeek', 'Previous week'),\n  },\n  {\n    from: 'now-1M/M',\n    to: 'now-1M/M',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.previousMonth', 'Previous month'),\n  },\n  {\n    from: 'now-1Q/fQ',\n    to: 'now-1Q/fQ',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.previousFiscalQuarter', 'Previous fiscal quarter'),\n  },\n  {\n    from: 'now-1y/y',\n    to: 'now-1y/y',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.previousYear', 'Previous year'),\n  },\n  {\n    from: 'now-1y/fy',\n    to: 'now-1y/fy',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.previousFiscalYear', 'Previous fiscal year'),\n  },\n\n  {\n    from: 'now-5m',\n    to: 'now',\n    display: getLastNMinutesDisplay(5),\n  },\n  {\n    from: 'now-15m',\n    to: 'now',\n    display: getLastNMinutesDisplay(15),\n  },\n  {\n    from: 'now-30m',\n    to: 'now',\n    display: getLastNMinutesDisplay(30),\n  },\n  {\n    from: 'now-1h',\n    to: 'now',\n    display: getLastNHoursDisplay(1),\n  },\n  {\n    from: 'now-3h',\n    to: 'now',\n    display: getLastNHoursDisplay(3),\n  },\n  {\n    from: 'now-6h',\n    to: 'now',\n    display: getLastNHoursDisplay(6),\n  },\n  {\n    from: 'now-12h',\n    to: 'now',\n    display: getLastNHoursDisplay(12),\n  },\n  {\n    from: 'now-24h',\n    to: 'now',\n    display: getLastNHoursDisplay(24),\n  },\n  {\n    from: 'now-2d',\n    to: 'now',\n    display: getLastNDaysDisplay(2),\n  },\n  {\n    from: 'now-7d',\n    to: 'now',\n    display: getLastNDaysDisplay(7),\n  },\n  {\n    from: 'now-30d',\n    to: 'now',\n    display: getLastNDaysDisplay(30),\n  },\n  {\n    from: 'now-90d',\n    to: 'now',\n    display: getLastNDaysDisplay(90),\n  },\n  {\n    from: 'now-6M',\n    to: 'now',\n    display: getLastNMonthsDisplay(6),\n  },\n  {\n    from: 'now-1y',\n    to: 'now',\n    display: getLastNYearsDisplay(1),\n  },\n  {\n    from: 'now-2y',\n    to: 'now',\n    display: getLastNYearsDisplay(2),\n  },\n  {\n    from: 'now-5y',\n    to: 'now',\n    display: getLastNYearsDisplay(5),\n  },\n  {\n    from: 'now/fQ',\n    to: 'now',\n    display: t(\n      'grafana-data.datetime.rangeutils.getBaseRangeOptions.thisFiscalQuarterSoFar',\n      'This fiscal quarter so far'\n    ),\n  },\n  {\n    from: 'now/fQ',\n    to: 'now/fQ',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisFiscalQuarter', 'This fiscal quarter'),\n  },\n  {\n    from: 'now/fy',\n    to: 'now',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisFiscalYearSoFar', 'This fiscal year so far'),\n  },\n  {\n    from: 'now/fy',\n    to: 'now/fy',\n    display: t('grafana-data.datetime.rangeutils.getBaseRangeOptions.thisFiscalYear', 'This fiscal year'),\n  },\n];\n\nconst getHiddenRangeOptions: () => TimeOption[] = () => [\n  {\n    from: 'now',\n    to: 'now+1m',\n    display: getNextNMinutesDisplay(1),\n  },\n  {\n    from: 'now',\n    to: 'now+5m',\n    display: getNextNMinutesDisplay(5),\n  },\n  {\n    from: 'now',\n    to: 'now+15m',\n    display: getNextNMinutesDisplay(15),\n  },\n  {\n    from: 'now',\n    to: 'now+30m',\n    display: getNextNMinutesDisplay(30),\n  },\n  {\n    from: 'now',\n    to: 'now+1h',\n    display: getNextNHoursDisplay(1),\n  },\n  {\n    from: 'now',\n    to: 'now+3h',\n    display: getNextNHoursDisplay(3),\n  },\n  {\n    from: 'now',\n    to: 'now+6h',\n    display: getNextNHoursDisplay(6),\n  },\n  {\n    from: 'now',\n    to: 'now+12h',\n    display: getNextNHoursDisplay(12),\n  },\n  {\n    from: 'now',\n    to: 'now+24h',\n    display: getNextNHoursDisplay(24),\n  },\n  {\n    from: 'now',\n    to: 'now+2d',\n    display: getNextNDaysDisplay(2),\n  },\n  {\n    from: 'now',\n    to: 'now+7d',\n    display: getNextNDaysDisplay(7),\n  },\n  {\n    from: 'now',\n    to: 'now+30d',\n    display: getNextNDaysDisplay(30),\n  },\n  {\n    from: 'now',\n    to: 'now+90d',\n    display: getNextNDaysDisplay(90),\n  },\n  {\n    from: 'now',\n    to: 'now+6M',\n    display: getNextNMonthsDisplay(6),\n  },\n  {\n    from: 'now',\n    to: 'now+1y',\n    display: getNextNYearsDisplay(1),\n  },\n  {\n    from: 'now',\n    to: 'now+2y',\n    display: getNextNYearsDisplay(2),\n  },\n  {\n    from: 'now',\n    to: 'now+5y',\n    display: getNextNYearsDisplay(5),\n  },\n];\n\nconst getStandardRangeOptions = () => [...getBaseRangeOptions(), ...getHiddenRangeOptions()];\n\nfunction findRangeInOptions(range: RawTimeRange, options: TimeOption[]) {\n  return options.find((option) => option.from === range.from && option.to === range.to);\n}\n\n// handles expressions like\n// 5m\n// 5m to now/d\n// now/d to now\n// now/d\n// if no to <expr> then to now is assumed\nexport function describeTextRange(expr: string): TimeOption {\n  const isLast = expr.indexOf('+') !== 0;\n  if (expr.indexOf('now') === -1) {\n    expr = (isLast ? 'now-' : 'now') + expr;\n  }\n\n  let opt = findRangeInOptions({ from: expr, to: 'now' }, getStandardRangeOptions());\n  if (opt) {\n    return opt;\n  }\n\n  if (isLast) {\n    opt = { from: expr, to: 'now', display: '' };\n  } else {\n    opt = { from: 'now', to: expr, display: '' };\n  }\n\n  const parts = /^now([-+])(\\d+)(\\w)/.exec(expr);\n  if (parts) {\n    const unit = parts[3];\n    const amount = parseInt(parts[2], 10);\n    const span = spans[unit];\n    if (span) {\n      opt.display = isLast ? 'Last ' : 'Next ';\n      opt.display += amount + ' ' + span.display;\n      opt.section = span.section;\n      if (amount > 1) {\n        opt.display += 's';\n      }\n    }\n  } else {\n    opt.display = opt.from + ' to ' + opt.to;\n    opt.invalid = true;\n  }\n\n  return opt;\n}\n\n// TODO: Should we keep these format presets somewhere common?\nconst rangeFormatShort: Intl.DateTimeFormatOptions = {\n  dateStyle: 'short',\n  timeStyle: 'short',\n};\n\nconst rangeFormatFull: Intl.DateTimeFormatOptions = {\n  dateStyle: 'short',\n  timeStyle: 'medium',\n};\n\n/**\n * Use this function to get a properly formatted string representation of a {@link @grafana/data:RawTimeRange | range}.\n *\n * @category TimeUtils\n * @param range - a time range (usually specified by the TimePicker)\n * @param timeZone - optional time zone.\n * @param quickRanges - optional dashboard's custom quick ranges to pick range names from.\n * @alpha\n */\nexport function describeTimeRange(range: RawTimeRange, timeZone?: TimeZone, quickRanges?: TimeOption[]): string {\n  const rangeOptions = quickRanges ? quickRanges.concat(getStandardRangeOptions()) : getStandardRangeOptions();\n  const option = findRangeInOptions(range, rangeOptions);\n\n  if (option) {\n    return option.display;\n  }\n\n  const options = { timeZone };\n\n  if (isDateTime(range.from) && isDateTime(range.to)) {\n    const fromDate = range.from.toDate();\n    const toDate = range.to.toDate();\n\n    if (!getFeatureToggle('localeFormatPreference')) {\n      return dateTimeFormat(range.from, options) + ' to ' + dateTimeFormat(range.to, options);\n    }\n\n    const hasSeconds = fromDate.getSeconds() !== 0 || toDate.getSeconds() !== 0;\n    const intlFormat = hasSeconds ? rangeFormatFull : rangeFormatShort;\n    const intlFormatOptions = {\n      ...intlFormat,\n      timeZone: timeZone ? toIANATimezone(timeZone) : undefined,\n    };\n\n    return formatDateRange(fromDate, toDate, intlFormatOptions);\n  }\n\n  // TODO: We could update these to all use Intl APIs.\n  // Could we use formatRangeToParts and replace the 'other side' with the ago formatting?\n  if (isDateTime(range.from)) {\n    const parsed = dateMath.parse(range.to, true, 'utc');\n    return parsed ? dateTimeFormat(range.from, options) + ' to ' + dateTimeFormatTimeAgo(parsed, options) : '';\n  }\n\n  if (isDateTime(range.to)) {\n    const parsed = dateMath.parse(range.from, false, 'utc');\n    return parsed ? dateTimeFormatTimeAgo(parsed, options) + ' to ' + dateTimeFormat(range.to, options) : '';\n  }\n\n  if (range.to.toString() === 'now') {\n    const res = describeTextRange(range.from);\n    return res.display;\n  }\n\n  return range.from.toString() + ' to ' + range.to.toString();\n}\n\nexport const isValidTimeSpan = (value: string) => {\n  if (value.indexOf('$') === 0 || value.indexOf('+$') === 0) {\n    return true;\n  }\n\n  const info = describeTextRange(value);\n  return info.invalid !== true;\n};\n\nexport const describeTimeRangeAbbreviation = (range: TimeRange, timeZone?: TimeZone) => {\n  if (isDateTime(range.from)) {\n    return timeZoneAbbrevation(range.from, { timeZone });\n  }\n  const parsed = dateMath.parse(range.from, true);\n  return parsed ? timeZoneAbbrevation(parsed, { timeZone }) : '';\n};\n\nexport const convertRawToRange = (\n  raw: RawTimeRange,\n  timeZone?: TimeZone,\n  fiscalYearStartMonth?: number,\n  format?: string\n): TimeRange => {\n  const from = dateTimeParse(raw.from, { roundUp: false, timeZone, fiscalYearStartMonth, format });\n  const to = dateTimeParse(raw.to, { roundUp: true, timeZone, fiscalYearStartMonth, format });\n\n  return {\n    from,\n    to,\n    raw: {\n      from: dateMath.isMathString(raw.from) ? raw.from : from,\n      to: dateMath.isMathString(raw.to) ? raw.to : to,\n    },\n  };\n};\n\nexport function isRelativeTime(v: DateTime | string) {\n  if (typeof v === 'string') {\n    return v.indexOf('now') >= 0;\n  }\n  return false;\n}\n\nexport function isFiscal(timeRange: TimeRange) {\n  if (typeof timeRange.raw.from === 'string' && timeRange.raw.from.indexOf('f') > 0) {\n    return true;\n  } else if (typeof timeRange.raw.to === 'string' && timeRange.raw.to.indexOf('f') > 0) {\n    return true;\n  }\n  return false;\n}\n\nexport function isRelativeTimeRange(raw: RawTimeRange): boolean {\n  return isRelativeTime(raw.from) || isRelativeTime(raw.to);\n}\n\nexport function secondsToHms(seconds: number): string {\n  const numYears = Math.floor(seconds / 31536000);\n  if (numYears) {\n    return numYears + 'y';\n  }\n  const numDays = Math.floor((seconds % 31536000) / 86400);\n  if (numDays) {\n    return numDays + 'd';\n  }\n  const numHours = Math.floor(((seconds % 31536000) % 86400) / 3600);\n  if (numHours) {\n    return numHours + 'h';\n  }\n  const numMinutes = Math.floor((((seconds % 31536000) % 86400) % 3600) / 60);\n  if (numMinutes) {\n    return numMinutes + 'm';\n  }\n  const numSeconds = Math.floor((((seconds % 31536000) % 86400) % 3600) % 60);\n  if (numSeconds) {\n    return numSeconds + 's';\n  }\n  const numMilliseconds = Math.floor(seconds * 1000.0);\n  if (numMilliseconds) {\n    return numMilliseconds + 'ms';\n  }\n\n  return 'less than a millisecond'; //'just now' //or other string you like;\n}\n\n// Format timeSpan (in sec) to string used in log's meta info\nexport function msRangeToTimeString(rangeMs: number): string {\n  const rangeSec = Number((rangeMs / 1000).toFixed());\n\n  const h = Math.floor(rangeSec / 60 / 60);\n  const m = Math.floor(rangeSec / 60) - h * 60;\n  const s = Number((rangeSec % 60).toFixed());\n  let formattedH = h ? h + 'h' : '';\n  let formattedM = m ? m + 'min' : '';\n  let formattedS = s ? s + 'sec' : '';\n\n  formattedH && formattedM ? (formattedH = formattedH + ' ') : (formattedH = formattedH);\n  (formattedM || formattedH) && formattedS ? (formattedM = formattedM + ' ') : (formattedM = formattedM);\n\n  return formattedH + formattedM + formattedS || 'less than 1sec';\n}\n\nexport function calculateInterval(range: TimeRange, resolution: number, lowLimitInterval?: string): IntervalValues {\n  let lowLimitMs = 1; // 1 millisecond default low limit\n  if (lowLimitInterval) {\n    lowLimitMs = intervalToMs(lowLimitInterval);\n  }\n\n  let intervalMs = roundInterval((range.to.valueOf() - range.from.valueOf()) / resolution);\n  if (lowLimitMs > intervalMs) {\n    intervalMs = lowLimitMs;\n  }\n  return {\n    intervalMs: intervalMs,\n    interval: secondsToHms(intervalMs / 1000),\n  };\n}\n\nconst interval_regex = /^(-?\\d+(?:\\.\\d+)?)(ms|[Mwdhmsy])/;\n// histogram & trends\nconst intervals_in_seconds: Record<string, number> = {\n  y: 31536000,\n  M: 2592000,\n  w: 604800,\n  d: 86400,\n  h: 3600,\n  m: 60,\n  s: 1,\n  ms: 0.001,\n};\n\nexport function describeInterval(str: string) {\n  // Default to seconds if no unit is provided\n  if (Number(str)) {\n    return {\n      sec: intervals_in_seconds.s,\n      type: 's',\n      count: parseInt(str, 10),\n    };\n  }\n\n  const matches = str.match(interval_regex);\n  if (!matches) {\n    throw new Error(\n      `Invalid interval string, has to be either unit-less or end with one of the following units: \"${Object.keys(\n        intervals_in_seconds\n      ).join(', ')}\"`\n    );\n  }\n\n  const sec = intervals_in_seconds[matches[2]];\n  if (sec === undefined) {\n    // this can never happen, because above we\n    // already made sure the key is correct,\n    // but we handle it to be safe.\n    throw new Error('describeInterval failed: invalid interval string');\n  }\n\n  return {\n    sec,\n    type: matches[2],\n    count: parseInt(matches[1], 10),\n  };\n}\n\nexport function intervalToSeconds(str: string): number {\n  const info = describeInterval(str);\n  return info.sec * info.count;\n}\n\nexport function intervalToMs(str: string): number {\n  const info = describeInterval(str);\n  return info.sec * 1000 * info.count;\n}\n\nexport function roundInterval(interval: number) {\n  switch (true) {\n    // 0.01s\n    case interval < 10:\n      return 1; // 0.001s\n    // 0.015s\n    case interval < 15:\n      return 10; // 0.01s\n    // 0.035s\n    case interval < 35:\n      return 20; // 0.02s\n    // 0.075s\n    case interval < 75:\n      return 50; // 0.05s\n    // 0.15s\n    case interval < 150:\n      return 100; // 0.1s\n    // 0.35s\n    case interval < 350:\n      return 200; // 0.2s\n    // 0.75s\n    case interval < 750:\n      return 500; // 0.5s\n    // 1.5s\n    case interval < 1500:\n      return 1000; // 1s\n    // 3.5s\n    case interval < 3500:\n      return 2000; // 2s\n    // 7.5s\n    case interval < 7500:\n      return 5000; // 5s\n    // 12.5s\n    case interval < 12500:\n      return 10000; // 10s\n    // 17.5s\n    case interval < 17500:\n      return 15000; // 15s\n    // 25s\n    case interval < 25000:\n      return 20000; // 20s\n    // 45s\n    case interval < 45000:\n      return 30000; // 30s\n    // 1.5m\n    case interval < 90000:\n      return 60000; // 1m\n    // 3.5m\n    case interval < 210000:\n      return 120000; // 2m\n    // 7.5m\n    case interval < 450000:\n      return 300000; // 5m\n    // 12.5m\n    case interval < 750000:\n      return 600000; // 10m\n    // 17.5m\n    case interval < 1050000:\n      return 900000; // 15m\n    // 25m\n    case interval < 1500000:\n      return 1200000; // 20m\n    // 45m\n    case interval < 2700000:\n      return 1800000; // 30m\n    // 1.5h\n    case interval < 5400000:\n      return 3600000; // 1h\n    // 2.5h\n    case interval < 9000000:\n      return 7200000; // 2h\n    // 4.5h\n    case interval < 16200000:\n      return 10800000; // 3h\n    // 9h\n    case interval < 32400000:\n      return 21600000; // 6h\n    // 1d\n    case interval < 86400000:\n      return 43200000; // 12h\n    // 1w\n    case interval < 604800000:\n      return 86400000; // 1d\n    // 3w\n    case interval < 1814400000:\n      return 604800000; // 1w\n    // 6w\n    case interval < 3628800000:\n      return 2592000000; // 30d\n    default:\n      return 31536000000; // 1y\n  }\n}\n\n/**\n * Converts a TimeRange to a RelativeTimeRange that can be used in\n * e.g. alerting queries/rules.\n *\n * @internal\n */\nexport function timeRangeToRelative(timeRange: TimeRange, now: DateTime = dateTime()): RelativeTimeRange {\n  const from = now.unix() - timeRange.from.unix();\n  const to = now.unix() - timeRange.to.unix();\n\n  return {\n    from,\n    to,\n  };\n}\n\n/**\n * Converts a RelativeTimeRange to a TimeRange\n *\n * @internal\n */\nexport function relativeToTimeRange(relativeTimeRange: RelativeTimeRange, now: DateTime = dateTime()): TimeRange {\n  const from = dateTime(now).subtract(relativeTimeRange.from, 's');\n  const to = relativeTimeRange.to === 0 ? dateTime(now) : dateTime(now).subtract(relativeTimeRange.to, 's');\n\n  return {\n    from,\n    to,\n    raw: { from, to },\n  };\n}\n\n/**\n * @internal\n * Returns a RawTimeRange that has been converted so that from and to are strings\n */\nexport function formatRawTimeRange(range: RawTimeRange): RawTimeRange {\n  return {\n    from: isDateTime(range.from) ? range.from.toISOString() : range.from,\n    to: isDateTime(range.to) ? range.to.toISOString() : range.to,\n  };\n}\n"],"names":["dateMath.parse","dateMath.isMathString"],"mappings":"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"}