Comparing version 0.6.3 to 0.7.0
@@ -7,2 +7,11 @@ # Change Log | ||
## 0.7.0 - 2017-5-13 | ||
### Added | ||
- Yarn lock parsing | ||
- More tests | ||
### Changed | ||
- Correct logical error retrieving repo URLs | ||
- Revise dependency processing to allow for very large collections | ||
## 0.6.3 - 2017-1-19 | ||
@@ -9,0 +18,0 @@ ### Changed |
@@ -6,3 +6,3 @@ 'use strict'; | ||
}); | ||
exports.addNode = exports.readPackageJson = exports.nodeDetails = exports.rootDir = undefined; | ||
exports.addNode = exports.readYarnLock = exports.readPackageJson = exports.nodeDetails = exports.rootDir = undefined; | ||
@@ -15,2 +15,3 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; | ||
exports.resolveDependency = resolveDependency; | ||
exports.chopDependencies = chopDependencies; | ||
exports.NpmConfig = NpmConfig; | ||
@@ -29,2 +30,4 @@ exports.httpsGetPromise = httpsGetPromise; | ||
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } | ||
var rootDir = exports.rootDir = process.cwd() + '/'; | ||
@@ -37,3 +40,3 @@ var nodeDetails = exports.nodeDetails = { | ||
description: 'A JavaScript runtime ✨🐢🚀✨', | ||
downloads: 10000000 // A fake number since Node isn't downloaded on npm | ||
downloads: 100000000 // A fake number since Node isn't downloaded on npm | ||
} | ||
@@ -44,2 +47,3 @@ }; | ||
var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : rootDir; | ||
var dependency = arguments[1]; | ||
@@ -49,6 +53,7 @@ if (typeof path !== 'string') { | ||
} | ||
if (dependency) path = path + dependency; | ||
return new Promise(function (resolve, reject) { | ||
(0, _fs.readFile)(path + '/package.json', function (err, data) { | ||
if (err) { | ||
reject(err); | ||
resolve({ name: dependency }); | ||
} else { | ||
@@ -58,11 +63,33 @@ resolve(JSON.parse(data.toString())); | ||
}); | ||
}).catch(function (reason) { | ||
throw new Error(reason); | ||
}); | ||
}; | ||
var readYarnLock = exports.readYarnLock = function readYarnLock() { | ||
var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : rootDir; | ||
if (typeof path !== 'string') { | ||
throw new TypeError('Function readYarnLock expected type: string but received ' + (typeof path === 'undefined' ? 'undefined' : _typeof(path)) + ' instead'); | ||
} | ||
return new Promise(function (resolve) { | ||
(0, _fs.readFile)(path + '/yarn.lock', function (err, data) { | ||
if (err) { | ||
resolve({ yarnDependencies: {} }); | ||
} else { | ||
var lockArray = data.toString().match(/\w.*\@.*(?=:)/g); | ||
var yarnDeps = { | ||
yarnDependencies: lockArray.reduce(function (deps, dep) { | ||
deps[dep.replace(/\@.*/, '')] = dep.replace(/.*[\@\^\~\=\>\<]/, ''); | ||
return deps; | ||
}, {}) | ||
}; | ||
resolve(yarnDeps); | ||
} | ||
}); | ||
}); | ||
}; | ||
function instantiateDependencies(packageJson) { | ||
return new Promise(function (resolve) { | ||
var dependencies = {}; | ||
Object.assign(dependencies, packageJson.dependencies ? (0, _utilities.formatVersions)(packageJson.dependencies) : null, packageJson.devDependencies ? (0, _utilities.formatVersions)(packageJson.devDependencies) : null); | ||
Object.assign(dependencies, packageJson.dependencies ? (0, _utilities.formatVersions)(packageJson.dependencies) : null, packageJson.devDependencies ? (0, _utilities.formatVersions)(packageJson.devDependencies) : null, packageJson.yarnDependencies ? (0, _utilities.formatVersions)(packageJson.yarnDependencies) : null); | ||
resolve(dependencies); | ||
@@ -88,3 +115,3 @@ }); | ||
} | ||
return readPackageJson(rootDir + 'node_modules/' + dependency).then(resolveDependency); | ||
return readPackageJson(rootDir + 'node_modules/', dependency).then(resolveDependency); | ||
} | ||
@@ -96,3 +123,3 @@ | ||
name: dependency.name, | ||
url: dependency.homepage || dependency.repository ? 'https://' + dependency.repository.url.replace(/\w*.*\:\/\/|git@|\.git/g, '') : '', | ||
url: dependency.homepage || (dependency.repository && dependency.repository.url ? 'https://' + dependency.repository.url.replace(/\w*.*\:\/\/|git@|\.git/g, '') : ''), | ||
description: dependency.description | ||
@@ -103,26 +130,51 @@ }); | ||
function chopDependencies(depChunk) { | ||
var depChunks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; | ||
if (depChunk.length === 0) return depChunks; | ||
if (depChunk.length < 100) { | ||
depChunks.push(depChunk.join(',')); | ||
return depChunks; | ||
} | ||
depChunks.push(depChunk.slice(0, 100).join(',')); | ||
chopDependencies(depChunk.slice(100), depChunks); | ||
return depChunks; | ||
} | ||
function NpmConfig(dependencies) { | ||
return { | ||
hostname: 'api.npmjs.org', | ||
path: '/downloads/point/last-month/' + Object.keys(dependencies).join(','), | ||
method: 'GET', | ||
headers: { | ||
'User-Agent': 'cachilders/backpat' | ||
} | ||
}; | ||
var deps = Object.keys(dependencies); | ||
var depChunks = chopDependencies(deps); | ||
return depChunks.reduce(function (optsArray, depChunk) { | ||
optsArray.push({ | ||
hostname: 'api.npmjs.org', | ||
path: '/downloads/point/last-month/' + depChunk, | ||
method: 'GET', | ||
headers: { | ||
'User-Agent': 'cachilders/backpat' | ||
} | ||
}); | ||
return optsArray; | ||
}, []); | ||
} | ||
function httpsGetPromise(opts) { | ||
return new Promise(function (resolve, reject) { | ||
_https2.default.get(opts, function (res) { | ||
var body = []; | ||
res.on('data', function (chunk) { | ||
return body.push(chunk); | ||
function httpsGetPromise(optsArray) { | ||
var promiseArray = optsArray.reduce(function (promises, opts) { | ||
promises.push(new Promise(function (resolve, reject) { | ||
_https2.default.get(opts, function (res) { | ||
var body = []; | ||
res.on('data', function (chunk) { | ||
return body.push(chunk); | ||
}); | ||
res.on('end', function () { | ||
return resolve(JSON.parse(Buffer.concat(body).toString())); | ||
}); | ||
res.on('error', reject); | ||
}); | ||
res.on('end', function () { | ||
return resolve(JSON.parse(Buffer.concat(body).toString())); | ||
}); | ||
res.on('error', reject); | ||
}); | ||
}); | ||
})); | ||
return promises; | ||
}, []); | ||
return Promise.all(promiseArray).then(function (results) { | ||
return Object.assign.apply(Object, [{}].concat(_toConsumableArray(results))); | ||
}).catch(console.error); | ||
} | ||
@@ -129,0 +181,0 @@ |
@@ -12,5 +12,9 @@ 'use strict'; | ||
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } | ||
function backpat() { | ||
return new Promise(function (resolve) { | ||
(0, _helpers.readPackageJson)().then(_helpers.instantiateDependencies).then(function (dependencies) { | ||
Promise.all([(0, _helpers.readPackageJson)(), (0, _helpers.readYarnLock)()]).then(function (result) { | ||
return Object.assign.apply(Object, [{}].concat(_toConsumableArray(result))); | ||
}).then(_helpers.instantiateDependencies).then(function (dependencies) { | ||
var merge = (0, _utilities.curriedMerge)(dependencies); | ||
@@ -17,0 +21,0 @@ return (0, _utilities.getNpmData)(dependencies).then(_utilities.pickDownloads).then(merge); |
{ | ||
"name": "backpat", | ||
"version": "0.6.3", | ||
"version": "0.7.0", | ||
"description": "A simple tool for high-fiving your tech stack", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
16523
192