{"version":3,"file":"ngx-timeago.mjs","sources":["../../../lib/src/util.ts","../../../lib/src/timeago.intl.ts","../../../lib/src/timeago.formatter.ts","../../../lib/src/timeago.clock.ts","../../../lib/src/timeago.directive.ts","../../../lib/src/timeago.pipe.ts","../../../lib/src/timeago.module.ts","../../../lib/src/ngx-timeago.ts"],"sourcesContent":["export function isDefined(value: any): boolean {\n  return typeof value !== 'undefined' && value !== null;\n}\n\nexport function coerceBooleanProperty(value: any): boolean {\n  return value != null && `${value}` !== 'false';\n}\n\nexport function dateParser(date: any): Date {\n  const parsed = new Date(date);\n  if (!Number.isNaN(parsed.valueOf())) {\n    return parsed;\n  }\n\n  const parts: string[] = String(date).match(/\\d+/g);\n  if (parts === null || parts.length <= 2) {\n    return parsed;\n  } else {\n    const [firstP, secondP, ...restPs] = parts.map(x => parseInt(x, 10));\n    return new Date(Date.UTC(firstP, secondP - 1, ...restPs));\n  }\n}\n\nexport const MINUTE = 60;\nexport const HOUR = MINUTE * 60;\nexport const DAY = HOUR * 24;\nexport const WEEK = DAY * 7;\nexport const MONTH = DAY * 30;\nexport const YEAR = DAY * 365;\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { StringOrFn, NumberArray } from './timeago.formatter';\n\nexport interface IL10nsStrings {\n  prefixAgo?: StringOrFn;\n  prefixFromNow?: StringOrFn;\n  suffixAgo?: StringOrFn;\n  suffixFromNow?: StringOrFn;\n  second?: StringOrFn;\n  seconds?: StringOrFn;\n  minute?: StringOrFn;\n  minutes?: StringOrFn;\n  hour?: StringOrFn;\n  hours?: StringOrFn;\n  day?: StringOrFn;\n  days?: StringOrFn;\n  week?: StringOrFn;\n  weeks?: StringOrFn;\n  month?: StringOrFn;\n  months?: StringOrFn;\n  year?: StringOrFn;\n  years?: StringOrFn;\n  wordSeparator?: string;\n  numbers?: NumberArray;\n};\n\n/**\n * To modify the text displayed, create a new instance of TimeagoIntl and\n * include it in a custom provider\n */\n@Injectable()\nexport class TimeagoIntl {\n\n  strings: IL10nsStrings;\n\n  /**\n   * Stream that emits whenever the l10n strings are changed\n   * Use this to notify directives if the l10n strings have changed after initialization.\n   */\n  readonly changes: Subject<void> = new Subject<void>();\n}\n","import { Injectable } from '@angular/core';\nimport { TimeagoIntl } from './timeago.intl';\nimport { MINUTE, HOUR, DAY, WEEK, MONTH, YEAR } from './util';\n\nexport type Unit = 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year';\n\nexport type Suffix = 'ago' | 'from now';\n\nexport type StringOrFn = ((value: number, millisDelta:  number) => string) | string;\n\nexport type NumberArray = [ string, string, string, string, string, string, string, string, string, string ];\n\nconst defaultFormattter = function(then: number): {value: number, unit: Unit, suffix: Suffix} {\n  const now = Date.now();\n  const seconds = Math.round(Math.abs(now - then) / 1000);\n  const suffix: Suffix = then < now ? 'ago' : 'from now';\n\n  const [value, unit]: [number, Unit] =\n    seconds < MINUTE\n      ? [Math.round(seconds), 'second']\n      : seconds < HOUR\n        ? [Math.round(seconds / MINUTE), 'minute']\n        : seconds < DAY\n          ? [Math.round(seconds / HOUR), 'hour']\n          : seconds < WEEK\n            ? [Math.round(seconds / DAY), 'day']\n            : seconds < MONTH\n              ? [Math.round(seconds / WEEK), 'week']\n              : seconds < YEAR\n                ? [Math.round(seconds / MONTH), 'month']\n                : [Math.round(seconds / YEAR), 'year'];\n\n  return {value, unit, suffix};\n}\n\nexport abstract class TimeagoFormatter {\n  abstract format(then: number): string\n}\n\n@Injectable()\nexport class TimeagoDefaultFormatter extends TimeagoFormatter {\n  format(then: number): string {\n    const {suffix, value, unit} = defaultFormattter(then);\n    return this.parse(value, unit, suffix);\n  }\n\n  private parse(value: number, unit: Unit, suffix: Suffix): string {\n    if (value !== 1) {\n      unit += 's';\n    }\n    return value + ' ' + unit + ' ' + suffix;\n  }\n}\n\n@Injectable()\nexport class TimeagoCustomFormatter extends TimeagoFormatter {\n  constructor(private intl: TimeagoIntl) {\n    super();\n  }\n\n  format(then: number): string {\n    const {suffix, value, unit} = defaultFormattter(then);\n    return this.parse(value, unit, suffix, Date.now(), then);\n  }\n\n  private parse(value: number, unit: Unit, suffix: Suffix, now: number, then: number) {\n    /** convert weeks to days if strings don't handle weeks */\n    if (unit === 'week' && !this.intl.strings.week && !this.intl.strings.weeks) {\n      const days = Math.round(Math.abs(now - then) / (1000 * 60 * 60 * 24));\n      value = days;\n      unit = 'day';\n    }\n\n    /** create a normalize function for given value */\n    const normalize = this.normalizeFn(value, now - then, this.intl.strings.numbers);\n\n    /** The eventual return value stored in an array so that the wordSeparator can be used */\n    const dateString: string[] = [];\n\n    /** handle prefixes */\n    if (suffix === 'ago' && this.intl.strings.prefixAgo) {\n      dateString.push(normalize(this.intl.strings.prefixAgo));\n    }\n    if (suffix === 'from now' && this.intl.strings.prefixFromNow) {\n      dateString.push(normalize(this.intl.strings.prefixFromNow));\n    }\n\n    /** Handle Main number and unit */\n    const isPlural = value > 1;\n    if (isPlural) {\n      const stringFn: StringOrFn = this.intl.strings[unit + 's'] || this.intl.strings[unit] || '%d ' + unit;\n      dateString.push(normalize(stringFn));\n    } else {\n      const stringFn: StringOrFn = this.intl.strings[unit] || this.intl.strings[unit + 's'] || '%d ' + unit;\n      dateString.push(normalize(stringFn));\n    }\n\n    /** Handle Suffixes */\n    if (suffix === 'ago' && this.intl.strings.suffixAgo) {\n      dateString.push(normalize(this.intl.strings.suffixAgo));\n    }\n    if (suffix === 'from now' && this.intl.strings.suffixFromNow) {\n      dateString.push(normalize(this.intl.strings.suffixFromNow));\n    }\n\n    /** join the array into a string and return it */\n    const wordSeparator = typeof this.intl.strings.wordSeparator === 'string' ? this.intl.strings.wordSeparator : ' ';\n    return dateString.join(wordSeparator);\n  }\n\n  /**\n   * If the numbers array is present, format numbers with it,\n   * otherwise just cast the number to a string and return it\n  */\n  private normalizeNumber(numbers: NumberArray, value: number) {\n    return numbers && numbers.length === 10\n      ? String(value).split('')\n          .map((digit: string) => digit.match(/^[0-9]$/) ? numbers[parseInt(digit, 10)] : digit)\n          .join('')\n      : String(value);\n  }\n\n  /**\n   * Take a string or a function that takes number of days and returns a string\n   * and provide a uniform API to create string parts\n  */\n  private normalizeFn(value: number, millisDelta: number, numbers?: NumberArray) {\n    return (stringOrFn: StringOrFn) =>\n      typeof stringOrFn === 'function'\n      ? stringOrFn(value, millisDelta).replace(/%d/g, this.normalizeNumber(numbers, value))\n      : stringOrFn.replace(/%d/g, this.normalizeNumber(numbers, value));\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, of, empty, timer } from 'rxjs';\nimport { expand, skip } from 'rxjs/operators';\nimport { MINUTE, HOUR, DAY } from './util';\n\nexport abstract class TimeagoClock {\n  abstract tick(then: number): Observable<any>;\n}\n\n@Injectable()\nexport class TimeagoDefaultClock extends TimeagoClock {\n  tick(then: number): Observable<any> {\n    return of(0)\n      .pipe(\n        expand(() => {\n          const now = Date.now();\n          const seconds = Math.round(Math.abs(now - then) / 1000);\n\n          const period =\n            seconds < MINUTE\n              ? 1000\n              : seconds < HOUR\n                ? 1000 * MINUTE\n                : seconds < DAY\n                  ? 1000 * HOUR\n                  : 0;\n\n          return period ? timer(period) : empty();\n        }),\n        skip(1)\n      );\n  }\n}\n","import { Directive, Input, ElementRef, Optional, OnChanges, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { Subscription, Subject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { TimeagoClock } from './timeago.clock';\nimport { TimeagoFormatter } from './timeago.formatter';\nimport { TimeagoIntl } from './timeago.intl';\nimport { isDefined, coerceBooleanProperty, dateParser } from './util';\n\n@Directive({\n  selector: '[timeago]',\n  exportAs: 'timeago',\n})\nexport class TimeagoDirective implements OnChanges, OnDestroy {\n  private intlSubscription: Subscription;\n  private clockSubscription: Subscription;\n\n  /**\n   * Emits on:\n   * - Input change\n   * - Intl change\n   * - Clock tick\n  */\n  stateChanges = new Subject<void>();\n\n  /** The Date to display. An actual Date object or something that can be fed to new Date. */\n  @Input()\n  get date(): any {\n    return this._date;\n  }\n  set date(date: any) {\n    this._date = dateParser(date).valueOf();\n    if (this._date) {\n      if (this.clockSubscription) {\n        this.clockSubscription.unsubscribe();\n        this.clockSubscription = undefined;\n      }\n      this.clockSubscription = this.clock.tick(this.date)\n        .pipe(filter(() => this.live, this))\n        .subscribe(() => this.stateChanges.next());\n    } else {\n      throw new SyntaxError(`Wrong parameter in TimeagoDirective. Expected a valid date, received: ${date}`);\n    }\n  }\n  private _date: number;\n\n  /** If the directive should update itself over time */\n  @Input()\n  get live(): boolean {\n    return this._live;\n  }\n  set live(live: boolean) {\n    this._live = coerceBooleanProperty(live);\n  }\n  private _live = true;\n\n  constructor(@Optional() intl: TimeagoIntl,\n              private cd: ChangeDetectorRef,\n              formatter: TimeagoFormatter,\n              element: ElementRef,\n              private clock: TimeagoClock) {\n    if (intl) {\n      this.intlSubscription = intl.changes.subscribe(() => this.stateChanges.next());\n    }\n    this.stateChanges.subscribe(() => {\n      this.setContent(element.nativeElement, formatter.format(this.date));\n      this.cd.markForCheck();\n    });\n  }\n\n  ngOnChanges() {\n    this.stateChanges.next();\n  }\n\n  setContent(node: any, content: string) {\n    if (isDefined(node.textContent)) {\n      node.textContent = content;\n    } else {\n      node.data = content;\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.intlSubscription) {\n      this.intlSubscription.unsubscribe();\n      this.intlSubscription = undefined;\n    }\n    if (this.clockSubscription) {\n      this.clockSubscription.unsubscribe();\n      this.clockSubscription = undefined;\n    }\n    this.stateChanges.complete();\n  }\n}\n","import { Injectable, OnDestroy, Pipe, PipeTransform, Optional, ChangeDetectorRef } from '@angular/core';\nimport { Subscription, Subject } from 'rxjs';\nimport { TimeagoClock } from './timeago.clock';\nimport { TimeagoFormatter } from './timeago.formatter';\nimport { TimeagoIntl } from './timeago.intl';\nimport { isDefined, coerceBooleanProperty, dateParser } from './util';\nimport { filter } from 'rxjs/operators';\n\n@Injectable()\n@Pipe({\n  name: 'timeago',\n  pure: false, // required to update the value when stateChanges emits\n})\nexport class TimeagoPipe implements PipeTransform, OnDestroy {\n  private intlSubscription: Subscription;\n  private clockSubscription: Subscription;\n\n  private date: number;\n  private value: string;\n  private live = true;\n\n  /**\n   * Emits on:\n   * - Input change\n   * - Intl change\n   * - Clock tick\n  */\n  stateChanges = new Subject<void>();\n\n  constructor(@Optional() intl: TimeagoIntl,\n    cd: ChangeDetectorRef,\n    formatter: TimeagoFormatter,\n    private clock: TimeagoClock) {\n    if (intl) {\n      this.intlSubscription = intl.changes.subscribe(() => this.stateChanges.next());\n    }\n    this.stateChanges.subscribe(() => {\n      this.value = formatter.format(this.date);\n      cd.markForCheck();\n    });\n  }\n\n  transform(date: any, ...args: any[]) {\n    const _date = dateParser(date).valueOf();\n    let _live: boolean;\n\n    _live = isDefined(args[0])\n      ? coerceBooleanProperty(args[0])\n      : this.live;\n\n    if (this.date === _date && this.live === _live) {\n      return this.value;\n    }\n\n    this.date = _date;\n    this.live = _live;\n\n    if (this.date) {\n      if (this.clockSubscription) {\n        this.clockSubscription.unsubscribe();\n        this.clockSubscription = undefined;\n      }\n      this.clockSubscription = this.clock.tick(this.date)\n        .pipe(filter(() => this.live, this))\n        .subscribe(() => this.stateChanges.next());\n      this.stateChanges.next();\n    } else {\n      throw new SyntaxError(`Wrong parameter in TimeagoPipe. Expected a valid date, received: ${date}`);\n    }\n\n    return this.value;\n  }\n\n  ngOnDestroy() {\n    if (this.intlSubscription) {\n      this.intlSubscription.unsubscribe();\n      this.intlSubscription = undefined;\n    }\n    if (this.clockSubscription) {\n      this.clockSubscription.unsubscribe();\n      this.clockSubscription = undefined;\n    }\n    this.stateChanges.complete();\n  }\n}\n","import { NgModule, ModuleWithProviders, Provider } from '@angular/core';\nimport { TimeagoDirective } from './timeago.directive';\nimport { TimeagoPipe } from './timeago.pipe';\nimport { TimeagoClock, TimeagoDefaultClock } from './timeago.clock';\nimport { TimeagoFormatter, TimeagoDefaultFormatter } from './timeago.formatter';\n\nexport interface TimeagoModuleConfig {\n  clock?: Provider;\n  intl?: Provider;\n  formatter?: Provider;\n}\n\n@NgModule({\n  declarations: [\n    TimeagoDirective,\n    TimeagoPipe,\n  ],\n  exports: [\n    TimeagoDirective,\n    TimeagoPipe,\n  ],\n})\nexport class TimeagoModule {\n  /**\n   * Use this method in your root module to provide the TimeagoModule\n   */\n  static forRoot(config: TimeagoModuleConfig = {}): ModuleWithProviders<TimeagoModule> {\n    return {\n      ngModule: TimeagoModule,\n      providers: [\n        config.clock || {provide: TimeagoClock, useClass: TimeagoDefaultClock},\n        config.intl || [],\n        config.formatter || {provide: TimeagoFormatter, useClass: TimeagoDefaultFormatter},\n      ],\n    };\n  }\n\n  /**\n   * Use this method in your other (non root) modules to import the directive/pipe\n   */\n  static forChild(config: TimeagoModuleConfig = {}): ModuleWithProviders<TimeagoModule> {\n    return {\n      ngModule: TimeagoModule,\n      providers: [\n        config.clock || {provide: TimeagoClock, useClass: TimeagoDefaultClock},\n        config.intl || [],\n        config.formatter || {provide: TimeagoFormatter, useClass: TimeagoDefaultFormatter},\n      ],\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.TimeagoIntl","i2.TimeagoFormatter","i3.TimeagoClock"],"mappings":"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"}