JSFiddle - React, Tailwind, and code Playground

by Danny Michaelis

Babel + JSX

const retObj = {
	data: [ 'a', 'b', 'c' ]
}

function _SO( unsafeObject, def={}) {//( unsafeObject, def=new Error(), recursive=false )
	return new Proxy(retObj, {
      get: function(target, name) {
        if ( name in target ) {
          if ( typeof target[name] === 'object') return new Proxy(target[name], this)
					return target[name]
        } else {
					if ( def instanceof Error ) {
          	def.message = `${def.message} Failed to get '${name}' from ${JSON.stringify(target)}`
          	throw def
          } else {
	          return new Proxy(def, this)
          }					
        } 
      }
  } );
}

var safe = _SO( retObj, new Error() )

console.log( 'safe', safe )
console.log( 'retObj.empty ', x, x.empty )
console.log( 'safe.empty ', safe.empty )
console.log( 'safe.data', safe.data )
console.log( 'safe.data.empty', safe.data.empty )
console.log( 'safe.data[0]', safe.data[0] )
console.log( 'safe.data[5]', safe.data[5] )
console.log( 'safe.data[0].data', safe.data[0].data )
console.log( 'safe.data[5].data', safe.data[5].data )