127.0.0.1:8000 watch-together / master src / js / utils / index.js
master

Tree @master (Download .tar.gz)

index.js @masterraw · history · blame

const moment = require('moment');
const zxcvbn = require('zxcvbn');

module.exports = {
    validate: {
        keys: function(obj, keys) {
            for (const key_data of keys) {
                let [key, error, validator] = Array.isArray(key_data) ? key_data : [key_data];
                validator = validator || (x => x);
                error = error || "Invalid Request";

                if (!Object.prototype.hasOwnProperty.call(obj, key) || !validator(obj[key])) {
                    logger.log("key", key, "missing or invalid in obj", obj);
                    return new Promise((_, r) => r(error));
                }
            }
            return new Promise(r => r(obj));
        },
        email: function(str) {
            return typeof str === "string" && str.match(/.+@.+\..+/) !== null;
        },
        password: function(str) {
            return zxcvbn(str);
        },
        uuid: function(str) {
            return typeof str === "string" && str.match(/^([0-9]|[a-f]){8}-([0-9]|[a-f]){4}-4([0-9]|[a-f]){3}-[8,9,a,b]([0-9]|[a-f]){3}-([0-9]|[a-f]){12}$/i) !== null;
        }
    },
    resolve: data => new Promise(r => r(data)),
    reject: error => new Promise((_, r) => r(error)),
    round: function(num) {
        return Math.round((num + Number.EPSILON) * 100) / 100;
    },
    format_time: function(time) {
        return moment(time).format("dddd MMM Do");
    },
    setIntervalAndTriggerImmediate: function(callback, interval) {
        setTimeout(callback);
        return setInterval(callback, interval);
    }
};