docs: function safeGet (obj, path) {
      // split ['c:chart'].row[0] into ['c:chart', 'row', 0]
      var paths = path.replace(/\[/g, '.').replace(/\]/g, '').replace(/'/g, '').split('.')
  
      for (var i = 0; i < paths.length; i++) {
        if (paths[i] === '') {
          // the first can be empty string if the path starts with ['chart:c']
          continue
        }
  
        var objReference = 'obj["' + paths[i] + '"]'
        // the last must be always array, also if accessor is number, we want to initialize as array
        var emptySafe = ((i === paths.length - 1) || !isNaN(paths[i + 1])) ? '[]' : '{}'
        new Function('obj', objReference + ' = ' + objReference + ' || ' + emptySafe)(obj)
  
        obj = new Function('obj', 'return ' + objReference)(obj)
      }
  
      return obj
    }