khmer-money-formatter
Version:
Lightweight, dependency-free TypeScript library for formatting, parsing, and converting Khmer Riel and Khmer numbers.
1 lines • 26.1 kB
Source Map (JSON)
{"version":3,"sources":["../src/number.ts","../src/formatter.ts","../src/khmer.ts","../src/parser.ts","../src/khmer-text.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { NumberFormatOptions } from \"./types\";\n\nconst DEFAULT_OPTIONS: Required<NumberFormatOptions> = {\n decimals: 0,\n separator: \",\",\n decimalSeparator: \".\",\n khmerDigits: false,\n empty: \"0\",\n};\n\nexport function toNumericValue(\n value: unknown,\n): number | null {\n if (\n value === null ||\n value === undefined ||\n value === \"\"\n ) {\n return null;\n }\n\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? value : null;\n }\n\n if (typeof value === \"bigint\") {\n return Number(value);\n }\n\n if (typeof value !== \"string\") {\n return null;\n }\n\n const normalized = value\n .trim()\n .replace(/,/g, \"\");\n\n if (!normalized) {\n return null;\n }\n\n const parsed = Number(normalized);\n\n return Number.isFinite(parsed)\n ? parsed\n : null;\n}\n\nexport function formatNumber(\n value: unknown,\n options: NumberFormatOptions = {},\n): string {\n const config = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n\n const numericValue = toNumericValue(value);\n\n if (numericValue === null) {\n return config.empty;\n }\n\n const decimals = Math.max(\n 0,\n Math.floor(config.decimals),\n );\n\n const fixed = numericValue.toFixed(decimals);\n\n const [integerPart = '', decimalPart] =\n fixed.split(\".\");\n\n const negative = integerPart.startsWith(\"-\");\n\n const absoluteInteger = negative\n ? integerPart.slice(1)\n : integerPart;\n\n const formattedInteger =\n absoluteInteger.replace(\n /\\B(?=(\\d{3})+(?!\\d))/g,\n config.separator,\n );\n\n let result =\n `${negative ? \"-\" : \"\"}${formattedInteger}`;\n\n if (decimals > 0 && decimalPart !== undefined) {\n result +=\n config.decimalSeparator +\n decimalPart;\n }\n\n return config.khmerDigits\n ? convertDigitsToKhmer(result)\n : result;\n}\n\nexport function parseNumber(\n value: unknown,\n): number {\n if (\n value === null ||\n value === undefined ||\n value === \"\"\n ) {\n return 0;\n }\n\n if (typeof value === \"number\") {\n return Number.isFinite(value)\n ? value\n : 0;\n }\n\n if (typeof value !== \"string\") {\n return 0;\n }\n\n const normalized = convertDigitsFromKhmer(\n value,\n )\n .trim()\n .replace(/,/g, \"\");\n\n if (!normalized) {\n return 0;\n }\n\n const parsed = Number(normalized);\n\n return Number.isFinite(parsed)\n ? parsed\n : 0;\n}\n\nfunction convertDigitsToKhmer(\n value: string,\n): string {\n const map: Record<string, string> = {\n \"0\": \"០\",\n \"1\": \"១\",\n \"2\": \"២\",\n \"3\": \"៣\",\n \"4\": \"៤\",\n \"5\": \"៥\",\n \"6\": \"៦\",\n \"7\": \"៧\",\n \"8\": \"៨\",\n \"9\": \"៩\",\n };\n\n return value.replace(\n /\\d/g,\n (digit) => map[digit]??digit,\n );\n}\n\nfunction convertDigitsFromKhmer(\n value: string,\n): string {\n const map: Record<string, string> = {\n \"០\": \"0\",\n \"១\": \"1\",\n \"២\": \"2\",\n \"៣\": \"3\",\n \"៤\": \"4\",\n \"៥\": \"5\",\n \"៦\": \"6\",\n \"៧\": \"7\",\n \"៨\": \"8\",\n \"៩\": \"9\",\n };\n\n return value.replace(\n /[០-៩]/g,\n (digit) => map[digit]??digit,\n );\n}","import {\n formatNumber,\n toNumericValue,\n} from \"./number\";\n\nimport type {\n MoneyFormatOptions,\n} from \"./types\";\n\nconst DEFAULT_MONEY_OPTIONS:\n Required<MoneyFormatOptions> = {\n symbol: true,\n currency: \"៛\",\n decimals: 0,\n separator: \",\",\n decimalSeparator: \".\",\n currencyPosition: \"suffix\",\n khmerDigits: false,\n empty: \"0\",\n roundTo: 100,\n };\n\n/**\n * Always rounds a KHR value upward\n * to the nearest configured unit.\n *\n * Example:\n *\n * 1000.01 -> 1100\n * 1050 -> 1100\n * 1099 -> 1100\n * 1100 -> 1100\n */\nexport function ceilMoney(\n value: number,\n unit = 100,\n): number {\n if (!Number.isFinite(value)) {\n return 0;\n }\n\n if (!Number.isFinite(unit) || unit <= 0) {\n return value;\n }\n\n return Math.ceil(value / unit) * unit;\n}\n\n/**\n * Format Khmer Riel.\n */\nexport function formatKHR(\n value: unknown,\n options: MoneyFormatOptions = {},\n): string {\n const config = {\n ...DEFAULT_MONEY_OPTIONS,\n ...options,\n };\n\n const numericValue =\n toNumericValue(value);\n\n if (numericValue === null) {\n const emptyValue = config.empty;\n\n if (!config.symbol) {\n return emptyValue;\n }\n\n if (!emptyValue) {\n return \"\";\n }\n\n return config.currencyPosition ===\n \"prefix\"\n ? `${config.currency}${emptyValue}`\n : `${emptyValue} ${config.currency}`;\n }\n\n const roundedValue = ceilMoney(\n numericValue,\n config.roundTo,\n );\n\n const formatted =\n formatNumber(roundedValue, {\n decimals: 0,\n separator: config.separator,\n decimalSeparator:\n config.decimalSeparator,\n khmerDigits:\n config.khmerDigits,\n empty: config.empty,\n });\n\n if (!config.symbol) {\n return formatted;\n }\n\n if (config.currencyPosition === \"prefix\") {\n return `${config.currency}${formatted}`;\n }\n\n return `${formatted} ${config.currency}`;\n}\n\n/**\n * Format an amount for text input.\n *\n * KHR values are rounded upward to the nearest\n * 100 Riel by default.\n */\nexport function formatKHRInput(\n value: unknown,\n options: MoneyFormatOptions = {},\n): string {\n const config = {\n ...DEFAULT_MONEY_OPTIONS,\n ...options,\n };\n\n const numericValue =\n toNumericValue(value);\n\n if (numericValue === null) {\n return config.empty;\n }\n\n const roundedValue = ceilMoney(\n numericValue,\n config.roundTo,\n );\n\n return formatNumber(roundedValue, {\n decimals: 0,\n separator: config.separator,\n decimalSeparator:\n config.decimalSeparator,\n khmerDigits:\n config.khmerDigits,\n empty: config.empty,\n });\n}\n\n/**\n * Format KHR using the long currency name.\n */\nexport function formatKHRLong(\n value: unknown,\n options: MoneyFormatOptions & {\n khmer?: boolean;\n } = {},\n): string {\n const {\n khmer = false,\n ...moneyOptions\n } = options;\n\n const formatted =\n formatKHR(value, {\n ...moneyOptions,\n symbol: false,\n khmerDigits:\n moneyOptions.khmerDigits ??\n khmer,\n });\n\n if (!formatted) {\n return \"\";\n }\n\n return moneyOptions.currencyPosition ===\n \"prefix\"\n ? `រៀល${formatted}`\n : `${formatted} រៀល`;\n}","const KHMER_DIGITS = [\n \"០\",\n \"១\",\n \"២\",\n \"៣\",\n \"៤\",\n \"៥\",\n \"៦\",\n \"៧\",\n \"៨\",\n \"៩\",\n];\n\nconst KHMER_TO_ARABIC: Record<string, string> = {\n \"០\": \"0\",\n \"១\": \"1\",\n \"២\": \"2\",\n \"៣\": \"3\",\n \"៤\": \"4\",\n \"៥\": \"5\",\n \"៦\": \"6\",\n \"៧\": \"7\",\n \"៨\": \"8\",\n \"៩\": \"9\",\n};\n\nexport function toKhmerNumber(\n value: number | string,\n): string {\n const input = String(value);\n\n return input.replace(\n /\\d/g,\n (digit) =>\n KHMER_DIGITS[Number(digit)]??digit,\n );\n}\n\nexport function fromKhmerNumber(\n value: string,\n): number {\n const normalized = value\n .replace(\n /[០-៩]/g,\n (digit) => KHMER_TO_ARABIC[digit]??digit,\n )\n .replace(/,/g, \"\")\n .trim();\n\n if (!normalized) {\n return 0;\n }\n\n const result = Number(normalized);\n\n return Number.isFinite(result)\n ? result\n : 0;\n}","import {\n parseNumber,\n} from \"./number\";\n\nimport {\n fromKhmerNumber,\n} from \"./khmer\";\n\n/**\n * Parse a Khmer Riel formatted value.\n *\n * Supports:\n *\n * 10,000\n * 10,000 ៛\n * ៛10,000\n * ៛ 10,000\n * 10,000៛\n * ១០,០០០\n */\nexport function parseKHR(\n value: unknown,\n): number {\n if (\n value === null ||\n value === undefined ||\n value === \"\"\n ) {\n return 0;\n }\n\n if (typeof value === \"number\") {\n return Number.isFinite(value)\n ? value\n : 0;\n }\n\n if (typeof value !== \"string\") {\n return 0;\n }\n\n const cleaned = value\n .replace(/៛/g, \"\")\n .replace(/រៀល/g, \"\")\n .replace(/\\s+/g, \"\")\n .trim();\n\n if (!cleaned) {\n return 0;\n }\n\n if (/[០-៩]/.test(cleaned)) {\n return fromKhmerNumber(cleaned);\n }\n\n return parseNumber(cleaned);\n}\n\n/**\n * Validate a money input.\n */\nexport function isValidMoney(\n value: unknown,\n): boolean {\n if (\n value === null ||\n value === undefined ||\n value === \"\"\n ) {\n return false;\n }\n\n if (typeof value === \"number\") {\n return Number.isFinite(value);\n }\n\n if (typeof value !== \"string\") {\n return false;\n }\n\n const input = value.trim();\n\n if (!input) {\n return false;\n }\n\n const cleaned = input\n .replace(/៛/g, \"\")\n .replace(/រៀល/g, \"\")\n .replace(/\\s+/g, \"\")\n .trim();\n\n if (!cleaned) {\n return false;\n }\n\n const arabic = cleaned.replace(\n /[០-៩]/g,\n (digit) => {\n const map: Record<string, string> = {\n \"០\": \"0\",\n \"១\": \"1\",\n \"២\": \"2\",\n \"៣\": \"3\",\n \"៤\": \"4\",\n \"៥\": \"5\",\n \"៦\": \"6\",\n \"៧\": \"7\",\n \"៨\": \"8\",\n \"៩\": \"9\",\n };\n\n return map[digit] ?? digit;\n },\n );\n\n const normalized = arabic.replace(\n /,/g,\n \"\",\n );\n\n return /^[-+]?\\d+(\\.\\d+)?$/.test(\n normalized,\n );\n}","const DIGITS = [\n \"សូន្យ\",\n \"មួយ\",\n \"ពីរ\",\n \"បី\",\n \"បួន\",\n \"ប្រាំ\",\n \"ប្រាំមួយ\",\n \"ប្រាំពីរ\",\n \"ប្រាំបី\",\n \"ប្រាំបួន\",\n];\n\nconst TENS: Record<number, string> = {\n 2: \"ម្ភៃ\",\n 3: \"សាមសិប\",\n 4: \"សែសិប\",\n 5: \"ហាសិប\",\n 6: \"ហុកសិប\",\n 7: \"ចិតសិប\",\n 8: \"ប៉ែតសិប\",\n 9: \"កៅសិប\",\n};\n\nconst SCALES = [\n \"\",\n \"ពាន់\",\n \"លាន\",\n \"ពាន់លាន\",\n \"ទ្រីលាន\",\n \"ក្វាទ្រីលាន\",\n];\n\nfunction under100(\n value: number,\n): string {\n if (value < 10) {\n return DIGITS[value]?? '';\n }\n\n if (value === 10) {\n return \"ដប់\";\n }\n\n if (value < 20) {\n return `ដប់${DIGITS[value - 10]}`;\n }\n\n const tens = Math.floor(value / 10);\n var ones: number;\n ones = value % 10;\n\n let result = TENS[tens];\n\n if (ones > 0) {\n result += DIGITS[ones]??'';\n }\n\n return result??'';\n}\n\nfunction under1000(\n value: number,\n): string {\n if (value === 0) {\n return \"\";\n }\n\n const hundreds =\n Math.floor(value / 100);\n\n const remainder =\n value % 100;\n\n let result = \"\";\n\n if (hundreds > 0) {\n result +=\n `${DIGITS[hundreds]}រយ`;\n }\n\n if (remainder > 0) {\n result += under100(remainder);\n }\n\n return result;\n}\n\nfunction integerToKhmerText(\n value: number,\n): string {\n if (value === 0) {\n return DIGITS[0]??'';\n }\n\n let number = value;\n let groupIndex = 0;\n let result = \"\";\n\n while (number > 0) {\n const group = number % 1000;\n\n if (group !== 0) {\n const text =\n under1000(group);\n\n const scale =\n SCALES[groupIndex] ?? \"\";\n\n result =\n text + scale + result;\n }\n\n number =\n Math.floor(number / 1000);\n\n groupIndex++;\n }\n\n return result;\n}\n\n\n/**\n * Convert a number to Khmer text.\n *\n * Example:\n *\n * 123 -> មួយរយម្ភៃបី\n */\nexport function numberToKhmerText(\n value: number | string,\n): string {\n if (\n value === null ||\n value === undefined ||\n value === \"\"\n ) {\n return DIGITS[0]??'';\n }\n\n const normalized =\n String(value)\n .replace(/,/g, \"\")\n .trim();\n\n const number =\n Number(normalized);\n\n if (!Number.isFinite(number)) {\n return \"\";\n }\n\n if (number === 0) {\n return DIGITS[0]??'';\n }\n\n if (number < 0) {\n return `ដក${numberToKhmerText(\n Math.abs(number),\n )}`;\n }\n\n return integerToKhmerText(\n Math.floor(number),\n );\n}\n\n/**\n * Convert a decimal number to Khmer text.\n *\n * Example:\n *\n * 123.45\n * ->\n * មួយរយម្ភៃបីចុចបួនប្រាំ\n */\nexport function decimalToKhmerText(\n value: number | string,\n): string {\n if (\n value === null ||\n value === undefined ||\n value === \"\"\n ) {\n return DIGITS[0]??'';\n }\n\n const normalized =\n String(value)\n .replace(/,/g, \"\")\n .trim();\n\n const number =\n Number(normalized);\n\n if (!Number.isFinite(number)) {\n return \"\";\n }\n\n if (!normalized.includes(\".\")) {\n return numberToKhmerText(\n normalized,\n );\n }\n\n const [\n integerPart='',\n decimalPart = '',\n ] = normalized.split(\".\");\n\n const integerText =\n numberToKhmerText(integerPart);\n\n const decimalText = numberToKhmerText(decimalPart);\n // const decimalText =\n // decimalPart\n // .split(\"\")\n // .map(\n // (digit) =>\n // DIGITS[Number(digit)],\n // )\n // .join(\"\");\n\n return `${integerText}ចុច${decimalText}`;\n}\n\n/**\n * Format KHR amount as Khmer text.\n *\n * Example:\n *\n * 10000 -> មួយម៉ឺនរៀល\n */\nexport function numberToKhmerMoneyText(\n value: number | string,\n): string {\n return `${numberToKhmerText(value)}រៀល`;\n}"]}