Blame view

node_modules/bower/lib/bin/bower.js 3.74 KB
2dda2e10   Administrator   generator ignore
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
  process.bin = process.title = 'bower';
  
  var Q = require('q');
  var mout = require('mout');
  var Logger = require('bower-logger');
  var userHome = require('user-home');
  var bower = require('../');
  var version = require('../version');
  var cli = require('../util/cli');
  var rootCheck = require('../util/rootCheck');
  
  var options;
  var renderer;
  var loglevel;
  var command;
  var commandFunc;
  var logger;
  var levels = Logger.LEVELS;
  
  options = cli.readOptions({
      'version': { type: Boolean, shorthand: 'v' },
      'help': { type: Boolean, shorthand: 'h' },
      'allow-root': { type: Boolean }
  });
  
  // Handle print of version
  if (options.version) {
      process.stdout.write(version + '\n');
      process.exit();
  }
  
  // Root check
  rootCheck(options, bower.config);
  
  // Set loglevel
  if (bower.config.silent) {
      loglevel = levels.error;
  } else if (bower.config.verbose) {
      loglevel = -Infinity;
      Q.longStackSupport = true;
  } else if (bower.config.quiet) {
      loglevel = levels.warn;
  } else {
      loglevel = levels[bower.config.loglevel] || levels.info;
  }
  
  // Get the command to execute
  while (options.argv.remain.length) {
      command = options.argv.remain.join(' ');
  
      // Alias lookup
      if (bower.abbreviations[command]) {
          command = bower.abbreviations[command].replace(/\s/g, '.');
          break;
      }
  
      command = command.replace(/\s/g, '.');
  
      // Direct lookup
      if (mout.object.has(bower.commands, command)) {
          break;
      }
  
      options.argv.remain.pop();
  }
  
  // Execute the command
  commandFunc = command && mout.object.get(bower.commands, command);
  command = command && command.replace(/\./g, ' ');
  
  // If no command was specified, show bower help
  // Do the same if the command is unknown
  if (!commandFunc) {
      logger = bower.commands.help();
      command = 'help';
  // If the user requested help, show the command's help
  // Do the same if the actual command is a group of other commands (e.g.: cache)
  } else if (options.help || !commandFunc.line) {
      logger = bower.commands.help(command);
      command = 'help';
  // Call the line method
  } else {
      logger = commandFunc.line(process.argv);
  
      // If the method failed to interpret the process arguments
      // show the command help
      if (!logger) {
          logger = bower.commands.help(command);
          command = 'help';
      }
  }
  
  // Get the renderer and configure it with the executed command
  renderer = cli.getRenderer(command, logger.json, bower.config);
  
  function handleLogger(logger, renderer) {
      logger
      .on('end', function (data) {
          if (!bower.config.silent && !bower.config.quiet) {
              renderer.end(data);
          }
      })
      .on('error', function (err)  {
          if (command !== 'help' && err.code === 'EREADOPTIONS') {
              logger = bower.commands.help(command);
              renderer = cli.getRenderer('help', logger.json, bower.config);
              handleLogger(logger, renderer);
          } else {
              if (levels.error >= loglevel) {
                  renderer.error(err);
              }
  
              process.exit(1);
          }
      })
      .on('log', function (log) {
          if (levels[log.level] >= loglevel) {
              renderer.log(log);
          }
      })
      .on('prompt', function (prompt, callback) {
          renderer.prompt(prompt)
          .then(function (answer) {
              callback(answer);
          });
      });
  }
  
  handleLogger(logger, renderer);
  
  // Warn if HOME is not SET
  if (!userHome) {
      logger.warn('no-home', 'HOME environment variable not set. User config will not be loaded.');
  }
  
  if (bower.config.interactive) {
      var updateNotifier = require('update-notifier');
  
      // Check for newer version of Bower
      var notifier = updateNotifier({ pkg: { name: 'bower', version: version } });
  
      if (notifier.update && levels.info >= loglevel) {
          notifier.notify();
      }
  }