diff options
| author | isaacs <i@izs.me> | 2012-06-17 12:04:35 -0700 |
|---|---|---|
| committer | isaacs <i@izs.me> | 2012-06-17 12:04:35 -0700 |
| commit | b0b707cb6e48fd0393c24c80c9fe490855d24f84 (patch) | |
| tree | 25f2cac52e79c293e62d9639bd9cdcea6db9e8e2 /deps/npm/node_modules/init-package-json/init-package-json.js | |
| parent | d614d161c7f1ac340251271e911cd4752c158d38 (diff) | |
| download | node-new-b0b707cb6e48fd0393c24c80c9fe490855d24f84.tar.gz | |
npm: Upgrade to 1.1.27
- severely enhanced 'npm init'
- upgraded node-gyp
Diffstat (limited to 'deps/npm/node_modules/init-package-json/init-package-json.js')
| -rw-r--r-- | deps/npm/node_modules/init-package-json/init-package-json.js | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/deps/npm/node_modules/init-package-json/init-package-json.js b/deps/npm/node_modules/init-package-json/init-package-json.js new file mode 100644 index 0000000000..2406cd9f81 --- /dev/null +++ b/deps/npm/node_modules/init-package-json/init-package-json.js @@ -0,0 +1,104 @@ + +module.exports = init + +var PZ = require('promzard').PromZard +var path = require('path') +var def = require.resolve('./default-input.js') + +var fs = require('fs') +var semver = require('semver') +var read = require('read') + +// to validate the data object at the end as a worthwhile package +// and assign default values for things. +// readJson.extras(file, data, cb) +var readJson = require('read-package-json') + +function init (dir, input, config, cb) { + if (typeof config === 'function') + cb = config, config = {} + var package = path.resolve(dir, 'package.json') + input = path.resolve(input) + var pkg + var ctx = {} + + var es = readJson.extraSet + readJson.extraSet = es.filter(function (fn) { + return fn.name !== 'authors' && fn.name !== 'mans' + }) + readJson(package, function (er, d) { + readJson.extraSet = es + + if (er) pkg = {} + else pkg = d + + ctx.filename = package + ctx.dirname = path.dirname(package) + ctx.basename = path.basename(ctx.dirname) + if (!pkg.version || !semver.valid(pkg.version)) + delete pkg.version + + ctx.package = pkg + ctx.config = config || {} + + // make sure that the input is valid. + // if not, use the default + var pz = new PZ(input, ctx) + pz.backupFile = def + pz.on('error', cb) + pz.on('data', function (data) { + Object.keys(data).forEach(function (k) { + if (data[k] !== undefined && data[k] !== null) pkg[k] = data[k] + }) + + // only do a few of these. + // no need for mans or contributors if they're in the files + var es = readJson.extraSet + readJson.extraSet = es.filter(function (fn) { + return fn.name !== 'authors' && fn.name !== 'mans' + }) + readJson.extras(package, pkg, function (er, pkg) { + readJson.extraSet = es + if (er) return cb(er, pkg) + pkg = unParsePeople(pkg) + // no need for the readme now. + delete pkg.readme + // really don't want to have this lying around in the file + delete pkg._id + var d = JSON.stringify(pkg, null, 2) + '\n' + console.log('About to write to %s:\n\n%s\n', package, d) + read({prompt:'Is this ok? ', default: 'yes'}, function (er, ok) { + if (!ok || ok.toLowerCase().charAt(0) !== 'y') { + console.log('Aborted.') + } else { + fs.writeFile(package, d, 'utf8', function (er) { + return cb(er, pkg) + }) + } + }) + }) + }) + }) + +} + +// turn the objects into somewhat more humane strings. +function unParsePeople (data) { + if (data.author) data.author = unParsePerson(data.author) + ;["maintainers", "contributors"].forEach(function (set) { + if (!Array.isArray(data[set])) return; + data[set] = data[set].map(unParsePerson) + }) + return data +} + +function unParsePerson (person) { + if (typeof person === "string") return person + var name = person.name || "" + var u = person.url || person.web + var url = u ? (" ("+u+")") : "" + var e = person.email || person.mail + var email = e ? (" <"+e+">") : "" + return name+email+url +} + |
