@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
JavaScript
/* @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