index.js 1.8 KB

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