{"version":3,"file":"day-legacy.cjs","names":["DAY_MS","isPromise"],"sources":["../../../src/common/data/day-legacy.ts"],"sourcesContent":["import { isPromise } from '../exec/promise'\nimport type { DayInput, DayValue } from './day'\nimport { DAY_MS } from './day'\n\n// See also and alternatives:\n// https://blog.openreplay.com/is-it-time-for-the-javascript-temporal-api\n// https://github.com/iamkun/dayjs\n// https://github.com/date-fns/date-fns\n\nexport type DayInputLegacy = DayInput | Day\n\n/**\n * Date represented as positive integer value. Years smaller 0 are not supported.\n * @deprecated\n */\nexport class Day {\n  days: DayValue\n\n  get value() {\n    return this.days\n  }\n\n  constructor(days?: DayInputLegacy) {\n    if (typeof days === 'number') {\n      this.days = days\n      return\n    }\n\n    if (days != null)\n      days = Day.from(days)?.days\n\n    if (days == null) {\n      const date = new Date()\n      this.days\n        = date.getFullYear() * 10000\n        + (date.getMonth() + 1) * 100\n        + date.getDate()\n    }\n    else {\n      this.days = days\n    }\n  }\n\n  static fromNumber(n: number): Day {\n    return new Day(n)\n  }\n\n  static fromString(dateString: string): Day | undefined {\n    return Day.from(+dateString.replace(/\\D/g, '').slice(0, 8))\n  }\n\n  static fromDate(date: Date, utc = false): Day {\n    return (\n      utc\n        ? Day.fromString(date.toISOString().substr(0, 10))\n        : Day.from(\n          date.getFullYear() * 10000\n          + (date.getMonth() + 1) * 100\n          + date.getDate(),\n        )\n    ) as Day\n  }\n\n  static fromDateUTC(date: Date): Day {\n    return Day.fromDate(date, true)\n  }\n\n  /** @deprecated use fromDateUTC */\n  static fromDateGMT(date: Date): Day {\n    return Day.fromDate(date, true)\n  }\n\n  static from(value: DayInputLegacy, utc = false): Day | undefined {\n    if (typeof value === 'number') {\n      if (value < 100)\n        return\n      return new Day(value)\n    }\n    else if (typeof value === 'string') {\n      return Day.fromString(value)\n    }\n    else if (Array.isArray(value) && value.length === 3) {\n      const [year, month = 1, day = 1] = value\n      if (month < 1 || month > 12 || day < 1 || day > 31)\n        return\n      return new Day(year * 10000 + month * 100 + day)\n    }\n    else if (value instanceof Date) {\n      return Day.fromDate(value, utc)\n    }\n    else if (value instanceof Day) {\n      return value\n    }\n  }\n\n  toNumber(): number {\n    return this.days\n  }\n\n  // Transformer\n\n  /** Just for future extensions */\n  toJson() {\n    return this.days\n  }\n\n  toString(sep = '-') {\n    const baseString = String(this.days)\n    return (\n      baseString.slice(0, 4)\n      + sep\n      + baseString.slice(4, 6)\n      + sep\n      + baseString.slice(6, 8)\n    )\n  }\n\n  toDate(utc = false): Date {\n    return utc\n      ? new Date(`${this.toString()}T00:00:00.000Z`)\n      : new Date(\n        this.days / 10000, // year\n        ((this.days / 100) % 100) - 1, // month\n        this.days % 100, // day\n      )\n  }\n\n  toDateUTC() {\n    return this.toDate(true)\n  }\n\n  /** @deprecated use toDateUTC */\n  toDateGMT() {\n    return this.toDate(true)\n  }\n\n  get year() {\n    return Math.floor(this.days / 10000)\n  }\n\n  get month() {\n    return Math.floor((this.days / 100) % 100)\n  }\n\n  get day() {\n    return Math.floor(this.days % 100)\n  }\n\n  // Calculations\n\n  dayOffset(offset: number): Day {\n    // Important! Don't use local time here due to summer/winter time days can\n    // be longer or shorter!\n    return Day.fromDateUTC(\n      new Date(this.toDateUTC().getTime() + offset * DAY_MS),\n    )\n  }\n\n  monthStart(): Day {\n    return Day.from([this.year, this.month, 1])!\n  }\n\n  yearStart(): Day {\n    return Day.from([this.year, 1, 1])!\n  }\n\n  /** Very stupid approach, only works for days <= 28 */\n  monthOffset(offset: number): Day {\n    const m = this.month + offset\n    let mm = Math.floor((m - 1) % 12) + 1\n    if (mm === 0)\n      mm = 12\n    const yy = Math.floor((m - 1) / 12)\n    // log(\"calc\", m, mm, yy, [this.year + yy, mm, this.day])\n    return Day.from([this.year + yy, mm, this.day])!\n  }\n\n  daysUntil(otherDay: DayInputLegacy): number {\n    return Math.round(\n      (new Day(otherDay)?.toDateUTC().getTime() - this.toDateUTC().getTime())\n      / DAY_MS,\n    )\n  }\n\n  // Shortcuts\n\n  yesterday() {\n    return this.dayOffset(-1)\n  }\n\n  tomorrow() {\n    return this.dayOffset(+1)\n  }\n}\n\nexport async function forEachDay(\n  from: DayInputLegacy,\n  to: DayInputLegacy,\n  handler: (date: Day) => Promise<void> | void,\n) {\n  let start = Day.from(from)\n  const end = Day.from(to)\n  // eslint-disable-next-line no-unmodified-loop-condition\n  while (start && end && start?.days <= end?.days) {\n    const result = handler(start)\n    if (isPromise(result))\n      await result\n    start = start.dayOffset(+1)\n  }\n}\n\nexport function today(): Day {\n  return new Day()\n}\n\n/** @deprecated */\nexport function day(days?: DayInputLegacy): Day {\n  return new Day(days)\n}\n\nexport function dateStringToDays(dateString: string): number {\n  return Day.fromDate(new Date(dateString)).days\n}\n"],"mappings":"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"}