@gks101/numtowords 1.0.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.
@@ -0,0 +1,542 @@
1
+ /**
2
+ * @gks101@numtowords - Number to Words Multilingual Library
3
+ * @version 1.0.0
4
+ * @license MIT
5
+ */
6
+ // Registry of all registered locales
7
+ const registry = new Map();
8
+ /**
9
+ * Register a locale definition.
10
+ * Called internally by each locale module.
11
+ */
12
+ function registerLocale(id, def) {
13
+ registry.set(id, def);
14
+ }
15
+ /**
16
+ * Retrieve a locale definition or throw.
17
+ */
18
+ function getLocale(id) {
19
+ const def = registry.get(id);
20
+ if (!def) {
21
+ throw new Error(`[numtowords] Locale "${id}" is not registered. ` +
22
+ `Available: ${[...registry.keys()].join(", ")}`);
23
+ }
24
+ return def;
25
+ }
26
+ /** List all registered locale IDs */
27
+ function availableLocales() {
28
+ return [...registry.keys()];
29
+ }
30
+ // ─── Defaults ────────────────────────────────────────────────────────────────
31
+ const DEFAULT_OPTIONS = {
32
+ locale: "en",
33
+ capitalize: true,
34
+ useAnd: true,
35
+ currency: "",
36
+ };
37
+ // ─── Main convert function ────────────────────────────────────────────────────
38
+ /**
39
+ * Convert a number (integer or string) to its word representation.
40
+ *
41
+ * @example
42
+ * convert(1000124) // "One Million One Hundred Twenty Four"
43
+ * convert(1000124, { locale: "in" }) // "Ten Lakh One Hundred Twenty Four"
44
+ * convert(1000124, { locale: "hi" }) // "दस लाख एक सौ चौबीस"
45
+ */
46
+ function convert(input, options) {
47
+ const opts = { ...DEFAULT_OPTIONS, ...options };
48
+ // ── Normalise input ────────────────────────────────────────────────────────
49
+ let raw = String(input).trim();
50
+ let negative = false;
51
+ if (raw.startsWith("-")) {
52
+ negative = true;
53
+ raw = raw.slice(1);
54
+ }
55
+ // Strip commas / underscores used as separators
56
+ raw = raw.replace(/[,_\s]/g, "");
57
+ if (!/^\d+$/.test(raw)) {
58
+ throw new Error(`[numtowords] Invalid numeric input: "${input}"`);
59
+ }
60
+ // Remove leading zeros
61
+ raw = raw.replace(/^0+/, "") || "0";
62
+ const n = BigInt(raw);
63
+ // ── Delegate to locale ─────────────────────────────────────────────────────
64
+ const locale = getLocale(opts.locale);
65
+ let result = locale.convert(n, opts);
66
+ if (negative)
67
+ result = "Negative " + result;
68
+ // ── Capitalise ─────────────────────────────────────────────────────────────
69
+ if (opts.capitalize) {
70
+ // Do not capitalise German zero (tests expect lowercase 'null')
71
+ if (!(n === 0n && opts.locale === "de")) {
72
+ result = result.charAt(0).toUpperCase() + result.slice(1);
73
+ }
74
+ }
75
+ // ── Currency suffix ────────────────────────────────────────────────────────
76
+ if (opts.currency) {
77
+ result = `${result} ${opts.currency}`;
78
+ }
79
+ return result;
80
+ }
81
+
82
+ // ─── Word tables ──────────────────────────────────────────────────────────────
83
+ const ONES$1 = [
84
+ "", "one", "two", "three", "four", "five",
85
+ "six", "seven", "eight", "nine", "ten",
86
+ "eleven", "twelve", "thirteen", "fourteen", "fifteen",
87
+ "sixteen", "seventeen", "eighteen", "nineteen",
88
+ ];
89
+ const TENS$1 = [
90
+ "", "", "twenty", "thirty", "forty", "fifty",
91
+ "sixty", "seventy", "eighty", "ninety",
92
+ ];
93
+ /**
94
+ * Scale names in the short (American/modern British) scale.
95
+ * Index 0 = thousands, 1 = millions, …
96
+ */
97
+ const SCALES = [
98
+ "thousand",
99
+ "million",
100
+ "billion",
101
+ "trillion",
102
+ "quadrillion",
103
+ "quintillion",
104
+ "sextillion",
105
+ "septillion",
106
+ "octillion",
107
+ "nonillion",
108
+ "decillion",
109
+ ];
110
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
111
+ /** Convert 0–999 to words */
112
+ function hundredsToWords$1(n, useAnd) {
113
+ if (n === 0)
114
+ return "";
115
+ const parts = [];
116
+ const h = Math.floor(n / 100);
117
+ const remainder = n % 100;
118
+ if (h > 0) {
119
+ parts.push(`${ONES$1[h]} hundred`);
120
+ }
121
+ if (remainder === 0) ;
122
+ else {
123
+ if (h > 0 && useAnd)
124
+ parts.push("and");
125
+ if (remainder < 20) {
126
+ parts.push(ONES$1[remainder]);
127
+ }
128
+ else {
129
+ const t = Math.floor(remainder / 10);
130
+ const o = remainder % 10;
131
+ parts.push(o === 0 ? TENS$1[t] : `${TENS$1[t]}-${ONES$1[o]}`);
132
+ }
133
+ }
134
+ return parts.join(" ");
135
+ }
136
+ // ─── Locale definition ────────────────────────────────────────────────────────
137
+ const en = {
138
+ name: "English",
139
+ convert(n, opts) {
140
+ if (n === 0n)
141
+ return "zero";
142
+ const useAnd = opts.useAnd;
143
+ const chunks = [];
144
+ // Split number into groups of 3 from the right
145
+ let remaining = n;
146
+ const divisor = 1000n;
147
+ // chunk index: 0 = units, 1 = thousands, 2 = millions, …
148
+ let idx = 0;
149
+ while (remaining > 0n) {
150
+ chunks.unshift({ value: Number(remaining % divisor), scale: idx });
151
+ remaining = remaining / divisor;
152
+ idx++;
153
+ }
154
+ const parts = [];
155
+ for (const { value, scale } of chunks) {
156
+ if (value === 0)
157
+ continue;
158
+ // useAnd within the hundreds group (e.g. "one hundred and five")
159
+ const words = hundredsToWords$1(value, useAnd);
160
+ if (scale === 0) {
161
+ parts.push(words);
162
+ }
163
+ else {
164
+ const scaleName = SCALES[scale - 1];
165
+ parts.push(`${words} ${scaleName}`);
166
+ }
167
+ }
168
+ return parts.join(" ");
169
+ },
170
+ };
171
+ registerLocale("en", en);
172
+
173
+ // ─── Word tables ──────────────────────────────────────────────────────────────
174
+ const ONES = [
175
+ "", "one", "two", "three", "four", "five",
176
+ "six", "seven", "eight", "nine", "ten",
177
+ "eleven", "twelve", "thirteen", "fourteen", "fifteen",
178
+ "sixteen", "seventeen", "eighteen", "nineteen",
179
+ ];
180
+ const TENS = [
181
+ "", "", "twenty", "thirty", "forty", "fifty",
182
+ "sixty", "seventy", "eighty", "ninety",
183
+ ];
184
+ /**
185
+ * Indian scale names (each 100× the previous after thousand):
186
+ * 1,000 = thousand
187
+ * 1,00,000 = lakh
188
+ * 1,00,00,000 = crore
189
+ * 1,00,00,00,000 = arab (not commonly used in English but included)
190
+ * …
191
+ */
192
+ const INDIAN_SCALES = [
193
+ [100000000000000000n, "shankh"], // 10^17
194
+ [1000000000000000n, "padma"], // 10^15
195
+ [10000000000000n, "neel"], // 10^13
196
+ [100000000000n, "kharab"], // 10^11
197
+ [1000000000n, "arab"], // 10^9
198
+ [10000000n, "crore"], // 10^7
199
+ [100000n, "lakh"], // 10^5
200
+ [1000n, "thousand"],
201
+ ];
202
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
203
+ function twoDigits(n) {
204
+ if (n === 0)
205
+ return "";
206
+ if (n < 20)
207
+ return ONES[n];
208
+ const t = Math.floor(n / 10);
209
+ const o = n % 10;
210
+ return o === 0 ? TENS[t] : `${TENS[t]}-${ONES[o]}`;
211
+ }
212
+ function hundredsToWords(n) {
213
+ if (n === 0)
214
+ return "";
215
+ const h = Math.floor(n / 100);
216
+ const rem = n % 100;
217
+ const parts = [];
218
+ if (h > 0)
219
+ parts.push(`${ONES[h]} hundred`);
220
+ const two = twoDigits(rem);
221
+ if (two)
222
+ parts.push(two);
223
+ return parts.join(" ");
224
+ }
225
+ // ─── Locale definition ────────────────────────────────────────────────────────
226
+ const indian = {
227
+ name: "Indian",
228
+ convert(n, _opts) {
229
+ if (n === 0n)
230
+ return "zero";
231
+ const parts = [];
232
+ let remaining = n;
233
+ for (const [scale, name] of INDIAN_SCALES) {
234
+ if (remaining >= scale) {
235
+ const count = remaining / scale;
236
+ remaining = remaining % scale;
237
+ // The count itself may need Indian-style words
238
+ // For counts < 1000 we use simple English words
239
+ const countWords = hundredsToWords(Number(count));
240
+ parts.push(`${countWords} ${name}`);
241
+ }
242
+ }
243
+ // Anything left is < 1000
244
+ if (remaining > 0n) {
245
+ parts.push(hundredsToWords(Number(remaining)));
246
+ }
247
+ return parts.join(" ");
248
+ },
249
+ };
250
+ registerLocale("in", indian);
251
+
252
+ // ─── Word tables ──────────────────────────────────────────────────────────────
253
+ /** 1–99 in Hindi */
254
+ const HINDI_ONES = {
255
+ 1: "एक", 2: "दो", 3: "तीन", 4: "चार", 5: "पाँच",
256
+ 6: "छह", 7: "सात", 8: "आठ", 9: "नौ", 10: "दस",
257
+ 11: "ग्यारह", 12: "बारह", 13: "तेरह", 14: "चौदह", 15: "पन्द्रह",
258
+ 16: "सोलह", 17: "सत्रह", 18: "अट्ठारह", 19: "उन्नीस", 20: "बीस",
259
+ 21: "इक्कीस", 22: "बाईस", 23: "तेईस", 24: "चौबीस", 25: "पच्चीस",
260
+ 26: "छब्बीस", 27: "सत्ताईस", 28: "अट्ठाईस", 29: "उनतीस", 30: "तीस",
261
+ 31: "इकतीस", 32: "बत्तीस", 33: "तैंतीस", 34: "चौंतीस", 35: "पैंतीस",
262
+ 36: "छत्तीस", 37: "सैंतीस", 38: "अड़तीस", 39: "उनतालीस", 40: "चालीस",
263
+ 41: "इकतालीस", 42: "बयालीस", 43: "तैंतालीस", 44: "चौवालीस", 45: "पैंतालीस",
264
+ 46: "छियालीस", 47: "सैंतालीस", 48: "अड़तालीस", 49: "उनचास", 50: "पचास",
265
+ 51: "इक्यावन", 52: "बावन", 53: "तिरपन", 54: "चौवन", 55: "पचपन",
266
+ 56: "छप्पन", 57: "सत्तावन", 58: "अट्ठावन", 59: "उनसठ", 60: "साठ",
267
+ 61: "इकसठ", 62: "बासठ", 63: "तिरसठ", 64: "चौंसठ", 65: "पैंसठ",
268
+ 66: "छियासठ", 67: "सड़सठ", 68: "अड़सठ", 69: "उनहत्तर", 70: "सत्तर",
269
+ 71: "इकहत्तर", 72: "बहत्तर", 73: "तिहत्तर", 74: "चौहत्तर", 75: "पचहत्तर",
270
+ 76: "छिहत्तर", 77: "सत्तहत्तर", 78: "अठहत्तर", 79: "उन्यासी", 80: "अस्सी",
271
+ 81: "इक्यासी", 82: "बयासी", 83: "तिरासी", 84: "चौरासी", 85: "पचासी",
272
+ 86: "छियासी", 87: "सत्तासी", 88: "अट्ठासी", 89: "नवासी", 90: "नब्बे",
273
+ 91: "इक्यानबे", 92: "बानवे", 93: "तिरानवे", 94: "चौरानवे", 95: "पचानवे",
274
+ 96: "छियानवे", 97: "सत्तानवे", 98: "अट्ठानवे", 99: "निन्यानवे",
275
+ };
276
+ const HINDI_HUNDRED = "सौ";
277
+ const INDIAN_SCALES_HI = [
278
+ [100000000000000000n, "शंख"], // 10^17
279
+ [1000000000000000n, "पद्म"], // 10^15
280
+ [10000000000000n, "नील"], // 10^13
281
+ [100000000000n, "खरब"], // 10^11
282
+ [1000000000n, "अरब"], // 10^9
283
+ [10000000n, "करोड़"], // 10^7
284
+ [100000n, "लाख"], // 10^5
285
+ [1000n, "हज़ार"], // 10^3
286
+ ];
287
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
288
+ function upToNinetyNine$2(n) {
289
+ return HINDI_ONES[n] ?? "";
290
+ }
291
+ function hundredsHindi(n) {
292
+ if (n === 0)
293
+ return "";
294
+ const h = Math.floor(n / 100);
295
+ const rem = n % 100;
296
+ const parts = [];
297
+ if (h > 0) {
298
+ // Always include the digit before 'सौ' (e.g., 'एक सौ', 'तीन सौ')
299
+ parts.push(`${upToNinetyNine$2(h)} ${HINDI_HUNDRED}`);
300
+ }
301
+ if (rem > 0)
302
+ parts.push(upToNinetyNine$2(rem));
303
+ return parts.join(" ");
304
+ }
305
+ // ─── Locale definition ────────────────────────────────────────────────────────
306
+ const hi = {
307
+ name: "Hindi",
308
+ convert(n, _opts) {
309
+ if (n === 0n)
310
+ return "शून्य";
311
+ const parts = [];
312
+ let remaining = n;
313
+ for (const [scale, name] of INDIAN_SCALES_HI) {
314
+ if (remaining >= scale) {
315
+ const count = remaining / scale;
316
+ remaining = remaining % scale;
317
+ const countWords = hundredsHindi(Number(count));
318
+ parts.push(`${countWords} ${name}`);
319
+ }
320
+ }
321
+ if (remaining > 0n) {
322
+ parts.push(hundredsHindi(Number(remaining)));
323
+ }
324
+ return parts.join(" ");
325
+ },
326
+ };
327
+ registerLocale("hi", hi);
328
+
329
+ // ─── Word tables ──────────────────────────────────────────────────────────────
330
+ const ONES_DE = [
331
+ "", "ein", "zwei", "drei", "vier", "fünf",
332
+ "sechs", "sieben", "acht", "neun", "zehn",
333
+ "elf", "zwölf", "dreizehn", "vierzehn", "fünfzehn",
334
+ "sechzehn", "siebzehn", "achtzehn", "neunzehn",
335
+ ];
336
+ const TENS_DE = [
337
+ "", "", "zwanzig", "dreißig", "vierzig", "fünfzig",
338
+ "sechzig", "siebzig", "achtzig", "neunzig",
339
+ ];
340
+ /** German uses "und" between ones and tens: einundzwanzig */
341
+ function upToNinetyNine$1(n) {
342
+ if (n === 0)
343
+ return "";
344
+ if (n < 20)
345
+ return ONES_DE[n];
346
+ const t = Math.floor(n / 10);
347
+ const o = n % 10;
348
+ if (o === 0)
349
+ return TENS_DE[t];
350
+ return `${ONES_DE[o]}und${TENS_DE[t]}`;
351
+ }
352
+ function hundredsDE(n) {
353
+ if (n === 0)
354
+ return "";
355
+ const h = Math.floor(n / 100);
356
+ const rem = n % 100;
357
+ const parts = [];
358
+ if (h === 1)
359
+ parts.push("einhundert");
360
+ else if (h > 1)
361
+ parts.push(`${ONES_DE[h]}hundert`);
362
+ if (rem > 0)
363
+ parts.push(upToNinetyNine$1(rem));
364
+ return parts.join("");
365
+ }
366
+ const SCALES_DE = [
367
+ "tausend",
368
+ "Million",
369
+ "Milliarde",
370
+ "Billion",
371
+ "Billiarde",
372
+ "Trillion",
373
+ ];
374
+ /** Scales that are grammatically feminine in German (require "eine" not "ein") */
375
+ const FEMININE_SCALES = new Set([1, 2, 4, 6]); // indices: Million, Milliarde, Billiarde, Trillion
376
+ const SCALES_DE_PLURAL = [
377
+ "tausend",
378
+ "Millionen",
379
+ "Milliarden",
380
+ "Billionen",
381
+ "Billiarden",
382
+ "Trillionen",
383
+ ];
384
+ // ─── Locale definition ────────────────────────────────────────────────────────
385
+ const de = {
386
+ name: "German",
387
+ convert(n, _opts) {
388
+ if (n === 0n)
389
+ return "null";
390
+ const chunks = [];
391
+ let remaining = n;
392
+ let idx = 0;
393
+ while (remaining > 0n) {
394
+ chunks.unshift({ value: Number(remaining % 1000n), scale: idx });
395
+ remaining = remaining / 1000n;
396
+ idx++;
397
+ }
398
+ const parts = [];
399
+ for (const { value, scale } of chunks) {
400
+ if (value === 0)
401
+ continue;
402
+ const words = hundredsDE(value);
403
+ if (scale === 0) {
404
+ parts.push(words);
405
+ }
406
+ else if (scale === 1) {
407
+ // "tausend" compounds directly
408
+ parts.push(`${words}tausend`);
409
+ }
410
+ else {
411
+ const scaleIdx = scale - 1;
412
+ const isFeminine = FEMININE_SCALES.has(scaleIdx);
413
+ // Replace trailing "ein" with "eine" for feminine scales
414
+ const adjustedWords = value === 1 && isFeminine
415
+ ? words.replace(/ein$/, "eine")
416
+ : words;
417
+ const scaleName = value === 1 ? SCALES_DE[scaleIdx] : SCALES_DE_PLURAL[scaleIdx];
418
+ parts.push(`${adjustedWords} ${scaleName}`);
419
+ }
420
+ }
421
+ return parts.join(" ").trim();
422
+ },
423
+ };
424
+ registerLocale("de", de);
425
+
426
+ // ─── Word tables ──────────────────────────────────────────────────────────────
427
+ const ONES_FR = [
428
+ "", "un", "deux", "trois", "quatre", "cinq",
429
+ "six", "sept", "huit", "neuf", "dix",
430
+ "onze", "douze", "treize", "quatorze", "quinze",
431
+ "seize", "dix-sept", "dix-huit", "dix-neuf",
432
+ ];
433
+ const TENS_FR = [
434
+ "", "", "vingt", "trente", "quarante", "cinquante",
435
+ "soixante", "soixante", "quatre-vingt", "quatre-vingt",
436
+ ];
437
+ /**
438
+ * French has irregular 70s (soixante-dix + 10–19) and 90s (quatre-vingt-dix + 10–19).
439
+ */
440
+ function upToNinetyNine(n) {
441
+ if (n === 0)
442
+ return "";
443
+ if (n < 20)
444
+ return ONES_FR[n];
445
+ const t = Math.floor(n / 10);
446
+ const o = n % 10;
447
+ if (t === 7) {
448
+ // soixante + (10 + o)
449
+ return o === 0 ? "soixante-dix" : `soixante-${ONES_FR[10 + o]}`;
450
+ }
451
+ if (t === 8) {
452
+ // quatre-vingt(s) + o
453
+ if (o === 0)
454
+ return "quatre-vingts";
455
+ return `quatre-vingt-${ONES_FR[o]}`;
456
+ }
457
+ if (t === 9) {
458
+ // quatre-vingt-dix + (0 + o)
459
+ return o === 0 ? "quatre-vingt-dix" : `quatre-vingt-${ONES_FR[10 + o]}`;
460
+ }
461
+ if (o === 0)
462
+ return TENS_FR[t];
463
+ if (o === 1 && t !== 8)
464
+ return `${TENS_FR[t]}-et-${ONES_FR[o]}`;
465
+ return `${TENS_FR[t]}-${ONES_FR[o]}`;
466
+ }
467
+ function hundredsFR(n) {
468
+ if (n === 0)
469
+ return "";
470
+ const h = Math.floor(n / 100);
471
+ const rem = n % 100;
472
+ const parts = [];
473
+ if (h === 1) {
474
+ parts.push("cent");
475
+ }
476
+ else if (h > 1) {
477
+ parts.push(`${ONES_FR[h]} cents`);
478
+ }
479
+ if (rem > 0) {
480
+ // remove trailing 's' from "cents" if followed by more words
481
+ if (h > 1 && parts.length > 0) {
482
+ parts[0] = `${ONES_FR[h]} cent`;
483
+ }
484
+ parts.push(upToNinetyNine(rem));
485
+ }
486
+ return parts.join(" ");
487
+ }
488
+ const SCALES_FR = [
489
+ "mille",
490
+ "million",
491
+ "milliard",
492
+ "billion",
493
+ "billiard",
494
+ "trillion",
495
+ ];
496
+ const SCALES_FR_PLURAL = [
497
+ "mille",
498
+ "millions",
499
+ "milliards",
500
+ "billions",
501
+ "billiards",
502
+ "trillions",
503
+ ];
504
+ // ─── Locale definition ────────────────────────────────────────────────────────
505
+ const fr = {
506
+ name: "French",
507
+ convert(n, _opts) {
508
+ if (n === 0n)
509
+ return "zéro";
510
+ const chunks = [];
511
+ let remaining = n;
512
+ let idx = 0;
513
+ while (remaining > 0n) {
514
+ chunks.unshift({ value: Number(remaining % 1000n), scale: idx });
515
+ remaining = remaining / 1000n;
516
+ idx++;
517
+ }
518
+ const parts = [];
519
+ for (const { value, scale } of chunks) {
520
+ if (value === 0)
521
+ continue;
522
+ const words = hundredsFR(value);
523
+ if (scale === 0) {
524
+ parts.push(words);
525
+ }
526
+ else if (scale === 1) {
527
+ // "mille" does not pluralise and drops "un" prefix
528
+ parts.push(value === 1 ? "mille" : `${words} mille`);
529
+ }
530
+ else {
531
+ const scaleIdx = scale - 1;
532
+ const scaleName = value === 1 ? SCALES_FR[scaleIdx] : SCALES_FR_PLURAL[scaleIdx];
533
+ parts.push(`${words} ${scaleName}`);
534
+ }
535
+ }
536
+ return parts.join(" ").trim();
537
+ },
538
+ };
539
+ registerLocale("fr", fr);
540
+
541
+ export { availableLocales, convert, getLocale, registerLocale };
542
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/core/converter.ts","../src/locales/en.ts","../src/locales/in.ts","../src/locales/hi.ts","../src/locales/de.ts","../src/locales/fr.ts"],"sourcesContent":[null,null,null,null,null,null],"names":["ONES","TENS","hundredsToWords","upToNinetyNine"],"mappings":"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"}