{"version":3,"sources":["../src/chrono-convert.ts"],"names":["ChronoConvert","_ChronoConvert","value","unit","chrono_convert_default"],"mappings":"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","sourcesContent":["import { MINUTE, DAY, HOUR, MONTH, WEEK, YEAR, QUARTER } from \"./constants\";\nimport type { Unit } from \"./types\";\n\n/**\n * Class representing a Time Converter.\n * @example\n * const time = ChronoConvert.minutes(5);\n * console.log(time.toSeconds()); // Outputs the equivalent seconds\n */\nclass ChronoConvert {\n  value: number;\n\n  /**\n   * @private\n   * @param {number} value - The number of seconds.\n   */\n  private constructor(value: number) {\n    this.value = value;\n  }\n\n  /**\n   * Creates a ChronoConvert instance from milliseconds.\n   * @param {number} value - The number of milliseconds.\n   * @returns {ChronoConvert} - New instance of ChronoConvert.\n   * @example\n   * const time = ChronoConvert.milliseconds(5000);\n   * console.log(time.toSeconds()); // Outputs 5\n   */\n  static milliseconds(value: number): ChronoConvert {\n    return new ChronoConvert(value / 1000);\n  }\n\n  /**\n   * Creates a ChronoConvert instance from milliseconds.\n   * @param {number} value - The number of milliseconds.\n   * @returns {ChronoConvert} - New instance of ChronoConvert.\n   * @example\n   * const time = ChronoConvert.ms(5000);\n   * console.log(time.toSeconds()); // Outputs 5\n   */\n  static ms(value: number): ChronoConvert {\n    return ChronoConvert.milliseconds(value);\n  }\n\n  /**\n   * Creates a ChronoConvert instance from seconds.\n   * @param {number} value - The number of seconds.\n   * @returns {ChronoConvert} - New instance of ChronoConvert.\n   * @example\n   * const time = ChronoConvert.seconds(5);\n   * console.log(time.toSeconds()); // Outputs 5\n   */\n  static seconds(value: number): ChronoConvert {\n    return new ChronoConvert(value);\n  }\n\n  /**\n   * Creates a ChronoConvert instance from minutes.\n   * @param {number} value - The number of minutes.\n   * @returns {ChronoConvert} - New instance of ChronoConvert.\n   * @example\n   * const time = ChronoConvert.minutes(5);\n   * console.log(time.toSeconds()); // Outputs 300\n   */\n  static minutes(value: number): ChronoConvert {\n    return new ChronoConvert(value * MINUTE);\n  }\n\n  /**\n   * Creates a ChronoConvert instance from hours.\n   * @param {number} value - The number of hours.\n   * @returns {ChronoConvert} - New instance of ChronoConvert.\n   * @example\n   * const time = ChronoConvert.hours(5);\n   * console.log(time.toSeconds()); // Outputs 18000\n   */\n  static hours(value: number): ChronoConvert {\n    return new ChronoConvert(value * HOUR);\n  }\n\n  /**\n   * Creates a ChronoConvert instance from days.\n   * @param {number} value - The number of days.\n   * @returns {ChronoConvert} - New instance of ChronoConvert.\n   * @example\n   * const time = ChronoConvert.days(5);\n   * console.log(time.toSeconds()); // Outputs 432000\n   */\n  static days(value: number): ChronoConvert {\n    return new ChronoConvert(value * DAY);\n  }\n\n  /**\n   * Creates a ChronoConvert instance from weeks.\n   * @param {number} value - The number of weeks.\n   * @returns {ChronoConvert} - New instance of ChronoConvert.\n   * @example\n   * const time = ChronoConvert.weeks(5);\n   * console.log(time.toSeconds()); // Outputs 3024000\n   */\n  static weeks(value: number): ChronoConvert {\n    return new ChronoConvert(value * WEEK);\n  }\n\n  /**\n   * Creates a ChronoConvert instance from months.\n   * @param {number} value - The number of months.\n   * @returns {ChronoConvert} - New instance of ChronoConvert.\n   * @example\n   * const time = ChronoConvert.months(5);\n   * console.log(time.toSeconds()); // Outputs 13140000\n   */\n  static months(value: number): ChronoConvert {\n    return new ChronoConvert(value * MONTH);\n  }\n\n  /**\n   * Creates a ChronoConvert instance from quarters.\n   * @param {number} value - The number of quarters.\n   * @returns {ChronoConvert} - New instance of ChronoConvert.\n   * @example\n   * const time = ChronoConvert.quarters(5);\n   * console.log(time.toSeconds()); // Outputs 78840000\n   */\n  static quarters(value: number): ChronoConvert {\n    return new ChronoConvert(value * MONTH * 3);\n  }\n\n  /**\n   * Creates a ChronoConvert instance from years.\n   * @param {number} value - The number of years.\n   * @returns {ChronoConvert} - New instance of ChronoConvert.\n   * @example\n   * const time = ChronoConvert.years(5);\n   * console.log(time.toSeconds()); // Outputs 157680000\n   */\n  static years(value: number): ChronoConvert {\n    return new ChronoConvert(value * YEAR);\n  }\n\n  /**\n   * @example\n   * const time = ChronoConvert.from(1500, 'seconds');\n   * console.log(time.toSeconds()); // Outputs 1500\n   */\n  static from(value: number, unit: Unit) {\n    return new ChronoConvert(ChronoConvert.getValueByUnit(value, unit));\n  }\n\n  private fixValue(value: number): number {\n    return Math.round(value * 10000) / 10000;\n  }\n\n  private static getValueByUnit(value: number, unit: Unit): number {\n    const valueByUnit: Record<Unit, number> = {\n      milliseconds: value / 1000,\n      ms: value / 1000,\n      seconds: value,\n      minutes: value * MINUTE,\n      hours: value * HOUR,\n      days: value * DAY,\n      weeks: value * WEEK,\n      months: value * MONTH,\n      quarters: value * QUARTER,\n      years: value * YEAR,\n    };\n\n    return valueByUnit[unit];\n  }\n\n  /**\n   * @example\n   * const time = ChronoConvert.minutes(5).add(5, 'seconds');\n   * console.log(time.toSeconds()); // Outputs 305\n   */\n  add(value: number, unit: Unit): ChronoConvert {\n    return new ChronoConvert(\n      this.value + ChronoConvert.getValueByUnit(value, unit)\n    );\n  }\n\n  /**\n   * @example\n   * const time = ChronoConvert.minutes(5).subtract(5, 'seconds');\n   * console.log(time.toSeconds()); // Outputs 295\n   */\n  subtract(value: number, unit: Unit): ChronoConvert {\n    return new ChronoConvert(\n      this.value - ChronoConvert.getValueByUnit(value, unit)\n    );\n  }\n\n  /**\n   * @example\n   * const time = ChronoConvert.minutes(5).to('seconds');\n   * console.log(time); // Outputs 300\n   */\n  to(unit: Unit): number {\n    const valueByUnit: Record<Unit, number> = {\n      milliseconds: this.toMilliseconds(),\n      ms: this.toMilliseconds(),\n      seconds: this.toSeconds(),\n      minutes: this.toMinutes(),\n      hours: this.toHours(),\n      days: this.toDays(),\n      weeks: this.toWeeks(),\n      months: this.toMonths(),\n      quarters: this.toQuarters(),\n      years: this.toYears(),\n    };\n\n    return valueByUnit[unit];\n  }\n\n  /**\n   * Converts the time to milliseconds.\n   * @returns {number} - The time in milliseconds.\n   * @example\n   * const time = ChronoConvert.seconds(2);\n   * console.log(time.toMilliseconds()); // Outputs 2000\n   */\n  toMilliseconds(): number {\n    return this.fixValue(this.value * 1000);\n  }\n\n  /**\n   * Converts the time to milliseconds.\n   * @returns {number} - The time in milliseconds.\n   * @example\n   * const time = ChronoConvert.seconds(2);\n   * console.log(time.toMs()); // Outputs 2000\n   */\n  toMs(): number {\n    return this.toMilliseconds();\n  }\n\n  /**\n   * Converts the time to seconds.\n   * @returns {number} - The time in seconds.\n   * @example\n   * const time = ChronoConvert.minutes(2);\n   * console.log(time.toSeconds()); // Outputs 120\n   */\n  toSeconds(): number {\n    return this.fixValue(this.value);\n  }\n\n  /**\n   * Converts the time to minutes.\n   * @returns {number} - The time in minutes.\n   * @example\n   * const time = ChronoConvert.seconds(120);\n   * console.log(time.toMinutes()); // Outputs 2\n   */\n  toMinutes(): number {\n    return this.fixValue(this.value / MINUTE);\n  }\n\n  /**\n   * Converts the time to hours.\n   * @returns {number} - The time in hours.\n   * @example\n   * const time = ChronoConvert.seconds(7200);\n   * console.log(time.toHours()); // Outputs 2\n   */\n  toHours(): number {\n    return this.fixValue(this.value / HOUR);\n  }\n\n  /**\n   * Converts the time to days.\n   * @returns {number} - The time in days.\n   * @example\n   * const time = ChronoConvert.seconds(172800);\n   * console.log(time.toDays()); // Outputs 2\n   */\n  toDays(): number {\n    return this.fixValue(this.value / DAY);\n  }\n\n  /**\n   * Converts the time to weeks.\n   * @returns {number} - The time in weeks.\n   * @example\n   * const time = ChronoConvert.seconds(1209600);\n   * console.log(time.toWeeks()); // Outputs 2\n   */\n  toWeeks(): number {\n    return this.fixValue(this.value / WEEK);\n  }\n\n  /**\n   * Converts the time to months.\n   * @returns {number} - The time in months.\n   * @example\n   * const time = ChronoConvert.seconds(5256000);\n   * console.log(time.toMonths()); // Outputs 2\n   */\n  toMonths(): number {\n    return this.fixValue(this.value / MONTH);\n  }\n\n  /**\n   * Converts the time to quarters.\n   * @returns {number} - The time in quarters.\n   * @example\n   * const time = ChronoConvert.seconds(15768000);\n   * console.log(time.toQuarters()); // Outputs 2\n   */\n  toQuarters(): number {\n    return this.fixValue(this.value / QUARTER);\n  }\n\n  /**\n   * Converts the time to years.\n   * @returns {number} - The time in years.\n   * @example\n   * const time = ChronoConvert.seconds(63072000);\n   * console.log(time.toYears()); // Outputs 2\n   */\n  toYears(): number {\n    return this.fixValue(this.value / YEAR);\n  }\n\n  toString(): string {\n    return `${this.value}`;\n  }\n}\n\nexport default ChronoConvert;\n"]}