UNPKG

message-await

Version:

A utility to print message with an async success or failure in node.js

172 lines (171 loc) 6.11 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); var readline_1 = require("readline"); var cli_cursor_1 = require("cli-cursor"); var constants_1 = require("./constants"); __exportStar(require("./contracts"), exports); // eslint-disable-next-line @typescript-eslint/no-var-requires var logSymbols = require('log-symbols'); /** * prints the initial message * @param message - message to display * @param options - MessageAwaitOptions * @returns MessageAwait - options to complete the message when done or update the message with progress info */ function print(message, options) { var requiredOptions = __assign(__assign({}, constants_1.defaultOptions), options); var timeout; var isComplete = false; var dotCount = 3; function generateMessage() { var dots = Array.from({ length: dotCount }) .map(function () { return '.'; }) .join(''); while (dots.length < 3) { dots = dots + ' '; } return requiredOptions.format(message + dots); } function resetCursor() { (0, readline_1.cursorTo)(process.stdout, 0); (0, readline_1.clearLine)(process.stdout, 1); } function writeMessage() { resetCursor(); process.stdout.write(generateMessage()); } function startTimer() { dotCount = 0; writeMessage(); timeout = setInterval(function () { switch (dotCount) { case 3: dotCount = 0; writeMessage(); break; default: dotCount++; writeMessage(); } }, 300).unref(); } function updateMessage(messageUpdate, spinner) { if (isComplete) { throw new Error("Progress Message is complete"); } if (spinner === true && timeout == null) { startTimer(); } else if (spinner === false && timeout != null) { dotCount = 0; clearInterval(timeout); timeout = undefined; } message = messageUpdate; writeMessage(); } function log(logMessage) { var optional = []; for (var _i = 1; _i < arguments.length; _i++) { optional[_i - 1] = arguments[_i]; } if (isComplete) { throw new Error("Progress Message is complete"); } resetCursor(); console.log.apply(console, __spreadArray([logMessage], optional, false)); writeMessage(); } function complete(success, updateMessage) { if (success === void 0) { success = true; } isComplete = true; if (timeout != null) { clearInterval(timeout); } dotCount = 3; resetCursor(); message = updateMessage || message; if (success) { console.log("".concat(generateMessage(), " ").concat(logSymbols.success)); } else { console.log("".concat(generateMessage(), " ").concat(logSymbols.error)); } if (requiredOptions.hideCursor) { (0, cli_cursor_1.show)(); } } function success(updateMessage) { return complete(true, updateMessage); } function fail(updateMessage) { return complete(false, updateMessage); } function getMessage() { return message; } function await(promise, exitProcess, printError, updateSuccessMessage, updateFailureMessage) { return (typeof promise === 'function' ? promise({ complete: complete, log: log, updateMessage: updateMessage, getMessage: getMessage, success: success, fail: fail }) : promise) .then(function (value) { complete(true, typeof updateSuccessMessage === 'function' ? updateSuccessMessage(value) : updateSuccessMessage); return value; }) .catch(function (err) { complete(false, typeof updateFailureMessage === 'function' ? updateFailureMessage(err) : updateFailureMessage); if (printError) { console.error(err); } if (exitProcess) { process.exit(); } return Promise.reject(err); }); } if (requiredOptions.hideCursor) { (0, cli_cursor_1.hide)(); } if (requiredOptions.spinner) { startTimer(); } else { writeMessage(); } return { complete: complete, log: log, updateMessage: updateMessage, getMessage: getMessage, success: success, fail: fail, await: await }; } exports.default = print;