1 | const la = require('lazy-ass')
|
2 | const is = require('check-more-types')
|
3 | const parse = require('parse-github-repo-url')
|
4 | const got = require('got')
|
5 | const debug = require('debug')('gen')
|
6 |
|
7 | function tap (fn) {
|
8 | return function (x) {
|
9 | fn(x)
|
10 | return x
|
11 | }
|
12 | }
|
13 |
|
14 | function isGitHub (url) {
|
15 | return url.indexOf('github.com') !== -1
|
16 | }
|
17 |
|
18 |
|
19 |
|
20 |
|
21 | function repoDescription (url) {
|
22 | la(is.unemptyString(url), 'expected url string', url)
|
23 |
|
24 | debug('fetching repo description for', url)
|
25 | if (!isGitHub(url)) {
|
26 | debug('not a github url', url)
|
27 | return Promise.resolve()
|
28 | }
|
29 |
|
30 | const parsed = parse(url)
|
31 | la(is.array(parsed), 'could not parse github url', url)
|
32 | const [owner, repo] = parsed
|
33 | debug('owner %s repo %s', owner, repo)
|
34 |
|
35 | const apiUrl = `https://api.github.com/repos/${owner}/${repo}`
|
36 | debug('fetching description using', apiUrl)
|
37 |
|
38 | return got(apiUrl, { json: true })
|
39 | .then(response => response.body)
|
40 | .then(info => info.description)
|
41 | .then(
|
42 | tap(description => {
|
43 | debug('repo description "%s"', description)
|
44 | })
|
45 | )
|
46 | .catch(err => {
|
47 | debug('could not fetch repo description using', apiUrl)
|
48 | debug(err)
|
49 | })
|
50 | }
|
51 |
|
52 | module.exports = repoDescription
|