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