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 )