-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
executable file
·98 lines (79 loc) · 2.77 KB
/
index.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
89
90
91
92
93
94
95
96
97
#!/usr/bin/env node
const fs = require('fs')
const path = require('path')
const opn = require('opn')
const david = require('david')
const depcheck = require('depcheck')
const _ = require('lodash')
const semver = require('semver')
const ora = require('ora')
const packageJson = require('package-json')
const express = require('express')
const app = express()
app.use(express.static(path.resolve(__dirname, 'public')))
const spinner = ora('Analyzing your codebase, hang tight!').start()
let manifest = {}
let dependencyData = {
david: {
deps: {},
devDeps: {}
},
depcheck: {}
}
const depcheckOptions = {
ignoreDirs: ['node_modules']
}
function parseVersions(deps) {
for (let prop in deps) {
if (semver.valid(deps[prop].required)) {
deps[prop].required = deps[prop].required.replace(/\^|\~/g, '')
deps[prop].outdated = semver.gt(deps[prop].stable, deps[prop].required)
deps[prop].diff = semver.diff(deps[prop].stable, deps[prop].required)
}
}
return deps
}
app.get('/', (req, res) => {
fs.readFile(path.resolve(__dirname, 'index.html'), 'utf8', (err, template) => {
const compiled = _.template(template)
res.send(compiled(dependencyData))
})
})
app.get('/api/info/:package', (req, res) => {
packageJson(req.params.package, {
fullMetadata: true
})
.then(data => {
res.json(data)
});
})
fs.readFile('package.json', 'utf8', (err, data) => {
if (err) {
console.error('Could not open package.json, make sure you\'re in the right directory')
return
}
manifest = JSON.parse(data)
david.getDependencies(manifest, (err, deps) => {
dependencyData.david.deps = parseVersions(deps)
david.getDependencies(manifest, { dev: true }, (err, devDeps) => {
dependencyData.david.devDeps = parseVersions(devDeps)
depcheck(path.resolve('./'), depcheckOptions, (unused) => {
dependencyData.depcheck = unused
for (let dep in dependencyData.depcheck.using) {
if (dependencyData.david.deps.hasOwnProperty(dep)) {
dependencyData.david.deps[dep].using = dependencyData.depcheck.using[dep]
}
if (dependencyData.david.devDeps.hasOwnProperty(dep)) {
dependencyData.david.devDeps[dep].using = dependencyData.depcheck.using[dep]
}
}
app.listen(1337, () => {
spinner.succeed()
console.log('Depbud is running on port 1337!')
console.log('Hit ^C to stop')
opn('http://localhost:1337')
})
})
})
})
})