@metamask/client-utils 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -1
- package/dist/formatters/create-formatters.cjs +238 -0
- package/dist/formatters/create-formatters.cjs.map +1 -0
- package/dist/formatters/create-formatters.d.cts +19 -0
- package/dist/formatters/create-formatters.d.cts.map +1 -0
- package/dist/formatters/create-formatters.d.mts +19 -0
- package/dist/formatters/create-formatters.d.mts.map +1 -0
- package/dist/formatters/create-formatters.mjs +234 -0
- package/dist/formatters/create-formatters.mjs.map +1 -0
- package/dist/index.cjs +3 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -0
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +2 -0
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.2.0]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Add `createFormatters` factory with shared display formatters (`formatNumber`, `formatCurrency`, `formatCurrencyCompact`, `formatCurrencyWithMinThreshold`, `formatCurrencyTokenPrice`, `formatToken`, `formatTokenQuantity`, `formatTokenAmount`, `formatPercentWithMinThreshold`, `formatCompact`, `formatDateTime`) ([#9504](https://github.com/MetaMask/core/pull/9504))
|
|
15
|
+
|
|
10
16
|
## [1.1.0]
|
|
11
17
|
|
|
12
18
|
### Added
|
|
@@ -33,6 +39,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
33
39
|
- Bump `@metamask/transaction-controller` from `^68.2.2` to `^68.3.0` ([#9421](https://github.com/MetaMask/core/pull/9421))
|
|
34
40
|
- Bump `@metamask/keyring-api` from `^23.3.0` to `^23.5.0` ([#9390](https://github.com/MetaMask/core/pull/9390))
|
|
35
41
|
|
|
36
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/client-utils@1.
|
|
42
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/client-utils@1.2.0...HEAD
|
|
43
|
+
[1.2.0]: https://github.com/MetaMask/core/compare/@metamask/client-utils@1.1.0...@metamask/client-utils@1.2.0
|
|
37
44
|
[1.1.0]: https://github.com/MetaMask/core/compare/@metamask/client-utils@1.0.0...@metamask/client-utils@1.1.0
|
|
38
45
|
[1.0.0]: https://github.com/MetaMask/core/releases/tag/@metamask/client-utils@1.0.0
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createFormatters = void 0;
|
|
4
|
+
const FALLBACK_LOCALE = 'en';
|
|
5
|
+
const twoDecimals = {
|
|
6
|
+
minimumFractionDigits: 2,
|
|
7
|
+
maximumFractionDigits: 2,
|
|
8
|
+
};
|
|
9
|
+
const oneSignificantDigit = {
|
|
10
|
+
minimumSignificantDigits: 1,
|
|
11
|
+
maximumSignificantDigits: 1,
|
|
12
|
+
};
|
|
13
|
+
const threeSignificantDigits = {
|
|
14
|
+
minimumSignificantDigits: 3,
|
|
15
|
+
maximumSignificantDigits: 3,
|
|
16
|
+
};
|
|
17
|
+
const numberFormatCache = {};
|
|
18
|
+
const dateTimeFormatCache = {};
|
|
19
|
+
function getCachedNumberFormat(locale, options) {
|
|
20
|
+
const key = `${locale}_${JSON.stringify(options)}`;
|
|
21
|
+
let format = numberFormatCache[key];
|
|
22
|
+
if (format) {
|
|
23
|
+
return format;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
format = new Intl.NumberFormat(locale, options);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
if (error instanceof RangeError) {
|
|
30
|
+
format = new Intl.NumberFormat(locale, twoDecimals);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
numberFormatCache[key] = format;
|
|
37
|
+
return format;
|
|
38
|
+
}
|
|
39
|
+
function getCachedDateTimeFormat(locale, options) {
|
|
40
|
+
const key = `${locale}_${JSON.stringify(options)}`;
|
|
41
|
+
if (!dateTimeFormatCache[key]) {
|
|
42
|
+
dateTimeFormatCache[key] = new Intl.DateTimeFormat(locale, options);
|
|
43
|
+
}
|
|
44
|
+
return dateTimeFormatCache[key];
|
|
45
|
+
}
|
|
46
|
+
function formatNumber(config, value, options = {}) {
|
|
47
|
+
if (!Number.isFinite(Number(value))) {
|
|
48
|
+
return '';
|
|
49
|
+
}
|
|
50
|
+
const numberFormat = getCachedNumberFormat(config.locale, options);
|
|
51
|
+
// @ts-expect-error Remove this comment once TypeScript is updated to 5.5+
|
|
52
|
+
return numberFormat.format(value);
|
|
53
|
+
}
|
|
54
|
+
function formatCurrency(config, value, currency, options = {}) {
|
|
55
|
+
if (!Number.isFinite(Number(value))) {
|
|
56
|
+
return '';
|
|
57
|
+
}
|
|
58
|
+
const numberFormat = getCachedNumberFormat(config.locale, {
|
|
59
|
+
style: 'currency',
|
|
60
|
+
currency,
|
|
61
|
+
...options,
|
|
62
|
+
});
|
|
63
|
+
// @ts-expect-error Remove this comment once TypeScript is updated to 5.5+
|
|
64
|
+
return numberFormat.format(value);
|
|
65
|
+
}
|
|
66
|
+
function formatCurrencyCompact(config, value, currency) {
|
|
67
|
+
return formatCurrency(config, value, currency, {
|
|
68
|
+
notation: 'compact',
|
|
69
|
+
...twoDecimals,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
function formatCurrencyWithMinThreshold(config, value, currency) {
|
|
73
|
+
const minThreshold = 0.01;
|
|
74
|
+
const number = Number(value);
|
|
75
|
+
const absoluteValue = Math.abs(number);
|
|
76
|
+
if (!Number.isFinite(number)) {
|
|
77
|
+
return '';
|
|
78
|
+
}
|
|
79
|
+
if (number === 0) {
|
|
80
|
+
return formatCurrency(config, 0, currency);
|
|
81
|
+
}
|
|
82
|
+
if (absoluteValue < minThreshold) {
|
|
83
|
+
const formattedMin = formatCurrency(config, minThreshold, currency);
|
|
84
|
+
return `<${formattedMin}`;
|
|
85
|
+
}
|
|
86
|
+
return formatCurrency(config, number, currency);
|
|
87
|
+
}
|
|
88
|
+
function formatCurrencyTokenPrice(config, value, currency) {
|
|
89
|
+
const minThreshold = 0.00000001;
|
|
90
|
+
const number = Number(value);
|
|
91
|
+
const absoluteValue = Math.abs(number);
|
|
92
|
+
if (!Number.isFinite(number)) {
|
|
93
|
+
return '';
|
|
94
|
+
}
|
|
95
|
+
if (number === 0) {
|
|
96
|
+
return formatCurrency(config, 0, currency);
|
|
97
|
+
}
|
|
98
|
+
if (absoluteValue < minThreshold) {
|
|
99
|
+
return `<${formatCurrency(config, minThreshold, currency, oneSignificantDigit)}`;
|
|
100
|
+
}
|
|
101
|
+
if (absoluteValue < 1) {
|
|
102
|
+
return formatCurrency(config, number, currency, threeSignificantDigits);
|
|
103
|
+
}
|
|
104
|
+
if (absoluteValue < 1000000) {
|
|
105
|
+
return formatCurrency(config, number, currency);
|
|
106
|
+
}
|
|
107
|
+
return formatCurrencyCompact(config, number, currency);
|
|
108
|
+
}
|
|
109
|
+
function formatToken(config, value, symbol, options = {}) {
|
|
110
|
+
if (!Number.isFinite(Number(value))) {
|
|
111
|
+
return '';
|
|
112
|
+
}
|
|
113
|
+
const numberFormat = getCachedNumberFormat(config.locale, {
|
|
114
|
+
style: 'decimal',
|
|
115
|
+
...options,
|
|
116
|
+
});
|
|
117
|
+
// @ts-expect-error Remove this comment once TypeScript is updated to 5.5+
|
|
118
|
+
const formattedNumber = numberFormat.format(value);
|
|
119
|
+
return `${formattedNumber} ${symbol}`;
|
|
120
|
+
}
|
|
121
|
+
function formatTokenQuantity(config, value, symbol) {
|
|
122
|
+
const minThreshold = 0.00001;
|
|
123
|
+
const number = Number(value);
|
|
124
|
+
const absoluteValue = Math.abs(number);
|
|
125
|
+
if (!Number.isFinite(number)) {
|
|
126
|
+
return '';
|
|
127
|
+
}
|
|
128
|
+
if (number === 0) {
|
|
129
|
+
return formatToken(config, 0, symbol);
|
|
130
|
+
}
|
|
131
|
+
if (absoluteValue < minThreshold) {
|
|
132
|
+
return `<${formatToken(config, minThreshold, symbol, oneSignificantDigit)}`;
|
|
133
|
+
}
|
|
134
|
+
if (absoluteValue < 1) {
|
|
135
|
+
return formatToken(config, number, symbol, threeSignificantDigits);
|
|
136
|
+
}
|
|
137
|
+
if (absoluteValue < 1000000) {
|
|
138
|
+
return formatToken(config, number, symbol);
|
|
139
|
+
}
|
|
140
|
+
return formatToken(config, number, symbol, {
|
|
141
|
+
notation: 'compact',
|
|
142
|
+
...twoDecimals,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
// Format token quantity without trailing zeros.
|
|
146
|
+
function formatTokenAmount(config, value, symbol) {
|
|
147
|
+
const minThreshold = 0.00001;
|
|
148
|
+
const number = Number(value);
|
|
149
|
+
const absoluteValue = Math.abs(number);
|
|
150
|
+
if (!Number.isFinite(number)) {
|
|
151
|
+
return '';
|
|
152
|
+
}
|
|
153
|
+
if (number === 0) {
|
|
154
|
+
return formatToken(config, 0, symbol, { maximumFractionDigits: 0 });
|
|
155
|
+
}
|
|
156
|
+
if (absoluteValue < minThreshold) {
|
|
157
|
+
return `<${formatToken(config, minThreshold, symbol, {
|
|
158
|
+
minimumSignificantDigits: 1,
|
|
159
|
+
maximumSignificantDigits: 1,
|
|
160
|
+
})}`;
|
|
161
|
+
}
|
|
162
|
+
if (absoluteValue < 1) {
|
|
163
|
+
return formatToken(config, number, symbol, {
|
|
164
|
+
minimumSignificantDigits: 1,
|
|
165
|
+
maximumSignificantDigits: 4,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
if (absoluteValue < 1000000) {
|
|
169
|
+
return formatToken(config, number, symbol, {
|
|
170
|
+
minimumFractionDigits: 0,
|
|
171
|
+
maximumFractionDigits: 4,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
return formatToken(config, number, symbol, {
|
|
175
|
+
notation: 'compact',
|
|
176
|
+
minimumFractionDigits: 0,
|
|
177
|
+
maximumFractionDigits: 2,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
function formatPercentWithMinThreshold(config, value, options = {}) {
|
|
181
|
+
const minThreshold = 0.0001; // 0.01%
|
|
182
|
+
const number = Number(value);
|
|
183
|
+
if (!Number.isFinite(number)) {
|
|
184
|
+
return '';
|
|
185
|
+
}
|
|
186
|
+
const clamped = number === 0
|
|
187
|
+
? 0
|
|
188
|
+
: Math.sign(number) * Math.max(Math.abs(number), minThreshold);
|
|
189
|
+
return formatNumber(config, clamped, {
|
|
190
|
+
style: 'percent',
|
|
191
|
+
maximumFractionDigits: 2,
|
|
192
|
+
minimumFractionDigits: 2,
|
|
193
|
+
...options,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
function formatCompact(config, value) {
|
|
197
|
+
return formatNumber(config, value, {
|
|
198
|
+
notation: 'compact',
|
|
199
|
+
minimumFractionDigits: 2,
|
|
200
|
+
maximumFractionDigits: 2,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
function formatDateTime(config, timestamp, options) {
|
|
204
|
+
if (!timestamp) {
|
|
205
|
+
return '';
|
|
206
|
+
}
|
|
207
|
+
const date = new Date(timestamp);
|
|
208
|
+
if (isNaN(date.getTime())) {
|
|
209
|
+
return '';
|
|
210
|
+
}
|
|
211
|
+
return getCachedDateTimeFormat(config.locale, {
|
|
212
|
+
month: 'short',
|
|
213
|
+
day: 'numeric',
|
|
214
|
+
year: 'numeric',
|
|
215
|
+
hour: 'numeric',
|
|
216
|
+
minute: 'numeric',
|
|
217
|
+
hour12: true,
|
|
218
|
+
...options,
|
|
219
|
+
}).format(date);
|
|
220
|
+
}
|
|
221
|
+
function createFormatters({ locale = FALLBACK_LOCALE, }) {
|
|
222
|
+
const config = { locale };
|
|
223
|
+
return {
|
|
224
|
+
formatNumber: formatNumber.bind(null, config),
|
|
225
|
+
formatCurrency: formatCurrency.bind(null, config),
|
|
226
|
+
formatCurrencyCompact: formatCurrencyCompact.bind(null, config),
|
|
227
|
+
formatCurrencyWithMinThreshold: formatCurrencyWithMinThreshold.bind(null, config),
|
|
228
|
+
formatCurrencyTokenPrice: formatCurrencyTokenPrice.bind(null, config),
|
|
229
|
+
formatToken: formatToken.bind(null, config),
|
|
230
|
+
formatTokenQuantity: formatTokenQuantity.bind(null, config),
|
|
231
|
+
formatTokenAmount: formatTokenAmount.bind(null, config),
|
|
232
|
+
formatPercentWithMinThreshold: formatPercentWithMinThreshold.bind(null, config),
|
|
233
|
+
formatCompact: formatCompact.bind(null, config),
|
|
234
|
+
formatDateTime: formatDateTime.bind(null, config),
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
exports.createFormatters = createFormatters;
|
|
238
|
+
//# sourceMappingURL=create-formatters.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-formatters.cjs","sourceRoot":"","sources":["../../src/formatters/create-formatters.ts"],"names":[],"mappings":"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","sourcesContent":["const FALLBACK_LOCALE = 'en';\n\nconst twoDecimals = {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n};\n\nconst oneSignificantDigit = {\n minimumSignificantDigits: 1,\n maximumSignificantDigits: 1,\n};\n\nconst threeSignificantDigits = {\n minimumSignificantDigits: 3,\n maximumSignificantDigits: 3,\n};\n\nconst numberFormatCache: Record<string, Intl.NumberFormat> = {};\nconst dateTimeFormatCache: Record<string, Intl.DateTimeFormat> = {};\n\ntype Value = number | bigint | `${number}`;\n\nfunction getCachedNumberFormat(\n locale: string,\n options: Intl.NumberFormatOptions,\n): Intl.NumberFormat {\n const key = `${locale}_${JSON.stringify(options)}`;\n\n let format = numberFormatCache[key];\n\n if (format) {\n return format;\n }\n\n try {\n format = new Intl.NumberFormat(locale, options);\n } catch (error) {\n if (error instanceof RangeError) {\n format = new Intl.NumberFormat(locale, twoDecimals);\n } else {\n throw error;\n }\n }\n\n numberFormatCache[key] = format;\n return format;\n}\n\nfunction getCachedDateTimeFormat(\n locale: string,\n options: Intl.DateTimeFormatOptions,\n): Intl.DateTimeFormat {\n const key = `${locale}_${JSON.stringify(options)}`;\n if (!dateTimeFormatCache[key]) {\n dateTimeFormatCache[key] = new Intl.DateTimeFormat(locale, options);\n }\n return dateTimeFormatCache[key];\n}\n\nfunction formatNumber(\n config: { locale: string },\n value: Value,\n options: Intl.NumberFormatOptions = {},\n): string {\n if (!Number.isFinite(Number(value))) {\n return '';\n }\n\n const numberFormat = getCachedNumberFormat(config.locale, options);\n\n // @ts-expect-error Remove this comment once TypeScript is updated to 5.5+\n return numberFormat.format(value);\n}\n\nfunction formatCurrency(\n config: { locale: string },\n value: Value,\n currency: Intl.NumberFormatOptions['currency'],\n options: Intl.NumberFormatOptions = {},\n): string {\n if (!Number.isFinite(Number(value))) {\n return '';\n }\n\n const numberFormat = getCachedNumberFormat(config.locale, {\n style: 'currency',\n currency,\n ...options,\n });\n\n // @ts-expect-error Remove this comment once TypeScript is updated to 5.5+\n return numberFormat.format(value);\n}\n\nfunction formatCurrencyCompact(\n config: { locale: string },\n value: Value,\n currency: Intl.NumberFormatOptions['currency'],\n): string {\n return formatCurrency(config, value, currency, {\n notation: 'compact',\n ...twoDecimals,\n });\n}\n\nfunction formatCurrencyWithMinThreshold(\n config: { locale: string },\n value: Value,\n currency: Intl.NumberFormatOptions['currency'],\n): string {\n const minThreshold = 0.01;\n const number = Number(value);\n const absoluteValue = Math.abs(number);\n\n if (!Number.isFinite(number)) {\n return '';\n }\n\n if (number === 0) {\n return formatCurrency(config, 0, currency);\n }\n\n if (absoluteValue < minThreshold) {\n const formattedMin = formatCurrency(config, minThreshold, currency);\n return `<${formattedMin}`;\n }\n\n return formatCurrency(config, number, currency);\n}\n\nfunction formatCurrencyTokenPrice(\n config: { locale: string },\n value: Value,\n currency: Intl.NumberFormatOptions['currency'],\n): string {\n const minThreshold = 0.00000001;\n const number = Number(value);\n const absoluteValue = Math.abs(number);\n\n if (!Number.isFinite(number)) {\n return '';\n }\n\n if (number === 0) {\n return formatCurrency(config, 0, currency);\n }\n\n if (absoluteValue < minThreshold) {\n return `<${formatCurrency(config, minThreshold, currency, oneSignificantDigit)}`;\n }\n\n if (absoluteValue < 1) {\n return formatCurrency(config, number, currency, threeSignificantDigits);\n }\n\n if (absoluteValue < 1_000_000) {\n return formatCurrency(config, number, currency);\n }\n\n return formatCurrencyCompact(config, number, currency);\n}\n\nfunction formatToken(\n config: { locale: string },\n value: Value,\n symbol: string,\n options: Intl.NumberFormatOptions = {},\n): string {\n if (!Number.isFinite(Number(value))) {\n return '';\n }\n\n const numberFormat = getCachedNumberFormat(config.locale, {\n style: 'decimal',\n ...options,\n });\n\n // @ts-expect-error Remove this comment once TypeScript is updated to 5.5+\n const formattedNumber = numberFormat.format(value);\n\n return `${formattedNumber} ${symbol}`;\n}\n\nfunction formatTokenQuantity(\n config: { locale: string },\n value: Value,\n symbol: string,\n): string {\n const minThreshold = 0.00001;\n const number = Number(value);\n const absoluteValue = Math.abs(number);\n\n if (!Number.isFinite(number)) {\n return '';\n }\n\n if (number === 0) {\n return formatToken(config, 0, symbol);\n }\n\n if (absoluteValue < minThreshold) {\n return `<${formatToken(config, minThreshold, symbol, oneSignificantDigit)}`;\n }\n\n if (absoluteValue < 1) {\n return formatToken(config, number, symbol, threeSignificantDigits);\n }\n\n if (absoluteValue < 1_000_000) {\n return formatToken(config, number, symbol);\n }\n\n return formatToken(config, number, symbol, {\n notation: 'compact',\n ...twoDecimals,\n });\n}\n\n// Format token quantity without trailing zeros.\nfunction formatTokenAmount(\n config: { locale: string },\n value: Value,\n symbol: string,\n): string {\n const minThreshold = 0.00001;\n const number = Number(value);\n const absoluteValue = Math.abs(number);\n\n if (!Number.isFinite(number)) {\n return '';\n }\n\n if (number === 0) {\n return formatToken(config, 0, symbol, { maximumFractionDigits: 0 });\n }\n\n if (absoluteValue < minThreshold) {\n return `<${formatToken(config, minThreshold, symbol, {\n minimumSignificantDigits: 1,\n maximumSignificantDigits: 1,\n })}`;\n }\n\n if (absoluteValue < 1) {\n return formatToken(config, number, symbol, {\n minimumSignificantDigits: 1,\n maximumSignificantDigits: 4,\n });\n }\n\n if (absoluteValue < 1_000_000) {\n return formatToken(config, number, symbol, {\n minimumFractionDigits: 0,\n maximumFractionDigits: 4,\n });\n }\n\n return formatToken(config, number, symbol, {\n notation: 'compact',\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n });\n}\n\nfunction formatPercentWithMinThreshold(\n config: { locale: string },\n value: Value,\n options: Intl.NumberFormatOptions = {},\n): string {\n const minThreshold = 0.0001; // 0.01%\n const number = Number(value);\n\n if (!Number.isFinite(number)) {\n return '';\n }\n\n const clamped =\n number === 0\n ? 0\n : Math.sign(number) * Math.max(Math.abs(number), minThreshold);\n\n return formatNumber(config, clamped, {\n style: 'percent',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n ...options,\n });\n}\n\nfunction formatCompact(config: { locale: string }, value: Value): string {\n return formatNumber(config, value, {\n notation: 'compact',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n}\n\nfunction formatDateTime(\n config: { locale: string },\n timestamp: string | number,\n options?: Intl.DateTimeFormatOptions,\n): string {\n if (!timestamp) {\n return '';\n }\n const date = new Date(timestamp);\n if (isNaN(date.getTime())) {\n return '';\n }\n return getCachedDateTimeFormat(config.locale, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n hour12: true,\n ...options,\n }).format(date);\n}\n\nexport type Formatters = {\n formatNumber: (value: Value, options?: Intl.NumberFormatOptions) => string;\n formatCurrency: (\n value: Value,\n currency: Intl.NumberFormatOptions['currency'],\n options?: Intl.NumberFormatOptions,\n ) => string;\n formatCurrencyCompact: (\n value: Value,\n currency: Intl.NumberFormatOptions['currency'],\n ) => string;\n formatCurrencyWithMinThreshold: (\n value: Value,\n currency: Intl.NumberFormatOptions['currency'],\n ) => string;\n formatCurrencyTokenPrice: (\n value: Value,\n currency: Intl.NumberFormatOptions['currency'],\n ) => string;\n formatToken: (\n value: Value,\n symbol: string,\n options?: Intl.NumberFormatOptions,\n ) => string;\n formatTokenQuantity: (value: Value, symbol: string) => string;\n formatTokenAmount: (value: Value, symbol: string) => string;\n formatPercentWithMinThreshold: (\n value: Value,\n options?: Intl.NumberFormatOptions,\n ) => string;\n formatCompact: (value: Value) => string;\n formatDateTime: (\n timestamp: string | number,\n options?: Intl.DateTimeFormatOptions,\n ) => string;\n};\n\nexport function createFormatters({\n locale = FALLBACK_LOCALE,\n}: {\n locale?: string;\n}): Formatters {\n const config = { locale };\n return {\n formatNumber: formatNumber.bind(null, config),\n formatCurrency: formatCurrency.bind(null, config),\n formatCurrencyCompact: formatCurrencyCompact.bind(null, config),\n formatCurrencyWithMinThreshold: formatCurrencyWithMinThreshold.bind(\n null,\n config,\n ),\n formatCurrencyTokenPrice: formatCurrencyTokenPrice.bind(null, config),\n formatToken: formatToken.bind(null, config),\n formatTokenQuantity: formatTokenQuantity.bind(null, config),\n formatTokenAmount: formatTokenAmount.bind(null, config),\n formatPercentWithMinThreshold: formatPercentWithMinThreshold.bind(\n null,\n config,\n ),\n formatCompact: formatCompact.bind(null, config),\n formatDateTime: formatDateTime.bind(null, config),\n };\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
type Value = number | bigint | `${number}`;
|
|
2
|
+
export type Formatters = {
|
|
3
|
+
formatNumber: (value: Value, options?: Intl.NumberFormatOptions) => string;
|
|
4
|
+
formatCurrency: (value: Value, currency: Intl.NumberFormatOptions['currency'], options?: Intl.NumberFormatOptions) => string;
|
|
5
|
+
formatCurrencyCompact: (value: Value, currency: Intl.NumberFormatOptions['currency']) => string;
|
|
6
|
+
formatCurrencyWithMinThreshold: (value: Value, currency: Intl.NumberFormatOptions['currency']) => string;
|
|
7
|
+
formatCurrencyTokenPrice: (value: Value, currency: Intl.NumberFormatOptions['currency']) => string;
|
|
8
|
+
formatToken: (value: Value, symbol: string, options?: Intl.NumberFormatOptions) => string;
|
|
9
|
+
formatTokenQuantity: (value: Value, symbol: string) => string;
|
|
10
|
+
formatTokenAmount: (value: Value, symbol: string) => string;
|
|
11
|
+
formatPercentWithMinThreshold: (value: Value, options?: Intl.NumberFormatOptions) => string;
|
|
12
|
+
formatCompact: (value: Value) => string;
|
|
13
|
+
formatDateTime: (timestamp: string | number, options?: Intl.DateTimeFormatOptions) => string;
|
|
14
|
+
};
|
|
15
|
+
export declare function createFormatters({ locale, }: {
|
|
16
|
+
locale?: string;
|
|
17
|
+
}): Formatters;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=create-formatters.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-formatters.d.cts","sourceRoot":"","sources":["../../src/formatters/create-formatters.ts"],"names":[],"mappings":"AAoBA,KAAK,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;AA4S3C,MAAM,MAAM,UAAU,GAAG;IACvB,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,KAAK,MAAM,CAAC;IAC3E,cAAc,EAAE,CACd,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAC9C,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,KAC/B,MAAM,CAAC;IACZ,qBAAqB,EAAE,CACrB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,KAC3C,MAAM,CAAC;IACZ,8BAA8B,EAAE,CAC9B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,KAC3C,MAAM,CAAC;IACZ,wBAAwB,EAAE,CACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,KAC3C,MAAM,CAAC;IACZ,WAAW,EAAE,CACX,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,KAC/B,MAAM,CAAC;IACZ,mBAAmB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9D,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5D,6BAA6B,EAAE,CAC7B,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,KAC/B,MAAM,CAAC;IACZ,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;IACxC,cAAc,EAAE,CACd,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,OAAO,CAAC,EAAE,IAAI,CAAC,qBAAqB,KACjC,MAAM,CAAC;CACb,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAC/B,MAAwB,GACzB,EAAE;IACD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,UAAU,CAqBb"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
type Value = number | bigint | `${number}`;
|
|
2
|
+
export type Formatters = {
|
|
3
|
+
formatNumber: (value: Value, options?: Intl.NumberFormatOptions) => string;
|
|
4
|
+
formatCurrency: (value: Value, currency: Intl.NumberFormatOptions['currency'], options?: Intl.NumberFormatOptions) => string;
|
|
5
|
+
formatCurrencyCompact: (value: Value, currency: Intl.NumberFormatOptions['currency']) => string;
|
|
6
|
+
formatCurrencyWithMinThreshold: (value: Value, currency: Intl.NumberFormatOptions['currency']) => string;
|
|
7
|
+
formatCurrencyTokenPrice: (value: Value, currency: Intl.NumberFormatOptions['currency']) => string;
|
|
8
|
+
formatToken: (value: Value, symbol: string, options?: Intl.NumberFormatOptions) => string;
|
|
9
|
+
formatTokenQuantity: (value: Value, symbol: string) => string;
|
|
10
|
+
formatTokenAmount: (value: Value, symbol: string) => string;
|
|
11
|
+
formatPercentWithMinThreshold: (value: Value, options?: Intl.NumberFormatOptions) => string;
|
|
12
|
+
formatCompact: (value: Value) => string;
|
|
13
|
+
formatDateTime: (timestamp: string | number, options?: Intl.DateTimeFormatOptions) => string;
|
|
14
|
+
};
|
|
15
|
+
export declare function createFormatters({ locale, }: {
|
|
16
|
+
locale?: string;
|
|
17
|
+
}): Formatters;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=create-formatters.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-formatters.d.mts","sourceRoot":"","sources":["../../src/formatters/create-formatters.ts"],"names":[],"mappings":"AAoBA,KAAK,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;AA4S3C,MAAM,MAAM,UAAU,GAAG;IACvB,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,KAAK,MAAM,CAAC;IAC3E,cAAc,EAAE,CACd,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAC9C,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,KAC/B,MAAM,CAAC;IACZ,qBAAqB,EAAE,CACrB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,KAC3C,MAAM,CAAC;IACZ,8BAA8B,EAAE,CAC9B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,KAC3C,MAAM,CAAC;IACZ,wBAAwB,EAAE,CACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,KAC3C,MAAM,CAAC;IACZ,WAAW,EAAE,CACX,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,KAC/B,MAAM,CAAC;IACZ,mBAAmB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9D,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5D,6BAA6B,EAAE,CAC7B,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,KAC/B,MAAM,CAAC;IACZ,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC;IACxC,cAAc,EAAE,CACd,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,OAAO,CAAC,EAAE,IAAI,CAAC,qBAAqB,KACjC,MAAM,CAAC;CACb,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAC/B,MAAwB,GACzB,EAAE;IACD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,UAAU,CAqBb"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
const FALLBACK_LOCALE = 'en';
|
|
2
|
+
const twoDecimals = {
|
|
3
|
+
minimumFractionDigits: 2,
|
|
4
|
+
maximumFractionDigits: 2,
|
|
5
|
+
};
|
|
6
|
+
const oneSignificantDigit = {
|
|
7
|
+
minimumSignificantDigits: 1,
|
|
8
|
+
maximumSignificantDigits: 1,
|
|
9
|
+
};
|
|
10
|
+
const threeSignificantDigits = {
|
|
11
|
+
minimumSignificantDigits: 3,
|
|
12
|
+
maximumSignificantDigits: 3,
|
|
13
|
+
};
|
|
14
|
+
const numberFormatCache = {};
|
|
15
|
+
const dateTimeFormatCache = {};
|
|
16
|
+
function getCachedNumberFormat(locale, options) {
|
|
17
|
+
const key = `${locale}_${JSON.stringify(options)}`;
|
|
18
|
+
let format = numberFormatCache[key];
|
|
19
|
+
if (format) {
|
|
20
|
+
return format;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
format = new Intl.NumberFormat(locale, options);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (error instanceof RangeError) {
|
|
27
|
+
format = new Intl.NumberFormat(locale, twoDecimals);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
numberFormatCache[key] = format;
|
|
34
|
+
return format;
|
|
35
|
+
}
|
|
36
|
+
function getCachedDateTimeFormat(locale, options) {
|
|
37
|
+
const key = `${locale}_${JSON.stringify(options)}`;
|
|
38
|
+
if (!dateTimeFormatCache[key]) {
|
|
39
|
+
dateTimeFormatCache[key] = new Intl.DateTimeFormat(locale, options);
|
|
40
|
+
}
|
|
41
|
+
return dateTimeFormatCache[key];
|
|
42
|
+
}
|
|
43
|
+
function formatNumber(config, value, options = {}) {
|
|
44
|
+
if (!Number.isFinite(Number(value))) {
|
|
45
|
+
return '';
|
|
46
|
+
}
|
|
47
|
+
const numberFormat = getCachedNumberFormat(config.locale, options);
|
|
48
|
+
// @ts-expect-error Remove this comment once TypeScript is updated to 5.5+
|
|
49
|
+
return numberFormat.format(value);
|
|
50
|
+
}
|
|
51
|
+
function formatCurrency(config, value, currency, options = {}) {
|
|
52
|
+
if (!Number.isFinite(Number(value))) {
|
|
53
|
+
return '';
|
|
54
|
+
}
|
|
55
|
+
const numberFormat = getCachedNumberFormat(config.locale, {
|
|
56
|
+
style: 'currency',
|
|
57
|
+
currency,
|
|
58
|
+
...options,
|
|
59
|
+
});
|
|
60
|
+
// @ts-expect-error Remove this comment once TypeScript is updated to 5.5+
|
|
61
|
+
return numberFormat.format(value);
|
|
62
|
+
}
|
|
63
|
+
function formatCurrencyCompact(config, value, currency) {
|
|
64
|
+
return formatCurrency(config, value, currency, {
|
|
65
|
+
notation: 'compact',
|
|
66
|
+
...twoDecimals,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function formatCurrencyWithMinThreshold(config, value, currency) {
|
|
70
|
+
const minThreshold = 0.01;
|
|
71
|
+
const number = Number(value);
|
|
72
|
+
const absoluteValue = Math.abs(number);
|
|
73
|
+
if (!Number.isFinite(number)) {
|
|
74
|
+
return '';
|
|
75
|
+
}
|
|
76
|
+
if (number === 0) {
|
|
77
|
+
return formatCurrency(config, 0, currency);
|
|
78
|
+
}
|
|
79
|
+
if (absoluteValue < minThreshold) {
|
|
80
|
+
const formattedMin = formatCurrency(config, minThreshold, currency);
|
|
81
|
+
return `<${formattedMin}`;
|
|
82
|
+
}
|
|
83
|
+
return formatCurrency(config, number, currency);
|
|
84
|
+
}
|
|
85
|
+
function formatCurrencyTokenPrice(config, value, currency) {
|
|
86
|
+
const minThreshold = 0.00000001;
|
|
87
|
+
const number = Number(value);
|
|
88
|
+
const absoluteValue = Math.abs(number);
|
|
89
|
+
if (!Number.isFinite(number)) {
|
|
90
|
+
return '';
|
|
91
|
+
}
|
|
92
|
+
if (number === 0) {
|
|
93
|
+
return formatCurrency(config, 0, currency);
|
|
94
|
+
}
|
|
95
|
+
if (absoluteValue < minThreshold) {
|
|
96
|
+
return `<${formatCurrency(config, minThreshold, currency, oneSignificantDigit)}`;
|
|
97
|
+
}
|
|
98
|
+
if (absoluteValue < 1) {
|
|
99
|
+
return formatCurrency(config, number, currency, threeSignificantDigits);
|
|
100
|
+
}
|
|
101
|
+
if (absoluteValue < 1000000) {
|
|
102
|
+
return formatCurrency(config, number, currency);
|
|
103
|
+
}
|
|
104
|
+
return formatCurrencyCompact(config, number, currency);
|
|
105
|
+
}
|
|
106
|
+
function formatToken(config, value, symbol, options = {}) {
|
|
107
|
+
if (!Number.isFinite(Number(value))) {
|
|
108
|
+
return '';
|
|
109
|
+
}
|
|
110
|
+
const numberFormat = getCachedNumberFormat(config.locale, {
|
|
111
|
+
style: 'decimal',
|
|
112
|
+
...options,
|
|
113
|
+
});
|
|
114
|
+
// @ts-expect-error Remove this comment once TypeScript is updated to 5.5+
|
|
115
|
+
const formattedNumber = numberFormat.format(value);
|
|
116
|
+
return `${formattedNumber} ${symbol}`;
|
|
117
|
+
}
|
|
118
|
+
function formatTokenQuantity(config, value, symbol) {
|
|
119
|
+
const minThreshold = 0.00001;
|
|
120
|
+
const number = Number(value);
|
|
121
|
+
const absoluteValue = Math.abs(number);
|
|
122
|
+
if (!Number.isFinite(number)) {
|
|
123
|
+
return '';
|
|
124
|
+
}
|
|
125
|
+
if (number === 0) {
|
|
126
|
+
return formatToken(config, 0, symbol);
|
|
127
|
+
}
|
|
128
|
+
if (absoluteValue < minThreshold) {
|
|
129
|
+
return `<${formatToken(config, minThreshold, symbol, oneSignificantDigit)}`;
|
|
130
|
+
}
|
|
131
|
+
if (absoluteValue < 1) {
|
|
132
|
+
return formatToken(config, number, symbol, threeSignificantDigits);
|
|
133
|
+
}
|
|
134
|
+
if (absoluteValue < 1000000) {
|
|
135
|
+
return formatToken(config, number, symbol);
|
|
136
|
+
}
|
|
137
|
+
return formatToken(config, number, symbol, {
|
|
138
|
+
notation: 'compact',
|
|
139
|
+
...twoDecimals,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
// Format token quantity without trailing zeros.
|
|
143
|
+
function formatTokenAmount(config, value, symbol) {
|
|
144
|
+
const minThreshold = 0.00001;
|
|
145
|
+
const number = Number(value);
|
|
146
|
+
const absoluteValue = Math.abs(number);
|
|
147
|
+
if (!Number.isFinite(number)) {
|
|
148
|
+
return '';
|
|
149
|
+
}
|
|
150
|
+
if (number === 0) {
|
|
151
|
+
return formatToken(config, 0, symbol, { maximumFractionDigits: 0 });
|
|
152
|
+
}
|
|
153
|
+
if (absoluteValue < minThreshold) {
|
|
154
|
+
return `<${formatToken(config, minThreshold, symbol, {
|
|
155
|
+
minimumSignificantDigits: 1,
|
|
156
|
+
maximumSignificantDigits: 1,
|
|
157
|
+
})}`;
|
|
158
|
+
}
|
|
159
|
+
if (absoluteValue < 1) {
|
|
160
|
+
return formatToken(config, number, symbol, {
|
|
161
|
+
minimumSignificantDigits: 1,
|
|
162
|
+
maximumSignificantDigits: 4,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
if (absoluteValue < 1000000) {
|
|
166
|
+
return formatToken(config, number, symbol, {
|
|
167
|
+
minimumFractionDigits: 0,
|
|
168
|
+
maximumFractionDigits: 4,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
return formatToken(config, number, symbol, {
|
|
172
|
+
notation: 'compact',
|
|
173
|
+
minimumFractionDigits: 0,
|
|
174
|
+
maximumFractionDigits: 2,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
function formatPercentWithMinThreshold(config, value, options = {}) {
|
|
178
|
+
const minThreshold = 0.0001; // 0.01%
|
|
179
|
+
const number = Number(value);
|
|
180
|
+
if (!Number.isFinite(number)) {
|
|
181
|
+
return '';
|
|
182
|
+
}
|
|
183
|
+
const clamped = number === 0
|
|
184
|
+
? 0
|
|
185
|
+
: Math.sign(number) * Math.max(Math.abs(number), minThreshold);
|
|
186
|
+
return formatNumber(config, clamped, {
|
|
187
|
+
style: 'percent',
|
|
188
|
+
maximumFractionDigits: 2,
|
|
189
|
+
minimumFractionDigits: 2,
|
|
190
|
+
...options,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
function formatCompact(config, value) {
|
|
194
|
+
return formatNumber(config, value, {
|
|
195
|
+
notation: 'compact',
|
|
196
|
+
minimumFractionDigits: 2,
|
|
197
|
+
maximumFractionDigits: 2,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
function formatDateTime(config, timestamp, options) {
|
|
201
|
+
if (!timestamp) {
|
|
202
|
+
return '';
|
|
203
|
+
}
|
|
204
|
+
const date = new Date(timestamp);
|
|
205
|
+
if (isNaN(date.getTime())) {
|
|
206
|
+
return '';
|
|
207
|
+
}
|
|
208
|
+
return getCachedDateTimeFormat(config.locale, {
|
|
209
|
+
month: 'short',
|
|
210
|
+
day: 'numeric',
|
|
211
|
+
year: 'numeric',
|
|
212
|
+
hour: 'numeric',
|
|
213
|
+
minute: 'numeric',
|
|
214
|
+
hour12: true,
|
|
215
|
+
...options,
|
|
216
|
+
}).format(date);
|
|
217
|
+
}
|
|
218
|
+
export function createFormatters({ locale = FALLBACK_LOCALE, }) {
|
|
219
|
+
const config = { locale };
|
|
220
|
+
return {
|
|
221
|
+
formatNumber: formatNumber.bind(null, config),
|
|
222
|
+
formatCurrency: formatCurrency.bind(null, config),
|
|
223
|
+
formatCurrencyCompact: formatCurrencyCompact.bind(null, config),
|
|
224
|
+
formatCurrencyWithMinThreshold: formatCurrencyWithMinThreshold.bind(null, config),
|
|
225
|
+
formatCurrencyTokenPrice: formatCurrencyTokenPrice.bind(null, config),
|
|
226
|
+
formatToken: formatToken.bind(null, config),
|
|
227
|
+
formatTokenQuantity: formatTokenQuantity.bind(null, config),
|
|
228
|
+
formatTokenAmount: formatTokenAmount.bind(null, config),
|
|
229
|
+
formatPercentWithMinThreshold: formatPercentWithMinThreshold.bind(null, config),
|
|
230
|
+
formatCompact: formatCompact.bind(null, config),
|
|
231
|
+
formatDateTime: formatDateTime.bind(null, config),
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=create-formatters.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-formatters.mjs","sourceRoot":"","sources":["../../src/formatters/create-formatters.ts"],"names":[],"mappings":"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","sourcesContent":["const FALLBACK_LOCALE = 'en';\n\nconst twoDecimals = {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n};\n\nconst oneSignificantDigit = {\n minimumSignificantDigits: 1,\n maximumSignificantDigits: 1,\n};\n\nconst threeSignificantDigits = {\n minimumSignificantDigits: 3,\n maximumSignificantDigits: 3,\n};\n\nconst numberFormatCache: Record<string, Intl.NumberFormat> = {};\nconst dateTimeFormatCache: Record<string, Intl.DateTimeFormat> = {};\n\ntype Value = number | bigint | `${number}`;\n\nfunction getCachedNumberFormat(\n locale: string,\n options: Intl.NumberFormatOptions,\n): Intl.NumberFormat {\n const key = `${locale}_${JSON.stringify(options)}`;\n\n let format = numberFormatCache[key];\n\n if (format) {\n return format;\n }\n\n try {\n format = new Intl.NumberFormat(locale, options);\n } catch (error) {\n if (error instanceof RangeError) {\n format = new Intl.NumberFormat(locale, twoDecimals);\n } else {\n throw error;\n }\n }\n\n numberFormatCache[key] = format;\n return format;\n}\n\nfunction getCachedDateTimeFormat(\n locale: string,\n options: Intl.DateTimeFormatOptions,\n): Intl.DateTimeFormat {\n const key = `${locale}_${JSON.stringify(options)}`;\n if (!dateTimeFormatCache[key]) {\n dateTimeFormatCache[key] = new Intl.DateTimeFormat(locale, options);\n }\n return dateTimeFormatCache[key];\n}\n\nfunction formatNumber(\n config: { locale: string },\n value: Value,\n options: Intl.NumberFormatOptions = {},\n): string {\n if (!Number.isFinite(Number(value))) {\n return '';\n }\n\n const numberFormat = getCachedNumberFormat(config.locale, options);\n\n // @ts-expect-error Remove this comment once TypeScript is updated to 5.5+\n return numberFormat.format(value);\n}\n\nfunction formatCurrency(\n config: { locale: string },\n value: Value,\n currency: Intl.NumberFormatOptions['currency'],\n options: Intl.NumberFormatOptions = {},\n): string {\n if (!Number.isFinite(Number(value))) {\n return '';\n }\n\n const numberFormat = getCachedNumberFormat(config.locale, {\n style: 'currency',\n currency,\n ...options,\n });\n\n // @ts-expect-error Remove this comment once TypeScript is updated to 5.5+\n return numberFormat.format(value);\n}\n\nfunction formatCurrencyCompact(\n config: { locale: string },\n value: Value,\n currency: Intl.NumberFormatOptions['currency'],\n): string {\n return formatCurrency(config, value, currency, {\n notation: 'compact',\n ...twoDecimals,\n });\n}\n\nfunction formatCurrencyWithMinThreshold(\n config: { locale: string },\n value: Value,\n currency: Intl.NumberFormatOptions['currency'],\n): string {\n const minThreshold = 0.01;\n const number = Number(value);\n const absoluteValue = Math.abs(number);\n\n if (!Number.isFinite(number)) {\n return '';\n }\n\n if (number === 0) {\n return formatCurrency(config, 0, currency);\n }\n\n if (absoluteValue < minThreshold) {\n const formattedMin = formatCurrency(config, minThreshold, currency);\n return `<${formattedMin}`;\n }\n\n return formatCurrency(config, number, currency);\n}\n\nfunction formatCurrencyTokenPrice(\n config: { locale: string },\n value: Value,\n currency: Intl.NumberFormatOptions['currency'],\n): string {\n const minThreshold = 0.00000001;\n const number = Number(value);\n const absoluteValue = Math.abs(number);\n\n if (!Number.isFinite(number)) {\n return '';\n }\n\n if (number === 0) {\n return formatCurrency(config, 0, currency);\n }\n\n if (absoluteValue < minThreshold) {\n return `<${formatCurrency(config, minThreshold, currency, oneSignificantDigit)}`;\n }\n\n if (absoluteValue < 1) {\n return formatCurrency(config, number, currency, threeSignificantDigits);\n }\n\n if (absoluteValue < 1_000_000) {\n return formatCurrency(config, number, currency);\n }\n\n return formatCurrencyCompact(config, number, currency);\n}\n\nfunction formatToken(\n config: { locale: string },\n value: Value,\n symbol: string,\n options: Intl.NumberFormatOptions = {},\n): string {\n if (!Number.isFinite(Number(value))) {\n return '';\n }\n\n const numberFormat = getCachedNumberFormat(config.locale, {\n style: 'decimal',\n ...options,\n });\n\n // @ts-expect-error Remove this comment once TypeScript is updated to 5.5+\n const formattedNumber = numberFormat.format(value);\n\n return `${formattedNumber} ${symbol}`;\n}\n\nfunction formatTokenQuantity(\n config: { locale: string },\n value: Value,\n symbol: string,\n): string {\n const minThreshold = 0.00001;\n const number = Number(value);\n const absoluteValue = Math.abs(number);\n\n if (!Number.isFinite(number)) {\n return '';\n }\n\n if (number === 0) {\n return formatToken(config, 0, symbol);\n }\n\n if (absoluteValue < minThreshold) {\n return `<${formatToken(config, minThreshold, symbol, oneSignificantDigit)}`;\n }\n\n if (absoluteValue < 1) {\n return formatToken(config, number, symbol, threeSignificantDigits);\n }\n\n if (absoluteValue < 1_000_000) {\n return formatToken(config, number, symbol);\n }\n\n return formatToken(config, number, symbol, {\n notation: 'compact',\n ...twoDecimals,\n });\n}\n\n// Format token quantity without trailing zeros.\nfunction formatTokenAmount(\n config: { locale: string },\n value: Value,\n symbol: string,\n): string {\n const minThreshold = 0.00001;\n const number = Number(value);\n const absoluteValue = Math.abs(number);\n\n if (!Number.isFinite(number)) {\n return '';\n }\n\n if (number === 0) {\n return formatToken(config, 0, symbol, { maximumFractionDigits: 0 });\n }\n\n if (absoluteValue < minThreshold) {\n return `<${formatToken(config, minThreshold, symbol, {\n minimumSignificantDigits: 1,\n maximumSignificantDigits: 1,\n })}`;\n }\n\n if (absoluteValue < 1) {\n return formatToken(config, number, symbol, {\n minimumSignificantDigits: 1,\n maximumSignificantDigits: 4,\n });\n }\n\n if (absoluteValue < 1_000_000) {\n return formatToken(config, number, symbol, {\n minimumFractionDigits: 0,\n maximumFractionDigits: 4,\n });\n }\n\n return formatToken(config, number, symbol, {\n notation: 'compact',\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n });\n}\n\nfunction formatPercentWithMinThreshold(\n config: { locale: string },\n value: Value,\n options: Intl.NumberFormatOptions = {},\n): string {\n const minThreshold = 0.0001; // 0.01%\n const number = Number(value);\n\n if (!Number.isFinite(number)) {\n return '';\n }\n\n const clamped =\n number === 0\n ? 0\n : Math.sign(number) * Math.max(Math.abs(number), minThreshold);\n\n return formatNumber(config, clamped, {\n style: 'percent',\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n ...options,\n });\n}\n\nfunction formatCompact(config: { locale: string }, value: Value): string {\n return formatNumber(config, value, {\n notation: 'compact',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n}\n\nfunction formatDateTime(\n config: { locale: string },\n timestamp: string | number,\n options?: Intl.DateTimeFormatOptions,\n): string {\n if (!timestamp) {\n return '';\n }\n const date = new Date(timestamp);\n if (isNaN(date.getTime())) {\n return '';\n }\n return getCachedDateTimeFormat(config.locale, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n hour12: true,\n ...options,\n }).format(date);\n}\n\nexport type Formatters = {\n formatNumber: (value: Value, options?: Intl.NumberFormatOptions) => string;\n formatCurrency: (\n value: Value,\n currency: Intl.NumberFormatOptions['currency'],\n options?: Intl.NumberFormatOptions,\n ) => string;\n formatCurrencyCompact: (\n value: Value,\n currency: Intl.NumberFormatOptions['currency'],\n ) => string;\n formatCurrencyWithMinThreshold: (\n value: Value,\n currency: Intl.NumberFormatOptions['currency'],\n ) => string;\n formatCurrencyTokenPrice: (\n value: Value,\n currency: Intl.NumberFormatOptions['currency'],\n ) => string;\n formatToken: (\n value: Value,\n symbol: string,\n options?: Intl.NumberFormatOptions,\n ) => string;\n formatTokenQuantity: (value: Value, symbol: string) => string;\n formatTokenAmount: (value: Value, symbol: string) => string;\n formatPercentWithMinThreshold: (\n value: Value,\n options?: Intl.NumberFormatOptions,\n ) => string;\n formatCompact: (value: Value) => string;\n formatDateTime: (\n timestamp: string | number,\n options?: Intl.DateTimeFormatOptions,\n ) => string;\n};\n\nexport function createFormatters({\n locale = FALLBACK_LOCALE,\n}: {\n locale?: string;\n}): Formatters {\n const config = { locale };\n return {\n formatNumber: formatNumber.bind(null, config),\n formatCurrency: formatCurrency.bind(null, config),\n formatCurrencyCompact: formatCurrencyCompact.bind(null, config),\n formatCurrencyWithMinThreshold: formatCurrencyWithMinThreshold.bind(\n null,\n config,\n ),\n formatCurrencyTokenPrice: formatCurrencyTokenPrice.bind(null, config),\n formatToken: formatToken.bind(null, config),\n formatTokenQuantity: formatTokenQuantity.bind(null, config),\n formatTokenAmount: formatTokenAmount.bind(null, config),\n formatPercentWithMinThreshold: formatPercentWithMinThreshold.bind(\n null,\n config,\n ),\n formatCompact: formatCompact.bind(null, config),\n formatDateTime: formatDateTime.bind(null, config),\n };\n}\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.mapLocalTransaction = exports.mapKeyringTransaction = exports.mapApiTransaction = void 0;
|
|
3
|
+
exports.mapLocalTransaction = exports.mapKeyringTransaction = exports.mapApiTransaction = exports.createFormatters = void 0;
|
|
4
|
+
var create_formatters_1 = require("./formatters/create-formatters.cjs");
|
|
5
|
+
Object.defineProperty(exports, "createFormatters", { enumerable: true, get: function () { return create_formatters_1.createFormatters; } });
|
|
4
6
|
var api_transaction_mapper_1 = require("./mappers/api-transaction-mapper.cjs");
|
|
5
7
|
Object.defineProperty(exports, "mapApiTransaction", { enumerable: true, get: function () { return api_transaction_mapper_1.mapApiTransaction; } });
|
|
6
8
|
var keyring_transaction_mapper_1 = require("./mappers/keyring-transaction-mapper.cjs");
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+EAAqE;AAA5D,2HAAA,iBAAiB,OAAA;AAC1B,uFAA6E;AAApE,mIAAA,qBAAqB,OAAA;AAC9B,mFAAyE;AAAhE,+HAAA,mBAAmB,OAAA","sourcesContent":["export { mapApiTransaction } from './mappers/api-transaction-mapper';\nexport { mapKeyringTransaction } from './mappers/keyring-transaction-mapper';\nexport { mapLocalTransaction } from './mappers/local-transaction-mapper';\n\nexport type * from './types';\n"]}
|
|
1
|
+
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wEAAkE;AAAzD,qHAAA,gBAAgB,OAAA;AAGzB,+EAAqE;AAA5D,2HAAA,iBAAiB,OAAA;AAC1B,uFAA6E;AAApE,mIAAA,qBAAqB,OAAA;AAC9B,mFAAyE;AAAhE,+HAAA,mBAAmB,OAAA","sourcesContent":["export { createFormatters } from './formatters/create-formatters';\nexport type { Formatters } from './formatters/create-formatters';\n\nexport { mapApiTransaction } from './mappers/api-transaction-mapper';\nexport { mapKeyringTransaction } from './mappers/keyring-transaction-mapper';\nexport { mapLocalTransaction } from './mappers/local-transaction-mapper';\n\nexport type * from './types';\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export { createFormatters } from "./formatters/create-formatters.cjs";
|
|
2
|
+
export type { Formatters } from "./formatters/create-formatters.cjs";
|
|
1
3
|
export { mapApiTransaction } from "./mappers/api-transaction-mapper.cjs";
|
|
2
4
|
export { mapKeyringTransaction } from "./mappers/keyring-transaction-mapper.cjs";
|
|
3
5
|
export { mapLocalTransaction } from "./mappers/local-transaction-mapper.cjs";
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,6CAAyC;AACrE,OAAO,EAAE,qBAAqB,EAAE,iDAA6C;AAC7E,OAAO,EAAE,mBAAmB,EAAE,+CAA2C;AAEzE,iCAA6B"}
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,2CAAuC;AAClE,YAAY,EAAE,UAAU,EAAE,2CAAuC;AAEjE,OAAO,EAAE,iBAAiB,EAAE,6CAAyC;AACrE,OAAO,EAAE,qBAAqB,EAAE,iDAA6C;AAC7E,OAAO,EAAE,mBAAmB,EAAE,+CAA2C;AAEzE,iCAA6B"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export { createFormatters } from "./formatters/create-formatters.mjs";
|
|
2
|
+
export type { Formatters } from "./formatters/create-formatters.mjs";
|
|
1
3
|
export { mapApiTransaction } from "./mappers/api-transaction-mapper.mjs";
|
|
2
4
|
export { mapKeyringTransaction } from "./mappers/keyring-transaction-mapper.mjs";
|
|
3
5
|
export { mapLocalTransaction } from "./mappers/local-transaction-mapper.mjs";
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,6CAAyC;AACrE,OAAO,EAAE,qBAAqB,EAAE,iDAA6C;AAC7E,OAAO,EAAE,mBAAmB,EAAE,+CAA2C;AAEzE,iCAA6B"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,2CAAuC;AAClE,YAAY,EAAE,UAAU,EAAE,2CAAuC;AAEjE,OAAO,EAAE,iBAAiB,EAAE,6CAAyC;AACrE,OAAO,EAAE,qBAAqB,EAAE,iDAA6C;AAC7E,OAAO,EAAE,mBAAmB,EAAE,+CAA2C;AAEzE,iCAA6B"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { createFormatters } from "./formatters/create-formatters.mjs";
|
|
1
2
|
export { mapApiTransaction } from "./mappers/api-transaction-mapper.mjs";
|
|
2
3
|
export { mapKeyringTransaction } from "./mappers/keyring-transaction-mapper.mjs";
|
|
3
4
|
export { mapLocalTransaction } from "./mappers/local-transaction-mapper.mjs";
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,6CAAyC;AACrE,OAAO,EAAE,qBAAqB,EAAE,iDAA6C;AAC7E,OAAO,EAAE,mBAAmB,EAAE,+CAA2C","sourcesContent":["export { mapApiTransaction } from './mappers/api-transaction-mapper';\nexport { mapKeyringTransaction } from './mappers/keyring-transaction-mapper';\nexport { mapLocalTransaction } from './mappers/local-transaction-mapper';\n\nexport type * from './types';\n"]}
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,2CAAuC;AAGlE,OAAO,EAAE,iBAAiB,EAAE,6CAAyC;AACrE,OAAO,EAAE,qBAAqB,EAAE,iDAA6C;AAC7E,OAAO,EAAE,mBAAmB,EAAE,+CAA2C","sourcesContent":["export { createFormatters } from './formatters/create-formatters';\nexport type { Formatters } from './formatters/create-formatters';\n\nexport { mapApiTransaction } from './mappers/api-transaction-mapper';\nexport { mapKeyringTransaction } from './mappers/keyring-transaction-mapper';\nexport { mapLocalTransaction } from './mappers/local-transaction-mapper';\n\nexport type * from './types';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask/client-utils",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Shared functions and utilities used across MetaMask clients (extension and mobile)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ethereum",
|
|
@@ -44,6 +44,8 @@
|
|
|
44
44
|
"build:docs": "typedoc",
|
|
45
45
|
"changelog:update": "../../scripts/update-changelog.sh @metamask/client-utils",
|
|
46
46
|
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/client-utils",
|
|
47
|
+
"lint:tsconfigs": "tsx ../../scripts/lint-tsconfigs/lint-tsconfigs.mts",
|
|
48
|
+
"lint:tsconfigs:fix": "tsx ../../scripts/lint-tsconfigs/lint-tsconfigs.mts --fix",
|
|
47
49
|
"messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --formatter oxfmt --check",
|
|
48
50
|
"messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --formatter oxfmt --generate",
|
|
49
51
|
"since-latest-release": "../../scripts/since-latest-release.sh",
|