@nexim/sanitizer
Version:
A collection of sanitization utilities for phone numbers and numeric inputs with TypeScript type safety.
97 lines (95 loc) • 3.74 kB
JavaScript
/* @nexim/sanitizer v1.1.0 */
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/main.ts
var main_exports = {};
__export(main_exports, {
sanitizeNumberStringToEnglish: () => sanitizeNumberStringToEnglish,
sanitizeNumberToEnglish: () => sanitizeNumberToEnglish,
sanitizePhoneNumber: () => sanitizePhoneNumber
});
module.exports = __toCommonJS(main_exports);
var import_is_number = require("@alwatr/is-number");
var import_logger = require("@alwatr/logger");
var import_package_tracer = require("@alwatr/package-tracer");
var import_unicode_digits = require("@alwatr/unicode-digits");
__dev_mode__: import_package_tracer.packageTracer.add("@nexim/sanitizer", "1.1.0");
var logger = (0, import_logger.createLogger)("@nexim/sanitizer");
var unicodeDigits = new import_unicode_digits.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 (!(0, import_is_number.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 (!(0, import_is_number.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 || !(0, import_is_number.isNumber)(fullNumber)) {
logger.incident?.("sanitizePhoneNumber", "invalid_full_number", { fullNumber });
return null;
}
return +fullNumber;
}
//# sourceMappingURL=main.cjs.map