read-installed
Advanced tools
Comparing version 0.2.5 to 1.0.0
{ | ||
"name": "read-installed", | ||
"description": "Read all the installed packages in a folder, and return a tree structure with all the data.", | ||
"version": "0.2.5", | ||
"version": "1.0.0", | ||
"repository": { | ||
@@ -11,3 +11,3 @@ "type": "git", | ||
"scripts": { | ||
"test": "node test/basic.js" | ||
"test": "tap ./test/" | ||
}, | ||
@@ -23,3 +23,6 @@ "dependencies": { | ||
"author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)", | ||
"license": "ISC" | ||
"license": "ISC", | ||
"devDependencies": { | ||
"tap": "~0.4.8" | ||
} | ||
} |
@@ -104,13 +104,10 @@ | ||
function readInstalled (folder, depth_, log_, cb_) { | ||
var depth = Infinity, log = function () {}, cb | ||
for (var i = 1; i < arguments.length - 1; i++) { | ||
if (typeof arguments[i] === 'number') | ||
depth = arguments[i] | ||
else if (typeof arguments[i] === 'function') | ||
log = arguments[i] | ||
function readInstalled (folder, opts, cb) { | ||
if (typeof opts === 'function') { | ||
cb = opts | ||
opts = {} | ||
} | ||
cb = arguments[i] | ||
var depth = Infinity || opts.depth, log = function () {} || opts.log, dev = false || opts.dev | ||
readInstalled_(folder, null, null, null, 0, depth, function (er, obj) { | ||
readInstalled_(folder, null, null, null, 0, depth, dev, function (er, obj) { | ||
if (er) return cb(er) | ||
@@ -125,3 +122,3 @@ // now obj has all the installed things, where they're installed | ||
var rpSeen = {} | ||
function readInstalled_ (folder, parent, name, reqver, depth, maxDepth, cb) { | ||
function readInstalled_ (folder, parent, name, reqver, depth, maxDepth, dev, cb) { | ||
var installed | ||
@@ -182,3 +179,3 @@ , obj | ||
// "foo":"http://blah" is always presumed valid | ||
// "foo":"http://blah" and "foo":"latest" are always presumed valid | ||
if (reqver | ||
@@ -192,3 +189,3 @@ && semver.validRange(reqver, true) | ||
&& !(name in parent.dependencies) | ||
&& !(name in (parent.devDependencies || {}))) { | ||
&& (dev || !(name in (parent.devDependencies || {})))) { | ||
obj.extraneous = true | ||
@@ -205,3 +202,3 @@ } | ||
var rv = obj.dependencies[pkg] | ||
if (!rv && obj.devDependencies) rv = obj.devDependencies[pkg] | ||
if (!rv && obj.devDependencies && !dev) rv = obj.devDependencies[pkg] | ||
if (depth >= maxDepth) { | ||
@@ -228,2 +225,3 @@ // just try to get the version number | ||
, obj, pkg, obj.dependencies[pkg], depth + 1, maxDepth | ||
, dev | ||
, cb ) | ||
@@ -294,5 +292,5 @@ | ||
} | ||
// "foo":"http://blah" and "foo":"latest" are always presumed valid | ||
if ( typeof deps[d] === "string" | ||
// url deps presumed innocent. | ||
&& !url.parse(deps[d]).protocol | ||
&& semver.validRange(deps[d], true) | ||
&& !semver.satisfies(found.version, deps[d], true)) { | ||
@@ -299,0 +297,0 @@ // the bad thing will happen |
@@ -8,2 +8,12 @@ # read-installed | ||
## 1.0.0 | ||
Breaking changes in `1.0.0`: | ||
The second argument is now an `Object` that contains the following keys: | ||
* `depth` optional, defaults to Infinity | ||
* `log` optional log Function | ||
* `dev` optional, dev=true to mark devDeps as extraneous | ||
## Usage | ||
@@ -13,6 +23,5 @@ | ||
var readInstalled = require("read-installed") | ||
// depth is optional, defaults to Infinity | ||
readInstalled(folder, depth, logFunction, function (er, data) { | ||
readInstalled(folder, { depth, log, dev }, function (er, data) { | ||
... | ||
}) | ||
``` |
var readInstalled = require("../read-installed.js") | ||
var util = require("util") | ||
console.error("testing") | ||
var json = require("../package.json") | ||
var known = [].concat(Object.keys(json.dependencies) | ||
, Object.keys(json.optionalDependencies) | ||
, Object.keys(json.devDependencies)).sort() | ||
var test = require("tap").test | ||
var path = require("path") | ||
var called = 0 | ||
readInstalled(process.cwd(), console.error, function (er, map) { | ||
console.error(called ++) | ||
if (er) return console.error(er.stack || er.message) | ||
cleanup(map) | ||
console.error(util.inspect(map, true, 10, true)) | ||
test("make sure that it works", function (t) { | ||
readInstalled(path.join(__dirname, "../"), { | ||
log: console.error | ||
}, function (er, map) { | ||
t.notOk(er, "er should be bull") | ||
t.ok(map, "map should be data") | ||
if (er) return console.error(er.stack || er.message) | ||
cleanup(map) | ||
var deps = Object.keys(map.dependencies).sort() | ||
t.equal(known.length, deps.length, "array lengths are equal") | ||
t.deepEqual(known, deps, "arrays should be equal") | ||
t.notOk(map.dependencies.tap.extraneous, 'extraneous not set on devDep') | ||
t.end() | ||
}) | ||
}) | ||
var seen = [] | ||
@@ -14,0 +25,0 @@ function cleanup (map) { |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
15612
10
394
1
26
1