mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-30 06:12:03 +03:00
44 lines
1.0 KiB
JavaScript
44 lines
1.0 KiB
JavaScript
|
const probabilityDistributions = require('probability-distributions');
|
||
|
|
||
|
const generateEvents = ({
|
||
|
shape = 'flat',
|
||
|
trend = 'positive',
|
||
|
total = 0,
|
||
|
startTime = new Date(),
|
||
|
endTime = new Date()
|
||
|
} = {}) => {
|
||
|
let alpha = 0;
|
||
|
let beta = 0;
|
||
|
let positiveTrend = trend === 'positive';
|
||
|
switch (shape) {
|
||
|
case 'linear':
|
||
|
alpha = 2;
|
||
|
beta = 1;
|
||
|
break;
|
||
|
case 'ease-in':
|
||
|
alpha = 4;
|
||
|
beta = 1;
|
||
|
break;
|
||
|
case 'ease-out':
|
||
|
alpha = 1;
|
||
|
beta = 4;
|
||
|
positiveTrend = !positiveTrend;
|
||
|
break;
|
||
|
case 'flat':
|
||
|
alpha = 1;
|
||
|
beta = 1;
|
||
|
break;
|
||
|
}
|
||
|
const data = probabilityDistributions.rbeta(total, alpha, beta, 0);
|
||
|
const startTimeValue = startTime.valueOf();
|
||
|
const timeDifference = endTime.valueOf() - startTimeValue;
|
||
|
return data.map((x) => {
|
||
|
if (!positiveTrend) {
|
||
|
x = 1 - x;
|
||
|
}
|
||
|
return new Date(startTimeValue + timeDifference * x);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = generateEvents;
|