@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
53 lines • 6.61 kB
JavaScript
/**
* Obfuscates a string by replacing certain characters with a symbol.
*
* @param value the input string to obfuscate
* @param symbol the symbol for obfuscation
* @return the obfuscated string
*
* The function determines which characters to obfuscate using a regular expression and the string's length:
* - 8 or more: show first 2 and last 2 characters
* - 4 to 7: show first and last character
* - less than 4: obfuscate all characters
* - obfuscates only alphanumeric characters
*/
export function tuiObfuscate(value, symbol) {
if (!value) {
return value;
}
const match = /[\p{L}\p{N}]/gu;
let visible = 0;
let obfuscateIndexes = getObfuscateIndexes(value, match);
if (obfuscateIndexes.length >= 8) {
visible = 2;
}
else if (obfuscateIndexes.length >= 4) {
visible = 1;
}
obfuscateIndexes = obfuscateIndexes.slice(visible, obfuscateIndexes.length);
const lastIndex = (obfuscateIndexes.length) - visible;
obfuscateIndexes = obfuscateIndexes.slice(0, lastIndex < 0 ? 0 : lastIndex);
const result = value.split('');
obfuscateIndexes.forEach((index) => {
result[index] = symbol;
});
return result.join('');
}
function getObfuscateIndexes(value, match) {
if (!match) {
return Array.from({ length: value.length }).map((_, index) => index);
}
const obfuscateIndexes = [];
let matchResult;
let count = 0;
while ((matchResult = match.exec(value)) !== null && count < value.length) {
const start = matchResult.index;
const end = match.lastIndex - 1;
for (let i = start; i <= end; i++) {
obfuscateIndexes.push(i);
}
count++;
}
return obfuscateIndexes;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JmdXNjYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3V0aWxzL21pc2NlbGxhbmVvdXMvb2JmdXNjYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBYSxFQUFFLE1BQWM7SUFDdEQsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNSLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7SUFFL0IsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLElBQUksZ0JBQWdCLEdBQWEsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRW5FLElBQUksZ0JBQWdCLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtRQUM5QixPQUFPLEdBQUcsQ0FBQyxDQUFDO0tBQ2Y7U0FBTSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7UUFDckMsT0FBTyxHQUFHLENBQUMsQ0FBQztLQUNmO0lBRUQsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU1RSxNQUFNLFNBQVMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQXVCLENBQUMsR0FBRyxPQUFPLENBQUM7SUFFdkUsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTVFLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFL0IsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDL0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUMzQixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsS0FBYztJQUN0RCxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1IsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3RFO0lBRUQsTUFBTSxnQkFBZ0IsR0FBYSxFQUFFLENBQUM7SUFDdEMsSUFBSSxXQUFXLENBQUM7SUFDaEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRWQsT0FBTyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ3ZFLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDaEMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFFaEMsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMvQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUI7UUFFRCxLQUFLLEVBQUUsQ0FBQztLQUNYO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQztBQUM1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBPYmZ1c2NhdGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBjZXJ0YWluIGNoYXJhY3RlcnMgd2l0aCBhIHN5bWJvbC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgdGhlIGlucHV0IHN0cmluZyB0byBvYmZ1c2NhdGVcbiAqIEBwYXJhbSBzeW1ib2wgdGhlIHN5bWJvbCBmb3Igb2JmdXNjYXRpb25cbiAqIEByZXR1cm4gdGhlIG9iZnVzY2F0ZWQgc3RyaW5nXG4gKlxuICogVGhlIGZ1bmN0aW9uIGRldGVybWluZXMgd2hpY2ggY2hhcmFjdGVycyB0byBvYmZ1c2NhdGUgdXNpbmcgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIHRoZSBzdHJpbmcncyBsZW5ndGg6XG4gKiAtIDggb3IgbW9yZTogc2hvdyBmaXJzdCAyIGFuZCBsYXN0IDIgY2hhcmFjdGVyc1xuICogLSA0IHRvIDc6IHNob3cgZmlyc3QgYW5kIGxhc3QgY2hhcmFjdGVyXG4gKiAtIGxlc3MgdGhhbiA0OiBvYmZ1c2NhdGUgYWxsIGNoYXJhY3RlcnNcbiAqIC0gb2JmdXNjYXRlcyBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0dWlPYmZ1c2NhdGUodmFsdWU6IHN0cmluZywgc3ltYm9sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gL1tcXHB7TH1cXHB7Tn1dL2d1O1xuXG4gICAgbGV0IHZpc2libGUgPSAwO1xuICAgIGxldCBvYmZ1c2NhdGVJbmRleGVzOiBudW1iZXJbXSA9IGdldE9iZnVzY2F0ZUluZGV4ZXModmFsdWUsIG1hdGNoKTtcblxuICAgIGlmIChvYmZ1c2NhdGVJbmRleGVzLmxlbmd0aCA+PSA4KSB7XG4gICAgICAgIHZpc2libGUgPSAyO1xuICAgIH0gZWxzZSBpZiAob2JmdXNjYXRlSW5kZXhlcy5sZW5ndGggPj0gNCkge1xuICAgICAgICB2aXNpYmxlID0gMTtcbiAgICB9XG5cbiAgICBvYmZ1c2NhdGVJbmRleGVzID0gb2JmdXNjYXRlSW5kZXhlcy5zbGljZSh2aXNpYmxlLCBvYmZ1c2NhdGVJbmRleGVzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBsYXN0SW5kZXggPSAob2JmdXNjYXRlSW5kZXhlcy5sZW5ndGggc2F0aXNmaWVzIG51bWJlcikgLSB2aXNpYmxlO1xuXG4gICAgb2JmdXNjYXRlSW5kZXhlcyA9IG9iZnVzY2F0ZUluZGV4ZXMuc2xpY2UoMCwgbGFzdEluZGV4IDwgMCA/IDAgOiBsYXN0SW5kZXgpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gdmFsdWUuc3BsaXQoJycpO1xuXG4gICAgb2JmdXNjYXRlSW5kZXhlcy5mb3JFYWNoKChpbmRleCkgPT4ge1xuICAgICAgICByZXN1bHRbaW5kZXhdID0gc3ltYm9sO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5qb2luKCcnKTtcbn1cblxuZnVuY3Rpb24gZ2V0T2JmdXNjYXRlSW5kZXhlcyh2YWx1ZTogc3RyaW5nLCBtYXRjaD86IFJlZ0V4cCk6IG51bWJlcltdIHtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6IHZhbHVlLmxlbmd0aH0pLm1hcCgoXywgaW5kZXgpID0+IGluZGV4KTtcbiAgICB9XG5cbiAgICBjb25zdCBvYmZ1c2NhdGVJbmRleGVzOiBudW1iZXJbXSA9IFtdO1xuICAgIGxldCBtYXRjaFJlc3VsdDtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgd2hpbGUgKChtYXRjaFJlc3VsdCA9IG1hdGNoLmV4ZWModmFsdWUpKSAhPT0gbnVsbCAmJiBjb3VudCA8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBzdGFydCA9IG1hdGNoUmVzdWx0LmluZGV4O1xuICAgICAgICBjb25zdCBlbmQgPSBtYXRjaC5sYXN0SW5kZXggLSAxO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgICAgICAgb2JmdXNjYXRlSW5kZXhlcy5wdXNoKGkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY291bnQrKztcbiAgICB9XG5cbiAgICByZXR1cm4gb2JmdXNjYXRlSW5kZXhlcztcbn1cbiJdfQ==