mirror of
https://github.com/bower/bower.git
synced 2026-04-24 03:00:19 -04:00
This commit changes the interface of the command functions exported by the files in `lib/commands`. The functions now return a promise and accept a logger as the first argument. This has several advantages * The promise style is consistent with the rest of the code. * It removes a lot of duplicate code. * The command factory does not need to proxy the logger object.
64 lines
1.6 KiB
JavaScript
64 lines
1.6 KiB
JavaScript
var mout = require('mout');
|
|
var Project = require('../core/Project');
|
|
var open = require('opn');
|
|
var endpointParser = require('bower-endpoint-parser');
|
|
var cli = require('../util/cli');
|
|
var createError = require('../util/createError');
|
|
var defaultConfig = require('../config');
|
|
|
|
function home(logger, name, config) {
|
|
var project;
|
|
var promise;
|
|
var decEndpoint;
|
|
|
|
config = mout.object.deepFillIn(config || {}, defaultConfig);
|
|
project = new Project(config, logger);
|
|
|
|
// Get the package meta
|
|
// If no name is specified, read the project json
|
|
// If a name is specified, fetch from the package repository
|
|
if (!name) {
|
|
promise = project.hasJson()
|
|
.then(function (json) {
|
|
if (!json) {
|
|
throw createError('You are not inside a package', 'ENOENT');
|
|
}
|
|
|
|
return project.getJson();
|
|
});
|
|
} else {
|
|
decEndpoint = endpointParser.decompose(name);
|
|
promise = project.getPackageRepository().fetch(decEndpoint)
|
|
.spread(function (canonicalDir, pkgMeta) {
|
|
return pkgMeta;
|
|
});
|
|
}
|
|
|
|
// Get homepage and open it
|
|
return promise.then(function (pkgMeta) {
|
|
var homepage = pkgMeta.homepage;
|
|
|
|
if (!homepage) {
|
|
throw createError('No homepage set for ' + pkgMeta.name, 'ENOHOME');
|
|
}
|
|
|
|
open(homepage);
|
|
return homepage;
|
|
});
|
|
}
|
|
|
|
// -------------------
|
|
|
|
home.line = function (logger, argv) {
|
|
var options = cli.readOptions(argv);
|
|
var name = options.argv.remain[1];
|
|
|
|
return home(logger, name);
|
|
};
|
|
|
|
home.completion = function () {
|
|
// TODO:
|
|
};
|
|
|
|
module.exports = home;
|