UNPKG

@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
/* @nexim/sanitizer v1.1.0 */ "use strict"; 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