@amboras-dev/money 0.0.0-stage → 0.1.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.
Files changed (78) hide show
  1. package/README.md +393 -2
  2. package/dist/ai.cjs +185 -0
  3. package/dist/ai.d.cts +97 -0
  4. package/dist/ai.d.ts +97 -0
  5. package/dist/ai.js +175 -0
  6. package/dist/allocate-CdnhvAda.js +199 -0
  7. package/dist/allocate-D7tm_t_o.cjs +222 -0
  8. package/dist/amount-D7dj76nH.js +200 -0
  9. package/dist/amount-DHtvZSSm.cjs +241 -0
  10. package/dist/arithmetic-Bq-8mSal.cjs +233 -0
  11. package/dist/arithmetic-C-Q_aI49.js +132 -0
  12. package/dist/billing.cjs +184 -0
  13. package/dist/billing.d.cts +81 -0
  14. package/dist/billing.d.ts +81 -0
  15. package/dist/billing.js +175 -0
  16. package/dist/commerce.cjs +536 -0
  17. package/dist/commerce.d.cts +293 -0
  18. package/dist/commerce.d.ts +293 -0
  19. package/dist/commerce.js +516 -0
  20. package/dist/format-BdB7LEIp.js +90 -0
  21. package/dist/format-BnA1aLJk.cjs +113 -0
  22. package/dist/fx.cjs +407 -0
  23. package/dist/fx.d.cts +157 -0
  24. package/dist/fx.d.ts +157 -0
  25. package/dist/fx.js +374 -0
  26. package/dist/index.cjs +349 -0
  27. package/dist/index.d.cts +288 -0
  28. package/dist/index.d.ts +288 -0
  29. package/dist/index.js +276 -0
  30. package/dist/input.cjs +163 -0
  31. package/dist/input.d.cts +203 -0
  32. package/dist/input.d.ts +203 -0
  33. package/dist/input.js +153 -0
  34. package/dist/iso-minor--gQWI1f2.cjs +65 -0
  35. package/dist/iso-minor-CtaiIifs.js +48 -0
  36. package/dist/medusa-CmxCni-G.js +101 -0
  37. package/dist/medusa-DuQ3-KoD.d.cts +78 -0
  38. package/dist/medusa-OJ2TJOxt.cjs +154 -0
  39. package/dist/medusa-RwqxaDGq.d.ts +78 -0
  40. package/dist/money-CIgELekG.js +3571 -0
  41. package/dist/money-CbhsT0fB.d.cts +232 -0
  42. package/dist/money-CbhsT0fB.d.ts +232 -0
  43. package/dist/money-D5-vlv0h.cjs +3960 -0
  44. package/dist/number-text-BpvN6NAo.cjs +145 -0
  45. package/dist/number-text-C82oh6JB.js +134 -0
  46. package/dist/own-D7544D3k.js +4 -0
  47. package/dist/own-oP9DXFWv.cjs +9 -0
  48. package/dist/percent-CKVI_c-m.js +20 -0
  49. package/dist/percent-Dt8vNIAW.cjs +43 -0
  50. package/dist/rate-CmeTGNex.d.ts +63 -0
  51. package/dist/rate-DGPfB_jc.cjs +217 -0
  52. package/dist/rate-lLPViBuM.js +152 -0
  53. package/dist/rate-toyS3EMf.d.cts +63 -0
  54. package/dist/reporting-5xby-Zas.d.ts +31 -0
  55. package/dist/reporting-DEM97DhQ.d.cts +31 -0
  56. package/dist/retail-BsvpNv1F.js +69 -0
  57. package/dist/retail-BwcFJcVN.d.ts +31 -0
  58. package/dist/retail-DTk2XAMM.cjs +86 -0
  59. package/dist/retail-Mqd-sPMF.d.cts +31 -0
  60. package/dist/rounding-CVAPEfq_.js +50 -0
  61. package/dist/rounding-oZ832yTD.cjs +79 -0
  62. package/dist/sql.cjs +290 -0
  63. package/dist/sql.d.cts +147 -0
  64. package/dist/sql.d.ts +147 -0
  65. package/dist/sql.js +271 -0
  66. package/dist/testing.cjs +28518 -0
  67. package/dist/testing.d.cts +97 -0
  68. package/dist/testing.d.ts +97 -0
  69. package/dist/testing.js +28510 -0
  70. package/dist/wire-CI3Sm1iC.js +1675 -0
  71. package/dist/wire-Cd4Q1Jmm.d.ts +269 -0
  72. package/dist/wire-DQZ6fA3c.cjs +1872 -0
  73. package/dist/wire-hWuixv3w.d.cts +269 -0
  74. package/dist/wire.cjs +35 -0
  75. package/dist/wire.d.cts +2 -0
  76. package/dist/wire.d.ts +2 -0
  77. package/dist/wire.js +2 -0
  78. package/package.json +158 -3
