fuzzy-tools
Version:
Functions for fuzzy matching and items filtering
68 lines (67 loc) • 2.03 kB
JavaScript
;
exports.__esModule = true;
exports.defaultOptions = defaultOptions;
exports.getDataExtractor = getDataExtractor;
exports.getValue = getValue;
exports.isFunction = isFunction;
exports.isObject = isObject;
exports.isString = isString;
var DEFAULT_OPTIONS = {
caseSensitive: false,
withScore: false,
withWrapper: null,
withRanges: false,
itemWrapper: null,
rates: {}
};
function defaultOptions(options) {
return options ? Object.assign({}, DEFAULT_OPTIONS, options) : DEFAULT_OPTIONS;
}
function isFunction(value) {
return typeof value === 'function';
}
function isObject(value) {
return typeof value === 'object';
}
function isString(value) {
return typeof value === 'string';
}
function getValue(obj, keys) {
if (keys === void 0) {
keys = [];
}
if (!obj || !isObject(obj)) return undefined;
var value = obj;
var keysList = Array.isArray(keys) ? keys : String(keys).split('.');
while (keysList.length && value) {
var k = keysList.shift();
value = !value || !isObject(value) ? undefined : value[k];
}
return value;
}
function getDataExtractor(fields) {
var _ref;
if (!fields) return null;
var fieldsList = Object.entries(Array.isArray(fields) ? fields.reduce(function (R, el) {
var _Object$assign;
return Object.assign(R, (_Object$assign = {}, _Object$assign[el] = 1, _Object$assign));
}, {}) : isObject(fields) ? fields : (_ref = {}, _ref[fields] = 1, _ref)).map(function (_ref2) {
var k = _ref2[0],
rate = _ref2[1];
return {
rate: parseFloat(rate) || 1,
field: k,
path: k
};
});
if (fieldsList.length == 0) return null;
return function (value) {
if (isString(fields)) return getValue(value, fields);
return fieldsList.reduce(function (R, el) {
var _Object$assign2;
return Object.assign(R, (_Object$assign2 = {}, _Object$assign2[el.field] = el.rate === 1 ? getValue(value, el.path) : Object.assign({}, el, {
value: getValue(value, el.path)
}), _Object$assign2));
}, {});
};
}