UNPKG

sanitise

Version:

A simple utility function that sanitises specified object key values.

53 lines (41 loc) 1.55 kB
'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 DEFAULT_REPLACEMENT = '******'; var isObject = function isObject(obj) { return Object.prototype.toString.call(obj) === '[object Object]'; }; var isArrayOfObjects = function isArrayOfObjects(obj) { return Array.isArray(obj) && obj.length && obj.every(function (x) { return isObject(x); }); }; var replaceValueIfMatchedKey = function replaceValueIfMatchedKey(blacklist, obj, key) { var cloneObj = _extends({}, obj); var matchedProperty = blacklist.find(function (x) { return x.key === key; }); if (matchedProperty) { cloneObj[key] = matchedProperty.replaceWith || DEFAULT_REPLACEMENT; } return cloneObj; }; var sanitise = function sanitise(blacklist) { return function (obj) { if (!isArrayOfObjects(blacklist)) { throw new Error('Blacklist supplied must be an array of objects.'); } if (!isObject(obj)) { throw new Error('Object supplied to sanitise is not of type object.'); } var cloneObj = _extends({}, obj); for (var key in cloneObj) { if (isObject(cloneObj[key])) { cloneObj[key] = sanitise(blacklist)(cloneObj[key]); } else { cloneObj = replaceValueIfMatchedKey(blacklist, cloneObj, key); } } return cloneObj; }; }; module.exports = sanitise;