UNPKG

feathers-snake-case-hook

Version:

A service hook to convert params.query into snake_case

75 lines (64 loc) 2 kB
'use strict'; 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'];