safeSet.js 750 B

1234567891011121314151617181920212223242526272829
  1. var castPath = require('./castPath');
  2. var isUndef = require('./isUndef');
  3. var toStr = require('./toStr');
  4. var isSymbol = require('./isSymbol');
  5. var isStr = require('./isStr');
  6. exports = function(obj, path, val) {
  7. path = castPath(path, obj);
  8. var lastProp = path.pop();
  9. var prop;
  10. prop = path.shift();
  11. while (!isUndef(prop)) {
  12. if (!isStr(prop) && !isSymbol(prop)) {
  13. prop = toStr(prop);
  14. }
  15. if (
  16. prop === '__proto__' ||
  17. prop === 'constructor' ||
  18. prop === 'prototype'
  19. ) {
  20. return;
  21. }
  22. if (!obj[prop]) obj[prop] = {};
  23. obj = obj[prop];
  24. prop = path.shift();
  25. }
  26. obj[lastProp] = val;
  27. };
  28. module.exports = exports;