UNPKG

6.28 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/util/intlPatches.js"],"names":["intlFormats","USD","symbol","decimal","groupDelim","GBP","EUR","IntlPatches","formatToPartsPatch","num","currency","maximumFractionDigits","useGrouping","format","parts","type","value","toFixed","match","integer","fraction","intParts","firstGroupLength","length","integerSlice","push","JSON","stringify","slice","groups","map","intPart","groupDelimJSON","intAndGroupParts","parse","join","concat","toParts","formatToParts","resolvedOptions"],"mappings":"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","sourcesContent":["/**\n * A [ponyfill](https://github.com/sindresorhus/ponyfill) is an opt-in polyfill,\n * which replaces missing builtins on older or non-compliant platforms, but\n * without monkey-patching the native API.\n *\n * Many browsers do not yet support Intl.NumberFormat.prototype.formatToParts,\n * which is tracked here: https://github.com/tc39/proposal-intl-formatToParts\n *\n * The polyfill available in that repository covers many edge cases, but it's\n * more functionality than we need at this stage, it's not distributed over\n * NPM, and it's 18kb. The below\n * [ponyfill](https://github.com/sindresorhus/ponyfill) is not fully compliant,\n * but it'll do for now.\n *\n * TODO: Replace with a formally maintained, but small-enough, ponyfill.\n */\n\nconst intlFormats = {\n USD: {\n symbol: '$',\n decimal: '.',\n groupDelim: ','\n },\n GBP: {\n symbol: '£',\n decimal: '.',\n groupDelim: ','\n },\n EUR: {\n symbol: '€',\n decimal: '.',\n groupDelim: ','\n }\n};\n\nconst IntlPatches = {\n formatToPartsPatch({ currency, maximumFractionDigits, useGrouping }, num) {\n const format = intlFormats[currency] || {\n ...intlFormats.USD,\n symbol: currency\n };\n const { symbol, decimal, groupDelim } = format;\n const parts = [{ type: 'currency', value: symbol }];\n\n const [integer, fraction] = num\n .toFixed(maximumFractionDigits)\n .match(/\\d+/g);\n\n if (useGrouping !== false) {\n const intParts = [];\n const firstGroupLength = integer.length % 3;\n let integerSlice = integer;\n if (firstGroupLength > 0) {\n intParts.push(\n JSON.stringify({\n type: 'integer',\n value: integer.slice(0, firstGroupLength)\n })\n );\n integerSlice = integer.slice(firstGroupLength);\n }\n\n const groups = integerSlice.match(/\\d{3}/g);\n\n if (groups) {\n intParts.push(\n ...groups.map(intPart =>\n JSON.stringify({\n type: 'integer',\n value: intPart\n })\n )\n );\n }\n\n const groupDelimJSON =\n ',' +\n JSON.stringify({\n type: 'group',\n value: groupDelim\n }) +\n ',';\n\n const intAndGroupParts = JSON.parse(\n `[${intParts.join(groupDelimJSON)}]`\n );\n\n parts.push(...intAndGroupParts);\n } else {\n parts.push({ type: 'integer', value: integer });\n }\n return parts.concat([\n { type: 'decimal', value: decimal },\n { type: 'fraction', value: fraction }\n ]);\n },\n\n toParts(num) {\n return this.formatToParts\n ? this.formatToParts(num)\n : IntlPatches.formatToPartsPatch(this.resolvedOptions(), num);\n }\n};\nexport default IntlPatches;\n"],"file":"intlPatches.js"}
\No newline at end of file