From e0701d4a91eb3c73140043a00d25ec1a78c8a6da Mon Sep 17 00:00:00 2001 From: isaacs Date: Thu, 10 Jun 2010 21:09:10 -0700 Subject: [PATCH 01/79] Set the _nodeSupported flag on package data as it comes in This will make it possible to find a version of a package that both satisfies a dep requirement and works with the current version of node --- lib/install.js | 8 ++++ lib/utils/read-json.js | 106 +++++++++++++++++++++++------------------ lib/utils/set.js | 4 ++ 3 files changed, 72 insertions(+), 46 deletions(-) diff --git a/lib/install.js b/lib/install.js index b79becc0232..86014a916ef 100644 --- a/lib/install.js +++ b/lib/install.js @@ -123,6 +123,13 @@ function registryInstall (pkglist, cb) { if (!er && !data) er = new Error("not found in registry: "+name) if (er) return cb(er) if (!data._id) data._id = name + try { + for (var ver in data.versions) { + readJson.processJson(data.versions[ver]) + } + } catch (ex) { + return log.er(cb, "error processing versions")(ex) + } npm.set(data) seen[pkg] = false return F(pkg) @@ -157,6 +164,7 @@ function registryInstall (pkglist, cb) { var data = npm.get(name) , stable = data["dist-tags"] && data["dist-tags"][defTag] if (stable && semver.satisfies(stable, range)) { + log(data.versions[stable], name+"@stable") stable = name + "@" + stable if (!seen[stable]) pkglist.push(stable) return F(pkglist.shift()) diff --git a/lib/utils/read-json.js b/lib/utils/read-json.js index 460c3838857..2fd703ba696 100644 --- a/lib/utils/read-json.js +++ b/lib/utils/read-json.js @@ -1,5 +1,6 @@ module.exports = readJson +readJson.processJson = processJson var fs = require("fs") , semver = require("./semver") @@ -7,46 +8,69 @@ var fs = require("fs") function readJson (jsonFile, tag, cb) { log(jsonFile, "readJson") + fs.readFile(jsonFile, processJson(tag, cb)) +} +function processJson (tag, cb) { if (!cb) cb = tag, tag = null - fs.readFile(jsonFile, function (er, jsonString) { - jsonString = jsonString + "" - if (er) return cb(er, jsonString) - var json - try { - json = JSON.parse(jsonString) - } catch (ex) { - return cb(new Error( - "Failed to parse json file: "+jsonFile+"\n"+ex.message+"\n"+jsonString)) - } + if (typeof cb !== "function") { + var thing = cb, cb = null + return P(null, thing) + } else return P - ;[ "overlay", "env", "context", "ctx", "vnd", "vendor" ] - .forEach(function (vnd) { - if ((vnd in json) && json[vnd]) { - ;["node", "npm"].forEach(function (k) { - if ((k in json[vnd]) && json[vnd][k]) { - for (var i in json[vnd][k]) { - json[i] = json[vnd][k][i] - } - } - }) - } + function P (er, thing) { + if (er) { + if (cb) return cb(er, thing) + throw er + } + if (Object.prototype.toString.call(thing) === "[object Object]") { + return processObject(tag, cb)(er, thing) + } else { + return processJsonString(tag, cb)(er, thing) + } + } +} +function processJsonString (tag, cb) { return function (er, jsonString) { + jsonString += "" + if (er) return cb(er, jsonString) + var json + try { + json = JSON.parse(jsonString) + } catch (ex) { + var e = new Error( + "Failed to parse json file: "+jsonFile+"\n"+ex.message+"\n"+jsonString) + if (cb) return cb(e) + throw e + } + return processObject(tag, cb)(er, json) +}} +function processObject (tag, cb) { return function (er, json) { + ;[ "overlay", "env", "context", "ctx", "vnd", "vendor" ] + .forEach(function (vnd) { + if (!json[vnd]) return undefined + ;["node", "npm"].forEach(function (k) { + if (!json[vnd][k]) return undefined + for (var i in json[vnd][k]) json[i] = json[vnd][k][i] }) + }) - // slashes would be a security risk. - json.name = json.name.replace(/\//g, '-') - if (tag) json.version += tag - if (!(semver.valid(json.version))) { - return cb(new Error("Invalid version: "+json.version)) - } + // slashes would be a security risk. + // anything else will just fail harmlessly. + json.name = json.name.replace(/\//g, '-') + if (tag) json.version += tag + if (!(semver.valid(json.version))) { + var e = new Error("Invalid version: "+json.version) + if (cb) return cb(e) + throw e + } - var key = json.name+"-"+json.version - json._id = key - testEngine(json, cb) - }) -} + json._id = json.name+"-"+json.version + json = testEngine(json) + if (cb) cb(null,json) + return json +}} -function testEngine (json, cb) { - if (!json.engines) return cb(null, json) +function testEngine (json) { + if (!json.engines) json.engines = { "node" : "*" } var nodeVer = process.version , ok = false @@ -62,16 +86,6 @@ function testEngine (json, cb) { } } } - log("required: node " + JSON.stringify(json.engines.node), "testEngine") - if (!("node" in json.engines)) nodeNotSupported(cb) - else if (!semver.satisfies(nodeVer, json.engines.node)) { - nodeUnsatisfied(nodeVer, json.engines.node, cb) - } - else cb(null, json) -} - -function nodeNotSupported (cb) { cb(new Error("node not supported")) } -function nodeUnsatisfied (nodeVer, e, cb) { - cb(new Error("node version not compatible: \n"+ - "required: " +e+"\nactual: " +nodeVer)) + json._nodeSupported = semver.satisfies(nodeVer, json.engines.node || "undefined") + return json } diff --git a/lib/utils/set.js b/lib/utils/set.js index 6baa3e55828..a08f17318df 100644 --- a/lib/utils/set.js +++ b/lib/utils/set.js @@ -1,14 +1,18 @@ module.exports = set var get = require("./get") + , processJson = require("./read-json").processJson function set (obj, key, val) { for (var i in obj) if (i.toLowerCase() === key.toLowerCase()) return obj[i] = val obj[key] = val if (val && val.version && key.indexOf("-"+val.version) !== -1) { + processJson(val) key = key.replace("-"+val.version, "") var reg = get(obj, key) || {} set(obj, key, reg) reg.versions = get(reg, "versions") || {} if (!get(reg.versions, val.version)) set(reg.versions, val.version, val) + } else if (val && val.versions) { + for (var v in val.versions) set(obj, key+"-"+v, val.versions[v]) } } From 64549948c0b86429be5284f24f656cbdf984c871 Mon Sep 17 00:00:00 2001 From: isaacs Date: Fri, 11 Jun 2010 11:07:32 -0700 Subject: [PATCH 02/79] Add an easy way to print the version using npm -v or npm --version --- cli.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/cli.js b/cli.js index 30aebc81658..8d9b0efe0f2 100755 --- a/cli.js +++ b/cli.js @@ -19,7 +19,6 @@ var fs = require("fs") , flagsDone log(sys.inspect(argv), "cli") -log(npm.version, "version") while (arg = argv.shift()) { if (!command && (arg in npm.commands)) { @@ -41,9 +40,16 @@ if (key) conf[key] = true npm.argv = arglist for (var k in conf) npm.config.set(k, conf[k]) +var vindex = arglist.indexOf("-v") + , printVersion = vindex !== -1 || conf.version +if (printVersion) { + sys.puts(npm.version) + if (vindex !== -1) arglist.splice(vindex, 1) +} else log(npm.version, "version") + process.addListener("uncaughtException", errorHandler) -if (!command) { +if (!command) { if (!printVersion) { // npm.commands.help([arglist.join(" ")]) if (arglist.length) log(arglist, "unknown command") sys.error( "What do you want me to do?\n\n" @@ -52,7 +58,7 @@ if (!command) { + "Check 'man npm' or 'man npm-help' for more information\n\n" + "This is supposed to happen. " ) -} else npm.commands[command](arglist, errorHandler) +}} else npm.commands[command](arglist, errorHandler) function errorHandler (er) { if (er) { From c44a9be6e88a570b3d6f99cc679243e57d7ad88b Mon Sep 17 00:00:00 2001 From: isaacs Date: Sat, 12 Jun 2010 22:29:00 -0700 Subject: [PATCH 03/79] Add a warning so that homebrew users will stop getting so confused --- lib/build.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/build.js b/lib/build.js index 58d6cfded84..4bb0b5c71a9 100644 --- a/lib/build.js +++ b/lib/build.js @@ -308,11 +308,15 @@ function linkMain (pkg, cb) { function linkBins (pkg, cb) { log(pkg._id, "linkBins") if (!pkg.bin) return cb() - var steps = [] + var binroot = npm.config.get("binroot") + , steps = [] , dep = path.join(npm.dir, pkg.name, pkg.version, "dependencies") + if (!process.env.PATH || -1 === process.env.PATH.indexOf(binroot)) { + log("bins installing to "+binroot+", outside PATH", "warning") + } for (var i in pkg.bin) if (i.charAt(0) !== "_") { log(i+" "+pkg.bin[i], "linkBin") - var to = path.join(npm.config.get("binroot"), i+"-"+pkg.version) + var to = path.join(binroot, i+"-"+pkg.version) , from = path.join(npm.dir, pkg.name, pkg.version, "package", pkg.bin[i]) steps.push([shimTest, from, to, dep]) } From 4672d7343f83abd1c7c406675564f7f27b914bb8 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sat, 12 Jun 2010 22:29:46 -0700 Subject: [PATCH 04/79] Abstract out the default config into a separate file. --- lib/utils/default-config.js | 26 ++++++++++++++++++++++++++ lib/utils/ini.js | 15 +-------------- 2 files changed, 27 insertions(+), 14 deletions(-) create mode 100644 lib/utils/default-config.js diff --git a/lib/utils/default-config.js b/lib/utils/default-config.js new file mode 100644 index 00000000000..1b7a2e48f5f --- /dev/null +++ b/lib/utils/default-config.js @@ -0,0 +1,26 @@ + +var iamroot = (process.getuid() === 0) + , log = require("./log") + , path = require("path") + , hasSSL = false +try { + crypto = require("crypto") + hasSSL = true +} catch (ex) { + crypto = {} +} + +log(iamroot, "sudo") + +module.exports = + { "auto-activate" : "always" + , "auto-deactivate" : true + , root : iamroot ? path.join(process.installPrefix, "lib", "node") + : require.paths[0].indexOf(".npm") !== -1 ? require.paths[1] + : require.paths.length > 2 ? require.paths[0] + : process.env.HOME ? path.join(process.env.HOME, '.node_libraries') + : process.cwd() + , binroot : path.join(process.installPrefix, "bin") + , registry : hasSSL ? "https://registry.npmjs.org/" + : "http://registry.npmjs.org/" + } diff --git a/lib/utils/ini.js b/lib/utils/ini.js index cdf15197f88..0866633aa67 100644 --- a/lib/utils/ini.js +++ b/lib/utils/ini.js @@ -36,20 +36,8 @@ if (typeof crypto.Cipher !== "function") { } var sys = require("sys") - , iamroot = (process.getuid() === 0) , npm = require("../../npm") - , defaultConfig = - { "auto-activate" : "always" - , "auto-deactivate" : true - , root : iamroot ? path.join(process.installPrefix, "lib", "node") - : require.paths[0].indexOf(".npm") !== -1 ? require.paths[1] - : require.paths.length > 2 ? require.paths[0] - : process.env.HOME ? path.join(process.env.HOME, '.node_libraries') - : process.cwd() - , binroot : path.join(process.installPrefix, "bin") - , registry : hasSSL ? "https://registry.npmjs.org/" - : "http://registry.npmjs.org/" - } + , defaultConfig = require("./default-config") , configfile = path.join(process.env.HOME, '.npmrc') , config = getConfig() || {} , privateKey @@ -60,7 +48,6 @@ exports.del = del exports.get = get exports.set = set -log(iamroot, "sudo") function getConfig () { // TODO: --config on the cli to set this. From 2cabb324c3c5c00b5605711cde1685fbfed073dc Mon Sep 17 00:00:00 2001 From: isaacs Date: Sat, 12 Jun 2010 22:56:29 -0700 Subject: [PATCH 05/79] Use the stdio file descriptors if the data doesn't need to be piped through --- lib/utils/exec.js | 21 ++++++++++++++------- lib/utils/fetch.js | 2 +- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/lib/utils/exec.js b/lib/utils/exec.js index 8e0249ef50e..e963ddcdfb2 100644 --- a/lib/utils/exec.js +++ b/lib/utils/exec.js @@ -1,22 +1,29 @@ var log = require("../utils/log"); -module.exports = function exec (cmd, args, env, quiet, cb) { - if (!cb) cb = quiet, quiet = false +module.exports = function exec (cmd, args, env, pipe, cb) { + if (!cb) cb = pipe, pipe = false if (!cb) cb = env, env = null log(cmd+" "+args.map(JSON.stringify).join(" "), "exec") - var cp = require("child_process").spawn(cmd, args, env) + var stdio = process.binding("stdio") + , fds = [ stdio.stdinFD || 0 + , stdio.stdoutFD || 1 + , stdio.stderrFD || 2 + ] + , cp = require("child_process").spawn( cmd + , args + , env + , pipe ? null : fds + ) , stdout = "" , stderr = "" - cp.stdout.addListener("data", function (chunk) { + cp.stdout && cp.stdout.addListener("data", function (chunk) { if (chunk) { - if (!quiet) process.stdout.write(chunk) stdout += chunk } }); - cp.stderr.addListener("data", function (chunk) { + cp.stdout && cp.stdout.addListener("data", function (chunk) { if (chunk) { - if (!quiet) process.binding('stdio').writeError(chunk) stderr += chunk } }); diff --git a/lib/utils/fetch.js b/lib/utils/fetch.js index 876a3cace5c..3193fd25273 100644 --- a/lib/utils/fetch.js +++ b/lib/utils/fetch.js @@ -97,7 +97,7 @@ if (module !== process.mainModule) return log("testing", "fetch") var exec = require("./exec") , urls = - [ "http://registry.npmjs.org/npm/-/npm-0.1.10.tgz" + [ "http://registry.npmjs.org/npm/-/npm-0.1.16.tgz" , "http://registry.npmjs.org/less/-/less-1.0.5.tgz" ] , path = require("path") From 00b916c49f1f4b1704d087f0ad3bf8c689aae1d1 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sat, 12 Jun 2010 22:58:47 -0700 Subject: [PATCH 06/79] Update install script to check man path using the new mechanism --- scripts/install-docs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install-docs.js b/scripts/install-docs.js index cbbd7b1dbc7..c1415c72c1f 100644 --- a/scripts/install-docs.js +++ b/scripts/install-docs.js @@ -20,7 +20,7 @@ function dontPanic (er) { log("probably still ok otherwise, though", "don't panic") } -exec("manpath", [], function (er, code, stdout, stderr) { +exec("manpath", [], null, true, function (er, code, stdout, stderr) { var manpath = er ? [] : stdout.trim().split(":") if (manpath.indexOf(path.dirname(manTarget)) === -1) { log("It seems " + manTarget + " might not be visible to man", "!") From 0f692d59b733163133ae162b47ffb03e68f4b995 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sat, 12 Jun 2010 23:13:10 -0700 Subject: [PATCH 07/79] Call the cb() so that ls says "npm ok" when it works as expected --- lib/ls.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/ls.js b/lib/ls.js index 9257d484bef..41a74f3e5fb 100644 --- a/lib/ls.js +++ b/lib/ls.js @@ -14,8 +14,10 @@ function ls (args, cb) { registry.get(function (er, remote) { var pretty = prettify(merge(installed, remote), args) , stdout = process.stdout + cb() stdout.write(pretty) stdout.flush() + stdout.flush() }) }) } From f86ce1128ab0f654b565734797ee4915411c7f77 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sat, 12 Jun 2010 23:13:30 -0700 Subject: [PATCH 08/79] Start with a reminder that it failed if you don't see "ok" --- cli.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cli.js b/cli.js index 8d9b0efe0f2..167a62dfc24 100755 --- a/cli.js +++ b/cli.js @@ -2,13 +2,16 @@ // don't assume that npm is installed in any particular spot, since this // might conceivably be a bootstrap attempt. +var log = require("./lib/utils/log") + +log("ok", "it worked if it ends with") + var fs = require("fs") , path = require("path") , sys = require("sys") , npm = require("./npm") // supported commands. - , log = require("./lib/utils/log") , argv = process.argv.slice(2) , arg = "" From 877306c56a4ae5f8da6e6dcb5b0c65c210ac7eca Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 14 Jun 2010 14:49:40 -0700 Subject: [PATCH 09/79] fix a regression in readJson found by tjholowaychuk --- lib/utils/read-json.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils/read-json.js b/lib/utils/read-json.js index 2fd703ba696..07ab9c00318 100644 --- a/lib/utils/read-json.js +++ b/lib/utils/read-json.js @@ -37,7 +37,7 @@ function processJsonString (tag, cb) { return function (er, jsonString) { json = JSON.parse(jsonString) } catch (ex) { var e = new Error( - "Failed to parse json file: "+jsonFile+"\n"+ex.message+"\n"+jsonString) + "Failed to parse json\n"+ex.message+"\n"+jsonString) if (cb) return cb(e) throw e } From e5ed4ed332225f0894d5e171ebddfa7a747920ac Mon Sep 17 00:00:00 2001 From: isaacs Date: Wed, 16 Jun 2010 00:37:08 -0700 Subject: [PATCH 10/79] update method of creating hash object --- lib/link.js | 2 +- lib/utils/registry/adduser.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/link.js b/lib/link.js index 5569ff0ddca..0f702becfb6 100644 --- a/lib/link.js +++ b/lib/link.js @@ -34,7 +34,7 @@ function link (args, cb) { , function (cb) { readJson ( jsonFile , "-LINK-"+( - new crypto.Hash().init("sha1").update(folder).digest("hex").substr(0,8) + crypto.createHash("sha1").update(folder).digest("hex").substr(0,8) ) , function (er, data) { if (er) return cb(er) diff --git a/lib/utils/registry/adduser.js b/lib/utils/registry/adduser.js index dca5a3b851c..631bb49a24f 100644 --- a/lib/utils/registry/adduser.js +++ b/lib/utils/registry/adduser.js @@ -7,7 +7,7 @@ var uuid = require("../uuid") , log = require("../log") function sha (s) { - return new crypto.Hash().init("sha1").update(s).digest("hex") + return crypto.createHash("sha1").update(s).digest("hex") } function adduser (username, password, email, callback) { From 89a6de51eaea139d012b7e70c3680418f4e76362 Mon Sep 17 00:00:00 2001 From: isaacs Date: Wed, 16 Jun 2010 00:43:34 -0700 Subject: [PATCH 11/79] Bump version --- doc/npm.md | 3 +++ man/npm.1 | 4 ++++ package.json | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/doc/npm.md b/doc/npm.md index a7909c9ed03..45c503ff0ba 100644 --- a/doc/npm.md +++ b/doc/npm.md @@ -171,6 +171,9 @@ See for current todo list. Handle thrown errors Handle .npmignore +* 0.1.17: + Bug fixing and stabilization. + ## SEE ALSO npm-help(1) diff --git a/man/npm.1 b/man/npm.1 index 311066939a0..cecb343b4b3 100644 --- a/man/npm.1 +++ b/man/npm.1 @@ -300,6 +300,10 @@ Better tracking of ownership on the registry. .br Handle .npmignore . +.TP +0.1.17 +Bug fixing and stabilization. +. .SH "SEE ALSO" npm\-help(1) . diff --git a/package.json b/package.json index c252950e333..247ddb6d5f4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name" : "npm" , "description" : "A package manager for node" -, "version" : "0.1.16" +, "version" : "0.1.17" , "author" : "Isaac Z. Schlueter " , "contributors" : [ "Steve Steiner " From e571108758bf52400dab37a176b5f10e3e0de91f Mon Sep 17 00:00:00 2001 From: isaacs Date: Thu, 17 Jun 2010 16:50:13 -0700 Subject: [PATCH 12/79] html for the website --- html/index.html | 36 ++++++++++++++++++++++++++++++++++++ html/npm-fin.png | Bin 0 -> 47789 bytes html/npm-large.png | Bin 0 -> 483909 bytes html/npm.png | Bin 0 -> 1164 bytes 4 files changed, 36 insertions(+) create mode 100644 html/index.html create mode 100644 html/npm-fin.png create mode 100644 html/npm-large.png create mode 100644 html/npm.png diff --git a/html/index.html b/html/index.html new file mode 100644 index 00000000000..08610ca2231 --- /dev/null +++ b/html/index.html @@ -0,0 +1,36 @@ + + + + + + npm - Node Package Manager + +

npm

+ +

npm is a package manager for node. You can use it to install + and publish your node programs. It manages dependencies and does other cool stuff.

+ +

Not much here at the moment. Check out the + git repository.

+ + + diff --git a/html/npm-fin.png b/html/npm-fin.png new file mode 100644 index 0000000000000000000000000000000000000000..7efbef6274c7603a948dfa55a3dbc62276350872 GIT binary patch literal 47789 zcmXV2cRZHu+qb#x71`^y%1RQlS2ju6tB}2wy=7&O?5&K9Q1%R2AuD@@kWEI!dw72D zUr$e;Pr9z_JjQpOg=?riB*3M{ML|I!P*jlBL_t9lLqS1R#zBMMsWK^{g#S>v%IUa1 zcCc`LW$J8>B4y_A%$!lt&h&-3rn#w^hf}Y)C<;o0x}vO1%{pZMJVG_I-Hc&mj}Y0FFN#-}cxV^$2NK;%o3e(kc6tI-En zgZDFCcIsUQ4V}pjFMKcT2gQEP3cFa$|MIbz_h6qh_WQTW%*4dB?_f~xyn1%{>qohv zvYJ|p@4vsle^eyI$Is5qiHVBhQu5Fe6UXuxis&knat7j8;Ubaq(*B`?Sz?hy@6|Fp zu1?>uQ1Td@{)~~}F>E-RacH$N!0T4Z7XSBPw<+PaHqZV0wYf5(YeU(s(jmC1{N{ac zd9zpUBD`2K$Mi`_tw?Jf7Uo<1uA0401~VU=9IW>DzvT^jL`p`s;I%8}ZSM8>Szaj` zCa(Vo^?iGT4>}(g7Z(FD@s`!kc#ud3MFoY6sOMj!4I5t)1iK!teG3i_ZhW=N#?CI` zae$GwF(h%NvcGITkV4YskJFza>=H^y*VNS1mvsBr#s-4FKaM5T+lMs17Kt2T6ttT@ zTDZDA8P1jAHEIfrj_!UDJG$F?bqViOIG>e%&*rIR3qBP;1_nmrttTa3Cp)Psu@(B# z2g$*~)j#12E-fup7&T8fzN+Y#c&u7$KPO#*A=i8Zt4E+A?5f(l|25I}^rs-M!~K0H zH@7ma;&|HUiLp(rOiPvqE#7A{Q#jEIIilbqYA~ETLa~YHMLmyj zq;cW@;{QCqO&wH-W+fHyq)abKB`JyXG1e6&r>5*g%nCOG5$=R1w?k`<5Ns|{s|!KcQ{eSH!bRONep3I(d7z89x& zjeSuOQonKWDDh01T?wQt;hijO@v zJG*krsuv1~Gl=fNOaD-{EYY*|?=10YI2Rb7jt*9pZ*u8MkbYnc`u^o=x9Ly~etx!? z*VD$A+oY^YW5ti(D<$3f-=k0B-+ua`?Fy;}O8;KxXsLDuDJdyq$_g?eST&YO21}se zgKo8S@)M{%cz5^&yjn#X$y~bs{{Xib6~pNze7%=D!zp=<;3TOA5>rybj*ByIt4nwI zuQ20f-!<<$+G*TfM!y`e3_MWjsq#KMFdxjQx1Vb`mEhy!doh?%Mab%)*mOh4ZBxtD z_2`q$k8P;@|TyFXJutMC)KQQhmVDp>DNLdFg$pPe`Vb4d85Yl>e8o(Rk#;vs_mbe6Vaw} z$^gZ|EW4Uw%&SvrQf^T1?d|Qn(i1S0^KrJ`rJutaKCl`pPQKgkiKQ>lord#$1+t`^ zc>HzP$!K?>tKu#xYG00~0qa6O6rcX`-#@<}#?Uvv+MS=OevvKiLrq3@c)r`3k1fqD zb+`9#oFmG}dv*1DWGM*JzS)(8OcXsdxg;)K(wdcx4c#IQChxZFBMjGw$;rvi&dzh_ znmVVS$J;ZfC?i$wFGQt}x2E=UZKtYCs^B+evd#OGqYBXCDvY3EM0y4(Z8h@>3XmF! z8D{a0e07yL=_=wIXenR5d_fOH)M$OsxuZ}d>Tw{c_VHJn6*_xv|022wo_NmBoYu+i z)3oI1rS|>YXI&APxa6mMUx=h^jf{-W4ptMmWe+Cwg9YjjLu5BG5s{2(;qr=$>Y+Cn zm6N#`**R!%ID6RmXSGYTIHMWA>$a&t#Wz7w_>h$wHCz7(%ysB6mR*3~U~OO*Z}t4s zx0=1ta6PAc;_~%t?Z2hpA43PtK0dpofl<{BWVu;laWDF&>K;K zkA;zhh3ha|cgGq(ZD3|bA5NY)@quv<)Uq0mBPqdTKD>*umu%n(V|orf{M^(K%`C;d z(>h1-Q*Xi?4(6;LS@N^Ri(N`hd<%A)i4P`Ki;E`4#>Tw7yjr% zbSj}}sTD?9NPZ9#udA=mogRI!e$~sK-DbG{JwJ4%tOn)fFFZlc@3+a!{wWACS?XXQ z$qj5tDWoo49TnHp*k8SRMcNc9fk(krPyR zB<_eUHlxGQ((`yrH%~U)dc36F&0ol6(8p-rX#V~CUrzEZts?*XG&gVRR2YeUwK=MdtgS1M zg`p-z6BQE!JM0r}UxLC7jd%B8)||#Wav~!rxN-AF6m*X+&JJg49Y#4?CMR_c+V2#y zZWvC6b5QM@k?CSpNj~nxCfx}*)@X3Ga!eOy<@Qj%({rA@3!c>C`DL#sOBbQ9^0;uL%bTmqV?Cb>uo=ucdH{LXW%%#`W66_B;#eLMhCNqT zSFdR{YWBQmIgFwj=SqQIp6=uE`+o?-(h-1%Tio?YF%65#b0$rMVcMc1=2=or75B2P z&uS4FAGr%S3T6s&$(xX;X^B>Ww3wXnmgCL8c%8ZcH2{L`{{F3>CyTf+ey2k9aF3$# z5Hme-{m<_oRr`ts0ffoRR#8GZ&t0lDLU3>NC3B}AKY_AVRZz%z)E@Fmg%BC8 zCH8db*>uEcf4|K@${h_W%guEs-D->Rulm@8wEoinRg-DaYdInDG7`Kr>A*QlbOtUX z_ro<+M^eNuuj}E{mhLJlCZrEPYz(tODGkF1CN9a?A1M4q697<`m-aKC?Q)o*@Bxv8 z*}hFsA+GzMi0~3@103;A}6xvF;v!uydnJ+usm zMqd(d@9*6SF&mZsx@BZZ=y!R>Zdjwdnn>#(S4sc)oyz{+UJ9RS;K$$unNUL2AD``J zT71qYKIkUU%l$S0h}02+7sDXIQ>w$(t8Uo@*u&U5 zQEvF#-wq9l%wUJdHs7PC+97L2pKFdK_@!JtuE38SAN=PZxi$85cbnkn%gamX&leB3 zzN6*FwHd*aQ8e`eLL04bXjoR7U58(;X9r;u?Ti#E!&F;WgeC%*iXC9s;Hubi7javP zEjt4Ve~&8$5fKrOySn2&1nOKfaTTYyIK8V}$C>74xEUc5;bj6357_X&{Vd89mtlj} zg|xfZ!)RKkSFf~vF|CeZ@P`Hmhp9ZG6ZbxKn9n0?vbVQ4;T39%b!OxnEEaWLC!VzV z@|wW8)*TV)SW+X;Rb|$T=A75=708Jc8lJ;zS4Tz+-D#vu3mOPOF5Of~6R;X9dUT{7 zmg@AgJAjGAq^bZf3#w<6rUfe?+XeoKE#^MswL zgR#=zAEiWE_j>nrGV&lGd_m44qRFTW?)Ry;!e z(chn?-ODVWKtM14&cy$hk6_02C$RQU54$cL+du}ti;qB_G#E9M*R~|Ejg1%JD6P5J zgk9H%_m;lI(2H5`{CacahFBV%sH`6hayJoIH@hnmU)X`V3qB`vP`byPClv_nIcKv-Jg(LXw8y8Nqf>0*wstaRGlWFJz)OiMWdtC;0s^asO6icXdyS~N5?;DnuJ zPO|E$cV7(FSdD6ZVFrARTKFVa8uP1!iI$cYoZOVDV(Z17&7m1pMK2z9pmq-8e8yb_~q&n9P&4w6> zOLqWFShO!Er8wHfeg0x#W4i=pt!K~(+M)#Xc0MBXcX@a3nN;A(Bsr9vE{`QwZx$aw!g^4LF?@OAL(6r?LmdemI@Wh!Dw4W8K8tO^8 z^ZWqlMxc$>M1}FfJ5`$Fo&a=gfDlQ9vVY;rQ?>BYBe05GehoHz{?Ux~?dyE>*{)bE z1vZo_lT^@2kDlT4SI=MZ7C;}wC#oY-(G@$M-h|_V86S#Il}G*Egb)}OouF-s@Nz1j zX$Q>0snwOeXMX?wX!8ioo}n&h2w0JNtw3!8bW%Urc%NOaTixB)7}T62CiMmYq!wY2 zxZkBWbS5KTl|wQ=rnJfQ|9u!$L5hfXy zVInwsa>ZTA$E;Q;zVv3JB~MCwvL!C|WZ>&QHvETyh4nf#wEAI|s0UiP;*a<0*&c^$ zQ=2a&O<-;A{-|JJH$g-*ND%U(JSo2Qd_iznRUqTm^@PPmR8jQp5!BD&6S*lj2in$n>RzLr8G&o11q!)LPScja#mpfBn16y*&wT)@WuYVprAj z!-9Ly0+!#Jq`pA8I;#jc5g6WWy?L z7T?mK(XBI3C^DeoK&4R_VL44qU{fst5VUziz5Bv2Om1ptt>fRb zU)kw`b|s>|8zY4Pw$kuCo@-w!g&k77xheXyH3nG1$0wyvqd8@Run1n`Qw3f}{< zd}N@<($Mv~x>>tnE!@5agr23%P3u*=Dc6UI z?5myG`iL91^_sds6AU>y0q`|x&FKW|yy4ZZxaBb8r15I4r9kW?BVQElmu1I;8u<+3 zcbv#|J&y5PBY3MjA%n61-_4$YZL@`4y1#t+2``U)D(zJ##K933sn6nmd2t2<)M7BB zH!Adt6Tskt`c5)Z!S({h1bFZ-^x?NkY@{?UEw18r1V8MS3K&g$Ve98QW_Vjl}Yt_Sb+h-y;oFr2uH*P#B zHxNGVIocTg#yu&>wh4;ibe<@)OY2&F=dhY?vXJ*K-oe>D!t3_wU~UVl9Bo zSk3)uDe&Y!GF6rIP(J?P<3{veyJGwSXMna0<+i3UE2mON%FL_F3lHFj0tFyu8ktqy zVq`SwPv)j(x1DeDI9mViy1x#BA{sin`I84s;um{gVEI-(ETTF~uVvKb8g!A|u?(im zBdM{QNuE=kqHaSE487;L*aqXHIBW0X%%$dY6wQ6<7eemQN>u+H#P~l&9Sq9Bw~2`> z83f9348*eUR8l)SI+A$|Z?%k*Y-!5M%EF6pki=3HDL=1La-2qNAA=|dZ53-ifxVzK zIb>rRglf83YzGg)Z!uu`sD(?frU>MO>0gp=nAq4ew_@qa1UWb?_ZHg$;I0h{J1uuY zH{@X2?F`E7#o4(`k&~MDC4O8|_fMb~_wETf6t<(eMm--;zr|qBQ}dgJDU{Q?6hE&p zY{Y7>dAY5(bLzF*Oi4wR$~+^hIEl{Js=@ZbBIgmI-(fQU+t;MYJufwLQP zjkVpqd(T?_9qa2SwSXvzG_R^BTMQ|KU&5!&L2bUz4tzqMCRPzVMG4yz@JxNIa;1F;uh5Z#kR;&}12XJr{JXQxt0SR4aojka^THMW#0I zfOwC;J^u0e!zd{foC;W(GQpg!Xhbldlkqx)|23C1fclww#Kuj^t!{loUMGL!4DYnRO7abX8N8LtCRoJTC4^YJ@a z@297yJ#UvU-eBfqzsK194RRAOekN=wEn?|CF0Pg)_ zl_=Lja&r)-HP)gIv0k2&&o#;thV7XLD;*w1ptd8N^@a|LeIJ$flHPdPedv$CpdfCF zMfl^bmw#{Tc5ZBMb3gy~I3u=>sFEGJo?Qh+J0KOB7F`WZSWFO=J>@6+^CnCuewzud z3oq475rkL5T_Sv;$pAlBM4=gzqAe!JqJ9vLOfv zlJ0E{Toll*q9de4GsV0pj)_4Ga^1MRI8?7|MTX%oY({nSck5e6hPvh(2+y^^Vxn*#E#W$=3YNNJ-rDpUtaeZWn)ts+p3J5(9%u_ zbxvQnno=*F5UbEwg|Q#3%0QMjJ`50-mgMKYZLmiw=MSfMN72-}?>|fVJW-}!q4Tjr zxEi%7lN>XoQ=e3B4)8(lZ7Y6D(GtXGQXz3`r_Kz-QC^U z>7N~D5-1jM92OH3D%N>*tUtWGx@vAa);Aj+clDEdZ+PiTD5eMAkZzgYy?7R?AKHBU zQ0Zs5JR5pZ+_kJ!444gcd~JP+D0(sKzl!x3Ivog3Tt9KoqcGbAPw)p)NQg-le$O|1 zF%l^dqTderAe$-T27~IwqBMt_ATfz_7@hQKdM))m>l&9|YEtuP!ZO)$<^$kanH_!u zqX=e?+)w97sY7TiAcSuxOIpBG=ox!^tRSbQH3qc}0{!mIvupH=6Q~)|CCt9#eatxZ z27NZ4cDx86ikVqKj}U!YY4!G-zn=qcsAKRkBAo=iBLQ%?@S~FAMxTO6Ecr-{G_;F* zj;s^rp!3>5Z;7P)bKBwbg{E=f&-ZL5a1JPL_0PqDSrbfWIDk@4d?Mg83vY1fP?KQHguvuEBuK0e;wD|&`6&}j{Hw2LC((TAC+ zXxnc;Fb}M!@&ff#(7}u&ZI$DDwy0 zeN663`sOAziohtqeju(tF!3l{x2MNvW*&TdMVz96o;1aOuY~wx3HF$ii!&K9jHbyL+~Qf?!F-O#+$Kc zjf?R2tVB3Cv0wbV-dEh0-rw`&tOi&O8RalXJHyHLfBi7_D|XJx9Ysp~%qJ`?3}QRj?~mAE4_xad3%=)ez{nOSV5AEJ`rS}*Pxm6bwFD1^WqotY zB(>Hgnmaj1BUhTZX@wfpALl*j!xfxHT(gc~1T|*fJnIMa=2;X$+es6j9VrSRk^0tG!f~|1d_63w1zX zo}vC7cylX@z$bf1%v~FWkI}?p$-t;5WS47X*WVg|ULBr%GJRV%O;#1mV9CN<}4h!&%M~C1$sTFlYYfY4TdQFt#+9|47s>`4g+3Lop^I{2T5O{bA;f`BT zujV~MXOh0sV&UIx3vr8LkeD|Z5P8KP%HVq%@RyYXh0Y?@(K$9s5V!!&4_YoaSlt?9 zysa1f&%57%4L=U$?fGXDsQ;hiV>TAwD!(ZTaPcZ{x|EAVbkDs9B6h3k&s)hXCcbNz zy0;hT3kx<>idr5U z^vf%HKR>_y@AP{H@RbDkN0oJgV0DwlsCXH-!-*9W9s|6)3zL7(EczH4!exD!DQ=aF zH2P~clnki*;FPnnv2}m_`cp3Z!7F3E1?Uph&rx+mf;EDEBQN(L zB%z75ppULo3zk!)iVq0_kKK@kPcJZCf4ashp}V~9=tgA?2{mojj(LYxX|l7Z#?Hj#yd$LSs;E@eS-=$wv@Kc+KoEUBg+U)f>-hZqY@K zf$Ri{>!`(ewQ>pqFykKm%Qx*o57@9pHRMH*5M0;gU6x2Qg+2aPagiKU~0;0488Dn z&OVpEHT07cF}Nrky44>E2Bd15i@k?V65a)z8kx-CAhDa!o( zJb+GQJ-Lb8_a6YTY{p9pH&<{i>1AH%GC1R)}TsnRks&?XY#Sun}GUUa)} zJ6Q<`+xfeFM77rLeDhcMnGh$~wDuIPnPy?^V;Wq~^e{>fw!(rH@jPq{?Z|X~UqSnqlVS+XMY)x{t_{ z8Y^sM1U4yXMYzfZvvQP#)E6{`g4QrKkmQ@}KtgR9p42%mQQfuB;WAPqD=2f)Ya4FU zZnQ(2MxSE-1LIUyddW|JJCEHI9}3QKb%RkCv`oe_>#-u!EqnKLiWea`xD;HLZBkO{ zOYTe{e_H%W9-*8V)(0G-87*oZBOr|xH@dUXs{V&UC1r_&MO#~&_zSpgbwBxvZB_ih z0eD(r#LYZr+h{S>Rg=V!NkUE@DYWqU!Dk%|#eaJXSC_A##Hi7o7;l;feD?-fcQ6yt zRs1id(!LHCX=fspC)(3W;2fEFN6N8wWfKv0YI*gY*QU0k{ z_iLqQ!S5>bU;@O)PuZxxv;qm6+R%fn7g{ae9@Iau=S6(});OzBJX{+{Wzn?3qvX-r zS+pepC0Nkw*w)Z00H^{M5xwo|8`saaQySbRB->U@FVWKg0)vID|0KnFYY)UN#Rioq zePh-*&wz3e&+5U;gQby=It055BxsOw%VDj@G0P$4gwahVOx$2o2%EI|x3KvaLV;TR zp#2t$OC6-c_4j1Ag4($-3f|G>gi6G^=g0k!^MGwfG z-B}5%|6~P;F;>L(l*%Iv2Jb!8(o#TNYVU?&{1tpJmVJ7BVXjwMrc&UrIz~C2T&`-B z8vqhZ&5L*eK0wfY@@rMwO+D)Zz?NcUcEcVZtIn=2 zI$>uFy(@qck`n(Q#y5QDf$O?Pv!@#oQ4H{o{4eo_!pJ8DjKgFw(I2p%j6*lFiph`f74Ki3@QPwqWHeaKGd!C zOgCf+^qXy{@sZJiD9hxeB_ZZ4Z~fR$wFyy{DKYPTl)V)p6q+ajl9d+uGe3})h&Q2&ukaUT&C)D_hEpD?K) zNNK@%BjnHICmYIv4?Qeg`kx2<55BOJ4w@AoCM#&^11S?078HDX{%)NfEUV`)nu=X|5yvFb}af5W@W$i=x}5l|PbaML1r&@Vwct>Gs| zdG{H-z$3=S#|(dS!!UoGQrH&QoZhI?)*dUAi}e?2mT99Pdua7u@arn0ge#HN?5N5I z4314$;(TNv9RxfGEWZPmI|a9%_g*_T&{N_G_<14b!S!*eu^FgvQsvO`;D=GCp|I4$ zsxK-kg3TG*GXNk!cw2NI7!f9B(D6%#wKmmZu>Y6Kzz5dh!lvWbl$U5snQ94JafRS6 z;aGWm?cd{V(4^MMWC!1PI#29FbTr@M<8|=9 zKJ2B-7R1%wg_E(zyQ~W#<$w=QWip*?O(pOei^t`hwW=We>{`Yts09o&xe3V|ffLp! zt?o2fp;SKGQ#Sd2EwO=378Vu;Xb9v^5HGSo8Mvk};K0HFgS4XLBYyMh$L-&~LAg1@ zJ}B2JCSBi5P!|VDwApbh)?t}~ zYIVJrAqNBb)PTIj&oeJm^g2B28X7u6IRN4*lIhi0esteo26f8#5*zrkm92T$qKNhw zLP2l$n`vj=`7n9iW)o}tt&d^YiM7C&X|#D?6hV#uD7~fp1@Y<;0L-&glyh>MgScZ4PRqP=|o)J z_Z9=@&t1NI@Thd)y3K1^{Lnx%%Ei)e0y(Qhd$l(K`x3{Cf4hi)MsO^aoQz#<0IpAf zC?Gt~+%{Cq)*JdUhqax^N!dns9?hmI(ImPS$HWOkn*cDy+}aE+HUZn?sL$~e!WrCo&ie(T##|!!6-$7$|*|^Mdl8qEAsN%H2DaL`l)dG6y0-)Y!ErCYN$(x;wT`l@?AkU|W|`#aR?odfDVHDD0k^@aVf+}tC>AU% ziSEZ+RE-&ttK4XOoiNaa=Swtl(atC$2<8KX=dB^Ct6VhQB)9kdAwxS~coWJPJ59R- z*`g^(Zf4Ad8=&O3n9I zp#NVhuosIAC~DQA9K{zD6hMklV?I#T)S)N(=h7{~pg0@{l0;r(U&#ChR!y(jB=6(E zh>m}3O!x)N6c~*y@LVJ;@;Smw+oL++U^czzjhEBZqLu-x1gs-Qp$B_UO(8Nc=4taB zP#e|`QN;K6wU<>j0m+e8ck%W~f!Rv3to!5QH0X~*7hyd70~^ll=Q88>wZTkfH6HEq zS-7B}MX6SWDPxn*`Pa!AB(F)$>oAoONEzHOLjr^xNZM>+TxnJcLX9P+yX&EgIs?0f zm_EmOyj|#S46QIJHFZSt1Z1n~l9728j!PYmlrY5Eer&(vxxVxPAlj2I5-z@gS1hB= zvsH@$BZ@*L`J>l~{cn%kAfT)bUNAU>b7^TAU8jOHqBqN+$jUPH>ExHdky%**6c`^= zN#csQHc~DRv#*8^fr_A1qjC4j={q$&Y4!DSrrjQ2STNS*t7M5&-74Xau7&iKtn0$nx*X1d;wwgB{W0V`>W*~KUsh1^4h2&E{0#Smd> z-XL*t(+uWbEVy=*3hab}DYy_fXA|{j)iKdlI+Vf*=|DvS_wcZhSUei>+jEGI_$_K9^Qe z?9{7HJxTQDw;Uy>r|tr2pm=fq2=K9%1`an~Wq5-72K){gP{}0A$B}A(_!J^jfdmrX57PvE=4|4(ej` z6&V@XcZJw?Q^!siS{$SVH=6I8p=pRU02$UN-1h%$H z_`b!uU&0J9J3;kyDU^Zn2Pj_{k)iKC`<%a=;cAEr9#kJXjHy)Dqh zry-mKX3CRN+YbnLyTJ6UW_~G;jFtJ2B5Ii5u)6Qo_f=8Yb4zm+b82(?A%q&cbKGlqduhdl z6WbOeB9P9}&8yF z(4;@LNV~>)!mPn>@uo1G5ckoz zlHe{Jk5p6r`IWy*0;@zJbHua%-m?TCG@ybj{#EzGgM(WT%CE)mQEM#EDGZNcDr9ZG zK|^z$=8dzo+rHc7@f$?<9Le+j2~e!+STydf?IcLaybBl7C@^BIm)xoxM7kSRmO-E? zb(4FKj2lHI#kvV=DlLtF7+|{i*$SEF&2@=oJY!PgQj-EG!_-!VO6jG?o2R z_cZq;#J}8YN0*jZ;#|D39ERG@yo8k0e)dTVRQys<+8`$EO5n*M~sLT$x&0`wiwP(*78EiJm zjq-+@!1lc!E=j1C=;OF80mY;zS?i0)etk31*epqOc?I{IK6fCIc@6k;q=KNUUa0-} zndO(N>GZhk^-jTbh$FEY1wjhQ61OK4;zPEO(=vd?dxPEwE4}`x=o*WU06S3KmFIN4 zo65+~98&@b!aD-Sj*gB>kH%V)QPaH9Vu@2XFo!#PxyXgl=FuK0P9;w3MjX=}Ii;{W zI5@1cyV4#}9<>8>=*ZW!5L4i6Gq4=c6=HJu=z|;b@N2*;Ul6ZTQf|7VFK3E@mdMvb z$g8#I6COjh)|>FvKeW9pXPk}1#}ltCfsa6e5M%G#{e=%k&1v3pBenTeCVwF!%p70z z_U=>-%9bZJZKw}8`}G)@{@E?S<$8L0*i_Tn${HP)0uMgBvo8JsGH3u{m5|VW6MJ&P zU80kM{H3i63PmrRxw+!U>`@PIKJNhV$J8nyM1;vGbqJ<69r;b=JhMuz%I-ZOnBN{? zT8E~7jgY19|Xz!y^uq| za}1fpu0Is1RusaIW!O{E5tYwkEcK;*nnIkbS48_Tru(d9mmzRHybR!J7{JG>>fTdF z{;$17;x98|pNiaBMe=8jn+m1kGj;gC4hezvH2CAktM))lU{|zJ*WxcM10?1x{Bq$k zRrg4{{iE72Y3xzBI7rnHQ82@Y&F>Z(zbLT1O2|Qq+daWfue3XT?V(S{)^gm9iw>@p z#QKD~M>dILNBMAXX+i?UN|7wPyM|ovfldirK0Re<#{YK*F1JAt-h>mq+%@7bdA^j9 zfv!@Hz2PR;y)fLG;7iQWhGtDn1KAhG_oYih1oW34Gm&ij9A=PY~EDF{52g=Vw0Qsysy9Iw{P<8QHEGQkW%H6CXaY!Sf%hUz%&s83I3un!h-jf>0Qr>N?o+_d6pl;W1O}`+@`puO;B2f=jQ`>_rH4^tO z>O>`A@>$}kY&MPgyjo23?>~i7=}cL8TOcL?BOxR#6($SN%q6>ApUR;a-0Kt~1f@V5 ziuz?frCeM)`BB`vUwn>_jH^ofAsI~FpoAqIr-eLIr!V1V8d?|TGS9#x9PQ(Qgf1J0 z$r$%V3k{q9H0G~kq~_baK+K0f`XZg=l0k+`d|pQ?L{B{=0<-c;h3}Cydbc3 zbD-l5)!oj2`1`f!U-E2xm1Ao$=AIVaNB^Fpq)9%m&+J6C_w}0(W>Bg3R7u8=THW?k zHFk2QyWfXd)1Qb9J4IU2Rqj5KbuYfgqiG;o{G>~#%cmMZ!fedCcZtwXr7Z9MOnzg*V9I|TV&amO{F zApTra$xw7qQLnzw%$$S0!$r3EC!rKv1Bh!fUQ7W1=+pm@E{VpXThVFon8K_A z^6!~KPS2nMsXg)JZrFYk9C!RWX-)?hr+}cL+T9H=Xr1%kkYr76Tev?!Y=_@{v ze>_i}(FY3o>{D5TJZelz2dYv1zV2eflA|s3naTJ z`Q^RK7}wvj#;WoOKUjm!hmV7E?f5)#-_zA0HD|#7I%VQX?*Eh9jum6Gqe3NHd~Oz@ z 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%0D`po*cm$Hpv3s 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 +8wDKN_nR-36 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
. .fi @@ -17,8 +18,7 @@ npm help
Where \fB
\fR is one of: . .br -\fBactivate\fR, \fBadduser\fR, \fBbuild\fR, \fBconfig\fR, \fBdeactivate\fR, \fBfolders\fR, \fBhelp\fR -(this page), \fBinstall\fR, \fBjson\fR, \fBlink\fR (or \fBln\fR), \fBlist\fR (or \fBls\fR), \fBnpm\fR, \fBpublish\fR, \fBregistry\fR, \fBscripts\fR, \fBtag\fR, \fBuninstall\fR (or \fBrm\fR), \fBdevelopers\fR, \fBcoding\-style\fR +\fBactivate\fR, \fBadduser\fR, \fBbuild\fR, \fBconfig\fR, \fBdeactivate\fR, \fBfolders\fR, \fBhelp\fR (this page), \fBinstall\fR, \fBjson\fR, \fBlink\fR (or \fBln\fR), \fBlist\fR (or \fBls\fR), \fBnpm\fR, \fBpublish\fR, \fBregistry\fR, \fBscripts\fR, \fBtag\fR, \fBuninstall\fR (or \fBrm\fR), \fBdevelopers\fR, \fBcoding\-style\fR . .P Note that you can get the exact same help content by doing: @@ -26,6 +26,7 @@ Note that you can get the exact same help content by doing: .IP "" 4 . .nf + man npm\-
. .fi @@ -33,4 +34,4 @@ man npm\-
.IP "" 0 . .SH "Todo" -It'd be nice if this page was automatically generated. +It\'d be nice if this page was automatically generated\. diff --git a/man/install.1 b/man/install.1 index 71a2796839a..adf2d90bade 100644 --- a/man/install.1 +++ b/man/install.1 @@ -1,14 +1,15 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-INSTALL" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-install\fR \-\- install a package +\fBnpm\-install\fR \- install a package . .SH "SYNOPSIS" . .nf + npm install npm install npm install @@ -20,26 +21,23 @@ npm install @ .fi . .SH "DESCRIPTION" -This command installs a package, and any packages that it depends on. It -resolves circular dependencies by talking to the npm registry. +This command installs a package, and any packages that it depends on\. It resolves circular dependencies by talking to the npm registry\. . .TP npm install \fB\fR -Install a package that is sitting on the filesystem. Note: if you just want -to link a dev directory into your npm root, you can do this more easily by -using \fBnpm link\fR. +Install a package that is sitting on the filesystem\. Note: if you just want to link a dev directory into your npm root, you can do this more easily by using \fBnpm link\fR\. . .IP -In order to distinguish between this and remote installs, the argument -must either be "." or contain a "/" in it. +In order to distinguish between this and remote installs, the argument must either be "\." or contain a "/" in it\. . .P - Example: +Example: . .IP "" 4 . .nf - npm install ./package.tgz + + npm install \./package\.tgz . .fi . @@ -47,84 +45,79 @@ must either be "." or contain a "/" in it. . .TP npm install \fB\fR -Fetch the tarball url, and then install it. In order to distinguish between -this and other options, the argument must start with "http://" or "https://" +Fetch the tarball url, and then install it\. In order to distinguish between this and other options, the argument must start with "http://" or "https://" . .IP Example: . .IP - npm install http://github.com/waveto/node\-crypto/tarball/v0.0.5 +npm install http://github\.com/waveto/node\-crypto/tarball/v0\.0\.5 . .TP npm install \fB\fR -Do a \fB@\fR install, where \fB\fR is the "tag" config from either your -.npmrc file, or the \-\-tag argument on the command line. +Do a \fB@\fR install, where \fB\fR is the "tag" config from either your \.npmrc file, or the \-\-tag argument on the command line\. . .IP Example: . .IP - npm install sax +npm install sax . .TP npm install \fB@\fR -Install the version of the package that is referenced by the specified tag. -If the tag does not exist in the registry data for that package, then this -will fail. +Install the version of the package that is referenced by the specified tag\. If the tag does not exist in the registry data for that package, then this will fail\. . .IP Example: . .IP - npm install sax@stable +npm install sax@stable . .TP npm install \fB@\fR -Install the specified version of the package. This will fail if the version -has not been published to the registry. +Install the specified version of the package\. This will fail if the version has not been published to the registry\. . .IP Example: . .IP - npm install sax@0.1.1 +npm install sax@0\.1\.1 . .TP npm install \fB@\fR -Install a version of the package matching the specified version range. This -will follow the same rules for resolving dependencies described in \fBnpm help json\fR. +Install a version of the package matching the specified version range\. This will follow the same rules for resolving dependencies described in \fBnpm help json\fR\. . .IP -Note that most version ranges must be put in quotes so that your shell will -treat it as a single argument. +Note that most version ranges must be put in quotes so that your shell will treat it as a single argument\. . .P - Example: +Example: . .IP "" 4 . .nf - npm install sax@">=0.1.0 <0.2.0" + + npm install sax@">=0\.1\.0 <0\.2\.0" . .fi . .IP "" 0 . .P -You may combine multiple arguments, and even multiple types of arguments. For example: +You may combine multiple arguments, and even multiple types of arguments\. For example: . .IP "" 4 . .nf -npm install sax@">=0.1.0 <0.2.0" bench supervisor + +npm install sax@">=0\.1\.0 <0\.2\.0" bench supervisor . .fi . .IP "" 0 . .P -The \fB\-\-tag\fR argument will apply to all of the specified install targets. +The \fB\-\-tag\fR argument will apply to all of the specified install targets\. . .SH "SEE ALSO" . @@ -147,3 +140,4 @@ npm\-folders(1) npm\-tag(1) . .IP "" 0 + diff --git a/man/link.1 b/man/link.1 index bfc3648502e..d2a31457ba8 100644 --- a/man/link.1 +++ b/man/link.1 @@ -1,20 +1,18 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "NPM\-LINK" "1" "April 2010" "" "" +.TH "NPM\-LINK" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-link\fR \-\- Symlink a package folder +\fBnpm\-link\fR \- Symlink a package folder . .SH "SYNOPSIS" . .nf + npm link . .fi . .SH "DESCRIPTION" -This will link a source folder into npm's registry using a symlink, and then -build it according to the package.json file in that folder's root. This is -handy for installing your own stuff, so that you can work on it and test it -iteratively without having to continually rebuild. +This will link a source folder into npm\'s registry using a symlink, and then build it according to the package\.json file in that folder\'s root\. This is handy for installing your own stuff, so that you can work on it and test it iteratively without having to continually rebuild\. diff --git a/man/ln.1 b/man/ln.1 index bfc3648502e..d2a31457ba8 100644 --- a/man/ln.1 +++ b/man/ln.1 @@ -1,20 +1,18 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "NPM\-LINK" "1" "April 2010" "" "" +.TH "NPM\-LINK" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-link\fR \-\- Symlink a package folder +\fBnpm\-link\fR \- Symlink a package folder . .SH "SYNOPSIS" . .nf + npm link . .fi . .SH "DESCRIPTION" -This will link a source folder into npm's registry using a symlink, and then -build it according to the package.json file in that folder's root. This is -handy for installing your own stuff, so that you can work on it and test it -iteratively without having to continually rebuild. +This will link a source folder into npm\'s registry using a symlink, and then build it according to the package\.json file in that folder\'s root\. This is handy for installing your own stuff, so that you can work on it and test it iteratively without having to continually rebuild\. diff --git a/man/publish.1 b/man/publish.1 index 9a8de86404b..e0e29502bbb 100644 --- a/man/publish.1 +++ b/man/publish.1 @@ -1,31 +1,30 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-PUBLISH" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-publish\fR \-\- Publish a package +\fBnpm\-publish\fR \- Publish a package . .SH "SYNOPSIS" . .nf + npm publish npm publish . .fi . .SH "DESCRIPTION" -Publishes a package to the registry so that it can be installed by name. +Publishes a package to the registry so that it can be installed by name\. . .TP \fB\fR -A folder containing a package.json file +A folder containing a package\.json file . .TP \fB\fR -A url or file path to a gzipped tar archive containing a single folder -with a package.json file inside. +A url or file path to a gzipped tar archive containing a single folder with a package\.json file inside\. . .P -Fails if the package name and version combination already exists in -the registry. +Fails if the package name and version combination already exists in the registry\. diff --git a/man/registry.1 b/man/registry.1 index 30bcfc02f3e..c3fdc0c7e14 100644 --- a/man/registry.1 +++ b/man/registry.1 @@ -1,33 +1,27 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-REGISTRY" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-registry\fR \-\- Notes on the JavaScript package registry +\fBnpm\-registry\fR \- Notes on the JavaScript package registry . .SH "MARKED FOR REMOVAL" -This doc file will be removed once its contents have been implemented and its -data moved to the relevant command documentation. +This doc file will be removed once its contents have been implemented and its data moved to the relevant command documentation\. . .SH "npm registry" -Notes on npm's use of the \fIjs\-registry\fR. +Notes on npm\'s use of the js\-registry \fIhttp://github\.com/mikeal/js\-registry\fR\. . .SH "Changed commands" . .SS "list" -npm list will now also show packages that are in the registry for -installation, along with info about their tags and versions, etc. To limit to -a particular tag, preface it with @, for instance: \fBnpm list foo @stable\fR to -show the stable version of foo. \fBnpm list @stable\fR would so all packages with -a tag of \fBstable\fR. +npm list will now also show packages that are in the registry for installation, along with info about their tags and versions, etc\. To limit to a particular tag, preface it with @, for instance: \fBnpm list foo @stable\fR to show the stable version of foo\. \fBnpm list @stable\fR would so all packages with a tag of \fBstable\fR\. . .P -The current behavior will be available via \fBnpm list @installed\fR. +The current behavior will be available via \fBnpm list @installed\fR\. . .SH "Configuration" -A registry base URL must be specified, either with the \fB\-\-registry \fR in -the command line, or by setting a registry url in the .npmrc file. +A registry base URL must be specified, either with the \fB\-\-registry \fR in the command line, or by setting a registry url in the \.npmrc file\. . .P -Also, need something to keep track of the user who's logged in? That's dicey. +Also, need something to keep track of the user who\'s logged in? That\'s dicey\. diff --git a/man/restart.1 b/man/restart.1 index eaf3c018b8b..8b185ae86a2 100644 --- a/man/restart.1 +++ b/man/restart.1 @@ -1,24 +1,24 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-RESTART" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-restart\fR \-\- Start a package +\fBnpm\-restart\fR \- Start a package . .SH "SYNOPSIS" . .nf + npm restart [] . .fi . .SH "DESCRIPTION" -This runs a package's "stop" script, if one was provided, and then -the "start" script. +This runs a package\'s "stop" script, if one was provided, and then the "start" script\. . .P -If no version is specified, then it restarts the "active" version. +If no version is specified, then it restarts the "active" version\. . .P This is identical to doing: @@ -26,6 +26,7 @@ This is identical to doing: .IP "" 4 . .nf + npm stop npm start . @@ -42,3 +43,4 @@ npm\-start(1) npm\-stop . .IP "" 0 + diff --git a/man/rm.1 b/man/rm.1 index 057dc84589c..9080b0cfb47 100644 --- a/man/rm.1 +++ b/man/rm.1 @@ -1,23 +1,22 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-UNINSTALL" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-uninstall\fR \-\- Remove a package +\fBnpm\-uninstall\fR \- Remove a package . .SH "SYNOPSIS" . .nf + npm uninstall [] npm rm [] . .fi . .SH "DESCRIPTION" -This uninstalls a package, completely removing everything installed for it. If -it's currently active, then it will be deactivated first, unless the\fBauto\-deactivate\fR config setting is set to "false". If anything is -depending on it, then those must be uninstalled first. +This uninstalls a package, completely removing everything installed for it\. If it\'s currently active, then it will be deactivated first, unless the \fBauto\-deactivate\fR config setting is set to "false"\. If anything is depending on it, then those must be uninstalled first\. . .P -If the version is omitted, then all versions of a package are removed. +If the version is omitted, then all versions of a package are removed\. diff --git a/man/scripts.1 b/man/scripts.1 index 1c0626342ea..8c568a6fadb 100644 --- a/man/scripts.1 +++ b/man/scripts.1 @@ -1,14 +1,13 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "NPM\-SCRIPTS" "1" "April 2010" "" "" +.TH "NPM\-SCRIPTS" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-scripts\fR \-\- How npm handles the "scripts" field +\fBnpm\-scripts\fR \- How npm handles the "scripts" field . .SH "DESCRIPTION" -npm supports the "scripts" member of the package.json script, for the -following scripts: +npm supports the "scripts" member of the package\.json script, for the following scripts: . .TP preinstall @@ -16,85 +15,80 @@ Run BEFORE the package is installed . .TP install -Run AFTER the package is installed. +Run AFTER the package is installed\. . .TP preactivate -Run BEFORE the package is activated. +Run BEFORE the package is activated\. . .TP activate -Run AFTER the package has been activated. +Run AFTER the package has been activated\. . .TP deactivate -Run BEFORE the package is deactivated. +Run BEFORE the package is deactivated\. . .TP postdeactivate -Run AFTER the package is deactivated. +Run AFTER the package is deactivated\. . .TP uninstall -Run BEFORE the package is uninstalled. +Run BEFORE the package is uninstalled\. . .TP postuninstall -Run AFTER the package is uninstalled. +Run AFTER the package is uninstalled\. . .SH "Package Lifecycle Env Vars" -Package scripts are run in an environment where the package.json fields have -been tacked onto the \fBnpm_package_\fR prefix. So, for instance, if you had \fB{"name":"foo", "version":"1.2.5"}\fR in your package.json file, then in your -various lifecycle scripts, this would be true: +Package scripts are run in an environment where the package\.json fields have been tacked onto the \fBnpm_package_\fR prefix\. So, for instance, if you had \fB{"name":"foo", "version":"1\.2\.5"}\fR in your package\.json file, then in your various lifecycle scripts, this would be true: . .IP "" 4 . .nf -process.env.npm_package_name === "foo" -process.env.npm_package_version === "1.2.5" + +process\.env\.npm_package_name === "foo" +process\.env\.npm_package_version === "1\.2\.5" . .fi . .IP "" 0 . .P -Objects are flattened following this format, so if you had\fB{"scripts":{"install":"foo.js"}}\fR in your package.json, then you'd see this -in the script: +Objects are flattened following this format, so if you had \fB{"scripts":{"install":"foo\.js"}}\fR in your package\.json, then you\'d see this in the script: . .IP "" 4 . .nf -process.env.npm_package_scripts_install = "foo.js" + +process\.env\.npm_package_scripts_install = "foo\.js" . .fi . .IP "" 0 . .P -Last but not least, the \fBnpm_lifecycle_event\fR environment variable is set to -whichever stage of the cycle is being executed. So, you could have a single -script used for different parts of the process which switches based on what's -currently happening. +Last but not least, the \fBnpm_lifecycle_event\fR environment variable is set to whichever stage of the cycle is being executed\. So, you could have a single script used for different parts of the process which switches based on what\'s currently happening\. . .P -If the script exits with a code other than 0, then this will abort the -process. +If the script exits with a code other than 0, then this will abort the process\. . .P -Note that these script files don't have to be nodejs or even javascript -programs. They just have to be some kind of executable file. +Note that these script files don\'t have to be nodejs or even javascript programs\. They just have to be some kind of executable file\. . .P -For example, if your package.json contains this: +For example, if your package\.json contains this: . .IP "" 4 . .nf + { "scripts" : - { "install" : "scripts/install.js" - , "postinstall" : "scripts/install.js" - , "activate" : "scripts/install.js" - , "uninstall" : "scripts/uninstall.js" + { "install" : "scripts/install\.js" + , "postinstall" : "scripts/install\.js" + , "activate" : "scripts/install\.js" + , "uninstall" : "scripts/uninstall\.js" } } . @@ -103,19 +97,17 @@ For example, if your package.json contains this: .IP "" 0 . .P -then the \fBscripts/install.js\fR will be called for the install, post\-install, -and activate stages of the lifecycle, and the \fBscripts/uninstall.js\fR would be -called when the package is uninstalled. Since \fBscripts/install.js\fR is running -for three different phases, it would be wise in this case to look at the \fBnpm_lifecycle_event\fR environment variable. +then the \fBscripts/install\.js\fR will be called for the install, post\-install, and activate stages of the lifecycle, and the \fBscripts/uninstall\.js\fR would be called when the package is uninstalled\. Since \fBscripts/install\.js\fR is running for three different phases, it would be wise in this case to look at the \fBnpm_lifecycle_event\fR environment variable\. . .P -If you want to run a make command, you can do so. This works just fine: +If you want to run a make command, you can do so\. This works just fine: . .IP "" 4 . .nf + { "scripts" : - { "preinstall" : "./configure" + { "preinstall" : "\./configure" , "install" : "make" , "test" : "make test" } @@ -126,6 +118,4 @@ If you want to run a make command, you can do so. This works just fine: .IP "" 0 . .P -However, the script line is not simply a command line, so \fBmake && make install\fR -would try to execute the \fBmake\fR command with the arguments \fB&&\fR, \fBmake\fR, and \fBinstall\fR. If you have a lot of stuff to run in a command, put it in a script -file. +However, the script line is not simply a command line, so \fBmake && make install\fR would try to execute the \fBmake\fR command with the arguments \fB&&\fR, \fBmake\fR, and \fBinstall\fR\. If you have a lot of stuff to run in a command, put it in a script file\. diff --git a/man/start.1 b/man/start.1 index 3d42844f1e6..ad7487ba59e 100644 --- a/man/start.1 +++ b/man/start.1 @@ -1,20 +1,21 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-START" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-start\fR \-\- Start a package +\fBnpm\-start\fR \- Start a package . .SH "SYNOPSIS" . .nf + npm start [] . .fi . .SH "DESCRIPTION" -This runs a package's "start" script, if one was provided. +This runs a package\'s "start" script, if one was provided\. . .P -If no version is specified, then it starts the "active" version. +If no version is specified, then it starts the "active" version\. diff --git a/man/stop.1 b/man/stop.1 index 9a02773dd23..652908d02ee 100644 --- a/man/stop.1 +++ b/man/stop.1 @@ -1,20 +1,21 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-STOP" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-stop\fR \-\- Stop a package +\fBnpm\-stop\fR \- Stop a package . .SH "SYNOPSIS" . .nf + npm stop [] . .fi . .SH "DESCRIPTION" -This runs a package's "stop" script, if one was provided. +This runs a package\'s "stop" script, if one was provided\. . .P -If no version is specified, then it stops the "active" version. +If no version is specified, then it stops the "active" version\. diff --git a/man/tag.1 b/man/tag.1 index bacaa7083a6..72b7c75ab74 100644 --- a/man/tag.1 +++ b/man/tag.1 @@ -1,23 +1,21 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-TAG" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-tag\fR \-\- Tag a published version +\fBnpm\-tag\fR \- Tag a published version . .SH "SYNOPSIS" . .nf -npm tag packagename 1.2.3 tagname + +npm tag packagename 1\.2\.3 tagname . .fi . .SH "DESCRIPTION" -Tags the specified version of "packagename" with the specified "tagname". +Tags the specified version of "packagename" with the specified "tagname"\. . .P -The only tags with special significance are "stable", which is the version -that gets installed by default when no other tag or version number is -specified, and "latest", which always points to the most recently uploaded -version of a package. +The only tags with special significance are "stable", which is the version that gets installed by default when no other tag or version number is specified, and "latest", which always points to the most recently uploaded version of a package\. diff --git a/man/test.1 b/man/test.1 index 46bb2f09d62..6dccab4b8c5 100644 --- a/man/test.1 +++ b/man/test.1 @@ -1,20 +1,21 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-TEST" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-test\fR \-\- Test a package +\fBnpm\-test\fR \- Test a package . .SH "SYNOPSIS" . .nf + npm test [] . .fi . .SH "DESCRIPTION" -This runs a package's "test" script, if one was provided. +This runs a package\'s "test" script, if one was provided\. . .P -If no version is specified, then it tests the "active" version. +If no version is specified, then it tests the "active" version\. diff --git a/man/uninstall.1 b/man/uninstall.1 index 057dc84589c..9080b0cfb47 100644 --- a/man/uninstall.1 +++ b/man/uninstall.1 @@ -1,23 +1,22 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-UNINSTALL" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-uninstall\fR \-\- Remove a package +\fBnpm\-uninstall\fR \- Remove a package . .SH "SYNOPSIS" . .nf + npm uninstall [] npm rm [] . .fi . .SH "DESCRIPTION" -This uninstalls a package, completely removing everything installed for it. If -it's currently active, then it will be deactivated first, unless the\fBauto\-deactivate\fR config setting is set to "false". If anything is -depending on it, then those must be uninstalled first. +This uninstalls a package, completely removing everything installed for it\. If it\'s currently active, then it will be deactivated first, unless the \fBauto\-deactivate\fR config setting is set to "false"\. If anything is depending on it, then those must be uninstalled first\. . .P -If the version is omitted, then all versions of a package are removed. +If the version is omitted, then all versions of a package are removed\. diff --git a/man/unpublish.1 b/man/unpublish.1 index f89c6db5865..8c76c44e95f 100644 --- a/man/unpublish.1 +++ b/man/unpublish.1 @@ -1,18 +1,18 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-UNPUBLISH" "1" "June 2010" "" "" . .SH "NAME" -\fBnpm\-unpublish\fR \-\- Remove a package from the registry +\fBnpm\-unpublish\fR \- Remove a package from the registry . .SH "SYNOPSIS" . .nf + npm unpublish . .fi . .SH "DESCRIPTION" -This removes a package version from the registry, deleting its -entry and removing the tarball. +This removes a package version from the registry, deleting its entry and removing the tarball\. From 27121771cf074efdb3a9394b52f2c017b8fcff5a Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 14:35:06 -0700 Subject: [PATCH 40/79] Remove the "cd" line, since the "--strip 1" removes the dir --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 89a4d856296..4a45997f1bb 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,6 @@ To install npm, create a folder where you want to put the code, and then cd there, and do this: curl -L http://github.com/isaacs/npm/tarball/master | tar xz --strip 1 - cd npm make If it dies with a "Permission Denied" or EACCESS error, then that probably From 9e1f5a905ba36ae7d5c45026af465cfab97071fc Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 14:36:10 -0700 Subject: [PATCH 41/79] Better yet, make the code instructions work properly, even if you can't read. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4a45997f1bb..f7ab675adcf 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ More info available via `man npm`. To install npm, create a folder where you want to put the code, and then cd there, and do this: + mkdir npm + cd npm curl -L http://github.com/isaacs/npm/tarball/master | tar xz --strip 1 make From 1bfd9de8990a7a9dad9d8fad6696e99b4908b19c Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 15:32:41 -0700 Subject: [PATCH 42/79] A simple install script that can be piped to sh easily. --- scripts/install.sh | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 scripts/install.sh diff --git a/scripts/install.sh b/scripts/install.sh new file mode 100644 index 00000000000..486e2a98936 --- /dev/null +++ b/scripts/install.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +mkdir npm +cd npm +curl -L http://github.com/isaacs/npm/tarball/master | tar xz --strip 1 +make From d59439b895d252e1565ffefb5a4993a04ecd18c3 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 15:36:13 -0700 Subject: [PATCH 43/79] Update readme to reference super duper easy install script. --- README.md | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index f7ab675adcf..872cfb30755 100644 --- a/README.md +++ b/README.md @@ -6,20 +6,15 @@ More info available via `man npm`. ## Simple Install -To install npm, create a folder where you want to put the code, and then -cd there, and do this: +To install npm, do this: - mkdir npm - cd npm - curl -L http://github.com/isaacs/npm/tarball/master | tar xz --strip 1 - make + curl http://npmjs.org/install.sh | sh If it dies with a "Permission Denied" or EACCESS error, then that probably means that you are running node in a shared root-owned location. In that -case, you'll have to use sudo, and it'll behave like a multi-user app. +case, you'll have to use sudo. -You can customize this behavior by using the `root` and `binroot` config -options. See npm-config(1) + curl http://npmjs.org/install.sh | sudo sh ## More Fancy Installing @@ -56,17 +51,9 @@ Or, if that fails, Check out the [docs](http://github.com/isaacs/npm/blob/master/doc/). +You can use the [npm help](http://github.com/isaacs/npm/blob/master/doc/help.md#readme) +command to read any of them. + If you're a developer, and you want to use npm to publish your program, you should [read this](http://github.com/isaacs/npm/blob/master/doc/developers.md#readme) - -## A note about password security - -In order to publish your packages, you must have your auth info -saved into your .npmrc file. If Cipher and Decipher are supported -in the "crypto" module, then npm will use them. However, as of -node 0.1.95, these functions aren't integrated yet. - -You can get around this by doing: - - npm install crypto@0.0.5 From 1f12bfee6d4154f247215e2bce9ac6b75e9c9f59 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 21:52:36 -0700 Subject: [PATCH 44/79] root is not special --- lib/utils/ini.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/utils/ini.js b/lib/utils/ini.js index aea3582b0f3..4d0b659517a 100644 --- a/lib/utils/ini.js +++ b/lib/utils/ini.js @@ -65,8 +65,6 @@ function getConfig () { config = {} } config.__proto__ = defaultConfig - // root is special. - config.root = config.root decryptAuth(config) return config From 5160b25eb6147a678a9402b9cf2cda966b1bf540 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 21:54:34 -0700 Subject: [PATCH 45/79] Don't share password --- lib/config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/config.js b/lib/config.js index d045a2cdc0e..f2675877447 100644 --- a/lib/config.js +++ b/lib/config.js @@ -45,14 +45,14 @@ function set (key, val, cb) { // don't use log() for this, since we may want to use it in shell scripts or whatever. function get (key, cb) { - if (key === "auth") return cb(new Error("secret")) + // if (key === "auth") return cb(new Error("secret")) sys.puts(npm.config.get(key)) cb() } function list (cb) { for (var i in ini.config) { - var val = (i === "auth") + var val = (i === "auth" || i === "password") ? "---sekretz---" : JSON.stringify(npm.config.get(i)) log(i+" "+val, "config") From b73270ec095b5b3e51530f61c6787eb24858e154 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 21:58:48 -0700 Subject: [PATCH 46/79] Remove obsolete crypto sniffing --- lib/utils/ini.js | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/lib/utils/ini.js b/lib/utils/ini.js index 4d0b659517a..6d7d17d19ba 100644 --- a/lib/utils/ini.js +++ b/lib/utils/ini.js @@ -16,23 +16,7 @@ try { crypto = process.binding("crypto") && require("crypto") hasSSL = true } catch (ex) { - crypto = {} -} - -// if installed, use rhys' package explicitly -if (typeof crypto.Cipher !== "function") { - try { - crypto = require("crypto-0.0.5") - } catch (ex) {} -} -if (typeof crypto.Cipher !== "function") { - sys.error( "*" ) - sys.error( "* Warning: Cipher unavailable in this nodejs version (" - + process.version + ")") - sys.error( "* Username/password stored in the clear" ) - sys.error( "* To rectify the situation, do this:" ) - sys.error( "* npm install crypto@0.0.5" ) - sys.error( "*" ) + crypto = require("crypto") } var sys = require("sys") From a8c34128bddede5347ec2ed9782739f9bd53ef82 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 21:59:18 -0700 Subject: [PATCH 47/79] Unpack "auth" into username and password configs --- lib/utils/ini.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/utils/ini.js b/lib/utils/ini.js index 6d7d17d19ba..4ec65afc258 100644 --- a/lib/utils/ini.js +++ b/lib/utils/ini.js @@ -11,6 +11,7 @@ var fs = require('fs') , sys = require("sys") , hasSSL = false , crypto + , base64 = require("./base64") try { crypto = process.binding("crypto") && require("crypto") @@ -76,6 +77,8 @@ function encryptAuth (config) { config.authCrypt = c.update(config.auth, "utf8", "hex") config.authCrypt += c.final("hex") delete config.auth + delete config.username + delete config.password } function decryptAuth (config) { if (!config.authCrypt || !crypto.Decipher) return @@ -85,6 +88,9 @@ function decryptAuth (config) { config.auth = c.update(config.authCrypt, "hex", "utf8") config.auth += c.final("utf8") delete config.authCrypt + var unpw = base64.decode(config.auth).split(":") + config.username = unpw[0] + config.password = unpw[1] } function save (cb) { From e2e4c4ec500a0211415568e593e8993b2bd3178a Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 22:01:49 -0700 Subject: [PATCH 48/79] remove done todo --- lib/help.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/help.js b/lib/help.js index 0e8482103f3..25f3a23ecfb 100644 --- a/lib/help.js +++ b/lib/help.js @@ -17,7 +17,6 @@ function help (args, cb) { sys.error("command not found: "+command) command = "help" } - // TODO: Figure out how to do this so that the user can still page it exec("man", [path.join(__dirname, "../man/"+command+".1")], function () { process.stdout.flush() cb() From a924c4ed59cb58339c8bf1088217dd74875e8109 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 22:02:20 -0700 Subject: [PATCH 49/79] typeo and style --- lib/utils/exec.js | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/lib/utils/exec.js b/lib/utils/exec.js index d4bb9ac2f10..135cf54abd2 100644 --- a/lib/utils/exec.js +++ b/lib/utils/exec.js @@ -1,5 +1,5 @@ -var log = require("../utils/log"); +var log = require("../utils/log") module.exports = function exec (cmd, args, env, pipe, cb) { if (!cb) cb = pipe, pipe = false @@ -18,17 +18,14 @@ module.exports = function exec (cmd, args, env, pipe, cb) { , stdout = "" , stderr = "" cp.stdout && cp.stdout.on("data", function (chunk) { - if (chunk) { - stdout += chunk - } - }); - cp.stdout && cp.stdout.on("data", function (chunk) { - if (chunk) { - stderr += chunk - } - }); + if (chunk) stdout += chunk + }) + cp.stderr && cp.stderr.on("data", function (chunk) { + if (chunk) stderr += chunk + }) cp.on("exit", function (code) { if (code) cb(new Error("`"+cmd+"` failed with "+code)) else cb(null, code, stdout, stderr) - }); + }) + return cp } From c08213e0e6ba5293b1543d4cf2303b78e8561354 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 22:03:15 -0700 Subject: [PATCH 50/79] Manually exit if necessary, and say "not ok" when not ok --- cli.js | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/cli.js b/cli.js index 87901762049..b1016ff161b 100755 --- a/cli.js +++ b/cli.js @@ -51,6 +51,9 @@ if (printVersion) { } else log(npm.version, "version") process.on("uncaughtException", errorHandler) +process.on("exit", function () { if (!itWorked) log("not ok") }) + +var itWorked = false if (!command) { if (!printVersion) { // npm.commands.help([arglist.join(" ")]) @@ -65,14 +68,18 @@ if (!command) { if (!printVersion) { }} else npm.commands[command](arglist, errorHandler) function errorHandler (er) { - if (er) { - sys.error("") - log(er, "!") - sys.error("") - log("try running: 'npm help "+command+"'", "failure") - log("Report this *entire* log at ", "failure") - log("or email it to ", "failure") - process.exit(1) - } else log("ok") + if (!er) { + itWorked = true + log("ok") + if (npm.SHOULD_EXIT) process.exit() + return + } + sys.error("") + log(er, "!") + sys.error("") + log("try running: 'npm help "+command+"'", "failure") + log("Report this *entire* log at ", "failure") + log("or email it to ", "failure") + process.exit(1) } From 8a0b125d8731bc1b3d3f485f19113b0bc6969d99 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 22:27:44 -0700 Subject: [PATCH 51/79] A function for prompting the user for input --- lib/utils/prompt.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 lib/utils/prompt.js diff --git a/lib/utils/prompt.js b/lib/utils/prompt.js new file mode 100644 index 00000000000..375c58c10e9 --- /dev/null +++ b/lib/utils/prompt.js @@ -0,0 +1,26 @@ + +module.exports = prompt + +var stdin = process.openStdin() + , log = require("./log") + +function prompt (p, def, silent, cb) { + if (!cb) cb = silent, silent = false + if (!cb) cb = def, def = undefined + if (silent) log("No way to do silent input in node. Sorry.", "!") + if (def) p += "("+(silent ? "" : def)+") " + var i = process.openStdin() + , val = "" + stdin.setEncoding("utf8") + stdin.on("error", cb) + stdin.on("data", function D (chunk) { + val += chunk + if (val.indexOf("\n") !== -1) { + stdin.removeListener("data", D) + val = val.trim() || def + cb(null, val) + } + }) + process.stdout.write(p) + process.stdout.flush() +} From 20b1cb5c1c3b9fdc9b9e571308bc9a5aa3da22a5 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 22:28:08 -0700 Subject: [PATCH 52/79] Don't output auth or password --- lib/config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/config.js b/lib/config.js index f2675877447..e9a6344bca0 100644 --- a/lib/config.js +++ b/lib/config.js @@ -43,9 +43,9 @@ function set (key, val, cb) { ini.save(cb) } -// don't use log() for this, since we may want to use it in shell scripts or whatever. function get (key, cb) { - // if (key === "auth") return cb(new Error("secret")) + if (key === "auth" || key === "password") return cb(new Error( + "---sekretz---")) sys.puts(npm.config.get(key)) cb() } From 41fb78dff11113760c11c6e1f393e77c1665e18a Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 22:28:49 -0700 Subject: [PATCH 53/79] Make it so that changing the username OR password changes auth --- lib/utils/ini.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/utils/ini.js b/lib/utils/ini.js index 4ec65afc258..34f3e3de6d1 100644 --- a/lib/utils/ini.js +++ b/lib/utils/ini.js @@ -71,6 +71,10 @@ function getKey () { } function encryptAuth (config) { if (!config.auth || !crypto.Cipher) return + var unpw = config.auth.split(":") + unpw[0] = config.username || unpw[0] + unpw[1] = config.password || unpw[1] + auth = unpw.join(":") var key = getKey() if (key === false) return undefined var c = (new crypto.Cipher).init("aes192", key) @@ -89,8 +93,8 @@ function decryptAuth (config) { config.auth += c.final("utf8") delete config.authCrypt var unpw = base64.decode(config.auth).split(":") - config.username = unpw[0] - config.password = unpw[1] + config.username = config.username || unpw[0] + config.password = config.password || unpw[1] } function save (cb) { From 115c6b1cb7636787c6e9353655493745f2592af7 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 22:29:35 -0700 Subject: [PATCH 54/79] Exit if necessary --- npm.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/npm.js b/npm.js index 6c87517d883..1209666b4e0 100755 --- a/npm.js +++ b/npm.js @@ -1,4 +1,3 @@ - // kludge until this is normal. if (!process.EventEmitter.prototype.on) { process.EventEmitter.prototype.on = process.EventEmitter.prototype.addListener @@ -13,6 +12,7 @@ var npm = exports , path = require("path") npm.commands = {} +npm.SHOULD_EXIT = true try { var j = JSON.parse(fs.readFileSync(path.join(__dirname, "package.json"))+"") @@ -22,7 +22,6 @@ try { npm.version = ex } - ; [ "install" , "activate" , "deactivate" From cb5e775371d16f29d432e487896bee2d213c1a6b Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 23:23:18 -0700 Subject: [PATCH 55/79] More gymnastics to make username/password/auth stay in sync. --- lib/utils/ini.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/utils/ini.js b/lib/utils/ini.js index 34f3e3de6d1..379f36a0d74 100644 --- a/lib/utils/ini.js +++ b/lib/utils/ini.js @@ -72,9 +72,9 @@ function getKey () { function encryptAuth (config) { if (!config.auth || !crypto.Cipher) return var unpw = config.auth.split(":") - unpw[0] = config.username || unpw[0] - unpw[1] = config.password || unpw[1] - auth = unpw.join(":") + config.username = unpw[0] = config.username || unpw[0] + config.password = unpw[1] = config.password || unpw[1] + config.auth = base64.encode(unpw.join(":")) var key = getKey() if (key === false) return undefined var c = (new crypto.Cipher).init("aes192", key) @@ -93,8 +93,9 @@ function decryptAuth (config) { config.auth += c.final("utf8") delete config.authCrypt var unpw = base64.decode(config.auth).split(":") - config.username = config.username || unpw[0] - config.password = config.password || unpw[1] + config.username = unpw[0] = config.username || unpw[0] + config.password = unpw[1] = config.password || unpw[1] + config.auth = base64.encode(unpw.join(":")) } function save (cb) { From aa6b4e94728a067f8b0ff65a22d256e760dcd901 Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 5 Jul 2010 00:37:03 -0700 Subject: [PATCH 56/79] A handy utility to do promise-like things. Really, it just chains callbacks, of course, but it's useful when you want to do a bit of action after each step if it succeeds, or skip to the end when there's an error. Using this for "adduser" --- lib/utils/promise-chain.js | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 lib/utils/promise-chain.js diff --git a/lib/utils/promise-chain.js b/lib/utils/promise-chain.js new file mode 100644 index 00000000000..c206c91ecbd --- /dev/null +++ b/lib/utils/promise-chain.js @@ -0,0 +1,39 @@ + +module.exports = promiseChain + +// usage: +// +// promiseChain(cb) <-- this is the callback for eventual success or error +// ( fn, [arg, arg, arg], function (a,b,c) { success(a,b,c) }) +// ( fn2, [args] ) +// () <-- this kicks it off. +// +// promiseChain.call(someObj, cb) <-- bind this-context for all functions + +function promiseChain (cb) { + var steps = [] + , vals = [] + , context = this + function go () { + var step = steps.shift() + if (!step) return cb() + try { step[0].apply(context, step[1]) } + catch (ex) { cb(ex) } + } + return function pc (fn, args, success) { + if (arguments.length === 0) return go() + // add the step + steps.push + ( [ fn + , (args || []).concat([ function (er) { + if (er) return cb(er) + var a = Array.prototype.slice.call(arguments, 1) + try { success && success.apply(context, a) } + catch (ex) { return cb(ex) } + go() + }]) + ] + ) + return pc + } +} From 217df1fa1bc4542d34ee5e7fd1642e2d206075fe Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 5 Jul 2010 00:38:35 -0700 Subject: [PATCH 57/79] Send auth when updating a user record. --- lib/utils/registry/request.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/utils/registry/request.js b/lib/utils/registry/request.js index 5c0aa46651a..914d7db8879 100644 --- a/lib/utils/registry/request.js +++ b/lib/utils/registry/request.js @@ -21,6 +21,7 @@ function request (method, where, what, cb) { catch (ex) { return cb(ex) } var authRequired = what && !where.match(/^\/?adduser\/org\.couchdb\.user:/) + || where.match(/^\/?adduser\/org\.couchdb\.user:([^\/]+)\/-rev/) || method === "DELETE" where = url.resolve(npm.config.get("registry"), where) var u = url.parse(where) @@ -28,9 +29,8 @@ function request (method, where, what, cb) { , auth = authRequired && npm.config.get("auth") if (authRequired && !auth) { - log("error for auth") return cb(new Error( - "Cannot insert data into the registry without authorization and https\n" + "Cannot insert data into the registry without authorization\n" + "See: npm-adduser(1)")) } if (auth && !https) { From 6f64deef9e847d477323f5f35a170a4dfff1144b Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 5 Jul 2010 00:39:28 -0700 Subject: [PATCH 58/79] Complete rewrite of adduser. Fix #52 Now it prompts for input instead of reading from the command line, and also will let you change your email address, and auth an existing user on a new machine. --- lib/adduser.js | 62 ++++++++++++++++++++++++++--------- lib/utils/registry/adduser.js | 57 +++++++++++++++++++++++++------- 2 files changed, 92 insertions(+), 27 deletions(-) diff --git a/lib/adduser.js b/lib/adduser.js index 5cbd66aa58f..4fc7a85af53 100644 --- a/lib/adduser.js +++ b/lib/adduser.js @@ -5,21 +5,53 @@ var registry = require('./utils/registry') , ini = require("./utils/ini") , log = require("./utils/log") , base64 = require("./utils/base64") + , exec = require("./utils/exec") + , npm = require("../npm") + , prompt = require("./utils/prompt") + , promiseChain = require("./utils/promise-chain") + , crypto + +try { + crypto = process.binding("crypto") && require("crypto") +} catch (ex) {} + function adduser (args, cb) { - var username = args.shift() - , password = args.shift() - , email = args.shift() - if (!username || !password || !email) return cb(new Error( - "Usage: npm adduser ")) - registry.adduser(username, password, email, function (er) { - if (er) return cb(er) - ini.set('auth', base64.encode(username+':'+password)) - ini.set("username", username) - ini.set("email", email) - log("Created user " + username - + " and configured authentication credentials for npm." - , "adduser") - log("Remember to clear your shell history!", "adduser") - }); + if (!crypto) return cb(new Error( + "You must compile node with ssl support to use the adduser feature")) + + var u = + { u : npm.config.get("username") + , p : npm.config.get("password") + , e : npm.config.get("email") + } + , changed = false + + promiseChain(cb) + (prompt, ["Username: ", u.u], function (un) { + changed = u.u !== un + u.u = un + }) + (function (cb) { + if (u.p && !changed) return cb(null, u.p) + prompt("Password: ", u.p, true, cb) + }, [], function (pw) { u.p = pw }) + (prompt, ["Email: ", u.e], function (em) { u.e = em }) + (function (cb) { + if (changed) npm.config.del("auth") + registry.adduser(u.u, u.p, u.e, function (er) { + if (er) { + return cb(er) + } + ini.set("username", u.u) + ini.set("password", u.p) + ini.set("email", u.e) + log( "Authorized user " + u.u + + " and configured authentication credentials for npm." + , "adduser") + log("Remember to clear your shell history!", "adduser") + cb() + }) + }) + () } diff --git a/lib/utils/registry/adduser.js b/lib/utils/registry/adduser.js index cb40b12cac1..fa54866459f 100644 --- a/lib/utils/registry/adduser.js +++ b/lib/utils/registry/adduser.js @@ -4,6 +4,8 @@ module.exports = adduser var uuid = require("../uuid") , request = require("./request") , log = require("../log") + , base64 = require("../base64") + , npm = require("../../../npm") , crypto try { @@ -14,31 +16,62 @@ function sha (s) { return crypto.createHash("sha1").update(s).digest("hex") } -function adduser (username, password, email, callback) { +function adduser (username, password, email, cb) { if (!crypto) return cb(new Error( "You must compile node with ssl support to use the adduser feature")) var salt = uuid.generate() , userobj = - { _id : 'org.couchdb.user:'+username - , name : username - , type : "user" - , roles : [] + { name : username , salt : salt , password_sha : sha(password + salt) , email : email + , _id : 'org.couchdb.user:'+username + , type : "user" + , roles : [] } + cb = done(cb) + log(userobj, "before first PUT") request.PUT ( '/adduser/org.couchdb.user:'+encodeURIComponent(username) , userobj , function (error, data, json, response) { - // if the error is a 409, then update the rev. - if (error || response && response.statusCode !== 201) { - log(response && response.statusCode, "response") - log(error, "error") - return callback(new Error( (response && response.statusCode) + " "+ - "Could not create user "+error+'\n'+JSON.stringify(data))) + // if it worked, then we just created a new user, and all is well. + // but if we're updating a current record, then it'll 409 first + if (error && !npm.config.get("auth")) { + // must be trying to re-auth on a new machine. + // use this info as auth + npm.config.set("username", username) + npm.config.set("password", password) + npm.config.set("auth", base64.encode(username+":"+password)) + } + if (!error || !response || response.statusCode !== 409) { + return cb(error, data, json, response) } - callback() + log("update existing user", "adduser") + return request.GET + ( '/getuser/org.couchdb.user:'+encodeURIComponent(username) + , function (er, data, json, response) { + userobj._rev = data._rev + userobj.roles = data.roles + log(userobj, "userobj") + request.PUT + ( '/adduser/org.couchdb.user:'+encodeURIComponent(username) + + "/-rev/" + userobj._rev + , userobj + , cb + ) + } + ) } ) } + +function done (cb) { return function (error, data, json, response) { + if (!error && (!response || response.statusCode === 201)) { + cb(error, data, json, response) + } + log(response && response.statusCode, "response") + log(error, "error") + return cb(new Error( (response && response.statusCode) + " "+ + "Could not create user "+error+'\n'+JSON.stringify(data))) +}} From 57c7fc727d42130c5e7de544feaed4d3cb183838 Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 5 Jul 2010 00:43:27 -0700 Subject: [PATCH 59/79] docs for new adduser --- doc/adduser.md | 28 +++++++++++----------------- man/adduser.1 | 23 +++++------------------ 2 files changed, 16 insertions(+), 35 deletions(-) diff --git a/doc/adduser.md b/doc/adduser.md index be160478685..dfb4a615c45 100644 --- a/doc/adduser.md +++ b/doc/adduser.md @@ -3,26 +3,20 @@ npm-adduser(1) -- Add a registry user account ## SYNOPSIS - npm adduser + npm adduser ## DESCRIPTION -Create a user named `` in the npm registry, and save the -credentials to the `.npmrc` file. Note that this leaves the password -in your `.bash_history`, and it is currently stored in the clear in -the config file. So, don't use a password you care too much about. +Create or verify a user named `` in the npm registry, and +save the credentials to the `.npmrc` file. -For now, if you somehow break your `.npmrc` file, and have forgotten your -password, you're boned. Send an email to i@izs.me and I'll delete the -record from the registry so that you can re-add it. +The username, password, and email are read in from prompts. This command +cannot be scripted. If you think you need to script the creation of new +users, or the authorization of existing ones, without human intervention, +please rethink your use case. That's a very bad idea. -If you break your `.npmrc` file, but you remember your password, you -can put your user auth back by using the `base64` program like so: +You may use this command to change your email address, but not username +or password. - npm config set auth $( echo -n user:pass | base64 ) - -Install base64 using whichever method you normally use to put programs on -your computer. (apt-get, homebrew, macports, yum, or just download the -code and build it yourself.) - -Or bug me to to remove your account, and then recreate it. +You may use this command multiple times with the same user account to +authorize on a new machine. diff --git a/man/adduser.1 b/man/adduser.1 index 6d045c4f08a..cd002ebc403 100644 --- a/man/adduser.1 +++ b/man/adduser.1 @@ -10,31 +10,18 @@ . .nf -npm adduser +npm adduser . .fi . .SH "DESCRIPTION" -Create a user named \fB\fR in the npm registry, and save the credentials to the \fB\.npmrc\fR file\. Note that this leaves the password in your \fB\.bash_history\fR, and it is currently stored in the clear in the config file\. So, don\'t use a password you care too much about\. +Create or verify a user named \fB\fR in the npm registry, and save the credentials to the \fB\.npmrc\fR file\. . .P -For now, if you somehow break your \fB\.npmrc\fR file, and have forgotten your password, you\'re boned\. Send an email to i@izs\.me and I\'ll delete the record from the registry so that you can re\-add it\. +The username, password, and email are read in from prompts\. This command cannot be scripted\. If you think you need to script the creation of new users, or the authorization of existing ones, without human intervention, please rethink your use case\. That\'s a very bad idea\. . .P -If you break your \fB\.npmrc\fR file, but you remember your password, you can put your user auth back by using the \fBbase64\fR program like so: -. -.IP "" 4 -. -.nf - -npm config set auth $( echo \-n user:pass | base64 ) -. -.fi -. -.IP "" 0 -. -.P -Install base64 using whichever method you normally use to put programs on your computer\. (apt\-get, homebrew, macports, yum, or just download the code and build it yourself\.) +You may use this command to change your email address, but not username or password\. . .P -Or bug me to to remove your account, and then recreate it\. +You may use this command multiple times with the same user account to authorize on a new machine\. From a562f6f25fc4ad778b753d54f793466579624219 Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 5 Jul 2010 01:37:10 -0700 Subject: [PATCH 60/79] Move the callback to the end --- lib/ls.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/ls.js b/lib/ls.js index 41a74f3e5fb..b47f933079a 100644 --- a/lib/ls.js +++ b/lib/ls.js @@ -14,10 +14,9 @@ function ls (args, cb) { registry.get(function (er, remote) { var pretty = prettify(merge(installed, remote), args) , stdout = process.stdout - cb() stdout.write(pretty) stdout.flush() - stdout.flush() + cb() }) }) } From 5208eb6545fee59f5e08c44a7308ddb5a771d6d4 Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 5 Jul 2010 01:56:31 -0700 Subject: [PATCH 61/79] Less confusing logging, and error handlers --- lib/utils/registry/request.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/utils/registry/request.js b/lib/utils/registry/request.js index 914d7db8879..c6bd46d006a 100644 --- a/lib/utils/registry/request.js +++ b/lib/utils/registry/request.js @@ -55,10 +55,12 @@ function request (method, where, what, cb) { var client = http.createClient(u.port || (https ? 443 : 80), u.hostname, https) , request = client.request(method, u.pathname, headers) + request.on("error", cb) request.on("response", function (response) { // if (response.statusCode !== 200) return cb(new Error( // "Status code " + response.statusCode + " from PUT "+where)) var data = "" + response.on("error", cb) response.on("data", function (chunk) { data += chunk }) response.on("end", function () { var parsed @@ -75,12 +77,10 @@ function request (method, where, what, cb) { }) }) if (what instanceof File) { - var size = 1024 * 16 + var size = 1024 // , b = new Buffer(what.length) , remaining = what.length log(what.length, "bytes") - // FIXME: This only works if the tarball can fit in memory. - // otherwise you'll get a FATAL ERROR from v8. ;(function W () { var b = new Buffer(size) try { @@ -100,7 +100,9 @@ function request (method, where, what, cb) { } if (!remaining) { request.end() - return log(what.name, "written to uploading stream") + log(what.name, "written to uploading stream") + log("Not done yet! If it hangs/quits now, it didn't work.", "upload") + return } // wtf!? No bytes read, but also bytes remaining. return cb(new Error("Some kind of weirdness reading the file")) From 423aa121b674f0be6c2ffb81787e03adb2835153 Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 5 Jul 2010 11:04:28 -0700 Subject: [PATCH 62/79] Make install script executable, and also report success or die on failure --- scripts/install.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) mode change 100644 => 100755 scripts/install.sh diff --git a/scripts/install.sh b/scripts/install.sh old mode 100644 new mode 100755 index 486e2a98936..f07517904dd --- a/scripts/install.sh +++ b/scripts/install.sh @@ -1,6 +1,9 @@ #!/bin/sh -mkdir npm -cd npm -curl -L http://github.com/isaacs/npm/tarball/master | tar xz --strip 1 -make +mkdir npm \ + && cd npm \ + && curl -L http://github.com/isaacs/npm/tarball/master | tar xz --strip 1 \ + && make \ + && cd .. \ + && rm -rf npm \ + && echo "It worked" From e57b9210e0889006d641952c7085466799a0b893 Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 5 Jul 2010 12:34:30 -0700 Subject: [PATCH 63/79] Update help help --- doc/help.md | 40 +++++++++++++++++++++++++++++++--------- man/help.1 | 22 +++------------------- 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/doc/help.md b/doc/help.md index 61d6d6f0632..282d0103040 100644 --- a/doc/help.md +++ b/doc/help.md @@ -5,16 +5,38 @@ npm-help(1) -- Get help about npm commands npm help
-Where `
` is one of: -`activate`, `adduser`, `build`, `config`, `deactivate`, `folders`, `help` -(this page), `install`, `json`, `link` (or `ln`), `list` (or `ls`), `npm`, -`publish`, `registry`, `scripts`, `tag`, `uninstall` (or `rm`), -`developers`, `coding-style` +Where `
` is one of: +activate +adduser +build +cache +coding-style +config +deactivate +developers +folders +help +install +json +link +list +ln +ls +npm +publish +registry +restart +rm +scripts +start +stop +tag +test +uninstall +unpublish -Note that you can get the exact same help content by doing: - - man npm-
## Todo -It'd be nice if this page was automatically generated. +It'd be nice if this page was automatically generated so that it stays +up to date better. diff --git a/man/help.1 b/man/help.1 index 4a5f4bb893a..76256e43d9e 100644 --- a/man/help.1 +++ b/man/help.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "NPM\-HELP" "1" "May 2010" "" "" +.TH "NPM\-HELP" "1" "July 2010" "" "" . .SH "NAME" \fBnpm\-help\fR \- Get help about npm commands @@ -15,23 +15,7 @@ npm help
.fi . .P -Where \fB
\fR is one of: -. -.br -\fBactivate\fR, \fBadduser\fR, \fBbuild\fR, \fBconfig\fR, \fBdeactivate\fR, \fBfolders\fR, \fBhelp\fR (this page), \fBinstall\fR, \fBjson\fR, \fBlink\fR (or \fBln\fR), \fBlist\fR (or \fBls\fR), \fBnpm\fR, \fBpublish\fR, \fBregistry\fR, \fBscripts\fR, \fBtag\fR, \fBuninstall\fR (or \fBrm\fR), \fBdevelopers\fR, \fBcoding\-style\fR -. -.P -Note that you can get the exact same help content by doing: -. -.IP "" 4 -. -.nf - -man npm\-
-. -.fi -. -.IP "" 0 +Where \fB
\fR is one of: activate adduser build cache coding\-style config deactivate developers folders help install json link list ln ls npm publish registry restart rm scripts start stop tag test uninstall unpublish . .SH "Todo" -It\'d be nice if this page was automatically generated\. +It\'d be nice if this page was automatically generated so that it stays up to date better\. From 6ccdaca6e3e7a4a13d9cf0c40093b6e9e3ef3c11 Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 5 Jul 2010 13:39:58 -0700 Subject: [PATCH 64/79] If username and password are set, but auth isn't, then set it properly --- lib/utils/ini.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/utils/ini.js b/lib/utils/ini.js index 379f36a0d74..c6df05b4756 100644 --- a/lib/utils/ini.js +++ b/lib/utils/ini.js @@ -33,7 +33,6 @@ exports.del = del exports.get = get exports.set = set - function getConfig () { // TODO: --config on the cli to set this. var config @@ -70,8 +69,11 @@ function getKey () { return false } function encryptAuth (config) { + if (config.username && config.password && !config.auth) { + config.auth = base64.encode(config.username+":"+config.password) + } if (!config.auth || !crypto.Cipher) return - var unpw = config.auth.split(":") + var unpw = base64.decode(config.auth).split(":") config.username = unpw[0] = config.username || unpw[0] config.password = unpw[1] = config.password || unpw[1] config.auth = base64.encode(unpw.join(":")) From ff4ead83009bb51e85ff7b1af0864c40df894207 Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 5 Jul 2010 13:42:06 -0700 Subject: [PATCH 65/79] remove some needless decoding/encoding --- lib/utils/ini.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/utils/ini.js b/lib/utils/ini.js index c6df05b4756..80009c2b766 100644 --- a/lib/utils/ini.js +++ b/lib/utils/ini.js @@ -69,14 +69,16 @@ function getKey () { return false } function encryptAuth (config) { - if (config.username && config.password && !config.auth) { - config.auth = base64.encode(config.username+":"+config.password) + var auth = config.auth ? base64.decode(config.auth) : null + if (config.username && config.password && !auth) { + auth = config.username+":"+config.password } - if (!config.auth || !crypto.Cipher) return - var unpw = base64.decode(config.auth).split(":") + if (!auth || !crypto.Cipher) return + var unpw = auth.split(":") config.username = unpw[0] = config.username || unpw[0] config.password = unpw[1] = config.password || unpw[1] - config.auth = base64.encode(unpw.join(":")) + auth = unpw.join(":") + config.auth = base64.encode(auth) var key = getKey() if (key === false) return undefined var c = (new crypto.Cipher).init("aes192", key) From c4dd89b9dc50fda164e81b642e21af45fc6c63b1 Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 5 Jul 2010 14:04:53 -0700 Subject: [PATCH 66/79] Wait for stdout to be done before ending. --- lib/ls.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/ls.js b/lib/ls.js index b47f933079a..503cd7652f9 100644 --- a/lib/ls.js +++ b/lib/ls.js @@ -15,8 +15,8 @@ function ls (args, cb) { var pretty = prettify(merge(installed, remote), args) , stdout = process.stdout stdout.write(pretty) - stdout.flush() - cb() + if (stdout.flush()) cb() + else stdout.on("drain", cb) }) }) } From a3a2edfd2064fb84b55e9a0873be2ad7b67c0dd2 Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 5 Jul 2010 15:44:24 -0700 Subject: [PATCH 67/79] Support subfolders in the man/doc files --- Makefile | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 1c5ab3cb6b5..3aba959a6f9 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,11 @@ -docs = $(shell ls doc/*.md \ - |sed 's|.md|.1|g' \ - |sed 's|doc/|man/|g' \ - ) +docs = $(shell find doc -name '*.md' \ + |sed 's|.md|.1|g' \ + |sed 's|doc/|man/|g' \ + ) +doc_subfolders = $(shell find doc -type d \ + |sed 's|doc/|man/|g' \ + ) install-stable: ./cli.js --auto-activate always install npm@stable @@ -17,8 +20,8 @@ uninstall: ./cli.js cache clean ./cli.js rm npm -man: - @mkdir man +man: $(doc_subfolders) + @if ! test -d man ; then mkdir -p man ; fi doc: man $(docs) @true @@ -26,6 +29,9 @@ doc: man $(docs) man/%.1: doc/%.md ronn --roff --pipe $< > $@ +man/%/: doc/%/ + @if ! test -d $@ ; then mkdir -p $@ ; fi + test: ./test/run.sh From f9145ce3a38c86550cdc8446ce28eed7377cc116 Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 5 Jul 2010 15:44:56 -0700 Subject: [PATCH 68/79] Future ideas about the "npm site" command. --- doc/future-ideas/site.md | 64 +++++++++++++++++++++++++++++++++++ man/future-ideas/site.1 | 73 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 doc/future-ideas/site.md create mode 100644 man/future-ideas/site.1 diff --git a/doc/future-ideas/site.md b/doc/future-ideas/site.md new file mode 100644 index 00000000000..1124bd7dbdd --- /dev/null +++ b/doc/future-ideas/site.md @@ -0,0 +1,64 @@ +npm-site(1) -- Run the npm web site +=================================== + +## FUTURE + +This functionality does not yet exist. + +## SYNOPSIS + + npm site start + +## DESCRIPTION + +This starts up npm in "site" mode. The following configs are relevant, +and can either be specified in the `.npmrc` file, or as command line +options. + +* userfile: + A file containing the encrypted authorization info for all users. If + specified, then this is used for `npm adduser` requests + to this registry. +* admin: + A comma-delimited list of admin users. All of these must already be + in the local adduser config. If there is no admin, then the site will + not allow remote management. All admin usernames must already be + in the userfile, and a userfile must be specified. +* port: + Ports to listen on for WS requests, in the form "http-port,https-port". + Defaults to "15080,15443". +* registry: + If a package is not found, then its contents will be fetched from the + upstream registry, and cached for future retrieval. + + isaacs: Make sure that this does loop-detection, so that a "ring" of + registries can work as a distributed network. Also, once we have + support for checking multiple registries, you could have a distribution + ring that secondarily depends on some other upstream resource. + +The content for the site is stored in the npm cache directory, which is +inside the folder used for the `root` setting, at `{root}/.npm/.cache`. +It is organized in a simple hierarchical folder structure corresponding +to the web service URLs that npm uses. + +## POST /-/action + +When an admin is specified, starting the npm site also enables the +special `POST /-/action` command for doing remote management. The body +of the POST request is an object with the following members: + +* argv: + Array of positional command-line arguments. +* config: + Hash of name-value pairs to override the default configuration. + +The npm site starts up with the default configuration set to the resolved +configuration at the time of startup. For instance, if you do: + + npm site --foo bar + +then the "foo" config will be set to "bar" for the purposes of commands +specified via `POST /-/action`. + + + diff --git a/man/future-ideas/site.1 b/man/future-ideas/site.1 new file mode 100644 index 00000000000..62217a5d4a8 --- /dev/null +++ b/man/future-ideas/site.1 @@ -0,0 +1,73 @@ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 +. +.TH "NPM\-SITE" "1" "July 2010" "" "" +. +.SH "NAME" +\fBnpm\-site\fR \- Run the npm web site +. +.SH "FUTURE" +This functionality does not yet exist\. +. +.SH "SYNOPSIS" +. +.nf + +npm site start +. +.fi +. +.SH "DESCRIPTION" +This starts up npm in "site" mode\. The following configs are relevant, and can either be specified in the \fB\.npmrc\fR file, or as command line options\. +. +.TP +userfile +A file containing the encrypted authorization info for all users\. If specified, then this is used for \fBnpm adduser\fR requests to this registry\. +. +.br + +. +.TP +admin +A comma\-delimited list of admin users\. All of these must already be in the local adduser config\. If there is no admin, then the site will not allow remote management\. All admin usernames must already be in the userfile, and a userfile must be specified\. +. +.TP +port +Ports to listen on for WS requests, in the form "http\-port,https\-port"\. Defaults to "15080,15443"\. +. +.TP +registry +If a package is not found, then its contents will be fetched from the upstream registry, and cached for future retrieval\. +. +.IP +isaacs: Make sure that this does loop\-detection, so that a "ring" of registries can work as a distributed network\. Also, once we have support for checking multiple registries, you could have a distribution ring that secondarily depends on some other upstream resource\. +. +.P +The content for the site is stored in the npm cache directory, which is inside the folder used for the \fBroot\fR setting, at \fB{root}/\.npm/\.cache\fR\. It is organized in a simple hierarchical folder structure corresponding to the web service URLs that npm uses\. +. +.SH "POST /\-/action" +When an admin is specified, starting the npm site also enables the special \fBPOST /\-/action\fR command for doing remote management\. The body of the POST request is an object with the following members: +. +.TP +argv +Array of positional command\-line arguments\. +. +.TP +config +Hash of name\-value pairs to override the default configuration\. +. +.P +The npm site starts up with the default configuration set to the resolved configuration at the time of startup\. For instance, if you do: +. +.IP "" 4 +. +.nf + +npm site \-\-foo bar +. +.fi +. +.IP "" 0 +. +.P +then the "foo" config will be set to "bar" for the purposes of commands specified via \fBPOST /\-/action\fR\. From 199322715a5d1e11146511c61a98bf95b8a1046f Mon Sep 17 00:00:00 2001 From: isaacs Date: Tue, 6 Jul 2010 11:47:11 -0700 Subject: [PATCH 69/79] Don't open stdin unless necessary --- lib/utils/prompt.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/utils/prompt.js b/lib/utils/prompt.js index 375c58c10e9..9aedbaa1e1e 100644 --- a/lib/utils/prompt.js +++ b/lib/utils/prompt.js @@ -1,10 +1,11 @@ module.exports = prompt -var stdin = process.openStdin() +var stdin , log = require("./log") function prompt (p, def, silent, cb) { + if (!stdin) stdin = process.openStdin() if (!cb) cb = silent, silent = false if (!cb) cb = def, def = undefined if (silent) log("No way to do silent input in node. Sorry.", "!") From fb35ce055e65e2d28302238aa5e81418a8487c41 Mon Sep 17 00:00:00 2001 From: isaacs Date: Tue, 6 Jul 2010 11:49:20 -0700 Subject: [PATCH 70/79] Some future ideas --- doc/future-ideas/deploy.md | 27 +++++++++++++++++++++ doc/future-ideas/remote.md | 23 ++++++++++++++++++ doc/future-ideas/site.md | 34 +++++++++++--------------- man/future-ideas/deploy.1 | 49 ++++++++++++++++++++++++++++++++++++++ man/future-ideas/remote.1 | 27 +++++++++++++++++++++ man/future-ideas/site.1 | 36 ++++++++++------------------ 6 files changed, 153 insertions(+), 43 deletions(-) create mode 100644 doc/future-ideas/deploy.md create mode 100644 doc/future-ideas/remote.md create mode 100644 man/future-ideas/deploy.1 create mode 100644 man/future-ideas/remote.1 diff --git a/doc/future-ideas/deploy.md b/doc/future-ideas/deploy.md new file mode 100644 index 00000000000..9d2e17aa62f --- /dev/null +++ b/doc/future-ideas/deploy.md @@ -0,0 +1,27 @@ +npm-deploy(1) -- Deploy a package to a remote host +================================================== + +## FUTURE + +This functionality does not yet exist. + +## SUMMARY + + npm deploy [--host ] + +## DESCRIPTION + +This is a porcelain command. It is equivalent to doing: + + npm publish --registry $(npm config get host) + npm remote install @ + +That is, it first publishes the package to the server specified +by the `host` config, and then remotely installs that package +on the host. + +## SEE ALSO + +* npm-remote(1) +* npm-site(1) +* npm-publish(1) diff --git a/doc/future-ideas/remote.md b/doc/future-ideas/remote.md new file mode 100644 index 00000000000..7806b9b53a8 --- /dev/null +++ b/doc/future-ideas/remote.md @@ -0,0 +1,23 @@ +npm-remote(1) -- Execute commands on a remote machine +===================================================== + +## FUTURE + +This functionality does not yet exist. + +## SYNOPSIS + + npm remote + +## DESCRIPTION + +Run a command on a remote npm site instance. + +In order to do this, the current authenticated user must be in +the "admin" list on the server, and it must be running with https +support. + +It uses the `host` config to know where to do things. + + + diff --git a/doc/future-ideas/site.md b/doc/future-ideas/site.md index 1124bd7dbdd..7936e71f7b1 100644 --- a/doc/future-ideas/site.md +++ b/doc/future-ideas/site.md @@ -7,7 +7,7 @@ This functionality does not yet exist. ## SYNOPSIS - npm site start + npm site [ start | stop ] ## DESCRIPTION @@ -24,9 +24,11 @@ options. in the local adduser config. If there is no admin, then the site will not allow remote management. All admin usernames must already be in the userfile, and a userfile must be specified. -* port: - Ports to listen on for WS requests, in the form "http-port,https-port". - Defaults to "15080,15443". +* listen: + Ports to listen on for WS requests. The first number is for http, + the second for https, and the third for secure TCP. Set any to "-", + or omit, to use the default. + Defaults to "80,443,15443" * registry: If a package is not found, then its contents will be fetched from the upstream registry, and cached for future retrieval. @@ -41,24 +43,16 @@ inside the folder used for the `root` setting, at `{root}/.npm/.cache`. It is organized in a simple hierarchical folder structure corresponding to the web service URLs that npm uses. -## POST /-/action +## TCP Server -When an admin is specified, starting the npm site also enables the -special `POST /-/action` command for doing remote management. The body -of the POST request is an object with the following members: +The TCP server starts up to support the `npm remote` command, if there is +a valid admin userlist. -* argv: - Array of positional command-line arguments. -* config: - Hash of name-value pairs to override the default configuration. - -The npm site starts up with the default configuration set to the resolved -configuration at the time of startup. For instance, if you do: - - npm site --foo bar - -then the "foo" config will be set to "bar" for the purposes of commands -specified via `POST /-/action`. +## NOTE +This also is what happens when you do `npm start npm`. +## SEE ALSO +* npm-remote(1) +* npm-config(1) diff --git a/man/future-ideas/deploy.1 b/man/future-ideas/deploy.1 new file mode 100644 index 00000000000..39f79e0cfc4 --- /dev/null +++ b/man/future-ideas/deploy.1 @@ -0,0 +1,49 @@ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 +. +.TH "NPM\-DEPLOY" "1" "July 2010" "" "" +. +.SH "NAME" +\fBnpm\-deploy\fR \- Deploy a package to a remote host +. +.SH "FUTURE" +This functionality does not yet exist\. +. +.SH "SUMMARY" +. +.nf + +npm deploy [\-\-host ] +. +.fi +. +.SH "DESCRIPTION" +This is a porcelain command\. It is equivalent to doing: +. +.IP "" 4 +. +.nf + +npm publish \-\-registry $(npm config get host) +npm remote install @ +. +.fi +. +.IP "" 0 +. +.P +That is, it first publishes the package to the server specified by the \fBhost\fR config, and then remotely installs that package on the host\. +. +.SH "SEE ALSO" +. +.IP "\(bu" 4 +npm\-remote(1) +. +.IP "\(bu" 4 +npm\-site(1) +. +.IP "\(bu" 4 +npm\-publish(1) +. +.IP "" 0 + diff --git a/man/future-ideas/remote.1 b/man/future-ideas/remote.1 new file mode 100644 index 00000000000..52916ea512c --- /dev/null +++ b/man/future-ideas/remote.1 @@ -0,0 +1,27 @@ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 +. +.TH "NPM\-REMOTE" "1" "July 2010" "" "" +. +.SH "NAME" +\fBnpm\-remote\fR \- Execute commands on a remote machine +. +.SH "FUTURE" +This functionality does not yet exist\. +. +.SH "SYNOPSIS" +. +.nf + +npm remote +. +.fi +. +.SH "DESCRIPTION" +Run a command on a remote npm site instance\. +. +.P +In order to do this, the current authenticated user must be in the "admin" list on the server, and it must be running with https support\. +. +.P +It uses the \fBhost\fR config to know where to do things\. diff --git a/man/future-ideas/site.1 b/man/future-ideas/site.1 index 62217a5d4a8..537f1b0abe3 100644 --- a/man/future-ideas/site.1 +++ b/man/future-ideas/site.1 @@ -13,7 +13,7 @@ This functionality does not yet exist\. . .nf -npm site start +npm site [ start | stop ] . .fi . @@ -32,8 +32,8 @@ admin A comma\-delimited list of admin users\. All of these must already be in the local adduser config\. If there is no admin, then the site will not allow remote management\. All admin usernames must already be in the userfile, and a userfile must be specified\. . .TP -port -Ports to listen on for WS requests, in the form "http\-port,https\-port"\. Defaults to "15080,15443"\. +listen +Ports to listen on for WS requests\. The first number is for http, the second for https, and the third for secure TCP\. Set any to "\-", or omit, to use the default\. Defaults to "80,443,15443" . .TP registry @@ -45,29 +45,19 @@ isaacs: Make sure that this does loop\-detection, so that a "ring" of registries .P The content for the site is stored in the npm cache directory, which is inside the folder used for the \fBroot\fR setting, at \fB{root}/\.npm/\.cache\fR\. It is organized in a simple hierarchical folder structure corresponding to the web service URLs that npm uses\. . -.SH "POST /\-/action" -When an admin is specified, starting the npm site also enables the special \fBPOST /\-/action\fR command for doing remote management\. The body of the POST request is an object with the following members: +.SH "TCP Server" +The TCP server starts up to support the \fBnpm remote\fR command, if there is a valid admin userlist\. . -.TP -argv -Array of positional command\-line arguments\. -. -.TP -config -Hash of name\-value pairs to override the default configuration\. +.SH "NOTE" +This also is what happens when you do \fBnpm start npm\fR\. . -.P -The npm site starts up with the default configuration set to the resolved configuration at the time of startup\. For instance, if you do: +.SH "SEE ALSO" . -.IP "" 4 +.IP "\(bu" 4 +npm\-remote(1) . -.nf - -npm site \-\-foo bar -. -.fi +.IP "\(bu" 4 +npm\-config(1) . .IP "" 0 -. -.P -then the "foo" config will be set to "bar" for the purposes of commands specified via \fBPOST /\-/action\fR\. + From d8dbb0dd652d30875506f43ceb02ddf49651d4c7 Mon Sep 17 00:00:00 2001 From: isaacs Date: Tue, 6 Jul 2010 11:49:51 -0700 Subject: [PATCH 71/79] Ignore test fixtures --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000000..1b7cfb2d49e --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +output.log +test/root +test/bin \ No newline at end of file From 4ab3f6b62cf782852f0f9cd03a2c1594ff869770 Mon Sep 17 00:00:00 2001 From: isaacs Date: Tue, 6 Jul 2010 11:51:45 -0700 Subject: [PATCH 72/79] Bump version to 0.1.19 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 423f9234fd4..6d8d82378b2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name" : "npm" , "description" : "A package manager for node" -, "version" : "0.1.18-1" +, "version" : "0.1.19" , "author" : "Isaac Z. Schlueter " , "contributors" : [ "Steve Steiner " From 8c1fc12b681e6ea1a8eb07416debbef6e44db2b2 Mon Sep 17 00:00:00 2001 From: isaacs Date: Tue, 6 Jul 2010 12:57:43 -0700 Subject: [PATCH 73/79] kludge for execPath --- npm.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/npm.js b/npm.js index 1209666b4e0..7b092c1a393 100755 --- a/npm.js +++ b/npm.js @@ -2,6 +2,9 @@ if (!process.EventEmitter.prototype.on) { process.EventEmitter.prototype.on = process.EventEmitter.prototype.addListener } +if (!process.execPath) { + process.execPath = path.join(process.installPrefix, "bin", "node") +} var npm = exports , set = require("./lib/utils/set") From d464e321fcdaddd507477787b0ac3df921091ba2 Mon Sep 17 00:00:00 2001 From: isaacs Date: Tue, 6 Jul 2010 13:25:09 -0700 Subject: [PATCH 74/79] pull in the npm.js into the install-docs script so that the shims are there --- scripts/install-docs.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/install-docs.js b/scripts/install-docs.js index c1415c72c1f..6b9e82c4020 100644 --- a/scripts/install-docs.js +++ b/scripts/install-docs.js @@ -12,6 +12,7 @@ var event = process.env.npm_lifecycle_event , mkdir = require("../lib/utils/mkdir-p") , manTarget = path.join(process.installPrefix, "share/man/man1") , exec = require("../lib/utils/exec") + , npm = require("../../npm") log(event, "docs") From 314e8cef46d141a5ffa281a024dcec7ac3c55689 Mon Sep 17 00:00:00 2001 From: isaacs Date: Tue, 6 Jul 2010 13:48:50 -0700 Subject: [PATCH 75/79] Fixing bugs in 0.1.99, and enable support for it --- npm.js | 2 +- package.json | 2 +- scripts/install-docs.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/npm.js b/npm.js index 7b092c1a393..174157353dc 100755 --- a/npm.js +++ b/npm.js @@ -2,6 +2,7 @@ if (!process.EventEmitter.prototype.on) { process.EventEmitter.prototype.on = process.EventEmitter.prototype.addListener } +var path = require("path") if (!process.execPath) { process.execPath = path.join(process.installPrefix, "bin", "node") } @@ -12,7 +13,6 @@ var npm = exports , ini = require("./lib/utils/ini") , log = require("./lib/utils/log") , fs = require("fs") - , path = require("path") npm.commands = {} npm.SHOULD_EXIT = true diff --git a/package.json b/package.json index 6d8d82378b2..41d37ab024d 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ , "directories" : { "lib" : "./lib/" } , "main" : "./npm" , "bin" : { "npm" : "./cli.js" } -, "engines" : { "node" : ">=0.1.100" } +, "engines" : { "node" : ">=0.1.99" } , "scripts" : { "activate" : "node scripts/install-docs.js" , "deactivate" : "node scripts/install-docs.js" diff --git a/scripts/install-docs.js b/scripts/install-docs.js index 6b9e82c4020..76b83ad7cff 100644 --- a/scripts/install-docs.js +++ b/scripts/install-docs.js @@ -4,6 +4,7 @@ // reflect the current command. var event = process.env.npm_lifecycle_event + , npm = require("../npm") , exec = require("../lib/utils/exec") , log = require("../lib/utils/log") , fs = require("fs") @@ -12,7 +13,6 @@ var event = process.env.npm_lifecycle_event , mkdir = require("../lib/utils/mkdir-p") , manTarget = path.join(process.installPrefix, "share/man/man1") , exec = require("../lib/utils/exec") - , npm = require("../../npm") log(event, "docs") From 89a2ba97849d0a312b5ce899d0d43459b0bd4315 Mon Sep 17 00:00:00 2001 From: Bradley Meck Date: Thu, 8 Jul 2010 16:18:19 -0500 Subject: [PATCH 76/79] new ls --- lib/ls.js | 330 ++++++++++++++++++++++++++++++++++++++++-------- lib/mustache.js | 1 + 2 files changed, 277 insertions(+), 54 deletions(-) create mode 160000 lib/mustache.js diff --git a/lib/ls.js b/lib/ls.js index 503cd7652f9..98c9fac4d89 100644 --- a/lib/ls.js +++ b/lib/ls.js @@ -8,86 +8,308 @@ var npm = require("../npm") , readInstalled = require("./utils/read-installed") , registry = require("./utils/registry") , semver = require("./utils/semver") + , sys = require("sys") + , mustache = require("./mustache.js/mustache") function ls (args, cb) { readInstalled([], function (er, installed) { registry.get(function (er, remote) { - var pretty = prettify(merge(installed, remote), args) - , stdout = process.stdout + var pkgs = merge(installed, remote) + pkgs = Object.keys(pkgs).map(function (pkg) {var result=pkgs[pkg];result.name=pkg;return result}) + pkgs = filter(pkgs, args) + var stdout = process.stdout + , pretty = prettify(pkgs) stdout.write(pretty) if (stdout.flush()) cb() else stdout.on("drain", cb) }) }) } -function strcmp (a, b) { return a > b ? 1 : -1 } -function prettify (data, args) { - var pkgs = Object.keys(data).sort(strcmp) - , attrs = [] - , names = [] - , pretty = [] - , maxNameLen = 0 - pkgs.forEach(function (name) { - var pkg = data[name] - Object.keys(pkg).sort(semver.compare).forEach(function (v) { - var ver = pkg[v] - , p = [] - ver.tags = ver.tags.length === 0 - ? "" - : ("@tag=" + ver.tags.join(" @tag=")) - for (var i in ver) if (ver[i]) { - p.push((typeof ver[i] === "string") ? ver[i] : "@" + i) +var testFilters = { + //test name + name:function nameTest(matcher) { + var test = function (pkg) { + return matcher(pkg.name) + } + test.type = 'name' + return test + } + + //test for single match tag + , tag:function tagTest(matcher) { + var test = function (pkg) { + return !!pkg.tags.filter(matcher) + } + test.type = 'tag' + return test + } + + //test for single match version + , version:function versionTest(matcher) { + var test = function (pkg) { + return !!pkg.versions.filter(matcher) + } + test.type = 'version' + return test + } + + , latest:function versionTest(matcher) { + var test = function (pkg) { + return !!matcher(pkg.latest) + } + test.type = 'latest' + return test + } + + //test for single match name and email + , author:function authorTest(matcher) { + var test = function (pkg) { + return !!pkg.maintainers.filter(function(item){ + return !!(matcher(item.name)||matcher(item.email)) + }) + } + test.type = 'author' + return test + } + + , installed:function installedTest() { + var test = function (pkg) { + return !!pkg.installed.filter(function(version){return matcher(version)}) + } + test.type = 'installed' + return test + } + + , stable:function stableTest(matcher) { + var test = function (pkg) { + return !!matcher(pkg.stable) + } + test.type = 'stable' + return test + } + + , description:function descriptionTest(matcher) { + var test = function (pkg) { + return matcher(pkg.description) + } + test.type = 'description' + return test + } + + , modified:function modifiedTest(matcher) { + var test = function (pkg) { + return matcher(pkg.mtime) + } + test.type = 'modified' + return test + } + + , created:function createdTest(matcher) { + var test = function (pkg) { + return matcher(pkg.ctime) + } + test.type = 'created' + return test + } +} + +function filter(pkgs,args) { + var filtered_pkgs = [] + , tests = [] + //sys.puts(sys.inspect(args)) + args.forEach(function (arg){ + var parts = arg.match(/(?:[^=]*|'(?:\\.|[^'])*?'|"(?:\\.|[^"])*?")(?=(?:[=]|$))/g) + if (parts) { + parts[0] = parts[0].toLowerCase() + var modifier = '='; + if (parts[0].slice(-1)=='!') { + modifier = '!=' + parts[0]=parts[0].slice(0,-1) + } + else if (parts[0].slice(-1)=='<') { + modifier = '<=' + parts[0]=parts[0].slice(0,-1) + } + else if (parts[0].slice(-1)=='>') { + modifier = '>=' + parts[0]=parts[0].slice(0,-1) + } + var matcher = compileMatcher(modifier, parts[2]) + if(testFilters[parts[0]]) tests.push(testFilters[parts[0]](matcher)) + } + }) + pkgs.forEach(function (pkg){ + var matches = {} + , count=0 + , valid=true + //sys.puts(sys.inspect(pkg)) + tests.forEach(function (test){ + if (test(pkg)) { + matches[test.type] = matches[test.type] || 1 + } + else { + valid=false } - names.push(name + "@" + v) - maxNameLen = Math.max(maxNameLen, (name + "@" + v).length) - attrs.push(p.sort(strcmp).join(" ")) }) + if (valid || (npm.config.get('allow-partial') && count)) { + filtered_pkgs.push([matches,pkg]) + } }) - var space = " " - for (var n = 0, l = names.length; n < l; n ++) { - names[n] += space.substr(0, maxNameLen - names[n].length) - pretty.push(names[n] + " " + attrs[n]) - } - // don't color if it's piping to some other process. - var doColor = !process.binding("stdio").isStdoutBlocking() - , colors = [36, 32, 33, 31, 35 ] - , c = 0 - , l = colors.length - if (args) args.forEach(function (arg) { - pretty = pretty.filter(function (line) { return line.match(arg) }) - if (doColor) { - pretty = pretty.map(function (line) { - return line.split(arg).join("\033["+colors[c]+"m" + arg + "\033[m") - }) - c = (c + 1) % l + + return filtered_pkgs +} + +//TODO Wildcards on Strings +function compileMatcher(modifier,pattern) { + //semver + if (semver.valid(pattern)) { + switch (modifier) { + case '=':return function (str) {return str==pattern} + case '!=':return function (str) {return str!=pattern} + case '<=':return function (str) {return str==pattern||semver.lt(str,pattern)} + case '>=':return function (str) {return str==pattern||semver.gt(str,pattern)} + } + } + //number + else if(!isNaN(pattern)) { + pattern = Number(pattern) + switch (modifier) { + case '=':return function (str) {return str==pattern} + case '!=':return function (str) {return str!=pattern} + case '<=':return function (str) {return str>=pattern} + case '>=':return function (str) {return str<=pattern} + } + } + //date + else if(!isNaN(Date.parse(pattern))) { + pattern = Date(pattern) + switch (modifier) { + case '=':return function (str) {return !isNaN(Date.parse(modifier))&&str==pattern} + case '!=':return function (str) {return !isNaN(Date.parse(modifier))&&str!=pattern} + case '<=':return function (str) {return !isNaN(Date.parse(modifier))&&str>=pattern} + case '>=':return function (str) {return !isNaN(Date.parse(modifier))&&str<=pattern} + } + } + //pattern + else if(pattern&&pattern.charAt(0)=='/'&&pattern.slice(-1)=='/') { + pattern=RegExp(pattern.slice(1,-1),'gi') + switch (modifier) { + case '=':return function (str) {return pattern.test (str) } + case '!=':return function (str) {return !pattern.test (str) } + } + } + //string + else { + if (pattern && (pattern.charAt(0) == '"' && pattern.slice(-1) == '"' + || pattern.charAt(0) == '"' && pattern.slice(-1) == '"')) { + pattern = pattern.slice(1,-1) + } + switch (modifier) { + case '=':return function (str) {return str==pattern} + case '!=':return function (str) {return str!=pattern} + case '<=':return function (str) {return str>=pattern} + case '>=':return function (str) {return str<=pattern} + } + } +} + +var terse="{{name}}{{#isInstalled}} \033[35minstalled\033[m@{{#installed[0..-1]}}{{.}},{{/installed}}{{#installed[-1]}}{{.}}{{/installed}}{{#active}} \033[35mactive\033[m@{{active}}{{/active}}{{/isInstalled}}{{#isStable}} \033[35mstable\033[m@{{stable}}{{/isStable}}" + , list="{{name}}{{#isInstalled}} \033[35minstalled\033[m@{{#installed[0..-1]}}{{.}}, {{/installed}}{{#installed[-1]}}{{.}}{{/installed}}{{#active}} \033[35mactive\033[m@{{active}}{{/active}}{{/isInstalled}}{{#isStable}} \033[35mstable\033[m@{{stable}}{{/isStable}}{{#latest}} \033[35mlatest\033[m@{{latest}}{{/latest}}{{#isRemote}} \033[35mremote\033[m@{{#remote[0..-1]}}{{.}}, {{/remote}}{{#remote[-1]}}{{.}}{{/remote}}{{/isRemote}}" + , verbose="\033[31m{{name}}\033[m by{{#maintainers}} {{name}}({{email}}){{/maintainers}}\n{{#isInstalled}} \033[35m@installed\033[m {{#installed[0..-1]}}{{.}},{{/installed}}{{#installed[-1]}}{{.}}{{/installed}}{{#active}} \033[35m@active\033[m {{active}}{{/active}}{{/isInstalled}}{{#isStable}} \033[35m@stable\033[m {{stable}}{{/isStable}}\n\033[35m@description\033[m:\n{{description}}\n\033[35m@tags\033[m:\n{{#tags}} {{.}} {{/tags}}\n----" + , orderby={ + "name":function(matches_and_pkg1,matches_and_pkg2) { + return matches_and_pkg1[1].name.toLowerCase() > matches_and_pkg2[1].name.toLowerCase() ? 1 : -1 + } + , "installed":function(matches_and_pkg1,matches_and_pkg2) { + return matches_and_pkg1[1].installed ? -1 : 1 + } + , "active":function(matches_and_pkg1,matches_and_pkg2) { + return matches_and_pkg1[1].active ? -1 : 1 + } + , "stable":function(matches_and_pkg1,matches_and_pkg2) { + return matches_and_pkg1[1].stable ? -1 : 1 + } + , "created":function(matches_and_pkg1,matches_and_pkg2) { + return matches_and_pkg1[1].ctime > matches_and_pkg2[1].ctime ? 1 : -1 + } + , "modified":function(matches_and_pkg1,matches_and_pkg2) { + return matches_and_pkg1[1].mtime > matches_and_pkg2[1].mtime ? 1 : -1 + } + } +function prettify (matches_and_pkgs) { + var ordering = (npm.config.get("orderby") || "name").split(",").reverse() + for (var i = 0; i < ordering.length; i++) { + var order = ordering[i] + , reverse = order.slice(-8)=="-reverse" + , sorter + if(reverse) { + var toReverseSorter = orderby[order.slice(0,-8)] + sorter = function(a,b) { + return toReverseSorter(a,b)*-1 + } } + else { + sorter = orderby[order] + } + if(sorter) matches_and_pkgs = matches_and_pkgs.sort(sorter) + } + var pretty = matches_and_pkgs.map(function (pkg) { + pkg=pkg[1] + return (mustache.to_html( + npm.config.get("format") || (npm.config.get("verbose")?verbose:false) || terse + , pkg + )) }) if (!pretty.length) pretty = ["Nothing found"] pretty.push("") return pretty.join("\n") } + + function merge (installed, remote) { + //sys.puts(sys.inspect(installed)) var merged = {} // first, just copy the installed stuff - for (var p in installed) { - merged[p] = {} - for (var v in installed[p]) { - merged[p][v] = { installed : true, tags : [] } - for (var s in installed[p][v]) { - merged[p][v][s] = installed[p][v][s] + for (var packageName in installed) { + var pkg = merged[packageName] = { + isInstalled : true + ,installed : Object.keys(installed[packageName]) + } + for (var version in installed[packageName]) { + pkg[version] = { installed : true, tags : [] } + if(installed[packageName][version].active) { + pkg.active=version + } + for (var tag in installed[packageName][version]) { + pkg[version][tag] = installed[packageName][version][tag] } } } // now merge in the remote stuff. - for (var p in remote) { - merged[p] = merged[p] || {} - for (var v in remote[p].versions) { - merged[p][v] = merged[p][v] || {} - merged[p][v].remote = true - merged[p][v].stable = (remote[p]["dist-tags"].stable === v) - merged[p][v].tags = [] - Object.keys(remote[p]["dist-tags"]).forEach(function (tag) { - if (remote[p]["dist-tags"][tag] === v) merged[p][v].tags.push(tag) + for (var packageName in remote) { + var pkg = merged[packageName] = merged[packageName] || {} + pkg.isRemote = true + pkg.remote = [] + pkg.latest = remote[packageName]["dist-tags"].latest + for (var property in remote[packageName]) { + switch(property) { + case 'versions': + break; + default: pkg[property] = remote[packageName][property] + } + } + for (var version in remote[packageName].versions) { + pkg.remote.push(version) + pkg[version] = pkg[version] || {} + pkg[version].remote = true + if(remote[packageName]["dist-tags"].stable === version) { + pkg[version].stable = true + pkg.isStable = true + pkg.stable = version + } + pkg[version].tags = [] + Object.keys(remote[packageName]["dist-tags"]).forEach(function (tag) { + if (remote[packageName]["dist-tags"][tag] === version) pkg[version].tags.push(tag) }) } } diff --git a/lib/mustache.js b/lib/mustache.js new file mode 160000 index 00000000000..822a4502f4b --- /dev/null +++ b/lib/mustache.js @@ -0,0 +1 @@ +Subproject commit 822a4502f4b43f1c0200312d3e15e24420aa1c41 From 800b6c2f9d7665546fcf81fc41cbbb4881b7c946 Mon Sep 17 00:00:00 2001 From: Bradley Meck Date: Thu, 8 Jul 2010 18:00:26 -0500 Subject: [PATCH 77/79] ls documentation --- doc/list.md | 128 ++++++++++++++++++++++++++++++++++++++++++++++---- doc/search.md | 24 ---------- lib/ls.js | 114 +++++++++++++++++++++++++++----------------- man/search.1 | 33 ------------- 4 files changed, 190 insertions(+), 109 deletions(-) delete mode 100644 doc/search.md delete mode 100644 man/search.1 diff --git a/doc/list.md b/doc/list.md index cffae848e97..0692c0bd8d0 100755 --- a/doc/list.md +++ b/doc/list.md @@ -9,20 +9,132 @@ npm-list(1) -- List installed packages ## DESCRIPTION This command will print to stdout all the versions of packages that are -either installed or available in the registry, with their tags and whether -or not they're active and/or stable. +either installed or available in the registry, with whether +or not they're installed, active, and/or stable by default. To filter a single package or state, you can provide words to filter on and highlight (if appropriate). For instance, to see all the stable packages, you could do this: - npm ls @stable + npm ls stable -Another common usage is to find the set of all packages that are +Another common usage is to find the set of all packages that are installed. This can be accomplished by doing this: - npm ls @installed + npm ls installed -Strings are matched using the JavaScript "split" function, so regular -expression strings are ok. However, the highlighting is a simple -split/join, so regexps probably won't get the funky colors. +Matches may go beyond just using boolean tests and use filters. These filters take a single argument of the following types. + + * Semantic Variable : \d+.\d+.\d+ + * Number : \d+ + * Date : whatever returns a Date from Date.parse() + * Pattern : /regex/ a regular expression that will be given the flag 'i', you cannot supply the flags + * String : "..." or '...' or word + * Boolean : if you do not include test type npm will test if the filter could pass at all + +These filters can compare the packages using: + + * Equality : = + Tests if the package matches the filter exactly (except for patterns, which test for any matches) + * Inequality : != + Inverts the equality test + * Superiority : >= + Tests if the package is greater than or equal to the filter + * Inferiority : <= + Tests if the package is less than or equal to the filter + +### Examples + + * list all packages with an author who's email or name has an 'm' + + npm ls author=/m/ + + * list all the packages that have a stable version greater than or equal to 1.0.0 + + npm ls stable>=1.0.0 + + * list all packages with authors 'ben' and 'sally' + + npm ls author="ben" author="sally" + + +### Filters + +#### name=... + +Tests if the name matches the filter + +#### author=... + +Tests if ANY of the authors match the filter by name or email + +#### tag=... + +Tests if ANY of the tags match the filter + +#### description=... + +Tests if the description matches the filter + +#### stable=... + +Tests if the stable version number of the package matches the filter + +#### latest=... + +Tests if the latest version number of the package matches the filter + +#### created=... + +Tests if the time the package was created matches the filter + +#### modified=... + +Tests if the time the package was modified matches the filter + +### Formatting + +#### --orderby [sort[-reverse],] + +Allows you to sort the list of results in specific orders stabily. Adding '-reverse' to a sort will reverse the sort order. Non-present sorts are ignored. Default sort order is by 'name'. + + * name - sorts alphabetically by name + * installed - sort with installed packages first + * active - sort with active packages first + * stable - sort with stable packages first + * created - sort chronologically by package creation time + * modified - sort chronologically by package's last modification time + +##### Example + +Listing the installed packages first and then sorting by name + + > npm ls --orderby installed,name + fiz installed@0.0.0 + foo installed@0.0.0 + bar + bat + + +#### --format + +Allows you to template the output format of npm in a mustache.js style templating engine. Unlike mustache.js whitespace is preserved. + +##### Additions to mustache.js syntax + + * looping can now do slices w/ [x..y] (akin to Array.slice). 0 indexed. + , [x..] is from x to the end + , [..x] is from the start to x + , [x] is just the element at x + , negatives are allowed + * {{|}} is the length of a loop + * {{@}} is the index of a loop) + * exterior variables are available to enumerable loops as long as they are not masked + +##### Example + + > npm ls --format "{{name}} by{{#maintainers}} {{name}},{{/maintainers}}" + bar by me, you, + bat by me, + fiz by you, + foo by you, \ No newline at end of file diff --git a/doc/search.md b/doc/search.md deleted file mode 100644 index 921c3fb879b..00000000000 --- a/doc/search.md +++ /dev/null @@ -1,24 +0,0 @@ -npm-search(1) -- List packages matching a filter -====================================== - -## SYNOPSIS - - npm search [filter] - -## DESCRIPTION - -This command will print to stdout all the versions of a package that -match the given arguments in their name, tags, or description. These -packages are accumulated from packages installed or available in the -registry, with their tags and whether or not they're active and/or -stable. - -The filter used represents a Javascript RegExp Object an has all the -features of such. It is case insensitive as well. - -To filter a single package or state, you can provide words to filter on -and highlight (if appropriate). For instance, to see all the -packages relating to irc, you could do this: - - npm search irc - diff --git a/lib/ls.js b/lib/ls.js index 98c9fac4d89..0b7bcc1f360 100644 --- a/lib/ls.js +++ b/lib/ls.js @@ -8,8 +8,8 @@ var npm = require("../npm") , readInstalled = require("./utils/read-installed") , registry = require("./utils/registry") , semver = require("./utils/semver") - , sys = require("sys") , mustache = require("./mustache.js/mustache") + , sys = require("sys") function ls (args, cb) { readInstalled([], function (er, installed) { @@ -25,9 +25,10 @@ function ls (args, cb) { }) }) } + var testFilters = { //test name - name:function nameTest(matcher) { + name : function (matcher) { var test = function (pkg) { return matcher(pkg.name) } @@ -36,24 +37,26 @@ var testFilters = { } //test for single match tag - , tag:function tagTest(matcher) { + , tag : function (matcher) { var test = function (pkg) { - return !!pkg.tags.filter(matcher) + var result = (pkg.tags && pkg.tags.filter(matcher)) + return result && result.length } test.type = 'tag' return test } //test for single match version - , version:function versionTest(matcher) { + , version : function (matcher) { var test = function (pkg) { - return !!pkg.versions.filter(matcher) + var result = pkg.versions && pkg.versions.filter(matcher) + return result && result.length } test.type = 'version' return test } - , latest:function versionTest(matcher) { + , latest : function (matcher) { var test = function (pkg) { return !!matcher(pkg.latest) } @@ -62,25 +65,27 @@ var testFilters = { } //test for single match name and email - , author:function authorTest(matcher) { + , author : function (matcher) { var test = function (pkg) { - return !!pkg.maintainers.filter(function(item){ + var result = (pkg.maintainers && pkg.maintainers.filter(function (item){ return !!(matcher(item.name)||matcher(item.email)) - }) + })) + return result && result.length } test.type = 'author' return test } - , installed:function installedTest() { + , installed : function () { var test = function (pkg) { - return !!pkg.installed.filter(function(version){return matcher(version)}) + var result = (pkg.installed && pkg.installed.filter(function(version){return matcher(version)})) + return result && result.length } test.type = 'installed' return test } - , stable:function stableTest(matcher) { + , stable : function (matcher) { var test = function (pkg) { return !!matcher(pkg.stable) } @@ -88,7 +93,7 @@ var testFilters = { return test } - , description:function descriptionTest(matcher) { + , description : function (matcher) { var test = function (pkg) { return matcher(pkg.description) } @@ -96,7 +101,7 @@ var testFilters = { return test } - , modified:function modifiedTest(matcher) { + , modified : function (matcher) { var test = function (pkg) { return matcher(pkg.mtime) } @@ -104,7 +109,7 @@ var testFilters = { return test } - , created:function createdTest(matcher) { + , created : function (matcher) { var test = function (pkg) { return matcher(pkg.ctime) } @@ -112,11 +117,14 @@ var testFilters = { return test } } +testFilters['@stable']=testFilters['stable'] +testFilters['@latest']=testFilters['latest'] +testFilters['@active']=testFilters['active'] + -function filter(pkgs,args) { +function filter (pkgs, args) { var filtered_pkgs = [] , tests = [] - //sys.puts(sys.inspect(args)) args.forEach(function (arg){ var parts = arg.match(/(?:[^=]*|'(?:\\.|[^'])*?'|"(?:\\.|[^"])*?")(?=(?:[=]|$))/g) if (parts) { @@ -134,15 +142,16 @@ function filter(pkgs,args) { modifier = '>=' parts[0]=parts[0].slice(0,-1) } - var matcher = compileMatcher(modifier, parts[2]) - if(testFilters[parts[0]]) tests.push(testFilters[parts[0]](matcher)) + var matcher = parts[2] + ? compileMatcher(modifier, parts[2]) + : function(item) {return !!item} + if (testFilters[parts[0]]) tests.push(testFilters[parts[0]](matcher)) } }) pkgs.forEach(function (pkg){ var matches = {} , count=0 , valid=true - //sys.puts(sys.inspect(pkg)) tests.forEach(function (test){ if (test(pkg)) { matches[test.type] = matches[test.type] || 1 @@ -160,7 +169,7 @@ function filter(pkgs,args) { } //TODO Wildcards on Strings -function compileMatcher(modifier,pattern) { +function compileMatcher (modifier, pattern) { //semver if (semver.valid(pattern)) { switch (modifier) { @@ -171,7 +180,7 @@ function compileMatcher(modifier,pattern) { } } //number - else if(!isNaN(pattern)) { + else if (!isNaN(pattern)) { pattern = Number(pattern) switch (modifier) { case '=':return function (str) {return str==pattern} @@ -181,7 +190,7 @@ function compileMatcher(modifier,pattern) { } } //date - else if(!isNaN(Date.parse(pattern))) { + else if (!isNaN(Date.parse(pattern))) { pattern = Date(pattern) switch (modifier) { case '=':return function (str) {return !isNaN(Date.parse(modifier))&&str==pattern} @@ -191,7 +200,7 @@ function compileMatcher(modifier,pattern) { } } //pattern - else if(pattern&&pattern.charAt(0)=='/'&&pattern.slice(-1)=='/') { + else if (pattern&&pattern.charAt(0)=='/'&&pattern.slice(-1)=='/') { pattern=RegExp(pattern.slice(1,-1),'gi') switch (modifier) { case '=':return function (str) {return pattern.test (str) } @@ -213,46 +222,64 @@ function compileMatcher(modifier,pattern) { } } -var terse="{{name}}{{#isInstalled}} \033[35minstalled\033[m@{{#installed[0..-1]}}{{.}},{{/installed}}{{#installed[-1]}}{{.}}{{/installed}}{{#active}} \033[35mactive\033[m@{{active}}{{/active}}{{/isInstalled}}{{#isStable}} \033[35mstable\033[m@{{stable}}{{/isStable}}" - , list="{{name}}{{#isInstalled}} \033[35minstalled\033[m@{{#installed[0..-1]}}{{.}}, {{/installed}}{{#installed[-1]}}{{.}}{{/installed}}{{#active}} \033[35mactive\033[m@{{active}}{{/active}}{{/isInstalled}}{{#isStable}} \033[35mstable\033[m@{{stable}}{{/isStable}}{{#latest}} \033[35mlatest\033[m@{{latest}}{{/latest}}{{#isRemote}} \033[35mremote\033[m@{{#remote[0..-1]}}{{.}}, {{/remote}}{{#remote[-1]}}{{.}}{{/remote}}{{/isRemote}}" - , verbose="\033[31m{{name}}\033[m by{{#maintainers}} {{name}}({{email}}){{/maintainers}}\n{{#isInstalled}} \033[35m@installed\033[m {{#installed[0..-1]}}{{.}},{{/installed}}{{#installed[-1]}}{{.}}{{/installed}}{{#active}} \033[35m@active\033[m {{active}}{{/active}}{{/isInstalled}}{{#isStable}} \033[35m@stable\033[m {{stable}}{{/isStable}}\n\033[35m@description\033[m:\n{{description}}\n\033[35m@tags\033[m:\n{{#tags}} {{.}} {{/tags}}\n----" - , orderby={ - "name":function(matches_and_pkg1,matches_and_pkg2) { +var terse = "{{name}}{{#isInstalled}} installed@{{#installed[0..-1]}}{{.}},{{/installed}}{{#installed[-1]}}{{.}}{{/installed}}{{#active}} active@{{active}}{{/active}}{{/isInstalled}}{{#isStable}} stable@{{stable}}{{/isStable}}" + , list = "{{name}}{{#isInstalled}} installed@{{#installed[0..-1]}}{{.}}, {{/installed}}{{#installed[-1]}}{{.}}{{/installed}}{{#active}} active@{{active}}{{/active}}{{/isInstalled}}{{#isStable}} stable@{{stable}}{{/isStable}}{{#latest}} latest@{{latest}}{{/latest}}{{#isRemote}} remote@{{#remote[0..-1]}}{{.}}, {{/remote}}{{#remote[-1]}}{{.}}{{/remote}}{{/isRemote}}" + , verbose = "{{name}} by{{#maintainers}} {{name}}({{email}}){{/maintainers}}\n{{#isInstalled}} @installed {{#installed[0..-1]}}{{.}},{{/installed}}{{#installed[-1]}}{{.}}{{/installed}}{{#active}} @active {{active}}{{/active}}{{/isInstalled}}{{#isStable}} @stable {{stable}}{{/isStable}}\n@description:\n{{description}}\n@tags:\n{{#tags}} {{.}} {{/tags}}\n----" + , orderby = { + "name" : function (matches_and_pkg1,matches_and_pkg2) { + if(matches_and_pkg1[1].name.toLowerCase() == matches_and_pkg2[1].name.toLowerCase()) return 0 return matches_and_pkg1[1].name.toLowerCase() > matches_and_pkg2[1].name.toLowerCase() ? 1 : -1 } - , "installed":function(matches_and_pkg1,matches_and_pkg2) { + , "installed" : function (matches_and_pkg1,matches_and_pkg2) { + if(matches_and_pkg1[1].installed && matches_and_pkg2[1].installed || + !(matches_and_pkg1[1].installed || matches_and_pkg2[1].installed)) return 0 return matches_and_pkg1[1].installed ? -1 : 1 } - , "active":function(matches_and_pkg1,matches_and_pkg2) { + , "active" : function (matches_and_pkg1,matches_and_pkg2) { + if(matches_and_pkg1[1].active && matches_and_pkg2[1].active) return 0 return matches_and_pkg1[1].active ? -1 : 1 } - , "stable":function(matches_and_pkg1,matches_and_pkg2) { + , "stable" : function (matches_and_pkg1,matches_and_pkg2) { + if(matches_and_pkg1[1].stable && matches_and_pkg2[1].stable) return 0 return matches_and_pkg1[1].stable ? -1 : 1 } - , "created":function(matches_and_pkg1,matches_and_pkg2) { + , "created" : function (matches_and_pkg1,matches_and_pkg2) { + if(matches_and_pkg1[1].ctime == matches_and_pkg2[1].ctime) return 0 return matches_and_pkg1[1].ctime > matches_and_pkg2[1].ctime ? 1 : -1 } - , "modified":function(matches_and_pkg1,matches_and_pkg2) { + , "modified" : function (matches_and_pkg1,matches_and_pkg2) { + if(matches_and_pkg1[1].mtime == matches_and_pkg2[1].mtime) return 0 return matches_and_pkg1[1].mtime > matches_and_pkg2[1].mtime ? 1 : -1 } } + function prettify (matches_and_pkgs) { var ordering = (npm.config.get("orderby") || "name").split(",").reverse() + var sorters = [] for (var i = 0; i < ordering.length; i++) { var order = ordering[i] , reverse = order.slice(-8)=="-reverse" - , sorter - if(reverse) { + if (reverse) { var toReverseSorter = orderby[order.slice(0,-8)] - sorter = function(a,b) { + sorters.unshift(function (a, b) { return toReverseSorter(a,b)*-1 - } + }) } else { - sorter = orderby[order] + sorters.unshift(orderby[order]) } - if(sorter) matches_and_pkgs = matches_and_pkgs.sort(sorter) } + + matches_and_pkgs.sort(function (a, b) { + for(var i = 0; i < sorters.length; i++) { + var sorter = sorters[i] + , result = sorter(a,b) + if(result != 0) { + return result + } + } + return 0 + }) var pretty = matches_and_pkgs.map(function (pkg) { pkg=pkg[1] return (mustache.to_html( @@ -267,7 +294,6 @@ function prettify (matches_and_pkgs) { function merge (installed, remote) { - //sys.puts(sys.inspect(installed)) var merged = {} // first, just copy the installed stuff for (var packageName in installed) { @@ -292,7 +318,7 @@ function merge (installed, remote) { pkg.remote = [] pkg.latest = remote[packageName]["dist-tags"].latest for (var property in remote[packageName]) { - switch(property) { + switch (property) { case 'versions': break; default: pkg[property] = remote[packageName][property] @@ -302,7 +328,7 @@ function merge (installed, remote) { pkg.remote.push(version) pkg[version] = pkg[version] || {} pkg[version].remote = true - if(remote[packageName]["dist-tags"].stable === version) { + if (remote[packageName]["dist-tags"].stable === version) { pkg[version].stable = true pkg.isStable = true pkg.stable = version diff --git a/man/search.1 b/man/search.1 deleted file mode 100644 index b399f6ca060..00000000000 --- a/man/search.1 +++ /dev/null @@ -1,33 +0,0 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ -. -.TH "NPM\-SEARCH" "11" "May 2010" "" "" -. -.SH "NAME" -\fBnpm\-search\fR \-\- List packages matching a filter -. -.SH "SYNOPSIS" -. -npm search [filter] -.P -.SH "DESCRIPTION" -.P -This command will print to stdout all the versions of a package that -match the given arguments in their name, tags, or description. These -packages are accumulated from packages installed or available in the -registry, with their tags and whether or not they're active and/or -stable. -. -.P - -The filter used represents a Javascript RegExp Object an has all the -features of such. It is case insensitive as well. -. -.P -To filter a single package or state, you can provide words to filter on -and highlight (if appropriate). For instance, to see all the -packages relating to irc, you could do this: -. -.IP " " 4 -npm search irc - From 58cf95efbd8bcb8a4ce8d63be8b3f7d1988548fd Mon Sep 17 00:00:00 2001 From: Bradley Meck Date: Fri, 9 Jul 2010 13:26:29 -0500 Subject: [PATCH 78/79] ls installed filter fix --- lib/ls.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ls.js b/lib/ls.js index 0b7bcc1f360..edfe636438b 100644 --- a/lib/ls.js +++ b/lib/ls.js @@ -76,7 +76,7 @@ var testFilters = { return test } - , installed : function () { + , installed : function (matcher) { var test = function (pkg) { var result = (pkg.installed && pkg.installed.filter(function(version){return matcher(version)})) return result && result.length From ee75881d818c45debf3ef0bdf2e8b4ee2d39d88a Mon Sep 17 00:00:00 2001 From: bradleymeck Date: Sun, 11 Jul 2010 00:49:09 -0500 Subject: [PATCH 79/79] mustache.js is file now instead of submodule --- lib/ls.js | 2 +- lib/mustache.js | 376 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 376 insertions(+), 2 deletions(-) mode change 160000 => 100644 lib/mustache.js diff --git a/lib/ls.js b/lib/ls.js index edfe636438b..1499a5fb6de 100644 --- a/lib/ls.js +++ b/lib/ls.js @@ -8,7 +8,7 @@ var npm = require("../npm") , readInstalled = require("./utils/read-installed") , registry = require("./utils/registry") , semver = require("./utils/semver") - , mustache = require("./mustache.js/mustache") + , mustache = require("./mustache") , sys = require("sys") function ls (args, cb) { diff --git a/lib/mustache.js b/lib/mustache.js deleted file mode 160000 index 822a4502f4b..00000000000 --- a/lib/mustache.js +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 822a4502f4b43f1c0200312d3e15e24420aa1c41 diff --git a/lib/mustache.js b/lib/mustache.js new file mode 100644 index 00000000000..471fd86e46e --- /dev/null +++ b/lib/mustache.js @@ -0,0 +1,375 @@ +/* + mustache.js — Logic-less templates in JavaScript + +Copyright (c) 2009 Chris Wanstrath (Ruby) +Copyright (c) 2010 Jan Lehnardt (JavaScript) + +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. + + See http://mustache.github.com/ for more info. + + @modified + * looping can now do slices w/ [x..y] (akin to array.slice). 0 indexed, both sides are inclusive + , [x..] is from x to the end + , [..x] is from the start to x + , [x] is just the element at x + , negatives are allowed + * {{|}} is the length of a loop + * {{@}} is the index of a loop) +*/ +var Mustache = function() { + var Renderer = function() {}; + + Renderer.prototype = { + otag: "{{", + ctag: "}}", + pragmas: {}, + buffer: [], + pragmas_implemented: { + "IMPLICIT-ITERATOR": true + }, + context: {}, + + render: function(template, context, partials, in_recursion) { + // reset buffer & set context + if(!in_recursion) { + this.context = context; + this.buffer = []; // TODO: make this non-lazy + } + + // fail fast + if(!this.includes("", template)) { + if(in_recursion) { + return template; + } else { + this.send(template); + return; + } + } + + template = this.render_pragmas(template); + var html = this.render_section(template, context, partials); + if(in_recursion) { + return this.render_tags(html, context, partials, in_recursion); + } + + this.render_tags(html, context, partials, in_recursion); + }, + + /* + Sends parsed lines + */ + send: function(line) { + if(line != "") { + this.buffer.push(line); + } + }, + + /* + Looks for %PRAGMAS + */ + render_pragmas: function(template) { + // no pragmas + if(!this.includes("%", template)) { + return template; + } + + var that = this; + var regex = new RegExp(this.otag + "%([\\w-]+) ?([\\w]+=[\\w]+)?" + + this.ctag); + return template.replace(regex, function(match, pragma, options) { + if(!that.pragmas_implemented[pragma]) { + throw({message: + "This implementation of mustache doesn't understand the '" + + pragma + "' pragma"}); + } + that.pragmas[pragma] = {}; + if(options) { + var opts = options.split("="); + that.pragmas[pragma][opts[0]] = opts[1]; + } + return ""; + // ignore unknown pragmas silently + }); + }, + + /* + Tries to find a partial in the curent scope and render it + */ + render_partial: function(name, context, partials) { + name = this.trim(name); + if(!partials || partials[name] === undefined) { + throw({message: "unknown_partial '" + name + "'"}); + } + if(typeof(context[name]) != "object") { + return this.render(partials[name], context, partials, true); + } + return this.render(partials[name], context[name], partials, true); + }, + + /* + Renders inverted (^) and normal (#) sections + */ + render_section: function(template, context, partials) { + if(!this.includes("#", template) && !this.includes("^", template)) { + return template; + } + + var that = this; + // CSW - Added "+?" so it finds the tighest bound, not the widest + var regex = new RegExp(this.otag + "(\\^|\\#)\\s*([^\\[]+)\\s*(?:\\[\\s*([-]?\\d+)?(\\s*\\.\\.\\s*([-]?\\d+)?)?\\s*\\]\\s*)?" + this.ctag + + "([\\s\\S]+?)" + this.otag + "\\/\\s*\\2\\s*" + this.ctag + , "mg"); + + // for each {{#foo}}{{/foo}} section do... + return template.replace(regex, function(match, type, name, slice_start, slice_continuation, slice_end, content) { + var value = that.find(name, context); + if(type == "^") { // inverted section + if(!value || that.is_array(value) && value.length === 0) { + // false or empty list, render it + return that.render(content, context, partials, true); + } else { + return ""; + } + } else if(type == "#") { // normal section + if(that.is_array(value)) { // Enumerable, Let's loop! + if (slice_start) { + if (slice_end) { + value = value.slice(slice_start, slice_end == -1 ? value.length-1 : Number(slice_end)+1); + } + else { + value = slice_continuation ? value.slice(slice_start) : value.slice(slice_start,slice_start == -1 ? value.length : Number(slice_start)+1) + } + } + else if (slice_continuation && slice_end) { + value = value.slice(0, slice_end == -1 ? value.length-1 : Number(slice_end)+1); + } + return that.map(value, function(row,index,arr) { + return that.render(content, that.create_context(row,index,arr,context), + partials, true); + }).join(""); + } else if(that.is_object(value)) { // Object, Use it as subcontext! + return that.render(content, that.create_context(value), + partials, true); + } else if(typeof value === "function") { + // higher order section + return value.call(context, content, function(text) { + return that.render(text, context, partials, true); + }); + } else if(value) { // boolean section + return that.render(content, context, partials, true); + } else { + return ""; + } + } + }); + }, + + /* + Replace {{foo}} and friends with values from our view + */ + render_tags: function(template, context, partials, in_recursion) { + // tit for tat + var that = this; + + var new_regex = function() { + return new RegExp(that.otag + "(=|!|>|\\{|%)?([^\\/#\\^]+?)\\1?" + + that.ctag + "+", "g"); + }; + + var regex = new_regex(); + var tag_replace_callback = function(match, operator, name) { + switch(operator) { + case "!": // ignore comments + return ""; + case "=": // set new delimiters, rebuild the replace regexp + that.set_delimiters(name); + regex = new_regex(); + return ""; + case ">": // render partial + return that.render_partial(name, context, partials); + case "{": // the triple mustache is unescaped + return that.find(name, context); + default: // escape the value + return that.escape(that.find(name, context)); + } + }; + var lines = [template]//template.split("\n"); + for(var i = 0; i < lines.length; i++) { + lines[i] = lines[i].replace(regex, tag_replace_callback, this); + if(!in_recursion) { + this.send(lines[i]); + } + } + + if(in_recursion) { + return lines.join("\n"); + } + }, + + set_delimiters: function(delimiters) { + var dels = delimiters.split(" "); + this.otag = this.escape_regex(dels[0]); + this.ctag = this.escape_regex(dels[1]); + }, + + escape_regex: function(text) { + // thank you Simon Willison + if(!arguments.callee.sRE) { + var specials = [ + '/', '.', '*', '+', '?', '|', + '(', ')', '[', ']', '{', '}', '\\' + ]; + arguments.callee.sRE = new RegExp( + '(\\' + specials.join('|\\') + ')', 'g' + ); + } + return text.replace(arguments.callee.sRE, '\\$1'); + }, + + /* + find `name` in current `context`. That is find me a value + from the view object + */ + find: function(name, context) { + name = this.trim(name); + + // Checks whether a value is thruthy or false or 0 + function is_kinda_truthy(bool) { + return bool === false || bool === 0 || bool; + } + + var value; + if(is_kinda_truthy(context[name])) { + value = context[name]; + } else if(is_kinda_truthy(this.context[name])) { + value = this.context[name]; + } + + if(typeof value === "function") { + return value.apply(context); + } + if(value !== undefined) { + return value; + } + // silently ignore unkown variables + return ""; + }, + + // Utility methods + + /* includes tag */ + includes: function(needle, haystack) { + return haystack.indexOf(this.otag + needle) != -1; + }, + + /* + Does away with nasty characters + */ + escape: function(s) { + s = String(s === null ? "" : s); + return s.replace(/&(?!\w+;)|["<>\\]/g, function(s) { + switch(s) { + case "&": return "&"; + case "\\": return "\\\\"; + case '"': return '\"'; + case "<": return "<"; + case ">": return ">"; + default: return s; + } + }); + }, + + // by @langalex, support for arrays of strings + create_context: function(_context,_index,_arr,_inherits) { + if(this.is_object(_context)) { + return _context; + } else { + var iterator = "."; + var index = "@"; + var length = "|"; + if(this.pragmas["IMPLICIT-ITERATOR"]) { + iterator = this.pragmas["IMPLICIT-ITERATOR"].iterator; + } + var ctx = {}; + if(_inherits) for(var property in _inherits) { + ctx[property] = _inherits[property] + } + ctx[iterator] = _context; + ctx[index] = _index; + ctx[length] = _arr.length; + return ctx; + } + }, + + is_object: function(a) { + return a && typeof a == "object"; + }, + + is_array: function(a) { + return Object.prototype.toString.call(a) === '[object Array]'; + }, + + /* + Gets rid of leading and trailing whitespace + */ + trim: function(s) { + return s.replace(/^\s*|\s*$/g, ""); + }, + + /* + Why, why, why? Because IE. Cry, cry cry. + */ + map: function(array, fn) { + if (typeof array.map == "function") { + return array.map(fn); + } else { + var r = []; + var l = array.length; + for(var i = 0; i < l; i++) { + //index is important - bmeck + r.push(fn(array[i],i,array)); + } + return r; + } + } + }; + + return({ + name: "mustache.js", + version: "0.3.0-dev", + + /* + Turns a template and view into HTML + */ + to_html: function(template, view, partials, send_fun) { + var renderer = new Renderer(); + if(send_fun) { + renderer.send = send_fun; + } + renderer.render(template, view, partials); + if(!send_fun) { + return renderer.buffer.join("\n"); + } + } + }); +}(); + +if(exports && module) {module.exports = Mustache}

UTw;G%FPskE>7l`A`x3p>v41ZK0+RtLuo-`& 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 W%*VYdx+ea&A19cPKV@d;`~Lv_DxZx2 literal 0 HcmV?d00001 diff --git a/html/npm.png b/html/npm.png new file mode 100644 index 0000000000000000000000000000000000000000..d78ff53f2affa1bb4a9943619ea263633f8dba5f GIT binary patch literal 1164 zcmeAS@N?(olHy`uVBq!ia0y~yU}6WdPjRpTNkfmv6+nu!z$3Dlfq`2Xgc%uT&5>YW zV6pRbaSW-r_4elJEa5_t0}uaiN!FYE$nA>L8@Geo7K%8DU)#H{MMF#DRd7cwtN7C2 z*SPmJ#Lf^85Mc3MTj9<#DNA&=fOFJ#y`^t^-ah#q_u#<8luzDjRh2(qr8UUDs{1n` z#WH_I#2vemnk~tn-yQ$!V8wU-%$?rb>%)XrKUnah+-&i^W9H`FzZ<8h1P5PL%w}Nt zr^d&?P{_d0!OY+w!@%%}fkA+sp}~TI;Rqvx0EI`z{e||-h4ydF^EdxBjn!%k+N#BOW2e6N_rurOy=R_VqkE70$SF?3|Q$K#quG(Vl9OU0*~XCXq~G{c>XmiVsD}L_wKiK|EByr zQ(j!0xFe+Os^x{69~wC(QeqpA|GL}vy#M+6#$W$ltzFOWCiBI5_QUJl&*ueY%DlU^ zO7+Q+_i2}(tMEoge|z=w@$c92v~}_(rn1K`-^|R7KGA+r`?_B5-97sE@8>ddD7M(&NSKz88J%z+SiCTJy85}Sb4q9e E0I8{5D*ylh literal 0 HcmV?d00001 From 963528fb208e1c8bf10a06ac2c85d7acda8d6933 Mon Sep 17 00:00:00 2001 From: isaacs Date: Thu, 17 Jun 2010 16:51:18 -0700 Subject: [PATCH 13/79] Add Brian and Mathias to contributors. (They made the logo.) --- package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package.json b/package.json index 247ddb6d5f4..6f68860d00f 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,8 @@ , "Mikeal Rogers " , "Aaron Blohowiak " , "Martyn Smith " + , "Mathias Pettersson " + , "Brian Hammond " ] , "repository" : { "type" : "git" From d6b5ec0224621086da293a82c96aedc55301937d Mon Sep 17 00:00:00 2001 From: indexzero Date: Thu, 24 Jun 2010 22:56:24 -0400 Subject: [PATCH 14/79] Updated list docs --- doc/list.md | 5 +++++ man/list.1 | 35 ++++++++++++++++++++++------------- man/ls.1 | 35 ++++++++++++++++++++++------------- 3 files changed, 49 insertions(+), 26 deletions(-) diff --git a/doc/list.md b/doc/list.md index fa07bd9731e..cffae848e97 100755 --- a/doc/list.md +++ b/doc/list.md @@ -18,6 +18,11 @@ packages, you could do this: npm ls @stable +Another common usage is to find the set of all packages that are +installed. This can be accomplished by doing this: + + npm ls @installed + Strings are matched using the JavaScript "split" function, so regular expression strings are ok. However, the highlighting is a simple split/join, so regexps probably won't get the funky colors. diff --git a/man/list.1 b/man/list.1 index b9cecec2846..36672607ba4 100644 --- a/man/list.1 +++ b/man/list.1 @@ -1,32 +1,30 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "NPM\-LIST" "1" "May 2010" "" "" +.TH "NPM\-LIST" "1" "June 2010" "" "" . .SH "NAME" -\fBnpm\-list\fR \-\- List installed packages +\fBnpm\-list\fR \- List installed packages . .SH "SYNOPSIS" . .nf + npm list npm ls . .fi . .SH "DESCRIPTION" -This command will print to stdout all the versions of packages that are -either installed or available in the registry, with their tags and whether -or not they're active and/or stable. +This command will print to stdout all the versions of packages that are either installed or available in the registry, with their tags and whether or not they\'re active and/or stable\. . .P -To filter a single package or state, you can provide words to filter on -and highlight (if appropriate). For instance, to see all the stable -packages, you could do this: +To filter a single package or state, you can provide words to filter on and highlight (if appropriate)\. For instance, to see all the stable packages, you could do this: . .IP "" 4 . .nf + npm ls @stable . .fi @@ -34,6 +32,17 @@ npm ls @stable .IP "" 0 . .P -Strings are matched using the JavaScript "split" function, so regular -expression strings are ok. However, the highlighting is a simple -split/join, so regexps probably won't get the funky colors. +Another common usage is to find the set of all packages that are installed\. This can be accomplished by doing this: +. +.IP "" 4 +. +.nf + +npm ls @installed +. +.fi +. +.IP "" 0 +. +.P +Strings are matched using the JavaScript "split" function, so regular expression strings are ok\. However, the highlighting is a simple split/join, so regexps probably won\'t get the funky colors\. diff --git a/man/ls.1 b/man/ls.1 index b9cecec2846..36672607ba4 100644 --- a/man/ls.1 +++ b/man/ls.1 @@ -1,32 +1,30 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "NPM\-LIST" "1" "May 2010" "" "" +.TH "NPM\-LIST" "1" "June 2010" "" "" . .SH "NAME" -\fBnpm\-list\fR \-\- List installed packages +\fBnpm\-list\fR \- List installed packages . .SH "SYNOPSIS" . .nf + npm list npm ls . .fi . .SH "DESCRIPTION" -This command will print to stdout all the versions of packages that are -either installed or available in the registry, with their tags and whether -or not they're active and/or stable. +This command will print to stdout all the versions of packages that are either installed or available in the registry, with their tags and whether or not they\'re active and/or stable\. . .P -To filter a single package or state, you can provide words to filter on -and highlight (if appropriate). For instance, to see all the stable -packages, you could do this: +To filter a single package or state, you can provide words to filter on and highlight (if appropriate)\. For instance, to see all the stable packages, you could do this: . .IP "" 4 . .nf + npm ls @stable . .fi @@ -34,6 +32,17 @@ npm ls @stable .IP "" 0 . .P -Strings are matched using the JavaScript "split" function, so regular -expression strings are ok. However, the highlighting is a simple -split/join, so regexps probably won't get the funky colors. +Another common usage is to find the set of all packages that are installed\. This can be accomplished by doing this: +. +.IP "" 4 +. +.nf + +npm ls @installed +. +.fi +. +.IP "" 0 +. +.P +Strings are matched using the JavaScript "split" function, so regular expression strings are ok\. However, the highlighting is a simple split/join, so regexps probably won\'t get the funky colors\. From 5719cba1b168cabebce04d0e4fa700d37006c403 Mon Sep 17 00:00:00 2001 From: isaacs Date: Thu, 24 Jun 2010 20:22:45 -0700 Subject: [PATCH 15/79] Add Charlie Robbins to contributors list --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 6f68860d00f..87a1ec8f3a9 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ , "Martyn Smith " , "Mathias Pettersson " , "Brian Hammond " + , "Charlie Robbins " ] , "repository" : { "type" : "git" From a515d32ab8ac18407b70bbecb2755fec508d3d92 Mon Sep 17 00:00:00 2001 From: isaacs Date: Fri, 25 Jun 2010 19:09:58 -0700 Subject: [PATCH 16/79] Make the default tag 'latest' instead of 'stable' --- lib/install.js | 2 +- lib/utils/default-config.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/install.js b/lib/install.js index 86014a916ef..93f97c2b11e 100644 --- a/lib/install.js +++ b/lib/install.js @@ -38,7 +38,7 @@ function registryInstall (pkglist, cb) { registryInstall(pkglist, cb) }) - var defTag = npm.config.get("tag") || "stable" + var defTag = npm.config.get("tag") // While the list is not empty: // a. If it's a range, and a satisfying version is already installed, diff --git a/lib/utils/default-config.js b/lib/utils/default-config.js index 1b7a2e48f5f..1f8f4acab63 100644 --- a/lib/utils/default-config.js +++ b/lib/utils/default-config.js @@ -15,6 +15,7 @@ log(iamroot, "sudo") module.exports = { "auto-activate" : "always" , "auto-deactivate" : true + , tag : "latest" , root : iamroot ? path.join(process.installPrefix, "lib", "node") : require.paths[0].indexOf(".npm") !== -1 ? require.paths[1] : require.paths.length > 2 ? require.paths[0] From 663892dcd2ce941c1b3cf6a9578a2a1dcc9a6ccc Mon Sep 17 00:00:00 2001 From: isaacs Date: Fri, 25 Jun 2010 19:26:59 -0700 Subject: [PATCH 17/79] raise an error about not having crypto where it's needed --- lib/link.js | 8 +++++++- lib/utils/registry/adduser.js | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/link.js b/lib/link.js index 0f702becfb6..d1b282859b7 100644 --- a/lib/link.js +++ b/lib/link.js @@ -9,11 +9,17 @@ var npm = require("../npm") , rm = require("./utils/rm-rf") , mkdir = require("./utils/mkdir-p") , path = require("path") - , crypto = require("crypto") + , crypto + +try { + crypto = require("crypto") +} catch (ex) {} module.exports = link function link (args, cb) { + if (!crypto) return cb(new Error( + "You must compile node with ssl support to use the link feature")) var folder = args.shift() // folder's root MUST contain a package.json // read that for package info, then link it in, clobbering if necessary. diff --git a/lib/utils/registry/adduser.js b/lib/utils/registry/adduser.js index 631bb49a24f..5db5247f303 100644 --- a/lib/utils/registry/adduser.js +++ b/lib/utils/registry/adduser.js @@ -2,15 +2,21 @@ module.exports = adduser var uuid = require("../uuid") - , crypto = require("crypto") , request = require("./request") , log = require("../log") + , crypto + +try { + crypto = require("crypto") +} catch (ex) {} function sha (s) { return crypto.createHash("sha1").update(s).digest("hex") } function adduser (username, password, email, callback) { + if (!crypto) return cb(new Error( + "You must compile node with ssl support to use the adduser feature")) var salt = uuid.generate() , userobj = { _id : 'org.couchdb.user:'+username From cf30a2e99b0a0a6a4da0aeb59f784b11215def9c Mon Sep 17 00:00:00 2001 From: isaacs Date: Sat, 26 Jun 2010 00:30:20 -0700 Subject: [PATCH 18/79] Accept filenames on main, and only use "overlay" for overlay --- lib/utils/read-json.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/utils/read-json.js b/lib/utils/read-json.js index 07ab9c00318..f1ef79178de 100644 --- a/lib/utils/read-json.js +++ b/lib/utils/read-json.js @@ -44,14 +44,12 @@ function processJsonString (tag, cb) { return function (er, jsonString) { return processObject(tag, cb)(er, json) }} function processObject (tag, cb) { return function (er, json) { - ;[ "overlay", "env", "context", "ctx", "vnd", "vendor" ] - .forEach(function (vnd) { - if (!json[vnd]) return undefined + if (json.overlay) { ;["node", "npm"].forEach(function (k) { - if (!json[vnd][k]) return undefined - for (var i in json[vnd][k]) json[i] = json[vnd][k][i] + if (!json.overlay[k]) return undefined + for (var i in json.overlay[k]) json[i] = json.overlay[k][i] }) - }) + } // slashes would be a security risk. // anything else will just fail harmlessly. @@ -63,6 +61,8 @@ function processObject (tag, cb) { return function (er, json) { throw e } + if (json.main) json.main = json.main.replace(/(\.js|\.node)$/, '') + json._id = json.name+"-"+json.version json = testEngine(json) if (cb) cb(null,json) From cea2bf8615fa4737a92b3bf6b5a9bc91a73511df Mon Sep 17 00:00:00 2001 From: isaacs Date: Sat, 26 Jun 2010 00:31:51 -0700 Subject: [PATCH 19/79] Add the --pipe config to ronn --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 12bb12d68f7..e123d29ce95 100644 --- a/Makefile +++ b/Makefile @@ -24,6 +24,6 @@ doc: man $(docs) @true man/%.1: doc/%.md - ronn --roff $< > $@ + ronn --roff --pipe $< > $@ .PHONY: install install-stable link doc clean uninstall From da9eb9a7f3dfa1b5aa055ea6c6ad4f60c436eb13 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sat, 26 Jun 2010 00:32:23 -0700 Subject: [PATCH 20/79] Update json docs to be more comprehensive. Fix #45 --- doc/json.md | 138 +++++++++++++++++++++--------- man/json.1 | 237 +++++++++++++++++++++++++++++----------------------- 2 files changed, 231 insertions(+), 144 deletions(-) diff --git a/doc/json.md b/doc/json.md index 3cd41717126..80d6fb0185e 100644 --- a/doc/json.md +++ b/doc/json.md @@ -8,56 +8,82 @@ npm aims to implement the commonjs adjustments have been made, which may eventually be unmade, but hopefully will be incorporated into the spec. -## overlay - -npm responds to the `node` and `npm` env-specific package.json values, which -you can hang on any of the following keys: `"overlay", "env", "context", -"ctx", "vnd", "vendor"`. - -For example: +This document is all you need to know about what's required in your package.json +file. - { "name" : "foo" - , "version" : 7 - , "description" : "generic description" - , "overlay" : - { "node" : - { "name" : "bar" - , "description" : "description for node" - } - , "npm" : - { "version" : "1.0.7" - , "description" : "description for npm" - } - , "narwhal" : - { "description" : "description for narwhal" } - } - } +## name -In this case, this is what npm will treat it as: +The *most* important things in your package.json are the name and version fields. - { "name" : "bar" - , "version" : "1.0.7" - , "description" : "description for npm" - } +The name is what your thing is called. Some tips: -This way, even if npm is not exactly the same as some other package management -system, you can still use both, and it can be a happy planet. +* Don't put "js" or "node" in the name. It's assumed that it's js, since you're + writing a package.json file, and you can specify the engine using the "engines" + field. (See below.) +* The name ends up being part of a URL, an argument on the command line, and a + folder name. So, don't use characters that are annoying in those contexts, like + funny UTF things or parentheses or slashes, or else it'll break. +* The name will probably be passed as an argument to require(), so it should + be something short, but also reasonably descriptive. +* You may want to check the npm registry to see if there's something by that name + already, before you get too attached to it. http://registry.npmjs.org/ ## version +The *most* important things in your package.json are the name and version fields. + Version must be [semver](http://semver.org)-compliant. npm assumes that you've -read the semver page, and that you comply with it. Versions packages with -non-semver versions will not be installed by npm. It's just too tricky if you -have more than one way to do it, and semver works well. +read the semver page, and that you comply with it. Here's how it deviates from +what's on semver.org: -(This is actually mentioned in the Packages/1.0 spec, but it's worth -mentioning that npm enforces this requirement quite strictly, since it's -pretty liberal about most other things.) +* Versions can start with "v" +* A numeric item separated from the main three-number version by a hyphen + will be interpreted as a "build" number, and will *increase* the version. + But, if the tag is not a number separated by a hyphen, then it's treated + as a pre-release tag, and is *less than* the version without a tag. + So, 0.1.2-7 > 0.1.2-6 > 0.1.2 > 0.1.2beta -## dependencies +This is a little bit confusing to explain, but matches what you see in practice +when people create tags in git like "v1.2.3" and then do "git describe" to generate +a patch version. (This is how node's versions are generated, and has driven this +design.) + +## main + +The main field is a module ID that is the primary entry point to your program. +That is, if your package is named `foo`, and a user installs it, and then does +`require("foo")`, then your main module's exports object will be returned. + +This should be a module ID relative to the root of your package folder. + +For most modules, it makes the most sense to have a main script. + +## directories + +The "directories" member is an object hash of folders. + +### directories.lib + +The only directory that npm cares about is the "lib" directory. This is a folder +that will be mapped to the package name. So, if you had a package named `foo`, +and the package.json contains `"directories":{"lib":"./lib"}`, and there was +a file called `./lib/bar.js`, then require("foo/bar") would include that module. -The Packages/1.0 spec's method for specifying dependencies is Unclean in My -Sight. So, npm is using a very simple semver-based method. +This is handy if your package is a collection or library full of useful goodies. +However, dependency paths are not corrected for modules in the lib folder, so it's +a bit more complicated. + +Most of the time, delving into a package's folder is not as awesome. + +## scripts + +The "scripts" member is an object hash of script commands that are run +at various times in the lifecycle of your package. The key is the lifecycle +event, and the value is the command to run at that point. + +See `npm help scripts` to find out more about writing package scripts. + +## dependencies Dependencies are specified with a simple hash of package name to version range. The version range is EITHER a string with has one or more @@ -157,4 +183,36 @@ So, when you install npm, it'll create a symlink from the `cli.js` script to `/usr/local/bin/npm-version`. Then, when you activate that version, it'll create a symlink from `/usr/local/bin/npm-version` to `/usr/local/bin/npm`. -(props to [mikeal](http://github.com/mikeal) for the idea) +## overlay + +npm responds to the `node` and `npm` env-specific package.json values, which +you can hang on the "overlay" key. + +For example: + + { "name" : "foo" + , "version" : 7 + , "description" : "generic description" + , "overlay" : + { "node" : + { "name" : "bar" + , "description" : "description for node" + } + , "npm" : + { "version" : "1.0.7" + , "description" : "description for npm" + } + , "narwhal" : + { "description" : "description for narwhal" } + } + } + +In this case, this is what npm will treat it as: + + { "name" : "bar" + , "version" : "1.0.7" + , "description" : "description for npm" + } + +This way, even if npm is not exactly the same as some other package management +system, you can still use both, and it can be a happy planet. diff --git a/man/json.1 b/man/json.1 index e65563513be..f5f0735e79e 100644 --- a/man/json.1 +++ b/man/json.1 @@ -1,90 +1,86 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "NPM\-JSON" "1" "May 2010" "" "" +.TH "NPM\-JSON" "1" "June 2010" "" "" . .SH "NAME" -\fBnpm\-json\fR \-\- Specifics of npm's package.json handling +\fBnpm\-json\fR \- Specifics of npm\'s package\.json handling . .SH "DESCRIPTION" -npm aims to implement the commonjs\fIPackages\fR spec. However, some -adjustments have been made, which may eventually be unmade, but hopefully will -be incorporated into the spec. +npm aims to implement the commonjs Packages \fIhttp://wiki\.commonjs\.org/wiki/Packages/1\.0\fR spec\. However, some adjustments have been made, which may eventually be unmade, but hopefully will be incorporated into the spec\. . -.SH "overlay" -npm responds to the \fBnode\fR and \fBnpm\fR env\-specific package.json values, which -you can hang on any of the following keys: \fB"overlay", "env", "context", -"ctx", "vnd", "vendor"\fR. +.P +This document is all you need to know about what\'s required in your package\.json file\. +. +.SH "name" +The \fImost\fR important things in your package\.json are the name and version fields\. . .P -For example: +The name is what your thing is called\. Some tips: . -.IP "" 4 +.IP "\(bu" 4 +Don\'t put "js" or "node" in the name\. It\'s assumed that it\'s js, since you\'re writing a package\.json file, and you can specify the engine using the "engines" field\. (See below\.) . -.nf -{ "name" : "foo" -, "version" : 7 -, "description" : "generic description" -, "overlay" : - { "node" : - { "name" : "bar" - , "description" : "description for node" - } - , "npm" : - { "version" : "1.0.7" - , "description" : "description for npm" - } - , "narwhal" : - { "description" : "description for narwhal" } - } -} +.IP "\(bu" 4 +The name ends up being part of a URL, an argument on the command line, and a folder name\. So, don\'t use characters that are annoying in those contexts, like funny UTF things or parentheses or slashes, or else it\'ll break\. . -.fi +.IP "\(bu" 4 +The name will probably be passed as an argument to require(), so it should be something short, but also reasonably descriptive\. +. +.IP "\(bu" 4 +You may want to check the npm registry to see if there\'s something by that name already, before you get too attached to it\. http://registry\.npmjs\.org/ . .IP "" 0 . -.P -In this case, this is what npm will treat it as: +.SH "version" +The \fImost\fR important things in your package\.json are the name and version fields\. . -.IP "" 4 +.P +Version must be semver \fIhttp://semver\.org\fR\-compliant\. npm assumes that you\'ve read the semver page, and that you comply with it\. Here\'s how it deviates from what\'s on semver\.org: . -.nf -{ "name" : "bar" -, "version" : "1.0.7" -, "description" : "description for npm" -} +.IP "\(bu" 4 +Versions can start with "v" . -.fi +.IP "\(bu" 4 +A numeric item separated from the main three\-number version by a hyphen will be interpreted as a "build" number, and will \fIincrease\fR the version\. But, if the tag is not a number separated by a hyphen, then it\'s treated as a pre\-release tag, and is \fIless than\fR the version without a tag\. So, 0\.1\.2\-7 > 0\.1\.2\-6 > 0\.1\.2 > 0\.1\.2beta . .IP "" 0 . .P -This way, even if npm is not exactly the same as some other package management -system, you can still use both, and it can be a happy planet. +This is a little bit confusing to explain, but matches what you see in practice when people create tags in git like "v1\.2\.3" and then do "git describe" to generate a patch version\. (This is how node\'s versions are generated, and has driven this design\.) . -.SH "version" -Version must be \fIsemver\fR\-compliant. npm assumes that you've -read the semver page, and that you comply with it. Versions packages with -non\-semver versions will not be installed by npm. It's just too tricky if you -have more than one way to do it, and semver works well. +.SH "main" +The main field is a module ID that is the primary entry point to your program\. That is, if your package is named \fBfoo\fR, and a user installs it, and then does \fBrequire("foo")\fR, then your main module\'s exports object will be returned\. . .P -(This is actually mentioned in the Packages/1.0 spec, but it's worth -mentioning that npm enforces this requirement quite strictly, since it's -pretty liberal about most other things.) +This should be a module ID relative to the root of your package folder\. . -.SH "dependencies" -The Packages/1.0 spec's method for specifying dependencies is Unclean in My -Sight. So, npm is using a very simple semver\-based method. +.P +For most modules, it makes the most sense to have a main script\. +. +.SH "directories" +The "directories" member is an object hash of folders\. +. +.SS "directories\.lib" +The only directory that npm cares about is the "lib" directory\. This is a folder that will be mapped to the package name\. So, if you had a package named \fBfoo\fR, and the package\.json contains \fB"directories":{"lib":"\./lib"}\fR, and there was a file called \fB\./lib/bar\.js\fR, then require("foo/bar") would include that module\. . .P -Dependencies are specified with a simple hash of package name to version -range. The version range is EITHER a string with has one or more -space\-separated descriptors. +This is handy if your package is a collection or library full of useful goodies\. However, dependency paths are not corrected for modules in the lib folder, so it\'s a bit more complicated\. +. +.P +Most of the time, delving into a package\'s folder is not as awesome\. +. +.SH "scripts" +The "scripts" member is an object hash of script commands that are run at various times in the lifecycle of your package\. The key is the lifecycle event, and the value is the command to run at that point\. . .P -Version range descriptors may be any of the following styles, where "version" -is a semver compatible version identifier. +See \fBnpm help scripts\fR to find out more about writing package scripts\. +. +.SH "dependencies" +Dependencies are specified with a simple hash of package name to version range\. The version range is EITHER a string with has one or more space\-separated descriptors\. +. +.P +Version range descriptors may be any of the following styles, where "version" is a semver compatible version identifier\. . .IP "\(bu" 4 \fBversion\fR Must match \fBversion\fR exactly @@ -111,7 +107,7 @@ is a semver compatible version identifier. \fB""\fR (just an empty string) Same as \fB*\fR . .IP "\(bu" 4 -\fBversion1 \- version2\fR Same as \fB>=version1 <=version2\fR. +\fBversion1 \- version2\fR Same as \fB>=version1 <=version2\fR\. . .IP "" 0 . @@ -121,11 +117,12 @@ For example, these are all valid: .IP "" 4 . .nf + { "dependencies" : - { "foo" : "1.0.0 \- 2.9999.9999" - , "bar" : ">=1.0.2 <2.1.2" - , "baz" : ">1.0.2 <=2.3.4" - , "boo" : "2.0.1" + { "foo" : "1\.0\.0 \- 2\.9999\.9999" + , "bar" : ">=1\.0\.2 <2\.1\.2" + , "baz" : ">1\.0\.2 <=2\.3\.4" + , "boo" : "2\.0\.1" } } . @@ -134,23 +131,23 @@ For example, these are all valid: .IP "" 0 . .SH "link" -You may specify a \fBlink\fR member in your package.json to have npm link -dependencies in to a particular location inside your package dir. For example: +You may specify a \fBlink\fR member in your package\.json to have npm link dependencies in to a particular location inside your package dir\. For example: . .IP "" 4 . .nf + { "dependencies" : - { "boo" : "2.0.1" - , "baz" : ">1.0.2 <=2.3.4" - , "foo" : "1.0.0 \- 2.9999.9999" - , "bar" : ">=1.0.2 <2.1.2" + { "boo" : "2\.0\.1" + , "baz" : ">1\.0\.2 <=2\.3\.4" + , "foo" : "1\.0\.0 \- 2\.9999\.9999" + , "bar" : ">=1\.0\.2 <2\.1\.2" } , "link" : - { "boo" : "./deps/boo" - , "baz" : "./lib/baz" - , "foo" : "./deps/foo" - , "bar" : "./deps/bar" + { "boo" : "\./deps/boo" + , "baz" : "\./lib/baz" + , "foo" : "\./deps/foo" + , "bar" : "\./deps/bar" } } . @@ -159,28 +156,22 @@ dependencies in to a particular location inside your package dir. For example: .IP "" 0 . .P -This would link the dependencies into the specified locations, so that the -package code could do \fBrequire("./deps/foo")\fR to import whichever version of \fBfoo\fR was satisfying the requirement. +This would link the dependencies into the specified locations, so that the package code could do \fBrequire("\./deps/foo")\fR to import whichever version of \fBfoo\fR was satisfying the requirement\. . .P -\fBWarning!\fR This is currently the \fIonly\fR way -in which npm modifies the pristine nature of the package directory, and it may -go away eventually. It's just that it satisfies a use case that is pretty -tricky to do otherwise. +\fBWarning!\fR This is currently the \fIonly\fR way in which npm modifies the pristine nature of the package directory, and it may go away eventually\. It\'s just that it satisfies a use case that is pretty tricky to do otherwise\. . .SH "engines" -Packages/1.0 says that you can have an "engines" field with an array of engine -names. However, it has no provision for specifying which version of the engine -your stuff runs on. +Packages/1\.0 says that you can have an "engines" field with an array of engine names\. However, it has no provision for specifying which version of the engine your stuff runs on\. . .P -With npm, you can use either of the following styles to specify the version of -node that your stuff works on: +With npm, you can use either of the following styles to specify the version of node that your stuff works on: . .IP "" 4 . .nf -{ "engines" : [ "node >=0.1.27 <0.1.30" ] } + +{ "engines" : [ "node >=0\.1\.27 <0\.1\.30" ] } . .fi . @@ -192,33 +183,24 @@ or: .IP "" 4 . .nf -{ "engines" : { "node" : ">=0.1.27 <0.1.30" } } + +{ "engines" : { "node" : ">=0\.1\.27 <0\.1\.30" } } . .fi . .IP "" 0 . .P -And, like with dependencies, if you don't specify the version (or if you -specify "*" as the version), then any version of node will do. +And, like with dependencies, if you don\'t specify the version (or if you specify "*" as the version), then any version of node will do\. . .P -If you specify an "engines" field, then npm will require that "node" be -somewhere on that list. If "engines" is omitted, then npm will just assume -that it works on node. +If you specify an "engines" field, then npm will require that "node" be somewhere on that list\. If "engines" is omitted, then npm will just assume that it works on node\. . .SH "bin" -A lot of packages have one or more executable files that they'd like to -install into the PATH. npm makes this pretty easy (in fact, it uses this -feature to install the "npm" executable.) +A lot of packages have one or more executable files that they\'d like to install into the PATH\. npm makes this pretty easy (in fact, it uses this feature to install the "npm" executable\.) . .P -To use this, supply a \fBbin\fR field in your package.json which is a map of -command name to local file name. On install, npm will link that file into -place right next to wherever node is installed. (Presumably, this is in your -PATH, and defaults to \fB/usr/local/bin\fR.) On activation, the versioned file -will get linked to the main filename (just like how the main.js stuff works, -but with an executable in the PATH.) +To use this, supply a \fBbin\fR field in your package\.json which is a map of command name to local file name\. On install, npm will link that file into place right next to wherever node is installed\. (Presumably, this is in your PATH, and defaults to \fB/usr/local/bin\fR\.) On activation, the versioned file will get linked to the main filename (just like how the main\.js stuff works, but with an executable in the PATH\.) . .P For example, npm has this: @@ -226,15 +208,62 @@ For example, npm has this: .IP "" 4 . .nf -{ "bin" : { "npm" : "./cli.js" } } + +{ "bin" : { "npm" : "\./cli\.js" } } +. +.fi +. +.IP "" 0 +. +.P +So, when you install npm, it\'ll create a symlink from the \fBcli\.js\fR script to \fB/usr/local/bin/npm\-version\fR\. Then, when you activate that version, it\'ll create a symlink from \fB/usr/local/bin/npm\-version\fR to \fB/usr/local/bin/npm\fR\. +. +.SH "overlay" +npm responds to the \fBnode\fR and \fBnpm\fR env\-specific package\.json values, which you can hang on the "overlay" key\. +. +.P +For example: +. +.IP "" 4 +. +.nf + +{ "name" : "foo" +, "version" : 7 +, "description" : "generic description" +, "overlay" : + { "node" : + { "name" : "bar" + , "description" : "description for node" + } + , "npm" : + { "version" : "1\.0\.7" + , "description" : "description for npm" + } + , "narwhal" : + { "description" : "description for narwhal" } + } +} . .fi . .IP "" 0 . .P -So, when you install npm, it'll create a symlink from the \fBcli.js\fR script to \fB/usr/local/bin/npm\-version\fR. Then, when you activate that version, it'll -create a symlink from \fB/usr/local/bin/npm\-version\fR to \fB/usr/local/bin/npm\fR. +In this case, this is what npm will treat it as: +. +.IP "" 4 +. +.nf + +{ "name" : "bar" +, "version" : "1\.0\.7" +, "description" : "description for npm" +} +. +.fi +. +.IP "" 0 . .P -(props to \fImikeal\fR for the idea) +This way, even if npm is not exactly the same as some other package management system, you can still use both, and it can be a happy planet\. From 074a9c3220f208e8050582f86c138e5801e615e4 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sat, 26 Jun 2010 00:37:12 -0700 Subject: [PATCH 21/79] Handle the binroot a bit smarter, work around the homebrew issue --- lib/build.js | 5 ++++- lib/uninstall.js | 2 +- lib/utils/default-config.js | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/build.js b/lib/build.js index 4bb0b5c71a9..bd321f592f0 100644 --- a/lib/build.js +++ b/lib/build.js @@ -224,7 +224,10 @@ function resolveDependencies (pkg, topCb) { function writeShim (from, to, dep, cb) { if (!cb) cb = dep, dep = false - var code = "#!"+process.installPrefix+"/bin/node\n" + + var nodePath = process.execPath + || path.join(process.installPrefix, "bin", "node") + , code = "#!"+nodePath+"\n" + "// generated by npm, please don't touch!\n" + (dep ? "require.paths.unshift(" + JSON.stringify(dep) + ")\n" diff --git a/lib/uninstall.js b/lib/uninstall.js index 32a683d7e61..f8b33be5f6c 100644 --- a/lib/uninstall.js +++ b/lib/uninstall.js @@ -113,7 +113,7 @@ function uninstall (args, cb) { function removeBins (data, cb) { log(data.bin, "remove bins") if (!data.bin) return cb() - var binroot = path.join(process.installPrefix, "bin") + var binroot = npm.config.get("binroot") ;(function R (bins) { if (!bins.length) return cb() chain diff --git a/lib/utils/default-config.js b/lib/utils/default-config.js index 1f8f4acab63..b0dc9ad9c4a 100644 --- a/lib/utils/default-config.js +++ b/lib/utils/default-config.js @@ -21,7 +21,8 @@ module.exports = : require.paths.length > 2 ? require.paths[0] : process.env.HOME ? path.join(process.env.HOME, '.node_libraries') : process.cwd() - , binroot : path.join(process.installPrefix, "bin") + , binroot : process.execPath ? path.dirname(process.execPath) + : path.join(process.installPrefix, "bin") , registry : hasSSL ? "https://registry.npmjs.org/" : "http://registry.npmjs.org/" } From dcc1614653afe08d228f732744bf92fc9a5f05a7 Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 28 Jun 2010 10:28:07 -0700 Subject: [PATCH 22/79] Exit with non-zero code on failure. Fix #71 --- cli.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cli.js b/cli.js index 167a62dfc24..a5ed1d4d1d9 100755 --- a/cli.js +++ b/cli.js @@ -61,6 +61,7 @@ if (!command) { if (!printVersion) { + "Check 'man npm' or 'man npm-help' for more information\n\n" + "This is supposed to happen. " ) + process.exit(1) }} else npm.commands[command](arglist, errorHandler) function errorHandler (er) { @@ -71,6 +72,7 @@ function errorHandler (er) { log("try running: 'npm help "+command+"'", "failure") log("Report this *entire* log at ", "failure") log("or email it to ", "failure") + process.exit(1) } else log("ok") } From f132f9b73e87b1d353eb8b26397b2de79f763b8c Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 28 Jun 2010 23:25:48 -0700 Subject: [PATCH 23/79] Default publish, install, and link to "." if no arguments given. Fix #73 --- lib/install.js | 1 + lib/link.js | 2 +- lib/publish.js | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/install.js b/lib/install.js index 93f97c2b11e..64e7a03b6f7 100644 --- a/lib/install.js +++ b/lib/install.js @@ -31,6 +31,7 @@ var registry = require("./utils/registry") , cache = require("./cache") function registryInstall (pkglist, cb) { + if (pkglist.length === 0) pkglist = ["."] // it's helpful to know what we have already if (!installedPackages) return readInstalled([], function (er, data) { if (er) return cb(er) diff --git a/lib/link.js b/lib/link.js index d1b282859b7..b5a4e5e5bbd 100644 --- a/lib/link.js +++ b/lib/link.js @@ -20,7 +20,7 @@ module.exports = link function link (args, cb) { if (!crypto) return cb(new Error( "You must compile node with ssl support to use the link feature")) - var folder = args.shift() + var folder = args.shift() || "." // folder's root MUST contain a package.json // read that for package info, then link it in, clobbering if necessary. if (folder.charAt(0) !== "/") folder = path.join(process.cwd(), folder) diff --git a/lib/publish.js b/lib/publish.js index 4ec746eeb3a..8834b41fe31 100644 --- a/lib/publish.js +++ b/lib/publish.js @@ -6,6 +6,7 @@ var npm = require("../npm") , log = require("./utils/log") function publish (args, cb) { + if (args.length === 0) args = ["."] log(args, "publish") npm.commands.cache.add(args[0], args[1], function (er, data) { if (er) return cb(er) From 17f0fab0e240eb4eddfcb726d21c9212eb0cfec6 Mon Sep 17 00:00:00 2001 From: isaacs Date: Tue, 29 Jun 2010 10:46:28 -0700 Subject: [PATCH 24/79] Handle the "*" version range properly, rather than treating it as a tag. --- lib/install.js | 4 ++-- lib/utils/semver.js | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/install.js b/lib/install.js index 64e7a03b6f7..bd4efa07b61 100644 --- a/lib/install.js +++ b/lib/install.js @@ -100,7 +100,7 @@ function registryInstall (pkglist, cb) { , ver = pkg.slice(1).join("@").trim() , range = semver.validRange(ver) , exact = semver.valid(ver) - , tag = (!exact && !range) + , tag = (!exact && range === null) pkg = pkg.join("@") // if it's an exact name/version, and not already installed, then pull @@ -165,7 +165,7 @@ function registryInstall (pkglist, cb) { var data = npm.get(name) , stable = data["dist-tags"] && data["dist-tags"][defTag] if (stable && semver.satisfies(stable, range)) { - log(data.versions[stable], name+"@stable") + log(data.versions[stable], name+"@"+defTag) stable = name + "@" + stable if (!seen[stable]) pkglist.push(stable) return F(pkglist.shift()) diff --git a/lib/utils/semver.js b/lib/utils/semver.js index fce5d179983..e73110da6b5 100644 --- a/lib/utils/semver.js +++ b/lib/utils/semver.js @@ -53,7 +53,11 @@ function toComparators (range) { } function validRange (range) { - return toComparators(range).join(" ") + range = range.trim().replace(starExpression, starReplace) + var c = toComparators(range) + return (c.length === 0 && range !== "") + ? null + : c.join(" ") } // returns the highest satisfying version in the list, or undefined From ec0e65c74afd4a408075d16b5afd40194432869f Mon Sep 17 00:00:00 2001 From: isaacs Date: Tue, 29 Jun 2010 14:44:12 -0700 Subject: [PATCH 25/79] Test for valid name and version better. Fix #75 --- lib/utils/read-json.js | 5 +++++ lib/utils/semver.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/utils/read-json.js b/lib/utils/read-json.js index f1ef79178de..e07e18343f1 100644 --- a/lib/utils/read-json.js +++ b/lib/utils/read-json.js @@ -53,6 +53,11 @@ function processObject (tag, cb) { return function (er, json) { // slashes would be a security risk. // anything else will just fail harmlessly. + if (!json.name) { + var e = new Error("No 'name' field found in package.json") + if (cb) return cb(e) + throw e + } json.name = json.name.replace(/\//g, '-') if (tag) json.version += tag if (!(semver.valid(json.version))) { diff --git a/lib/utils/semver.js b/lib/utils/semver.js index e73110da6b5..3a07dbe9c6f 100644 --- a/lib/utils/semver.js +++ b/lib/utils/semver.js @@ -12,7 +12,7 @@ var semver = "v?([0-9]+)\\.([0-9]+)\\.([0-9]+)(-[0-9]+-?)?([a-zA-Z-][a-zA-Z0-9-] , validComparator : new RegExp("((<|>)?=?)("+semver+")", "g") } Object.getOwnPropertyNames(expressions).forEach(function (i) { - exports[i] = function (str) { return str.match(expressions[i]) } + exports[i] = function (str) { (str || "").match(expressions[i]) } }) exports.rangeReplace = ">=$1 <=$7" From e9ec7bf8ea48b0f8c9dd5529a088d18ad0699eb7 Mon Sep 17 00:00:00 2001 From: isaacs Date: Tue, 29 Jun 2010 16:11:42 -0700 Subject: [PATCH 26/79] oops --- lib/utils/semver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils/semver.js b/lib/utils/semver.js index 3a07dbe9c6f..88b4ac3aff9 100644 --- a/lib/utils/semver.js +++ b/lib/utils/semver.js @@ -12,7 +12,7 @@ var semver = "v?([0-9]+)\\.([0-9]+)\\.([0-9]+)(-[0-9]+-?)?([a-zA-Z-][a-zA-Z0-9-] , validComparator : new RegExp("((<|>)?=?)("+semver+")", "g") } Object.getOwnPropertyNames(expressions).forEach(function (i) { - exports[i] = function (str) { (str || "").match(expressions[i]) } + exports[i] = function (str) { return (str || "").match(expressions[i]) } }) exports.rangeReplace = ">=$1 <=$7" From 7c3200f650e708d6c4ae9d5461a1b39d6aab1d90 Mon Sep 17 00:00:00 2001 From: isaacs Date: Fri, 2 Jul 2010 20:51:32 -0700 Subject: [PATCH 27/79] Sniff for crypto more reliably, and require node 0.1.99 --- lib/link.js | 2 +- lib/utils/default-config.js | 2 +- lib/utils/ini.js | 2 +- lib/utils/registry/adduser.js | 2 +- package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/link.js b/lib/link.js index b5a4e5e5bbd..7e0c1fc5b19 100644 --- a/lib/link.js +++ b/lib/link.js @@ -12,7 +12,7 @@ var npm = require("../npm") , crypto try { - crypto = require("crypto") + crypto = process.binding("crypto") && require("crypto") } catch (ex) {} module.exports = link diff --git a/lib/utils/default-config.js b/lib/utils/default-config.js index b0dc9ad9c4a..e24cf0a93c6 100644 --- a/lib/utils/default-config.js +++ b/lib/utils/default-config.js @@ -4,7 +4,7 @@ var iamroot = (process.getuid() === 0) , path = require("path") , hasSSL = false try { - crypto = require("crypto") + crypto = process.binding("crypto") && require("crypto") hasSSL = true } catch (ex) { crypto = {} diff --git a/lib/utils/ini.js b/lib/utils/ini.js index 0866633aa67..aea3582b0f3 100644 --- a/lib/utils/ini.js +++ b/lib/utils/ini.js @@ -13,7 +13,7 @@ var fs = require('fs') , crypto try { - crypto = require("crypto") + crypto = process.binding("crypto") && require("crypto") hasSSL = true } catch (ex) { crypto = {} diff --git a/lib/utils/registry/adduser.js b/lib/utils/registry/adduser.js index 5db5247f303..cb40b12cac1 100644 --- a/lib/utils/registry/adduser.js +++ b/lib/utils/registry/adduser.js @@ -7,7 +7,7 @@ var uuid = require("../uuid") , crypto try { - crypto = require("crypto") + crypto = process.binding("crypto") && require("crypto") } catch (ex) {} function sha (s) { diff --git a/package.json b/package.json index 87a1ec8f3a9..ef8970d5f27 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ , "directories" : { "lib" : "./lib/" } , "main" : "./npm" , "bin" : { "npm" : "./cli.js" } -, "engines" : { "node" : ">=0.1.97" } +, "engines" : { "node" : ">=0.1.99" } , "scripts" : { "activate" : "node scripts/install-docs.js" , "deactivate" : "node scripts/install-docs.js" From dc6f9fffcbb3ca1db7085bc002f9c3e35169bb02 Mon Sep 17 00:00:00 2001 From: isaacs Date: Fri, 2 Jul 2010 21:56:48 -0700 Subject: [PATCH 28/79] Default root/binroot to global location always, based on execPath --- lib/utils/default-config.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/lib/utils/default-config.js b/lib/utils/default-config.js index e24cf0a93c6..9fe3411fedc 100644 --- a/lib/utils/default-config.js +++ b/lib/utils/default-config.js @@ -16,13 +16,8 @@ module.exports = { "auto-activate" : "always" , "auto-deactivate" : true , tag : "latest" - , root : iamroot ? path.join(process.installPrefix, "lib", "node") - : require.paths[0].indexOf(".npm") !== -1 ? require.paths[1] - : require.paths.length > 2 ? require.paths[0] - : process.env.HOME ? path.join(process.env.HOME, '.node_libraries') - : process.cwd() - , binroot : process.execPath ? path.dirname(process.execPath) - : path.join(process.installPrefix, "bin") + , root : path.join(process.execPath, "..", "..", "lib", "node") + , binroot : path.dirname(process.execPath) , registry : hasSSL ? "https://registry.npmjs.org/" : "http://registry.npmjs.org/" } From 4521087f19f507a8325c42c37e33aa6b4183be07 Mon Sep 17 00:00:00 2001 From: isaacs Date: Fri, 2 Jul 2010 23:31:04 -0700 Subject: [PATCH 29/79] Basic test harness. Bout damn time. Lazy lazy! --- test/common.js | 7 ++++ test/run.sh | 76 ++++++++++++++++++++++++++++++++++++++ test/test-npm-installed.js | 2 + 3 files changed, 85 insertions(+) create mode 100644 test/common.js create mode 100755 test/run.sh create mode 100644 test/test-npm-installed.js diff --git a/test/common.js b/test/common.js new file mode 100644 index 00000000000..abbfef915cb --- /dev/null +++ b/test/common.js @@ -0,0 +1,7 @@ + +// whatever, it's just tests. +;["sys","assert"].forEach(function (thing) { + thing = require("thing") + for (var i in thing) global[i] = thing[i] +} + diff --git a/test/run.sh b/test/run.sh new file mode 100755 index 00000000000..af9e6684ad8 --- /dev/null +++ b/test/run.sh @@ -0,0 +1,76 @@ +#!/bin/bash + +# the "npm" command is set to a custom function here so that we can +# test the code in this repo, rather than whichever version of npm +# happens to be installed. + +main () { + # setup + FAILURES=0 + npm install "$NPMPKG" + + # TODO: add more tests here. + # Run node programs by doing node some-thing.js + + node test-npm-installed.js + + # teardown + npm rm npm + # FIXME: removing npm should take this with it. + rm -rf "$TESTDIR/root/.npm" + + [ $FAILURES -gt 0 ] && echo_err "FAILED: $FAILURES" || echo_err "ok" + exit $FAILURES +} + + + +#################### +# Test Harness below + +# fake functions +npm () { + "$NPMCLI" --binroot "$TESTDIR/bin" --root "$TESTDIR/root" "$@" \ + &>output.log \ + || fail npm "$@" + rm output.log +} +node () { + local prog="$TESTDIR/$1" + PATH="$PATH":"$TESTDIR/bin" NODE_PATH="$TESTDIR/root" $(which node) "$prog" \ + &>output.log \ + || fail node "$@" +} + +# get the absolute path of the executable +SELF_PATH="$0" +if [ "${SELF_PATH:0:1}" != "." ] && [ "${SELF_PATH:0:1}" != "/" ]; then + SELF_PATH=./"$SELF_PATH" +fi +SELF_PATH=$( cd -P -- "$(dirname -- "$SELF_PATH")" \ + && pwd -P \ + ) && SELF_PATH=$SELF_PATH/$(basename -- "$0") +# resolve symlinks +while [ -h "$SELF_PATH" ]; do + DIR=$(dirname -- "$SELF_PATH") + SYM=$(readlink -- "$SELF_PATH") + SELF_PATH=$( cd -- "$DIR" \ + && cd -- $(dirname -- "$SYM") \ + && pwd \ + )/$(basename -- "$SYM") +done +NPMPKG="$(dirname -- "$(dirname -- "$SELF_PATH")")" +NPMCLI="$NPMPKG/cli.js" +TESTDIR="$NPMPKG/test/" + +echo_err () { + echo "$@" >&2 +} +fail () { + let 'FAILURES += 1' + cat output.log + echo_err "" + echo_err -e "\033[33mFailure: $@\033[m" +} + +main diff --git a/test/test-npm-installed.js b/test/test-npm-installed.js new file mode 100644 index 00000000000..ed3042a1ab4 --- /dev/null +++ b/test/test-npm-installed.js @@ -0,0 +1,2 @@ + +var npm = require("npm") From 92a00ed81848b7648d208794e3435c3700a815bc Mon Sep 17 00:00:00 2001 From: isaacs Date: Fri, 2 Jul 2010 23:55:46 -0700 Subject: [PATCH 30/79] Test some dependency stuff. --- test/packages/mjsunit.runner/package.json | 1 + test/run.sh | 32 ++++++++++++++++++----- 2 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 test/packages/mjsunit.runner/package.json diff --git a/test/packages/mjsunit.runner/package.json b/test/packages/mjsunit.runner/package.json new file mode 100644 index 00000000000..7a7f0016888 --- /dev/null +++ b/test/packages/mjsunit.runner/package.json @@ -0,0 +1 @@ +{ "name" : "mjsunit.runner", "version" : "0.1.0", "main":"dummy" } diff --git a/test/run.sh b/test/run.sh index af9e6684ad8..06c49468e9e 100755 --- a/test/run.sh +++ b/test/run.sh @@ -14,12 +14,25 @@ main () { node test-npm-installed.js + npm install "$TESTDIR"/packages/mjsunit.runner + npm install jsdom + npm rm jsdom 0.0.1 + npm rm mjsunit.runner + # teardown npm rm npm - # FIXME: removing npm should take this with it. - rm -rf "$TESTDIR/root/.npm" - - [ $FAILURES -gt 0 ] && echo_err "FAILED: $FAILURES" || echo_err "ok" + + if [ $FAILURES -eq 0 ]; then + # rm -rf "$ROOTDIR" + # rm -rf "$BINDIR" + rm -rf "$ROOTDIR/.npm/.cache" + rm -rf "$ROOTDIR/.npm/.tmp" + echo_err "ok" + else + rm -rf "$ROOTDIR/.npm/.cache" + rm -rf "$ROOTDIR/.npm/.tmp" + echo_err "FAILED: $FAILURES" + fi exit $FAILURES } @@ -31,8 +44,8 @@ main () { # fake functions npm () { "$NPMCLI" --binroot "$TESTDIR/bin" --root "$TESTDIR/root" "$@" \ - &>output.log \ - || fail npm "$@" + # &>output.log \ + # || fail npm "$@" rm output.log } node () { @@ -62,6 +75,13 @@ done NPMPKG="$(dirname -- "$(dirname -- "$SELF_PATH")")" NPMCLI="$NPMPKG/cli.js" TESTDIR="$NPMPKG/test/" +ROOTDIR="$TESTDIR/root" +BINDIR="$TESTDIR/bin" + +[ -d "$ROOTDIR" ] && rm -rf -- "$ROOTDIR" +[ -d "$BINDIR" ] && rm -rf -- "$BINDIR" +mkdir -p -- "$ROOTDIR" +mkdir -p -- "$BINDIR" echo_err () { echo "$@" >&2 From f547e60b6cbd1a968b71714261210c384f846f43 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sat, 3 Jul 2010 00:10:10 -0700 Subject: [PATCH 31/79] Check for installed versions in ranges. Fix #66 --- lib/install.js | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/lib/install.js b/lib/install.js index bd4efa07b61..355fa43078b 100644 --- a/lib/install.js +++ b/lib/install.js @@ -115,8 +115,25 @@ function registryInstall (pkglist, cb) { return cache.read(name, ver, Continue) } - // if not exact, then fetch the root data so that we have the - // tags and all the versions, and can know what's available. + // if a range, then check to see if we have it installed (or about to be) + // already, and if so, continue with that. + if (!tag) { + // satisfying version can come from any packages we've seen so far, + // or anything on the "to be installed" list + // this way, we prefer things that are already here, rather than adding + // unnecessarily + var satis = semver.maxSatisfying + ( Object.keys(installedPackages[name] || {}) + .concat(Object.keys(installReg[name] || {})) + , range + ) + // if there is a satisfying version already, then simply move on. + if (satis) return F(pkglist.shift()) + } + + // if not exact, and not already installed, then fetch the root data + // so that we have the tags and all the versions, and can know what's + // available. var data = npm.get(name) if (!data) { log(name, "fetch data") @@ -147,21 +164,12 @@ function registryInstall (pkglist, cb) { if (!seen[name+"@"+data.version]) pkglist.push(name+"@"+data.version) return F(pkglist.shift()) } - // now we know it's a range. get the data for this package, and then + + + // now we know it's a range, and not already satisfied. + // get the data for this package, and then // look for a matching version, and add that to the list. - // satisfying version can come from any packages we've seen so far, - // or anything on the "to be installed" list - // this way, we prefer things that are already here, rather than adding - // unnecessarily - var satis = semver.maxSatisfying - ( Object.keys(installedPackages[name] || {}) - .concat(Object.keys(installReg[name] || {})) - , range - ) - // if there is a satisfying version already, then simply move on. - if (satis) return F(pkglist.shift()) - - // new thing. fetch from registry. favor defTag version. + // favor defTag version. var data = npm.get(name) , stable = data["dist-tags"] && data["dist-tags"][defTag] if (stable && semver.satisfies(stable, range)) { From 77e2564022164baf01a32b7988d1ef7f53a9dfb9 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sat, 3 Jul 2010 00:10:51 -0700 Subject: [PATCH 32/79] Filter dependencies based on the running version of node. Fix #6 --- lib/install.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/install.js b/lib/install.js index 355fa43078b..0f2e0ef6d45 100644 --- a/lib/install.js +++ b/lib/install.js @@ -72,6 +72,8 @@ function registryInstall (pkglist, cb) { // that it's sitting in the cache function Continue (er, data) { if (er) return log.er(cb, "Error installing "+pkg)(er) + if (!data._nodeSupported) return cb(new Error( + data.name+"@"+data.version+" not compatible with node@"+process.version)) seen[data.name+"@"+data.version] = true var p = path.join(data.name, data.version) , ir = installReg @@ -172,7 +174,8 @@ function registryInstall (pkglist, cb) { // favor defTag version. var data = npm.get(name) , stable = data["dist-tags"] && data["dist-tags"][defTag] - if (stable && semver.satisfies(stable, range)) { + filterNodeVersion(data) + if (stable && semver.satisfies(stable, range) && data.versions[stable]) { log(data.versions[stable], name+"@"+defTag) stable = name + "@" + stable if (!seen[stable]) pkglist.push(stable) @@ -188,6 +191,15 @@ function registryInstall (pkglist, cb) { })(pkglist.shift()) } +function filterNodeVersion (data) { + for (var v in data.versions) { + log(data.versions[v]._nodeSupported, "nodeSupported by "+data.name+"@"+v) + if (!data.versions[v]._nodeSupported) { + delete data.versions[v] + } + } +} + function buildAll (list, cb) { if (list.length === 0) { return log("Nothing to install", "install", cb) From 9a5519e7044f09b375b7c04ad27d43b9389adcc7 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sat, 3 Jul 2010 00:16:00 -0700 Subject: [PATCH 33/79] bump version to 0.1.18 --- doc/npm.md | 8 ++- man/npm.1 | 167 +++++++++++++++++++++++++-------------------------- package.json | 2 +- 3 files changed, 90 insertions(+), 87 deletions(-) diff --git a/doc/npm.md b/doc/npm.md index 45c503ff0ba..d9e241be741 100644 --- a/doc/npm.md +++ b/doc/npm.md @@ -172,7 +172,13 @@ See for current todo list. Handle .npmignore * 0.1.17: - Bug fixing and stabilization. + Stabilization. + +* 0.1.18: + Change a few default configurations + Add test harness + Default publish, install, and link to "." if no arguments given + ## SEE ALSO diff --git a/man/npm.1 b/man/npm.1 index cecb343b4b3..5df038a6e56 100644 --- a/man/npm.1 +++ b/man/npm.1 @@ -1,32 +1,32 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "NPM" "1" "June 2010" "" "" +.TH "NPM" "1" "July 2010" "" "" . .SH "NAME" -\fBnpm\fR \-\- node package manager +\fBnpm\fR \- node package manager . .SH "SYNOPSIS" . .nf + npm [args] . .fi . .SH "DESCRIPTION" -npm is a little package manager for the Node javascript library. +npm is a little package manager for the Node javascript library\. . .P -See npm\-help(1) for more details about specific commands. +See npm\-help(1) for more details about specific commands\. . .P -npm supports a very basic argument parser. For any of the settings -in npm\-config(1), you can set them explicitly for a single command by -doing: +npm supports a very basic argument parser\. For any of the settings in npm\-config(1), you can set them explicitly for a single command by doing: . .IP "" 4 . .nf + npm \-\-key val . .fi @@ -34,86 +34,69 @@ npm \-\-key val .IP "" 0 . .P -If you are a package maintainer, please investigate the documentation at -npm\-json(1), npm\-publish(1), and npm\-tag(1) sections first. See -npm\-folders(1) section to see how you can leverage npm's functionality -for your own purposes. +If you are a package maintainer, please investigate the documentation at npm\-json(1), npm\-publish(1), and npm\-tag(1) sections first\. See npm\-folders(1) section to see how you can leverage npm\'s functionality for your own purposes\. . .SH "STATUS: beta" -The core functionality is there. You can publish, tag, and install. It -handles dependencies relatively smartly. +The core functionality is there\. You can publish, tag, and install\. It handles dependencies relatively smartly\. . .P -Please use this software. It will cut you occasionally. Let me know when -you find a rough edge, and I'll sand it down for you. +Please use this software\. It will cut you occasionally\. Let me know when you find a rough edge, and I\'ll sand it down for you\. . .P -I appreciate your sense of adventure. +I appreciate your sense of adventure\. . .SH "Principles" -Put the files where they need to be so that node can find them using the -methods it already uses. +Put the files where they need to be so that node can find them using the methods it already uses\. . .P -Be lazy, not clever. +Be lazy, not clever\. . .P -The file system is the database. +The file system is the database\. . .P -Sync with habits that are already in use. +Sync with habits that are already in use\. . .P -Packages should be maintained by their authors, not by the package manager -author. +Packages should be maintained by their authors, not by the package manager author\. . .P -Run it on node. Cuz a node package manager should be written in evented -javascript. +Run it on node\. Cuz a node package manager should be written in evented javascript\. . .SH "Contributing" -If you're interested in helping, that's awesome! Please fork this project, -implement some of the things on the todo list, or fix an issue, or even -just write or edit some documentation. You have no idea just how thankful -I'll be. +If you\'re interested in helping, that\'s awesome! Please fork this project, implement some of the things on the todo list, or fix an issue, or even just write or edit some documentation\. You have no idea just how thankful I\'ll be\. . .P -If you don't want to contribute patches, that's also cool. It's very helpful -to have people play with npm and send issues or complaints. It's stable in -what it does, so you may find it useful even if you just link in your stuff -by doing \fBnpm link .\fR to put it in the \fBNODE_PATH\fR so you can pull it in -more easily. +If you don\'t want to contribute patches, that\'s also cool\. It\'s very helpful to have people play with npm and send issues or complaints\. It\'s stable in what it does, so you may find it useful even if you just link in your stuff by doing \fBnpm link \.\fR to put it in the \fBNODE_PATH\fR so you can pull it in more easily\. . .P -If you have strong feelings about package managers, I'd love to hear your -opinions. +If you have strong feelings about package managers, I\'d love to hear your opinions\. . .P -You can usually find me in #node.js on freenode.net, or you can reach me via -i@izs.me. +You can usually find me in #node\.js on freenode\.net, or you can reach me via i@izs\.me\. . .SH "Todo" -See \fIhttp://github.com/isaacs/npm/issues\fR for current todo list. +See \fIhttp://github\.com/isaacs/npm/issues\fR for current todo list\. . .SH "Version History" . .TP -0.0.1 -Lots of sketches and false starts. Abandoned a few times. +0\.0\.1 +Lots of sketches and false starts\. Abandoned a few times\. . .TP -0.0.2 -Install worked mostly. Still promise\-based. +0\.0\.2 +Install worked mostly\. Still promise\-based\. . .TP -0.0.3 -Converted to callbacks. +0\.0\.3 +Converted to callbacks\. . .br -Mikeal Rogers wrote a registry for it. +Mikeal Rogers wrote a registry for it\. . .TP -0.0.4 +0\.0\.4 version dependencies . .br @@ -132,23 +115,23 @@ bin linking uninstallation . .TP -0.0.5 +0\.0\.5 fix a few bugs in uninstall wrt dependent packages . .br -fix relative require()for nodejs modules installed with the "bin" field. +fix relative require()for nodejs modules installed with the "bin" field\. . .br (issue #2) . .br -update to work with node 0.1.33 (aka net2) +update to work with node 0\.1\.33 (aka net2) . .br added publish and tag commands . .TP -0.0.6 +0\.0\.6 set up a public registry . .br @@ -161,13 +144,13 @@ adduser command (Mikeal Rogers) ini file stuff (Mikeal Rogers) . .br -env\-specific package.json +env\-specific package\.json . .br -added more info to npm's the package.json (bugs, contributors, etc.) +added more info to npm\'s the package\.json (bugs, contributors, etc\.) . .TP -0.0.7 +0\.0\.7 fixed a few bugs in semver . .br @@ -186,7 +169,7 @@ everything else core push to beta . .TP -0.1.0 \- 0.1.2 +0\.1\.0 \- 0\.1\.2 push to beta, and announce . .br @@ -205,7 +188,7 @@ Fixed DOA bugs Removed dependence on ronn . .TP -0.1.3 +0\.1\.3 Changed a few details with configs (fix #5) . .br @@ -215,96 +198,110 @@ Update adduser and publish to put author info in the data Use buffer api for file writes, hopefully fix #4 . .TP -0.1.4 \- 0.1.5 -Fixes for a few more bugs and fix some documentation. +0\.1\.4 \- 0\.1\.5 +Fixes for a few more bugs and fix some documentation\. . .TP -0.1.6 \- 0.1.7 +0\.1\.6 \- 0\.1\.7 Add cache functionality . .br Use couchdb attachments to host tarballs . .br -Handle odd require.paths more appropriately +Handle odd require\.paths more appropriately . .br -Don't break on install if the man path is missing +Don\'t break on install if the man path is missing . .br Support publishing or installing a folder or local tarball . .TP -0.1.8 +0\.1\.8 Bugfixes . .br Add start, stop, restart, and test commands . .TP -0.1.9 +0\.1\.9 npm list enhancements . .br fix the install bug . .TP -0.1.10 +0\.1\.10 More errors found by Ryan Dahl and Kris Zyp . .br Better uninstall and list behavior . .br -Docs for new developers. +Docs for new developers\. . .br -Better tracking of ownership on the registry. +Better tracking of ownership on the registry\. . .TP -0.1.11 - Martyn Smith found a whole lot of bugs. +0\.1\.11 +Martyn Smith found a whole lot of bugs\. . .br - Make publish not die when the tarball is big. +Make publish not die when the tarball is big\. . .br - "make uninstall" support +"make uninstall" support . .TP -0.1.12 \- 0.1.13 - Fix the downloading bug that was breaking the tarballs +0\.1\.12 \- 0\.1\.13 +Fix the downloading bug that was breaking the tarballs . .br - Update some docs +Update some docs . .TP -0.1.14 \- 0.1.16 - Fix to stay in sync with node changes +0\.1\.14 \- 0\.1\.16 +Fix to stay in sync with node changes . .br - Put a special tag on link installs +Put a special tag on link installs . .br - Modify semver comparison slightly +Modify semver comparison slightly . .br - add unpublish command +add unpublish command . .br - Use the "drain" event properly for uploads +Use the "drain" event properly for uploads . .br - Handle thrown errors +Handle thrown errors . .br - Handle .npmignore +Handle \.npmignore . .TP -0.1.17 -Bug fixing and stabilization. +0\.1\.17 +Stabilization\. +. +.TP +0\.1\.18 +Change a few default configurations +. +.br +Add test harness +. +.br +Default publish, install, and link to "\." if no arguments given +. +.br + . .SH "SEE ALSO" npm\-help(1) . .br + diff --git a/package.json b/package.json index ef8970d5f27..f352de2b5d1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name" : "npm" , "description" : "A package manager for node" -, "version" : "0.1.17" +, "version" : "0.1.18" , "author" : "Isaac Z. Schlueter " , "contributors" : [ "Steve Steiner " From 90c9ec8ef92b7fc0c173515ebe1afccd3d19d665 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sat, 3 Jul 2010 00:18:16 -0700 Subject: [PATCH 34/79] Make test (quietly) --- Makefile | 5 ++++- test/run.sh | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index e123d29ce95..1c5ab3cb6b5 100644 --- a/Makefile +++ b/Makefile @@ -26,4 +26,7 @@ doc: man $(docs) man/%.1: doc/%.md ronn --roff --pipe $< > $@ -.PHONY: install install-stable link doc clean uninstall +test: + ./test/run.sh + +.PHONY: install install-stable link doc clean uninstall test diff --git a/test/run.sh b/test/run.sh index 06c49468e9e..d0e4823e757 100755 --- a/test/run.sh +++ b/test/run.sh @@ -44,8 +44,8 @@ main () { # fake functions npm () { "$NPMCLI" --binroot "$TESTDIR/bin" --root "$TESTDIR/root" "$@" \ - # &>output.log \ - # || fail npm "$@" + &>output.log \ + || fail npm "$@" rm output.log } node () { From f97b8136ebf6fe88d8e2883bc7bdb7800dda3cd2 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sat, 3 Jul 2010 01:07:26 -0700 Subject: [PATCH 35/79] s/addListener/on/g --- cli.js | 2 +- lib/utils/exec.js | 6 +++--- lib/utils/fetch.js | 8 ++++---- lib/utils/registry/request.js | 8 ++++---- npm.js | 2 +- package.json | 4 ++-- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/cli.js b/cli.js index a5ed1d4d1d9..87901762049 100755 --- a/cli.js +++ b/cli.js @@ -50,7 +50,7 @@ if (printVersion) { if (vindex !== -1) arglist.splice(vindex, 1) } else log(npm.version, "version") -process.addListener("uncaughtException", errorHandler) +process.on("uncaughtException", errorHandler) if (!command) { if (!printVersion) { // npm.commands.help([arglist.join(" ")]) diff --git a/lib/utils/exec.js b/lib/utils/exec.js index e963ddcdfb2..d4bb9ac2f10 100644 --- a/lib/utils/exec.js +++ b/lib/utils/exec.js @@ -17,17 +17,17 @@ module.exports = function exec (cmd, args, env, pipe, cb) { ) , stdout = "" , stderr = "" - cp.stdout && cp.stdout.addListener("data", function (chunk) { + cp.stdout && cp.stdout.on("data", function (chunk) { if (chunk) { stdout += chunk } }); - cp.stdout && cp.stdout.addListener("data", function (chunk) { + cp.stdout && cp.stdout.on("data", function (chunk) { if (chunk) { stderr += chunk } }); - cp.addListener("exit", function (code) { + cp.on("exit", function (code) { if (code) cb(new Error("`"+cmd+"` failed with "+code)) else cb(null, code, stdout, stderr) }); diff --git a/lib/utils/fetch.js b/lib/utils/fetch.js index 3193fd25273..c2b8a42abb7 100644 --- a/lib/utils/fetch.js +++ b/lib/utils/fetch.js @@ -41,7 +41,7 @@ function fetchAndWrite (remote, fd, headers, maxRedirects, redirects, cb) { , (remote.pathname||"/")+(remote.search||"")+(remote.hash||"") , headers ) - .addListener("response", function (response) { + .on("response", function (response) { // handle redirects. var loc = get(response.headers, "location") if (Math.floor(response.statusCode / 100) === 3 @@ -66,7 +66,7 @@ function fetchAndWrite (remote, fd, headers, maxRedirects, redirects, cb) { , pct = 0 , lastPct = 0 log(len || "unknown", "content-length") - response.addListener("data", function (chunk) { + response.on("data", function (chunk) { // write the chunk... written += chunk.length if (len) { @@ -82,8 +82,8 @@ function fetchAndWrite (remote, fd, headers, maxRedirects, redirects, cb) { return cb(er) } }) - response.addListener("error", cb) - response.addListener("end", function () { + response.on("error", cb) + response.on("end", function () { log("finished", "fetch") log(written, "bytes") fs.close(fd, cb) diff --git a/lib/utils/registry/request.js b/lib/utils/registry/request.js index 40eb63554ee..5c0aa46651a 100644 --- a/lib/utils/registry/request.js +++ b/lib/utils/registry/request.js @@ -55,12 +55,12 @@ function request (method, where, what, cb) { var client = http.createClient(u.port || (https ? 443 : 80), u.hostname, https) , request = client.request(method, u.pathname, headers) - request.addListener("response", function (response) { + request.on("response", function (response) { // if (response.statusCode !== 200) return cb(new Error( // "Status code " + response.statusCode + " from PUT "+where)) var data = "" - response.addListener("data", function (chunk) { data += chunk }) - response.addListener("end", function () { + response.on("data", function (chunk) { data += chunk }) + response.on("end", function () { var parsed try { parsed = JSON.parse(data) @@ -93,7 +93,7 @@ function request (method, where, what, cb) { return ( request.write(bytesRead === b.length ? b : b.slice(0, bytesRead)) ) ? W() - : request.addListener("drain", function DRAIN () { + : request.on("drain", function DRAIN () { request.removeListener("drain", DRAIN) W() }) diff --git a/npm.js b/npm.js index a90e2b90b4b..0d32fef2f63 100755 --- a/npm.js +++ b/npm.js @@ -90,4 +90,4 @@ Object.defineProperty(npm, "tmp", , enumerable:true }) -process.addListener("exit", function () { ini.save() }) +process.on("exit", function () { ini.save() }) diff --git a/package.json b/package.json index f352de2b5d1..ec854a69638 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name" : "npm" , "description" : "A package manager for node" -, "version" : "0.1.18" +, "version" : "0.1.18-1" , "author" : "Isaac Z. Schlueter " , "contributors" : [ "Steve Steiner " @@ -23,7 +23,7 @@ , "directories" : { "lib" : "./lib/" } , "main" : "./npm" , "bin" : { "npm" : "./cli.js" } -, "engines" : { "node" : ">=0.1.99" } +, "engines" : { "node" : ">=0.1.100" } , "scripts" : { "activate" : "node scripts/install-docs.js" , "deactivate" : "node scripts/install-docs.js" From 7b04198d3531545e44e7ca80206ab1c1db2a3506 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 13:02:38 -0700 Subject: [PATCH 36/79] Add temporary kludge for EventEmitter#on --- npm.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/npm.js b/npm.js index 0d32fef2f63..6c87517d883 100755 --- a/npm.js +++ b/npm.js @@ -1,4 +1,9 @@ +// kludge until this is normal. +if (!process.EventEmitter.prototype.on) { + process.EventEmitter.prototype.on = process.EventEmitter.prototype.addListener +} + var npm = exports , set = require("./lib/utils/set") , get = require("./lib/utils/get") From a074da8b71a74e7d71a6d578869cf9b34d9cef7a Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 13:05:29 -0700 Subject: [PATCH 37/79] add test script --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index ec854a69638..423f9234fd4 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ , "scripts" : { "activate" : "node scripts/install-docs.js" , "deactivate" : "node scripts/install-docs.js" + , "test" : "make test" } , "licenses" : [ { "type" : "MIT" From 9e1e719a598cdfbe4a7ca4c3663443f6a4f8ae81 Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 13:27:59 -0700 Subject: [PATCH 38/79] A bug in the adduser doc. Fix #80 --- doc/adduser.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/adduser.md b/doc/adduser.md index 5998b2ffec6..be160478685 100644 --- a/doc/adduser.md +++ b/doc/adduser.md @@ -19,7 +19,7 @@ record from the registry so that you can re-add it. If you break your `.npmrc` file, but you remember your password, you can put your user auth back by using the `base64` program like so: - npm config set auth $( echo user:pass | base64 ) + npm config set auth $( echo -n user:pass | base64 ) Install base64 using whichever method you normally use to put programs on your computer. (apt-get, homebrew, macports, yum, or just download the From 572626fafb08fb6429f4cbfddaa16215f87b77dc Mon Sep 17 00:00:00 2001 From: isaacs Date: Sun, 4 Jul 2010 13:29:03 -0700 Subject: [PATCH 39/79] Update all man pages using new version of ronn --- lib/utils/lifecycle.js | 9 ++-- man/activate.1 | 9 ++-- man/adduser.1 | 30 +++++------ man/build.1 | 17 +++--- man/cache.1 | 42 +++++++-------- man/coding-style.1 | 86 ++++++++++++----------------- man/config.1 | 71 +++++++++++------------- man/deactivate.1 | 10 ++-- man/developers.1 | 119 ++++++++++++++++++----------------------- man/folders.1 | 31 +++++------ man/help.1 | 13 ++--- man/install.1 | 62 ++++++++++----------- man/link.1 | 14 +++-- man/ln.1 | 14 +++-- man/publish.1 | 17 +++--- man/registry.1 | 24 ++++----- man/restart.1 | 14 ++--- man/rm.1 | 13 +++-- man/scripts.1 | 76 ++++++++++++-------------- man/start.1 | 11 ++-- man/stop.1 | 11 ++-- man/tag.1 | 16 +++--- man/test.1 | 11 ++-- man/uninstall.1 | 13 +++-- man/unpublish.1 | 10 ++-- 25 files changed, 328 insertions(+), 415 deletions(-) diff --git a/lib/utils/lifecycle.js b/lib/utils/lifecycle.js index a705d5ca9c0..ff660d4d02c 100644 --- a/lib/utils/lifecycle.js +++ b/lib/utils/lifecycle.js @@ -29,13 +29,10 @@ function lifecycle (pkg, stage, cb) { // NOTE: The env vars won't work until node supports env hashes for child procs var env = makeEnv(pkg) env.npm_lifecycle_event = stage + env.npm_lifecycle_script = pkg.scripts[stage] - // support stuff like "make install" or "node test/all.js" - var args = pkg.scripts[stage].split(/\s/) - , script = args.shift() - exec(script, args, env, function (er, ok) { - cb(er, ok) - }) + exec("sh", ["-c", env.npm_lifecycle_script], env, log.er(cb, + "Failed to exec "+stage+" script")) } function makeEnv (data, prefix, env) { diff --git a/man/activate.1 b/man/activate.1 index b4f41881274..f863d64442e 100644 --- a/man/activate.1 +++ b/man/activate.1 @@ -1,20 +1,21 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "ACTIVATE" "1" "May 2010" "" "" . .SH "NAME" -\fBactivate\fR \-\- Activate an installed version of a package +\fBactivate\fR \- Activate an installed version of a package . .SH "SYNOPSIS" . .nf + npm activate . .fi . .SH "DESCRIPTION" -This "activates" a specific version of a package, so that you can just do\fBrequire("foo")\fR without having to specify the version. +This "activates" a specific version of a package, so that you can just do \fBrequire("foo")\fR without having to specify the version\. . .SH "SEE ALSO" npm\-deactivate(1) diff --git a/man/adduser.1 b/man/adduser.1 index ee98d83629a..6d045c4f08a 100644 --- a/man/adduser.1 +++ b/man/adduser.1 @@ -1,46 +1,40 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "NPM\-ADDUSER" "1" "May 2010" "" "" +.TH "NPM\-ADDUSER" "1" "July 2010" "" "" . .SH "NAME" -\fBnpm\-adduser\fR \-\- Add a registry user account +\fBnpm\-adduser\fR \- Add a registry user account . .SH "SYNOPSIS" . .nf + npm adduser . .fi . .SH "DESCRIPTION" -Create a user named \fB\fR in the npm registry, and save the -credentials to the \fB.npmrc\fR file. Note that this leaves the password -in your \fB.bash_history\fR, and it is currently stored in the clear in -the config file. So, don't use a password you care too much about. +Create a user named \fB\fR in the npm registry, and save the credentials to the \fB\.npmrc\fR file\. Note that this leaves the password in your \fB\.bash_history\fR, and it is currently stored in the clear in the config file\. So, don\'t use a password you care too much about\. . .P -For now, if you somehow break your \fB.npmrc\fR file, and have forgotten your -password, you're boned. Send an email to i@izs.me and I'll delete the -record from the registry so that you can re\-add it. +For now, if you somehow break your \fB\.npmrc\fR file, and have forgotten your password, you\'re boned\. Send an email to i@izs\.me and I\'ll delete the record from the registry so that you can re\-add it\. . .P -If you break your \fB.npmrc\fR file, but you remember your password, you -can put your user auth back by using the \fBbase64\fR program like so: +If you break your \fB\.npmrc\fR file, but you remember your password, you can put your user auth back by using the \fBbase64\fR program like so: . .IP "" 4 . .nf -npm config set auth $( echo user:pass | base64 ) + +npm config set auth $( echo \-n user:pass | base64 ) . .fi . .IP "" 0 . .P -Install base64 using whichever method you normally use to put programs on -your computer. (apt\-get, homebrew, macports, yum, or just download the -code and build it yourself.) +Install base64 using whichever method you normally use to put programs on your computer\. (apt\-get, homebrew, macports, yum, or just download the code and build it yourself\.) . .P -Or bug me to to remove your account, and then recreate it. +Or bug me to to remove your account, and then recreate it\. diff --git a/man/build.1 b/man/build.1 index 47bd7754226..cc8e1df5b51 100644 --- a/man/build.1 +++ b/man/build.1 @@ -1,30 +1,28 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-BUILD" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-build\fR \-\- Build a package +\fBnpm\-build\fR \- Build a package . .SH "SYNOPSIS" . .nf + npm build . .fi . .TP \fB\fR -A folder containing a \fBpackage.json\fR file in its root. +A folder containing a \fBpackage\.json\fR file in its root\. . .SH "DESCRIPTION" -This command should almost never need to be run directly. It is an abstraction -of the functionality shared by both npm\-install(1) and npm\-link(1). +This command should almost never need to be run directly\. It is an abstraction of the functionality shared by both npm\-install(1) and npm\-link(1)\. . .P -This command creates the various interwoven links that ensure a package's contents -are available in the root appropriately, and that its dependencies are linked -appropriately. +This command creates the various interwoven links that ensure a package\'s contents are available in the root appropriately, and that its dependencies are linked appropriately\. . .SH "SEE ALSO" . @@ -41,3 +39,4 @@ npm\-scripts(1) npm\-json(1) . .IP "" 0 + diff --git a/man/cache.1 b/man/cache.1 index 8623eb07287..5f2c49fa97f 100644 --- a/man/cache.1 +++ b/man/cache.1 @@ -1,19 +1,22 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-CACHE" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-cache\fR \-\- install a package +\fBnpm\-cache\fR \- install a package . .SH "SYNOPSIS" . .nf + npm cache add npm cache add npm cache add npm cache add + npm cache ls [] + npm cache clean [ []] . .fi @@ -22,45 +25,36 @@ npm cache clean [ []] . .TP add -Access the local cache of package data. This command is primarily -intended to be used internally by npm, but it can provide a way to -add data to the local installation cache explicitly. +Access the local cache of package data\. This command is primarily intended to be used internally by npm, but it can provide a way to add data to the local installation cache explicitly\. . .IP -If two arguments are provided, then npm will fetch the data from the -registry. This allows npm to use the filesystem as a local proxy to -the registry. +If two arguments are provided, then npm will fetch the data from the registry\. This allows npm to use the filesystem as a local proxy to the registry\. . .TP ls -Show the data in the cache. Additional arguments are joined together -in a path\-like fashion, but something like \fBnpm cache ls npm/0.1.5\fR is -acceptable as well. +Show the data in the cache\. Additional arguments are joined together in a path\-like fashion, but something like \fBnpm cache ls npm/0\.1\.5\fR is acceptable as well\. . .TP clean -Delete data out of the cache for a specific package and version, all -versions of a package, or all data for all packages, depending on the -arguments supplied. +Delete data out of the cache for a specific package and version, all versions of a package, or all data for all packages, depending on the arguments supplied\. . .IP -This can be used if invalid data gets into the cache. +This can be used if invalid data gets into the cache\. . .SH "DETAILS" -npm stores data for a version of a package in\fB$ROOT/.npm/.cache//\fR. Three pieces of data are stored -in this folder: +npm stores data for a version of a package in \fB$ROOT/\.npm/\.cache//\fR\. Three pieces of data are stored in this folder: . .TP package/ -A folder containing the package contents as they appear in the tarball. +A folder containing the package contents as they appear in the tarball\. . .TP -package.json -The package.json file, as npm sees it, with overlays applied and a _id attribute. +package\.json +The package\.json file, as npm sees it, with overlays applied and a _id attribute\. . .TP -package.tgz -The tarball for that version. +package\.tgz +The tarball for that version\. . .SH "HISTORY" -Added in npm version 0.1.6 +Added in npm version 0\.1\.6 diff --git a/man/coding-style.1 b/man/coding-style.1 index a2116b24834..19a72dda921 100644 --- a/man/coding-style.1 +++ b/man/coding-style.1 @@ -1,34 +1,28 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-CODING\-STYLE" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-coding\-style\fR \-\- npm's "funny" coding style +\fBnpm\-coding\-style\fR \- npm\'s "funny" coding style . .SH "DESCRIPTION" -npm's coding style is a bit unconventional. It is not different for -difference's sake, but rather a carefully crafted style that is -designed to reduce visual clutter and make bugs more apparent. +npm\'s coding style is a bit unconventional\. It is not different for difference\'s sake, but rather a carefully crafted style that is designed to reduce visual clutter and make bugs more apparent\. . .P -If you want to contribute to npm (which is very encouraged), you should -make your code conform to npm's style. +If you want to contribute to npm (which is very encouraged), you should make your code conform to npm\'s style\. . .SH "Line Length" -Keep lines shorter than 80 characters. It's better for lines to be -too short than to be too long. Break up long lists, objects, and other -statements onto multiple lines. +Keep lines shorter than 80 characters\. It\'s better for lines to be too short than to be too long\. Break up long lists, objects, and other statements onto multiple lines\. . .SH "Indentation" -Two\-spaces. Tabs are better, but they look like hell in web browsers -(and on github), and node uses 2 spaces, so that's that. +Two\-spaces\. Tabs are better, but they look like hell in web browsers (and on github), and node uses 2 spaces, so that\'s that\. . .P -Configure your editor appropriately. +Configure your editor appropriately\. . .SH "Curly braces" -Curly braces belong on the same line as the thing that necessitates them. +Curly braces belong on the same line as the thing that necessitates them\. . .P Bad: @@ -36,6 +30,7 @@ Bad: .IP "" 4 . .nf + function () { . @@ -49,6 +44,7 @@ Good: .IP "" 4 . .nf + function () { . .fi @@ -56,8 +52,7 @@ function () { .IP "" 0 . .P -If a block needs to wrap to the next line, use a curly brace. Don't -use it if it doesn't. +If a block needs to wrap to the next line, use a curly brace\. Don\'t use it if it doesn\'t\. . .P Bad: @@ -65,6 +60,7 @@ Bad: .IP "" 4 . .nf + if (foo) { bar() } while (foo) bar() @@ -79,6 +75,7 @@ Good: .IP "" 4 . .nf + if (foo) bar() while (foo) { bar() @@ -89,18 +86,16 @@ while (foo) { .IP "" 0 . .SH "Semicolons" -Don't use them except in three situations: +Don\'t use them except in three situations: . .IP "\(bu" 4 -for (;;) loops. They're actually required. +for (;;) loops\. They\'re actually required\. . .IP "\(bu" 4 case "foo": doSomething(); break . .IP "\(bu" 4 -In front of a leading ( or [ at the start of the line. -This prevents the expression from being interpreted -as a function call or property access, respectively. +In front of a leading ( or [ at the start of the line\. This prevents the expression from being interpreted as a function call or property access, respectively\. . .IP "" 0 . @@ -110,8 +105,9 @@ Some examples of good semicolon usage: .IP "" 4 . .nf -;(x || y).doSomething() -;[a, b, c].forEach(doSomething) + +;(x || y)\.doSomething() +;[a, b, c]\.forEach(doSomething) for (var i = 0; i < 10; i ++) { switch (state) { case "begin": start(); continue @@ -126,14 +122,12 @@ for (var i = 0; i < 10; i ++) { .IP "" 0 . .SH "Comma First" -If there is a list of things separated by commas, and it wraps -across multiple lines, put the comma at the start of the next -line, directly below the token that starts the list. Put the -final token in the list on a line by itself. For example: +If there is a list of things separated by commas, and it wraps across multiple lines, put the comma at the start of the next line, directly below the token that starts the list\. Put the final token in the list on a line by itself\. For example: . .IP "" 4 . .nf + var magicWords = [ "abracadabra" , "gesundheit" , "ventrilo" @@ -151,50 +145,41 @@ var magicWords = [ "abracadabra" .IP "" 0 . .SH "Whitespace" -Put a single space in front of ( for anything other than a function call. -Also use a single space wherever it makes things more readable. +Put a single space in front of ( for anything other than a function call\. Also use a single space wherever it makes things more readable\. . .P -Don't leave trailing whitespace at the end of lines. Don't indent empty -lines. Don't use more spaces than are helpful. +Don\'t leave trailing whitespace at the end of lines\. Don\'t indent empty lines\. Don\'t use more spaces than are helpful\. . .SH "Functions" -Use named functions. They make stack traces a lot easier to read. +Use named functions\. They make stack traces a lot easier to read\. . .SH "Callbacks, Sync/async Style" -Use the asynchronous/non\-blocking versions of things as much as possible. -It might make more sense for npm to use the synchronous fs APIs, but this -way, the fs and http and child process stuff all uses the same callback\-passing -methodology. +Use the asynchronous/non\-blocking versions of things as much as possible\. It might make more sense for npm to use the synchronous fs APIs, but this way, the fs and http and child process stuff all uses the same callback\-passing methodology\. . .P -The callback should always be the last argument in the list. Its first -argument is the Error or null. +The callback should always be the last argument in the list\. Its first argument is the Error or null\. . .P -Be very careful never to ever ever throw anything. It's worse than useless. -Just send the error message back as the first argument to the callback. +Be very careful never to ever ever throw anything\. It\'s worse than useless\. Just send the error message back as the first argument to the callback\. . .SH "Errors" -Always create a new Error object with your message. Don't just return a -string message to the callback. Stack traces are handy. +Always create a new Error object with your message\. Don\'t just return a string message to the callback\. Stack traces are handy\. . .P -Use the \fBrequire("./utils/log").er\fR function. It takes a callback and an -error message, and returns an object that will report the message in the -event of a failure. It's quite handy. +Use the \fBrequire("\./utils/log")\.er\fR function\. It takes a callback and an error message, and returns an object that will report the message in the event of a failure\. It\'s quite handy\. . .IP "" 4 . .nf + function myThing (args, cb) { getData(args, function (er, data) { - if (er) return log.er(cb, "Couldn't get data")(er) + if (er) return log\.er(cb, "Couldn\'t get data")(er) doSomethingElse(data, cb) }) } function justHasToWork (cb) { - doSomething(log.er(cb, "the doSomething failed.")) + doSomething(log\.er(cb, "the doSomething failed\.")) } . .fi @@ -202,7 +187,4 @@ function justHasToWork (cb) { .IP "" 0 . .SH "Logging" -Please clean up logs when they are no longer helpful. In particular, -logging the same object over and over again is not helpful. Logs should -report what's happening so that it's easier to track down where a fault -occurs. +Please clean up logs when they are no longer helpful\. In particular, logging the same object over and over again is not helpful\. Logs should report what\'s happening so that it\'s easier to track down where a fault occurs\. diff --git a/man/config.1 b/man/config.1 index eb1ef37c822..e0fc6df4de5 100644 --- a/man/config.1 +++ b/man/config.1 @@ -1,14 +1,15 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-CONFIG" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-config\fR \-\- Manage the npm configuration file +\fBnpm\-config\fR \- Manage the npm configuration file . .SH "SYNOPSIS" . .nf + npm config set npm config get npm config delete @@ -17,14 +18,10 @@ npm config list .fi . .SH "DESCRIPTION" -The config command is a way to interact with the \fB.npmrc\fR file. This file is a -JSON encoded list of values that npm is concerned with. The first time you run -npm, it will create a conf file filled with default values. +The config command is a way to interact with the \fB\.npmrc\fR file\. This file is a JSON encoded list of values that npm is concerned with\. The first time you run npm, it will create a conf file filled with default values\. . .P -On exit, the current state of the config is always saved, so that any changes -will be recorded. You may safely modify the file (as long as it's still -parseable JSON), but it is safer to use the npm config commands. +On exit, the current state of the config is always saved, so that any changes will be recorded\. You may safely modify the file (as long as it\'s still parseable JSON), but it is safer to use the npm config commands\. . .SH "Sub\-commands" Config supports the following sub\-commands: @@ -32,57 +29,57 @@ Config supports the following sub\-commands: .SS "set" . .nf + npm config set key value . .fi . .P -Sets the config key to the value. +Sets the config key to the value\. . .SS "get" . .nf + npm config get key . .fi . .P -Echo the config value to stdout. (NOTE: All the other npm logging is done to -stderr, so pipes should work properly, and you can do \fBnpm get key 2>/dev/null\fR -to print out JUST the config value.) +Echo the config value to stdout\. (NOTE: All the other npm logging is done to stderr, so pipes should work properly, and you can do \fBnpm get key 2>/dev/null\fR to print out JUST the config value\.) . .SS "list" . .nf + npm config list . .fi . .P -Show all the config settings. +Show all the config settings\. . .P -\fBFIXME\fR: Prints to stderr, but should really be stdout, since the log is what -you're after. +\fBFIXME\fR: Prints to stderr, but should really be stdout, since the log is what you\'re after\. . .SS "delete" . .nf + npm config delete key . .fi . .P -Deletes the key from the configuration file. +Deletes the key from the configuration file\. . .SH "Config Settings" -npm supports a very basic argument parser. For any of the settings -in npm\-config(1), you can set them explicitly for a single command by -doing: +npm supports a very basic argument parser\. For any of the settings in npm\-config(1), you can set them explicitly for a single command by doing: . .IP "" 4 . .nf + npm \-\-key val . .fi @@ -90,36 +87,34 @@ npm \-\-key val .IP "" 0 . .P -Configurations defined on the command line are not saved to the .npmrc file. +Configurations defined on the command line are not saved to the \.npmrc file\. . .SS "auto\-activate" Default: true . .P -Automatically activate a package after installation, if there is not an active -version already. Set to "always" to always activate when installing. +Automatically activate a package after installation, if there is not an active version already\. Set to "always" to always activate when installing\. . .SS "root" -Default: ~/.node_libraries in single\-user mode, or \fB$INSTALL_PREFIX/lib/node\fR -in sudo\-mode. +Default: ~/\.node_libraries in single\-user mode, or \fB$INSTALL_PREFIX/lib/node\fR in sudo\-mode\. . .P -The root folder where packages are installed and npm keeps its data. +The root folder where packages are installed and npm keeps its data\. . .SS "binroot" Default: \fB$INSTALL_PREFIX/bin\fR . .P -The folder where executable programs are installed. +The folder where executable programs are installed\. . .SS "registry" -Default: https://registry.npmjs.org/ +Default: https://registry\.npmjs\.org/ . .P -The base URL of the npm package registry. +The base URL of the npm package registry\. . .SS "auth" -A base\-64 encoded "user:pass" pair. This is created by npm\-adduser(1). +A base\-64 encoded "user:pass" pair\. This is created by npm\-adduser(1)\. . .P If your config file is ever corrupted, you can set this manually by doing: @@ -127,30 +122,26 @@ If your config file is ever corrupted, you can set this manually by doing: .IP "" 4 . .nf + npm config set auth $(echo \-n "my\-user\-name:my\-password" | base64) npm config set username my\-user\-name - npm config set email me@email.com + npm config set email me@email\.com . .fi . .IP "" 0 . .P -\fBNOTE\fR: This is not encoded in any kind of security sense. It's just base\-64 -encoded strictly so that it can be sent along the wire with HTTP Basic -authentication. +\fBNOTE\fR: This is not encoded in any kind of security sense\. It\'s just base\-64 encoded strictly so that it can be sent along the wire with HTTP Basic authentication\. . .SS "authCrypt" -If crypto.Cipher is available, and you have some private keys in \fB$HOME/.ssh\fR, -then npm will encrypt your "auth" config before saving to the .npmrc file, -and will decrypt the "authCrypt" config when it reads the .npmrc file. +If crypto\.Cipher is available, and you have some private keys in \fB$HOME/\.ssh\fR, then npm will encrypt your "auth" config before saving to the \.npmrc file, and will decrypt the "authCrypt" config when it reads the \.npmrc file\. . .SS "tag" Default: stable . .P -If you ask npm to install a package and don't tell it a specific version, then -it will install the specified tag. +If you ask npm to install a package and don\'t tell it a specific version, then it will install the specified tag\. . .P -Note: this has no effect on the npm\-tag(1) command. +Note: this has no effect on the npm\-tag(1) command\. diff --git a/man/deactivate.1 b/man/deactivate.1 index 2ca478d63d6..5a8360c54e3 100644 --- a/man/deactivate.1 +++ b/man/deactivate.1 @@ -1,21 +1,21 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-DEACTIVATE" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-deactivate\fR \-\- Deactivate the active version of a package +\fBnpm\-deactivate\fR \- Deactivate the active version of a package . .SH "SYNOPSIS" . .nf + npm deactivate . .fi . .SH "DESCRIPTION" -If there's an active version of the package, this will unlink it from that -preferential position. +If there\'s an active version of the package, this will unlink it from that preferential position\. . .SH "SEE ALSO" npm\-activate(1) diff --git a/man/developers.1 b/man/developers.1 index 198792142a6..cc903fa3351 100644 --- a/man/developers.1 +++ b/man/developers.1 @@ -1,84 +1,67 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-DEVELOPERS" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-developers\fR \-\- Developer Guide +\fBnpm\-developers\fR \- Developer Guide . .SH "DESCRIPTION" -So, you've decided to use npm to publish your project. +So, you\'ve decided to use npm to publish your project\. . .P Fantastic! . .P -There are a few things that you need to do above the simple steps -that your users will do to install your program. +There are a few things that you need to do above the simple steps that your users will do to install your program\. . .SH "About These Documents" -These are man pages. If you install npm, you should be able to -then do \fBman npm\-thing\fR to get the documentation on a particular -topic. +These are man pages\. If you install npm, you should be able to then do \fBman npm\-thing\fR to get the documentation on a particular topic\. . .P -Any time you see "see npm\-whatever(1)", you can do \fBman npm\-whatever\fR -to get at the docs. +Any time you see "see npm\-whatever(1)", you can do \fBman npm\-whatever\fR to get at the docs\. . -.SH "The package.json File" -You need to have a \fBpackage.json\fR file in the root of your project. +.SH "The package\.json File" +You need to have a \fBpackage\.json\fR file in the root of your project\. . .P -See npm\-json(1) for details about what goes in that file. At the very -least, you need: +See npm\-json(1) for details about what goes in that file\. At the very least, you need: . .TP name -This should be a string that identifies your project. Please do not -use the name to specify that it runs on node, or is in JavaScript. -You can use the "engines" field to explicitly state the versions of -node (or whatever else) that your program requires, and it's pretty -well assumed that it's javascript. +This should be a string that identifies your project\. Please do not use the name to specify that it runs on node, or is in JavaScript\. You can use the "engines" field to explicitly state the versions of node (or whatever else) that your program requires, and it\'s pretty well assumed that it\'s javascript\. . .IP -It does not necessarily need to match your github repository name. +It does not necessarily need to match your github repository name\. . .P - So, \fBnode\-foo\fR and \fBbar\-js\fR are bad names. \fBfoo\fR or \fBbar\fR are better. +So, \fBnode\-foo\fR and \fBbar\-js\fR are bad names\. \fBfoo\fR or \fBbar\fR are better\. . .TP version -A semver\-compatible version. +A semver\-compatible version\. . .TP engines -Specify the versions of node (or whatever else) that your program -runs on. The node API changes a lot, and there may be bugs or new -functionality that you depend on. Be explicit. +Specify the versions of node (or whatever else) that your program runs on\. The node API changes a lot, and there may be bugs or new functionality that you depend on\. Be explicit\. . .TP author -Take some credit. +Take some credit\. . .TP scripts -If you have a special compilation or installation script, then you -should put it in the \fBscripts\fR hash. See npm\-scripts(1). +If you have a special compilation or installation script, then you should put it in the \fBscripts\fR hash\. See npm\-scripts(1)\. . .TP main -If you have a single module that serves as the entry point to your -program (like what the "foo" package gives you at require("foo")), -then you need to specify that in the "main" field. +If you have a single module that serves as the entry point to your program (like what the "foo" package gives you at require("foo")), then you need to specify that in the "main" field\. . .SH "Make Sure Your Package Installs and Works" -\fBThis is important.\fR +\fBThis is important\.\fR . .P -If you can not install it locally, you'll have -problems trying to publish it. Or, worse yet, you'll be able to -publish it, but you'll be publishing a broken or pointless package. -So don't do that. +If you can not install it locally, you\'ll have problems trying to publish it\. Or, worse yet, you\'ll be able to publish it, but you\'ll be publishing a broken or pointless package\. So don\'t do that\. . .P In the root of your package, do this: @@ -86,53 +69,55 @@ In the root of your package, do this: .IP "" 4 . .nf -npm install . + +npm install \. . .fi . .IP "" 0 . .P -That'll show you that it's working. If you'd rather just create a symlink -package that points to your working directory, then do this: +That\'ll show you that it\'s working\. If you\'d rather just create a symlink package that points to your working directory, then do this: . .IP "" 4 . .nf -npm link . + +npm link \. . .fi . .IP "" 0 . .P -Use \fBnpm ls @installed\fR to see if it's there. +Use \fBnpm ls @installed\fR to see if it\'s there\. . .P -Then go into the node\-repl, and try using require() to bring in your module's -main and libs things. Assuming that you have a package like this: +Then go into the node\-repl, and try using require() to bring in your module\'s main and libs things\. Assuming that you have a package like this: . .IP "" 4 . .nf + node_foo/ lib/ - foo.js - bar.js + foo\.js + bar\.js . .fi . .IP "" 0 . .P -and you define your package.json with this in it: +and you define your package\.json with this in it: . .IP "" 4 . .nf + { "name" : "foo" -, "directories" : { "lib" : "./lib" } -, "main" : "./lib/foo" +, "directories" : { "lib" : "\./lib" } +, "main" : "\./lib/foo" } . .fi @@ -140,17 +125,15 @@ and you define your package.json with this in it: .IP "" 0 . .P -then you'd want to make sure that require("foo") and require("foo/bar") both -work and bring in the appropriate modules. +then you\'d want to make sure that require("foo") and require("foo/bar") both work and bring in the appropriate modules\. . .SH "Compile Node with OpenSSL" -npm will stubbornly refuse to expose your password in the clear. That -means that you'll have to install whatever package provides openssl.h -on your system. When you \fB./configure\fR node, make sure that it says: +npm will stubbornly refuse to expose your password in the clear\. That means that you\'ll have to install whatever package provides openssl\.h on your system\. When you \fB\./configure\fR node, make sure that it says: . .IP "" 4 . .nf + Checking for openssl : yes . .fi @@ -158,24 +141,25 @@ Checking for openssl : yes .IP "" 0 . .SH "Create a User Account" -Create a user with the adduser command. It works like this: +Create a user with the adduser command\. It works like this: . .IP "" 4 . .nf -npm adduser bob password bob@email.com + +npm adduser bob password bob@email\.com . .fi . .IP "" 0 . .P -This is documented better in npm\-adduser(1). So do this to get the -details: +This is documented better in npm\-adduser(1)\. So do this to get the details: . .IP "" 4 . .nf + man npm\-adduser . .fi @@ -183,11 +167,12 @@ man npm\-adduser .IP "" 0 . .SH "Publish your package" -This part's easy. +This part\'s easy\. . .IP "" 4 . .nf + npm publish /path/to/my\-package . .fi @@ -195,28 +180,26 @@ npm publish /path/to/my\-package .IP "" 0 . .P -You can give publish a url to a tarball, or a filename of a tarball, -or a path to a folder. (Paths have to either be "." or contain a "/".) +You can give publish a url to a tarball, or a filename of a tarball, or a path to a folder\. (Paths have to either be "\." or contain a "/"\.) . -.SH "Tag your package as "stable"" -This makes it easier to install without your users having to know the -version ahead of time. +.SH "Tag your package as \"stable\"" +This makes it easier to install without your users having to know the version ahead of time\. . .IP "" 4 . .nf -npm tag my\-package 1.2.3 stable + +npm tag my\-package 1\.2\.3 stable . .fi . .IP "" 0 . .P -You can also use other tags, but "stable" and "latest" have reserved -meanings. +You can also use other tags, but "stable" and "latest" have reserved meanings\. . .SH "Brag about it" -Send emails, write blogs, blab in IRC. +Send emails, write blogs, blab in IRC\. . .P Tell the world how easy it is to install your program! diff --git a/man/folders.1 b/man/folders.1 index f5f61f93c21..70a63f97b8a 100644 --- a/man/folders.1 +++ b/man/folders.1 @@ -1,40 +1,37 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "NPM\-FOLDERS" "1" "April 2010" "" "" +.TH "NPM\-FOLDERS" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-folders\fR \-\- Folder Structures Used by npm +\fBnpm\-folders\fR \- Folder Structures Used by npm . .SH "DESCRIPTION" -Everything lives in the \fBroot\fR setting. This defaults to \fB$HOME/.node_libraries/\fR. I'd like to be able to override it, but that's not -possible yet. +Everything lives in the \fBroot\fR setting\. This defaults to \fB$HOME/\.node_libraries/\fR\. I\'d like to be able to override it, but that\'s not possible yet\. . .P -\fBroot/.npm/foo\fR is where the stuff for package \fBfoo\fR would go. +\fBroot/\.npm/foo\fR is where the stuff for package \fBfoo\fR would go\. . .P -\fBroot/.npm/foo/1.0.0/package\fR the contents of the tarball containing foo -version 1.0.0 +\fBroot/\.npm/foo/1\.0\.0/package\fR the contents of the tarball containing foo version 1\.0\.0 . .P -\fBroot/.npm/foo/1.0.0/main.js\fR Generated file that exports the \fBmain\fR module in -foo. +\fBroot/\.npm/foo/1\.0\.0/main\.js\fR Generated file that exports the \fBmain\fR module in foo\. . .P -\fBroot/.npm/foo/1.0.0/lib\fR symlink to the \fBlib\fR dir in foo. +\fBroot/\.npm/foo/1\.0\.0/lib\fR symlink to the \fBlib\fR dir in foo\. . .P -\fBroot/.npm/foo/active\fR symlink to the active version. +\fBroot/\.npm/foo/active\fR symlink to the active version\. . .P -\fBroot/foo\-1.0.0.js\fR symlink to \fB.npm/foo/1.0.0/main.js\fR +\fBroot/foo\-1\.0\.0\.js\fR symlink to \fB\.npm/foo/1\.0\.0/main\.js\fR . .P -\fBroot/foo.js\fR symlink to \fB.npm/foo/active/main.js\fR +\fBroot/foo\.js\fR symlink to \fB\.npm/foo/active/main\.js\fR . .P -\fBroot/foo\fR symlink to \fB.npm/foo/active/lib\fR +\fBroot/foo\fR symlink to \fB\.npm/foo/active/lib\fR . .P -\fBroot/foo\-1.0.0\fR symlink to \fB.npm/foo/1.0.0/lib\fR +\fBroot/foo\-1\.0\.0\fR symlink to \fB\.npm/foo/1\.0\.0/lib\fR diff --git a/man/help.1 b/man/help.1 index ab19a9a2ce0..4a5f4bb893a 100644 --- a/man/help.1 +++ b/man/help.1 @@ -1,14 +1,15 @@ -.\" generated with Ronn/v0.4.1 -.\" http://github.com/rtomayko/ronn/ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 . .TH "NPM\-HELP" "1" "May 2010" "" "" . .SH "NAME" -\fBnpm\-help\fR \-\- Get help about npm commands +\fBnpm\-help\fR \- Get help about npm commands . .SH "SYNOPSIS" . .nf + npm help