Files
bigcapital/server/src/utils/index.js
Ahmed Bouhuolia ab81f4be40 WIP
2020-03-19 17:02:37 +02:00

84 lines
1.9 KiB
JavaScript

import bcrypt from 'bcryptjs';
import moment from 'moment';
import _ from 'lodash';
const { map, isArray, isPlainObject, mapKeys, mapValues } = require('lodash')
const hashPassword = (password) => new Promise((resolve) => {
bcrypt.genSalt(10, (error, salt) => {
bcrypt.hash(password, salt, (err, hash) => { resolve(hash); });
});
});
const origin = (request) => `${request.protocol}://${request.hostname}`;
const dateRangeCollection = (fromDate, toDate, addType = 'day', increment = 1) => {
const collection = [];
const momentFromDate = moment(fromDate);
let dateFormat = '';
switch (addType) {
case 'day':
default:
dateFormat = 'YYYY-MM-DD'; break;
case 'month':
case 'quarter':
dateFormat = 'YYYY-MM'; break;
case 'year':
dateFormat = 'YYYY'; break;
}
for (let i = momentFromDate;
(i.isBefore(toDate, addType) || i.isSame(toDate, addType));
i.add(increment, `${addType}s`)) {
collection.push(i.endOf(addType).format(dateFormat));
}
return collection;
};
const dateRangeFormat = (rangeType) => {
switch (rangeType) {
case 'year':
return 'YYYY';
case 'month':
case 'quarter':
default:
return 'YYYY-MM';
}
};
const mapKeysDeep = (obj, cb) => {
if (_.isArray(obj)) {
return obj.map(innerObj => mapKeysDeep(innerObj, cb));
}
else if (_.isObject(obj)) {
return _.mapValues(
_.mapKeys(obj, cb),
val => mapKeysDeep(val, cb),
)
} else {
return obj;
}
}
const mapValuesDeep = (v, callback) => (
_.isObject(v)
? _.mapValues(v, v => mapValuesDeep(v, callback))
: callback(v));
const promiseSerial = (funcs) => {
return funcs.reduce((promise, func) => promise.then((result) => func().then(Array.prototype.concat.bind(result))),
Promise.resolve([]));
}
export {
hashPassword,
origin,
dateRangeCollection,
dateRangeFormat,
mapValuesDeep,
mapKeysDeep,
promiseSerial,
};