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