UNPKG

1.33 kBJavaScriptView Raw
1const la = require('lazy-ass')
2const is = require('check-more-types')
3const parse = require('parse-github-repo-url')
4const got = require('got')
5const debug = require('debug')('gen')
6
7function tap (fn) {
8 return function (x) {
9 fn(x)
10 return x
11 }
12}
13
14function isGitHub (url) {
15 return url.indexOf('github.com') !== -1
16}
17
18// parses url like git@github.com:bahmutov/test-node-generator.git
19// and fetched repo description
20// if cannot, then resolves with undefined
21function 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
52module.exports = repoDescription