UNPKG

role-calc

Version:

library to work with roles, contains calculation of times for the session, validation of required roles

104 lines (72 loc) 2 kB
import moment from 'moment'; import ms from 'ms'; // calc export function calc(roles, get, format) { if (roles.length > 0) { let array = []; let val = null; roles.forEach(role => role.ttl ? array.push(parseInt(ms(role.ttl || 0).toFixed(1))) : null); switch (get) { case 'max': val = Math.max.apply(null, array); break; case 'min': val = Math.min.apply(null, array); break; case 'sum': val = array.reduce((sum, x) => sum + x); break; case 'average': val = array.reduce((sum, x) => sum + x) / array.length;; break; default: } format = format || 'minutes'; val = `${moment.duration(val, 'milliseconds').as(format)} ${format}`; return val; } else { return null; } } // time export function time(base, user) { user = duplicity(user); let roles = []; user.forEach(role => base.forEach(brole => role === brole.role ? roles.push(brole) : null)); return roles; } // has export function has(base, user, filter) { let val = null; switch (filter) { case '*': val = all(base, user); break; default: val = any(base, user); } return val; } // any function any(base, user) { let found = false; user.forEach(_user => base.includes(_user) ? found = true : null); return found; } // all function all(base, user) { base = duplicity(base); user = duplicity(user); let count = 0; user.forEach(_user => base.includes(_user) ? count++ : null); // console.log(` // base: ${base.length} // user: ${user.length} // count: ${count} // `); return base.length == count; } // duplicity function duplicity(array) { return array.filter((elem, index, self) => index == self.indexOf(elem)); }