UNPKG

ng-anonymize

Version:

Data anonymization library for Angular

159 lines (151 loc) 6.43 kB
import { __decorate } from 'tslib'; import { Pipe, ɵɵdefineInjectable, Injectable, NgModule } from '@angular/core'; /* Default settings exported for internal only Todo: allow consumer to query or set these */ var AnonymizeDefaultValues = { PhoneCcLength: 3, MaskChar: '*', LeftReveal: 3, RightReveal: 4 }; /* List of implemented anonymization methods. For more details, see documentation */ var AnonymizeMethod; (function (AnonymizeMethod) { AnonymizeMethod["Randomize"] = "randomize"; AnonymizeMethod["Shuffle"] = "shuffle"; AnonymizeMethod["First"] = "first"; AnonymizeMethod["Last"] = "last"; // Reveal only x last characters })(AnonymizeMethod || (AnonymizeMethod = {})); /* Method metadata for internal use only */ var AnonymizeMethods = [ { name: AnonymizeMethod.Randomize, label: 'Randomize' }, { name: AnonymizeMethod.Shuffle, label: 'Shuffle' }, { name: AnonymizeMethod.First, label: 'First' }, { name: AnonymizeMethod.Last, label: 'Last' }, ]; var AnonymizeDataType; (function (AnonymizeDataType) { AnonymizeDataType["Phone"] = "phone"; })(AnonymizeDataType || (AnonymizeDataType = {})); /* Predefined constants for text processing */ var ALPHABET = 'abcdefghijjklmnopqrstuvwyz'; var lowerAlpha = ALPHABET.split(''); var upperAlpha = ALPHABET.toUpperCase().split(''); var nums = '0123456789'.split(''); var AnonymizePipe = /** @class */ (function () { function AnonymizePipe() { } AnonymizePipe.prototype.transform = function (value, method, options) { if (method === void 0) { method = AnonymizeMethod.Randomize; } if (!value) return ''; // Extract options or default var _a = options || {}, type = _a.type, _b = _a.mask, mask = _b === void 0 ? AnonymizeDefaultValues.MaskChar : _b, bleed = _a.bleed; switch (method) { case AnonymizeMethod.First: // Replace all but first bleed characters by mask return value.split('').map(function (c, index) { return index < (bleed || AnonymizeDefaultValues.LeftReveal) ? c : mask; }).join(''); case AnonymizeMethod.Last: // Replace all but last bleed characters by mask return value.split('').map(function (c, index) { return index >= value.length - (bleed || AnonymizeDefaultValues.RightReveal) ? c : mask; }).join(''); case AnonymizeMethod.Randomize: // Replace each character with random value of same character class return value.split('').map(function (c, index) { var isLowerAlpha = lowerAlpha.indexOf(c) >= 0; var isUpperAlpha = upperAlpha.indexOf(c) >= 0; var isNum = nums.indexOf(c) >= 0; var charClass = isLowerAlpha ? lowerAlpha : isUpperAlpha ? upperAlpha : isNum ? nums : null; if (!charClass) return c; if (type === AnonymizeDataType.Phone) { if (index < AnonymizeDefaultValues.PhoneCcLength) return c; } return charClass[Math.floor(Math.random() * charClass.length)]; }).join(''); case AnonymizeMethod.Shuffle: // Swap positions of all characters, preserving position of same character class var chars = value.split(''); var shuffledAlpha_1 = chars .filter(function (c) { return lowerAlpha.indexOf(c) >= 0 || upperAlpha.indexOf(c) >= 0; }).sort(function () { return 0.5 - Math.random(); }); var shuffledNums_1 = chars .filter(function (c) { return nums.indexOf(c) >= 0; }).sort(function () { return 0.5 - Math.random(); }); return chars.map(function (c, index) { var isLowerAlpha = lowerAlpha.indexOf(c) >= 0; var isUpperAlpha = upperAlpha.indexOf(c) >= 0; var isNum = nums.indexOf(c) >= 0; var charClass = isLowerAlpha ? lowerAlpha : isUpperAlpha ? upperAlpha : isNum ? nums : null; if (!charClass) return c; if (type === AnonymizeDataType.Phone) { // If type = phone, do not transform first 3 characters if (index < AnonymizeDefaultValues.PhoneCcLength) return c; } var newChar = isNum ? shuffledNums_1.pop() : shuffledAlpha_1.pop(); if (isUpperAlpha) newChar = newChar.toUpperCase(); else if (isLowerAlpha) newChar = newChar.toLowerCase(); return newChar; }).join(''); default: return value || ''; } }; AnonymizePipe = __decorate([ Pipe({ name: 'anonymize', pure: true }) ], AnonymizePipe); return AnonymizePipe; }()); /* TODO: expose services for consumer */ var NgAnonymizeService = /** @class */ (function () { function NgAnonymizeService() { } NgAnonymizeService.ɵprov = ɵɵdefineInjectable({ factory: function NgAnonymizeService_Factory() { return new NgAnonymizeService(); }, token: NgAnonymizeService, providedIn: "root" }); NgAnonymizeService = __decorate([ Injectable({ providedIn: 'root' }) ], NgAnonymizeService); return NgAnonymizeService; }()); var NgAnonymizeModule = /** @class */ (function () { function NgAnonymizeModule() { } NgAnonymizeModule = __decorate([ NgModule({ declarations: [AnonymizePipe], imports: [], exports: [AnonymizePipe] }) ], NgAnonymizeModule); return NgAnonymizeModule; }()); /* * Public API Surface of ng-anonymize */ /** * Generated bundle index. Do not edit. */ export { AnonymizeDataType, AnonymizeDefaultValues, AnonymizeMethod, AnonymizeMethods, AnonymizePipe, NgAnonymizeModule, NgAnonymizeService }; //# sourceMappingURL=ng-anonymize.js.map