aboutsummaryrefslogtreecommitdiff
path: root/deps/node/deps/npm/lib/edit.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/node/deps/npm/lib/edit.js')
-rw-r--r--deps/node/deps/npm/lib/edit.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/deps/node/deps/npm/lib/edit.js b/deps/node/deps/npm/lib/edit.js
new file mode 100644
index 00000000..2e8b339e
--- /dev/null
+++ b/deps/node/deps/npm/lib/edit.js
@@ -0,0 +1,49 @@
+// npm edit <pkg>
+// open the package folder in the $EDITOR
+
+module.exports = edit
+edit.usage = 'npm edit <pkg>[/<subpkg>...]'
+
+edit.completion = require('./utils/completion/installed-shallow.js')
+
+var npm = require('./npm.js')
+var path = require('path')
+var fs = require('graceful-fs')
+var editor = require('editor')
+var noProgressTillDone = require('./utils/no-progress-while-running').tillDone
+
+function edit (args, cb) {
+ var p = args[0]
+ if (args.length !== 1 || !p) return cb(edit.usage)
+ var e = npm.config.get('editor')
+ if (!e) {
+ return cb(new Error(
+ "No editor set. Set the 'editor' config, or $EDITOR environ."
+ ))
+ }
+ p = p.split('/')
+ // combine scoped parts
+ .reduce(function (parts, part) {
+ if (parts.length === 0) {
+ return [part]
+ }
+ var lastPart = parts[parts.length - 1]
+ // check if previous part is the first part of a scoped package
+ if (lastPart[0] === '@' && !lastPart.includes('/')) {
+ parts[parts.length - 1] += '/' + part
+ } else {
+ parts.push(part)
+ }
+ return parts
+ }, [])
+ .join('/node_modules/')
+ .replace(/(\/node_modules)+/, '/node_modules')
+ var f = path.resolve(npm.dir, p)
+ fs.lstat(f, function (er) {
+ if (er) return cb(er)
+ editor(f, { editor: e }, noProgressTillDone(function (er) {
+ if (er) return cb(er)
+ npm.commands.rebuild(args, cb)
+ }))
+ })
+}