diff options
Diffstat (limited to 'deps/node/deps/npm/lib/edit.js')
-rw-r--r-- | deps/node/deps/npm/lib/edit.js | 49 |
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) + })) + }) +} |