UNPKG

unset-value

Version:

Delete nested properties from an object using dot notation.

50 lines (41 loc) 1.11 kB
/*! * unset-value <https://github.com/jonschlinkert/unset-value> * * Copyright (c) 2015, 2017, Jon Schlinkert. * Released under the MIT License. */ 'use strict'; var isObject = require('isobject'); var has = require('has-value'); const isUnsafeKey = key => { return key === '__proto__' || key === 'constructor' || key === 'prototype'; }; const validateKey = key => { if (isUnsafeKey(key)) { throw new Error(`Cannot set unsafe key: "${key}"`); } }; module.exports = function unset(obj, prop) { if (!isObject(obj)) { throw new TypeError('expected an object.'); } var isArray = Array.isArray(prop); if (!isArray && obj.hasOwnProperty(prop)) { delete obj[prop]; return true; } if (has(obj, prop)) { var segs = isArray ? prop.slice() : prop.split('.'); var last = segs.pop(); while (segs.length && segs[segs.length - 1].slice(-1) === '\\') { last = segs.pop().slice(0, -1) + '.' + last; } while (segs.length) { prop = segs.shift(); validateKey(prop); obj = obj[prop]; } return (delete obj[last]); } return true; };