RSS Git Download  Clone
Raw Blame History
const promiseUtils = require('./promise');
const os = require('os');
const fs = require('fs').promises;
const hash = require('./hash');

const path = require('path');

const wait = async (timeout) => {
    return await corySetTimeout(timeout);
}

const waitFile = async (timeout = 20000, file) => {
    const fsExtra = require('fs-extra');

    if (file === undefined) {
        file = `${os.tmpdir()}/p3x-wait-file-${path.parse(process.argv[1]).name}-${hash.string(process.argv.join())}.boot`
    }
    const exists = await fsExtra.pathExists(file);
    if (exists) {
        console.info(`${file} exists, no delay required`);
    } else {
        console.info(`${file} doesn't exist, waiting ${timeout}ms, then generate ${file}`);
        await wait(timeout);
        console.info(`${file} now exists`);
    }
    await fs.writeFile(file, String(Date.now()));
    return {
        timeout: timeout,
        file: file,
        exists: exists,
    }
}

const corySetTimeout = async (cb, timeout) => {
    if (timeout === undefined) {
        timeout = cb;
        cb = () => {
        };
    }
    const {resolve, reject, promise} = promiseUtils.deferred();

    promise.timer = setTimeout(async () => {
        try {
            await cb();
            resolve();
        } catch (e) {
            reject(e);
        }
    }, timeout)

    return promise;
}

const corySetInterval = async (cb, timeout) => {
    const {resolve, reject, promise} = promiseUtils.deferred();

    promise.timer = setInterval(async () => {
        try {
            await cb();
            resolve();
        } catch (e) {
            reject(e);
        }

    }, timeout)

    return promise;
}

module.exports.wait = wait;
module.exports.waitFile = waitFile;
module.exports.setTimeout = corySetTimeout;
module.exports.setInterval = corySetInterval;