{"version":3,"sources":["../../src/use-date-format/format-date.ts"],"sourcesContent":["// mainly from https://github.com/vueuse/vueuse/blob/main/packages/shared/useDateFormat/index.ts\n\nimport { isString } from '../utils/basic'\n\nconst REGEX = /* #__PURE__ */ {\n  parse: /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,\n  conventionSymbol:\n    /[YMDHhms]o|\\[([^\\]]+)\\]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|S{1,3}/g,\n  unicodeSymbol: /\\[([^\\]]+)]|y{2,4}|M{1,4}|d{1,2}|e{3,5}|H{1,2}|h{1,2}|a{4}|m{1,2}|s{1,2}|S{1,3}/g,\n} as const\n\nexport const defaultMeridiem = (hours: number, minutes: number, isLowercase?: boolean, hasPeriod?: boolean): string => {\n  let m = hours < 12 ? 'AM' : 'PM'\n  if (hasPeriod) m = m.split('').reduce((acc, curr) => `${acc}${curr}.`, '')\n  return isLowercase ? m.toLowerCase() : m\n}\n\nexport const formatOrdinal = (num: number): string => {\n  const suffixes = ['th', 'st', 'nd', 'rd']\n  const v = num % 100\n  return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0])\n}\n\nexport type FormatDateOptions = {\n  /**\n   * Whether to use Unicode date symbols.\n   *\n   * @see https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n   *\n   * @defaultValue false\n   */\n  unicodeSymbols?: boolean\n  /**\n   * The locales argument indicates the locale to use.\n   */\n  locales?: Intl.LocalesArgument\n  /**\n   * A custom function to format the meridiem.\n   */\n  customMeridiem?: (hours: number, minutes: number, isLowercase?: boolean, hasPeriod?: boolean) => string\n}\n\nexport const formatDate = (date: Date, formatStr: string, options: FormatDateOptions = {}): string => {\n  const years = date.getFullYear()\n  const month = date.getMonth()\n  const days = date.getDate()\n  const hours = date.getHours()\n  const minutes = date.getMinutes()\n  const seconds = date.getSeconds()\n  const milliseconds = date.getMilliseconds()\n  const day = date.getDay()\n  const meridiem = options.customMeridiem ?? defaultMeridiem\n\n  const matches: {\n    conventionSymbol: Record<string, () => string | number>\n    unicodeSymbol: Record<string, () => string | number>\n  } = {\n    conventionSymbol: {\n      Yo: () => formatOrdinal(years),\n      YY: () => String(years).slice(-2),\n      YYYY: () => years,\n      M: () => month + 1,\n      Mo: () => formatOrdinal(month + 1),\n      MM: () => `${month + 1}`.padStart(2, '0'),\n      MMM: () => date.toLocaleDateString(options.locales, { month: 'short' }),\n      MMMM: () => date.toLocaleDateString(options.locales, { month: 'long' }),\n      D: () => String(days),\n      Do: () => formatOrdinal(days),\n      DD: () => `${days}`.padStart(2, '0'),\n      H: () => String(hours),\n      Ho: () => formatOrdinal(hours),\n      HH: () => `${hours}`.padStart(2, '0'),\n      h: () => `${hours % 12 || 12}`.padStart(1, '0'),\n      ho: () => formatOrdinal(hours % 12 || 12),\n      hh: () => `${hours % 12 || 12}`.padStart(2, '0'),\n      m: () => String(minutes),\n      mo: () => formatOrdinal(minutes),\n      mm: () => `${minutes}`.padStart(2, '0'),\n      s: () => String(seconds),\n      so: () => formatOrdinal(seconds),\n      ss: () => `${seconds}`.padStart(2, '0'),\n      S: () => `${milliseconds}`.padStart(3, '0').slice(0, 1),\n      SS: () => `${milliseconds}`.padStart(3, '0').slice(0, 2),\n      SSS: () => `${milliseconds}`.padStart(3, '0'),\n      d: () => day,\n      dd: () => date.toLocaleDateString(options.locales, { weekday: 'narrow' }),\n      ddd: () => date.toLocaleDateString(options.locales, { weekday: 'short' }),\n      dddd: () => date.toLocaleDateString(options.locales, { weekday: 'long' }),\n      A: () => meridiem(hours, minutes),\n      AA: () => meridiem(hours, minutes, false, true),\n      a: () => meridiem(hours, minutes, true),\n      aa: () => meridiem(hours, minutes, true, true),\n    },\n\n    unicodeSymbol: {\n      yy: () => String(years).slice(-2),\n      yyyy: () => years,\n      M: () => month + 1,\n      MM: () => `${month + 1}`.padStart(2, '0'),\n      MMM: () => date.toLocaleDateString(options.locales, { month: 'short' }),\n      MMMM: () => date.toLocaleDateString(options.locales, { month: 'long' }),\n      d: () => String(days),\n      dd: () => `${days}`.padStart(2, '0'),\n      H: () => String(hours),\n      HH: () => `${hours}`.padStart(2, '0'),\n      h: () => `${hours % 12 || 12}`,\n      hh: () => `${hours % 12 || 12}`.padStart(2, '0'),\n      m: () => String(minutes),\n      mm: () => `${minutes}`.padStart(2, '0'),\n      s: () => String(seconds),\n      ss: () => `${seconds}`.padStart(2, '0'),\n      S: () => `${milliseconds}`.padStart(3, '0').slice(0, 1),\n      SS: () => `${milliseconds}`.padStart(3, '0').slice(0, 2),\n      SSS: () => `${milliseconds}`.padStart(3, '0'),\n      eeeee: () => date.toLocaleDateString(options.locales, { weekday: 'narrow' }),\n      eee: () => date.toLocaleDateString(options.locales, { weekday: 'short' }),\n      eeee: () => date.toLocaleDateString(options.locales, { weekday: 'long' }),\n      aaaa: () => meridiem(hours, minutes, true, false),\n    },\n  }\n\n  const isUnicodeSymbol = options.unicodeSymbols === true\n\n  function formatDateBySymbolType(formatStr: string, symbol: 'unicodeSymbol' | 'conventionSymbol') {\n    return formatStr.replace(REGEX[symbol], (match, $1) => $1 ?? matches[symbol][match]?.() ?? match)\n  }\n\n  return formatDateBySymbolType(formatStr, isUnicodeSymbol ? 'unicodeSymbol' : 'conventionSymbol')\n}\n\nexport type DateLike = Date | number | string\n\nexport function normalizeDate(date: DateLike | null | undefined): Date {\n  if (date === null) return new Date(Number.NaN) // null is invalid\n  if (date === undefined) return new Date()\n  if (date instanceof Date) return new Date(date)\n\n  if (isString(date) && !/Z$/i.test(date)) {\n    const d = date.match(REGEX.parse)\n\n    if (d) {\n      const m = +d[2] - 1 || 0\n      const ms = (d[7] || '0').substring(0, 3)\n      return new Date(+d[1], m, +d[3] || 1, +d[4] || 0, +d[5] || 0, +d[6] || 0, +ms)\n    }\n  }\n\n  return new Date(date)\n}\n"],"names":["defaultMeridiem","formatDate","formatOrdinal","normalizeDate","REGEX","parse","conventionSymbol","unicodeSymbol","hours","minutes","isLowercase","hasPeriod","m","split","reduce","acc","curr","toLowerCase","num","suffixes","v","date","formatStr","options","formatDateBySymbolType","symbol","replace","match","$1","matches","years","getFullYear","month","getMonth","days","getDate","getHours","getMinutes","seconds","getSeconds","milliseconds","getMilliseconds","day","getDay","meridiem","customMeridiem","Yo","YY","String","slice","YYYY","M","Mo","MM","padStart","MMM","toLocaleDateString","locales","MMMM","D","Do","DD","H","Ho","HH","h","ho","hh","mo","mm","s","so","ss","S","SS","SSS","d","dd","weekday","ddd","dddd","A","AA","a","aa","yy","yyyy","eeeee","eee","eeee","aaaa","isUnicodeSymbol","unicodeSymbols","Date","Number","NaN","undefined","isString","test","ms","substring"],"mappings":"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"}