1 | const ora = require('ora')
|
2 | const got = require('got')
|
3 | const chalk = require('chalk')
|
4 | const util = require('./util')
|
5 |
|
6 | const spinner = ora('Loading available list from remote...')
|
7 |
|
8 | const options = {
|
9 | headers: {
|
10 | 'accept': 'application/json',
|
11 | 'user-agent': util.generator
|
12 | }
|
13 | }
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 | module.exports = (short, debug) => {
|
22 | console.log()
|
23 | spinner.start()
|
24 | let api = 'https://api.github.com/users/zce-templates/repos'
|
25 |
|
26 |
|
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 |
|
40 |
|
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 |
|
69 | if (process.env.NODE_ENV === 'testing') {
|
70 | throw err
|
71 | } else {
|
72 | process.exit()
|
73 | }
|
74 | })
|
75 | }
|