index.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. var Q = require('q');
  2. var Logger = require('bower-logger');
  3. /**
  4. * Require commands only when called.
  5. *
  6. * Running `commandFactory(id)` is equivalent to `require(id)`. Both calls return
  7. * a command function. The difference is that `cmd = commandFactory()` and `cmd()`
  8. * return as soon as possible and load and execute the command asynchronously.
  9. */
  10. function commandFactory(id) {
  11. if (process.env.STRICT_REQUIRE) {
  12. require(id);
  13. }
  14. function command() {
  15. var commandArgs = [].slice.call(arguments);
  16. return withLogger(function (logger) {
  17. commandArgs.unshift(logger);
  18. return require(id).apply(undefined, commandArgs);
  19. });
  20. }
  21. function runFromArgv(argv) {
  22. return withLogger(function (logger) {
  23. return require(id).line.call(undefined, logger, argv);
  24. });
  25. }
  26. function withLogger(func) {
  27. var logger = new Logger();
  28. Q.try(func, logger)
  29. .done(function () {
  30. var args = [].slice.call(arguments);
  31. args.unshift('end');
  32. logger.emit.apply(logger, args);
  33. }, function (error) {
  34. logger.emit('error', error);
  35. });
  36. return logger;
  37. }
  38. command.line = runFromArgv;
  39. return command;
  40. }
  41. module.exports = {
  42. cache: {
  43. clean: commandFactory('./cache/clean'),
  44. list: commandFactory('./cache/list'),
  45. },
  46. completion: commandFactory('./completion'),
  47. help: commandFactory('./help'),
  48. home: commandFactory('./home'),
  49. info: commandFactory('./info'),
  50. init: commandFactory('./init'),
  51. install: commandFactory('./install'),
  52. link: commandFactory('./link'),
  53. list: commandFactory('./list'),
  54. lookup: commandFactory('./lookup'),
  55. prune: commandFactory('./prune'),
  56. register: commandFactory('./register'),
  57. search: commandFactory('./search'),
  58. update: commandFactory('./update'),
  59. uninstall: commandFactory('./uninstall'),
  60. version: commandFactory('./version')
  61. };