You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							94 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							94 lines
						
					
					
						
							2.5 KiB
						
					
					
				/**
 | 
						|
 * Manages the internal config of nodemon, checking for the state of support
 | 
						|
 * with fs.watch, how nodemon can watch files (using find or fs methods).
 | 
						|
 *
 | 
						|
 * This is *not* the user's config.
 | 
						|
 */
 | 
						|
var debug = require('debug')('nodemon');
 | 
						|
var load = require('./load');
 | 
						|
var rules = require('../rules');
 | 
						|
var utils = require('../utils');
 | 
						|
var pinVersion = require('../version').pin;
 | 
						|
var command = require('./command');
 | 
						|
var rulesToMonitor = require('../monitor/match').rulesToMonitor;
 | 
						|
var bus = utils.bus;
 | 
						|
 | 
						|
function reset() {
 | 
						|
  rules.reset();
 | 
						|
 | 
						|
  config.dirs = [];
 | 
						|
  config.options = { ignore: [], watch: [], monitor: [] };
 | 
						|
  config.lastStarted = 0;
 | 
						|
  config.loaded = [];
 | 
						|
}
 | 
						|
 | 
						|
var config = {
 | 
						|
  run: false,
 | 
						|
  system: {
 | 
						|
    cwd: process.cwd(),
 | 
						|
  },
 | 
						|
  required: false,
 | 
						|
  dirs: [],
 | 
						|
  timeout: 1000,
 | 
						|
  options: {},
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * Take user defined settings, then detect the local machine capability, then
 | 
						|
 * look for local and global nodemon.json files and merge together the final
 | 
						|
 * settings with the config for nodemon.
 | 
						|
 *
 | 
						|
 * @param  {Object} settings user defined settings for nodemon (typically on
 | 
						|
 *  the cli)
 | 
						|
 * @param  {Function} ready callback fired once the config is loaded
 | 
						|
 */
 | 
						|
config.load = function (settings, ready) {
 | 
						|
  reset();
 | 
						|
  var config = this;
 | 
						|
  load(settings, config.options, config, function (options) {
 | 
						|
    config.options = options;
 | 
						|
 | 
						|
    if (options.watch.length === 0) {
 | 
						|
      // this is to catch when the watch is left blank
 | 
						|
      options.watch.push('*.*');
 | 
						|
    }
 | 
						|
 | 
						|
    if (options['watch_interval']) { // jshint ignore:line
 | 
						|
      options.watchInterval = options['watch_interval']; // jshint ignore:line
 | 
						|
    }
 | 
						|
 | 
						|
    config.watchInterval = options.watchInterval || null;
 | 
						|
    if (options.signal) {
 | 
						|
      config.signal = options.signal;
 | 
						|
    }
 | 
						|
 | 
						|
    var cmd = command(config.options);
 | 
						|
    config.command = {
 | 
						|
      raw: cmd,
 | 
						|
      string: utils.stringify(cmd.executable, cmd.args),
 | 
						|
    };
 | 
						|
 | 
						|
    // now run automatic checks on system adding to the config object
 | 
						|
    options.monitor = rulesToMonitor(options.watch, options.ignore, config);
 | 
						|
 | 
						|
    var cwd = process.cwd();
 | 
						|
    debug('config: dirs', config.dirs);
 | 
						|
    if (config.dirs.length === 0) {
 | 
						|
      config.dirs.unshift(cwd);
 | 
						|
    }
 | 
						|
 | 
						|
    bus.emit('config:update', config);
 | 
						|
    pinVersion().then(function () {
 | 
						|
      ready(config);
 | 
						|
    }).catch(e => {
 | 
						|
      // this doesn't help testing, but does give exposure on syntax errors
 | 
						|
      console.error(e.stack);
 | 
						|
      setTimeout(() => { throw e; }, 0);
 | 
						|
    });
 | 
						|
  });
 | 
						|
};
 | 
						|
 | 
						|
config.reset = reset;
 | 
						|
 | 
						|
module.exports = config;
 |