-
Notifications
You must be signed in to change notification settings - Fork 0
/
registry.js
39 lines (36 loc) · 961 Bytes
/
registry.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
const semver = require('semver')
const axios = require('axios')
function findPackageVersion(pkgName, verQuery = '*') {
return axios.get(`https://registry.npm.taobao.org/${pkgName}`)
.then(resp => {
const version = resp.data['dist-tags'][verQuery]
if (version) {
return version
}
if (resp.data.versions[verQuery]) {
return verQuery
}
const versions = Object.keys(resp.data.versions).filter(ver => {
return semver.satisfies(ver, verQuery)
}).sort((a, b) => {
return -semver.compare(a, b)
})
if (versions[1]) {
return versions[1]
}
throw new Error('No version matches ' + verQuery)
})
}
function hasVersion(pkgName, version) {
return axios.get(`https://registry.npm.taobao.org/${pkgName}/${version}`)
.then(function () {
return true
})
.catch(function () {
return false
})
}
module.exports = {
findPackageVersion: findPackageVersion,
hasVersion: hasVersion
}