@e22m4u/js-repository-mongodb-adapter
Version:
MongoDB адаптер для @e22m4u/js-repository
39 lines (37 loc) • 1.07 kB
JavaScript
import {InvalidArgumentError} from '@e22m4u/js-repository';
/**
* Transform values deep.
*
* @param value
* @param transformer
* @return {*}
*/
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);
}
}