data-resolver
Version:
A data transformation resolver
24 lines (20 loc) • 795 B
JavaScript
;
var traverse = require('traverse');
function matches() {
var refPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var dataPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
return refPath.length === dataPath.length && refPath.reduce(function (memo, token, index) {
var dataPathToken = dataPath[index];
return memo && (dataPathToken === token || token === '*' && dataPathToken.match(/\d/));
}, true);
}
module.exports.getDataPathsForRefPath = function getDataPathsForRefPath(path, data) {
var paths = [];
var refPathArr = path.replace('$.', '').split('.');
traverse(data).forEach(function (node) {
if (matches(refPathArr, this.path)) {
paths.push(this.path);
}
});
return paths;
};