mirror of
https://github.com/bower/bower.git
synced 2026-01-21 04:08:08 -05:00
82 lines
2.4 KiB
JavaScript
82 lines
2.4 KiB
JavaScript
// ==========================================
|
|
// BOWER: Install API
|
|
// ==========================================
|
|
// Copyright 2012 Twitter, Inc
|
|
// Licensed under The MIT License
|
|
// http://opensource.org/licenses/MIT
|
|
// ==========================================
|
|
|
|
var Emitter = require('events').EventEmitter;
|
|
var nopt = require('nopt');
|
|
var fs = require('fs');
|
|
var path = require('path');
|
|
|
|
var Manager = require('../core/manager');
|
|
var config = require('../core/config');
|
|
var source = require('../core/source');
|
|
var save = require('../util/save');
|
|
var help = require('./help');
|
|
|
|
var optionTypes = { help: Boolean, save: Boolean, 'save-dev': Boolean, force: Boolean, 'force-latest': Boolean, production: Boolean };
|
|
var shorthand = { 'h': ['--help'], 'S': ['--save'], 'D': ['--save-dev'], 'f': ['--force'], 'F': ['--force-latest'], 'p': ['--production'] };
|
|
|
|
module.exports = function (paths, options) {
|
|
options = options || {};
|
|
|
|
var emitter = new Emitter;
|
|
var manager = new Manager(paths, {
|
|
force: options.force,
|
|
forceLatest: options['force-latest'],
|
|
production: options.production
|
|
});
|
|
|
|
manager
|
|
.on('data', emitter.emit.bind(emitter, 'data'))
|
|
.on('error', emitter.emit.bind(emitter, 'error'))
|
|
.on('resolve', function (resolved) {
|
|
// Handle save/save-dev
|
|
if (resolved && (options.save || options['save-dev'])) {
|
|
save(manager, paths, !options.save, emitter.emit.bind(emitter, 'end'));
|
|
} else {
|
|
emitter.emit('end');
|
|
}
|
|
})
|
|
.resolve();
|
|
|
|
return emitter;
|
|
};
|
|
|
|
module.exports.line = function (argv) {
|
|
var options = nopt(optionTypes, shorthand, argv);
|
|
var paths = options.argv.remain.slice(1);
|
|
|
|
if (options.help) return help('install');
|
|
return module.exports(paths, options);
|
|
};
|
|
|
|
module.exports.completion = function (opts, cb) {
|
|
var cache = path.join(config.completion, 'install.json');
|
|
var done = function done(err, results) {
|
|
if (err) return cb(err);
|
|
var names = results.map(function (pkg) {
|
|
return pkg.name;
|
|
});
|
|
|
|
return cb(null, names);
|
|
};
|
|
|
|
fs.readFile(cache, function (err, body) {
|
|
if (!err) return done(null, JSON.parse(body));
|
|
|
|
// expected error, do the first request and cache the results
|
|
source.all(function (err, results) {
|
|
if (err) return cb(err);
|
|
fs.writeFile(cache, JSON.stringify(results, null, 2), function (err) {
|
|
done(err, results);
|
|
});
|
|
});
|
|
});
|
|
};
|
|
|
|
module.exports.completion.options = shorthand;
|