127.0.0.1:8000 smart-home-server / master server / utils / index.js
master

Tree @master (Download .tar.gz)

index.js @masterraw · history · blame

const {
    v4: uuid
} = require('uuid');

function enumify(arr, options) {
    options = Object.assign({
        randomize: false
    }, options || {});

    return arr.reduce(function(acc, val) {
        return Object.assign({
            [val]: options.randomize ? uuid() : (options.mapify ? true : val)
        }, acc);
    }, {});
}

function camelCase(string) {
    return string.charAt(0).toUpperCase() + string.substr(1);
}

function query(query, wildcards) {
    return new Promise(function(resolve, reject) {
        let args = [query, function(err, rows) {
            if (err) {
                reject(err);
            } else {
                resolve(rows);
            }
        }];

        if (wildcards) {
            args.splice(1, 0, wildcards);
        }

        MYSQL_POOL.query(...args);
    });
}

module.exports = {
    noop: o => o,
    uuid: uuid,
    enumify: enumify,
    camelCase: camelCase,
    // Queries as promises
    query: query,
    includes_substr: function(arr, str) {
        for (const val of arr) {
            if (val.toLowerCase().includes(str.toLowerCase())) {
                return true;
            }
        }
        return false;
    },
    ok: function(data) {
        return Object.assign({
            status: "ok"
        }, data || {});
    },
    error: function(error, data) {
        return Object.assign({
            status: error || "error"
        }, data || {});
    },
    asyncCallback: function(asyncFunctions, callback) {
        let finishedOperations = 0;
        let args = [];
        asyncFunctions.forEach(function(asyncFunction) {
            asyncFunction(function() {
                finishedOperations++;
                if (!args.length && arguments.length) {
                    args = [...arguments];
                }
                if (finishedOperations >= asyncFunctions.length) {
                    callback(...args);
                }
            });
        });

        if (!asyncFunctions.length) {
            callback();
        }
    },
};