TryGhost/Ghost

View on GitHub
ghost/data-generator/lib/utils/event-generator.js

Summary

Maintainability
A
0 mins
Test Coverage
const probabilityDistributions = require('probability-distributions');

const generateEvents = ({
    shape = 'flat',
    trend = 'positive',
    total = 0,
    startTime = new Date(),
    endTime = new Date()
} = {}) => {
    if (total <= 0) {
        return [];
    }

    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;