@moderate-cli/get-npm-info
Advanced tools
Comparing version
'use strict'; | ||
const axios = require('axios') | ||
const axios = require('axios'); | ||
const urlJoin = require('url-join'); | ||
const semver = require('semver') | ||
const semver = require('semver'); | ||
// 通过npm api 获得信息 | ||
function getNpmInfo(npmName, registry) { | ||
if (!npmName) { | ||
return null | ||
return null; | ||
} | ||
const registryUrl = registry || getDefaultRegistry(); | ||
const npmInfoUrl = urlJoin(registryUrl, npmName) | ||
return axios.get(npmInfoUrl).then((response) => { | ||
const {status, data} = response; | ||
if (status == 200) { | ||
return data | ||
const npmInfoUrl = urlJoin(registryUrl, npmName); | ||
return axios.get(npmInfoUrl).then(response => { | ||
if (response.status === 200) { | ||
return response.data; | ||
} | ||
return null | ||
return null; | ||
}).catch(err => { | ||
return Promise.reject(err) | ||
}) | ||
return Promise.reject(err); | ||
}); | ||
} | ||
// 获得npm版本信息 | ||
function getDefaultRegistry(isOriginal = false) { | ||
return isOriginal ? 'https://registry.npmjs.org' : 'https://registry.npm.taobao.org'; | ||
} | ||
async function getNpmVersions(npmName, registry) { | ||
const data = await getNpmInfo(npmName, registry); | ||
if (data) { | ||
return Object.keys(data.versions) | ||
return Object.keys(data.versions); | ||
} else { | ||
return [null] | ||
return []; | ||
} | ||
} | ||
function getDefaultRegistry(isOriginal) { | ||
return isOriginal ? 'https://registry.npmjs.org' : 'https://registry.npm.taobao.org' | ||
} | ||
// 获得npm版本信息 | ||
function getSemverVersions(baseVersion, versions) { | ||
versions = versions | ||
.filter((version) => semver.satisfies(version, `^${baseVersion}`)) | ||
.sort((a, b) => { | ||
if (semver.gt(b, a)) { | ||
return 1 | ||
} else { | ||
return -1 | ||
} | ||
}) | ||
return versions; | ||
return versions | ||
.filter(version => semver.satisfies(version, `>${baseVersion}`)) | ||
.sort((a, b) => semver.gt(b, a) ? 1 : -1); | ||
} | ||
async function getNpmSemverVersion(baseVersion, npmName, registry) { | ||
const versions = await getNpmVersions(npmName, registry) | ||
const newVersions = getSemverVersions(baseVersion, versions) | ||
if(newVersions?.length){ | ||
return newVersions[0] | ||
const versions = await getNpmVersions(npmName, registry); | ||
const newVersions = getSemverVersions(baseVersion, versions); | ||
if (newVersions && newVersions.length > 0) { | ||
return newVersions[0]; | ||
} | ||
return null | ||
return null; | ||
} | ||
async function getNpmLatestVersion(npmName, registry) { | ||
let versions = await getNpmVersions(npmName, registry); | ||
if (versions) { | ||
return versions.sort((a, b) => semver.gt(b, a))[0]; | ||
} | ||
return null; | ||
} | ||
module.exports = { | ||
getNpmInfo, getNpmVersions, getNpmSemverVersion | ||
} | ||
getNpmInfo, | ||
getNpmVersions, | ||
getNpmSemverVersion, | ||
getDefaultRegistry, | ||
getNpmLatestVersion, | ||
}; |
{ | ||
"name": "@moderate-cli/get-npm-info", | ||
"version": "0.1.13", | ||
"version": "0.1.15", | ||
"description": "> TODO: description", | ||
@@ -31,3 +31,3 @@ "author": "qanglee <545540710@qq.com>", | ||
}, | ||
"gitHead": "ece3ba490e25304117329e80fc460ccff8ef8c6f", | ||
"gitHead": "312cd6bcb81c0797f01879e53e0d9a09ee7d6182", | ||
"publishConfig": { | ||
@@ -34,0 +34,0 @@ "access": "public" |
3762
2.2%57
1.79%