diff options
author | isaacs <i@izs.me> | 2014-03-16 09:18:10 +0400 |
---|---|---|
committer | isaacs <i@izs.me> | 2014-03-16 09:18:10 +0400 |
commit | 1d29b17f5193d52a5c4faa412a95313dcf41ed91 (patch) | |
tree | 18451ae14878480efd469fd72c1b560923ee0193 /node_modules/read-installed | |
parent | ce662561ca0a7b154a7e6058a6a2428b49bd7266 (diff) |
read-installed@2.0.0
Diffstat (limited to 'node_modules/read-installed')
16 files changed, 227 insertions, 52 deletions
diff --git a/node_modules/read-installed/.npmignore b/node_modules/read-installed/.npmignore new file mode 100644 index 000000000..8c23deeb3 --- /dev/null +++ b/node_modules/read-installed/.npmignore @@ -0,0 +1,13 @@ +*.swp +.*.swp + +.DS_Store +*~ +.project +.settings +npm-debug.log +coverage.html +.idea +lib-cov + +node_modules diff --git a/node_modules/read-installed/README.md b/node_modules/read-installed/README.md index 535a8496f..312153b4f 100644 --- a/node_modules/read-installed/README.md +++ b/node_modules/read-installed/README.md @@ -5,21 +5,23 @@ structure with all the data. npm uses this. -## 1.0.0 +## 2.0.0 -Breaking changes in `1.0.0`: +Breaking changes in `2.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 + * `dev` optional, default false, set to true to include devDependencies ## Usage ```javascript var readInstalled = require("read-installed") -readInstalled(folder, { depth, log, dev }, function (er, data) { +// optional options +var options = { dev: false, log: fn, depth: 2 } +readInstalled(folder, options, function (er, data) { ... }) ``` diff --git a/node_modules/read-installed/node_modules/util-extend/README.md b/node_modules/read-installed/node_modules/util-extend/README.md new file mode 100644 index 000000000..be03922ab --- /dev/null +++ b/node_modules/read-installed/node_modules/util-extend/README.md @@ -0,0 +1,13 @@ +# util-extend + +The Node object extending function that Node uses for Node! + +## Usage + +```js +var extend = require('util-extend'); +function functionThatTakesOptions(options) { + var options = extend(defaults, options); + // now any unset options are set to the defaults. +} +``` diff --git a/node_modules/read-installed/node_modules/util-extend/extend.js b/node_modules/read-installed/node_modules/util-extend/extend.js new file mode 100644 index 000000000..de9fcf471 --- /dev/null +++ b/node_modules/read-installed/node_modules/util-extend/extend.js @@ -0,0 +1,33 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +module.exports = extend; +function extend(origin, add) { + // Don't do anything if add isn't an object + if (!add || typeof add !== 'object') return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +} diff --git a/node_modules/read-installed/node_modules/util-extend/package.json b/node_modules/read-installed/node_modules/util-extend/package.json new file mode 100644 index 000000000..f45c5c94f --- /dev/null +++ b/node_modules/read-installed/node_modules/util-extend/package.json @@ -0,0 +1,23 @@ +{ + "name": "util-extend", + "version": "1.0.1", + "description": "Node's internal object extension function", + "main": "extend.js", + "scripts": { + "test": "node test.js" + }, + "repository": { + "type": "git", + "url": "git://github.com/isaacs/util-extend" + }, + "author": "", + "license": "MIT", + "readmeFilename": "README.md", + "readme": "# util-extend\n\nThe Node object extending function that Node uses for Node!\n\n## Usage\n\n```js\nvar extend = require('util-extend');\nfunction functionThatTakesOptions(options) {\n var options = extend(defaults, options);\n // now any unset options are set to the defaults.\n}\n```\n", + "bugs": { + "url": "https://github.com/isaacs/util-extend/issues" + }, + "homepage": "https://github.com/isaacs/util-extend", + "_id": "util-extend@1.0.1", + "_from": "util-extend@^1.0.1" +} diff --git a/node_modules/read-installed/node_modules/util-extend/test.js b/node_modules/read-installed/node_modules/util-extend/test.js new file mode 100644 index 000000000..fbee2b1e1 --- /dev/null +++ b/node_modules/read-installed/node_modules/util-extend/test.js @@ -0,0 +1,10 @@ +var assert = require('assert'); +var extend = require('./'); +assert.deepEqual(extend({a:1}), {a:1}); +assert.deepEqual(extend({a:1}, []), {a:1}); +assert.deepEqual(extend({a:1}, null), {a:1}); +assert.deepEqual(extend({a:1}, true), {a:1}); +assert.deepEqual(extend({a:1}, false), {a:1}); +assert.deepEqual(extend({a:1}, {b:2}), {a:1, b:2}); +assert.deepEqual(extend({a:1, b:2}, {b:3}), {a:1, b:3}); +console.log('ok'); diff --git a/node_modules/read-installed/package.json b/node_modules/read-installed/package.json index 16836d266..ed86f4361 100644 --- a/node_modules/read-installed/package.json +++ b/node_modules/read-installed/package.json @@ -1,19 +1,20 @@ { "name": "read-installed", "description": "Read all the installed packages in a folder, and return a tree structure with all the data.", - "version": "1.0.0", + "version": "2.0.0", "repository": { "type": "git", "url": "git://github.com/isaacs/read-installed" }, "main": "read-installed.js", "scripts": { - "test": "tap ./test/" + "test": "tap ./test/*.js" }, "dependencies": { + "read-package-json": "1", "semver": "2", "slide": "~1.1.3", - "read-package-json": "1", + "util-extend": "^1.0.1", "graceful-fs": "~2" }, "optionalDependencies": { @@ -28,12 +29,12 @@ "devDependencies": { "tap": "~0.4.8" }, - "readme": "# read-installed\n\nRead all the installed packages in a folder, and return a tree\nstructure with all the data.\n\nnpm uses this.\n\n## 1.0.0\n\nBreaking changes in `1.0.0`:\n\nThe second argument is now an `Object` that contains the following keys:\n\n * `depth` optional, defaults to Infinity\n * `log` optional log Function\n * `dev` optional, dev=true to mark devDeps as extraneous\n\n## Usage\n\n```javascript\nvar readInstalled = require(\"read-installed\")\nreadInstalled(folder, { depth, log, dev }, function (er, data) {\n ...\n})\n```\n", + "readme": "# read-installed\n\nRead all the installed packages in a folder, and return a tree\nstructure with all the data.\n\nnpm uses this.\n\n## 2.0.0\n\nBreaking changes in `2.0.0`:\n\nThe second argument is now an `Object` that contains the following keys:\n\n * `depth` optional, defaults to Infinity\n * `log` optional log Function\n * `dev` optional, default false, set to true to include devDependencies\n\n## Usage\n\n```javascript\nvar readInstalled = require(\"read-installed\")\n// optional options\nvar options = { dev: false, log: fn, depth: 2 }\nreadInstalled(folder, options, function (er, data) {\n ...\n})\n```\n", "readmeFilename": "README.md", "bugs": { "url": "https://github.com/isaacs/read-installed/issues" }, "homepage": "https://github.com/isaacs/read-installed", - "_id": "read-installed@1.0.0", + "_id": "read-installed@2.0.0", "_from": "read-installed@latest" } diff --git a/node_modules/read-installed/read-installed.js b/node_modules/read-installed/read-installed.js index 9ca482dab..7b3749d60 100644 --- a/node_modules/read-installed/read-installed.js +++ b/node_modules/read-installed/read-installed.js @@ -98,6 +98,8 @@ var asyncMap = require("slide").asyncMap var semver = require("semver") var readJson = require("read-package-json") var url = require("url") +var util = require("util") +var extend = require("util-extend") module.exports = readInstalled @@ -105,20 +107,31 @@ function readInstalled (folder, opts, cb) { if (typeof opts === 'function') { cb = opts opts = {} + } else { + opts = extend({}, opts) } - var depth = Infinity || opts.depth, log = function () {} || opts.log, dev = false || opts.dev - readInstalled_(folder, null, null, null, 0, depth, dev, function (er, obj) { + if (typeof opts.depth !== 'number') + opts.depth = Infinity + + opts.depth = Math.max(0, opts.depth) + + if (typeof opts.log !== 'function') + opts.log = function () {} + + opts.dev = !!opts.dev + + readInstalled_(folder, null, null, null, 0, opts, function (er, obj) { if (er) return cb(er) // now obj has all the installed things, where they're installed // figure out the inheritance links, now that the object is built. - resolveInheritance(obj, log) + resolveInheritance(obj, opts) cb(null, obj) }) } var rpSeen = {} -function readInstalled_ (folder, parent, name, reqver, depth, maxDepth, dev, cb) { +function readInstalled_ (folder, parent, name, reqver, depth, opts, cb) { var installed , obj , real @@ -181,29 +194,36 @@ function readInstalled_ (folder, parent, name, reqver, depth, maxDepth, dev, cb) obj.invalid = true } - if (parent - && !(name in parent.dependencies) - && (dev || !(name in (parent.devDependencies || {})))) { - obj.extraneous = true + if (parent) { + var deps = parent.dependencies || {} + var inDeps = name in deps + var devDeps = parent.devDependencies || {} + var inDev = opts.dev && (name in devDeps) + if (!inDeps && !inDev) { + obj.extraneous = true + } } + obj.path = obj.path || folder obj.realPath = real obj.link = link if (parent && !obj.link) obj.parent = parent rpSeen[real] = obj obj.depth = depth - //if (depth >= maxDepth) return cb(null, obj) + //if (depth >= opts.depth) return cb(null, obj) asyncMap(installed, function (pkg, cb) { var rv = obj.dependencies[pkg] - if (!rv && obj.devDependencies && !dev) rv = obj.devDependencies[pkg] - if (depth >= maxDepth) { + if (!rv && obj.devDependencies && opts.dev) + rv = obj.devDependencies[pkg] + + if (depth >= opts.depth) { // just try to get the version number var pkgfolder = path.resolve(folder, "node_modules", pkg) , jsonFile = path.resolve(pkgfolder, "package.json") return readJson(jsonFile, function (er, depData) { // already out of our depth, ignore errors if (er || !depData || !depData.version) return cb(null, obj) - if (depth === maxDepth) { + if (depth === opts.depth) { // edge case, ignore dependencies depData.dependencies = {} depData.peerDependencies = {} @@ -216,8 +236,7 @@ function readInstalled_ (folder, parent, name, reqver, depth, maxDepth, dev, cb) } readInstalled_( path.resolve(folder, "node_modules/"+pkg) - , obj, pkg, obj.dependencies[pkg], depth + 1, maxDepth - , dev + , obj, pkg, obj.dependencies[pkg], depth + 1, opts , cb ) }, function (er, installedData) { @@ -242,7 +261,7 @@ function readInstalled_ (folder, parent, name, reqver, depth, maxDepth, dev, cb) // starting from a root object, call findUnmet on each layer of children var riSeen = [] -function resolveInheritance (obj, log) { +function resolveInheritance (obj, opts) { if (typeof obj !== "object") return if (riSeen.indexOf(obj) !== -1) return riSeen.push(obj) @@ -250,18 +269,18 @@ function resolveInheritance (obj, log) { obj.dependencies = {} } Object.keys(obj.dependencies).forEach(function (dep) { - findUnmet(obj.dependencies[dep], log) + findUnmet(obj.dependencies[dep], opts) }) Object.keys(obj.dependencies).forEach(function (dep) { - resolveInheritance(obj.dependencies[dep], log) + resolveInheritance(obj.dependencies[dep], opts) }) - findUnmet(obj, log) + findUnmet(obj, opts) } // find unmet deps by walking up the tree object. // No I/O var fuSeen = [] -function findUnmet (obj, log) { +function findUnmet (obj, opts) { if (fuSeen.indexOf(obj) !== -1) return fuSeen.push(obj) //console.error("find unmet", obj.name, obj.parent && obj.parent.name) @@ -288,7 +307,7 @@ function findUnmet (obj, log) { && semver.validRange(deps[d], true) && !semver.satisfies(found.version, deps[d], true)) { // the bad thing will happen - log("unmet dependency", obj.path + " requires "+d+"@'"+deps[d] + opts.log("unmet dependency", obj.path + " requires "+d+"@'"+deps[d] +"' but will load\n" +found.path+",\nwhich is version "+found.version ) diff --git a/node_modules/read-installed/test/basic.js b/node_modules/read-installed/test/basic.js index a6c5ff546..4d83cd0ca 100644 --- a/node_modules/read-installed/test/basic.js +++ b/node_modules/read-installed/test/basic.js @@ -1,5 +1,5 @@ var readInstalled = require("../read-installed.js") -var json = require("../package.json") +var json = require("./fixtures/package.json") var known = [].concat(Object.keys(json.dependencies) , Object.keys(json.optionalDependencies) , Object.keys(json.devDependencies)).sort() @@ -8,6 +8,7 @@ var path = require("path") test("make sure that it works", function (t) { readInstalled(path.join(__dirname, "../"), { + dev: true, log: console.error }, function (er, map) { t.notOk(er, "er should be bull") @@ -21,6 +22,7 @@ test("make sure that it works", function (t) { t.end() }) }) + var seen = [] function cleanup (map) { if (seen.indexOf(map) !== -1) return diff --git a/node_modules/read-installed/test/depth-0.js b/node_modules/read-installed/test/depth-0.js new file mode 100644 index 000000000..16dc6c525 --- /dev/null +++ b/node_modules/read-installed/test/depth-0.js @@ -0,0 +1,25 @@ +var readInstalled = require("../read-installed.js") +var test = require("tap").test +var json = require("../package.json") +var path = require("path") +var known = [].concat(Object.keys(json.dependencies) + , Object.keys(json.optionalDependencies) + , Object.keys(json.devDependencies)).sort() + +test("make sure that it works with depth=0", function (t) { + readInstalled(path.join(__dirname, "../"), { + depth: 0 + }, 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) + // Exclude self from dependencies when depth = 0 + delete map.dependencies[json.name] + var subdeps = Object.keys(map.dependencies).reduce(function(acc, dep) { + acc += Object.keys(map.dependencies[dep].dependencies).length; + return acc; + }, 0); + t.equal(subdeps, 0, "there should be no sub dependencies") + t.end() + }) +}) diff --git a/node_modules/read-installed/test/depth-1.js b/node_modules/read-installed/test/depth-1.js new file mode 100644 index 000000000..977c9276f --- /dev/null +++ b/node_modules/read-installed/test/depth-1.js @@ -0,0 +1,23 @@ +var readInstalled = require("../read-installed.js") +var test = require("tap").test +var json = require("../package.json") +var path = require("path") +var known = [].concat(Object.keys(json.dependencies) + , Object.keys(json.optionalDependencies) + , Object.keys(json.devDependencies)).sort() + +test("make sure that it works with depth=1", function (t) { + readInstalled(path.join(__dirname, "../"), { + depth: 1 + }, 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) + var subdeps = Object.keys(map.dependencies).reduce(function(acc, dep) { + acc += Object.keys(map.dependencies[dep].dependencies).length; + return acc; + }, 0); + t.notEqual(subdeps, 0, "there should some sub dependencies") + t.end() + }) +}) diff --git a/node_modules/read-installed/test/dev.js b/node_modules/read-installed/test/dev.js index 104761745..f6f4857bb 100644 --- a/node_modules/read-installed/test/dev.js +++ b/node_modules/read-installed/test/dev.js @@ -1,6 +1,6 @@ var readInstalled = require("../read-installed.js") var test = require("tap").test -var json = require("../package.json") +var json = require("./fixtures/package.json") var path = require("path") var known = [].concat(Object.keys(json.dependencies) , Object.keys(json.optionalDependencies) @@ -8,8 +8,9 @@ var known = [].concat(Object.keys(json.dependencies) test("make sure that it works without dev deps", function (t) { readInstalled(path.join(__dirname, "../"), { - log: console.error - , dev: true }, function (er, map) { + log: console.error, + dev: false + }, 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) diff --git a/node_modules/read-installed/test/fixtures/package.json b/node_modules/read-installed/test/fixtures/package.json new file mode 100644 index 000000000..8f4f11916 --- /dev/null +++ b/node_modules/read-installed/test/fixtures/package.json @@ -0,0 +1,27 @@ +{ + "name": "read-installed", + "description": "Read all the installed packages in a folder, and return a tree structure with all the data.", + "version": "1.0.0", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/read-installed" + }, + "main": "read-installed.js", + "scripts": { + "test": "tap ./test/" + }, + "dependencies": { + "semver": "2", + "slide": "~1.1.3", + "read-package-json": "1", + "util-extend":"1" + }, + "optionalDependencies": { + "graceful-fs": "~2" + }, + "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)", + "license": "ISC", + "devDependencies": { + "tap": "~0.4.8" + } +} diff --git a/node_modules/read-installed/test/fixtures/peer-at-latest/node_modules/debug/package.json b/node_modules/read-installed/test/fixtures/peer-at-latest/node_modules/debug/package.json deleted file mode 100644 index f56ac0fc5..000000000 --- a/node_modules/read-installed/test/fixtures/peer-at-latest/node_modules/debug/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "debug", - "version": "0.7.4", - "dependencies": {}, - "_id": "debug@0.7.4", - "_from": "debug@latest" -} diff --git a/node_modules/read-installed/test/fixtures/peer-at-latest/node_modules/strong-task-emitter/package.json b/node_modules/read-installed/test/fixtures/peer-at-latest/node_modules/strong-task-emitter/package.json deleted file mode 100644 index 8824f5387..000000000 --- a/node_modules/read-installed/test/fixtures/peer-at-latest/node_modules/strong-task-emitter/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "strong-task-emitter", - "version": "0.0.4", - "dependencies": { - "debug": "latest" - }, - "_id": "strong-task-emitter@0.0.4", - "_from": "strong-task-emitter@0.0.4", - "_resolved": "https://registry.npmjs.org/strong-task-emitter/-/strong-task-emitter-0.0.4.tgz" -} diff --git a/node_modules/read-installed/test/noargs.js b/node_modules/read-installed/test/noargs.js index 0de5ba430..a84a8f4cf 100644 --- a/node_modules/read-installed/test/noargs.js +++ b/node_modules/read-installed/test/noargs.js @@ -1,6 +1,6 @@ var readInstalled = require("../read-installed.js") var test = require("tap").test -var json = require("../package.json") +var json = require("./fixtures/package.json") var path = require("path") var known = [].concat(Object.keys(json.dependencies) , Object.keys(json.optionalDependencies) @@ -14,7 +14,7 @@ test("make sure that it works without dev deps", function (t) { var deps = Object.keys(map.dependencies).sort() t.equal(deps.length, known.length, "array lengths are equal") t.deepEqual(deps, known, "arrays should be equal") - t.notOk(map.dependencies.tap.extraneous, 'extraneous is set on devDep') + t.ok(map.dependencies.tap.extraneous, 'extraneous is set on devDep') t.end() }) }) |