const mb = function(path) {
  return function(obj) {
    return (
      path.map(function(prop) {
        obj = obj || {};
        if (isNaN(parseInt(prop))) {
          return (obj = obj[prop]);
        } else {
          return (obj = obj.objectAt(parseInt(prop)));
        }
      }) && obj
    );
  };
};
let currentPage;
export const getCurrentPage = function() {
  return currentPage;
};
export const setCurrentPage = function(page) {
  currentPage = page;
  return page;
};
export const find = function(path, page = currentPage) {
  const parts = path.split('.');
  const last = parts.pop();
  let obj;
  let parent = mb(parts)(page) || page;
  if (typeof parent.objectAt === 'function') {
    parent = parent.objectAt(0);
  }
  obj = parent[last];
  if (typeof obj === 'undefined') {
    throw new Error(`PageObject not found: The '${path}' object doesn't exist`);
  }
  if (typeof obj === 'function') {
    obj = obj.bind(parent);
  }
  return obj;
};
