UNPKG

1.64 kBJavaScriptView Raw
1/**
2 * List command action
3 */
4
5const ora = require('ora')
6const chalk = require('chalk')
7
8const { logger, http } = require('../common')
9
10/**
11 * Fetch user's repos
12 * @param {String} username GitHub username
13 */
14const 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 * List available official templates
28 * @param {String} username Username
29 * @param {Object} options Options
30 * @param {Boolean} options.short Short mode
31 */
32module.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 // short output
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}