dataveil
Version:
A robust TypeScript library for masking sensitive data including card numbers, emails, passwords, phone numbers, and more.
47 lines (46 loc) • 1.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.maskPhoneNumber = maskPhoneNumber;
function maskPhoneNumber(phone, options) {
if (options === void 0) { options = {}; }
if (!phone || typeof phone !== 'string') {
throw new Error('Phone number must be a non-empty string');
}
var _a = options.maskChar, maskChar = _a === void 0 ? "*" : _a, _b = options.unmaskedStartDigits, unmaskedStartDigits = _b === void 0 ? 0 : _b, _c = options.unmaskedEndDigits, unmaskedEndDigits = _c === void 0 ? 4 : _c;
if (!maskChar || maskChar.length !== 1) {
throw new Error('Mask character must be a single character');
}
if (unmaskedStartDigits < 0 || unmaskedEndDigits < 0) {
throw new Error('Unmasked digits cannot be negative');
}
var prefix = "";
var workingPhone = phone;
// Extract prefix
if (phone.startsWith("+")) {
prefix = "+";
workingPhone = phone.slice(1);
}
else if (phone.startsWith("00")) {
prefix = "00";
workingPhone = phone.slice(2);
}
// Extract digits and their positions
var digits = workingPhone.replace(/[^0-9]/g, "");
if (digits.length === 0) {
throw new Error('Phone number must contain at least one digit');
}
// Create mask pattern
var startVisible = Math.min(unmaskedStartDigits, digits.length);
var endVisible = Math.min(unmaskedEndDigits, digits.length - startVisible);
var resultArray = (prefix + workingPhone).split('');
var digitIndex = 0;
for (var i = prefix.length; i < resultArray.length; i++) {
if (/[0-9]/.test(resultArray[i])) {
if (digitIndex >= startVisible && digitIndex < digits.length - endVisible) {
resultArray[i] = maskChar;
}
digitIndex++;
}
}
return resultArray.join('');
}