@e22m4u/js-repository-mongodb-adapter
Version:
MongoDB адаптер для @e22m4u/js-repository
45 lines (42 loc) • 1.16 kB
JavaScript
import {InvalidArgumentError} from '@e22m4u/js-repository';
/**
* @callback Transformer
* @param {*} value
* @returns {*}
*/
/**
* Transform values deep.
*
* @param {*} value
* @param {Transformer} transformer
* @returns {*}
*/
export function transformValuesDeep(value, transformer) {
if (!transformer || typeof transformer !== 'function')
throw new InvalidArgumentError(
'The second argument of "transformValuesDeep" ' +
'must be a Function, but %v given.',
transformer,
);
if (Array.isArray(value)) {
value.forEach((v, i) => (value[i] = transformValuesDeep(v, transformer)));
return value;
} else if (value && typeof value === 'object') {
// pure object
if (
!value.constructor ||
(value.constructor && value.constructor.name === 'Object')
) {
Object.keys(value).forEach(key => {
if (Object.prototype.hasOwnProperty.call(value, key))
value[key] = transformValuesDeep(value[key], transformer);
});
return value;
// Date, ObjectId etc..
} else {
return transformer(value);
}
} else {
return transformer(value);
}
}