UNPKG

1.81 kBJavaScriptView Raw
1const ora = require('ora')
2const got = require('got')
3const chalk = require('chalk')
4const util = require('./util')
5
6const spinner = ora('Loading available list from remote...')
7
8const options = {
9 headers: {
10 'accept': 'application/json',
11 'user-agent': util.generator
12 }
13}
14
15/**
16 * List command
17 * @param {Boolean} short Short mode
18 * @param {Boolean} debug Debug mode
19 * @return {Promise} List promise
20 */
21module.exports = (short, debug) => {
22 console.log()
23 spinner.start()
24 let api = 'https://api.github.com/users/zce-templates/repos'
25
26 /* istanbul ignore else */
27 if (process.env.NODE_ENV === 'testing') {
28 api = process.env.TEST_API || api
29 if (process.env.GITHUB_PAT) {
30 options.headers.authorization = 'token ' + process.env.GITHUB_PAT
31 }
32 }
33
34 return got(api, options)
35 .then(res => {
36 spinner.stop()
37
38 const data = JSON.parse(res.body)
39 /* istanbul ignore if */
40 // TODO: When will this happen?
41 if (data.message) throw new Error(data.message)
42
43 if (!data.length) {
44 console.log('Not found available\n')
45 return data
46 }
47
48 if (short) {
49 data.forEach(repo => console.log(chalk.blue(repo.name)))
50 } else {
51 console.log('👇 Available official templates:')
52 console.log()
53 data.forEach(repo => console.log(` ${chalk.yellow('→')} ${chalk.blue(repo.name)} - ${repo.description}`))
54 }
55
56 console.log()
57 return data
58 })
59 .catch(err => {
60 spinner.stop()
61
62 console.error(`😞 Failed to load list from remote: ${err.message}`)
63
64 debug && console.error('\n', err)
65
66 console.log()
67
68 /* istanbul ignore else */
69 if (process.env.NODE_ENV === 'testing') {
70 throw err
71 } else {
72 process.exit()
73 }
74 })
75}