index.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. const URL = require('url');
  2. const ms = require('ms');
  3. const { differenceInDays, differenceInHours, differenceInMonths } = require('date-fns');
  4. exports.addProtocol = url => {
  5. const hasProtocol = /^https?/.test(URL.parse(url).protocol);
  6. return hasProtocol ? url : `http://${url}`;
  7. };
  8. exports.generateShortUrl = (id, domain, useHttps) => {
  9. const protocol = useHttps || !domain ? 'https://' : 'http://';
  10. return `${protocol}${domain || process.env.DEFAULT_DOMAIN}/${id}`;
  11. };
  12. exports.isAdmin = email =>
  13. process.env.ADMIN_EMAILS.split(',')
  14. .map(e => e.trim())
  15. .includes(email);
  16. exports.getStatsCacheTime = total => {
  17. switch (true) {
  18. case total <= 5000:
  19. return ms('5 minutes') / 1000;
  20. case total > 5000 && total < 20000:
  21. return ms('10 minutes') / 1000;
  22. case total < 40000:
  23. return ms('15 minutes') / 1000;
  24. case total > 40000:
  25. return ms('30 minutes') / 1000;
  26. default:
  27. return ms('5 minutes') / 1000;
  28. }
  29. };
  30. exports.statsObjectToArray = item => {
  31. const objToArr = key =>
  32. Array.from(Object.keys(item[key]))
  33. .map(name => ({
  34. name,
  35. value: item[key][name],
  36. }))
  37. .sort((a, b) => b.value - a.value);
  38. return {
  39. browser: objToArr('browser'),
  40. os: objToArr('os'),
  41. country: objToArr('country'),
  42. referrer: objToArr('referrer'),
  43. };
  44. };
  45. exports.getDifferenceFunction = type => {
  46. switch (type) {
  47. case 'lastDay':
  48. return differenceInHours;
  49. case 'lastWeek':
  50. return differenceInDays;
  51. case 'lastMonth':
  52. return differenceInDays;
  53. case 'allTime':
  54. return differenceInMonths;
  55. default:
  56. return null;
  57. }
  58. };
  59. const getUTCDate = (dateString = Date.now()) => {
  60. const date = new Date(dateString);
  61. return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours());
  62. };
  63. exports.getUTCDate = getUTCDate;