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