@metamask-previews/client-utils 2.1.1-preview-3866c0ff1 → 2.1.1-preview-e3275932a

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.
Files changed (116) hide show
  1. package/CHANGELOG.md +0 -1
  2. package/dist/formatters/create-formatters.cjs +238 -0
  3. package/dist/formatters/create-formatters.cjs.map +1 -0
  4. package/dist/formatters/{create-formatters.d.ts → create-formatters.d.cts} +1 -1
  5. package/dist/formatters/create-formatters.d.cts.map +1 -0
  6. package/dist/formatters/create-formatters.d.mts +19 -0
  7. package/dist/formatters/create-formatters.d.mts.map +1 -0
  8. package/dist/formatters/{create-formatters.js → create-formatters.mjs} +4 -4
  9. package/dist/formatters/create-formatters.mjs.map +1 -0
  10. package/dist/index.cjs +14 -0
  11. package/dist/index.cjs.map +1 -0
  12. package/dist/index.d.cts +9 -0
  13. package/dist/index.d.cts.map +1 -0
  14. package/dist/index.d.mts +9 -0
  15. package/dist/index.d.mts.map +1 -0
  16. package/dist/index.mjs +6 -0
  17. package/dist/index.mjs.map +1 -0
  18. package/dist/mappers/api-transaction-mapper.cjs +316 -0
  19. package/dist/mappers/api-transaction-mapper.cjs.map +1 -0
  20. package/dist/mappers/{api-transaction-mapper.d.ts → api-transaction-mapper.d.cts} +3 -3
  21. package/dist/mappers/api-transaction-mapper.d.cts.map +1 -0
  22. package/dist/mappers/api-transaction-mapper.d.mts +15 -0
  23. package/dist/mappers/api-transaction-mapper.d.mts.map +1 -0
  24. package/dist/mappers/{api-transaction-mapper.js → api-transaction-mapper.mjs} +6 -6
  25. package/dist/mappers/api-transaction-mapper.mjs.map +1 -0
  26. package/dist/mappers/constants.cjs +47 -0
  27. package/dist/mappers/constants.cjs.map +1 -0
  28. package/dist/mappers/constants.d.cts +26 -0
  29. package/dist/mappers/constants.d.cts.map +1 -0
  30. package/dist/mappers/constants.d.mts +26 -0
  31. package/dist/mappers/constants.d.mts.map +1 -0
  32. package/dist/mappers/{constants.js → constants.mjs} +1 -1
  33. package/dist/mappers/constants.mjs.map +1 -0
  34. package/dist/mappers/helpers/caip.cjs +140 -0
  35. package/dist/mappers/helpers/caip.cjs.map +1 -0
  36. package/dist/mappers/helpers/{caip.d.ts → caip.d.cts} +2 -2
  37. package/dist/mappers/helpers/caip.d.cts.map +1 -0
  38. package/dist/mappers/helpers/caip.d.mts +32 -0
  39. package/dist/mappers/helpers/caip.d.mts.map +1 -0
  40. package/dist/mappers/helpers/{caip.js → caip.mjs} +6 -6
  41. package/dist/mappers/helpers/caip.mjs.map +1 -0
  42. package/dist/mappers/helpers/token-metadata.cjs +31 -0
  43. package/dist/mappers/helpers/token-metadata.cjs.map +1 -0
  44. package/dist/mappers/helpers/{token-metadata.d.ts → token-metadata.d.cts} +2 -2
  45. package/dist/mappers/helpers/token-metadata.d.cts.map +1 -0
  46. package/dist/mappers/helpers/token-metadata.d.mts +8 -0
  47. package/dist/mappers/helpers/token-metadata.d.mts.map +1 -0
  48. package/dist/mappers/helpers/{token-metadata.js → token-metadata.mjs} +11 -4
  49. package/dist/mappers/helpers/token-metadata.mjs.map +1 -0
  50. package/dist/mappers/helpers/transactions.cjs +254 -0
  51. package/dist/mappers/helpers/transactions.cjs.map +1 -0
  52. package/dist/mappers/helpers/{transactions.d.ts → transactions.d.cts} +5 -5
  53. package/dist/mappers/helpers/transactions.d.cts.map +1 -0
  54. package/dist/mappers/helpers/transactions.d.mts +51 -0
  55. package/dist/mappers/helpers/transactions.d.mts.map +1 -0
  56. package/dist/mappers/helpers/{transactions.js → transactions.mjs} +6 -6
  57. package/dist/mappers/helpers/transactions.mjs.map +1 -0
  58. package/dist/mappers/keyring-transaction-mapper.cjs +201 -0
  59. package/dist/mappers/keyring-transaction-mapper.cjs.map +1 -0
  60. package/dist/mappers/{keyring-transaction-mapper.d.ts → keyring-transaction-mapper.d.cts} +3 -3
  61. package/dist/mappers/keyring-transaction-mapper.d.cts.map +1 -0
  62. package/dist/mappers/keyring-transaction-mapper.d.mts +26 -0
  63. package/dist/mappers/keyring-transaction-mapper.d.mts.map +1 -0
  64. package/dist/mappers/{keyring-transaction-mapper.js → keyring-transaction-mapper.mjs} +2 -2
  65. package/dist/mappers/keyring-transaction-mapper.mjs.map +1 -0
  66. package/dist/mappers/local-transaction-mapper.cjs +436 -0
  67. package/dist/mappers/local-transaction-mapper.cjs.map +1 -0
  68. package/dist/mappers/{local-transaction-mapper.d.ts → local-transaction-mapper.d.cts} +3 -3
  69. package/dist/mappers/local-transaction-mapper.d.cts.map +1 -0
  70. package/dist/mappers/local-transaction-mapper.d.mts +20 -0
  71. package/dist/mappers/local-transaction-mapper.d.mts.map +1 -0
  72. package/dist/mappers/{local-transaction-mapper.js → local-transaction-mapper.mjs} +8 -8
  73. package/dist/mappers/local-transaction-mapper.mjs.map +1 -0
  74. package/dist/mappers/ramps-order-mapper.cjs +145 -0
  75. package/dist/mappers/ramps-order-mapper.cjs.map +1 -0
  76. package/dist/mappers/{ramps-order-mapper.d.ts → ramps-order-mapper.d.cts} +2 -2
  77. package/dist/mappers/ramps-order-mapper.d.cts.map +1 -0
  78. package/dist/mappers/ramps-order-mapper.d.mts +50 -0
  79. package/dist/mappers/ramps-order-mapper.d.mts.map +1 -0
  80. package/dist/mappers/{ramps-order-mapper.js → ramps-order-mapper.mjs} +3 -3
  81. package/dist/mappers/ramps-order-mapper.mjs.map +1 -0
  82. package/dist/types.cjs +3 -0
  83. package/dist/types.cjs.map +1 -0
  84. package/dist/{types.d.ts → types.d.cts} +3 -3
  85. package/dist/types.d.cts.map +1 -0
  86. package/dist/types.d.mts +114 -0
  87. package/dist/types.d.mts.map +1 -0
  88. package/dist/types.mjs +2 -0
  89. package/dist/types.mjs.map +1 -0
  90. package/package.json +16 -12
  91. package/dist/formatters/create-formatters.d.ts.map +0 -1
  92. package/dist/formatters/create-formatters.js.map +0 -1
  93. package/dist/index.d.ts +0 -9
  94. package/dist/index.d.ts.map +0 -1
  95. package/dist/index.js +0 -6
  96. package/dist/index.js.map +0 -1
  97. package/dist/mappers/api-transaction-mapper.d.ts.map +0 -1
  98. package/dist/mappers/api-transaction-mapper.js.map +0 -1
  99. package/dist/mappers/constants.d.ts +0 -26
  100. package/dist/mappers/constants.d.ts.map +0 -1
  101. package/dist/mappers/constants.js.map +0 -1
  102. package/dist/mappers/helpers/caip.d.ts.map +0 -1
  103. package/dist/mappers/helpers/caip.js.map +0 -1
  104. package/dist/mappers/helpers/token-metadata.d.ts.map +0 -1
  105. package/dist/mappers/helpers/token-metadata.js.map +0 -1
  106. package/dist/mappers/helpers/transactions.d.ts.map +0 -1
  107. package/dist/mappers/helpers/transactions.js.map +0 -1
  108. package/dist/mappers/keyring-transaction-mapper.d.ts.map +0 -1
  109. package/dist/mappers/keyring-transaction-mapper.js.map +0 -1
  110. package/dist/mappers/local-transaction-mapper.d.ts.map +0 -1
  111. package/dist/mappers/local-transaction-mapper.js.map +0 -1
  112. package/dist/mappers/ramps-order-mapper.d.ts.map +0 -1
  113. package/dist/mappers/ramps-order-mapper.js.map +0 -1
  114. package/dist/types.d.ts.map +0 -1
  115. package/dist/types.js +0 -2
  116. package/dist/types.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -9,7 +9,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ### Changed
