UNPKG

@nexim/sanitizer

Version:

A collection of sanitization utilities for phone numbers and numeric inputs with TypeScript type safety.

77 lines (75 loc) 2.61 kB
/* @nexim/sanitizer v1.1.0 */ // src/main.ts import { isNumber } from "@alwatr/is-number"; import { createLogger } from "@alwatr/logger"; import { packageTracer } from "@alwatr/package-tracer"; import { UnicodeDigits } from "@alwatr/unicode-digits"; __dev_mode__: packageTracer.add("@nexim/sanitizer", "1.1.0"); var logger = createLogger("@nexim/sanitizer"); var unicodeDigits = new UnicodeDigits("en"); function sanitizeNumberToEnglish(number) { if (typeof number === "number") { return number; } if (typeof number === "string") { let str = number.trim(); if (str === "") { logger.incident?.("sanitizeNumberToEnglish", "empty_string", { number }); return null; } str = unicodeDigits.translate(str); if (!isNumber(str)) { logger.incident?.("sanitizeNumberToEnglish", "not_a_number", { number }); return null; } return +str; } logger.incident?.("sanitizeNumberToEnglish", "invalid_input", { number }); return null; } function sanitizeNumberStringToEnglish(number) { if (typeof number === "number") { return String(number); } if (typeof number === "string") { let str = number.trim(); if (str === "") { logger.incident?.("sanitizeNumberStringToEnglish", "empty_string", { number }); return null; } str = unicodeDigits.translate(str); if (!isNumber(str)) { logger.incident?.("sanitizeNumberStringToEnglish", "not_a_number", { number }); return null; } return str; } logger.incident?.("sanitizeNumberStringToEnglish", "invalid_input", { number }); return null; } function sanitizePhoneNumber(input, countryCode = "98") { if (input == null) { logger.incident?.("sanitizePhoneNumber", "undefined_or_null_input", { input }); return null; } const inputStr = typeof input === "string" ? input.trim() : String(input); if (inputStr === "") { logger.incident?.("sanitizePhoneNumber", "empty_input_string", { input }); return null; } const englishDigits = unicodeDigits.translate(inputStr); const withoutSpecialChars = englishDigits.replace(/[ )(-]+/g, ""); const cleanNumber = withoutSpecialChars.replace(new RegExp(`^(\\+${countryCode}|${countryCode}|^0)`), ""); const fullNumber = countryCode + cleanNumber; if (fullNumber.length !== countryCode.length + 10 || !isNumber(fullNumber)) { logger.incident?.("sanitizePhoneNumber", "invalid_full_number", { fullNumber }); return null; } return +fullNumber; } export { sanitizeNumberStringToEnglish, sanitizeNumberToEnglish, sanitizePhoneNumber }; //# sourceMappingURL=main.mjs.map