UNPKG

@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.

63 lines 9.13 kB
import { Inject, InjectionToken, LOCALE_ID, Optional, Pipe } from '@angular/core'; import * as i0 from "@angular/core"; export const INTL_NUMBER_OPTIONS = new InjectionToken('IntlNumberOptions'); export const INTL_NUMBER_PRESET_SHORT = { useGrouping: false, maximumFractionDigits: 2 }; export const INTL_NUMBER_PRESET_LONG = { maximumFractionDigits: 8 }; export const INTL_NUMBER_PRESET_CURRENCY = { style: 'currency', currency: 'USD' }; export const INTL_NUMBER_PRESET_PERCENT = { style: 'percent' }; /** * A pipe that formats a number using the Intl.NumberFormat API. */ export class IntlNumberPipe { constructor(locale, options) { this.locale = locale; this.options = options; } transform(value, options, ...locales) { if (value === null) { return null; } const _locales = this.getLocales(locales); const _options = this.getOptions(options); return new Intl.NumberFormat(_locales, _options).format(value); } getLocales(locales) { return [...locales, this.locale]; } getOptions(options) { const presetStr = typeof options === 'string'; const presetKey = !presetStr ? options?.preset || this.options?.defaultPreset || IntlNumberPipe.DEFAULT_OPTIONS.defaultPreset : options; const preset = presetKey ? (this.options?.presets?.[presetKey] || IntlNumberPipe.DEFAULT_OPTIONS.presets?.[presetKey]) : undefined; return { ...preset, ...(!presetStr ? options : undefined) }; } } IntlNumberPipe.DEFAULT_OPTIONS = { presets: { short: INTL_NUMBER_PRESET_SHORT, long: INTL_NUMBER_PRESET_LONG, currency: INTL_NUMBER_PRESET_CURRENCY, percent: INTL_NUMBER_PRESET_PERCENT } }; IntlNumberPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IntlNumberPipe, deps: [{ token: LOCALE_ID }, { token: INTL_NUMBER_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Pipe }); IntlNumberPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: IntlNumberPipe, isStandalone: true, name: "intlNumber" }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IntlNumberPipe, decorators: [{ type: Pipe, args: [{ name: 'intlNumber', standalone: true }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID] }] }, { type: undefined, decorators: [{ type: Inject, args: [INTL_NUMBER_OPTIONS] }, { type: Optional }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50bC1udW1iZXIucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1pbnRsL3NyYy9saWIvaW50bC1udW1iZXIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBZ0JqRyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FDOUIsSUFBSSxjQUFjLENBQTBCLG1CQUFtQixDQUFDLENBQUM7QUFFbkUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQ25DLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FDbEMsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvQixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FDdEMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN6QyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FDckMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFFdkI7O0dBRUc7QUFLSCxNQUFNLE9BQU8sY0FBYztJQVV6QixZQUNzQyxNQUFjLEVBQ1EsT0FBdUM7UUFEN0QsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNRLFlBQU8sR0FBUCxPQUFPLENBQWdDO0lBQ2hHLENBQUM7SUFFSixTQUFTLENBQUMsS0FBNkIsRUFBRSxPQUF5QyxFQUFFLEdBQUcsT0FBaUI7UUFDdEcsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8sVUFBVSxDQUFDLE9BQWlCO1FBQ2xDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVPLFVBQVUsQ0FBQyxPQUF5QztRQUMxRCxNQUFNLFNBQVMsR0FBRyxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUM7UUFDOUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxTQUFTO1lBQzFCLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxJQUFJLGNBQWMsQ0FBQyxlQUFlLENBQUMsYUFBYTtZQUNoRyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ1osTUFBTSxNQUFNLEdBQUcsU0FBUztZQUN0QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0YsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNkLE9BQU8sRUFBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUMsQ0FBQztJQUM1RCxDQUFDOztBQXJDdUIsOEJBQWUsR0FBNEI7SUFDakUsT0FBTyxFQUFFO1FBQ1AsS0FBSyxFQUFFLHdCQUF3QjtRQUMvQixJQUFJLEVBQUUsdUJBQXVCO1FBQzdCLFFBQVEsRUFBRSwyQkFBMkI7UUFDckMsT0FBTyxFQUFFLDBCQUEwQjtLQUNwQztDQUNELENBQUE7MkdBUlMsY0FBYyxrQkFXZixTQUFTLGFBQ1QsbUJBQW1CO3lHQVpsQixjQUFjOzJGQUFkLGNBQWM7a0JBSjFCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBWUksTUFBTTsyQkFBQyxTQUFTOzswQkFDaEIsTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUFHLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGlvblRva2VuLCBMT0NBTEVfSUQsIE9wdGlvbmFsLCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKiBBIHByZWNvbmZpZ3VyZWQgb3B0aW9uIHByZXNldCBmb3IgdGhlIEludGxOdW1iZXJQaXBlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRsTnVtYmVyT3B0aW9ucyBleHRlbmRzIEludGwuTnVtYmVyRm9ybWF0T3B0aW9ucyB7fVxuXG4vKiogR2xvYmFsIG9wdGlvbnMgYW5kIHByZXNldHMgZm9yIHRoZSBJbnRsTnVtYmVyUGlwZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50bE51bWJlckdsb2JhbE9wdGlvbnMge1xuICBwcmVzZXRzPzogeyBba2V5OiBzdHJpbmddOiBJbnRsTnVtYmVyT3B0aW9ucyB9O1xuICBkZWZhdWx0UHJlc2V0Pzogc3RyaW5nO1xufVxuXG4vKiogT3B0aW9ucyBmb3IgYSB0cmFuc2Zvcm0gY2FsbCBvZiB0aGUgSW50bE51bWJlclBpcGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGxOdW1iZXJMb2NhbE9wdGlvbnMgZXh0ZW5kcyBJbnRsTnVtYmVyT3B0aW9ucyB7XG4gIHByZXNldD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IElOVExfTlVNQkVSX09QVElPTlMgPVxuICBuZXcgSW5qZWN0aW9uVG9rZW48SW50bE51bWJlckdsb2JhbE9wdGlvbnM+KCdJbnRsTnVtYmVyT3B0aW9ucycpO1xuXG5leHBvcnQgY29uc3QgSU5UTF9OVU1CRVJfUFJFU0VUX1NIT1JUOiBJbnRsTnVtYmVyT3B0aW9ucyA9XG4gIHsgdXNlR3JvdXBpbmc6IGZhbHNlLCBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDIgfTtcbmV4cG9ydCBjb25zdCBJTlRMX05VTUJFUl9QUkVTRVRfTE9ORzogSW50bE51bWJlck9wdGlvbnMgPVxuICB7IG1heGltdW1GcmFjdGlvbkRpZ2l0czogOCB9O1xuZXhwb3J0IGNvbnN0IElOVExfTlVNQkVSX1BSRVNFVF9DVVJSRU5DWTogSW50bE51bWJlck9wdGlvbnMgPVxuICB7IHN0eWxlOiAnY3VycmVuY3knLCBjdXJyZW5jeTogJ1VTRCcgfTtcbmV4cG9ydCBjb25zdCBJTlRMX05VTUJFUl9QUkVTRVRfUEVSQ0VOVDogSW50bE51bWJlck9wdGlvbnMgPVxuICB7IHN0eWxlOiAncGVyY2VudCcgfTtcblxuLyoqXG4gKiBBIHBpcGUgdGhhdCBmb3JtYXRzIGEgbnVtYmVyIHVzaW5nIHRoZSBJbnRsLk51bWJlckZvcm1hdCBBUEkuXG4gKi9cbkBQaXBlKHtcbiAgbmFtZTogJ2ludGxOdW1iZXInLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEludGxOdW1iZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfT1BUSU9OUzogSW50bE51bWJlckdsb2JhbE9wdGlvbnMgPSB7XG4gICAgcHJlc2V0czoge1xuICAgICAgc2hvcnQ6IElOVExfTlVNQkVSX1BSRVNFVF9TSE9SVCxcbiAgICAgIGxvbmc6IElOVExfTlVNQkVSX1BSRVNFVF9MT05HLFxuICAgICAgY3VycmVuY3k6IElOVExfTlVNQkVSX1BSRVNFVF9DVVJSRU5DWSxcbiAgICAgIHBlcmNlbnQ6IElOVExfTlVNQkVSX1BSRVNFVF9QRVJDRU5UXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTE9DQUxFX0lEKSBwcml2YXRlIHJlYWRvbmx5IGxvY2FsZTogc3RyaW5nLFxuICAgIEBJbmplY3QoSU5UTF9OVU1CRVJfT1BUSU9OUykgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBJbnRsTnVtYmVyR2xvYmFsT3B0aW9ucyB8IG51bGxcbiAgKSB7fVxuXG4gIHRyYW5zZm9ybSh2YWx1ZTogbnVtYmVyIHwgYmlnaW50IHwgbnVsbCwgb3B0aW9ucz86IHN0cmluZyB8IEludGxOdW1iZXJMb2NhbE9wdGlvbnMsIC4uLmxvY2FsZXM6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBfbG9jYWxlcyA9IHRoaXMuZ2V0TG9jYWxlcyhsb2NhbGVzKTtcbiAgICBjb25zdCBfb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KF9sb2NhbGVzLCBfb3B0aW9ucykuZm9ybWF0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxlcyhsb2NhbGVzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLmxvY2FsZXMsIHRoaXMubG9jYWxlXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3B0aW9ucyhvcHRpb25zPzogc3RyaW5nIHwgSW50bE51bWJlckxvY2FsT3B0aW9ucyk6IEludGxOdW1iZXJPcHRpb25zIHtcbiAgICBjb25zdCBwcmVzZXRTdHIgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZyc7XG4gICAgY29uc3QgcHJlc2V0S2V5ID0gIXByZXNldFN0clxuICAgICAgPyBvcHRpb25zPy5wcmVzZXQgfHwgdGhpcy5vcHRpb25zPy5kZWZhdWx0UHJlc2V0IHx8IEludGxOdW1iZXJQaXBlLkRFRkFVTFRfT1BUSU9OUy5kZWZhdWx0UHJlc2V0XG4gICAgICA6IG9wdGlvbnM7XG4gICAgY29uc3QgcHJlc2V0ID0gcHJlc2V0S2V5XG4gICAgICA/ICh0aGlzLm9wdGlvbnM/LnByZXNldHM/LltwcmVzZXRLZXldIHx8IEludGxOdW1iZXJQaXBlLkRFRkFVTFRfT1BUSU9OUy5wcmVzZXRzPy5bcHJlc2V0S2V5XSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB7Li4ucHJlc2V0LCAuLi4oIXByZXNldFN0ciA/IG9wdGlvbnMgOiB1bmRlZmluZWQpfTtcbiAgfVxufVxuIl19