summaryrefslogtreecommitdiffstats
path: root/node_modules/node-sass/lib/watcher.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/node-sass/lib/watcher.js')
-rw-r--r--node_modules/node-sass/lib/watcher.js93
1 files changed, 93 insertions, 0 deletions
diff --git a/node_modules/node-sass/lib/watcher.js b/node_modules/node-sass/lib/watcher.js
new file mode 100644
index 0000000..89443b4
--- /dev/null
+++ b/node_modules/node-sass/lib/watcher.js
@@ -0,0 +1,93 @@
+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;