1 |
|
2 |
|
3 |
|
4 |
|
5 | const ora = require('ora')
|
6 | const chalk = require('chalk')
|
7 |
|
8 | const { logger, http } = require('../common')
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | const fetchRepos = async username => {
|
15 | const res = await http.request(`https://api.github.com/users/${username}/repos`, {
|
16 | query: {
|
17 | client_id: '0cb723972877555ffb54',
|
18 | client_secret: 'ad0638a75ee90bb86c8b551f5f42f3a044725f38',
|
19 | per_page: 100
|
20 | },
|
21 | timeout: 10000
|
22 | })
|
23 | return res.body
|
24 | }
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 | module.exports = async (username = 'zce-templates', { short = false } = {}) => {
|
33 | const spinner = ora('Loading available list from remote...')
|
34 |
|
35 | try {
|
36 | spinner.start()
|
37 | const repos = await fetchRepos(username)
|
38 | spinner.stop()
|
39 |
|
40 | if (!repos.length) {
|
41 | return logger.log('😞 No available templates.')
|
42 | }
|
43 |
|
44 | if (short) {
|
45 |
|
46 | return repos.forEach(item => logger.log(`→ ${username === 'zce-templates' ? item.name : item.full_name}`))
|
47 | }
|
48 |
|
49 | logger.log()
|
50 | logger.log(`👇 Available ${username === 'zce-templates' ? 'official' : username}'s templates:`)
|
51 | logger.log()
|
52 | repos.forEach(item => logger.log(` ${chalk.yellow('→')} ${chalk.blue(username === 'zce-templates' ? item.name : item.full_name)} ${chalk.gray('-')} ${item.description}`))
|
53 | logger.log()
|
54 | } catch (e) {
|
55 | spinner.stop()
|
56 | logger.log(`😞 Failed to load list from remote: ${chalk.red(e.message)}.`)
|
57 | }
|
58 | }
|