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