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.
		
		
		
		
		
			
		
			
				
					
					
						
							93 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							93 lines
						
					
					
						
							1.8 KiB
						
					
					
				var grapher = require('sass-graph'), | 
						|
  clonedeep = require('lodash/cloneDeep'), | 
						|
  path = require('path'), | 
						|
  config = {}, | 
						|
  watcher = {}, | 
						|
  graph = null; | 
						|
 | 
						|
watcher.reset = function(opts) { | 
						|
  config = clonedeep(opts || config || {}); | 
						|
  var options = { | 
						|
    loadPaths: config.includePath, | 
						|
    extensions: ['scss', 'sass', 'css'], | 
						|
    follow: config.follow, | 
						|
  }; | 
						|
 | 
						|
  if (config.directory) { | 
						|
    graph = grapher.parseDir(config.directory, options); | 
						|
  } else { | 
						|
    graph = grapher.parseFile(config.src, options); | 
						|
  } | 
						|
 | 
						|
  return Object.keys(graph.index); | 
						|
}; | 
						|
 | 
						|
watcher.changed = function(absolutePath) { | 
						|
  var files = { | 
						|
    added: [], | 
						|
    changed: [], | 
						|
    removed: [], | 
						|
  }; | 
						|
 | 
						|
  this.reset(); | 
						|
 | 
						|
  if (absolutePath && path.basename(absolutePath)[0] !== '_') { | 
						|
    files.changed.push(absolutePath); | 
						|
  } | 
						|
 | 
						|
  graph.visitAncestors(absolutePath, function(parent) { | 
						|
    if (path.basename(parent)[0] !== '_') { | 
						|
      files.changed.push(parent); | 
						|
    } | 
						|
  }); | 
						|
 | 
						|
  graph.visitDescendents(absolutePath, function(child) { | 
						|
    files.added.push(child); | 
						|
  }); | 
						|
 | 
						|
  return files; | 
						|
}; | 
						|
 | 
						|
watcher.added = function(absolutePath) { | 
						|
  var files = { | 
						|
    added: [], | 
						|
    changed: [], | 
						|
    removed: [], | 
						|
  }; | 
						|
 | 
						|
  this.reset(); | 
						|
 | 
						|
  if (Object.keys(graph.index).indexOf(absolutePath) === -1) { | 
						|
    files.added.push(absolutePath); | 
						|
  } | 
						|
 | 
						|
  graph.visitDescendents(absolutePath, function(child) { | 
						|
    files.added.push(child); | 
						|
  }); | 
						|
 | 
						|
  return files; | 
						|
}; | 
						|
 | 
						|
watcher.removed = function(absolutePath) { | 
						|
  var files = { | 
						|
    added: [], | 
						|
    changed: [], | 
						|
    removed: [], | 
						|
  }; | 
						|
 | 
						|
  graph.visitAncestors(absolutePath, function(parent) { | 
						|
    if (path.basename(parent)[0] !== '_') { | 
						|
      files.changed.push(parent); | 
						|
    } | 
						|
  }); | 
						|
 | 
						|
  if (Object.keys(graph.index).indexOf(absolutePath) !== -1) { | 
						|
    files.removed.push(absolutePath); | 
						|
  } | 
						|
 | 
						|
  this.reset(); | 
						|
 | 
						|
  return files; | 
						|
}; | 
						|
 | 
						|
module.exports = watcher;
 | 
						|
 |