feathers-snake-case-hook
Version:
A service hook to convert params.query into snake_case
75 lines (64 loc) • 2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = toSnakeCase;
var _lodash = require('lodash');
function toSnakeCase() {
for (var _len = arguments.length, except = Array(_len), _key = 0; _key < _len; _key++) {
except[_key] = arguments[_key];
}
var filters = ['$eager', '$search', '$select', '$limit', '$skip', '$populate', '$sort'];
var snakeFields = function snakeFields(data) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = Object.keys(data)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var key = _step.value;
if (!except.includes(key) && !filters.includes(key)) {
var snakedKey = (0, _lodash.snakeCase)(key);
data[snakedKey] = data[key];
if (snakedKey !== key) {
delete data[key];
}
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
};
return function (hook) {
if (hook.type !== 'before') {
throw new Error('"snakeCase" must be used in before hook only.');
}
// If no `params` or `query` specified
if (!hook.params || !hook.params.query) {
return hook;
}
if (hook.params.query) {
snakeFields(hook.params.query);
}
if (hook.params.query.$sort) {
snakeFields(hook.params.query.$sort);
}
if (hook.params.query.$select) {
hook.params.query.$select = hook.params.query.$select.map(function (col) {
return (0, _lodash.snakeCase)(col);
});
}
return hook;
};
}
module.exports = exports['default'];