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;
 |