@@ -0,0 +1,3960 @@
1
+ /** `10^n` as a bigint. The only power of ten in the package. */
2
+ const pow10 = (n) => 10n ** BigInt(n);
3
+ const GRAMMARS = {
4
+ scientific: /^([+-]?)(\d+)(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/,
5
+ plain: /^(-?)(\d+)(?:\.(\d+))?$/,
6
+ integer: /^(-?)(\d+)$/
7
+ };
8
+ /** Strict decimal text (see `DecimalGrammar`) as an exact Decimal. Anything else (spaces, commas, `.5`, `1.`, over `MAX_DIGITS` characters) is null. */
9
+ function parseDecimal(text, grammar = "scientific") {
10
+ if (typeof text !== "string" || text.length > 400) return null;
11
+ const match = GRAMMARS[grammar].exec(text);
12
+ if (!match) return null;
13
+ const [, sign, whole, fraction = "", exponentText = "0"] = match;
14
+ const exponent = Number(exponentText);
15
+ if (Math.abs(exponent) > 400) return null;
16
+ const units = BigInt(`${sign}${whole}${fraction}`);
17
+ const scale = fraction.length - exponent;
18
+ return scale < 0 ? {
19
+ units: units * pow10(-scale),
20
+ scale: 0
21
+ } : {
22
+ units,
23
+ scale
24
+ };
25
+ }
26
+ /**
27
+ * A number as an exact Decimal when all its digits are there: finite, and a safe integer when
28
+ * whole (past 2^53 the digits are already gone). Else null. The one "quotable number" rule.
29
+ */
30
+ function strictNumberDecimal(n) {
31
+ return Number.isFinite(n) && (Number.isSafeInteger(n) || !Number.isInteger(n)) ? decimalFromNumber(n) : null;
32
+ }
33
+ /** Whether `d` is above zero. */
34
+ const isPositiveDecimal = (d) => d.units > 0n;
35
+ /** The exact decimal of a finite number's shortest text form (what JSON carries): 0.1 + 0.2 is 0.30000000000000004. */
36
+ function decimalFromNumber(n) {
37
+ return parseDecimal(String(n));
38
+ }
39
+ /** Fraction digits the value needs: 12.50 needs 1, 12.00 needs 0. */
40
+ function fractionDigitsOf(d) {
41
+ let { units, scale } = d;
42
+ while (scale > 0 && units % 10n === 0n) {
43
+ units /= 10n;
44
+ scale -= 1;
45
+ }
46
+ return scale;
47
+ }
48
+ /** `n / d` as an integer, rounded by `mode`. `d` must be positive. */
49
+ function divRound(n, d, mode) {
50
+ if (mode === "floor-after-tenth") return divRound(divRound(n * 10n, d, "half-up"), 10n, "floor");
51
+ const quotient = n / d;
52
+ const remainder = n % d;
53
+ if (remainder === 0n) return quotient;
54
+ const negative = n < 0n;
55
+ const awayFromZero = negative ? quotient - 1n : quotient + 1n;
56
+ switch (mode) {
57
+ case "down": return quotient;
58
+ case "up": return awayFromZero;
59
+ case "floor": return negative ? awayFromZero : quotient;
60
+ case "ceil": return negative ? quotient : awayFromZero;
61
+ case "half-up":
62
+ case "half-even": {
63
+ const twice = (negative ? -remainder : remainder) * 2n;
64
+ if (twice !== d) return twice > d ? awayFromZero : quotient;
65
+ return mode === "half-up" || quotient % 2n !== 0n ? awayFromZero : quotient;
66
+ }
67
+ default: throw new TypeError(`Unknown rounding mode: ${String(mode)}`);
68
+ }
69
+ }
70
+ /** `d` with exactly `scale` fraction digits: exact when widening, rounded by `mode` when narrowing. */
71
+ function roundToScale(d, scale, mode) {
72
+ if (scale >= d.scale) return {
73
+ units: d.units * pow10(scale - d.scale),
74
+ scale
75
+ };
76
+ return {
77
+ units: divRound(d.units, pow10(d.scale - scale), mode),
78
+ scale
79
+ };
80
+ }
81
+ /** Canonical text with exactly `d.scale` fraction digits: `-12.50`, `0.00`, `7`. Never `-0`. */
82
+ function formatDecimal(d) {
83
+ const negative = d.units < 0n;
84
+ const digits = (negative ? -d.units : d.units).toString().padStart(d.scale + 1, "0");
85
+ const cut = digits.length - d.scale;
86
+ const fraction = d.scale > 0 ? `.${digits.slice(cut)}` : "";
87
+ return `${negative ? "-" : ""}${digits.slice(0, cut)}${fraction}`;
88
+ }
89
+ /** `d` with no trailing fraction zeros (12.50 becomes 12.5 at scale 1). */
90
+ function normalizeDecimal(d) {
91
+ return roundToScale(d, fractionDigitsOf(d), "down");
92
+ }
93
+ /** The canonical DecimalText of `d`: `'-12.5'`, `'0'`, `'1200'`. */
94
+ function toDecimalText(d) {
95
+ return formatDecimal(normalizeDecimal(d));
96
+ }
97
+ /** `a` and `b` widened to their common scale (exact). */
98
+ function aligned(a, b) {
99
+ const scale = Math.max(a.scale, b.scale);
100
+ return [
101
+ roundToScale(a, scale, "down").units,
102
+ roundToScale(b, scale, "down").units,
103
+ scale
104
+ ];
105
+ }
106
+ /** `a + b`, exactly, at their common scale. */
107
+ function addDecimal(a, b) {
108
+ const [x, y, scale] = aligned(a, b);
109
+ return {
110
+ units: x + y,
111
+ scale
112
+ };
113
+ }
114
+ /** `a x b`, exactly. */
115
+ function multiplyDecimal(a, b) {
116
+ return {
117
+ units: a.units * b.units,
118
+ scale: a.scale + b.scale
119
+ };
120
+ }
121
+ /** `-1`, `0` or `1` as `a` is below, equal to or above `b`, exactly. */
122
+ function compareDecimal(a, b) {
123
+ const [x, y] = aligned(a, b);
124
+ return x < y ? -1 : x > y ? 1 : 0;
125
+ }
126
+ /**
127
+ * capability-kit's float-noise bound, kept exactly: a number whose decimal text has
128
+ * too many digits is still accepted when it is within float noise of an allowed
129
+ * amount (0.1 + 0.2). The bound is absolute, so a real extra digit is never rounded
130
+ * away however large the amount.
131
+ */
132
+ function withinFloatNoise(major, digits) {
133
+ const inDigits = major * 10 ** digits;
134
+ return Math.abs(inDigits - Math.round(inDigits)) <= Math.min(8 * Number.EPSILON * Math.max(1, Math.abs(inDigits)), 1e-6);
135
+ }
136
+ /** Whether `|d.units|` is at most `limit`. */
137
+ function unitsWithin(d, limit) {
138
+ return (d.units < 0n ? -d.units : d.units) <= limit;
139
+ }
140
+ //#endregion
141
+ //#region src/errors.ts
142
+ /** The one error this package throws for bad money input. Check `code`, not the message. */
143
+ var MoneyError = class extends Error {
144
+ constructor(code, message, options = {}) {
145
+ super(options.field ? `${options.field}: ${message}` : message);
146
+ this.name = "MoneyError";
147
+ this.code = code;
148
+ if (options.field) this.field = options.field;
149
+ }
150
+ };
151
+ /** A value as it appears in an error message. Never throws, whatever it is given. */
152
+ function describeValue(value) {
153
+ if (typeof value === "string") return JSON.stringify(value);
154
+ try {
155
+ return String(value);
156
+ } catch {
157
+ return Object.prototype.toString.call(value);
158
+ }
159
+ }
160
+ //#endregion
161
+ //#region src/internal/rational.ts
162
+ /** `a x b / c` rounded by `mode`. `c` must not be zero; its sign is folded into the numerator. */
163
+ function mulDiv(a, b, c, mode) {
164
+ if (c === 0n) throw new RangeError("mulDiv: division by zero");
165
+ return c < 0n ? divRound(-(a * b), -c, mode) : divRound(a * b, c, mode);
166
+ }
167
+ /** `n / d` with `digits` fraction digits, rounded once by `mode` (default half-up). */
168
+ function ratioToDecimal(n, d, digits, mode = "half-up") {
169
+ return {
170
+ units: mulDiv(n, pow10(digits), d, mode),
171
+ scale: digits
172
+ };
173
+ }
174
+ /** `-1`, `0` or `1` as `an / ad` is below, equal to or above `bn / bd`. Denominators must not be zero. */
175
+ function compareRatio(an, ad, bn, bd) {
176
+ if (ad === 0n || bd === 0n) throw new RangeError("compareRatio: zero denominator");
177
+ const left = (ad < 0n ? -an : an) * (bd < 0n ? -bd : bd);
178
+ const right = (bd < 0n ? -bn : bn) * (ad < 0n ? -ad : ad);
179
+ return left < right ? -1 : left > right ? 1 : 0;
180
+ }
181
+ /** Greatest common divisor of `|a|` and `|b|` (`gcd(0, 0)` is 0). */
182
+ function gcd(a, b) {
183
+ let x = a < 0n ? -a : a;
184
+ let y = b < 0n ? -b : b;
185
+ while (y !== 0n) [x, y] = [y, x % y];
186
+ return x;
187
+ }
188
+ //#endregion
189
+ //#region src/decimal-text.ts
190
+ /**
191
+ * Internal: `input` as an exact Decimal. Text must be plain decimal (`'-12.50'`, `'7'`):
192
+ * no blank, whitespace, exponent, hex, `'.5'` or `'1.'` (`parse`). Numbers are taken by
193
+ * their shortest text and must be finite; bigints are exact; anything else is
194
+ * `amount_invalid`, as is a negative value when `signed` is false.
195
+ */
196
+ function decimalOf(input, signed = true, field) {
197
+ let value;
198
+ if (typeof input === "string") {
199
+ const parsed = parseDecimal(input, "plain");
200
+ if (!parsed) throw new MoneyError("parse", `Not a decimal: ${describeValue(input)}`, { field });
201
+ value = parsed;
202
+ } else if (typeof input === "number" && Number.isFinite(input)) value = decimalFromNumber(input);
203
+ else if (typeof input === "bigint") value = {
204
+ units: input,
205
+ scale: 0
206
+ };
207
+ else throw new MoneyError("amount_invalid", `Not a finite decimal: ${describeValue(input)}`, { field });
208
+ if (!signed && value.units < 0n) throw new MoneyError("amount_invalid", `Must not be negative: ${describeValue(input)}`, { field });
209
+ return value;
210
+ }
211
+ /** Canonical DecimalText of `input` (`'4300.00'` gives `'4300'`, `0.1 + 0.2` gives `'0.30000000000000004'`). See `decimalOf` for what is refused. */
212
+ function parseDecimalText(input, options = {}) {
213
+ return toDecimalText(decimalOf(input, options.signed ?? true));
214
+ }
215
+ /**
216
+ * THE storage-literal grammar: `parseDecimal`'s `'plain'` text (decimal, optional fraction,
217
+ * no exponent, at most `MAX_DIGITS` characters). `signed` (default false) allows a leading
218
+ * `-`; `leadingZeros: false` refuses `'04300'`.
219
+ * `{ leadingZeros: false }` is AMOUNT_COLUMN_LITERAL, `{}` STORAGE_AMOUNT_LITERAL,
220
+ * `{ signed: true }` the oracle / iyzico / Authorize.Net grammar.
221
+ */
222
+ function isDecimalLiteral(text, options = {}) {
223
+ if (typeof text !== "string" || parseDecimal(text, "plain") === null) return false;
224
+ const negative = text.startsWith("-");
225
+ if (negative && !options.signed) return false;
226
+ const digits = negative ? text.slice(1) : text;
227
+ return options.leadingZeros !== false || digits[0] !== "0" || digits.length === 1 || digits[1] === ".";
228
+ }
229
+ /** Throws `amount_invalid` unless `value` is an unsigned decimal literal without leading zeros (the seam ledger rule). */
230
+ function assertDecimalLiteral(value, label) {
231
+ if (!isDecimalLiteral(value, { leadingZeros: false })) throw new MoneyError("amount_invalid", `${label} must be a non-negative decimal storage literal, got ${typeof value === "string" ? `'${value}'` : typeof value}`);
232
+ }
233
+ /** Drops trailing fraction zeros and a trailing `.` (`'12.500'` gives `'12.5'`, `'12.00'` gives `'12'`). Text without a `.` is unchanged. */
234
+ function trimDecimalZeros(text) {
235
+ return text.includes(".") ? text.replace(/0+$/, "").replace(/\.$/, "") : text;
236
+ }
237
+ /** The exact sum (`[]` gives `'0'`). */
238
+ function decimalSum(values) {
239
+ let total = {
240
+ units: 0n,
241
+ scale: 0
242
+ };
243
+ for (const value of values) total = addDecimal(total, decimalOf(value));
244
+ return toDecimalText(total);
245
+ }
246
+ /** `a - b`, exactly. */
247
+ function decimalSubtract(a, b) {
248
+ const [x, y, scale] = aligned(decimalOf(a), decimalOf(b));
249
+ return toDecimalText({
250
+ units: x - y,
251
+ scale
252
+ });
253
+ }
254
+ /** `a x b`, exactly. */
255
+ function decimalMultiply(a, b) {
256
+ return toDecimalText(multiplyDecimal(decimalOf(a), decimalOf(b)));
257
+ }
258
+ function checkScale(scale) {
259
+ if (!Number.isSafeInteger(scale) || scale < 0 || scale > 100) throw new MoneyError("amount_invalid", `scale must be an integer from 0 to 100, got ${describeValue(scale)}`);
260
+ return scale;
261
+ }
262
+ /** `a / b` rounded once to `scale` fraction digits (`rounding` default half-up). `b` = 0 throws `amount_invalid`. */
263
+ function decimalDivide(a, b, options) {
264
+ const scale = checkScale(options.scale);
265
+ const x = decimalOf(a);
266
+ const y = decimalOf(b);
267
+ if (y.units === 0n) throw new MoneyError("amount_invalid", "Division by zero");
268
+ const rounding = options.rounding ?? "half-up";
269
+ return toDecimalText(ratioToDecimal(x.units * pow10(y.scale), y.units * pow10(x.scale), scale, rounding));
270
+ }
271
+ /** `a` rounded to `scale` fraction digits (`rounding` default half-up). */
272
+ function decimalRound(a, options) {
273
+ return toDecimalText(roundToScale(decimalOf(a), checkScale(options.scale), options.rounding ?? "half-up"));
274
+ }
275
+ /** `-1`, `0` or `1` as `a` is below, equal to or above `b`. */
276
+ function decimalCompare(a, b) {
277
+ return compareDecimal(decimalOf(a), decimalOf(b));
278
+ }
279
+ /** `a` limited to `[min, max]` (either bound optional). `min` above `max` throws `amount_invalid`. */
280
+ function decimalClamp(a, bounds) {
281
+ const value = decimalOf(a);
282
+ const min = bounds.min === void 0 ? void 0 : decimalOf(bounds.min);
283
+ const max = bounds.max === void 0 ? void 0 : decimalOf(bounds.max);
284
+ if (min && max && compareDecimal(min, max) > 0) throw new MoneyError("amount_invalid", `Clamp bounds are reversed: ${bounds.min} > ${bounds.max}`);
285
+ if (min && compareDecimal(value, min) < 0) return toDecimalText(min);
286
+ if (max && compareDecimal(value, max) > 0) return toDecimalText(max);
287
+ return toDecimalText(value);
288
+ }
289
+ /** `|a - b| <= tolerance` (`<` with `inclusive: false`). A negative tolerance throws `amount_invalid`. */
290
+ function decimalWithin(a, b, tolerance, options = {}) {
291
+ const limit = decimalOf(tolerance, false);
292
+ const [x, y, scale] = aligned(decimalOf(a), decimalOf(b));
293
+ const gap = compareDecimal({
294
+ units: x > y ? x - y : y - x,
295
+ scale
296
+ }, limit);
297
+ return options.inclusive === false ? gap < 0 : gap <= 0;
298
+ }
299
+ //#endregion
300
+ //#region src/data/currencies.ts
301
+ const CURRENCY_ROWS = [
302
+ {
303
+ code: "AED",
304
+ name: "United Arab Emirates Dirham",
305
+ symbol: "AED",
306
+ narrowSymbol: "AED",
307
+ symbolIsAmbiguous: false,
308
+ numericCode: "784",
309
+ status: "active",
310
+ replacedBy: null,
311
+ storageScale: 100,
312
+ storageDigits: 2,
313
+ displayDigits: 2,
314
+ medusaDigits: 2,
315
+ symbolAliases: [
316
+ "AED",
317
+ "د.إ",
318
+ "Dhs"
319
+ ],
320
+ localeHint: null,
321
+ commaDecimal: false
322
+ },
323
+ {
324
+ code: "AFN",
325
+ name: "Afghan Afghani",
326
+ symbol: "AFN",
327
+ narrowSymbol: "؋",
328
+ symbolIsAmbiguous: false,
329
+ numericCode: "971",
330
+ status: "active",
331
+ replacedBy: null,
332
+ storageScale: 100,
333
+ storageDigits: 2,
334
+ displayDigits: 0,
335
+ medusaDigits: 0,
336
+ symbolAliases: [],
337
+ localeHint: null,
338
+ commaDecimal: false
339
+ },
340
+ {
341
+ code: "ALL",
342
+ name: "Albanian Lek",
343
+ symbol: "ALL",
344
+ narrowSymbol: "ALL",
345
+ symbolIsAmbiguous: false,
346
+ numericCode: "008",
347
+ status: "active",
348
+ replacedBy: null,
349
+ storageScale: 100,
350
+ storageDigits: 2,
351
+ displayDigits: 0,
352
+ medusaDigits: 0,
353
+ symbolAliases: [],
354
+ localeHint: null,
355
+ commaDecimal: false
356
+ },
357
+ {
358
+ code: "AMD",
359
+ name: "Armenian Dram",
360
+ symbol: "AMD",
361
+ narrowSymbol: "֏",
362
+ symbolIsAmbiguous: false,
363
+ numericCode: "051",
364
+ status: "active",
365
+ replacedBy: null,
366
+ storageScale: 100,
367
+ storageDigits: 2,
368
+ displayDigits: 2,
369
+ medusaDigits: 0,
370
+ symbolAliases: [],
371
+ localeHint: null,
372
+ commaDecimal: false
373
+ },
374
+ {
375
+ code: "ANG",
376
+ name: "Netherlands Antillean Guilder",
377
+ symbol: "ANG",
378
+ narrowSymbol: "ANG",
379
+ symbolIsAmbiguous: false,
380
+ numericCode: "532",
381
+ status: "historic",
382
+ replacedBy: "XCG",
383
+ storageScale: 100,
384
+ storageDigits: 2,
385
+ displayDigits: 2,
386
+ medusaDigits: 2,
387
+ symbolAliases: [],
388
+ localeHint: null,
389
+ commaDecimal: false
390
+ },
391
+ {
392
+ code: "AOA",
393
+ name: "Angolan Kwanza",
394
+ symbol: "AOA",
395
+ narrowSymbol: "Kz",
396
+ symbolIsAmbiguous: false,
397
+ numericCode: "973",
398
+ status: "active",
399
+ replacedBy: null,
400
+ storageScale: 100,
401
+ storageDigits: 2,
402
+ displayDigits: 2,
403
+ medusaDigits: 2,
404
+ symbolAliases: [],
405
+ localeHint: null,
406
+ commaDecimal: false
407
+ },
408
+ {
409
+ code: "ARS",
410
+ name: "Argentine Peso",
411
+ symbol: "ARS",
412
+ narrowSymbol: "$",
413
+ symbolIsAmbiguous: true,
414
+ numericCode: "032",
415
+ status: "active",
416
+ replacedBy: null,
417
+ storageScale: 100,
418
+ storageDigits: 2,
419
+ displayDigits: 2,
420
+ medusaDigits: 2,
421
+ symbolAliases: ["$", "AR$"],
422
+ localeHint: null,
423
+ commaDecimal: false
424
+ },
425
+ {
426
+ code: "AUD",
427
+ name: "Australian Dollar",
428
+ symbol: "A$",
429
+ narrowSymbol: "$",
430
+ symbolIsAmbiguous: true,
431
+ numericCode: "036",
432
+ status: "active",
433
+ replacedBy: null,
434
+ storageScale: 100,
435
+ storageDigits: 2,
436
+ displayDigits: 2,
437
+ medusaDigits: 2,
438
+ symbolAliases: [
439
+ "$",
440
+ "A$",
441
+ "AU$"
442
+ ],
443
+ localeHint: null,
444
+ commaDecimal: false
445
+ },
446
+ {
447
+ code: "AWG",
448
+ name: "Aruban Florin",
449
+ symbol: "AWG",
450
+ narrowSymbol: "AWG",
451
+ symbolIsAmbiguous: false,
452
+ numericCode: "533",
453
+ status: "active",
454
+ replacedBy: null,
455
+ storageScale: 100,
456
+ storageDigits: 2,
457
+ displayDigits: 2,
458
+ medusaDigits: 2,
459
+ symbolAliases: [],
460
+ localeHint: null,
461
+ commaDecimal: false
462
+ },
463
+ {
464
+ code: "AZN",
465
+ name: "Azerbaijani Manat",
466
+ symbol: "AZN",
467
+ narrowSymbol: "₼",
468
+ symbolIsAmbiguous: false,
469
+ numericCode: "944",
470
+ status: "active",
471
+ replacedBy: null,
472
+ storageScale: 100,
473
+ storageDigits: 2,
474
+ displayDigits: 2,
475
+ medusaDigits: 2,
476
+ symbolAliases: [],
477
+ localeHint: null,
478
+ commaDecimal: false
479
+ },
480
+ {
481
+ code: "BAM",
482
+ name: "Bosnia-Herzegovina Convertible Mark",
483
+ symbol: "BAM",
484
+ narrowSymbol: "KM",
485
+ symbolIsAmbiguous: false,
486
+ numericCode: "977",
487
+ status: "active",
488
+ replacedBy: null,
489
+ storageScale: 100,
490
+ storageDigits: 2,
491
+ displayDigits: 2,
492
+ medusaDigits: 2,
493
+ symbolAliases: [],
494
+ localeHint: null,
495
+ commaDecimal: false
496
+ },
497
+ {
498
+ code: "BBD",
499
+ name: "Barbadian Dollar",
500
+ symbol: "BBD",
501
+ narrowSymbol: "$",
502
+ symbolIsAmbiguous: true,
503
+ numericCode: "052",
504
+ status: "active",
505
+ replacedBy: null,
506
+ storageScale: 100,
507
+ storageDigits: 2,
508
+ displayDigits: 2,
509
+ medusaDigits: 2,
510
+ symbolAliases: [],
511
+ localeHint: null,
512
+ commaDecimal: false
513
+ },
514
+ {
515
+ code: "BDT",
516
+ name: "Bangladeshi Taka",
517
+ symbol: "BDT",
518
+ narrowSymbol: "৳",
519
+ symbolIsAmbiguous: false,
520
+ numericCode: "050",
521
+ status: "active",
522
+ replacedBy: null,
523
+ storageScale: 100,
524
+ storageDigits: 2,
525
+ displayDigits: 2,
526
+ medusaDigits: 2,
527
+ symbolAliases: ["৳", "Tk"],
528
+ localeHint: null,
529
+ commaDecimal: false
530
+ },
531
+ {
532
+ code: "BGN",
533
+ name: "Bulgarian Lev",
534
+ symbol: "BGN",
535
+ narrowSymbol: "BGN",
536
+ symbolIsAmbiguous: false,
537
+ numericCode: "975",
538
+ status: "historic",
539
+ replacedBy: "EUR",
540
+ storageScale: 100,
541
+ storageDigits: 2,
542
+ displayDigits: 2,
543
+ medusaDigits: 2,
544
+ symbolAliases: ["лв", "lv"],
545
+ localeHint: "bg-BG",
546
+ commaDecimal: false
547
+ },
548
+ {
549
+ code: "BHD",
550
+ name: "Bahraini Dinar",
551
+ symbol: "BHD",
552
+ narrowSymbol: "BHD",
553
+ symbolIsAmbiguous: false,
554
+ numericCode: "048",
555
+ status: "active",
556
+ replacedBy: null,
557
+ storageScale: 1e3,
558
+ storageDigits: 3,
559
+ displayDigits: 3,
560
+ medusaDigits: 3,
561
+ symbolAliases: [],
562
+ localeHint: null,
563
+ commaDecimal: false
564
+ },
565
+ {
566
+ code: "BIF",
567
+ name: "Burundian Franc",
568
+ symbol: "BIF",
569
+ narrowSymbol: "BIF",
570
+ symbolIsAmbiguous: false,
571
+ numericCode: "108",
572
+ status: "active",
573
+ replacedBy: null,
574
+ storageScale: 100,
575
+ storageDigits: 0,
576
+ displayDigits: 0,
577
+ medusaDigits: 0,
578
+ symbolAliases: [],
579
+ localeHint: null,
580
+ commaDecimal: false
581
+ },
582
+ {
583
+ code: "BMD",
584
+ name: "Bermudan Dollar",
585
+ symbol: "BMD",
586
+ narrowSymbol: "$",
587
+ symbolIsAmbiguous: true,
588
+ numericCode: "060",
589
+ status: "active",
590
+ replacedBy: null,
591
+ storageScale: 100,
592
+ storageDigits: 2,
593
+ displayDigits: 2,
594
+ medusaDigits: 2,
595
+ symbolAliases: [],
596
+ localeHint: null,
597
+ commaDecimal: false
598
+ },
599
+ {
600
+ code: "BND",
601
+ name: "Brunei Dollar",
602
+ symbol: "BND",
603
+ narrowSymbol: "$",
604
+ symbolIsAmbiguous: true,
605
+ numericCode: "096",
606
+ status: "active",
607
+ replacedBy: null,
608
+ storageScale: 100,
609
+ storageDigits: 2,
610
+ displayDigits: 2,
611
+ medusaDigits: 2,
612
+ symbolAliases: [],
613
+ localeHint: null,
614
+ commaDecimal: false
615
+ },
616
+ {
617
+ code: "BOB",
618
+ name: "Bolivian Boliviano",
619
+ symbol: "BOB",
620
+ narrowSymbol: "Bs",
621
+ symbolIsAmbiguous: false,
622
+ numericCode: "068",
623
+ status: "active",
624
+ replacedBy: null,
625
+ storageScale: 100,
626
+ storageDigits: 2,
627
+ displayDigits: 2,
628
+ medusaDigits: 2,
629
+ symbolAliases: [],
630
+ localeHint: null,
631
+ commaDecimal: false
632
+ },
633
+ {
634
+ code: "BRL",
635
+ name: "Brazilian Real",
636
+ symbol: "R$",
637
+ narrowSymbol: "R$",
638
+ symbolIsAmbiguous: false,
639
+ numericCode: "986",
640
+ status: "active",
641
+ replacedBy: null,
642
+ storageScale: 100,
643
+ storageDigits: 2,
644
+ displayDigits: 2,
645
+ medusaDigits: 2,
646
+ symbolAliases: ["R$"],
647
+ localeHint: "pt-BR",
648
+ commaDecimal: false
649
+ },
650
+ {
651
+ code: "BSD",
652
+ name: "Bahamian Dollar",
653
+ symbol: "BSD",
654
+ narrowSymbol: "$",
655
+ symbolIsAmbiguous: true,
656
+ numericCode: "044",
657
+ status: "active",
658
+ replacedBy: null,
659
+ storageScale: 100,
660
+ storageDigits: 2,
661
+ displayDigits: 2,
662
+ medusaDigits: 2,
663
+ symbolAliases: [],
664
+ localeHint: null,
665
+ commaDecimal: false
666
+ },
667
+ {
668
+ code: "BTN",
669
+ name: "Bhutanese Ngultrum",
670
+ symbol: "BTN",
671
+ narrowSymbol: "BTN",
672
+ symbolIsAmbiguous: false,
673
+ numericCode: "064",
674
+ status: "active",
675
+ replacedBy: null,
676
+ storageScale: 100,
677
+ storageDigits: 2,
678
+ displayDigits: 2,
679
+ medusaDigits: 2,
680
+ symbolAliases: [],
681
+ localeHint: null,
682
+ commaDecimal: false
683
+ },
684
+ {
685
+ code: "BWP",
686
+ name: "Botswanan Pula",
687
+ symbol: "BWP",
688
+ narrowSymbol: "P",
689
+ symbolIsAmbiguous: false,
690
+ numericCode: "072",
691
+ status: "active",
692
+ replacedBy: null,
693
+ storageScale: 100,
694
+ storageDigits: 2,
695
+ displayDigits: 2,
696
+ medusaDigits: 2,
697
+ symbolAliases: [],
698
+ localeHint: null,
699
+ commaDecimal: false
700
+ },
701
+ {
702
+ code: "BYN",
703
+ name: "Belarusian Ruble",
704
+ symbol: "BYN",
705
+ narrowSymbol: "BYN",
706
+ symbolIsAmbiguous: false,
707
+ numericCode: null,
708
+ status: "active",
709
+ replacedBy: null,
710
+ storageScale: 100,
711
+ storageDigits: 2,
712
+ displayDigits: 2,
713
+ medusaDigits: 2,
714
+ symbolAliases: [],
715
+ localeHint: null,
716
+ commaDecimal: false
717
+ },
718
+ {
719
+ code: "BYR",
720
+ name: "Belarusian Ruble (2000–2016)",
721
+ symbol: "BYR",
722
+ narrowSymbol: "BYR",
723
+ symbolIsAmbiguous: false,
724
+ numericCode: "974",
725
+ status: "historic",
726
+ replacedBy: "BYN",
727
+ storageScale: 100,
728
+ storageDigits: 2,
729
+ displayDigits: 2,
730
+ medusaDigits: 2,
731
+ symbolAliases: [],
732
+ localeHint: null,
733
+ commaDecimal: false
734
+ },
735
+ {
736
+ code: "BZD",
737
+ name: "Belize Dollar",
738
+ symbol: "BZD",
739
+ narrowSymbol: "$",
740
+ symbolIsAmbiguous: true,
741
+ numericCode: "084",
742
+ status: "active",
743
+ replacedBy: null,
744
+ storageScale: 100,
745
+ storageDigits: 2,
746
+ displayDigits: 2,
747
+ medusaDigits: 2,
748
+ symbolAliases: [],
749
+ localeHint: null,
750
+ commaDecimal: false
751
+ },
752
+ {
753
+ code: "CAD",
754
+ name: "Canadian Dollar",
755
+ symbol: "CA$",
756
+ narrowSymbol: "$",
757
+ symbolIsAmbiguous: true,
758
+ numericCode: "124",
759
+ status: "active",
760
+ replacedBy: null,
761
+ storageScale: 100,
762
+ storageDigits: 2,
763
+ displayDigits: 2,
764
+ medusaDigits: 2,
765
+ symbolAliases: [
766
+ "$",
767
+ "CA$",
768
+ "C$"
769
+ ],
770
+ localeHint: null,
771
+ commaDecimal: false
772
+ },
773
+ {
774
+ code: "CDF",
775
+ name: "Congolese Franc",
776
+ symbol: "CDF",
777
+ narrowSymbol: "CDF",
778
+ symbolIsAmbiguous: false,
779
+ numericCode: "976",
780
+ status: "active",
781
+ replacedBy: null,
782
+ storageScale: 100,
783
+ storageDigits: 2,
784
+ displayDigits: 2,
785
+ medusaDigits: 2,
786
+ symbolAliases: [],
787
+ localeHint: null,
788
+ commaDecimal: false
789
+ },
790
+ {
791
+ code: "CHF",
792
+ name: "Swiss Franc",
793
+ symbol: "CHF",
794
+ narrowSymbol: "CHF",
795
+ symbolIsAmbiguous: false,
796
+ numericCode: "756",
797
+ status: "active",
798
+ replacedBy: null,
799
+ storageScale: 100,
800
+ storageDigits: 2,
801
+ displayDigits: 2,
802
+ medusaDigits: 2,
803
+ symbolAliases: [
804
+ "CHF",
805
+ "SFr.",
806
+ "Fr.",
807
+ "Fr"
808
+ ],
809
+ localeHint: "de-CH",
810
+ commaDecimal: false
811
+ },
812
+ {
813
+ code: "CLP",
814
+ name: "Chilean Peso",
815
+ symbol: "CLP",
816
+ narrowSymbol: "$",
817
+ symbolIsAmbiguous: true,
818
+ numericCode: "152",
819
+ status: "active",
820
+ replacedBy: null,
821
+ storageScale: 100,
822
+ storageDigits: 0,
823
+ displayDigits: 0,
824
+ medusaDigits: 0,
825
+ symbolAliases: ["$", "CLP$"],
826
+ localeHint: null,
827
+ commaDecimal: false
828
+ },
829
+ {
830
+ code: "CNY",
831
+ name: "Chinese Yuan",
832
+ symbol: "CN¥",
833
+ narrowSymbol: "¥",
834
+ symbolIsAmbiguous: true,
835
+ numericCode: "156",
836
+ status: "active",
837
+ replacedBy: null,
838
+ storageScale: 100,
839
+ storageDigits: 2,
840
+ displayDigits: 2,
841
+ medusaDigits: 2,
842
+ symbolAliases: [
843
+ "¥",
844
+ "CN¥",
845
+ "RMB",
846
+ "元"
847
+ ],
848
+ localeHint: null,
849
+ commaDecimal: false
850
+ },
851
+ {
852
+ code: "COP",
853
+ name: "Colombian Peso",
854
+ symbol: "COP",
855
+ narrowSymbol: "$",
856
+ symbolIsAmbiguous: true,
857
+ numericCode: "170",
858
+ status: "active",
859
+ replacedBy: null,
860
+ storageScale: 100,
861
+ storageDigits: 2,
862
+ displayDigits: 0,
863
+ medusaDigits: 0,
864
+ symbolAliases: ["$", "COL$"],
865
+ localeHint: null,
866
+ commaDecimal: false
867
+ },
868
+ {
869
+ code: "CRC",
870
+ name: "Costa Rican Colón",
871
+ symbol: "CRC",
872
+ narrowSymbol: "₡",
873
+ symbolIsAmbiguous: false,
874
+ numericCode: "188",
875
+ status: "active",
876
+ replacedBy: null,
877
+ storageScale: 100,
878
+ storageDigits: 2,
879
+ displayDigits: 2,
880
+ medusaDigits: 0,
881
+ symbolAliases: [],
882
+ localeHint: null,
883
+ commaDecimal: false
884
+ },
885
+ {
886
+ code: "CUC",
887
+ name: "Cuban Convertible Peso",
888
+ symbol: "CUC",
889
+ narrowSymbol: "$",
890
+ symbolIsAmbiguous: true,
891
+ numericCode: "931",
892
+ status: "historic",
893
+ replacedBy: "CUP",
894
+ storageScale: 100,
895
+ storageDigits: 2,
896
+ displayDigits: 2,
897
+ medusaDigits: 2,
898
+ symbolAliases: [],
899
+ localeHint: null,
900
+ commaDecimal: false
901
+ },
902
+ {
903
+ code: "CUP",
904
+ name: "Cuban Peso",
905
+ symbol: "CUP",
906
+ narrowSymbol: "$",
907
+ symbolIsAmbiguous: true,
908
+ numericCode: "192",
909
+ status: "active",
910
+ replacedBy: null,
911
+ storageScale: 100,
912
+ storageDigits: 2,
913
+ displayDigits: 2,
914
+ medusaDigits: 2,
915
+ symbolAliases: [],
916
+ localeHint: null,
917
+ commaDecimal: false
918
+ },
919
+ {
920
+ code: "CVE",
921
+ name: "Cape Verdean Escudo",
922
+ symbol: "CVE",
923
+ narrowSymbol: "CVE",
924
+ symbolIsAmbiguous: false,
925
+ numericCode: "132",
926
+ status: "active",
927
+ replacedBy: null,
928
+ storageScale: 100,
929
+ storageDigits: 2,
930
+ displayDigits: 2,
931
+ medusaDigits: 2,
932
+ symbolAliases: [],
933
+ localeHint: null,
934
+ commaDecimal: false
935
+ },
936
+ {
937
+ code: "CZK",
938
+ name: "Czech Koruna",
939
+ symbol: "CZK",
940
+ narrowSymbol: "Kč",
941
+ symbolIsAmbiguous: false,
942
+ numericCode: "203",
943
+ status: "active",
944
+ replacedBy: null,
945
+ storageScale: 100,
946
+ storageDigits: 2,
947
+ displayDigits: 2,
948
+ medusaDigits: 2,
949
+ symbolAliases: ["Kč"],
950
+ localeHint: "cs-CZ",
951
+ commaDecimal: false
952
+ },
953
+ {
954
+ code: "DJF",
955
+ name: "Djiboutian Franc",
956
+ symbol: "DJF",
957
+ narrowSymbol: "DJF",
958
+ symbolIsAmbiguous: false,
959
+ numericCode: "262",
960
+ status: "active",
961
+ replacedBy: null,
962
+ storageScale: 100,
963
+ storageDigits: 0,
964
+ displayDigits: 0,
965
+ medusaDigits: 0,
966
+ symbolAliases: [],
967
+ localeHint: null,
968
+ commaDecimal: false
969
+ },
970
+ {
971
+ code: "DKK",
972
+ name: "Danish Krone",
973
+ symbol: "DKK",
974
+ narrowSymbol: "kr",
975
+ symbolIsAmbiguous: true,
976
+ numericCode: "208",
977
+ status: "active",
978
+ replacedBy: null,
979
+ storageScale: 100,
980
+ storageDigits: 2,
981
+ displayDigits: 2,
982
+ medusaDigits: 2,
983
+ symbolAliases: ["kr", "kr."],
984
+ localeHint: "da-DK",
985
+ commaDecimal: false
986
+ },
987
+ {
988
+ code: "DOP",
989
+ name: "Dominican Peso",
990
+ symbol: "DOP",
991
+ narrowSymbol: "$",
992
+ symbolIsAmbiguous: true,
993
+ numericCode: "214",
994
+ status: "active",
995
+ replacedBy: null,
996
+ storageScale: 100,
997
+ storageDigits: 2,
998
+ displayDigits: 2,
999
+ medusaDigits: 2,
1000
+ symbolAliases: [],
1001
+ localeHint: null,
1002
+ commaDecimal: false
1003
+ },
1004
+ {
1005
+ code: "DZD",
1006
+ name: "Algerian Dinar",
1007
+ symbol: "DZD",
1008
+ narrowSymbol: "DZD",
1009
+ symbolIsAmbiguous: false,
1010
+ numericCode: "012",
1011
+ status: "active",
1012
+ replacedBy: null,
1013
+ storageScale: 100,
1014
+ storageDigits: 2,
1015
+ displayDigits: 2,
1016
+ medusaDigits: 2,
1017
+ symbolAliases: [],
1018
+ localeHint: null,
1019
+ commaDecimal: false
1020
+ },
1021
+ {
1022
+ code: "EEK",
1023
+ name: "Estonian Kroon",
1024
+ symbol: "EEK",
1025
+ narrowSymbol: "EEK",
1026
+ symbolIsAmbiguous: false,
1027
+ numericCode: null,
1028
+ status: "historic",
1029
+ replacedBy: "EUR",
1030
+ storageScale: 100,
1031
+ storageDigits: 2,
1032
+ displayDigits: 2,
1033
+ medusaDigits: 2,
1034
+ symbolAliases: [],
1035
+ localeHint: null,
1036
+ commaDecimal: false
1037
+ },
1038
+ {
1039
+ code: "EGP",
1040
+ name: "Egyptian Pound",
1041
+ symbol: "EGP",
1042
+ narrowSymbol: "E£",
1043
+ symbolIsAmbiguous: false,
1044
+ numericCode: "818",
1045
+ status: "active",
1046
+ replacedBy: null,
1047
+ storageScale: 100,
1048
+ storageDigits: 2,
1049
+ displayDigits: 2,
1050
+ medusaDigits: 2,
1051
+ symbolAliases: [
1052
+ "E£",
1053
+ "LE",
1054
+ "ج.م"
1055
+ ],
1056
+ localeHint: null,
1057
+ commaDecimal: false
1058
+ },
1059
+ {
1060
+ code: "ERN",
1061
+ name: "Eritrean Nakfa",
1062
+ symbol: "ERN",
1063
+ narrowSymbol: "ERN",
1064
+ symbolIsAmbiguous: false,
1065
+ numericCode: "232",
1066
+ status: "active",
1067
+ replacedBy: null,
1068
+ storageScale: 100,
1069
+ storageDigits: 2,
1070
+ displayDigits: 2,
1071
+ medusaDigits: 2,
1072
+ symbolAliases: [],
1073
+ localeHint: null,
1074
+ commaDecimal: false
1075
+ },
1076
+ {
1077
+ code: "ETB",
1078
+ name: "Ethiopian Birr",
1079
+ symbol: "ETB",
1080
+ narrowSymbol: "ETB",
1081
+ symbolIsAmbiguous: false,
1082
+ numericCode: "230",
1083
+ status: "active",
1084
+ replacedBy: null,
1085
+ storageScale: 100,
1086
+ storageDigits: 2,
1087
+ displayDigits: 2,
1088
+ medusaDigits: 2,
1089
+ symbolAliases: [],
1090
+ localeHint: null,
1091
+ commaDecimal: false
1092
+ },
1093
+ {
1094
+ code: "EUR",
1095
+ name: "Euro",
1096
+ symbol: "€",
1097
+ narrowSymbol: "€",
1098
+ symbolIsAmbiguous: false,
1099
+ numericCode: "978",
1100
+ status: "active",
1101
+ replacedBy: null,
1102
+ storageScale: 100,
1103
+ storageDigits: 2,
1104
+ displayDigits: 2,
1105
+ medusaDigits: 2,
1106
+ symbolAliases: ["€"],
1107
+ localeHint: "de-DE",
1108
+ commaDecimal: false
1109
+ },
1110
+ {
1111
+ code: "FJD",
1112
+ name: "Fijian Dollar",
1113
+ symbol: "FJD",
1114
+ narrowSymbol: "$",
1115
+ symbolIsAmbiguous: true,
1116
+ numericCode: "242",
1117
+ status: "active",
1118
+ replacedBy: null,
1119
+ storageScale: 100,
1120
+ storageDigits: 2,
1121
+ displayDigits: 2,
1122
+ medusaDigits: 2,
1123
+ symbolAliases: [],
1124
+ localeHint: null,
1125
+ commaDecimal: false
1126
+ },
1127
+ {
1128
+ code: "FKP",
1129
+ name: "Falkland Islands Pound",
1130
+ symbol: "FKP",
1131
+ narrowSymbol: "£",
1132
+ symbolIsAmbiguous: true,
1133
+ numericCode: "238",
1134
+ status: "active",
1135
+ replacedBy: null,
1136
+ storageScale: 100,
1137
+ storageDigits: 2,
1138
+ displayDigits: 2,
1139
+ medusaDigits: 2,
1140
+ symbolAliases: [],
1141
+ localeHint: null,
1142
+ commaDecimal: false
1143
+ },
1144
+ {
1145
+ code: "GBP",
1146
+ name: "British Pound",
1147
+ symbol: "£",
1148
+ narrowSymbol: "£",
1149
+ symbolIsAmbiguous: true,
1150
+ numericCode: "826",
1151
+ status: "active",
1152
+ replacedBy: null,
1153
+ storageScale: 100,
1154
+ storageDigits: 2,
1155
+ displayDigits: 2,
1156
+ medusaDigits: 2,
1157
+ symbolAliases: ["£"],
1158
+ localeHint: null,
1159
+ commaDecimal: false
1160
+ },
1161
+ {
1162
+ code: "GEL",
1163
+ name: "Georgian Lari",
1164
+ symbol: "GEL",
1165
+ narrowSymbol: "₾",
1166
+ symbolIsAmbiguous: false,
1167
+ numericCode: "981",
1168
+ status: "active",
1169
+ replacedBy: null,
1170
+ storageScale: 100,
1171
+ storageDigits: 2,
1172
+ displayDigits: 2,
1173
+ medusaDigits: 2,
1174
+ symbolAliases: [],
1175
+ localeHint: null,
1176
+ commaDecimal: false
1177
+ },
1178
+ {
1179
+ code: "GHS",
1180
+ name: "Ghanaian Cedi",
1181
+ symbol: "GHS",
1182
+ narrowSymbol: "GH₵",
1183
+ symbolIsAmbiguous: false,
1184
+ numericCode: "936",
1185
+ status: "active",
1186
+ replacedBy: null,
1187
+ storageScale: 100,
1188
+ storageDigits: 2,
1189
+ displayDigits: 2,
1190
+ medusaDigits: 2,
1191
+ symbolAliases: ["GH₵", "₵"],
1192
+ localeHint: null,
1193
+ commaDecimal: false
1194
+ },
1195
+ {
1196
+ code: "GIP",
1197
+ name: "Gibraltar Pound",
1198
+ symbol: "GIP",
1199
+ narrowSymbol: "£",
1200
+ symbolIsAmbiguous: true,
1201
+ numericCode: "292",
1202
+ status: "active",
1203
+ replacedBy: null,
1204
+ storageScale: 100,
1205
+ storageDigits: 2,
1206
+ displayDigits: 2,
1207
+ medusaDigits: 2,
1208
+ symbolAliases: [],
1209
+ localeHint: null,
1210
+ commaDecimal: false
1211
+ },
1212
+ {
1213
+ code: "GMD",
1214
+ name: "Gambian Dalasi",
1215
+ symbol: "GMD",
1216
+ narrowSymbol: "GMD",
1217
+ symbolIsAmbiguous: false,
1218
+ numericCode: "270",
1219
+ status: "active",
1220
+ replacedBy: null,
1221
+ storageScale: 100,
1222
+ storageDigits: 2,
1223
+ displayDigits: 2,
1224
+ medusaDigits: 2,
1225
+ symbolAliases: [],
1226
+ localeHint: null,
1227
+ commaDecimal: false
1228
+ },
1229
+ {
1230
+ code: "GNF",
1231
+ name: "Guinean Franc",
1232
+ symbol: "GNF",
1233
+ narrowSymbol: "FG",
1234
+ symbolIsAmbiguous: false,
1235
+ numericCode: "324",
1236
+ status: "active",
1237
+ replacedBy: null,
1238
+ storageScale: 100,
1239
+ storageDigits: 0,
1240
+ displayDigits: 0,
1241
+ medusaDigits: 0,
1242
+ symbolAliases: [],
1243
+ localeHint: null,
1244
+ commaDecimal: false
1245
+ },
1246
+ {
1247
+ code: "GTQ",
1248
+ name: "Guatemalan Quetzal",
1249
+ symbol: "GTQ",
1250
+ narrowSymbol: "Q",
1251
+ symbolIsAmbiguous: false,
1252
+ numericCode: "320",
1253
+ status: "active",
1254
+ replacedBy: null,
1255
+ storageScale: 100,
1256
+ storageDigits: 2,
1257
+ displayDigits: 2,
1258
+ medusaDigits: 2,
1259
+ symbolAliases: [],
1260
+ localeHint: null,
1261
+ commaDecimal: false
1262
+ },
1263
+ {
1264
+ code: "GYD",
1265
+ name: "Guyanaese Dollar",
1266
+ symbol: "GYD",
1267
+ narrowSymbol: "$",
1268
+ symbolIsAmbiguous: true,
1269
+ numericCode: "328",
1270
+ status: "active",
1271
+ replacedBy: null,
1272
+ storageScale: 100,
1273
+ storageDigits: 2,
1274
+ displayDigits: 2,
1275
+ medusaDigits: 2,
1276
+ symbolAliases: [],
1277
+ localeHint: null,
1278
+ commaDecimal: false
1279
+ },
1280
+ {
1281
+ code: "HKD",
1282
+ name: "Hong Kong Dollar",
1283
+ symbol: "HK$",
1284
+ narrowSymbol: "$",
1285
+ symbolIsAmbiguous: true,
1286
+ numericCode: "344",
1287
+ status: "active",
1288
+ replacedBy: null,
1289
+ storageScale: 100,
1290
+ storageDigits: 2,
1291
+ displayDigits: 2,
1292
+ medusaDigits: 2,
1293
+ symbolAliases: ["$", "HK$"],
1294
+ localeHint: null,
1295
+ commaDecimal: false
1296
+ },
1297
+ {
1298
+ code: "HNL",
1299
+ name: "Honduran Lempira",
1300
+ symbol: "HNL",
1301
+ narrowSymbol: "L",
1302
+ symbolIsAmbiguous: false,
1303
+ numericCode: "340",
1304
+ status: "active",
1305
+ replacedBy: null,
1306
+ storageScale: 100,
1307
+ storageDigits: 2,
1308
+ displayDigits: 2,
1309
+ medusaDigits: 2,
1310
+ symbolAliases: [],
1311
+ localeHint: null,
1312
+ commaDecimal: false
1313
+ },
1314
+ {
1315
+ code: "HRK",
1316
+ name: "Croatian Kuna",
1317
+ symbol: "HRK",
1318
+ narrowSymbol: "kn",
1319
+ symbolIsAmbiguous: false,
1320
+ numericCode: "191",
1321
+ status: "historic",
1322
+ replacedBy: "EUR",
1323
+ storageScale: 100,
1324
+ storageDigits: 2,
1325
+ displayDigits: 2,
1326
+ medusaDigits: 2,
1327
+ symbolAliases: [],
1328
+ localeHint: null,
1329
+ commaDecimal: false
1330
+ },
1331
+ {
1332
+ code: "HTG",
1333
+ name: "Haitian Gourde",
1334
+ symbol: "HTG",
1335
+ narrowSymbol: "HTG",
1336
+ symbolIsAmbiguous: false,
1337
+ numericCode: "332",
1338
+ status: "active",
1339
+ replacedBy: null,
1340
+ storageScale: 100,
1341
+ storageDigits: 2,
1342
+ displayDigits: 2,
1343
+ medusaDigits: 2,
1344
+ symbolAliases: [],
1345
+ localeHint: null,
1346
+ commaDecimal: false
1347
+ },
1348
+ {
1349
+ code: "HUF",
1350
+ name: "Hungarian Forint",
1351
+ symbol: "HUF",
1352
+ narrowSymbol: "Ft",
1353
+ symbolIsAmbiguous: false,
1354
+ numericCode: "348",
1355
+ status: "active",
1356
+ replacedBy: null,
1357
+ storageScale: 100,
1358
+ storageDigits: 2,
1359
+ displayDigits: 0,
1360
+ medusaDigits: 0,
1361
+ symbolAliases: ["Ft"],
1362
+ localeHint: "hu-HU",
1363
+ commaDecimal: false
1364
+ },
1365
+ {
1366
+ code: "IDR",
1367
+ name: "Indonesian Rupiah",
1368
+ symbol: "IDR",
1369
+ narrowSymbol: "Rp",
1370
+ symbolIsAmbiguous: false,
1371
+ numericCode: "360",
1372
+ status: "active",
1373
+ replacedBy: null,
1374
+ storageScale: 100,
1375
+ storageDigits: 2,
1376
+ displayDigits: 0,
1377
+ medusaDigits: 0,
1378
+ symbolAliases: ["Rp"],
1379
+ localeHint: null,
1380
+ commaDecimal: false
1381
+ },
1382
+ {
1383
+ code: "ILS",
1384
+ name: "Israeli New Shekel",
1385
+ symbol: "₪",
1386
+ narrowSymbol: "₪",
1387
+ symbolIsAmbiguous: false,
1388
+ numericCode: "376",
1389
+ status: "active",
1390
+ replacedBy: null,
1391
+ storageScale: 100,
1392
+ storageDigits: 2,
1393
+ displayDigits: 2,
1394
+ medusaDigits: 2,
1395
+ symbolAliases: ["₪"],
1396
+ localeHint: null,
1397
+ commaDecimal: false
1398
+ },
1399
+ {
1400
+ code: "INR",
1401
+ name: "Indian Rupee",
1402
+ symbol: "₹",
1403
+ narrowSymbol: "₹",
1404
+ symbolIsAmbiguous: false,
1405
+ numericCode: "356",
1406
+ status: "active",
1407
+ replacedBy: null,
1408
+ storageScale: 100,
1409
+ storageDigits: 2,
1410
+ displayDigits: 2,
1411
+ medusaDigits: 2,
1412
+ symbolAliases: [
1413
+ "₹",
1414
+ "Rs.",
1415
+ "Rs"
1416
+ ],
1417
+ localeHint: null,
1418
+ commaDecimal: false
1419
+ },
1420
+ {
1421
+ code: "IQD",
1422
+ name: "Iraqi Dinar",
1423
+ symbol: "IQD",
1424
+ narrowSymbol: "IQD",
1425
+ symbolIsAmbiguous: false,
1426
+ numericCode: "368",
1427
+ status: "active",
1428
+ replacedBy: null,
1429
+ storageScale: 1e3,
1430
+ storageDigits: 3,
1431
+ displayDigits: 0,
1432
+ medusaDigits: 0,
1433
+ symbolAliases: [],
1434
+ localeHint: null,
1435
+ commaDecimal: false
1436
+ },
1437
+ {
1438
+ code: "IRR",
1439
+ name: "Iranian Rial",
1440
+ symbol: "IRR",
1441
+ narrowSymbol: "IRR",
1442
+ symbolIsAmbiguous: false,
1443
+ numericCode: "364",
1444
+ status: "active",
1445
+ replacedBy: null,
1446
+ storageScale: 100,
1447
+ storageDigits: 2,
1448
+ displayDigits: 0,
1449
+ medusaDigits: 0,
1450
+ symbolAliases: [],
1451
+ localeHint: null,
1452
+ commaDecimal: false
1453
+ },
1454
+ {
1455
+ code: "ISK",
1456
+ name: "Icelandic Króna",
1457
+ symbol: "ISK",
1458
+ narrowSymbol: "kr",
1459
+ symbolIsAmbiguous: true,
1460
+ numericCode: "352",
1461
+ status: "active",
1462
+ replacedBy: null,
1463
+ storageScale: 100,
1464
+ storageDigits: 0,
1465
+ displayDigits: 0,
1466
+ medusaDigits: 0,
1467
+ symbolAliases: ["kr"],
1468
+ localeHint: null,
1469
+ commaDecimal: false
1470
+ },
1471
+ {
1472
+ code: "JMD",
1473
+ name: "Jamaican Dollar",
1474
+ symbol: "JMD",
1475
+ narrowSymbol: "$",
1476
+ symbolIsAmbiguous: true,
1477
+ numericCode: "388",
1478
+ status: "active",
1479
+ replacedBy: null,
1480
+ storageScale: 100,
1481
+ storageDigits: 2,
1482
+ displayDigits: 2,
1483
+ medusaDigits: 2,
1484
+ symbolAliases: [],
1485
+ localeHint: null,
1486
+ commaDecimal: false
1487
+ },
1488
+ {
1489
+ code: "JOD",
1490
+ name: "Jordanian Dinar",
1491
+ symbol: "JOD",
1492
+ narrowSymbol: "JOD",
1493
+ symbolIsAmbiguous: false,
1494
+ numericCode: "400",
1495
+ status: "active",
1496
+ replacedBy: null,
1497
+ storageScale: 1e3,
1498
+ storageDigits: 3,
1499
+ displayDigits: 3,
1500
+ medusaDigits: 3,
1501
+ symbolAliases: [],
1502
+ localeHint: null,
1503
+ commaDecimal: false
1504
+ },
1505
+ {
1506
+ code: "JPY",
1507
+ name: "Japanese Yen",
1508
+ symbol: "¥",
1509
+ narrowSymbol: "¥",
1510
+ symbolIsAmbiguous: true,
1511
+ numericCode: "392",
1512
+ status: "active",
1513
+ replacedBy: null,
1514
+ storageScale: 100,
1515
+ storageDigits: 0,
1516
+ displayDigits: 0,
1517
+ medusaDigits: 0,
1518
+ symbolAliases: ["¥", "円"],
1519
+ localeHint: null,
1520
+ commaDecimal: false
1521
+ },
1522
+ {
1523
+ code: "KES",
1524
+ name: "Kenyan Shilling",
1525
+ symbol: "KES",
1526
+ narrowSymbol: "KES",
1527
+ symbolIsAmbiguous: false,
1528
+ numericCode: "404",
1529
+ status: "active",
1530
+ replacedBy: null,
1531
+ storageScale: 100,
1532
+ storageDigits: 2,
1533
+ displayDigits: 2,
1534
+ medusaDigits: 2,
1535
+ symbolAliases: ["KSh", "Ksh"],
1536
+ localeHint: null,
1537
+ commaDecimal: false
1538
+ },
1539
+ {
1540
+ code: "KGS",
1541
+ name: "Kyrgyz Som",
1542
+ symbol: "KGS",
1543
+ narrowSymbol: "⃀",
1544
+ symbolIsAmbiguous: false,
1545
+ numericCode: "417",
1546
+ status: "active",
1547
+ replacedBy: null,
1548
+ storageScale: 100,
1549
+ storageDigits: 2,
1550
+ displayDigits: 2,
1551
+ medusaDigits: 2,
1552
+ symbolAliases: [],
1553
+ localeHint: null,
1554
+ commaDecimal: false
1555
+ },
1556
+ {
1557
+ code: "KHR",
1558
+ name: "Cambodian Riel",
1559
+ symbol: "KHR",
1560
+ narrowSymbol: "៛",
1561
+ symbolIsAmbiguous: false,
1562
+ numericCode: "116",
1563
+ status: "active",
1564
+ replacedBy: null,
1565
+ storageScale: 100,
1566
+ storageDigits: 2,
1567
+ displayDigits: 2,
1568
+ medusaDigits: 2,
1569
+ symbolAliases: [],
1570
+ localeHint: null,
1571
+ commaDecimal: false
1572
+ },
1573
+ {
1574
+ code: "KMF",
1575
+ name: "Comorian Franc",
1576
+ symbol: "KMF",
1577
+ narrowSymbol: "CF",
1578
+ symbolIsAmbiguous: false,
1579
+ numericCode: "174",
1580
+ status: "active",
1581
+ replacedBy: null,
1582
+ storageScale: 100,
1583
+ storageDigits: 0,
1584
+ displayDigits: 0,
1585
+ medusaDigits: 0,
1586
+ symbolAliases: [],
1587
+ localeHint: null,
1588
+ commaDecimal: false
1589
+ },
1590
+ {
1591
+ code: "KPW",
1592
+ name: "North Korean Won",
1593
+ symbol: "KPW",
1594
+ narrowSymbol: "₩",
1595
+ symbolIsAmbiguous: true,
1596
+ numericCode: "408",
1597
+ status: "active",
1598
+ replacedBy: null,
1599
+ storageScale: 100,
1600
+ storageDigits: 2,
1601
+ displayDigits: 0,
1602
+ medusaDigits: 2,
1603
+ symbolAliases: [],
1604
+ localeHint: null,
1605
+ commaDecimal: false
1606
+ },
1607
+ {
1608
+ code: "KRW",
1609
+ name: "South Korean Won",
1610
+ symbol: "₩",
1611
+ narrowSymbol: "₩",
1612
+ symbolIsAmbiguous: true,
1613
+ numericCode: "410",
1614
+ status: "active",
1615
+ replacedBy: null,
1616
+ storageScale: 100,
1617
+ storageDigits: 0,
1618
+ displayDigits: 0,
1619
+ medusaDigits: 0,
1620
+ symbolAliases: ["₩"],
1621
+ localeHint: null,
1622
+ commaDecimal: false
1623
+ },
1624
+ {
1625
+ code: "KWD",
1626
+ name: "Kuwaiti Dinar",
1627
+ symbol: "KWD",
1628
+ narrowSymbol: "KWD",
1629
+ symbolIsAmbiguous: false,
1630
+ numericCode: "414",
1631
+ status: "active",
1632
+ replacedBy: null,
1633
+ storageScale: 1e3,
1634
+ storageDigits: 3,
1635
+ displayDigits: 3,
1636
+ medusaDigits: 3,
1637
+ symbolAliases: [],
1638
+ localeHint: null,
1639
+ commaDecimal: false
1640
+ },
1641
+ {
1642
+ code: "KYD",
1643
+ name: "Cayman Islands Dollar",
1644
+ symbol: "KYD",
1645
+ narrowSymbol: "$",
1646
+ symbolIsAmbiguous: true,
1647
+ numericCode: "136",
1648
+ status: "active",
1649
+ replacedBy: null,
1650
+ storageScale: 100,
1651
+ storageDigits: 2,
1652
+ displayDigits: 2,
1653
+ medusaDigits: 2,
1654
+ symbolAliases: [],
1655
+ localeHint: null,
1656
+ commaDecimal: false
1657
+ },
1658
+ {
1659
+ code: "KZT",
1660
+ name: "Kazakhstani Tenge",
1661
+ symbol: "KZT",
1662
+ narrowSymbol: "₸",
1663
+ symbolIsAmbiguous: false,
1664
+ numericCode: "398",
1665
+ status: "active",
1666
+ replacedBy: null,
1667
+ storageScale: 100,
1668
+ storageDigits: 2,
1669
+ displayDigits: 2,
1670
+ medusaDigits: 2,
1671
+ symbolAliases: [],
1672
+ localeHint: null,
1673
+ commaDecimal: false
1674
+ },
1675
+ {
1676
+ code: "LAK",
1677
+ name: "Laotian Kip",
1678
+ symbol: "LAK",
1679
+ narrowSymbol: "₭",
1680
+ symbolIsAmbiguous: false,
1681
+ numericCode: "418",
1682
+ status: "active",
1683
+ replacedBy: null,
1684
+ storageScale: 100,
1685
+ storageDigits: 2,
1686
+ displayDigits: 0,
1687
+ medusaDigits: 2,
1688
+ symbolAliases: [],
1689
+ localeHint: null,
1690
+ commaDecimal: false
1691
+ },
1692
+ {
1693
+ code: "LBP",
1694
+ name: "Lebanese Pound",
1695
+ symbol: "LBP",
1696
+ narrowSymbol: "L£",
1697
+ symbolIsAmbiguous: false,
1698
+ numericCode: "422",
1699
+ status: "active",
1700
+ replacedBy: null,
1701
+ storageScale: 100,
1702
+ storageDigits: 2,
1703
+ displayDigits: 0,
1704
+ medusaDigits: 0,
1705
+ symbolAliases: [],
1706
+ localeHint: null,
1707
+ commaDecimal: false
1708
+ },
1709
+ {
1710
+ code: "LKR",
1711
+ name: "Sri Lankan Rupee",
1712
+ symbol: "LKR",
1713
+ narrowSymbol: "Rs",
1714
+ symbolIsAmbiguous: true,
1715
+ numericCode: "144",
1716
+ status: "active",
1717
+ replacedBy: null,
1718
+ storageScale: 100,
1719
+ storageDigits: 2,
1720
+ displayDigits: 2,
1721
+ medusaDigits: 2,
1722
+ symbolAliases: ["Rs.", "Rs"],
1723
+ localeHint: null,
1724
+ commaDecimal: false
1725
+ },
1726
+ {
1727
+ code: "LRD",
1728
+ name: "Liberian Dollar",
1729
+ symbol: "LRD",
1730
+ narrowSymbol: "$",
1731
+ symbolIsAmbiguous: true,
1732
+ numericCode: "430",
1733
+ status: "active",
1734
+ replacedBy: null,
1735
+ storageScale: 100,
1736
+ storageDigits: 2,
1737
+ displayDigits: 2,
1738
+ medusaDigits: 2,
1739
+ symbolAliases: [],
1740
+ localeHint: null,
1741
+ commaDecimal: false
1742
+ },
1743
+ {
1744
+ code: "LSL",
1745
+ name: "Lesotho Loti",
1746
+ symbol: "LSL",
1747
+ narrowSymbol: "LSL",
1748
+ symbolIsAmbiguous: false,
1749
+ numericCode: "426",
1750
+ status: "active",
1751
+ replacedBy: null,
1752
+ storageScale: 100,
1753
+ storageDigits: 2,
1754
+ displayDigits: 2,
1755
+ medusaDigits: 2,
1756
+ symbolAliases: [],
1757
+ localeHint: null,
1758
+ commaDecimal: false
1759
+ },
1760
+ {
1761
+ code: "LTL",
1762
+ name: "Lithuanian Litas",
1763
+ symbol: "LTL",
1764
+ narrowSymbol: "Lt",
1765
+ symbolIsAmbiguous: false,
1766
+ numericCode: "440",
1767
+ status: "historic",
1768
+ replacedBy: "EUR",
1769
+ storageScale: 100,
1770
+ storageDigits: 2,
1771
+ displayDigits: 2,
1772
+ medusaDigits: 2,
1773
+ symbolAliases: [],
1774
+ localeHint: null,
1775
+ commaDecimal: false
1776
+ },
1777
+ {
1778
+ code: "LVL",
1779
+ name: "Latvian Lats",
1780
+ symbol: "LVL",
1781
+ narrowSymbol: "Ls",
1782
+ symbolIsAmbiguous: false,
1783
+ numericCode: null,
1784
+ status: "historic",
1785
+ replacedBy: "EUR",
1786
+ storageScale: 100,
1787
+ storageDigits: 2,
1788
+ displayDigits: 2,
1789
+ medusaDigits: 2,
1790
+ symbolAliases: [],
1791
+ localeHint: null,
1792
+ commaDecimal: false
1793
+ },
1794
+ {
1795
+ code: "LYD",
1796
+ name: "Libyan Dinar",
1797
+ symbol: "LYD",
1798
+ narrowSymbol: "LYD",
1799
+ symbolIsAmbiguous: false,
1800
+ numericCode: "434",
1801
+ status: "active",
1802
+ replacedBy: null,
1803
+ storageScale: 1e3,
1804
+ storageDigits: 3,
1805
+ displayDigits: 3,
1806
+ medusaDigits: 3,
1807
+ symbolAliases: [],
1808
+ localeHint: null,
1809
+ commaDecimal: false
1810
+ },
1811
+ {
1812
+ code: "MAD",
1813
+ name: "Moroccan Dirham",
1814
+ symbol: "MAD",
1815
+ narrowSymbol: "MAD",
1816
+ symbolIsAmbiguous: false,
1817
+ numericCode: "504",
1818
+ status: "active",
1819
+ replacedBy: null,
1820
+ storageScale: 100,
1821
+ storageDigits: 2,
1822
+ displayDigits: 2,
1823
+ medusaDigits: 2,
1824
+ symbolAliases: [],
1825
+ localeHint: null,
1826
+ commaDecimal: false
1827
+ },
1828
+ {
1829
+ code: "MDL",
1830
+ name: "Moldovan Leu",
1831
+ symbol: "MDL",
1832
+ narrowSymbol: "MDL",
1833
+ symbolIsAmbiguous: false,
1834
+ numericCode: "498",
1835
+ status: "active",
1836
+ replacedBy: null,
1837
+ storageScale: 100,
1838
+ storageDigits: 2,
1839
+ displayDigits: 2,
1840
+ medusaDigits: 2,
1841
+ symbolAliases: [],
1842
+ localeHint: null,
1843
+ commaDecimal: false
1844
+ },
1845
+ {
1846
+ code: "MGA",
1847
+ name: "Malagasy Ariary",
1848
+ symbol: "MGA",
1849
+ narrowSymbol: "Ar",
1850
+ symbolIsAmbiguous: false,
1851
+ numericCode: "969",
1852
+ status: "active",
1853
+ replacedBy: null,
1854
+ storageScale: 100,
1855
+ storageDigits: 0,
1856
+ displayDigits: 0,
1857
+ medusaDigits: 0,
1858
+ symbolAliases: [],
1859
+ localeHint: null,
1860
+ commaDecimal: false
1861
+ },
1862
+ {
1863
+ code: "MKD",
1864
+ name: "Macedonian Denar",
1865
+ symbol: "MKD",
1866
+ narrowSymbol: "MKD",
1867
+ symbolIsAmbiguous: false,
1868
+ numericCode: "807",
1869
+ status: "active",
1870
+ replacedBy: null,
1871
+ storageScale: 100,
1872
+ storageDigits: 2,
1873
+ displayDigits: 2,
1874
+ medusaDigits: 2,
1875
+ symbolAliases: [],
1876
+ localeHint: null,
1877
+ commaDecimal: false
1878
+ },
1879
+ {
1880
+ code: "MMK",
1881
+ name: "Myanmar Kyat",
1882
+ symbol: "MMK",
1883
+ narrowSymbol: "K",
1884
+ symbolIsAmbiguous: false,
1885
+ numericCode: "104",
1886
+ status: "active",
1887
+ replacedBy: null,
1888
+ storageScale: 100,
1889
+ storageDigits: 2,
1890
+ displayDigits: 0,
1891
+ medusaDigits: 0,
1892
+ symbolAliases: [],
1893
+ localeHint: null,
1894
+ commaDecimal: false
1895
+ },
1896
+ {
1897
+ code: "MNT",
1898
+ name: "Mongolian Tugrik",
1899
+ symbol: "MNT",
1900
+ narrowSymbol: "₮",
1901
+ symbolIsAmbiguous: false,
1902
+ numericCode: "496",
1903
+ status: "active",
1904
+ replacedBy: null,
1905
+ storageScale: 100,
1906
+ storageDigits: 2,
1907
+ displayDigits: 2,
1908
+ medusaDigits: 0,
1909
+ symbolAliases: [],
1910
+ localeHint: null,
1911
+ commaDecimal: false
1912
+ },
1913
+ {
1914
+ code: "MOP",
1915
+ name: "Macanese Pataca",
1916
+ symbol: "MOP",
1917
+ narrowSymbol: "MOP",
1918
+ symbolIsAmbiguous: false,
1919
+ numericCode: "446",
1920
+ status: "active",
1921
+ replacedBy: null,
1922
+ storageScale: 100,
1923
+ storageDigits: 2,
1924
+ displayDigits: 2,
1925
+ medusaDigits: 2,
1926
+ symbolAliases: [],
1927
+ localeHint: null,
1928
+ commaDecimal: false
1929
+ },
1930
+ {
1931
+ code: "MRO",
1932
+ name: "Mauritanian Ouguiya (1973–2017)",
1933
+ symbol: "MRO",
1934
+ narrowSymbol: "MRO",
1935
+ symbolIsAmbiguous: false,
1936
+ numericCode: "478",
1937
+ status: "historic",
1938
+ replacedBy: "MRU",
1939
+ storageScale: 100,
1940
+ storageDigits: 2,
1941
+ displayDigits: 2,
1942
+ medusaDigits: 2,
1943
+ symbolAliases: [],
1944
+ localeHint: null,
1945
+ commaDecimal: false
1946
+ },
1947
+ {
1948
+ code: "MRU",
1949
+ name: "Mauritanian Ouguiya",
1950
+ symbol: "MRU",
1951
+ narrowSymbol: "MRU",
1952
+ symbolIsAmbiguous: false,
1953
+ numericCode: "929",
1954
+ status: "active",
1955
+ replacedBy: null,
1956
+ storageScale: 100,
1957
+ storageDigits: 2,
1958
+ displayDigits: 2,
1959
+ medusaDigits: 2,
1960
+ symbolAliases: [],
1961
+ localeHint: null,
1962
+ commaDecimal: false
1963
+ },
1964
+ {
1965
+ code: "MUR",
1966
+ name: "Mauritian Rupee",
1967
+ symbol: "MUR",
1968
+ narrowSymbol: "Rs",
1969
+ symbolIsAmbiguous: true,
1970
+ numericCode: "480",
1971
+ status: "active",
1972
+ replacedBy: null,
1973
+ storageScale: 100,
1974
+ storageDigits: 2,
1975
+ displayDigits: 2,
1976
+ medusaDigits: 0,
1977
+ symbolAliases: [],
1978
+ localeHint: null,
1979
+ commaDecimal: false
1980
+ },
1981
+ {
1982
+ code: "MVR",
1983
+ name: "Maldivian Rufiyaa",
1984
+ symbol: "MVR",
1985
+ narrowSymbol: "MVR",
1986
+ symbolIsAmbiguous: false,
1987
+ numericCode: "462",
1988
+ status: "active",
1989
+ replacedBy: null,
1990
+ storageScale: 100,
1991
+ storageDigits: 2,
1992
+ displayDigits: 2,
1993
+ medusaDigits: 2,
1994
+ symbolAliases: [],
1995
+ localeHint: null,
1996
+ commaDecimal: false
1997
+ },
1998
+ {
1999
+ code: "MWK",
2000
+ name: "Malawian Kwacha",
2001
+ symbol: "MWK",
2002
+ narrowSymbol: "MWK",
2003
+ symbolIsAmbiguous: false,
2004
+ numericCode: "454",
2005
+ status: "active",
2006
+ replacedBy: null,
2007
+ storageScale: 100,
2008
+ storageDigits: 2,
2009
+ displayDigits: 2,
2010
+ medusaDigits: 2,
2011
+ symbolAliases: [],
2012
+ localeHint: null,
2013
+ commaDecimal: false
2014
+ },
2015
+ {
2016
+ code: "MXN",
2017
+ name: "Mexican Peso",
2018
+ symbol: "MX$",
2019
+ narrowSymbol: "$",
2020
+ symbolIsAmbiguous: true,
2021
+ numericCode: "484",
2022
+ status: "active",
2023
+ replacedBy: null,
2024
+ storageScale: 100,
2025
+ storageDigits: 2,
2026
+ displayDigits: 2,
2027
+ medusaDigits: 2,
2028
+ symbolAliases: [
2029
+ "$",
2030
+ "MX$",
2031
+ "Mex$"
2032
+ ],
2033
+ localeHint: null,
2034
+ commaDecimal: false
2035
+ },
2036
+ {
2037
+ code: "MYR",
2038
+ name: "Malaysian Ringgit",
2039
+ symbol: "MYR",
2040
+ narrowSymbol: "RM",
2041
+ symbolIsAmbiguous: false,
2042
+ numericCode: "458",
2043
+ status: "active",
2044
+ replacedBy: null,
2045
+ storageScale: 100,
2046
+ storageDigits: 2,
2047
+ displayDigits: 2,
2048
+ medusaDigits: 2,
2049
+ symbolAliases: ["RM"],
2050
+ localeHint: null,
2051
+ commaDecimal: false
2052
+ },
2053
+ {
2054
+ code: "MZN",
2055
+ name: "Mozambican Metical",
2056
+ symbol: "MZN",
2057
+ narrowSymbol: "MZN",
2058
+ symbolIsAmbiguous: false,
2059
+ numericCode: "943",
2060
+ status: "active",
2061
+ replacedBy: null,
2062
+ storageScale: 100,
2063
+ storageDigits: 2,
2064
+ displayDigits: 2,
2065
+ medusaDigits: 2,
2066
+ symbolAliases: [],
2067
+ localeHint: null,
2068
+ commaDecimal: false
2069
+ },
2070
+ {
2071
+ code: "NAD",
2072
+ name: "Namibian Dollar",
2073
+ symbol: "NAD",
2074
+ narrowSymbol: "$",
2075
+ symbolIsAmbiguous: true,
2076
+ numericCode: "516",
2077
+ status: "active",
2078
+ replacedBy: null,
2079
+ storageScale: 100,
2080
+ storageDigits: 2,
2081
+ displayDigits: 2,
2082
+ medusaDigits: 2,
2083
+ symbolAliases: [],
2084
+ localeHint: null,
2085
+ commaDecimal: false
2086
+ },
2087
+ {
2088
+ code: "NGN",
2089
+ name: "Nigerian Naira",
2090
+ symbol: "NGN",
2091
+ narrowSymbol: "₦",
2092
+ symbolIsAmbiguous: false,
2093
+ numericCode: "566",
2094
+ status: "active",
2095
+ replacedBy: null,
2096
+ storageScale: 100,
2097
+ storageDigits: 2,
2098
+ displayDigits: 2,
2099
+ medusaDigits: 2,
2100
+ symbolAliases: ["₦"],
2101
+ localeHint: null,
2102
+ commaDecimal: false
2103
+ },
2104
+ {
2105
+ code: "NIO",
2106
+ name: "Nicaraguan Córdoba",
2107
+ symbol: "NIO",
2108
+ narrowSymbol: "C$",
2109
+ symbolIsAmbiguous: false,
2110
+ numericCode: "558",
2111
+ status: "active",
2112
+ replacedBy: null,
2113
+ storageScale: 100,
2114
+ storageDigits: 2,
2115
+ displayDigits: 2,
2116
+ medusaDigits: 2,
2117
+ symbolAliases: [],
2118
+ localeHint: null,
2119
+ commaDecimal: false
2120
+ },
2121
+ {
2122
+ code: "NOK",
2123
+ name: "Norwegian Krone",
2124
+ symbol: "NOK",
2125
+ narrowSymbol: "kr",
2126
+ symbolIsAmbiguous: true,
2127
+ numericCode: "578",
2128
+ status: "active",
2129
+ replacedBy: null,
2130
+ storageScale: 100,
2131
+ storageDigits: 2,
2132
+ displayDigits: 2,
2133
+ medusaDigits: 2,
2134
+ symbolAliases: ["kr"],
2135
+ localeHint: "nb-NO",
2136
+ commaDecimal: false
2137
+ },
2138
+ {
2139
+ code: "NPR",
2140
+ name: "Nepalese Rupee",
2141
+ symbol: "NPR",
2142
+ narrowSymbol: "Rs",
2143
+ symbolIsAmbiguous: true,
2144
+ numericCode: "524",
2145
+ status: "active",
2146
+ replacedBy: null,
2147
+ storageScale: 100,
2148
+ storageDigits: 2,
2149
+ displayDigits: 2,
2150
+ medusaDigits: 2,
2151
+ symbolAliases: [],
2152
+ localeHint: null,
2153
+ commaDecimal: false
2154
+ },
2155
+ {
2156
+ code: "NZD",
2157
+ name: "New Zealand Dollar",
2158
+ symbol: "NZ$",
2159
+ narrowSymbol: "$",
2160
+ symbolIsAmbiguous: true,
2161
+ numericCode: "554",
2162
+ status: "active",
2163
+ replacedBy: null,
2164
+ storageScale: 100,
2165
+ storageDigits: 2,
2166
+ displayDigits: 2,
2167
+ medusaDigits: 2,
2168
+ symbolAliases: ["$", "NZ$"],
2169
+ localeHint: null,
2170
+ commaDecimal: false
2171
+ },
2172
+ {
2173
+ code: "OMR",
2174
+ name: "Omani Rial",
2175
+ symbol: "OMR",
2176
+ narrowSymbol: "OMR",
2177
+ symbolIsAmbiguous: false,
2178
+ numericCode: "512",
2179
+ status: "active",
2180
+ replacedBy: null,
2181
+ storageScale: 1e3,
2182
+ storageDigits: 3,
2183
+ displayDigits: 3,
2184
+ medusaDigits: 3,
2185
+ symbolAliases: [],
2186
+ localeHint: null,
2187
+ commaDecimal: false
2188
+ },
2189
+ {
2190
+ code: "PAB",
2191
+ name: "Panamanian Balboa",
2192
+ symbol: "PAB",
2193
+ narrowSymbol: "PAB",
2194
+ symbolIsAmbiguous: false,
2195
+ numericCode: "590",
2196
+ status: "active",
2197
+ replacedBy: null,
2198
+ storageScale: 100,
2199
+ storageDigits: 2,
2200
+ displayDigits: 2,
2201
+ medusaDigits: 2,
2202
+ symbolAliases: [],
2203
+ localeHint: null,
2204
+ commaDecimal: false
2205
+ },
2206
+ {
2207
+ code: "PEN",
2208
+ name: "Peruvian Sol",
2209
+ symbol: "PEN",
2210
+ narrowSymbol: "PEN",
2211
+ symbolIsAmbiguous: false,
2212
+ numericCode: "604",
2213
+ status: "active",
2214
+ replacedBy: null,
2215
+ storageScale: 100,
2216
+ storageDigits: 2,
2217
+ displayDigits: 2,
2218
+ medusaDigits: 2,
2219
+ symbolAliases: ["S/", "S/."],
2220
+ localeHint: null,
2221
+ commaDecimal: false
2222
+ },
2223
+ {
2224
+ code: "PGK",
2225
+ name: "Papua New Guinean Kina",
2226
+ symbol: "PGK",
2227
+ narrowSymbol: "PGK",
2228
+ symbolIsAmbiguous: false,
2229
+ numericCode: "598",
2230
+ status: "active",
2231
+ replacedBy: null,
2232
+ storageScale: 100,
2233
+ storageDigits: 2,
2234
+ displayDigits: 2,
2235
+ medusaDigits: 2,
2236
+ symbolAliases: [],
2237
+ localeHint: null,
2238
+ commaDecimal: false
2239
+ },
2240
+ {
2241
+ code: "PHP",
2242
+ name: "Philippine Peso",
2243
+ symbol: "₱",
2244
+ narrowSymbol: "₱",
2245
+ symbolIsAmbiguous: false,
2246
+ numericCode: "608",
2247
+ status: "active",
2248
+ replacedBy: null,
2249
+ storageScale: 100,
2250
+ storageDigits: 2,
2251
+ displayDigits: 2,
2252
+ medusaDigits: 2,
2253
+ symbolAliases: ["₱"],
2254
+ localeHint: null,
2255
+ commaDecimal: false
2256
+ },
2257
+ {
2258
+ code: "PKR",
2259
+ name: "Pakistani Rupee",
2260
+ symbol: "PKR",
2261
+ narrowSymbol: "Rs",
2262
+ symbolIsAmbiguous: true,
2263
+ numericCode: "586",
2264
+ status: "active",
2265
+ replacedBy: null,
2266
+ storageScale: 100,
2267
+ storageDigits: 2,
2268
+ displayDigits: 0,
2269
+ medusaDigits: 0,
2270
+ symbolAliases: ["Rs.", "Rs"],
2271
+ localeHint: null,
2272
+ commaDecimal: false
2273
+ },
2274
+ {
2275
+ code: "PLN",
2276
+ name: "Polish Zloty",
2277
+ symbol: "PLN",
2278
+ narrowSymbol: "zł",
2279
+ symbolIsAmbiguous: false,
2280
+ numericCode: "985",
2281
+ status: "active",
2282
+ replacedBy: null,
2283
+ storageScale: 100,
2284
+ storageDigits: 2,
2285
+ displayDigits: 2,
2286
+ medusaDigits: 2,
2287
+ symbolAliases: ["zł"],
2288
+ localeHint: "pl-PL",
2289
+ commaDecimal: false
2290
+ },
2291
+ {
2292
+ code: "PYG",
2293
+ name: "Paraguayan Guarani",
2294
+ symbol: "PYG",
2295
+ narrowSymbol: "₲",
2296
+ symbolIsAmbiguous: false,
2297
+ numericCode: "600",
2298
+ status: "active",
2299
+ replacedBy: null,
2300
+ storageScale: 100,
2301
+ storageDigits: 0,
2302
+ displayDigits: 0,
2303
+ medusaDigits: 0,
2304
+ symbolAliases: [],
2305
+ localeHint: null,
2306
+ commaDecimal: false
2307
+ },
2308
+ {
2309
+ code: "QAR",
2310
+ name: "Qatari Riyal",
2311
+ symbol: "QAR",
2312
+ narrowSymbol: "QAR",
2313
+ symbolIsAmbiguous: false,
2314
+ numericCode: "634",
2315
+ status: "active",
2316
+ replacedBy: null,
2317
+ storageScale: 100,
2318
+ storageDigits: 2,
2319
+ displayDigits: 2,
2320
+ medusaDigits: 2,
2321
+ symbolAliases: [],
2322
+ localeHint: null,
2323
+ commaDecimal: false
2324
+ },
2325
+ {
2326
+ code: "RON",
2327
+ name: "Romanian Leu",
2328
+ symbol: "RON",
2329
+ narrowSymbol: "lei",
2330
+ symbolIsAmbiguous: false,
2331
+ numericCode: "946",
2332
+ status: "active",
2333
+ replacedBy: null,
2334
+ storageScale: 100,
2335
+ storageDigits: 2,
2336
+ displayDigits: 2,
2337
+ medusaDigits: 2,
2338
+ symbolAliases: ["lei", "Lei"],
2339
+ localeHint: "ro-RO",
2340
+ commaDecimal: false
2341
+ },
2342
+ {
2343
+ code: "RSD",
2344
+ name: "Serbian Dinar",
2345
+ symbol: "RSD",
2346
+ narrowSymbol: "RSD",
2347
+ symbolIsAmbiguous: false,
2348
+ numericCode: "941",
2349
+ status: "active",
2350
+ replacedBy: null,
2351
+ storageScale: 100,
2352
+ storageDigits: 2,
2353
+ displayDigits: 2,
2354
+ medusaDigits: 0,
2355
+ symbolAliases: [],
2356
+ localeHint: null,
2357
+ commaDecimal: false
2358
+ },
2359
+ {
2360
+ code: "RUB",
2361
+ name: "Russian Ruble",
2362
+ symbol: "RUB",
2363
+ narrowSymbol: "₽",
2364
+ symbolIsAmbiguous: false,
2365
+ numericCode: "643",
2366
+ status: "active",
2367
+ replacedBy: null,
2368
+ storageScale: 100,
2369
+ storageDigits: 2,
2370
+ displayDigits: 2,
2371
+ medusaDigits: 2,
2372
+ symbolAliases: [
2373
+ "₽",
2374
+ "руб.",
2375
+ "руб"
2376
+ ],
2377
+ localeHint: "ru-RU",
2378
+ commaDecimal: false
2379
+ },
2380
+ {
2381
+ code: "RWF",
2382
+ name: "Rwandan Franc",
2383
+ symbol: "RWF",
2384
+ narrowSymbol: "RF",
2385
+ symbolIsAmbiguous: false,
2386
+ numericCode: "646",
2387
+ status: "active",
2388
+ replacedBy: null,
2389
+ storageScale: 100,
2390
+ storageDigits: 0,
2391
+ displayDigits: 0,
2392
+ medusaDigits: 0,
2393
+ symbolAliases: [],
2394
+ localeHint: null,
2395
+ commaDecimal: false
2396
+ },
2397
+ {
2398
+ code: "SAR",
2399
+ name: "Saudi Riyal",
2400
+ symbol: "SAR",
2401
+ narrowSymbol: "SAR",
2402
+ symbolIsAmbiguous: false,
2403
+ numericCode: "682",
2404
+ status: "active",
2405
+ replacedBy: null,
2406
+ storageScale: 100,
2407
+ storageDigits: 2,
2408
+ displayDigits: 2,
2409
+ medusaDigits: 2,
2410
+ symbolAliases: [
2411
+ "SAR",
2412
+ "﷼",
2413
+ "SR"
2414
+ ],
2415
+ localeHint: null,
2416
+ commaDecimal: false
2417
+ },
2418
+ {
2419
+ code: "SBD",
2420
+ name: "Solomon Islands Dollar",
2421
+ symbol: "SBD",
2422
+ narrowSymbol: "$",
2423
+ symbolIsAmbiguous: true,
2424
+ numericCode: "090",
2425
+ status: "active",
2426
+ replacedBy: null,
2427
+ storageScale: 100,
2428
+ storageDigits: 2,
2429
+ displayDigits: 2,
2430
+ medusaDigits: 2,
2431
+ symbolAliases: [],
2432
+ localeHint: null,
2433
+ commaDecimal: false
2434
+ },
2435
+ {
2436
+ code: "SCR",
2437
+ name: "Seychellois Rupee",
2438
+ symbol: "SCR",
2439
+ narrowSymbol: "SCR",
2440
+ symbolIsAmbiguous: false,
2441
+ numericCode: "690",
2442
+ status: "active",
2443
+ replacedBy: null,
2444
+ storageScale: 100,
2445
+ storageDigits: 2,
2446
+ displayDigits: 2,
2447
+ medusaDigits: 2,
2448
+ symbolAliases: [],
2449
+ localeHint: null,
2450
+ commaDecimal: false
2451
+ },
2452
+ {
2453
+ code: "SDG",
2454
+ name: "Sudanese Pound",
2455
+ symbol: "SDG",
2456
+ narrowSymbol: "SDG",
2457
+ symbolIsAmbiguous: false,
2458
+ numericCode: "938",
2459
+ status: "active",
2460
+ replacedBy: null,
2461
+ storageScale: 100,
2462
+ storageDigits: 2,
2463
+ displayDigits: 2,
2464
+ medusaDigits: 2,
2465
+ symbolAliases: [],
2466
+ localeHint: null,
2467
+ commaDecimal: false
2468
+ },
2469
+ {
2470
+ code: "SEK",
2471
+ name: "Swedish Krona",
2472
+ symbol: "SEK",
2473
+ narrowSymbol: "kr",
2474
+ symbolIsAmbiguous: true,
2475
+ numericCode: "752",
2476
+ status: "active",
2477
+ replacedBy: null,
2478
+ storageScale: 100,
2479
+ storageDigits: 2,
2480
+ displayDigits: 2,
2481
+ medusaDigits: 2,
2482
+ symbolAliases: ["kr"],
2483
+ localeHint: "sv-SE",
2484
+ commaDecimal: false
2485
+ },
2486
+ {
2487
+ code: "SGD",
2488
+ name: "Singapore Dollar",
2489
+ symbol: "SGD",
2490
+ narrowSymbol: "$",
2491
+ symbolIsAmbiguous: true,
2492
+ numericCode: "702",
2493
+ status: "active",
2494
+ replacedBy: null,
2495
+ storageScale: 100,
2496
+ storageDigits: 2,
2497
+ displayDigits: 2,
2498
+ medusaDigits: 2,
2499
+ symbolAliases: ["$", "S$"],
2500
+ localeHint: null,
2501
+ commaDecimal: false
2502
+ },
2503
+ {
2504
+ code: "SHP",
2505
+ name: "St. Helena Pound",
2506
+ symbol: "SHP",
2507
+ narrowSymbol: "£",
2508
+ symbolIsAmbiguous: true,
2509
+ numericCode: "654",
2510
+ status: "active",
2511
+ replacedBy: null,
2512
+ storageScale: 100,
2513
+ storageDigits: 2,
2514
+ displayDigits: 2,
2515
+ medusaDigits: 2,
2516
+ symbolAliases: [],
2517
+ localeHint: null,
2518
+ commaDecimal: false
2519
+ },
2520
+ {
2521
+ code: "SLE",
2522
+ name: "Sierra Leonean Leone",
2523
+ symbol: "SLE",
2524
+ narrowSymbol: "SLE",
2525
+ symbolIsAmbiguous: false,
2526
+ numericCode: null,
2527
+ status: "active",
2528
+ replacedBy: null,
2529
+ storageScale: 100,
2530
+ storageDigits: 2,
2531
+ displayDigits: 2,
2532
+ medusaDigits: 2,
2533
+ symbolAliases: [],
2534
+ localeHint: null,
2535
+ commaDecimal: false
2536
+ },
2537
+ {
2538
+ code: "SLL",
2539
+ name: "Sierra Leonean Leone (1964–2022)",
2540
+ symbol: "SLL",
2541
+ narrowSymbol: "SLL",
2542
+ symbolIsAmbiguous: false,
2543
+ numericCode: "694",
2544
+ status: "historic",
2545
+ replacedBy: "SLE",
2546
+ storageScale: 100,
2547
+ storageDigits: 2,
2548
+ displayDigits: 2,
2549
+ medusaDigits: 2,
2550
+ symbolAliases: [],
2551
+ localeHint: null,
2552
+ commaDecimal: false
2553
+ },
2554
+ {
2555
+ code: "SOS",
2556
+ name: "Somali Shilling",
2557
+ symbol: "SOS",
2558
+ narrowSymbol: "SOS",
2559
+ symbolIsAmbiguous: false,
2560
+ numericCode: "706",
2561
+ status: "active",
2562
+ replacedBy: null,
2563
+ storageScale: 100,
2564
+ storageDigits: 2,
2565
+ displayDigits: 0,
2566
+ medusaDigits: 0,
2567
+ symbolAliases: [],
2568
+ localeHint: null,
2569
+ commaDecimal: false
2570
+ },
2571
+ {
2572
+ code: "SRD",
2573
+ name: "Surinamese Dollar",
2574
+ symbol: "SRD",
2575
+ narrowSymbol: "$",
2576
+ symbolIsAmbiguous: true,
2577
+ numericCode: "968",
2578
+ status: "active",
2579
+ replacedBy: null,
2580
+ storageScale: 100,
2581
+ storageDigits: 2,
2582
+ displayDigits: 2,
2583
+ medusaDigits: 2,
2584
+ symbolAliases: [],
2585
+ localeHint: null,
2586
+ commaDecimal: false
2587
+ },
2588
+ {
2589
+ code: "SSP",
2590
+ name: "South Sudanese Pound",
2591
+ symbol: "SSP",
2592
+ narrowSymbol: "£",
2593
+ symbolIsAmbiguous: true,
2594
+ numericCode: "728",
2595
+ status: "active",
2596
+ replacedBy: null,
2597
+ storageScale: 100,
2598
+ storageDigits: 2,
2599
+ displayDigits: 2,
2600
+ medusaDigits: 2,
2601
+ symbolAliases: [],
2602
+ localeHint: null,
2603
+ commaDecimal: false
2604
+ },
2605
+ {
2606
+ code: "STD",
2607
+ name: "São Tomé & Príncipe Dobra (1977–2017)",
2608
+ symbol: "STD",
2609
+ narrowSymbol: "STD",
2610
+ symbolIsAmbiguous: false,
2611
+ numericCode: "678",
2612
+ status: "historic",
2613
+ replacedBy: "STN",
2614
+ storageScale: 100,
2615
+ storageDigits: 2,
2616
+ displayDigits: 2,
2617
+ medusaDigits: 2,
2618
+ symbolAliases: [],
2619
+ localeHint: null,
2620
+ commaDecimal: false
2621
+ },
2622
+ {
2623
+ code: "STN",
2624
+ name: "São Tomé & Príncipe Dobra",
2625
+ symbol: "STN",
2626
+ narrowSymbol: "Db",
2627
+ symbolIsAmbiguous: false,
2628
+ numericCode: "930",
2629
+ status: "active",
2630
+ replacedBy: null,
2631
+ storageScale: 100,
2632
+ storageDigits: 2,
2633
+ displayDigits: 2,
2634
+ medusaDigits: 2,
2635
+ symbolAliases: [],
2636
+ localeHint: null,
2637
+ commaDecimal: false
2638
+ },
2639
+ {
2640
+ code: "SVC",
2641
+ name: "Salvadoran Colón",
2642
+ symbol: "SVC",
2643
+ narrowSymbol: "SVC",
2644
+ symbolIsAmbiguous: false,
2645
+ numericCode: null,
2646
+ status: "active",
2647
+ replacedBy: null,
2648
+ storageScale: 100,
2649
+ storageDigits: 2,
2650
+ displayDigits: 2,
2651
+ medusaDigits: 2,
2652
+ symbolAliases: [],
2653
+ localeHint: null,
2654
+ commaDecimal: false
2655
+ },
2656
+ {
2657
+ code: "SYP",
2658
+ name: "Syrian Pound",
2659
+ symbol: "SYP",
2660
+ narrowSymbol: "£",
2661
+ symbolIsAmbiguous: true,
2662
+ numericCode: "760",
2663
+ status: "active",
2664
+ replacedBy: null,
2665
+ storageScale: 100,
2666
+ storageDigits: 2,
2667
+ displayDigits: 0,
2668
+ medusaDigits: 0,
2669
+ symbolAliases: [],
2670
+ localeHint: null,
2671
+ commaDecimal: false
2672
+ },
2673
+ {
2674
+ code: "SZL",
2675
+ name: "Swazi Lilangeni",
2676
+ symbol: "SZL",
2677
+ narrowSymbol: "SZL",
2678
+ symbolIsAmbiguous: false,
2679
+ numericCode: "748",
2680
+ status: "active",
2681
+ replacedBy: null,
2682
+ storageScale: 100,
2683
+ storageDigits: 2,
2684
+ displayDigits: 2,
2685
+ medusaDigits: 2,
2686
+ symbolAliases: [],
2687
+ localeHint: null,
2688
+ commaDecimal: false
2689
+ },
2690
+ {
2691
+ code: "THB",
2692
+ name: "Thai Baht",
2693
+ symbol: "THB",
2694
+ narrowSymbol: "฿",
2695
+ symbolIsAmbiguous: false,
2696
+ numericCode: "764",
2697
+ status: "active",
2698
+ replacedBy: null,
2699
+ storageScale: 100,
2700
+ storageDigits: 2,
2701
+ displayDigits: 2,
2702
+ medusaDigits: 2,
2703
+ symbolAliases: ["฿"],
2704
+ localeHint: null,
2705
+ commaDecimal: false
2706
+ },
2707
+ {
2708
+ code: "TJS",
2709
+ name: "Tajikistani Somoni",
2710
+ symbol: "TJS",
2711
+ narrowSymbol: "TJS",
2712
+ symbolIsAmbiguous: false,
2713
+ numericCode: "972",
2714
+ status: "active",
2715
+ replacedBy: null,
2716
+ storageScale: 100,
2717
+ storageDigits: 2,
2718
+ displayDigits: 2,
2719
+ medusaDigits: 2,
2720
+ symbolAliases: [],
2721
+ localeHint: null,
2722
+ commaDecimal: false
2723
+ },
2724
+ {
2725
+ code: "TMT",
2726
+ name: "Turkmenistani Manat",
2727
+ symbol: "TMT",
2728
+ narrowSymbol: "TMT",
2729
+ symbolIsAmbiguous: false,
2730
+ numericCode: "934",
2731
+ status: "active",
2732
+ replacedBy: null,
2733
+ storageScale: 100,
2734
+ storageDigits: 2,
2735
+ displayDigits: 2,
2736
+ medusaDigits: 2,
2737
+ symbolAliases: [],
2738
+ localeHint: null,
2739
+ commaDecimal: false
2740
+ },
2741
+ {
2742
+ code: "TND",
2743
+ name: "Tunisian Dinar",
2744
+ symbol: "TND",
2745
+ narrowSymbol: "TND",
2746
+ symbolIsAmbiguous: false,
2747
+ numericCode: "788",
2748
+ status: "active",
2749
+ replacedBy: null,
2750
+ storageScale: 1e3,
2751
+ storageDigits: 3,
2752
+ displayDigits: 3,
2753
+ medusaDigits: 3,
2754
+ symbolAliases: [],
2755
+ localeHint: null,
2756
+ commaDecimal: true
2757
+ },
2758
+ {
2759
+ code: "TOP",
2760
+ name: "Tongan Paʻanga",
2761
+ symbol: "TOP",
2762
+ narrowSymbol: "T$",
2763
+ symbolIsAmbiguous: false,
2764
+ numericCode: "776",
2765
+ status: "active",
2766
+ replacedBy: null,
2767
+ storageScale: 100,
2768
+ storageDigits: 2,
2769
+ displayDigits: 2,
2770
+ medusaDigits: 2,
2771
+ symbolAliases: [],
2772
+ localeHint: null,
2773
+ commaDecimal: false
2774
+ },
2775
+ {
2776
+ code: "TRY",
2777
+ name: "Turkish Lira",
2778
+ symbol: "TRY",
2779
+ narrowSymbol: "₺",
2780
+ symbolIsAmbiguous: false,
2781
+ numericCode: "949",
2782
+ status: "active",
2783
+ replacedBy: null,
2784
+ storageScale: 100,
2785
+ storageDigits: 2,
2786
+ displayDigits: 2,
2787
+ medusaDigits: 2,
2788
+ symbolAliases: ["₺", "TL"],
2789
+ localeHint: "tr-TR",
2790
+ commaDecimal: false
2791
+ },
2792
+ {
2793
+ code: "TTD",
2794
+ name: "Trinidad & Tobago Dollar",
2795
+ symbol: "TTD",
2796
+ narrowSymbol: "$",
2797
+ symbolIsAmbiguous: true,
2798
+ numericCode: "780",
2799
+ status: "active",
2800
+ replacedBy: null,
2801
+ storageScale: 100,
2802
+ storageDigits: 2,
2803
+ displayDigits: 2,
2804
+ medusaDigits: 2,
2805
+ symbolAliases: [],
2806
+ localeHint: null,
2807
+ commaDecimal: false
2808
+ },
2809
+ {
2810
+ code: "TWD",
2811
+ name: "New Taiwan Dollar",
2812
+ symbol: "NT$",
2813
+ narrowSymbol: "$",
2814
+ symbolIsAmbiguous: true,
2815
+ numericCode: "901",
2816
+ status: "active",
2817
+ replacedBy: null,
2818
+ storageScale: 100,
2819
+ storageDigits: 2,
2820
+ displayDigits: 2,
2821
+ medusaDigits: 2,
2822
+ symbolAliases: ["NT$", "$"],
2823
+ localeHint: null,
2824
+ commaDecimal: false
2825
+ },
2826
+ {
2827
+ code: "TZS",
2828
+ name: "Tanzanian Shilling",
2829
+ symbol: "TZS",
2830
+ narrowSymbol: "TZS",
2831
+ symbolIsAmbiguous: false,
2832
+ numericCode: "834",
2833
+ status: "active",
2834
+ replacedBy: null,
2835
+ storageScale: 100,
2836
+ storageDigits: 2,
2837
+ displayDigits: 2,
2838
+ medusaDigits: 0,
2839
+ symbolAliases: [],
2840
+ localeHint: null,
2841
+ commaDecimal: false
2842
+ },
2843
+ {
2844
+ code: "UAH",
2845
+ name: "Ukrainian Hryvnia",
2846
+ symbol: "UAH",
2847
+ narrowSymbol: "₴",
2848
+ symbolIsAmbiguous: false,
2849
+ numericCode: "980",
2850
+ status: "active",
2851
+ replacedBy: null,
2852
+ storageScale: 100,
2853
+ storageDigits: 2,
2854
+ displayDigits: 2,
2855
+ medusaDigits: 2,
2856
+ symbolAliases: ["₴", "грн"],
2857
+ localeHint: null,
2858
+ commaDecimal: false
2859
+ },
2860
+ {
2861
+ code: "UGX",
2862
+ name: "Ugandan Shilling",
2863
+ symbol: "UGX",
2864
+ narrowSymbol: "UGX",
2865
+ symbolIsAmbiguous: false,
2866
+ numericCode: "800",
2867
+ status: "active",
2868
+ replacedBy: null,
2869
+ storageScale: 100,
2870
+ storageDigits: 0,
2871
+ displayDigits: 0,
2872
+ medusaDigits: 0,
2873
+ symbolAliases: [],
2874
+ localeHint: null,
2875
+ commaDecimal: false
2876
+ },
2877
+ {
2878
+ code: "USD",
2879
+ name: "US Dollar",
2880
+ symbol: "$",
2881
+ narrowSymbol: "$",
2882
+ symbolIsAmbiguous: true,
2883
+ numericCode: "840",
2884
+ status: "active",
2885
+ replacedBy: null,
2886
+ storageScale: 100,
2887
+ storageDigits: 2,
2888
+ displayDigits: 2,
2889
+ medusaDigits: 2,
2890
+ symbolAliases: ["$", "US$"],
2891
+ localeHint: null,
2892
+ commaDecimal: false
2893
+ },
2894
+ {
2895
+ code: "UYU",
2896
+ name: "Uruguayan Peso",
2897
+ symbol: "UYU",
2898
+ narrowSymbol: "$",
2899
+ symbolIsAmbiguous: true,
2900
+ numericCode: "858",
2901
+ status: "active",
2902
+ replacedBy: null,
2903
+ storageScale: 100,
2904
+ storageDigits: 2,
2905
+ displayDigits: 2,
2906
+ medusaDigits: 2,
2907
+ symbolAliases: [],
2908
+ localeHint: null,
2909
+ commaDecimal: false
2910
+ },
2911
+ {
2912
+ code: "UZS",
2913
+ name: "Uzbekistani Som",
2914
+ symbol: "UZS",
2915
+ narrowSymbol: "UZS",
2916
+ symbolIsAmbiguous: false,
2917
+ numericCode: "860",
2918
+ status: "active",
2919
+ replacedBy: null,
2920
+ storageScale: 100,
2921
+ storageDigits: 2,
2922
+ displayDigits: 2,
2923
+ medusaDigits: 0,
2924
+ symbolAliases: [],
2925
+ localeHint: null,
2926
+ commaDecimal: false
2927
+ },
2928
+ {
2929
+ code: "VED",
2930
+ name: "Bolívar Soberano",
2931
+ symbol: "VED",
2932
+ narrowSymbol: "VED",
2933
+ symbolIsAmbiguous: false,
2934
+ numericCode: "926",
2935
+ status: "active",
2936
+ replacedBy: null,
2937
+ storageScale: 100,
2938
+ storageDigits: 2,
2939
+ displayDigits: 2,
2940
+ medusaDigits: 2,
2941
+ symbolAliases: [],
2942
+ localeHint: null,
2943
+ commaDecimal: false
2944
+ },
2945
+ {
2946
+ code: "VEF",
2947
+ name: "Venezuelan Bolívar (2008–2018)",
2948
+ symbol: "VEF",
2949
+ narrowSymbol: "Bs",
2950
+ symbolIsAmbiguous: true,
2951
+ numericCode: "937",
2952
+ status: "historic",
2953
+ replacedBy: "VES",
2954
+ storageScale: 100,
2955
+ storageDigits: 2,
2956
+ displayDigits: 2,
2957
+ medusaDigits: 2,
2958
+ symbolAliases: [],
2959
+ localeHint: null,
2960
+ commaDecimal: false
2961
+ },
2962
+ {
2963
+ code: "VES",
2964
+ name: "Venezuelan Bolívar",
2965
+ symbol: "VES",
2966
+ narrowSymbol: "VES",
2967
+ symbolIsAmbiguous: false,
2968
+ numericCode: "928",
2969
+ status: "active",
2970
+ replacedBy: null,
2971
+ storageScale: 100,
2972
+ storageDigits: 2,
2973
+ displayDigits: 2,
2974
+ medusaDigits: 2,
2975
+ symbolAliases: [],
2976
+ localeHint: null,
2977
+ commaDecimal: false
2978
+ },
2979
+ {
2980
+ code: "VND",
2981
+ name: "Vietnamese Dong",
2982
+ symbol: "₫",
2983
+ narrowSymbol: "₫",
2984
+ symbolIsAmbiguous: false,
2985
+ numericCode: "704",
2986
+ status: "active",
2987
+ replacedBy: null,
2988
+ storageScale: 100,
2989
+ storageDigits: 0,
2990
+ displayDigits: 0,
2991
+ medusaDigits: 0,
2992
+ symbolAliases: ["₫", "đ"],
2993
+ localeHint: null,
2994
+ commaDecimal: false
2995
+ },
2996
+ {
2997
+ code: "VUV",
2998
+ name: "Vanuatu Vatu",
2999
+ symbol: "VUV",
3000
+ narrowSymbol: "VUV",
3001
+ symbolIsAmbiguous: false,
3002
+ numericCode: "548",
3003
+ status: "active",
3004
+ replacedBy: null,
3005
+ storageScale: 100,
3006
+ storageDigits: 0,
3007
+ displayDigits: 0,
3008
+ medusaDigits: 2,
3009
+ symbolAliases: [],
3010
+ localeHint: null,
3011
+ commaDecimal: false
3012
+ },
3013
+ {
3014
+ code: "WST",
3015
+ name: "Samoan Tala",
3016
+ symbol: "WST",
3017
+ narrowSymbol: "WST",
3018
+ symbolIsAmbiguous: false,
3019
+ numericCode: "882",
3020
+ status: "active",
3021
+ replacedBy: null,
3022
+ storageScale: 100,
3023
+ storageDigits: 2,
3024
+ displayDigits: 2,
3025
+ medusaDigits: 2,
3026
+ symbolAliases: [],
3027
+ localeHint: null,
3028
+ commaDecimal: false
3029
+ },
3030
+ {
3031
+ code: "XAF",
3032
+ name: "Central African CFA Franc",
3033
+ symbol: "FCFA",
3034
+ narrowSymbol: "FCFA",
3035
+ symbolIsAmbiguous: false,
3036
+ numericCode: "950",
3037
+ status: "active",
3038
+ replacedBy: null,
3039
+ storageScale: 100,
3040
+ storageDigits: 0,
3041
+ displayDigits: 0,
3042
+ medusaDigits: 0,
3043
+ symbolAliases: [],
3044
+ localeHint: null,
3045
+ commaDecimal: false
3046
+ },
3047
+ {
3048
+ code: "XCD",
3049
+ name: "East Caribbean Dollar",
3050
+ symbol: "EC$",
3051
+ narrowSymbol: "$",
3052
+ symbolIsAmbiguous: true,
3053
+ numericCode: "951",
3054
+ status: "active",
3055
+ replacedBy: null,
3056
+ storageScale: 100,
3057
+ storageDigits: 2,
3058
+ displayDigits: 2,
3059
+ medusaDigits: 2,
3060
+ symbolAliases: [],
3061
+ localeHint: null,
3062
+ commaDecimal: false
3063
+ },
3064
+ {
3065
+ code: "XCG",
3066
+ name: "Caribbean guilder",
3067
+ symbol: "Cg.",
3068
+ narrowSymbol: "Cg.",
3069
+ symbolIsAmbiguous: false,
3070
+ numericCode: null,
3071
+ status: "active",
3072
+ replacedBy: null,
3073
+ storageScale: 100,
3074
+ storageDigits: 2,
3075
+ displayDigits: 2,
3076
+ medusaDigits: 2,
3077
+ symbolAliases: [],
3078
+ localeHint: null,
3079
+ commaDecimal: false
3080
+ },
3081
+ {
3082
+ code: "XOF",
3083
+ name: "West African CFA Franc",
3084
+ symbol: "F CFA",
3085
+ narrowSymbol: "F CFA",
3086
+ symbolIsAmbiguous: false,
3087
+ numericCode: "952",
3088
+ status: "active",
3089
+ replacedBy: null,
3090
+ storageScale: 100,
3091
+ storageDigits: 0,
3092
+ displayDigits: 0,
3093
+ medusaDigits: 0,
3094
+ symbolAliases: [],
3095
+ localeHint: null,
3096
+ commaDecimal: false
3097
+ },
3098
+ {
3099
+ code: "XPF",
3100
+ name: "CFP Franc",
3101
+ symbol: "CFPF",
3102
+ narrowSymbol: "CFPF",
3103
+ symbolIsAmbiguous: false,
3104
+ numericCode: "953",
3105
+ status: "active",
3106
+ replacedBy: null,
3107
+ storageScale: 100,
3108
+ storageDigits: 0,
3109
+ displayDigits: 0,
3110
+ medusaDigits: 0,
3111
+ symbolAliases: [],
3112
+ localeHint: null,
3113
+ commaDecimal: false
3114
+ },
3115
+ {
3116
+ code: "YER",
3117
+ name: "Yemeni Rial",
3118
+ symbol: "YER",
3119
+ narrowSymbol: "YER",
3120
+ symbolIsAmbiguous: false,
3121
+ numericCode: "886",
3122
+ status: "active",
3123
+ replacedBy: null,
3124
+ storageScale: 100,
3125
+ storageDigits: 2,
3126
+ displayDigits: 0,
3127
+ medusaDigits: 0,
3128
+ symbolAliases: [],
3129
+ localeHint: null,
3130
+ commaDecimal: false
3131
+ },
3132
+ {
3133
+ code: "ZAR",
3134
+ name: "South African Rand",
3135
+ symbol: "ZAR",
3136
+ narrowSymbol: "R",
3137
+ symbolIsAmbiguous: false,
3138
+ numericCode: "710",
3139
+ status: "active",
3140
+ replacedBy: null,
3141
+ storageScale: 100,
3142
+ storageDigits: 2,
3143
+ displayDigits: 2,
3144
+ medusaDigits: 2,
3145
+ symbolAliases: ["R"],
3146
+ localeHint: null,
3147
+ commaDecimal: false
3148
+ },
3149
+ {
3150
+ code: "ZMK",
3151
+ name: "Zambian Kwacha (1968–2012)",
3152
+ symbol: "ZMK",
3153
+ narrowSymbol: "ZMK",
3154
+ symbolIsAmbiguous: false,
3155
+ numericCode: null,
3156
+ status: "historic",
3157
+ replacedBy: "ZMW",
3158
+ storageScale: 100,
3159
+ storageDigits: 2,
3160
+ displayDigits: 2,
3161
+ medusaDigits: 0,
3162
+ symbolAliases: [],
3163
+ localeHint: null,
3164
+ commaDecimal: false
3165
+ },
3166
+ {
3167
+ code: "ZMW",
3168
+ name: "Zambian Kwacha",
3169
+ symbol: "ZMW",
3170
+ narrowSymbol: "ZK",
3171
+ symbolIsAmbiguous: false,
3172
+ numericCode: "967",
3173
+ status: "active",
3174
+ replacedBy: null,
3175
+ storageScale: 100,
3176
+ storageDigits: 2,
3177
+ displayDigits: 2,
3178
+ medusaDigits: 2,
3179
+ symbolAliases: [],
3180
+ localeHint: null,
3181
+ commaDecimal: false
3182
+ },
3183
+ {
3184
+ code: "ZWG",
3185
+ name: "Zimbabwean Gold",
3186
+ symbol: "ZWG",
3187
+ narrowSymbol: "ZWG",
3188
+ symbolIsAmbiguous: false,
3189
+ numericCode: null,
3190
+ status: "active",
3191
+ replacedBy: null,
3192
+ storageScale: 100,
3193
+ storageDigits: 2,
3194
+ displayDigits: 2,
3195
+ medusaDigits: 2,
3196
+ symbolAliases: [],
3197
+ localeHint: null,
3198
+ commaDecimal: false
3199
+ },
3200
+ {
3201
+ code: "ZWL",
3202
+ name: "Zimbabwean Dollar (2009–2024)",
3203
+ symbol: "ZWL",
3204
+ narrowSymbol: "ZWL",
3205
+ symbolIsAmbiguous: false,
3206
+ numericCode: null,
3207
+ status: "historic",
3208
+ replacedBy: "ZWG",
3209
+ storageScale: 100,
3210
+ storageDigits: 2,
3211
+ displayDigits: 2,
3212
+ medusaDigits: 0,
3213
+ symbolAliases: [],
3214
+ localeHint: null,
3215
+ commaDecimal: false
3216
+ }
3217
+ ];
3218
+ //#endregion
3219
+ //#region src/internal/intl.ts
3220
+ const DEFAULT_LOCALE = "en-US";
3221
+ /**
3222
+ * `locale` when the runtime supports it, else `'en-US'`. Blank, malformed or unsupported
3223
+ * tags never throw (Medusa `supportedLocale`, canonicalised: `'en-us'` gives `'en-US'`).
3224
+ */
3225
+ function resolveLocale(locale) {
3226
+ const tag = typeof locale === "string" ? locale.trim() : "";
3227
+ if (!tag) return DEFAULT_LOCALE;
3228
+ try {
3229
+ return Intl.NumberFormat.supportedLocalesOf([tag])[0] ?? "en-US";
3230
+ } catch {
3231
+ return DEFAULT_LOCALE;
3232
+ }
3233
+ }
3234
+ const MAX_CACHED = 256;
3235
+ const formatters = /* @__PURE__ */ new Map();
3236
+ /** A cached `Intl.NumberFormat` for an already resolved locale. Throws what the constructor throws. */
3237
+ function numberFormat(locale, options) {
3238
+ const key = `${locale}|${JSON.stringify(options)}`;
3239
+ let formatter = formatters.get(key);
3240
+ if (!formatter) {
3241
+ formatter = new Intl.NumberFormat(locale, options);
3242
+ if (formatters.size >= MAX_CACHED) formatters.clear();
3243
+ formatters.set(key, formatter);
3244
+ }
3245
+ return formatter;
3246
+ }
3247
+ /** The decimal and group separators `locale` prints (`'.'`/`','` for en-US, `','`/`'.'` for de-DE). */
3248
+ function separatorsOf(locale) {
3249
+ const parts = numberFormat(resolveLocale(locale), { useGrouping: true }).formatToParts(1234567.5);
3250
+ const decimal = parts.find((p) => p.type === "decimal")?.value ?? ".";
3251
+ return {
3252
+ decimal,
3253
+ group: parts.find((p) => p.type === "group")?.value ?? (decimal === "." ? "," : ".")
3254
+ };
3255
+ }
3256
+ //#endregion
3257
+ //#region src/registry.ts
3258
+ /** Every currency this package knows, active and historic, sorted by code. */
3259
+ const CURRENCIES = Object.freeze(CURRENCY_ROWS.map((row) => Object.freeze({
3260
+ ...row,
3261
+ symbolAliases: Object.freeze([...row.symbolAliases])
3262
+ })));
3263
+ const BY_CODE = new Map(CURRENCIES.map((info) => [info.code, info]));
3264
+ const CODE_TEXT = /^[A-Za-z]{3}$/;
3265
+ function find(input) {
3266
+ return typeof input === "string" && CODE_TEXT.test(input) ? BY_CODE.get(input.toUpperCase()) : void 0;
3267
+ }
3268
+ const isBlank = (value) => value === null || value === void 0 || typeof value === "string" && value.trim() === "";
3269
+ /**
3270
+ * The registry entry for `input` (any case). Throws `currency_invalid` for an unknown
3271
+ * code, and for a historic one with `allowHistoric: false`. Every lookup in the package
3272
+ * goes through here.
3273
+ */
3274
+ function resolveCurrency(input, options = {}) {
3275
+ const info = find(input);
3276
+ if (!info) throw new MoneyError("currency_invalid", `Unknown currency code: ${describeValue(input)}`, options);
3277
+ if (info.status === "historic" && options.allowHistoric === false) throw new MoneyError("currency_invalid", `${info.code} is no longer in use (replaced by ${info.replacedBy})`, options);
3278
+ return info;
3279
+ }
3280
+ /** `input` as a CurrencyCode (`'usd'` gives `'USD'`, `'bgn'` gives `'BGN'`). Throws `currency_invalid`, and for a historic code with `allowHistoric: false`. */
3281
+ function currencyCode(input, options) {
3282
+ return resolveCurrency(input, options).code;
3283
+ }
3284
+ const admits = (info, options) => info.status === "active" || options.allowHistoric !== false;
3285
+ /** Whether `value` already is a CurrencyCode: an upper-case known code (historic ones too, unless `allowHistoric: false`). */
3286
+ function isCurrencyCode(value, options = {}) {
3287
+ const info = typeof value === "string" ? BY_CODE.get(value) : void 0;
3288
+ return info !== void 0 && admits(info, options);
3289
+ }
3290
+ /** Everything known about a currency, historic ones included. Throws `currency_invalid` for an unknown code. */
3291
+ function currencyInfo(code) {
3292
+ return resolveCurrency(code, { allowHistoric: true });
3293
+ }
3294
+ /** Internal: every mark a store prints for a currency (symbol, narrow symbol, aliases, code), each once. */
3295
+ function currencyMarks(info) {
3296
+ return [.../* @__PURE__ */ new Set([
3297
+ info.symbol,
3298
+ info.narrowSymbol,
3299
+ ...info.symbolAliases,
3300
+ info.code
3301
+ ])];
3302
+ }
3303
+ /** 100, or 1000 for KWD, BHD, OMR, TND, JOD, IQD, LYD. Stored amount = major amount x storageScale. */
3304
+ function storageScale(code) {
3305
+ return currencyInfo(code).storageScale;
3306
+ }
3307
+ /** Fraction digits a stored amount is rounded to: 0 for JPY, KRW, VND...; 3 for the x1000 seven; else 2. */
3308
+ function storageDigits(code) {
3309
+ return currencyInfo(code).storageDigits;
3310
+ }
3311
+ /** Fraction digits to show: 0 for JPY, HUF, IDR, IQD...; 3 for KWD, BHD, OMR, TND, JOD, LYD; else 2. */
3312
+ function displayDigits(code) {
3313
+ return currencyInfo(code).displayDigits;
3314
+ }
3315
+ /** Digits of the storage scale (2 for x100, 3 for x1000): a stored integer has this many implied decimals. */
3316
+ function storageExponent(info) {
3317
+ return info.storageScale === 1e3 ? 3 : 2;
3318
+ }
3319
+ /**
3320
+ * The registry entry for `input` (trimmed, any case), or null: for null, undefined, blank,
3321
+ * non-strings, unknown codes and, with `allowHistoric: false`, retired ones. Never throws.
3322
+ */
3323
+ function findCurrency(input, options = {}) {
3324
+ const info = typeof input === "string" ? find(input.trim()) : void 0;
3325
+ return info !== void 0 && admits(info, options) ? info : null;
3326
+ }
3327
+ /** `input` as a CurrencyCode, or null (see `findCurrency`). For optional input: "null while unknown". */
3328
+ function parseCurrencyCode(input, options) {
3329
+ return findCurrency(input, options)?.code ?? null;
3330
+ }
3331
+ /**
3332
+ * The first candidate that is a known currency (historic codes included). Empty candidates
3333
+ * (null, undefined, blank) are skipped; a non-empty one that is not a known code throws
3334
+ * `currency_invalid` (a corrupt code is never replaced by a fallback); all empty throws
3335
+ * `currency_missing`. No implicit default: pass `'USD'` last to make one visible.
3336
+ */
3337
+ function firstCurrency(...candidates) {
3338
+ for (const candidate of candidates) {
3339
+ if (isBlank(candidate)) continue;
3340
+ const info = findCurrency(candidate, { allowHistoric: true });
3341
+ if (!info) throw new MoneyError("currency_invalid", `Unknown currency code: ${describeValue(candidate)}`);
3342
+ return info.code;
3343
+ }
3344
+ throw new MoneyError("currency_missing", `No currency code among ${candidates.length} candidates`);
3345
+ }
3346
+ /** Whether both parse (historic allowed) to the same code. Empty or unknown never matches. */
3347
+ function sameCurrency(a, b) {
3348
+ const left = findCurrency(a, { allowHistoric: true });
3349
+ return left !== null && left === findCurrency(b, { allowHistoric: true });
3350
+ }
3351
+ /** The lower-case code for Medusa columns, Medusa API payloads and SQL on lower-case columns. Historic codes allowed. */
3352
+ function medusaCurrencyCode(code) {
3353
+ return currencyCode(code, { allowHistoric: true }).toLowerCase();
3354
+ }
3355
+ /** CLDR English symbol (`'CA$'`, `'A$'`), or the narrow one (`'$'`) with `display: 'narrow'`. From the registry, never ICU. */
3356
+ function currencySymbol(code, options = {}) {
3357
+ const info = currencyInfo(code);
3358
+ return options.display === "narrow" ? info.narrowSymbol : info.symbol;
3359
+ }
3360
+ /**
3361
+ * The currency's name: English (`locale` absent or `'en'`) from the registry; other locales
3362
+ * from `Intl.DisplayNames`, falling back to the English name when Intl throws or knows none.
3363
+ */
3364
+ function currencyName(code, locale) {
3365
+ const info = currencyInfo(code);
3366
+ if (locale === void 0 || locale.toLowerCase() === "en") return info.name;
3367
+ try {
3368
+ const name = new Intl.DisplayNames([locale], {
3369
+ type: "currency",
3370
+ fallback: "code"
3371
+ }).of(info.code);
3372
+ return name && name !== info.code ? name : info.name;
3373
+ } catch {
3374
+ return info.name;
3375
+ }
3376
+ }
3377
+ /** `'Canadian Dollar (CAD $)'`, `'Euro (EUR €)'`, `'UAE Dirham (AED)'`: name, code, and the narrow symbol when it is not the code. */
3378
+ function currencyLabel(code, options = {}) {
3379
+ const info = currencyInfo(code);
3380
+ const narrow = info.narrowSymbol !== info.code ? ` ${info.narrowSymbol}` : "";
3381
+ return `${currencyName(info.code, options.locale)} (${info.code}${narrow})`;
3382
+ }
3383
+ /**
3384
+ * Currencies for a picker that chooses a currency for something new: active ones only
3385
+ * (`includeHistoric: true` adds the retired ones), `preferred` first in the given order
3386
+ * (unknown codes, and retired ones unless included, ignored), the rest by code.
3387
+ */
3388
+ function currencyOptions(options = {}) {
3389
+ const allowHistoric = options.includeHistoric === true;
3390
+ const first = [];
3391
+ for (const candidate of options.preferred ?? []) {
3392
+ const code = parseCurrencyCode(candidate, { allowHistoric });
3393
+ if (code !== null && !first.includes(code)) first.push(code);
3394
+ }
3395
+ const rest = CURRENCIES.filter((c) => admits(c, { allowHistoric }) && !first.includes(c.code)).map((c) => c.code);
3396
+ return [...first, ...rest].map((code) => ({
3397
+ code,
3398
+ label: currencyLabel(code, { locale: options.locale })
3399
+ }));
3400
+ }
3401
+ /** The locale storefronts format `code` in (`'de-DE'` for EUR), else `'en-US'`. Opt-in: formatMoney never calls it. */
3402
+ function localeForCurrency(code) {
3403
+ return currencyInfo(code).localeHint ?? "en-US";
3404
+ }
3405
+ /**
3406
+ * Medusa core's payment-status epsilon for `code`, as text: `'1'` (JPY, HUF, IQD...),
3407
+ * `'0.001'` (KWD, BHD, JOD, LYD, OMR, TND), else `'0.01'`. Compared against storage-scale
3408
+ * numbers, as Medusa does, so these sites agree with Medusa's own `payment_status`.
3409
+ */
3410
+ function medusaEpsilon(code) {
3411
+ return toDecimalText({
3412
+ units: 1n,
3413
+ scale: currencyInfo(code).medusaDigits
3414
+ });
3415
+ }
3416
+ //#endregion
3417
+ //#region src/money.ts
3418
+ const MAX_UNITS = 2n ** 46n;
3419
+ const anyKnownCurrency = (currency, field) => resolveCurrency(currency, {
3420
+ allowHistoric: true,
3421
+ field
3422
+ });
3423
+ function storedFrom(amount, info) {
3424
+ return {
3425
+ amount: amount === 0 ? 0 : amount,
3426
+ currency: info.code
3427
+ };
3428
+ }
3429
+ /** Whether `value` is a stored amount: a safe integer number within the given sign and range rules. */
3430
+ function isStoredAmount(value, options = {}) {
3431
+ if (typeof value !== "number" || !Number.isSafeInteger(value)) return false;
3432
+ if (value < 0 && !options.allowNegative) return false;
3433
+ if (value === 0 && options.allowZero === false) return false;
3434
+ if (options.min !== void 0 && value < options.min) return false;
3435
+ return options.max === void 0 || value <= options.max;
3436
+ }
3437
+ function checkStored(stored, currency) {
3438
+ const info = anyKnownCurrency(currency, void 0);
3439
+ if (!isStoredAmount(stored, { allowNegative: true })) throw new MoneyError("amount_invalid", `Stored amount must be a safe integer, got ${describeValue(stored)}`);
3440
+ return info;
3441
+ }
3442
+ /** Internal: a Money's registry entry and its exact major value (`amount / 10^storageExponent`). Validates both. */
3443
+ function storedDecimal(m) {
3444
+ const info = checkStored(m.amount, m.currency);
3445
+ return {
3446
+ info,
3447
+ value: {
3448
+ units: BigInt(m.amount),
3449
+ scale: storageExponent(info)
3450
+ }
3451
+ };
3452
+ }
3453
+ /**
3454
+ * Internal: a computed stored amount as Money. Every result in the package is bounded the
3455
+ * way `fromMajor` is (2^46 units of the currency's storage digits) and throws `overflow` beyond.
3456
+ */
3457
+ function boundedMoney(amount, info) {
3458
+ const value = {
3459
+ units: amount,
3460
+ scale: storageExponent(info)
3461
+ };
3462
+ if (!unitsWithin(roundToScale(value, info.storageDigits, "up"), MAX_UNITS)) throw new MoneyError("overflow", `${formatDecimal(value)} ${info.code} is too large to store`);
3463
+ return storedFrom(Number(amount), info);
3464
+ }
3465
+ /** A stored amount (already x100 / x1000) as Money. Throws `amount_invalid` unless it is a safe integer. */
3466
+ function money(stored, currency) {
3467
+ return storedFrom(stored, checkStored(stored, currency));
3468
+ }
3469
+ /** Internal: a major amount (finite number, or decimal text with fromMajor's grammar) as an exact Decimal. */
3470
+ function majorDecimal(major, field) {
3471
+ if (typeof major === "number" && Number.isFinite(major)) return decimalFromNumber(major);
3472
+ if (typeof major !== "string") throw new MoneyError("amount_invalid", `Amount must be a finite number, got ${describeValue(major)}`, { field });
3473
+ const parsed = parseDecimal(major);
3474
+ if (!parsed) throw new MoneyError("parse", `Not a decimal amount: ${describeValue(major)}`, { field });
3475
+ return parsed;
3476
+ }
3477
+ /**
3478
+ * A major-unit amount (19.99 or '19.99') as Money: x100, or x1000 for the seven
3479
+ * three-decimal currencies. JPY 1500 is stored as 150000.
3480
+ *
3481
+ * `precision: 'reject'` (default) is capability-kit `toStorageAmount` exactly: more
3482
+ * fraction digits than the `unit` keeps (default the currency's storage digits) throws
3483
+ * `precision` (19.999 USD, 5.5 JPY) unless a number is only float noise away from an
3484
+ * allowed amount. Strings are exact, so they get no noise allowance. `precision: 'round'`
3485
+ * rounds to the unit instead (JPY 1500.4 gives 150000; with `unit: 'storage'` 150040).
3486
+ * Beyond 2^46 units of the storage digits throws `overflow`.
3487
+ */
3488
+ function fromMajor(major, currency, options = {}) {
3489
+ const { field } = options;
3490
+ const info = anyKnownCurrency(currency, field);
3491
+ const value = majorDecimal(major, field);
3492
+ const exponent = storageExponent(info);
3493
+ const digits = options.unit === "storage" ? exponent : info.storageDigits;
3494
+ const round = options.precision === "round";
3495
+ if (!round && fractionDigitsOf(value) > digits && (typeof major === "string" || !withinFloatNoise(major, digits))) throw new MoneyError("precision", `${major} has more than ${digits} decimal places, the most ${info.code} allows`, { field });
3496
+ const units = roundToScale(value, digits, round ? options.rounding ?? "half-up" : "half-even");
3497
+ if (!unitsWithin(roundToScale(units, info.storageDigits, "up"), MAX_UNITS)) throw new MoneyError("overflow", `${major} ${info.code} is too large to store`, { field });
3498
+ return storedFrom(Number(roundToScale(units, exponent, "down").units), info);
3499
+ }
3500
+ /** Major units as exact decimal text (USD 1999 gives '19.99', JPY 120000 gives '1200', KWD 1005 gives '1.005'). */
3501
+ function toMajorDecimal(m, options = {}) {
3502
+ const { info, value } = storedDecimal(m);
3503
+ if (options.digits === "display") return formatDecimal(roundToScale(value, info.displayDigits, options.rounding ?? "half-up"));
3504
+ return formatDecimal(roundToScale(value, fractionDigitsOf(value) <= info.storageDigits ? info.storageDigits : value.scale, "down"));
3505
+ }
3506
+ /**
3507
+ * Major units as a number: the double nearest the exact amount (`digits: 'exact'`, default),
3508
+ * or rounded to the display digits first (`digits: 'display'`, the pixel value). For
3509
+ * arithmetic, stay in Money.
3510
+ */
3511
+ function toMajorNumber(m, options = {}) {
3512
+ return Number(toMajorDecimal(m, options));
3513
+ }
3514
+ const isObject = (value) => typeof value === "object" && value !== null;
3515
+ /** What `Number(obj)` would read: `Symbol.toPrimitive('number')`, else `valueOf()`. A throwing hook reads as nothing. */
3516
+ function primitiveOf(obj) {
3517
+ try {
3518
+ const hook = obj[Symbol.toPrimitive];
3519
+ if (typeof hook === "function") return hook.call(obj, "number");
3520
+ return typeof obj.valueOf === "function" ? obj.valueOf() : obj;
3521
+ } catch {
3522
+ return;
3523
+ }
3524
+ }
3525
+ /**
3526
+ * The primitive inside one of Medusa's amount shapes, payment-module precedence:
3527
+ * `value` (`.value ?? .raw.value ?? .raw_.value`, a live BigNumber's exact text), then
3528
+ * `numeric` (`.numeric ?? .numeric_`, a lossy view), then the object itself read as
3529
+ * `Number()` would. A primitive is returned as is.
3530
+ */
3531
+ function unwrapMedusaAmount(raw) {
3532
+ if (!isObject(raw)) return raw;
3533
+ const inner = (key) => {
3534
+ const nested = raw[key];
3535
+ return isObject(nested) ? nested.value : void 0;
3536
+ };
3537
+ const picked = raw.value ?? inner("raw") ?? inner("raw_") ?? raw.numeric ?? raw.numeric_ ?? raw;
3538
+ return isObject(picked) ? primitiveOf(picked) : picked;
3539
+ }
3540
+ /**
3541
+ * Internal: the exact decimal one of Medusa's amount shapes holds, or null. Numbers must be
3542
+ * finite and, when whole, safe (past 2^53 the digits are already gone); bigints are exact;
3543
+ * strings are decimal text (Medusa's `toPrecision(20)` can spell `'4300.0000000000000000'`
3544
+ * or an exponent). Anything else is null, never 0.
3545
+ */
3546
+ function medusaAmountDecimal(raw) {
3547
+ const primitive = unwrapMedusaAmount(raw);
3548
+ if (typeof primitive === "number") return strictNumberDecimal(primitive);
3549
+ if (typeof primitive === "bigint") return {
3550
+ units: primitive,
3551
+ scale: 0
3552
+ };
3553
+ return typeof primitive === "string" ? parseDecimal(primitive) : null;
3554
+ }
3555
+ const SAFE_LIMIT = BigInt(Number.MAX_SAFE_INTEGER);
3556
+ /** A stored integer from Medusa's shapes, or null when it is fractional, unsafe or unreadable. */
3557
+ function unwrapStored(raw) {
3558
+ const parsed = medusaAmountDecimal(raw);
3559
+ if (!parsed || fractionDigitsOf(parsed) !== 0) return null;
3560
+ const whole = roundToScale(parsed, 0, "down");
3561
+ return unitsWithin(whole, SAFE_LIMIT) ? Number(whole.units) : null;
3562
+ }
3563
+ function readStored(raw, currency, options = {}) {
3564
+ const info = anyKnownCurrency(currency, options.field);
3565
+ const amount = unwrapStored(raw);
3566
+ if (amount !== null) return storedFrom(amount, info);
3567
+ if (options.mode === "lenient") return null;
3568
+ throw new MoneyError("amount_invalid", `Invalid stored amount: ${describeValue(raw)}`, { field: options.field });
3569
+ }
3570
+ //#endregion
3571
+ Object.defineProperty(exports, "CURRENCIES", {
3572
+ enumerable: true,
3573
+ get: function() {
3574
+ return CURRENCIES;
3575
+ }
3576
+ });
3577
+ Object.defineProperty(exports, "MoneyError", {
3578
+ enumerable: true,
3579
+ get: function() {
3580
+ return MoneyError;
3581
+ }
3582
+ });
3583
+ Object.defineProperty(exports, "addDecimal", {
3584
+ enumerable: true,
3585
+ get: function() {
3586
+ return addDecimal;
3587
+ }
3588
+ });
3589
+ Object.defineProperty(exports, "assertDecimalLiteral", {
3590
+ enumerable: true,
3591
+ get: function() {
3592
+ return assertDecimalLiteral;
3593
+ }
3594
+ });
3595
+ Object.defineProperty(exports, "boundedMoney", {
3596
+ enumerable: true,
3597
+ get: function() {
3598
+ return boundedMoney;
3599
+ }
3600
+ });
3601
+ Object.defineProperty(exports, "compareDecimal", {
3602
+ enumerable: true,
3603
+ get: function() {
3604
+ return compareDecimal;
3605
+ }
3606
+ });
3607
+ Object.defineProperty(exports, "compareRatio", {
3608
+ enumerable: true,
3609
+ get: function() {
3610
+ return compareRatio;
3611
+ }
3612
+ });
3613
+ Object.defineProperty(exports, "currencyCode", {
3614
+ enumerable: true,
3615
+ get: function() {
3616
+ return currencyCode;
3617
+ }
3618
+ });
3619
+ Object.defineProperty(exports, "currencyInfo", {
3620
+ enumerable: true,
3621
+ get: function() {
3622
+ return currencyInfo;
3623
+ }
3624
+ });
3625
+ Object.defineProperty(exports, "currencyLabel", {
3626
+ enumerable: true,
3627
+ get: function() {
3628
+ return currencyLabel;
3629
+ }
3630
+ });
3631
+ Object.defineProperty(exports, "currencyMarks", {
3632
+ enumerable: true,
3633
+ get: function() {
3634
+ return currencyMarks;
3635
+ }
3636
+ });
3637
+ Object.defineProperty(exports, "currencyName", {
3638
+ enumerable: true,
3639
+ get: function() {
3640
+ return currencyName;
3641
+ }
3642
+ });
3643
+ Object.defineProperty(exports, "currencyOptions", {
3644
+ enumerable: true,
3645
+ get: function() {
3646
+ return currencyOptions;
3647
+ }
3648
+ });
3649
+ Object.defineProperty(exports, "currencySymbol", {
3650
+ enumerable: true,
3651
+ get: function() {
3652
+ return currencySymbol;
3653
+ }
3654
+ });
3655
+ Object.defineProperty(exports, "decimalClamp", {
3656
+ enumerable: true,
3657
+ get: function() {
3658
+ return decimalClamp;
3659
+ }
3660
+ });
3661
+ Object.defineProperty(exports, "decimalCompare", {
3662
+ enumerable: true,
3663
+ get: function() {
3664
+ return decimalCompare;
3665
+ }
3666
+ });
3667
+ Object.defineProperty(exports, "decimalDivide", {
3668
+ enumerable: true,
3669
+ get: function() {
3670
+ return decimalDivide;
3671
+ }
3672
+ });
3673
+ Object.defineProperty(exports, "decimalFromNumber", {
3674
+ enumerable: true,
3675
+ get: function() {
3676
+ return decimalFromNumber;
3677
+ }
3678
+ });
3679
+ Object.defineProperty(exports, "decimalMultiply", {
3680
+ enumerable: true,
3681
+ get: function() {
3682
+ return decimalMultiply;
3683
+ }
3684
+ });
3685
+ Object.defineProperty(exports, "decimalOf", {
3686
+ enumerable: true,
3687
+ get: function() {
3688
+ return decimalOf;
3689
+ }
3690
+ });
3691
+ Object.defineProperty(exports, "decimalRound", {
3692
+ enumerable: true,
3693
+ get: function() {
3694
+ return decimalRound;
3695
+ }
3696
+ });
3697
+ Object.defineProperty(exports, "decimalSubtract", {
3698
+ enumerable: true,
3699
+ get: function() {
3700
+ return decimalSubtract;
3701
+ }
3702
+ });
3703
+ Object.defineProperty(exports, "decimalSum", {
3704
+ enumerable: true,
3705
+ get: function() {
3706
+ return decimalSum;
3707
+ }
3708
+ });
3709
+ Object.defineProperty(exports, "decimalWithin", {
3710
+ enumerable: true,
3711
+ get: function() {
3712
+ return decimalWithin;
3713
+ }
3714
+ });
3715
+ Object.defineProperty(exports, "describeValue", {
3716
+ enumerable: true,
3717
+ get: function() {
3718
+ return describeValue;
3719
+ }
3720
+ });
3721
+ Object.defineProperty(exports, "displayDigits", {
3722
+ enumerable: true,
3723
+ get: function() {
3724
+ return displayDigits;
3725
+ }
3726
+ });
3727
+ Object.defineProperty(exports, "divRound", {
3728
+ enumerable: true,
3729
+ get: function() {
3730
+ return divRound;
3731
+ }
3732
+ });
3733
+ Object.defineProperty(exports, "findCurrency", {
3734
+ enumerable: true,
3735
+ get: function() {
3736
+ return findCurrency;
3737
+ }
3738
+ });
3739
+ Object.defineProperty(exports, "firstCurrency", {
3740
+ enumerable: true,
3741
+ get: function() {
3742
+ return firstCurrency;
3743
+ }
3744
+ });
3745
+ Object.defineProperty(exports, "formatDecimal", {
3746
+ enumerable: true,
3747
+ get: function() {
3748
+ return formatDecimal;
3749
+ }
3750
+ });
3751
+ Object.defineProperty(exports, "fractionDigitsOf", {
3752
+ enumerable: true,
3753
+ get: function() {
3754
+ return fractionDigitsOf;
3755
+ }
3756
+ });
3757
+ Object.defineProperty(exports, "fromMajor", {
3758
+ enumerable: true,
3759
+ get: function() {
3760
+ return fromMajor;
3761
+ }
3762
+ });
3763
+ Object.defineProperty(exports, "gcd", {
3764
+ enumerable: true,
3765
+ get: function() {
3766
+ return gcd;
3767
+ }
3768
+ });
3769
+ Object.defineProperty(exports, "isCurrencyCode", {
3770
+ enumerable: true,
3771
+ get: function() {
3772
+ return isCurrencyCode;
3773
+ }
3774
+ });
3775
+ Object.defineProperty(exports, "isDecimalLiteral", {
3776
+ enumerable: true,
3777
+ get: function() {
3778
+ return isDecimalLiteral;
3779
+ }
3780
+ });
3781
+ Object.defineProperty(exports, "isPositiveDecimal", {
3782
+ enumerable: true,
3783
+ get: function() {
3784
+ return isPositiveDecimal;
3785
+ }
3786
+ });
3787
+ Object.defineProperty(exports, "isStoredAmount", {
3788
+ enumerable: true,
3789
+ get: function() {
3790
+ return isStoredAmount;
3791
+ }
3792
+ });
3793
+ Object.defineProperty(exports, "localeForCurrency", {
3794
+ enumerable: true,
3795
+ get: function() {
3796
+ return localeForCurrency;
3797
+ }
3798
+ });
3799
+ Object.defineProperty(exports, "medusaAmountDecimal", {
3800
+ enumerable: true,
3801
+ get: function() {
3802
+ return medusaAmountDecimal;
3803
+ }
3804
+ });
3805
+ Object.defineProperty(exports, "medusaCurrencyCode", {
3806
+ enumerable: true,
3807
+ get: function() {
3808
+ return medusaCurrencyCode;
3809
+ }
3810
+ });
3811
+ Object.defineProperty(exports, "medusaEpsilon", {
3812
+ enumerable: true,
3813
+ get: function() {
3814
+ return medusaEpsilon;
3815
+ }
3816
+ });
3817
+ Object.defineProperty(exports, "money", {
3818
+ enumerable: true,
3819
+ get: function() {
3820
+ return money;
3821
+ }
3822
+ });
3823
+ Object.defineProperty(exports, "mulDiv", {
3824
+ enumerable: true,
3825
+ get: function() {
3826
+ return mulDiv;
3827
+ }
3828
+ });
3829
+ Object.defineProperty(exports, "multiplyDecimal", {
3830
+ enumerable: true,
3831
+ get: function() {
3832
+ return multiplyDecimal;
3833
+ }
3834
+ });
3835
+ Object.defineProperty(exports, "numberFormat", {
3836
+ enumerable: true,
3837
+ get: function() {
3838
+ return numberFormat;
3839
+ }
3840
+ });
3841
+ Object.defineProperty(exports, "parseCurrencyCode", {
3842
+ enumerable: true,
3843
+ get: function() {
3844
+ return parseCurrencyCode;
3845
+ }
3846
+ });
3847
+ Object.defineProperty(exports, "parseDecimal", {
3848
+ enumerable: true,
3849
+ get: function() {
3850
+ return parseDecimal;
3851
+ }
3852
+ });
3853
+ Object.defineProperty(exports, "parseDecimalText", {
3854
+ enumerable: true,
3855
+ get: function() {
3856
+ return parseDecimalText;
3857
+ }
3858
+ });
3859
+ Object.defineProperty(exports, "pow10", {
3860
+ enumerable: true,
3861
+ get: function() {
3862
+ return pow10;
3863
+ }
3864
+ });
3865
+ Object.defineProperty(exports, "ratioToDecimal", {
3866
+ enumerable: true,
3867
+ get: function() {
3868
+ return ratioToDecimal;
3869
+ }
3870
+ });
3871
+ Object.defineProperty(exports, "readStored", {
3872
+ enumerable: true,
3873
+ get: function() {
3874
+ return readStored;
3875
+ }
3876
+ });
3877
+ Object.defineProperty(exports, "resolveCurrency", {
3878
+ enumerable: true,
3879
+ get: function() {
3880
+ return resolveCurrency;
3881
+ }
3882
+ });
3883
+ Object.defineProperty(exports, "resolveLocale", {
3884
+ enumerable: true,
3885
+ get: function() {
3886
+ return resolveLocale;
3887
+ }
3888
+ });
3889
+ Object.defineProperty(exports, "roundToScale", {
3890
+ enumerable: true,
3891
+ get: function() {
3892
+ return roundToScale;
3893
+ }
3894
+ });
3895
+ Object.defineProperty(exports, "sameCurrency", {
3896
+ enumerable: true,
3897
+ get: function() {
3898
+ return sameCurrency;
3899
+ }
3900
+ });
3901
+ Object.defineProperty(exports, "separatorsOf", {
3902
+ enumerable: true,
3903
+ get: function() {
3904
+ return separatorsOf;
3905
+ }
3906
+ });
3907
+ Object.defineProperty(exports, "storageDigits", {
3908
+ enumerable: true,
3909
+ get: function() {
3910
+ return storageDigits;
3911
+ }
3912
+ });
3913
+ Object.defineProperty(exports, "storageExponent", {
3914
+ enumerable: true,
3915
+ get: function() {
3916
+ return storageExponent;
3917
+ }
3918
+ });
3919
+ Object.defineProperty(exports, "storageScale", {
3920
+ enumerable: true,
3921
+ get: function() {
3922
+ return storageScale;
3923
+ }
3924
+ });
3925
+ Object.defineProperty(exports, "storedDecimal", {
3926
+ enumerable: true,
3927
+ get: function() {
3928
+ return storedDecimal;
3929
+ }
3930
+ });
3931
+ Object.defineProperty(exports, "strictNumberDecimal", {
3932
+ enumerable: true,
3933
+ get: function() {
3934
+ return strictNumberDecimal;
3935
+ }
3936
+ });
3937
+ Object.defineProperty(exports, "toDecimalText", {
3938
+ enumerable: true,
3939
+ get: function() {
3940
+ return toDecimalText;
3941
+ }
3942
+ });
3943
+ Object.defineProperty(exports, "toMajorDecimal", {
3944
+ enumerable: true,
3945
+ get: function() {
3946
+ return toMajorDecimal;
3947
+ }
3948
+ });
3949
+ Object.defineProperty(exports, "toMajorNumber", {
3950
+ enumerable: true,
3951
+ get: function() {
3952
+ return toMajorNumber;
3953
+ }
3954
+ });
3955
+ Object.defineProperty(exports, "trimDecimalZeros", {
3956
+ enumerable: true,
3957
+ get: function() {
3958
+ return trimDecimalZeros;
3959
+ }
3960
+ });