40 lines
961 B
JavaScript
40 lines
961 B
JavaScript
|
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;
|
||
|
};
|