11
11
 
12
- - **BREAKING:** Bump minimum Node.js version to 22 ([#9168](https://github.com/MetaMask/core/pull/9168))
13
12
  - Bump `@metamask/transaction-controller` from `^69.6.0` to `^69.6.1` ([#9969](https://github.com/MetaMask/core/pull/9969))
14
13
 
15
14
  ## [2.1.1]
@@ -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"]}
@@ -16,4 +16,4 @@ export declare function createFormatters({ locale, }: {
16
16
  locale?: string;
17
17
  }): Formatters;
18
18
  export {};
19
- //# sourceMappingURL=create-formatters.d.ts.map
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"}
@@ -98,7 +98,7 @@ function formatCurrencyTokenPrice(config, value, currency) {
98
98
  if (absoluteValue < 1) {
99
99
  return formatCurrency(config, number, currency, threeSignificantDigits);
100
100
  }
101
- if (absoluteValue < 1_000_000) {
101
+ if (absoluteValue < 1000000) {
102
102
  return formatCurrency(config, number, currency);
103
103
  }
104
104
  return formatCurrencyCompact(config, number, currency);
@@ -131,7 +131,7 @@ function formatTokenQuantity(config, value, symbol) {
131
131
  if (absoluteValue < 1) {
132
132
  return formatToken(config, number, symbol, threeSignificantDigits);
133
133
  }
134
- if (absoluteValue < 1_000_000) {
134
+ if (absoluteValue < 1000000) {
135
135
  return formatToken(config, number, symbol);
136
136
  }
137
137
  return formatToken(config, number, symbol, {
@@ -162,7 +162,7 @@ function formatTokenAmount(config, value, symbol) {
162
162
  maximumSignificantDigits: 4,
163
163
  });
164
164
  }
165
- if (absoluteValue < 1_000_000) {
165
+ if (absoluteValue < 1000000) {
166
166
  return formatToken(config, number, symbol, {
167
167
  minimumFractionDigits: 0,
168
168
  maximumFractionDigits: 4,
@@ -231,4 +231,4 @@ export function createFormatters({ locale = FALLBACK_LOCALE, }) {
231
231
  formatDateTime: formatDateTime.bind(null, config),
232
232
  };
233
233
  }
234
- //# sourceMappingURL=create-formatters.js.map
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 ADDED
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapRampsOrder = exports.mapLocalTransaction = exports.mapKeyringTransaction = exports.mapApiTransaction = exports.createFormatters = void 0;
4
+ var create_formatters_js_1 = require("./formatters/create-formatters.cjs");
5
+ Object.defineProperty(exports, "createFormatters", { enumerable: true, get: function () { return create_formatters_js_1.createFormatters; } });
6
+ var api_transaction_mapper_js_1 = require("./mappers/api-transaction-mapper.cjs");
7
+ Object.defineProperty(exports, "mapApiTransaction", { enumerable: true, get: function () { return api_transaction_mapper_js_1.mapApiTransaction; } });
8
+ var keyring_transaction_mapper_js_1 = require("./mappers/keyring-transaction-mapper.cjs");
9
+ Object.defineProperty(exports, "mapKeyringTransaction", { enumerable: true, get: function () { return keyring_transaction_mapper_js_1.mapKeyringTransaction; } });
10
+ var local_transaction_mapper_js_1 = require("./mappers/local-transaction-mapper.cjs");
11
+ Object.defineProperty(exports, "mapLocalTransaction", { enumerable: true, get: function () { return local_transaction_mapper_js_1.mapLocalTransaction; } });
12
+ var ramps_order_mapper_js_1 = require("./mappers/ramps-order-mapper.cjs");
13
+ Object.defineProperty(exports, "mapRampsOrder", { enumerable: true, get: function () { return ramps_order_mapper_js_1.mapRampsOrder; } });
14
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2EAAqE;AAA5D,wHAAA,gBAAgB,OAAA;AAGzB,kFAAwE;AAA/D,8HAAA,iBAAiB,OAAA;AAC1B,0FAAgF;AAAvE,sIAAA,qBAAqB,OAAA;AAC9B,sFAA4E;AAAnE,kIAAA,mBAAmB,OAAA;AAC5B,0EAAgE;AAAvD,sHAAA,aAAa,OAAA","sourcesContent":["export { createFormatters } from './formatters/create-formatters.js';\nexport type { Formatters } from './formatters/create-formatters.js';\n\nexport { mapApiTransaction } from './mappers/api-transaction-mapper.js';\nexport { mapKeyringTransaction } from './mappers/keyring-transaction-mapper.js';\nexport { mapLocalTransaction } from './mappers/local-transaction-mapper.js';\nexport { mapRampsOrder } from './mappers/ramps-order-mapper.js';\nexport type { RampsOrderLike } from './mappers/ramps-order-mapper.js';\n\nexport type * from './types.js';\n"]}
@@ -0,0 +1,9 @@
1
+ export { createFormatters } from "./formatters/create-formatters.cjs";
2
+ export type { Formatters } from "./formatters/create-formatters.cjs";
3
+ export { mapApiTransaction } from "./mappers/api-transaction-mapper.cjs";
4
+ export { mapKeyringTransaction } from "./mappers/keyring-transaction-mapper.cjs";
5
+ export { mapLocalTransaction } from "./mappers/local-transaction-mapper.cjs";
6
+ export { mapRampsOrder } from "./mappers/ramps-order-mapper.cjs";
7
+ export type { RampsOrderLike } from "./mappers/ramps-order-mapper.cjs";
8
+ export type * from "./types.cjs";
9
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,2CAA0C;AACrE,YAAY,EAAE,UAAU,EAAE,2CAA0C;AAEpE,OAAO,EAAE,iBAAiB,EAAE,6CAA4C;AACxE,OAAO,EAAE,qBAAqB,EAAE,iDAAgD;AAChF,OAAO,EAAE,mBAAmB,EAAE,+CAA8C;AAC5E,OAAO,EAAE,aAAa,EAAE,yCAAwC;AAChE,YAAY,EAAE,cAAc,EAAE,yCAAwC;AAEtE,iCAAgC"}
@@ -0,0 +1,9 @@
1
+ export { createFormatters } from "./formatters/create-formatters.mjs";
2
+ export type { Formatters } from "./formatters/create-formatters.mjs";
3
+ export { mapApiTransaction } from "./mappers/api-transaction-mapper.mjs";
4
+ export { mapKeyringTransaction } from "./mappers/keyring-transaction-mapper.mjs";
5
+ export { mapLocalTransaction } from "./mappers/local-transaction-mapper.mjs";
6
+ export { mapRampsOrder } from "./mappers/ramps-order-mapper.mjs";
7
+ export type { RampsOrderLike } from "./mappers/ramps-order-mapper.mjs";
8
+ export type * from "./types.mjs";
9
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,2CAA0C;AACrE,YAAY,EAAE,UAAU,EAAE,2CAA0C;AAEpE,OAAO,EAAE,iBAAiB,EAAE,6CAA4C;AACxE,OAAO,EAAE,qBAAqB,EAAE,iDAAgD;AAChF,OAAO,EAAE,mBAAmB,EAAE,+CAA8C;AAC5E,OAAO,EAAE,aAAa,EAAE,yCAAwC;AAChE,YAAY,EAAE,cAAc,EAAE,yCAAwC;AAEtE,iCAAgC"}
package/dist/index.mjs ADDED
@@ -0,0 +1,6 @@
1
+ export { createFormatters } from "./formatters/create-formatters.mjs";
2
+ export { mapApiTransaction } from "./mappers/api-transaction-mapper.mjs";
3
+ export { mapKeyringTransaction } from "./mappers/keyring-transaction-mapper.mjs";
4
+ export { mapLocalTransaction } from "./mappers/local-transaction-mapper.mjs";
5
+ export { mapRampsOrder } from "./mappers/ramps-order-mapper.mjs";
6
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,2CAA0C;AAGrE,OAAO,EAAE,iBAAiB,EAAE,6CAA4C;AACxE,OAAO,EAAE,qBAAqB,EAAE,iDAAgD;AAChF,OAAO,EAAE,mBAAmB,EAAE,+CAA8C;AAC5E,OAAO,EAAE,aAAa,EAAE,yCAAwC","sourcesContent":["export { createFormatters } from './formatters/create-formatters.js';\nexport type { Formatters } from './formatters/create-formatters.js';\n\nexport { mapApiTransaction } from './mappers/api-transaction-mapper.js';\nexport { mapKeyringTransaction } from './mappers/keyring-transaction-mapper.js';\nexport { mapLocalTransaction } from './mappers/local-transaction-mapper.js';\nexport { mapRampsOrder } from './mappers/ramps-order-mapper.js';\nexport type { RampsOrderLike } from './mappers/ramps-order-mapper.js';\n\nexport type * from './types.js';\n"]}