diff options
author | isaacs <i@izs.me> | 2010-08-25 01:48:49 +0400 |
---|---|---|
committer | isaacs <i@izs.me> | 2010-08-25 16:21:50 +0400 |
commit | a283438c61676eebd993dd99d7049f69c386e6de (patch) | |
tree | cbbf884945adac04d0030c7a949855f1d1e945ce /lib | |
parent | cbac60dba4090b10107ec0ec5bdb85f8274953b9 (diff) |
Load default data from the directories provided.
Turns out it's not that hard.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/utils/load-package-defaults.js | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/utils/load-package-defaults.js b/lib/utils/load-package-defaults.js new file mode 100644 index 000000000..935c1acc7 --- /dev/null +++ b/lib/utils/load-package-defaults.js @@ -0,0 +1,55 @@ + +module.exports = loadPackageDefaults + +var path = require("path") + , log = require("./log") + , find = require("./find") + , asyncMap = require("./async-map") + , npm = require("../../npm") + +function loadPackageDefaults (pkg, cb) { + asyncMap([pkg], function (pkg, cb) { + readDefaultModules(pkg, cb) + readDefaultBins(pkg, cb) + }, 2, function (er) { cb(er, pkg) }) +} + +// shim ROOT/{name}-{version}/**/*.js to ROOT/.npm/{name}/{version}/{lib}/**/*.js +function readDefaultModules(pkg, cb) { + log.verbose("linking default modules", pkg._id) + var lib = pkg.directories && pkg.directories.lib || pkg.lib + , pkgDir = path.join(npm.dir, pkg.name, pkg.version, "package") + , libDir = path.join(pkgDir, lib) + if (pkg.modules || !lib) return cb(null, pkg) + // create a modules hash from the lib folder. + pkg.modules = {} + find(libDir, /\.(js|node)$/, function (er, filenames) { + if (er) return cb(er) + filenames.forEach(function (filename) { + filename = filename.replace(/\.(js|node)$/, '') + pkg.modules[filename.substr(libDir.length + 1)] = + filename.substr(pkgDir.length + 1) + }) + return cb(null, pkg) + }) +} +function readDefaultBins (pkg, cb) { + var binDir = pkg.directories && pkg.directories.bin + log.silly(pkg, binDir) + if (pkg.bin || !binDir) return cb(null, pkg) + log.verbose("linking default bins", pkg._id) + var pkgDir = path.join(npm.dir, pkg.name, pkg.version, "package") + binDir = path.join(pkgDir, binDir) + pkg.bin = {} + find(binDir, function (er, filenames) { + log.silly(filenames, "default bins") + if (er) return cb(er) + filenames.forEach(function (filename) { + pkg.bin[filename.substr(binDir.length + 1)] = + filename.substr(pkgDir.length + 1) + }) + log.silly(pkg.bin, pkg._id+".bin") + cb(null, pkg) + }) +} + |