UNPKG

masked

Version:

Mask sensitive values in objects

88 lines (76 loc) 3.06 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory() : typeof define === 'function' && define.amd ? define(factory) : (factory()); }(this, (function () { 'use strict'; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _repeat = require('lodash/repeat'); var _forOwn = require('lodash/forOwn'); var MASK_CHAR = '*'; var _parse = function _parse(string) { if (typeof string === 'string') { try { return JSON.parse(string); } catch (err) { return null; } } return null; }; var _maskedString = function _maskedString(_ref) { var length = _ref.length, maskChar = _ref.maskChar; return _repeat(maskChar, length); }; var masked = function masked(data, keys) { var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, omitKeys = _ref2.omitKeys; if (!data) { return null; } if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) !== 'object' && !_parse(data)) { return data; } if (!keys || !Array.isArray(keys) && typeof keys !== 'string') { if (!keys) { throw new Error('Second parameter `keys` not given'); } throw new TypeError('Expected a string or array, got ' + (typeof keys === 'undefined' ? 'undefined' : _typeof(keys))); } var newData = _parse(data) || data; if (Array.isArray(newData)) { newData = newData.map(function (newData) { if ((typeof newData === 'undefined' ? 'undefined' : _typeof(newData)) !== 'object') { return newData; } return masked(newData, keys, { omitKeys: omitKeys }); }); } else { newData = _extends({}, newData); _forOwn(newData, function (value, key) { if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') { if (Array.isArray(value) && Array.isArray(keys) && keys.includes(key)) { if (omitKeys) { delete newData[key]; } else { newData[key] = value.map(function () { return _maskedString({ length: 8, maskChar: MASK_CHAR }); }); } } else { newData[key] = masked(value, keys, { omitKeys: omitKeys }); } } else if (key === keys || Array.isArray(keys) && keys.includes(key)) { if (omitKeys) { delete newData[key]; } else { newData[key] = _maskedString({ length: 8, maskChar: MASK_CHAR }); } } }); } return typeof data === 'string' && _parse(data) ? JSON.stringify(newData) : newData; }; module.exports = masked; })));