const USER = 'rahatarmanahmed'
const Linter = require("npm-package-json-lint/src/NpmPackageJsonLint")
const getUsersPackages = require("npm-user-packages")
const getPackage = require('package-json')
const url = require('url')
const config = {
'require-author': 'error',
'require-bugs': 'error',
'require-description': 'error',
'require-homepage': 'error',
'require-keywords': 'error',
'require-license': 'error',
'require-repository': 'error',
'require-name': 'error',
'require-version': 'error',
'name-format': 'error',
'version-format': 'error',
'bin-type': 'error',
'config-type': 'error',
'cpu-type': 'error',
'dependencies-type': 'error',
'description-type': 'error',
'devDependencies-type': 'error',
'directories-type': 'error',
'engines-type': 'error',
'files-type': 'error',
'homepage-type': 'error',
'keywords-type': 'error',
'license-type': 'error',
'main-type': 'error',
'man-type': 'error',
'name-type': 'error',
'optionalDependencies-type': 'error',
'os-type': 'error',
'peerDependencies-type': 'error',
'preferGlobal-type': 'error',
'private-type': 'error',
'repository-type': 'error',
'scripts-type': 'error',
'version-type': 'error'
}
const getPackageNames = user => {
return getUsersPackages(user)
.then(pkgs => pkgs.map(pkg => pkg.name))
}
const lintPackage = (pkg, res) => {
const results = new Linter(pkg, config, {}).lint()
if(results.errors.length) res.write('\n' + pkg.name + '\n')
results.errors
.map(issue => res.write('\t' + issue + '\n'))
}
const getQuery = req => url.parse('' + req.url, true).query
exports.tonicEndpoint = (req, res) => {
if(!getQuery(req).user) return res.end('You need to provide a `user` url query parameter')
getPackageNames(getQuery(req).user)
.then(pkgs => Promise.all(pkgs.map(name => getPackage(name, 'latest'))))
.then(pkgs => Promise.all(pkgs.map(pkg => lintPackage(pkg, res))))
.catch(console.error.bind(console))
}