@haiilo/ngx-intl
Version:
Standalone Angular pipes using the ECMAScript Internationalization API, which provides language sensitive string comparison, number formatting, and date and time formatting.
1 lines • 34.5 kB
Source Map (JSON)
{"version":3,"file":"haiilo-ngx-intl.mjs","sources":["../../../projects/ngx-intl/src/lib/intl-date.pipe.ts","../../../projects/ngx-intl/src/lib/intl-number.pipe.ts","../../../projects/ngx-intl/src/lib/intl-plural.pipe.ts","../../../projects/ngx-intl/src/lib/intl-sort.pipe.ts","../../../projects/ngx-intl/src/lib/intl-timeago.pipe.ts","../../../projects/ngx-intl/src/public-api.ts","../../../projects/ngx-intl/src/haiilo-ngx-intl.ts"],"sourcesContent":["import { Inject, InjectionToken, LOCALE_ID, Optional, Pipe, PipeTransform } from '@angular/core';\n\n/** A preconfigured option preset for the IntlDatePipe. */\nexport interface IntlDateOptions extends Intl.DateTimeFormatOptions {}\n\n/** Global options and presets for the IntlDatePipe. */\nexport interface IntlDateGlobalOptions {\n presets?: { [key: string]: IntlDateOptions };\n defaultPreset?: string;\n}\n\n/** Options for a transform call of the IntlDatePipe. */\nexport interface IntlDateLocalOptions extends IntlDateOptions {\n preset?: string;\n}\n\nexport const INTL_DATE_OPTIONS =\n new InjectionToken<IntlDateGlobalOptions>('IntlDateOptions');\n\nexport const INTL_DATE_TIMEZONE =\n new InjectionToken<string>('IntlDateTimezone');\n\nexport const INTL_DATE_PRESET_SHORT: IntlDateOptions =\n { dateStyle: 'short', timeStyle: 'short' };\nexport const INTL_DATE_PRESET_MEDIUM: IntlDateOptions =\n { dateStyle: 'medium', timeStyle: 'medium' };\nexport const INTL_DATE_PRESET_LONG: IntlDateOptions =\n { dateStyle: 'long', timeStyle: 'long' };\nexport const INTL_DATE_PRESET_FULL: IntlDateOptions =\n { year: 'numeric', month: 'long', day: 'numeric', weekday: 'long', hour: 'numeric', minute: 'numeric', second: 'numeric', timeZoneName: 'long' };\nexport const INTL_DATE_PRESET_SHORT_DATE: IntlDateOptions =\n { dateStyle: 'short' };\nexport const INTL_DATE_PRESET_MEDIUM_DATE: IntlDateOptions =\n { dateStyle: 'medium' };\nexport const INTL_DATE_PRESET_LONG_DATE: IntlDateOptions =\n { dateStyle: 'long' };\nexport const INTL_DATE_PRESET_FULL_DATE: IntlDateOptions =\n { year: 'numeric', month: 'long', day: 'numeric', weekday: 'long' };\nexport const INTL_DATE_PRESET_SHORT_TIME: IntlDateOptions =\n { timeStyle: 'short' };\nexport const INTL_DATE_PRESET_MEDIUM_TIME: IntlDateOptions =\n { timeStyle: 'medium' };\nexport const INTL_DATE_PRESET_LONG_TIME: IntlDateOptions =\n { timeStyle: 'long' };\nexport const INTL_DATE_PRESET_FULL_TIME: IntlDateOptions =\n { hour: 'numeric', minute: 'numeric', second: 'numeric', timeZoneName: 'long' };\n\n/**\n * A pipe that formats a date using the Intl.DateTimeFormat API.\n */\n@Pipe({\n name: 'intlDate',\n standalone: true\n})\nexport class IntlDatePipe implements PipeTransform {\n private static readonly DEFAULT_OPTIONS: IntlDateGlobalOptions = {\n presets: {\n short: INTL_DATE_PRESET_SHORT,\n medium: INTL_DATE_PRESET_MEDIUM,\n long: INTL_DATE_PRESET_LONG,\n full: INTL_DATE_PRESET_FULL,\n shortDate: INTL_DATE_PRESET_SHORT_DATE,\n mediumDate: INTL_DATE_PRESET_MEDIUM_DATE,\n longDate: INTL_DATE_PRESET_LONG_DATE,\n fullDate: INTL_DATE_PRESET_FULL_DATE,\n shortTime: INTL_DATE_PRESET_SHORT_TIME,\n mediumTime: INTL_DATE_PRESET_MEDIUM_TIME,\n longTime: INTL_DATE_PRESET_LONG_TIME,\n fullTime: INTL_DATE_PRESET_FULL_TIME\n }\n };\n\n constructor(\n @Inject(LOCALE_ID) private readonly locale: string,\n @Inject(INTL_DATE_OPTIONS) @Optional() private readonly options: IntlDateGlobalOptions | null,\n @Inject(INTL_DATE_TIMEZONE) @Optional() private readonly timezone: string | null\n ) {}\n\n transform(value?: Date | string | number | null, options?: string | IntlDateLocalOptions, ...locales: string[]): string | null {\n if (value === null) {\n return null;\n }\n\n const _locales = this.getLocales(locales);\n const _options = this.getOptions(options);\n const formatValue = typeof value === 'string' ? new Date(value) : value;\n return new Intl.DateTimeFormat(_locales, _options).format(formatValue);\n }\n\n private getLocales(locales: string[]): string[] {\n return [...locales, this.locale];\n }\n\n private getOptions(options?: string | IntlDateLocalOptions): IntlDateOptions {\n const presetStr = typeof options === 'string';\n const presetKey = !presetStr\n ? options?.preset || this.options?.defaultPreset || IntlDatePipe.DEFAULT_OPTIONS.defaultPreset\n : options;\n const preset = presetKey\n ? (this.options?.presets?.[presetKey] || IntlDatePipe.DEFAULT_OPTIONS.presets?.[presetKey])\n : undefined;\n const timezone = this.timezone ? { timeZone: this.timezone } : {};\n return {...timezone, ...preset, ...(!presetStr ? options : undefined)};\n }\n}\n","import { Inject, InjectionToken, LOCALE_ID, Optional, Pipe, PipeTransform } from '@angular/core';\n\n/** A preconfigured option preset for the IntlNumberPipe. */\nexport interface IntlNumberOptions extends Intl.NumberFormatOptions {}\n\n/** Global options and presets for the IntlNumberPipe. */\nexport interface IntlNumberGlobalOptions {\n presets?: { [key: string]: IntlNumberOptions };\n defaultPreset?: string;\n}\n\n/** Options for a transform call of the IntlNumberPipe. */\nexport interface IntlNumberLocalOptions extends IntlNumberOptions {\n preset?: string;\n}\n\nexport const INTL_NUMBER_OPTIONS =\n new InjectionToken<IntlNumberGlobalOptions>('IntlNumberOptions');\n\nexport const INTL_NUMBER_PRESET_SHORT: IntlNumberOptions =\n { useGrouping: false, maximumFractionDigits: 2 };\nexport const INTL_NUMBER_PRESET_LONG: IntlNumberOptions =\n { maximumFractionDigits: 8 };\nexport const INTL_NUMBER_PRESET_CURRENCY: IntlNumberOptions =\n { style: 'currency', currency: 'USD' };\nexport const INTL_NUMBER_PRESET_PERCENT: IntlNumberOptions =\n { style: 'percent' };\n\n/**\n * A pipe that formats a number using the Intl.NumberFormat API.\n */\n@Pipe({\n name: 'intlNumber',\n standalone: true\n})\nexport class IntlNumberPipe implements PipeTransform {\n private static readonly DEFAULT_OPTIONS: IntlNumberGlobalOptions = {\n presets: {\n short: INTL_NUMBER_PRESET_SHORT,\n long: INTL_NUMBER_PRESET_LONG,\n currency: INTL_NUMBER_PRESET_CURRENCY,\n percent: INTL_NUMBER_PRESET_PERCENT\n }\n };\n\n constructor(\n @Inject(LOCALE_ID) private readonly locale: string,\n @Inject(INTL_NUMBER_OPTIONS) @Optional() private readonly options: IntlNumberGlobalOptions | null\n ) {}\n\n transform(value: number | bigint | null, options?: string | IntlNumberLocalOptions, ...locales: string[]): string | null {\n if (value === null) {\n return null;\n }\n\n const _locales = this.getLocales(locales);\n const _options = this.getOptions(options);\n return new Intl.NumberFormat(_locales, _options).format(value);\n }\n\n private getLocales(locales: string[]): string[] {\n return [...locales, this.locale];\n }\n\n private getOptions(options?: string | IntlNumberLocalOptions): IntlNumberOptions {\n const presetStr = typeof options === 'string';\n const presetKey = !presetStr\n ? options?.preset || this.options?.defaultPreset || IntlNumberPipe.DEFAULT_OPTIONS.defaultPreset\n : options;\n const preset = presetKey\n ? (this.options?.presets?.[presetKey] || IntlNumberPipe.DEFAULT_OPTIONS.presets?.[presetKey])\n : undefined;\n return {...preset, ...(!presetStr ? options : undefined)};\n }\n}\n","import { Inject, InjectionToken, LOCALE_ID, Optional, Pipe, PipeTransform } from '@angular/core';\n\n/** A preconfigured option preset for the IntlPluralPipe. */\nexport interface IntlPluralOptions extends Intl.PluralRulesOptions {}\n\n/** Global options and presets for the IntlPluralPipe. */\nexport interface IntlPluralGlobalOptions {\n presets?: { [key: string]: IntlPluralOptions };\n defaultPreset?: string;\n}\n\n/** Options for a transform call of the IntlPluralPipe. */\nexport interface IntlPluralLocalOptions extends IntlPluralOptions {\n preset?: string;\n}\n\nexport const INTL_PLURAL_OPTIONS =\n new InjectionToken<IntlPluralGlobalOptions>('IntlPluralOptions');\n\nexport const INTL_PLURAL_PRESET_CARDINAL: IntlPluralOptions =\n { type: 'cardinal' };\nexport const INTL_PLURAL_PRESET_ORDINAL: IntlPluralOptions =\n { type: 'ordinal' };\n\n/**\n * A pipe that pluralizes a string using the Intl.PluralRules API.\n */\n@Pipe({\n name: 'IntlPlural',\n standalone: true\n})\nexport class IntlPluralPipe implements PipeTransform {\n private static readonly DEFAULT_OPTIONS: IntlPluralGlobalOptions = {\n presets: {\n cardinal: INTL_PLURAL_PRESET_CARDINAL,\n ordinal: INTL_PLURAL_PRESET_ORDINAL\n }\n };\n\n constructor(\n @Inject(LOCALE_ID) private readonly locale: string,\n @Inject(INTL_PLURAL_OPTIONS) @Optional() private readonly options: IntlPluralGlobalOptions | null\n ) {}\n\n transform(value: number | null, options?: string | IntlPluralLocalOptions, ...locales: string[]): string | null {\n if (value === null) {\n return null;\n }\n\n const _locales = this.getLocales(locales);\n const _options = this.getOptions(options);\n return new Intl.PluralRules(_locales, _options).select(value);\n }\n\n private getLocales(locales: string[]): string[] {\n return [...locales, this.locale];\n }\n\n private getOptions(options?: string | IntlPluralLocalOptions): IntlPluralOptions {\n const presetStr = typeof options === 'string';\n const presetKey = !presetStr\n ? options?.preset || this.options?.defaultPreset || IntlPluralPipe.DEFAULT_OPTIONS.defaultPreset\n : options;\n const preset = presetKey\n ? (this.options?.presets?.[presetKey] || IntlPluralPipe.DEFAULT_OPTIONS.presets?.[presetKey])\n : undefined;\n return {...preset, ...(!presetStr ? options : undefined)};\n }\n}\n","import { Inject, InjectionToken, LOCALE_ID, Optional, Pipe, PipeTransform } from '@angular/core';\n\n/** A preconfigured option preset for the IntlSortPipe. */\nexport interface IntlSortOptions extends Intl.CollatorOptions {}\n\n/** Global options and presets for the IntlSortPipe. */\nexport interface IntlSortGlobalOptions {\n presets?: { [key: string]: IntlSortOptions };\n defaultPreset?: string;\n}\n\n/** Options for a transform call of the IntlSortPipe. */\nexport interface IntlSortLocalOptions extends IntlSortOptions {\n preset?: string;\n}\n\nexport const INTL_SORT_OPTIONS =\n new InjectionToken<IntlSortGlobalOptions>('IntlSortOptions');\n\nexport const INTL_SORT_PRESET_LOWER_FIRST: IntlSortOptions =\n { caseFirst: 'lower' };\nexport const INTL_SORT_PRESET_UPPER_FIRST: IntlSortOptions =\n { caseFirst: 'upper' };\n\n/**\n * A pipe that sorts an array of strings using the Intl.Collator API.\n */\n@Pipe({\n name: 'IntlSort',\n standalone: true\n})\nexport class IntlSortPipe implements PipeTransform {\n private static readonly DEFAULT_OPTIONS: IntlSortGlobalOptions = {\n presets: {\n lowerFirst: INTL_SORT_PRESET_LOWER_FIRST,\n upperFirst: INTL_SORT_PRESET_UPPER_FIRST\n }\n };\n\n constructor(\n @Inject(LOCALE_ID) private readonly locale: string,\n @Inject(INTL_SORT_OPTIONS) @Optional() private readonly options: IntlSortGlobalOptions | null\n ) {}\n\n transform(value: string[] | null, options?: string | IntlSortLocalOptions, ...locales: string[]): string[] | null {\n if (value === null) {\n return null;\n }\n\n const _locales = this.getLocales(locales);\n const _options = this.getOptions(options);\n return value.sort(new Intl.Collator(_locales, _options).compare);\n }\n\n private getLocales(locales: string[]): string[] {\n return [...locales, this.locale];\n }\n\n private getOptions(options?: string | IntlSortLocalOptions): IntlSortOptions {\n const presetStr = typeof options === 'string';\n const presetKey = !presetStr\n ? options?.preset || this.options?.defaultPreset || IntlSortPipe.DEFAULT_OPTIONS.defaultPreset\n : options;\n const preset = presetKey\n ? (this.options?.presets?.[presetKey] || IntlSortPipe.DEFAULT_OPTIONS.presets?.[presetKey])\n : undefined;\n return {...preset, ...(!presetStr ? options : undefined)};\n }\n}\n","import { ChangeDetectorRef, Inject, InjectionToken, LOCALE_ID, NgZone, OnDestroy, Optional, Pipe, PipeTransform } from '@angular/core';\nimport { INTL_DATE_OPTIONS, INTL_DATE_TIMEZONE, IntlDateGlobalOptions, IntlDateLocalOptions, IntlDatePipe } from './intl-date.pipe';\n\nconst UNITS: {[key in Intl.RelativeTimeFormatUnit]: number} = {\n year: 1 * 60 * 60 * 24 * 365,\n years: 1 * 60 * 60 * 24 * 365,\n quarter: 1 * 60 * 60 * 24 * 365 / 4,\n quarters: 1 * 60 * 60 * 24 * 365 / 4,\n month: 1 * 60 * 60 * 24 * 365 / 12,\n months: 1 * 60 * 60 * 24 * 365 / 12,\n week: 1 * 60 * 60 * 24 * 7,\n weeks: 1 * 60 * 60 * 24 * 7,\n day: 1 * 60 * 60 * 24,\n days: 1 * 60 * 60 * 24,\n hour: 1 * 60 * 60,\n hours: 1 * 60 * 60,\n minute: 1 * 60,\n minutes: 1 * 60,\n second: 1,\n seconds: 1\n};\n\n/** A preconfigured option preset for the IntlTimeagoPipe. */\nexport interface IntlTimeagoOptions extends Intl.RelativeTimeFormatOptions {\n reference?: Date | number;\n units?: Intl.RelativeTimeFormatUnit[];\n now?: string;\n minRelative?: number;\n maxRelative?: number;\n dateOptions?: string | IntlDateLocalOptions;\n}\n\n/** Global options and presets for the IntlTimeagoPipe. */\nexport interface IntlTimeagoGlobalOptions {\n presets?: { [key: string]: IntlTimeagoOptions };\n defaultPreset?: string;\n units?: Intl.RelativeTimeFormatUnit[];\n now?: string;\n minRelative?: number;\n maxRelative?: number;\n dateOptions?: string | IntlDateLocalOptions;\n}\n\n/** Options for a transform call of the IntlTimeagoPipe. */\nexport interface IntlTimeagoLocalOptions extends IntlTimeagoOptions {\n preset?: string;\n}\n\nexport const INTL_TIMEAGO_OPTIONS =\n new InjectionToken<IntlTimeagoGlobalOptions>('IntlTimeagoOptions');\n\nexport const INTL_TIMEAGO_PRESET_SHORT: IntlTimeagoOptions =\n { numeric: 'auto', style: 'short', dateOptions: 'shortDate' };\nexport const INTL_TIMEAGO_PRESET_LONG: IntlTimeagoOptions =\n { numeric: 'auto', style: 'long', dateOptions: 'mediumDate' };\n\n/**\n * A pipe that formats a date value to a human-readable relative-timeago string\n * using the Intl.RelativeTimeFormat API.\n */\n@Pipe({\n name: 'intlTimeago',\n standalone: true,\n pure: false\n})\nexport class IntlTimeagoPipe implements PipeTransform, OnDestroy {\n private readonly intlDatePipe: IntlDatePipe\n private static readonly DEFAULT_OPTIONS: IntlTimeagoGlobalOptions = {\n presets: {\n short: INTL_TIMEAGO_PRESET_SHORT,\n long: INTL_TIMEAGO_PRESET_LONG,\n }\n };\n\n private lastValue?: Date | string | number | null;\n private lastOptions?: string | IntlTimeagoLocalOptions;\n private lastLocales: string[] = [];\n private text: string | null = null;\n private timer?: number;\n private update?: number;\n \n constructor(\n private cdRef: ChangeDetectorRef,\n private ngZone: NgZone,\n @Inject(LOCALE_ID) private readonly locale: string,\n @Inject(INTL_TIMEAGO_OPTIONS) @Optional() private readonly options: IntlTimeagoGlobalOptions | null,\n @Inject(INTL_DATE_OPTIONS) @Optional() dateOptions: IntlDateGlobalOptions | null,\n @Inject(INTL_DATE_TIMEZONE) @Optional() dateTimezone: string | null\n ) {\n this.intlDatePipe = new IntlDatePipe(locale, dateOptions, dateTimezone);\n }\n\n ngOnDestroy(): void {\n this.removeTimer();\n }\n\n transform(value?: Date | string | number | null, options?: string | IntlTimeagoLocalOptions, ...locales: string[]): string | null {\n if (value !== this.lastValue || options !== this.lastOptions || locales.join() !== this.lastLocales.join()) {\n this.lastValue = value;\n this.lastOptions = options;\n this.lastLocales = locales;\n this.process();\n this.removeTimer();\n this.createTimer();\n } else {\n this.createTimer();\n }\n return this.text;\n }\n\n private process(): void {\n if (this.lastValue == null) {\n this.text = null;\n this.update = undefined;\n return;\n }\n\n const _locales = this.getLocales(this.lastLocales);\n const _options = this.getOptions(this.lastOptions);\n\n const now = new Date(_options.reference ?? new Date());\n const then = new Date(this.lastValue);\n const seconds = Math.abs(Math.round((then.getTime() - now.getTime()) / 1000));\n const minRelative = _options.minRelative ?? IntlTimeagoPipe.DEFAULT_OPTIONS.minRelative ?? -1;\n const maxRelative = _options.maxRelative ?? IntlTimeagoPipe.DEFAULT_OPTIONS.maxRelative ?? Number.MAX_SAFE_INTEGER;\n\n if (seconds < minRelative) {\n this.text = _options.now ?? IntlTimeagoPipe.DEFAULT_OPTIONS.now ?? '';\n this.update = minRelative - seconds;\n } else if (seconds >= maxRelative) {\n this.text = this.intlDatePipe.transform(then, _options.dateOptions, ..._locales);\n this.update = undefined;\n } else {\n const allowed = _options.units ?? IntlTimeagoPipe.DEFAULT_OPTIONS.units;\n const unit = this.getUnit(seconds, allowed);\n const diff = this.getDiff(now, then, unit);\n this.text = new Intl.RelativeTimeFormat(_locales, _options).format(diff, unit);\n this.update = UNITS[unit] - (seconds % UNITS[unit]);\n }\n }\n\n private getUnit(seconds: number, allowed?: Intl.RelativeTimeFormatUnit[]): Intl.RelativeTimeFormatUnit {\n const units = Object.entries(UNITS)\n .sort(([, a], [, b]) => a - b)\n .filter(([u, v]) => seconds >= v && (allowed?.includes(u as Intl.RelativeTimeFormatUnit) ?? true))\n .reverse();\n return units?.[0]?.[0] as Intl.RelativeTimeFormatUnit ?? allowed?.sort((a, b) => UNITS[a] - UNITS[b])?.[0] ?? 'second';\n }\n\n private getDiff(now: Date, then: Date, unit: Intl.RelativeTimeFormatUnit): number {\n return Math.ceil((then.getTime() - now.getTime()) / 1000 / UNITS[unit]);\n }\n\n private getLocales(locales: string[]): string[] {\n return [...locales, this.locale];\n }\n\n private getOptions(options?: string | IntlTimeagoLocalOptions): IntlTimeagoOptions {\n const presetStr = typeof options === 'string';\n const presetKey = !presetStr\n ? options?.preset || this.options?.defaultPreset || IntlTimeagoPipe.DEFAULT_OPTIONS.defaultPreset\n : options;\n const preset = presetKey\n ? (this.options?.presets?.[presetKey] || IntlTimeagoPipe.DEFAULT_OPTIONS.presets?.[presetKey])\n : undefined;\n return {...preset, ...(!presetStr ? options : undefined)};\n }\n\n private createTimer(): void {\n if (this.timer || !this.update) {\n return;\n }\n\n const update = this.update;\n this.timer = this.ngZone.runOutsideAngular(() => window.setTimeout(() => {\n this.process();\n this.timer = undefined;\n this.ngZone.run(() => this.cdRef.markForCheck());\n }, update * 1000));\n }\n\n private removeTimer(): void {\n if (this.timer) {\n window.clearTimeout(this.timer);\n this.timer = undefined;\n }\n }\n}\n","/*\n * Public API Surface of ngx-intl\n */\n\nexport * from './lib/intl-date.pipe';\n// export * from './lib/intl-list.pipe';\nexport * from './lib/intl-number.pipe';\nexport * from './lib/intl-plural.pipe';\nexport * from './lib/intl-sort.pipe';\nexport * from './lib/intl-timeago.pipe';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}