{"version":3,"file":"helper.cjs","sources":["../../../components/time-ago/helper.ts"],"sourcesContent":["import { getCountWord, makeSentence } from '@vexip-ui/config'\nimport {\n  DAY_ON_MILLISECONDS,\n  HOUR_ON_MILLISECONDS,\n  MINUTE_ON_MILLISECONDS,\n  SECOND_ON_MILLISECONDS,\n} from '@vexip-ui/utils'\n\nimport type { Ref } from 'vue'\n\nexport interface TimeAgoRecord {\n  datetime: Date,\n  timeAgo: Ref<string>,\n  locale: Ref<Record<string, string>>,\n  wordSpace: Ref<boolean>,\n  interval: false | number,\n  updated: number\n}\n\nlet id = 1\n\nexport function getId() {\n  return id++\n}\n\nconst recordMap = new Map<number, TimeAgoRecord>()\n\nlet timer: ReturnType<typeof setInterval>\nlet isRunning: boolean\n\nexport function subscribe(id: number, record: TimeAgoRecord) {\n  recordMap.set(id, record)\n\n  if (recordMap.size && !isRunning) {\n    clearInterval(timer)\n\n    timer = setInterval(() => {\n      isRunning = true\n\n      const current = Date.now()\n\n      recordMap.forEach(record => {\n        if (!record.interval) return\n\n        if (current - record.updated > record.interval) {\n          record.timeAgo.value = computeTimeAgo(\n            record.datetime,\n            current,\n            record.locale.value,\n            record.wordSpace.value,\n          )\n          record.updated = current\n        }\n      })\n    }, 5000)\n  }\n}\n\nexport function unsubscribe(id: number) {\n  recordMap.delete(id)\n\n  if (!recordMap.size) {\n    clearInterval(timer)\n    isRunning = false\n  }\n}\n\nexport function computeTimeAgo(\n  date: Date,\n  current: number,\n  locale: Record<string, string>,\n  wordSpace: boolean,\n) {\n  const diff = Math.abs(current - date.getTime())\n  const type = current > date.getTime() ? locale.ago : locale.late\n\n  let label: string\n  let usedDiff: number\n  let noFormat = false\n\n  if (diff < 10 * SECOND_ON_MILLISECONDS) {\n    label = locale.justNow\n    noFormat = true\n  } else if (diff < MINUTE_ON_MILLISECONDS) {\n    label = locale.second\n    usedDiff = Math.floor(diff / SECOND_ON_MILLISECONDS)\n  } else if (diff < HOUR_ON_MILLISECONDS) {\n    label = locale.minute\n    usedDiff = Math.floor(diff / MINUTE_ON_MILLISECONDS)\n  } else if (diff < DAY_ON_MILLISECONDS) {\n    label = locale.hour\n    usedDiff = Math.floor(diff / HOUR_ON_MILLISECONDS)\n  } else if (diff < 30 * DAY_ON_MILLISECONDS) {\n    usedDiff = Math.floor(diff / DAY_ON_MILLISECONDS)\n\n    if (usedDiff === 1) {\n      label = locale.yesterday\n      noFormat = true\n    } else {\n      label = locale.days\n    }\n  } else if (diff < 365 * DAY_ON_MILLISECONDS) {\n    usedDiff = Math.floor(diff / (30 * DAY_ON_MILLISECONDS))\n\n    if (usedDiff === 1) {\n      label = locale.lastMonth\n      noFormat = true\n    } else {\n      label = locale.months\n    }\n  } else {\n    usedDiff = Math.floor(diff / 365 / DAY_ON_MILLISECONDS)\n\n    if (usedDiff === 1) {\n      label = locale.lastYear\n      noFormat = true\n    } else {\n      label = locale.years\n    }\n  }\n\n  if (noFormat) {\n    return label\n  }\n\n  return makeSentence(`${getCountWord(label, usedDiff!)} ${type}`, wordSpace)\n}\n"],"names":["id","getId","recordMap","timer","isRunning","subscribe","record","current","computeTimeAgo","unsubscribe","date","locale","wordSpace","diff","type","label","usedDiff","noFormat","SECOND_ON_MILLISECONDS","MINUTE_ON_MILLISECONDS","HOUR_ON_MILLISECONDS","DAY_ON_MILLISECONDS","makeSentence","getCountWord"],"mappings":"iJAmBA,IAAIA,EAAK,EAEF,SAASC,GAAQ,CACf,OAAAD,GACT,CAEA,MAAME,MAAgB,IAEtB,IAAIC,EACAC,EAEY,SAAAC,EAAUL,EAAYM,EAAuB,CACjDJ,EAAA,IAAIF,EAAIM,CAAM,EAEpBJ,EAAU,MAAQ,CAACE,IACrB,cAAcD,CAAK,EAEnBA,EAAQ,YAAY,IAAM,CACZC,EAAA,GAEN,MAAAG,EAAU,KAAK,IAAI,EAEfL,EAAA,QAAQI,GAAU,CACrBA,EAAO,UAERC,EAAUD,EAAO,QAAUA,EAAO,WACpCA,EAAO,QAAQ,MAAQE,EACrBF,EAAO,SACPC,EACAD,EAAO,OAAO,MACdA,EAAO,UAAU,KACnB,EACAA,EAAO,QAAUC,EACnB,CACD,GACA,GAAI,EAEX,CAEO,SAASE,EAAYT,EAAY,CACtCE,EAAU,OAAOF,CAAE,EAEdE,EAAU,OACb,cAAcC,CAAK,EACPC,EAAA,GAEhB,CAEO,SAASI,EACdE,EACAH,EACAI,EACAC,EACA,CACA,MAAMC,EAAO,KAAK,IAAIN,EAAUG,EAAK,SAAS,EACxCI,EAAOP,EAAUG,EAAK,QAAY,EAAAC,EAAO,IAAMA,EAAO,KAExD,IAAAI,EACAC,EACAC,EAAW,GA2Cf,OAzCIJ,EAAO,GAAKK,0BACdH,EAAQJ,EAAO,QACJM,EAAA,IACFJ,EAAOM,0BAChBJ,EAAQJ,EAAO,OACJK,EAAA,KAAK,MAAMH,EAAOK,EAAAA,sBAAsB,GAC1CL,EAAOO,wBAChBL,EAAQJ,EAAO,OACJK,EAAA,KAAK,MAAMH,EAAOM,EAAAA,sBAAsB,GAC1CN,EAAOQ,uBAChBN,EAAQJ,EAAO,KACJK,EAAA,KAAK,MAAMH,EAAOO,EAAAA,oBAAoB,GACxCP,EAAO,GAAKQ,uBACVL,EAAA,KAAK,MAAMH,EAAOQ,EAAAA,mBAAmB,EAE5CL,IAAa,GACfD,EAAQJ,EAAO,UACJM,EAAA,IAEXF,EAAQJ,EAAO,MAERE,EAAO,IAAMQ,uBACtBL,EAAW,KAAK,MAAMH,GAAQ,GAAKQ,EAAoB,oBAAA,EAEnDL,IAAa,GACfD,EAAQJ,EAAO,UACJM,EAAA,IAEXF,EAAQJ,EAAO,SAGjBK,EAAW,KAAK,MAAMH,EAAO,IAAMQ,EAAAA,mBAAmB,EAElDL,IAAa,GACfD,EAAQJ,EAAO,SACJM,EAAA,IAEXF,EAAQJ,EAAO,OAIfM,EACKF,EAGFO,EAAA,aAAa,GAAGC,EAAAA,aAAaR,EAAOC,CAAS,CAAC,IAAIF,CAAI,GAAIF,CAAS,CAC5E"}