-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathcheckDependencies.js
88 lines (80 loc) · 2.6 KB
/
checkDependencies.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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/*
This file is a way for me to check the versions of dependencies
that Create New App uses to create React applications.
It's simply for maintenance reasons concerning this library.
*/
const registryFetch = require('npm-registry-fetch')
const chalk = require('chalk')
const formDependencies = require('./modules/dependencies')
const makeTable = require('./modules/makeTable')
const {devDependencies, serverDependencies} = formDependencies({
mongo: 1,
router: 1,
server: 1,
})
const fullList = {...devDependencies, ...serverDependencies}
const packages = Object.keys(fullList).sort()
const keysLength = packages.length
const all = process.argv.some(arg => arg === '--all' || arg === 'all')
const promises = packages.map(pkg => {
return registryFetch
.json(pkg)
.then(data => {
const usedVersion = fullList[pkg]
const latestVersion = data['dist-tags'].latest
const [latestMajor] = latestVersion.split('.')
const isDeprecated = !!data.versions[latestVersion].deprecated
const used = usedVersion.includes('^')
? usedVersion.slice(1)
: usedVersion
const name = isDeprecated
? `${chalk.bold.red('DEPRECATED:')} ${pkg}`
: pkg
if (all || isDeprecated || used !== latestMajor) {
return {
name,
used,
latestVersion: chalk.green(latestVersion),
url: chalk.blue(`https://www.npmjs.com/package/${pkg}`),
}
} else {
return {name: ''}
}
})
.catch(() => ({
name: `${chalk.yellow.bold('ERROR')} - ${pkg}`,
error: true,
}))
})
Promise.all(promises).then(results => {
const finalResults = results.reduce(
(acc, {name, used, latestVersion, error, url}) => {
if (!name) return acc
if (error) return [...acc, [name, '-', '-', url]]
return [...acc, [name, used, latestVersion, url]]
},
[
[
chalk.bold('PACKAGE'),
chalk.bold('USED'),
chalk.bold('LATEST'),
chalk.bold('NPM URL'),
],
],
)
// http://bit.ly/2Z7GZ1M - clear the console.
// console.log('\x1Bc')
// Using a quick `setTimeout` here to ensure the console was cleared.
setTimeout(() => {
const totalChecked = results.filter(item => !item.error).length
const checked =
chalk[totalChecked === keysLength ? 'green' : 'yellow'](totalChecked)
if (finalResults.length === 1) {
console.log('All packages up to date!')
} else {
const total = chalk.green(keysLength)
console.log(`${total} total packages, ${checked} checked!`)
console.log(makeTable(finalResults, {centered: true}))
}
}, 100)
})