Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorisaacs <i@izs.me>2010-08-25 01:48:49 +0400
committerisaacs <i@izs.me>2010-08-25 16:21:50 +0400
commita283438c61676eebd993dd99d7049f69c386e6de (patch)
treecbbf884945adac04d0030c7a949855f1d1e945ce /lib
parentcbac60dba4090b10107ec0ec5bdb85f8274953b9 (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.js55
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)
+ })
+}
+