UNPKG

@lunaticmuch/front-matter-manipulator

Version:

A utility for parsing and manipulating documents with Front Matter

62 lines (50 loc) 1.77 kB
import getFieldPermutations from './getFieldPermutations.js'; import getDescendantProp from './getDescendantProp.js'; export default function filterByFields(filters, data, exclude) { var filtered = data.filter(function(data) { for (var i = 0; i < filters.length; i++) { if (exclude === true) { var isExcluded = excludeByField(filters[i], data); return isExcluded; } else { var isIncluded = includeByField(filters[i], data); return isIncluded; } } }); return filtered; } function includeByField(filter, data) { if (!filter) throw new Error('Missing value for "filter"'); if (!data) throw new Error('Missing value for "data"'); var field = filter[0]; var permutations = getFieldPermutations(field, data); var desiredValue = filter[1]; var trueValues = permutations.map(function(p) { return getDescendantProp(data, p); }); for (var i = 0; i < trueValues.length; i++) { var trueValue = trueValues[i]; if (trueValue === desiredValue) { return true; } } return false; } function excludeByField(filter, data) { if (!filter) throw new Error('Missing value for "filter"'); if (!data) throw new Error('Missing value for "data"'); var field = filter[0]; var permutations = getFieldPermutations(field, data); var desiredValue = filter[1]; var trueValues = permutations.map(function(p) { return getDescendantProp(data, p); }); for (var i = 0; i < trueValues.length; i++) { var trueValue = trueValues[i]; if (trueValue === desiredValue) { return false; } } return true; }