UNPKG

@sanity-codegen/cli

Version:
66 lines (56 loc) 2.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createAnimatedLogger = createAnimatedLogger; var _ora = _interopRequireDefault(require("ora")); var _rxjs = require("rxjs"); var _operators = require("rxjs/operators"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const minMessageTime = 1000; const logLevels = ['success', 'error', 'warn', 'info', 'verbose', 'debug']; function createAnimatedLogger(options) { let spinner = (0, _ora.default)(options).start(); const message$ = new _rxjs.Subject(); const stream$ = message$.pipe((0, _operators.concatMap)(message => (0, _rxjs.concat)((0, _rxjs.of)(message), (0, _rxjs.timer)(0))), (0, _operators.filter)(Boolean), (0, _operators.startWith)(null), (0, _operators.pairwise)(), (0, _operators.concatMap)(([prev, curr]) => { if ((prev === null || prev === void 0 ? void 0 : prev.level) === 'verbose' && (curr === null || curr === void 0 ? void 0 : curr.level) !== 'verbose') { // ensures the last bit is on the screen for a lil bit return (0, _rxjs.concat)((0, _rxjs.timer)(minMessageTime), (0, _rxjs.of)(curr)); } return (0, _rxjs.of)(curr); }), (0, _operators.filter)(Boolean), (0, _operators.publish)()); stream$.subscribe(message => { if ('flush' in message) return; spinner.start(); spinner.text = message.text; if (message.level !== 'verbose') { const mappings = { success: 'succeed', error: 'fail', warn: 'warn', info: 'info', debug: 'stopAndPersist' }; spinner[mappings[message.level] || 'info'](); } }); stream$.connect(); const logger = logLevels.reduce((acc, level) => { acc[level] = message => message$.next({ text: message, level }); return acc; }, {}); return Object.assign({}, logger, { log: logger.debug, closeAndFlush: async () => { message$.next({ flush: true, level: 'verbose' }); await stream$.pipe((0, _operators.filter)(e => 'flush' in e), (0, _operators.first)()).toPromise(); spinner.stop(); } }); }