getSafe.js 934 B

12345678910111213141516171819202122232425262728293031323334
  1. // Safe toJSON
  2. module.exports =
  3. function getSafe (self, uuid) {
  4. if (typeof self === 'object' || typeof self === 'function') var safe = {}
  5. if (Array.isArray(self)) var safe = []
  6. var recurse = []
  7. Object.defineProperty(self, uuid, {})
  8. var attrs = Object.keys(self).filter(function (i) {
  9. if (i === uuid) return false
  10. if ( (typeof self[i] !== 'object' && typeof self[i] !== 'function') || self[i] === null) return true
  11. return !(Object.getOwnPropertyDescriptor(self[i], uuid))
  12. })
  13. for (var i=0;i<attrs.length;i++) {
  14. if ( (typeof self[attrs[i]] !== 'object' && typeof self[attrs[i]] !== 'function') ||
  15. self[attrs[i]] === null
  16. ) {
  17. safe[attrs[i]] = self[attrs[i]]
  18. } else {
  19. recurse.push(attrs[i])
  20. Object.defineProperty(self[attrs[i]], uuid, {})
  21. }
  22. }
  23. for (var i=0;i<recurse.length;i++) {
  24. safe[recurse[i]] = getSafe(self[recurse[i]], uuid)
  25. }
  26. return safe
  27. }