@sugarcube/plugin-elasticsearch
Version:
Use [Elasticsearch](https://www.elastic.co/products/elasticsearch) for SugarCube data.
76 lines (56 loc) • 1.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.omitFromData = exports.unstripify = exports.stripUnderscores = void 0;
var _fp = require("lodash/fp");
/* eslint-disable no-use-before-define, no-plusplus, no-continue */
const mapUnitKeys = (fn, unit) => {
const mapArrays = ary => {
const newAry = [];
for (let i = 0; i < ary.length; i++) {
const value = ary[i];
if ((0, _fp.isPlainObject)(value)) {
newAry.push(mapUnitKeys(fn, value));
} else if ((0, _fp.isArray)(value)) {
newAry.push(mapArrays(value));
} else {
newAry.push(value);
}
}
return newAry;
};
const keys = Object.keys(unit);
const obj = {};
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
if (/^(_|\$)sc_elastic_score$/.test(key)) continue;
if (/_doc/.test(key)) {
obj[key] = unit[key];
continue;
}
const newKey = fn(key);
if ((0, _fp.isPlainObject)(unit[key])) {
obj[newKey] = mapUnitKeys(fn, unit[key]);
continue;
}
if ((0, _fp.isArray)(unit[key])) {
obj[newKey] = mapArrays(unit[key]);
continue;
}
obj[newKey] = unit[key];
}
return obj;
};
const stripUnderscores = unit => mapUnitKeys(key => key.replace(/^[_]+/, "$"), unit);
exports.stripUnderscores = stripUnderscores;
const unstripify = unit => mapUnitKeys(key => key.replace(/^[$$]/, "_"), unit);
exports.unstripify = unstripify;
const omitFromData = (fields, data) => {
const FIELD_NAME = /^_sc_elastic/;
return data.map(unit => {
const internalFields = Object.keys(unit).filter(k => FIELD_NAME.test(k));
return (0, _fp.omit)(internalFields.concat(fields), unit);
});
};
exports.omitFromData = omitFromData;