UNPKG

1.37 kBJavaScriptView Raw
1'use strict'
2
3let cli = require('..')
4let errors = require('./errors')
5
6function start (message, options) {
7 if (!options) options = {}
8 module.exports.task = {
9 spinner: new cli.Spinner({spinner: options.spinner, text: `${message}...`}),
10 stream: options.stream
11 }
12 module.exports.task.spinner.start()
13}
14
15function action (message, options, promise) {
16 if (options.then) [options, promise] = [{}, options]
17 start(message, options)
18 return promise.then(function (result) {
19 if (options.success !== false) done(options.success || 'done', options)
20 else done(null, options)
21 return result
22 }).catch(function (err) {
23 if (err.body && err.body.id === 'two_factor') done(cli.color.yellow.bold('!'), options)
24 else done(cli.color.red.bold('!'), options)
25 throw err
26 })
27}
28
29function warn (msg) {
30 let task = module.exports.task
31 if (task) task.spinner.warn(msg)
32 else errors.warn(msg)
33}
34
35function status (status) {
36 let task = module.exports.task
37 if (task) task.spinner.status = status
38}
39
40function done (msg, options) {
41 options = options || {}
42 let task = module.exports.task
43 if (task) {
44 task.spinner.stop(msg)
45 module.exports.task = null
46 if (options.clear) task.spinner.clear()
47 }
48}
49
50module.exports = action
51module.exports.start = start
52module.exports.warn = warn
53module.exports.status = status
54module.exports.done = done