105 lines
3.0 KiB
JavaScript
105 lines
3.0 KiB
JavaScript
const { CONFIG, thousands, writeJSONToOutput } = require('./utils')
|
|
const {
|
|
fetchNPMPackages,
|
|
fetchNPMPackageDownloads,
|
|
fetchGitHubUserinfo,
|
|
fetchGitHubRepositories,
|
|
fetchGitHubOrganizations,
|
|
} = require('./fetchers')
|
|
|
|
// NPM
|
|
const npmScript = async () => {
|
|
// packages
|
|
const packages = await fetchNPMPackages(CONFIG.NPM_UID)
|
|
// packages downloads map
|
|
const packageDownloadsMap = new Map()
|
|
await Promise.all(
|
|
packages.map(async package => {
|
|
const packageName = package.package.name
|
|
const downloadsResult = await fetchNPMPackageDownloads(packageName)
|
|
const downloads = downloadsResult?.downloads || 0
|
|
packageDownloadsMap.set(packageName, downloads)
|
|
})
|
|
)
|
|
|
|
const packageCount = packageDownloadsMap.size
|
|
const npmDownloadsTotal = Array.from(packageDownloadsMap.values()).reduce((total, current) => total + current, 0)
|
|
console.log(`NPM data: package count > ${packageCount}, downloads total > ${npmDownloadsTotal}`)
|
|
console.log(`NPM data map >`, packageDownloadsMap)
|
|
|
|
writeJSONToOutput('npm.json', {
|
|
packages,
|
|
downloads: Object.fromEntries(packageDownloadsMap),
|
|
})
|
|
writeJSONToOutput('npm.downloads.shields.json', {
|
|
schemaVersion: 1,
|
|
label: 'Total NPM Downloads',
|
|
message: thousands(npmDownloadsTotal),
|
|
cacheSeconds: 3600,
|
|
})
|
|
}
|
|
|
|
// GitHub
|
|
const githubScript = async () => {
|
|
const [userinfo, repositories, organizations] = await Promise.all([
|
|
fetchGitHubUserinfo(CONFIG.GITHUB_UID),
|
|
fetchGitHubRepositories(CONFIG.GITHUB_UID),
|
|
fetchGitHubOrganizations(CONFIG.GITHUB_UID),
|
|
])
|
|
console.log(`GitHub data: repositories > ${repositories.length}, organizations > ${organizations.length}`)
|
|
|
|
// statistics
|
|
const statistics = {
|
|
size: 0,
|
|
stars: 0,
|
|
forks: 0,
|
|
open_issues: 0,
|
|
languages: [],
|
|
topics: [],
|
|
}
|
|
repositories.forEach(repository => {
|
|
statistics.stars += repository.stargazers_count
|
|
statistics.forks += repository.forks_count
|
|
statistics.open_issues += repository.open_issues
|
|
// owner only
|
|
if (!repository.fork && repository.owner.login === CONFIG.GITHUB_UID) {
|
|
statistics.size += repository.size
|
|
statistics.topics.push(...repository.topics)
|
|
if (repository.language) {
|
|
statistics.languages.push(repository.language)
|
|
}
|
|
}
|
|
})
|
|
|
|
statistics.topics = Array.from(new Set([...statistics.topics]))
|
|
statistics.languages = Array.from(new Set([...statistics.languages]))
|
|
console.log(`GitHub statistics:`, statistics)
|
|
|
|
writeJSONToOutput('github.json', {
|
|
userinfo,
|
|
repositories,
|
|
organizations,
|
|
statistics,
|
|
})
|
|
writeJSONToOutput('github.stars.shields.json', {
|
|
schemaVersion: 1,
|
|
label: 'Total GitHub Stars',
|
|
message: thousands(statistics.stars),
|
|
cacheSeconds: 3600,
|
|
})
|
|
}
|
|
|
|
;(async () => {
|
|
try {
|
|
const now = new Date()
|
|
console.info('Generate run', now.toLocaleString(), '|', now.toString())
|
|
await npmScript()
|
|
await githubScript()
|
|
console.info('Generate done')
|
|
process.exit(0)
|
|
} catch (error) {
|
|
console.error('Generate error!', error)
|
|
process.exit(1)
|
|
}
|
|
})()
|