1 | 'use strict'
|
2 |
|
3 | let cli = require('..')
|
4 | let errors = require('./errors')
|
5 |
|
6 | function 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 |
|
15 | function 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 |
|
29 | function warn (msg) {
|
30 | let task = module.exports.task
|
31 | if (task) task.spinner.warn(msg)
|
32 | else errors.warn(msg)
|
33 | }
|
34 |
|
35 | function status (status) {
|
36 | let task = module.exports.task
|
37 | if (task) task.spinner.status = status
|
38 | }
|
39 |
|
40 | function 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 |
|
50 | module.exports = action
|
51 | module.exports.start = start
|
52 | module.exports.warn = warn
|
53 | module.exports.status = status
|
54 | module.exports.done = done
|