info.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. var mout = require('mout');
  2. var Q = require('q');
  3. var endpointParser = require('bower-endpoint-parser');
  4. var PackageRepository = require('../core/PackageRepository');
  5. var cli = require('../util/cli');
  6. var Tracker = require('../util/analytics').Tracker;
  7. var defaultConfig = require('../config');
  8. function info(logger, endpoint, property, config) {
  9. var repository;
  10. var decEndpoint;
  11. var tracker;
  12. config = defaultConfig(config);
  13. repository = new PackageRepository(config, logger);
  14. tracker = new Tracker(config);
  15. decEndpoint = endpointParser.decompose(endpoint);
  16. tracker.trackDecomposedEndpoints('info', [decEndpoint]);
  17. return Q.all([
  18. getPkgMeta(repository, decEndpoint, property),
  19. decEndpoint.target === '*' && !property ? repository.versions(decEndpoint.source) : null
  20. ])
  21. .spread(function (pkgMeta, versions) {
  22. if (versions) {
  23. return {
  24. name: decEndpoint.source,
  25. versions: versions,
  26. latest: pkgMeta
  27. };
  28. }
  29. return pkgMeta;
  30. });
  31. }
  32. function getPkgMeta(repository, decEndpoint, property) {
  33. return repository.fetch(decEndpoint)
  34. .spread(function (canonicalDir, pkgMeta) {
  35. pkgMeta = mout.object.filter(pkgMeta, function (value, key) {
  36. return key.charAt(0) !== '_';
  37. });
  38. // Retrieve specific property
  39. if (property) {
  40. pkgMeta = mout.object.get(pkgMeta, property);
  41. }
  42. return pkgMeta;
  43. });
  44. }
  45. // -------------------
  46. info.line = function (logger, argv) {
  47. var options = cli.readOptions(argv);
  48. var pkg = options.argv.remain[1];
  49. var property = options.argv.remain[2];
  50. if (!pkg) {
  51. return new Q();
  52. }
  53. return info(logger, pkg, property);
  54. };
  55. info.completion = function () {
  56. // TODO:
  57. };
  58. module.exports = info;