@bitrix24/b24jssdk
Version:
Bitrix24 REST API JavaScript SDK
1 lines • 4.72 kB
Source Map (JSON)
{"version":3,"file":"numbers.cjs","sources":["../../../../src/tools/formatters/numbers.ts"],"sourcesContent":["import { Type } from '../type'\n\n/**\n * Locale-aware number formatter built on `Intl.NumberFormat`.\n *\n * A singleton — obtain it through `useFormatter()` rather than constructing\n * it directly (the constructor is guarded and throws `TypeError`). Integers\n * are formatted with no fraction digits and non-integers with exactly two.\n */\nexport default class FormatterNumbers {\n private static isInternalConstructing: boolean = false\n private static instance: FormatterNumbers | null = null\n private _defLocale: null | string = null\n private constructor() {\n if (!FormatterNumbers.isInternalConstructing) {\n throw new TypeError('FormatterNumber is not constructable')\n }\n FormatterNumbers.isInternalConstructing = false\n }\n\n /**\n * Returns the shared `FormatterNumbers` singleton, creating it on first use.\n *\n * @returns The shared instance.\n */\n static getInstance(): FormatterNumbers {\n if (!FormatterNumbers.instance) {\n FormatterNumbers.isInternalConstructing = true\n FormatterNumbers.instance = new FormatterNumbers()\n }\n return FormatterNumbers.instance\n }\n\n /**\n * Sets the default locale used by {@link format} when no explicit locale is\n * passed. Affects every consumer of the shared instance.\n *\n * @param locale - A BCP 47 locale tag (e.g. `'de'`, `'ru'`).\n */\n setDefLocale(locale: string) {\n this._defLocale = locale\n }\n\n /**\n * Formats a number for the given (or default) locale.\n *\n * The locale falls back to the value set via {@link setDefLocale}, then to\n * `navigator.language`, then to `'en'`. Integers get no fraction digits and\n * non-integers exactly two. For `ru`-based locales the decimal comma is\n * normalised to a dot.\n *\n * @param value - The number to format.\n * @param locale - Optional BCP 47 locale tag overriding the default.\n * @returns The formatted number.\n *\n * @example\n * ```ts\n * formatterNumber.format(1234.5) // '1,234.50'\n * formatterNumber.format(1234.5, 'de') // '1.234,50'\n * ```\n */\n format(value: number, locale?: string): string {\n let formatter\n if (typeof locale === 'undefined' || !Type.isStringFilled(locale)) {\n locale = Type.isStringFilled(this._defLocale)\n ? this._defLocale || 'en'\n : (\n typeof navigator === 'undefined'\n ? 'en'\n : navigator?.language || 'en'\n )\n }\n\n if (Number.isInteger(value)) {\n formatter = new Intl.NumberFormat(locale, {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0\n })\n } else {\n formatter = new Intl.NumberFormat(locale, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n })\n }\n\n let result = formatter.format(value)\n if (locale.includes('ru')) {\n result = result.replace(',', '.')\n }\n\n return result\n }\n}\n"],"names":["Type"],"mappings":";;;;;;;;;;;;;;;;AASA,MAAqB,gBAAA,CAAiB;AAAA,EATtC;AASsC,IAAA,MAAA,CAAA,IAAA,EAAA,kBAAA,CAAA;AAAA;AAAA,EACpC,OAAe,sBAAA,GAAkC,KAAA;AAAA,EACjD,OAAe,QAAA,GAAoC,IAAA;AAAA,EAC3C,UAAA,GAA4B,IAAA;AAAA,EAC5B,WAAA,GAAc;AACpB,IAAA,IAAI,CAAC,iBAAiB,sBAAA,EAAwB;AAC5C,MAAA,MAAM,IAAI,UAAU,sCAAsC,CAAA;AAAA,IAC5D;AACA,IAAA,gBAAA,CAAiB,sBAAA,GAAyB,KAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,WAAA,GAAgC;AACrC,IAAA,IAAI,CAAC,iBAAiB,QAAA,EAAU;AAC9B,MAAA,gBAAA,CAAiB,sBAAA,GAAyB,IAAA;AAC1C,MAAA,gBAAA,CAAiB,QAAA,GAAW,IAAI,gBAAA,EAAiB;AAAA,IACnD;AACA,IAAA,OAAO,gBAAA,CAAiB,QAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa,MAAA,EAAgB;AAC3B,IAAA,IAAA,CAAK,UAAA,GAAa,MAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,MAAA,CAAO,OAAe,MAAA,EAAyB;AAC7C,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAACA,SAAA,CAAK,cAAA,CAAe,MAAM,CAAA,EAAG;AACjE,MAAA,MAAA,GAASA,SAAA,CAAK,cAAA,CAAe,IAAA,CAAK,UAAU,CAAA,GACxC,IAAA,CAAK,UAAA,IAAc,IAAA,GAEjB,OAAO,SAAA,KAAc,WAAA,GACjB,IAAA,GACA,WAAW,QAAA,IAAY,IAAA;AAAA,IAEnC;AAEA,IAAA,IAAI,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,EAAG;AAC3B,MAAA,SAAA,GAAY,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ;AAAA,QACxC,qBAAA,EAAuB,CAAA;AAAA,QACvB,qBAAA,EAAuB;AAAA,OACxB,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,SAAA,GAAY,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ;AAAA,QACxC,qBAAA,EAAuB,CAAA;AAAA,QACvB,qBAAA,EAAuB;AAAA,OACxB,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,GAAS,SAAA,CAAU,MAAA,CAAO,KAAK,CAAA;AACnC,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,EAAG;AACzB,MAAA,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AAAA,IAClC;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;;"}