| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- const URL = require('url');
- const ms = require('ms');
- const { differenceInDays, differenceInHours, differenceInMonths } = require('date-fns');
- const config = require('../config');
- exports.addProtocol = url => {
- const hasProtocol = /^https?/.test(URL.parse(url).protocol);
- return hasProtocol ? url : `http://${url}`;
- };
- exports.generateShortUrl = (id, domain) =>
- `http${!domain ? 's' : ''}://${domain || config.DEFAULT_DOMAIN}/${id}`;
- exports.isAdmin = email => config.ADMIN_EMAILS.includes(email);
- exports.getStatsCacheTime = total => {
- switch (true) {
- case total <= 5000:
- return ms('15 minutes') / 1000;
- case total > 5000 && total < 20000:
- return ms('1 hour') / 1000;
- case total < 40000:
- return ms('3 hours') / 1000;
- case total > 40000:
- return ms('6 hours') / 1000;
- default:
- return ms('15 minutes') / 1000;
- }
- };
- exports.statsObjectToArray = item => {
- const objToArr = key =>
- Array.from(Object.keys(item[key]))
- .map(name => ({
- name,
- value: item[key][name],
- }))
- .sort((a, b) => b.value - a.value);
- return {
- browser: objToArr('browser'),
- os: objToArr('os'),
- country: objToArr('country'),
- referrer: objToArr('referrer'),
- };
- };
- exports.getDifferenceFunction = type => {
- switch (type) {
- case 'lastDay':
- return differenceInHours;
- case 'lastWeek':
- return differenceInDays;
- case 'lastMonth':
- return differenceInDays;
- case 'allTime':
- return differenceInMonths;
- default:
- return null;
- }
- };
- const getUTCDate = (dateString = Date.now()) => {
- const date = new Date(dateString);
- return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours());
- };
- exports.getUTCDate = getUTCDate;
|