You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@griffin.apache.org by gu...@apache.org on 2018/09/12 08:58:01 UTC

[12/51] [partial] incubator-griffin-site git commit: remove legacy code

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/chokidar/index.js
----------------------------------------------------------------------
diff --git a/node_modules/chokidar/index.js b/node_modules/chokidar/index.js
deleted file mode 100644
index e23a643..0000000
--- a/node_modules/chokidar/index.js
+++ /dev/null
@@ -1,711 +0,0 @@
-'use strict';
-var EventEmitter = require('events').EventEmitter;
-var fs = require('fs');
-var sysPath = require('path');
-var asyncEach = require('async-each');
-var anymatch = require('anymatch');
-var globParent = require('glob-parent');
-var isGlob = require('is-glob');
-var isAbsolute = require('path-is-absolute');
-var inherits = require('inherits');
-
-var NodeFsHandler = require('./lib/nodefs-handler');
-var FsEventsHandler = require('./lib/fsevents-handler');
-
-var arrify = function(value) {
-  if (value == null) return [];
-  return Array.isArray(value) ? value : [value];
-};
-
-var flatten = function(list, result) {
-  if (result == null) result = [];
-  list.forEach(function(item) {
-    if (Array.isArray(item)) {
-      flatten(item, result);
-    } else {
-      result.push(item);
-    }
-  });
-  return result;
-};
-
-// Little isString util for use in Array#every.
-var isString = function(thing) {
-  return typeof thing === 'string';
-};
-
-// Public: Main class.
-// Watches files & directories for changes.
-//
-// * _opts - object, chokidar options hash
-//
-// Emitted events:
-// `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error`
-//
-// Examples
-//
-//  var watcher = new FSWatcher()
-//    .add(directories)
-//    .on('add', path => console.log('File', path, 'was added'))
-//    .on('change', path => console.log('File', path, 'was changed'))
-//    .on('unlink', path => console.log('File', path, 'was removed'))
-//    .on('all', (event, path) => console.log(path, ' emitted ', event))
-//
-function FSWatcher(_opts) {
-  EventEmitter.call(this);
-  var opts = {};
-  // in case _opts that is passed in is a frozen object
-  if (_opts) for (var opt in _opts) opts[opt] = _opts[opt];
-  this._watched = Object.create(null);
-  this._closers = Object.create(null);
-  this._ignoredPaths = Object.create(null);
-  Object.defineProperty(this, '_globIgnored', {
-    get: function() { return Object.keys(this._ignoredPaths); }
-  });
-  this.closed = false;
-  this._throttled = Object.create(null);
-  this._symlinkPaths = Object.create(null);
-
-  function undef(key) {
-    return opts[key] === undefined;
-  }
-
-  // Set up default options.
-  if (undef('persistent')) opts.persistent = true;
-  if (undef('ignoreInitial')) opts.ignoreInitial = false;
-  if (undef('ignorePermissionErrors')) opts.ignorePermissionErrors = false;
-  if (undef('interval')) opts.interval = 100;
-  if (undef('binaryInterval')) opts.binaryInterval = 300;
-  this.enableBinaryInterval = opts.binaryInterval !== opts.interval;
-
-  // Enable fsevents on OS X when polling isn't explicitly enabled.
-  if (undef('useFsEvents')) opts.useFsEvents = !opts.usePolling;
-
-  // If we can't use fsevents, ensure the options reflect it's disabled.
-  if (!FsEventsHandler.canUse()) opts.useFsEvents = false;
-
-  // Use polling on Mac if not using fsevents.
-  // Other platforms use non-polling fs.watch.
-  if (undef('usePolling') && !opts.useFsEvents) {
-    opts.usePolling = process.platform === 'darwin';
-  }
-
-  // Global override (useful for end-developers that need to force polling for all
-  // instances of chokidar, regardless of usage/dependency depth)
-  var envPoll = process.env.CHOKIDAR_USEPOLLING;
-  if (envPoll !== undefined) {
-    var envLower = envPoll.toLowerCase();
-
-    if (envLower === 'false' || envLower === '0') {
-      opts.usePolling = false;
-    } else if (envLower === 'true' || envLower === '1') {
-      opts.usePolling = true;
-    } else {
-      opts.usePolling = !!envLower
-    }
-  }
-
-  // Editor atomic write normalization enabled by default with fs.watch
-  if (undef('atomic')) opts.atomic = !opts.usePolling && !opts.useFsEvents;
-  if (opts.atomic) this._pendingUnlinks = Object.create(null);
-
-  if (undef('followSymlinks')) opts.followSymlinks = true;
-
-  if (undef('awaitWriteFinish')) opts.awaitWriteFinish = false;
-  if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {};
-  var awf = opts.awaitWriteFinish;
-  if (awf) {
-    if (!awf.stabilityThreshold) awf.stabilityThreshold = 2000;
-    if (!awf.pollInterval) awf.pollInterval = 100;
-
-    this._pendingWrites = Object.create(null);
-  }
-  if (opts.ignored) opts.ignored = arrify(opts.ignored);
-
-  this._isntIgnored = function(path, stat) {
-    return !this._isIgnored(path, stat);
-  }.bind(this);
-
-  var readyCalls = 0;
-  this._emitReady = function() {
-    if (++readyCalls >= this._readyCount) {
-      this._emitReady = Function.prototype;
-      this._readyEmitted = true;
-      // use process.nextTick to allow time for listener to be bound
-      process.nextTick(this.emit.bind(this, 'ready'));
-    }
-  }.bind(this);
-
-  this.options = opts;
-
-  // You’re frozen when your heart’s not open.
-  Object.freeze(opts);
-}
-
-inherits(FSWatcher, EventEmitter);
-
-// Common helpers
-// --------------
-
-// Private method: Normalize and emit events
-//
-// * event     - string, type of event
-// * path      - string, file or directory path
-// * val[1..3] - arguments to be passed with event
-//
-// Returns the error if defined, otherwise the value of the
-// FSWatcher instance's `closed` flag
-FSWatcher.prototype._emit = function(event, path, val1, val2, val3) {
-  if (this.options.cwd) path = sysPath.relative(this.options.cwd, path);
-  var args = [event, path];
-  if (val3 !== undefined) args.push(val1, val2, val3);
-  else if (val2 !== undefined) args.push(val1, val2);
-  else if (val1 !== undefined) args.push(val1);
-
-  var awf = this.options.awaitWriteFinish;
-  if (awf && this._pendingWrites[path]) {
-    this._pendingWrites[path].lastChange = new Date();
-    return this;
-  }
-
-  if (this.options.atomic) {
-    if (event === 'unlink') {
-      this._pendingUnlinks[path] = args;
-      setTimeout(function() {
-        Object.keys(this._pendingUnlinks).forEach(function(path) {
-          this.emit.apply(this, this._pendingUnlinks[path]);
-          this.emit.apply(this, ['all'].concat(this._pendingUnlinks[path]));
-          delete this._pendingUnlinks[path];
-        }.bind(this));
-      }.bind(this), typeof this.options.atomic === "number"
-        ? this.options.atomic
-        : 100);
-      return this;
-    } else if (event === 'add' && this._pendingUnlinks[path]) {
-      event = args[0] = 'change';
-      delete this._pendingUnlinks[path];
-    }
-  }
-
-  var emitEvent = function() {
-    this.emit.apply(this, args);
-    if (event !== 'error') this.emit.apply(this, ['all'].concat(args));
-  }.bind(this);
-
-  if (awf && (event === 'add' || event === 'change') && this._readyEmitted) {
-    var awfEmit = function(err, stats) {
-      if (err) {
-        event = args[0] = 'error';
-        args[1] = err;
-        emitEvent();
-      } else if (stats) {
-        // if stats doesn't exist the file must have been deleted
-        if (args.length > 2) {
-          args[2] = stats;
-        } else {
-          args.push(stats);
-        }
-        emitEvent();
-      }
-    };
-
-    this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit);
-    return this;
-  }
-
-  if (event === 'change') {
-    if (!this._throttle('change', path, 50)) return this;
-  }
-
-  if (
-    this.options.alwaysStat && val1 === undefined &&
-    (event === 'add' || event === 'addDir' || event === 'change')
-  ) {
-    var fullPath = this.options.cwd ? sysPath.join(this.options.cwd, path) : path;
-    fs.stat(fullPath, function(error, stats) {
-      // Suppress event when fs.stat fails, to avoid sending undefined 'stat'
-      if (error || !stats) return;
-
-      args.push(stats);
-      emitEvent();
-    });
-  } else {
-    emitEvent();
-  }
-
-  return this;
-};
-
-// Private method: Common handler for errors
-//
-// * error  - object, Error instance
-//
-// Returns the error if defined, otherwise the value of the
-// FSWatcher instance's `closed` flag
-FSWatcher.prototype._handleError = function(error) {
-  var code = error && error.code;
-  var ipe = this.options.ignorePermissionErrors;
-  if (error &&
-    code !== 'ENOENT' &&
-    code !== 'ENOTDIR' &&
-    (!ipe || (code !== 'EPERM' && code !== 'EACCES'))
-  ) this.emit('error', error);
-  return error || this.closed;
-};
-
-// Private method: Helper utility for throttling
-//
-// * action  - string, type of action being throttled
-// * path    - string, path being acted upon
-// * timeout - int, duration of time to suppress duplicate actions
-//
-// Returns throttle tracking object or false if action should be suppressed
-FSWatcher.prototype._throttle = function(action, path, timeout) {
-  if (!(action in this._throttled)) {
-    this._throttled[action] = Object.create(null);
-  }
-  var throttled = this._throttled[action];
-  if (path in throttled) return false;
-  function clear() {
-    delete throttled[path];
-    clearTimeout(timeoutObject);
-  }
-  var timeoutObject = setTimeout(clear, timeout);
-  throttled[path] = {timeoutObject: timeoutObject, clear: clear};
-  return throttled[path];
-};
-
-// Private method: Awaits write operation to finish
-//
-// * path    - string, path being acted upon
-// * threshold - int, time in milliseconds a file size must be fixed before
-//                    acknowledgeing write operation is finished
-// * awfEmit - function, to be called when ready for event to be emitted
-// Polls a newly created file for size variations. When files size does not
-// change for 'threshold' milliseconds calls callback.
-FSWatcher.prototype._awaitWriteFinish = function(path, threshold, event, awfEmit) {
-  var timeoutHandler;
-
-  var fullPath = path;
-  if (this.options.cwd && !isAbsolute(path)) {
-    fullPath = sysPath.join(this.options.cwd, path);
-  }
-
-  var now = new Date();
-
-  var awaitWriteFinish = (function (prevStat) {
-    fs.stat(fullPath, function(err, curStat) {
-      if (err) {
-        if (err.code !== 'ENOENT') awfEmit(err);
-        return;
-      }
-
-      var now = new Date();
-
-      if (prevStat && curStat.size != prevStat.size) {
-        this._pendingWrites[path].lastChange = now;
-      }
-
-      if (now - this._pendingWrites[path].lastChange >= threshold) {
-        delete this._pendingWrites[path];
-        awfEmit(null, curStat);
-      } else {
-        timeoutHandler = setTimeout(
-          awaitWriteFinish.bind(this, curStat),
-          this.options.awaitWriteFinish.pollInterval
-        );
-      }
-    }.bind(this));
-  }.bind(this));
-
-  if (!(path in this._pendingWrites)) {
-    this._pendingWrites[path] = {
-      lastChange: now,
-      cancelWait: function() {
-        delete this._pendingWrites[path];
-        clearTimeout(timeoutHandler);
-        return event;
-      }.bind(this)
-    };
-    timeoutHandler = setTimeout(
-      awaitWriteFinish.bind(this),
-      this.options.awaitWriteFinish.pollInterval
-    );
-  }
-};
-
-// Private method: Determines whether user has asked to ignore this path
-//
-// * path  - string, path to file or directory
-// * stats - object, result of fs.stat
-//
-// Returns boolean
-var dotRe = /\..*\.(sw[px])$|\~$|\.subl.*\.tmp/;
-FSWatcher.prototype._isIgnored = function(path, stats) {
-  if (this.options.atomic && dotRe.test(path)) return true;
-
-  if (!this._userIgnored) {
-    var cwd = this.options.cwd;
-    var ignored = this.options.ignored;
-    if (cwd && ignored) {
-      ignored = ignored.map(function (path) {
-        if (typeof path !== 'string') return path;
-        return isAbsolute(path) ? path : sysPath.join(cwd, path);
-      });
-    }
-    var paths = arrify(ignored)
-      .filter(function(path) {
-        return typeof path === 'string' && !isGlob(path);
-      }).map(function(path) {
-        return path + '/**';
-      });
-    this._userIgnored = anymatch(
-      this._globIgnored.concat(ignored).concat(paths)
-    );
-  }
-
-  return this._userIgnored([path, stats]);
-};
-
-// Private method: Provides a set of common helpers and properties relating to
-// symlink and glob handling
-//
-// * path - string, file, directory, or glob pattern being watched
-// * depth - int, at any depth > 0, this isn't a glob
-//
-// Returns object containing helpers for this path
-var replacerRe = /^\.[\/\\]/;
-FSWatcher.prototype._getWatchHelpers = function(path, depth) {
-  path = path.replace(replacerRe, '');
-  var watchPath = depth || !isGlob(path) ? path : globParent(path);
-  var fullWatchPath = sysPath.resolve(watchPath);
-  var hasGlob = watchPath !== path;
-  var globFilter = hasGlob ? anymatch(path) : false;
-  var follow = this.options.followSymlinks;
-  var globSymlink = hasGlob && follow ? null : false;
-
-  var checkGlobSymlink = function(entry) {
-    // only need to resolve once
-    // first entry should always have entry.parentDir === ''
-    if (globSymlink == null) {
-      globSymlink = entry.fullParentDir === fullWatchPath ? false : {
-        realPath: entry.fullParentDir,
-        linkPath: fullWatchPath
-      };
-    }
-
-    if (globSymlink) {
-      return entry.fullPath.replace(globSymlink.realPath, globSymlink.linkPath);
-    }
-
-    return entry.fullPath;
-  };
-
-  var entryPath = function(entry) {
-    return sysPath.join(watchPath,
-      sysPath.relative(watchPath, checkGlobSymlink(entry))
-    );
-  };
-
-  var filterPath = function(entry) {
-    if (entry.stat && entry.stat.isSymbolicLink()) return filterDir(entry);
-    var resolvedPath = entryPath(entry);
-    return (!hasGlob || globFilter(resolvedPath)) &&
-      this._isntIgnored(resolvedPath, entry.stat) &&
-      (this.options.ignorePermissionErrors ||
-        this._hasReadPermissions(entry.stat));
-  }.bind(this);
-
-  var getDirParts = function(path) {
-    if (!hasGlob) return false;
-    var parts = sysPath.relative(watchPath, path).split(/[\/\\]/);
-    return parts;
-  };
-
-  var dirParts = getDirParts(path);
-  if (dirParts && dirParts.length > 1) dirParts.pop();
-  var unmatchedGlob;
-
-  var filterDir = function(entry) {
-    if (hasGlob) {
-      var entryParts = getDirParts(checkGlobSymlink(entry));
-      var globstar = false;
-      unmatchedGlob = !dirParts.every(function(part, i) {
-        if (part === '**') globstar = true;
-        return globstar || !entryParts[i] || anymatch(part, entryParts[i]);
-      });
-    }
-    return !unmatchedGlob && this._isntIgnored(entryPath(entry), entry.stat);
-  }.bind(this);
-
-  return {
-    followSymlinks: follow,
-    statMethod: follow ? 'stat' : 'lstat',
-    path: path,
-    watchPath: watchPath,
-    entryPath: entryPath,
-    hasGlob: hasGlob,
-    globFilter: globFilter,
-    filterPath: filterPath,
-    filterDir: filterDir
-  };
-};
-
-// Directory helpers
-// -----------------
-
-// Private method: Provides directory tracking objects
-//
-// * directory - string, path of the directory
-//
-// Returns the directory's tracking object
-FSWatcher.prototype._getWatchedDir = function(directory) {
-  var dir = sysPath.resolve(directory);
-  var watcherRemove = this._remove.bind(this);
-  if (!(dir in this._watched)) this._watched[dir] = {
-    _items: Object.create(null),
-    add: function(item) {
-      if (item !== '.') this._items[item] = true;
-    },
-    remove: function(item) {
-      delete this._items[item];
-      if (!this.children().length) {
-        fs.readdir(dir, function(err) {
-          if (err) watcherRemove(sysPath.dirname(dir), sysPath.basename(dir));
-        });
-      }
-    },
-    has: function(item) {return item in this._items;},
-    children: function() {return Object.keys(this._items);}
-  };
-  return this._watched[dir];
-};
-
-// File helpers
-// ------------
-
-// Private method: Check for read permissions
-// Based on this answer on SO: http://stackoverflow.com/a/11781404/1358405
-//
-// * stats - object, result of fs.stat
-//
-// Returns boolean
-FSWatcher.prototype._hasReadPermissions = function(stats) {
-  return Boolean(4 & parseInt(((stats && stats.mode) & 0x1ff).toString(8)[0], 10));
-};
-
-// Private method: Handles emitting unlink events for
-// files and directories, and via recursion, for
-// files and directories within directories that are unlinked
-//
-// * directory - string, directory within which the following item is located
-// * item      - string, base path of item/directory
-//
-// Returns nothing
-FSWatcher.prototype._remove = function(directory, item) {
-  // if what is being deleted is a directory, get that directory's paths
-  // for recursive deleting and cleaning of watched object
-  // if it is not a directory, nestedDirectoryChildren will be empty array
-  var path = sysPath.join(directory, item);
-  var fullPath = sysPath.resolve(path);
-  var isDirectory = this._watched[path] || this._watched[fullPath];
-
-  // prevent duplicate handling in case of arriving here nearly simultaneously
-  // via multiple paths (such as _handleFile and _handleDir)
-  if (!this._throttle('remove', path, 100)) return;
-
-  // if the only watched file is removed, watch for its return
-  var watchedDirs = Object.keys(this._watched);
-  if (!isDirectory && !this.options.useFsEvents && watchedDirs.length === 1) {
-    this.add(directory, item, true);
-  }
-
-  // This will create a new entry in the watched object in either case
-  // so we got to do the directory check beforehand
-  var nestedDirectoryChildren = this._getWatchedDir(path).children();
-
-  // Recursively remove children directories / files.
-  nestedDirectoryChildren.forEach(function(nestedItem) {
-    this._remove(path, nestedItem);
-  }, this);
-
-  // Check if item was on the watched list and remove it
-  var parent = this._getWatchedDir(directory);
-  var wasTracked = parent.has(item);
-  parent.remove(item);
-
-  // If we wait for this file to be fully written, cancel the wait.
-  var relPath = path;
-  if (this.options.cwd) relPath = sysPath.relative(this.options.cwd, path);
-  if (this.options.awaitWriteFinish && this._pendingWrites[relPath]) {
-    var event = this._pendingWrites[relPath].cancelWait();
-    if (event === 'add') return;
-  }
-
-  // The Entry will either be a directory that just got removed
-  // or a bogus entry to a file, in either case we have to remove it
-  delete this._watched[path];
-  delete this._watched[fullPath];
-  var eventName = isDirectory ? 'unlinkDir' : 'unlink';
-  if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path);
-
-  // Avoid conflicts if we later create another file with the same name
-  if (!this.options.useFsEvents) {
-    this._closePath(path);
-  }
-};
-
-FSWatcher.prototype._closePath = function(path) {
-  if (!this._closers[path]) return;
-  this._closers[path]();
-  delete this._closers[path];
-  this._getWatchedDir(sysPath.dirname(path)).remove(sysPath.basename(path));
-}
-
-// Public method: Adds paths to be watched on an existing FSWatcher instance
-
-// * paths     - string or array of strings, file/directory paths and/or globs
-// * _origAdd  - private boolean, for handling non-existent paths to be watched
-// * _internal - private boolean, indicates a non-user add
-
-// Returns an instance of FSWatcher for chaining.
-FSWatcher.prototype.add = function(paths, _origAdd, _internal) {
-  var cwd = this.options.cwd;
-  this.closed = false;
-  paths = flatten(arrify(paths));
-
-  if (!paths.every(isString)) {
-    throw new TypeError('Non-string provided as watch path: ' + paths);
-  }
-
-  if (cwd) paths = paths.map(function(path) {
-    if (isAbsolute(path)) {
-      return path;
-    } else if (path[0] === '!') {
-      return '!' + sysPath.join(cwd, path.substring(1));
-    } else {
-      return sysPath.join(cwd, path);
-    }
-  });
-
-  // set aside negated glob strings
-  paths = paths.filter(function(path) {
-    if (path[0] === '!') {
-      this._ignoredPaths[path.substring(1)] = true;
-    } else {
-      // if a path is being added that was previously ignored, stop ignoring it
-      delete this._ignoredPaths[path];
-      delete this._ignoredPaths[path + '/**'];
-
-      // reset the cached userIgnored anymatch fn
-      // to make ignoredPaths changes effective
-      this._userIgnored = null;
-
-      return true;
-    }
-  }, this);
-
-  if (this.options.useFsEvents && FsEventsHandler.canUse()) {
-    if (!this._readyCount) this._readyCount = paths.length;
-    if (this.options.persistent) this._readyCount *= 2;
-    paths.forEach(this._addToFsEvents, this);
-  } else {
-    if (!this._readyCount) this._readyCount = 0;
-    this._readyCount += paths.length;
-    asyncEach(paths, function(path, next) {
-      this._addToNodeFs(path, !_internal, 0, 0, _origAdd, function(err, res) {
-        if (res) this._emitReady();
-        next(err, res);
-      }.bind(this));
-    }.bind(this), function(error, results) {
-      results.forEach(function(item) {
-        if (!item) return;
-        this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item));
-      }, this);
-    }.bind(this));
-  }
-
-  return this;
-};
-
-// Public method: Close watchers or start ignoring events from specified paths.
-
-// * paths     - string or array of strings, file/directory paths and/or globs
-
-// Returns instance of FSWatcher for chaining.
-FSWatcher.prototype.unwatch = function(paths) {
-  if (this.closed) return this;
-  paths = flatten(arrify(paths));
-
-  paths.forEach(function(path) {
-    // convert to absolute path unless relative path already matches
-    if (!isAbsolute(path) && !this._closers[path]) {
-      if (this.options.cwd) path = sysPath.join(this.options.cwd, path);
-      path = sysPath.resolve(path);
-    }
-
-    this._closePath(path);
-
-    this._ignoredPaths[path] = true;
-    if (path in this._watched) {
-      this._ignoredPaths[path + '/**'] = true;
-    }
-
-    // reset the cached userIgnored anymatch fn
-    // to make ignoredPaths changes effective
-    this._userIgnored = null;
-  }, this);
-
-  return this;
-};
-
-// Public method: Close watchers and remove all listeners from watched paths.
-
-// Returns instance of FSWatcher for chaining.
-FSWatcher.prototype.close = function() {
-  if (this.closed) return this;
-
-  this.closed = true;
-  Object.keys(this._closers).forEach(function(watchPath) {
-    this._closers[watchPath]();
-    delete this._closers[watchPath];
-  }, this);
-  this._watched = Object.create(null);
-
-  this.removeAllListeners();
-  return this;
-};
-
-// Public method: Expose list of watched paths
-
-// Returns object w/ dir paths as keys and arrays of contained paths as values.
-FSWatcher.prototype.getWatched = function() {
-  var watchList = {};
-  Object.keys(this._watched).forEach(function(dir) {
-    var key = this.options.cwd ? sysPath.relative(this.options.cwd, dir) : dir;
-    watchList[key || '.'] = Object.keys(this._watched[dir]._items).sort();
-  }.bind(this));
-  return watchList;
-};
-
-// Attach watch handler prototype methods
-function importHandler(handler) {
-  Object.keys(handler.prototype).forEach(function(method) {
-    FSWatcher.prototype[method] = handler.prototype[method];
-  });
-}
-importHandler(NodeFsHandler);
-if (FsEventsHandler.canUse()) importHandler(FsEventsHandler);
-
-// Export FSWatcher class
-exports.FSWatcher = FSWatcher;
-
-// Public function: Instantiates watcher with paths to be tracked.
-
-// * paths     - string or array of strings, file/directory paths and/or globs
-// * options   - object, chokidar options
-
-// Returns an instance of FSWatcher for chaining.
-exports.watch = function(paths, options) {
-  return new FSWatcher(options).add(paths);
-};

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/chokidar/lib/fsevents-handler.js
----------------------------------------------------------------------
diff --git a/node_modules/chokidar/lib/fsevents-handler.js b/node_modules/chokidar/lib/fsevents-handler.js
deleted file mode 100644
index dbf6ade..0000000
--- a/node_modules/chokidar/lib/fsevents-handler.js
+++ /dev/null
@@ -1,396 +0,0 @@
-'use strict';
-
-var fs = require('fs');
-var sysPath = require('path');
-var readdirp = require('readdirp');
-var fsevents;
-try { fsevents = require('fsevents'); } catch (error) {}
-
-// fsevents instance helper functions
-
-// object to hold per-process fsevents instances
-// (may be shared across chokidar FSWatcher instances)
-var FSEventsWatchers = Object.create(null);
-
-// Threshold of duplicate path prefixes at which to start
-// consolidating going forward
-var consolidateThreshhold = 10;
-
-// Private function: Instantiates the fsevents interface
-
-// * path       - string, path to be watched
-// * callback   - function, called when fsevents is bound and ready
-
-// Returns new fsevents instance
-function createFSEventsInstance(path, callback) {
-  return (new fsevents(path)).on('fsevent', callback).start();
-}
-
-// Private function: Instantiates the fsevents interface or binds listeners
-// to an existing one covering the same file tree
-
-// * path       - string, path to be watched
-// * realPath   - string, real path (in case of symlinks)
-// * listener   - function, called when fsevents emits events
-// * rawEmitter - function, passes data to listeners of the 'raw' event
-
-// Returns close function
-function setFSEventsListener(path, realPath, listener, rawEmitter) {
-  var watchPath = sysPath.extname(path) ? sysPath.dirname(path) : path;
-  var watchContainer;
-  var parentPath = sysPath.dirname(watchPath);
-
-  // If we've accumulated a substantial number of paths that
-  // could have been consolidated by watching one directory
-  // above the current one, create a watcher on the parent
-  // path instead, so that we do consolidate going forward.
-  if (couldConsolidate(parentPath)) {
-    watchPath = parentPath;
-  }
-
-  var resolvedPath = sysPath.resolve(path);
-  var hasSymlink = resolvedPath !== realPath;
-  function filteredListener(fullPath, flags, info) {
-    if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath);
-    if (
-      fullPath === resolvedPath ||
-      !fullPath.indexOf(resolvedPath + sysPath.sep)
-    ) listener(fullPath, flags, info);
-  }
-
-  // check if there is already a watcher on a parent path
-  // modifies `watchPath` to the parent path when it finds a match
-  function watchedParent() {
-    return Object.keys(FSEventsWatchers).some(function(watchedPath) {
-      // condition is met when indexOf returns 0
-      if (!realPath.indexOf(sysPath.resolve(watchedPath) + sysPath.sep)) {
-        watchPath = watchedPath;
-        return true;
-      }
-    });
-  }
-
-  if (watchPath in FSEventsWatchers || watchedParent()) {
-    watchContainer = FSEventsWatchers[watchPath];
-    watchContainer.listeners.push(filteredListener);
-  } else {
-    watchContainer = FSEventsWatchers[watchPath] = {
-      listeners: [filteredListener],
-      rawEmitters: [rawEmitter],
-      watcher: createFSEventsInstance(watchPath, function(fullPath, flags) {
-        var info = fsevents.getInfo(fullPath, flags);
-        watchContainer.listeners.forEach(function(listener) {
-          listener(fullPath, flags, info);
-        });
-        watchContainer.rawEmitters.forEach(function(emitter) {
-          emitter(info.event, fullPath, info);
-        });
-      })
-    };
-  }
-  var listenerIndex = watchContainer.listeners.length - 1;
-
-  // removes this instance's listeners and closes the underlying fsevents
-  // instance if there are no more listeners left
-  return function close() {
-    delete watchContainer.listeners[listenerIndex];
-    delete watchContainer.rawEmitters[listenerIndex];
-    if (!Object.keys(watchContainer.listeners).length) {
-      watchContainer.watcher.stop();
-      delete FSEventsWatchers[watchPath];
-    }
-  };
-}
-
-// Decide whether or not we should start a new higher-level
-// parent watcher
-function couldConsolidate(path) {
-  var keys = Object.keys(FSEventsWatchers);
-  var count = 0;
-
-  for (var i = 0, len = keys.length; i < len; ++i) {
-    var watchPath = keys[i];
-    if (watchPath.indexOf(path) === 0) {
-      count++;
-      if (count >= consolidateThreshhold) {
-        return true;
-      }
-    }
-  }
-
-  return false;
-}
-
-// returns boolean indicating whether fsevents can be used
-function canUse() {
-  return fsevents && Object.keys(FSEventsWatchers).length < 128;
-}
-
-// determines subdirectory traversal levels from root to path
-function depth(path, root) {
-  var i = 0;
-  while (!path.indexOf(root) && (path = sysPath.dirname(path)) !== root) i++;
-  return i;
-}
-
-// fake constructor for attaching fsevents-specific prototype methods that
-// will be copied to FSWatcher's prototype
-function FsEventsHandler() {}
-
-// Private method: Handle symlinks encountered during directory scan
-
-// * watchPath  - string, file/dir path to be watched with fsevents
-// * realPath   - string, real path (in case of symlinks)
-// * transform  - function, path transformer
-// * globFilter - function, path filter in case a glob pattern was provided
-
-// Returns close function for the watcher instance
-FsEventsHandler.prototype._watchWithFsEvents =
-function(watchPath, realPath, transform, globFilter) {
-  if (this._isIgnored(watchPath)) return;
-  var watchCallback = function(fullPath, flags, info) {
-    if (
-      this.options.depth !== undefined &&
-      depth(fullPath, realPath) > this.options.depth
-    ) return;
-    var path = transform(sysPath.join(
-      watchPath, sysPath.relative(watchPath, fullPath)
-    ));
-    if (globFilter && !globFilter(path)) return;
-    // ensure directories are tracked
-    var parent = sysPath.dirname(path);
-    var item = sysPath.basename(path);
-    var watchedDir = this._getWatchedDir(
-      info.type === 'directory' ? path : parent
-    );
-    var checkIgnored = function(stats) {
-      if (this._isIgnored(path, stats)) {
-        this._ignoredPaths[path] = true;
-        if (stats && stats.isDirectory()) {
-          this._ignoredPaths[path + '/**/*'] = true;
-        }
-        return true;
-      } else {
-        delete this._ignoredPaths[path];
-        delete this._ignoredPaths[path + '/**/*'];
-      }
-    }.bind(this);
-
-    var handleEvent = function(event) {
-      if (checkIgnored()) return;
-
-      if (event === 'unlink') {
-        // suppress unlink events on never before seen files
-        if (info.type === 'directory' || watchedDir.has(item)) {
-          this._remove(parent, item);
-        }
-      } else {
-        if (event === 'add') {
-          // track new directories
-          if (info.type === 'directory') this._getWatchedDir(path);
-
-          if (info.type === 'symlink' && this.options.followSymlinks) {
-            // push symlinks back to the top of the stack to get handled
-            var curDepth = this.options.depth === undefined ?
-              undefined : depth(fullPath, realPath) + 1;
-            return this._addToFsEvents(path, false, true, curDepth);
-          } else {
-            // track new paths
-            // (other than symlinks being followed, which will be tracked soon)
-            this._getWatchedDir(parent).add(item);
-          }
-        }
-        var eventName = info.type === 'directory' ? event + 'Dir' : event;
-        this._emit(eventName, path);
-        if (eventName === 'addDir') this._addToFsEvents(path, false, true);
-      }
-    }.bind(this);
-
-    function addOrChange() {
-      handleEvent(watchedDir.has(item) ? 'change' : 'add');
-    }
-    function checkFd() {
-      fs.open(path, 'r', function(error, fd) {
-        if (fd) fs.close(fd);
-        error && error.code !== 'EACCES' ?
-          handleEvent('unlink') : addOrChange();
-      });
-    }
-    // correct for wrong events emitted
-    var wrongEventFlags = [
-      69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912
-    ];
-    if (wrongEventFlags.indexOf(flags) !== -1 || info.event === 'unknown') {
-      if (typeof this.options.ignored === 'function') {
-        fs.stat(path, function(error, stats) {
-          if (checkIgnored(stats)) return;
-          stats ? addOrChange() : handleEvent('unlink');
-        });
-      } else {
-        checkFd();
-      }
-    } else {
-      switch (info.event) {
-      case 'created':
-      case 'modified':
-        return addOrChange();
-      case 'deleted':
-      case 'moved':
-        return checkFd();
-      }
-    }
-  }.bind(this);
-
-  var closer = setFSEventsListener(
-    watchPath,
-    realPath,
-    watchCallback,
-    this.emit.bind(this, 'raw')
-  );
-
-  this._emitReady();
-  return closer;
-};
-
-// Private method: Handle symlinks encountered during directory scan
-
-// * linkPath   - string, path to symlink
-// * fullPath   - string, absolute path to the symlink
-// * transform  - function, pre-existing path transformer
-// * curDepth   - int, level of subdirectories traversed to where symlink is
-
-// Returns nothing
-FsEventsHandler.prototype._handleFsEventsSymlink =
-function(linkPath, fullPath, transform, curDepth) {
-  // don't follow the same symlink more than once
-  if (this._symlinkPaths[fullPath]) return;
-  else this._symlinkPaths[fullPath] = true;
-
-  this._readyCount++;
-
-  fs.realpath(linkPath, function(error, linkTarget) {
-    if (this._handleError(error) || this._isIgnored(linkTarget)) {
-      return this._emitReady();
-    }
-
-    this._readyCount++;
-
-    // add the linkTarget for watching with a wrapper for transform
-    // that causes emitted paths to incorporate the link's path
-    this._addToFsEvents(linkTarget || linkPath, function(path) {
-      var dotSlash = '.' + sysPath.sep;
-      var aliasedPath = linkPath;
-      if (linkTarget && linkTarget !== dotSlash) {
-        aliasedPath = path.replace(linkTarget, linkPath);
-      } else if (path !== dotSlash) {
-        aliasedPath = sysPath.join(linkPath, path);
-      }
-      return transform(aliasedPath);
-    }, false, curDepth);
-  }.bind(this));
-};
-
-// Private method: Handle added path with fsevents
-
-// * path       - string, file/directory path or glob pattern
-// * transform  - function, converts working path to what the user expects
-// * forceAdd   - boolean, ensure add is emitted
-// * priorDepth - int, level of subdirectories already traversed
-
-// Returns nothing
-FsEventsHandler.prototype._addToFsEvents =
-function(path, transform, forceAdd, priorDepth) {
-
-  // applies transform if provided, otherwise returns same value
-  var processPath = typeof transform === 'function' ?
-    transform : function(val) { return val; };
-
-  var emitAdd = function(newPath, stats) {
-    var pp = processPath(newPath);
-    var isDir = stats.isDirectory();
-    var dirObj = this._getWatchedDir(sysPath.dirname(pp));
-    var base = sysPath.basename(pp);
-
-    // ensure empty dirs get tracked
-    if (isDir) this._getWatchedDir(pp);
-
-    if (dirObj.has(base)) return;
-    dirObj.add(base);
-
-    if (!this.options.ignoreInitial || forceAdd === true) {
-      this._emit(isDir ? 'addDir' : 'add', pp, stats);
-    }
-  }.bind(this);
-
-  var wh = this._getWatchHelpers(path);
-
-  // evaluate what is at the path we're being asked to watch
-  fs[wh.statMethod](wh.watchPath, function(error, stats) {
-    if (this._handleError(error) || this._isIgnored(wh.watchPath, stats)) {
-      this._emitReady();
-      return this._emitReady();
-    }
-
-    if (stats.isDirectory()) {
-      // emit addDir unless this is a glob parent
-      if (!wh.globFilter) emitAdd(processPath(path), stats);
-
-      // don't recurse further if it would exceed depth setting
-      if (priorDepth && priorDepth > this.options.depth) return;
-
-      // scan the contents of the dir
-      readdirp({
-        root: wh.watchPath,
-        entryType: 'all',
-        fileFilter: wh.filterPath,
-        directoryFilter: wh.filterDir,
-        lstat: true,
-        depth: this.options.depth - (priorDepth || 0)
-      }).on('data', function(entry) {
-        // need to check filterPath on dirs b/c filterDir is less restrictive
-        if (entry.stat.isDirectory() && !wh.filterPath(entry)) return;
-
-        var joinedPath = sysPath.join(wh.watchPath, entry.path);
-        var fullPath = entry.fullPath;
-
-        if (wh.followSymlinks && entry.stat.isSymbolicLink()) {
-          // preserve the current depth here since it can't be derived from
-          // real paths past the symlink
-          var curDepth = this.options.depth === undefined ?
-            undefined : depth(joinedPath, sysPath.resolve(wh.watchPath)) + 1;
-
-          this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth);
-        } else {
-          emitAdd(joinedPath, entry.stat);
-        }
-      }.bind(this)).on('error', function() {
-        // Ignore readdirp errors
-      }).on('end', this._emitReady);
-    } else {
-      emitAdd(wh.watchPath, stats);
-      this._emitReady();
-    }
-  }.bind(this));
-
-  if (this.options.persistent && forceAdd !== true) {
-    var initWatch = function(error, realPath) {
-      var closer = this._watchWithFsEvents(
-        wh.watchPath,
-        sysPath.resolve(realPath || wh.watchPath),
-        processPath,
-        wh.globFilter
-      );
-      if (closer) this._closers[path] = closer;
-    }.bind(this);
-
-    if (typeof transform === 'function') {
-      // realpath has already been resolved
-      initWatch();
-    } else {
-      fs.realpath(wh.watchPath, initWatch);
-    }
-  }
-};
-
-module.exports = FsEventsHandler;
-module.exports.canUse = canUse;

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/chokidar/lib/nodefs-handler.js
----------------------------------------------------------------------
diff --git a/node_modules/chokidar/lib/nodefs-handler.js b/node_modules/chokidar/lib/nodefs-handler.js
deleted file mode 100644
index 9d05b6f..0000000
--- a/node_modules/chokidar/lib/nodefs-handler.js
+++ /dev/null
@@ -1,481 +0,0 @@
-'use strict';
-
-var fs = require('fs');
-var sysPath = require('path');
-var readdirp = require('readdirp');
-var isBinaryPath = require('is-binary-path');
-
-// fs.watch helpers
-
-// object to hold per-process fs.watch instances
-// (may be shared across chokidar FSWatcher instances)
-var FsWatchInstances = Object.create(null);
-
-// Private function: Instantiates the fs.watch interface
-
-// * path       - string, path to be watched
-// * options    - object, options to be passed to fs.watch
-// * listener   - function, main event handler
-// * errHandler - function, handler which emits info about errors
-// * emitRaw    - function, handler which emits raw event data
-
-// Returns new fsevents instance
-function createFsWatchInstance(path, options, listener, errHandler, emitRaw) {
-  var handleEvent = function(rawEvent, evPath) {
-    listener(path);
-    emitRaw(rawEvent, evPath, {watchedPath: path});
-
-    // emit based on events occuring for files from a directory's watcher in
-    // case the file's watcher misses it (and rely on throttling to de-dupe)
-    if (evPath && path !== evPath) {
-      fsWatchBroadcast(
-        sysPath.resolve(path, evPath), 'listeners', sysPath.join(path, evPath)
-      );
-    }
-  };
-  try {
-    return fs.watch(path, options, handleEvent);
-  } catch (error) {
-    errHandler(error);
-  }
-}
-
-// Private function: Helper for passing fs.watch event data to a
-// collection of listeners
-
-// * fullPath   - string, absolute path bound to the fs.watch instance
-// * type       - string, listener type
-// * val[1..3]  - arguments to be passed to listeners
-
-// Returns nothing
-function fsWatchBroadcast(fullPath, type, val1, val2, val3) {
-  if (!FsWatchInstances[fullPath]) return;
-  FsWatchInstances[fullPath][type].forEach(function(listener) {
-    listener(val1, val2, val3);
-  });
-}
-
-// Private function: Instantiates the fs.watch interface or binds listeners
-// to an existing one covering the same file system entry
-
-// * path       - string, path to be watched
-// * fullPath   - string, absolute path
-// * options    - object, options to be passed to fs.watch
-// * handlers   - object, container for event listener functions
-
-// Returns close function
-function setFsWatchListener(path, fullPath, options, handlers) {
-  var listener = handlers.listener;
-  var errHandler = handlers.errHandler;
-  var rawEmitter = handlers.rawEmitter;
-  var container = FsWatchInstances[fullPath];
-  var watcher;
-  if (!options.persistent) {
-    watcher = createFsWatchInstance(
-      path, options, listener, errHandler, rawEmitter
-    );
-    return watcher.close.bind(watcher);
-  }
-  if (!container) {
-    watcher = createFsWatchInstance(
-      path,
-      options,
-      fsWatchBroadcast.bind(null, fullPath, 'listeners'),
-      errHandler, // no need to use broadcast here
-      fsWatchBroadcast.bind(null, fullPath, 'rawEmitters')
-    );
-    if (!watcher) return;
-    var broadcastErr = fsWatchBroadcast.bind(null, fullPath, 'errHandlers');
-    watcher.on('error', function(error) {
-      // Workaround for https://github.com/joyent/node/issues/4337
-      if (process.platform === 'win32' && error.code === 'EPERM') {
-        fs.open(path, 'r', function(err, fd) {
-          if (fd) fs.close(fd);
-          if (!err) broadcastErr(error);
-        });
-      } else {
-        broadcastErr(error);
-      }
-    });
-    container = FsWatchInstances[fullPath] = {
-      listeners: [listener],
-      errHandlers: [errHandler],
-      rawEmitters: [rawEmitter],
-      watcher: watcher
-    };
-  } else {
-    container.listeners.push(listener);
-    container.errHandlers.push(errHandler);
-    container.rawEmitters.push(rawEmitter);
-  }
-  var listenerIndex = container.listeners.length - 1;
-
-  // removes this instance's listeners and closes the underlying fs.watch
-  // instance if there are no more listeners left
-  return function close() {
-    delete container.listeners[listenerIndex];
-    delete container.errHandlers[listenerIndex];
-    delete container.rawEmitters[listenerIndex];
-    if (!Object.keys(container.listeners).length) {
-      container.watcher.close();
-      delete FsWatchInstances[fullPath];
-    }
-  };
-}
-
-// fs.watchFile helpers
-
-// object to hold per-process fs.watchFile instances
-// (may be shared across chokidar FSWatcher instances)
-var FsWatchFileInstances = Object.create(null);
-
-// Private function: Instantiates the fs.watchFile interface or binds listeners
-// to an existing one covering the same file system entry
-
-// * path       - string, path to be watched
-// * fullPath   - string, absolute path
-// * options    - object, options to be passed to fs.watchFile
-// * handlers   - object, container for event listener functions
-
-// Returns close function
-function setFsWatchFileListener(path, fullPath, options, handlers) {
-  var listener = handlers.listener;
-  var rawEmitter = handlers.rawEmitter;
-  var container = FsWatchFileInstances[fullPath];
-  var listeners = [];
-  var rawEmitters = [];
-  if (
-    container && (
-      container.options.persistent < options.persistent ||
-      container.options.interval > options.interval
-    )
-  ) {
-    // "Upgrade" the watcher to persistence or a quicker interval.
-    // This creates some unlikely edge case issues if the user mixes
-    // settings in a very weird way, but solving for those cases
-    // doesn't seem worthwhile for the added complexity.
-    listeners = container.listeners;
-    rawEmitters = container.rawEmitters;
-    fs.unwatchFile(fullPath);
-    container = false;
-  }
-  if (!container) {
-    listeners.push(listener);
-    rawEmitters.push(rawEmitter);
-    container = FsWatchFileInstances[fullPath] = {
-      listeners: listeners,
-      rawEmitters: rawEmitters,
-      options: options,
-      watcher: fs.watchFile(fullPath, options, function(curr, prev) {
-        container.rawEmitters.forEach(function(rawEmitter) {
-          rawEmitter('change', fullPath, {curr: curr, prev: prev});
-        });
-        var currmtime = curr.mtime.getTime();
-        if (curr.size !== prev.size || currmtime > prev.mtime.getTime() || currmtime === 0) {
-          container.listeners.forEach(function(listener) {
-            listener(path, curr);
-          });
-        }
-      })
-    };
-  } else {
-    container.listeners.push(listener);
-    container.rawEmitters.push(rawEmitter);
-  }
-  var listenerIndex = container.listeners.length - 1;
-
-  // removes this instance's listeners and closes the underlying fs.watchFile
-  // instance if there are no more listeners left
-  return function close() {
-    delete container.listeners[listenerIndex];
-    delete container.rawEmitters[listenerIndex];
-    if (!Object.keys(container.listeners).length) {
-      fs.unwatchFile(fullPath);
-      delete FsWatchFileInstances[fullPath];
-    }
-  };
-}
-
-// fake constructor for attaching nodefs-specific prototype methods that
-// will be copied to FSWatcher's prototype
-function NodeFsHandler() {}
-
-// Private method: Watch file for changes with fs.watchFile or fs.watch.
-
-// * path     - string, path to file or directory.
-// * listener - function, to be executed on fs change.
-
-// Returns close function for the watcher instance
-NodeFsHandler.prototype._watchWithNodeFs =
-function(path, listener) {
-  var directory = sysPath.dirname(path);
-  var basename = sysPath.basename(path);
-  var parent = this._getWatchedDir(directory);
-  parent.add(basename);
-  var absolutePath = sysPath.resolve(path);
-  var options = {persistent: this.options.persistent};
-  if (!listener) listener = Function.prototype; // empty function
-
-  var closer;
-  if (this.options.usePolling) {
-    options.interval = this.enableBinaryInterval && isBinaryPath(basename) ?
-      this.options.binaryInterval : this.options.interval;
-    closer = setFsWatchFileListener(path, absolutePath, options, {
-      listener: listener,
-      rawEmitter: this.emit.bind(this, 'raw')
-    });
-  } else {
-    closer = setFsWatchListener(path, absolutePath, options, {
-      listener: listener,
-      errHandler: this._handleError.bind(this),
-      rawEmitter: this.emit.bind(this, 'raw')
-    });
-  }
-  return closer;
-};
-
-// Private method: Watch a file and emit add event if warranted
-
-// * file       - string, the file's path
-// * stats      - object, result of fs.stat
-// * initialAdd - boolean, was the file added at watch instantiation?
-// * callback   - function, called when done processing as a newly seen file
-
-// Returns close function for the watcher instance
-NodeFsHandler.prototype._handleFile =
-function(file, stats, initialAdd, callback) {
-  var dirname = sysPath.dirname(file);
-  var basename = sysPath.basename(file);
-  var parent = this._getWatchedDir(dirname);
-
-  // if the file is already being watched, do nothing
-  if (parent.has(basename)) return callback();
-
-  // kick off the watcher
-  var closer = this._watchWithNodeFs(file, function(path, newStats) {
-    if (!this._throttle('watch', file, 5)) return;
-    if (!newStats || newStats && newStats.mtime.getTime() === 0) {
-      fs.stat(file, function(error, newStats) {
-        // Fix issues where mtime is null but file is still present
-        if (error) {
-          this._remove(dirname, basename);
-        } else {
-          this._emit('change', file, newStats);
-        }
-      }.bind(this));
-    // add is about to be emitted if file not already tracked in parent
-    } else if (parent.has(basename)) {
-      this._emit('change', file, newStats);
-    }
-  }.bind(this));
-
-  // emit an add event if we're supposed to
-  if (!(initialAdd && this.options.ignoreInitial)) {
-    if (!this._throttle('add', file, 0)) return;
-    this._emit('add', file, stats);
-  }
-
-  if (callback) callback();
-  return closer;
-};
-
-// Private method: Handle symlinks encountered while reading a dir
-
-// * entry      - object, entry object returned by readdirp
-// * directory  - string, path of the directory being read
-// * path       - string, path of this item
-// * item       - string, basename of this item
-
-// Returns true if no more processing is needed for this entry.
-NodeFsHandler.prototype._handleSymlink =
-function(entry, directory, path, item) {
-  var full = entry.fullPath;
-  var dir = this._getWatchedDir(directory);
-
-  if (!this.options.followSymlinks) {
-    // watch symlink directly (don't follow) and detect changes
-    this._readyCount++;
-    fs.realpath(path, function(error, linkPath) {
-      if (dir.has(item)) {
-        if (this._symlinkPaths[full] !== linkPath) {
-          this._symlinkPaths[full] = linkPath;
-          this._emit('change', path, entry.stat);
-        }
-      } else {
-        dir.add(item);
-        this._symlinkPaths[full] = linkPath;
-        this._emit('add', path, entry.stat);
-      }
-      this._emitReady();
-    }.bind(this));
-    return true;
-  }
-
-  // don't follow the same symlink more than once
-  if (this._symlinkPaths[full]) return true;
-  else this._symlinkPaths[full] = true;
-};
-
-// Private method: Read directory to add / remove files from `@watched` list
-// and re-read it on change.
-
-// * dir        - string, fs path.
-// * stats      - object, result of fs.stat
-// * initialAdd - boolean, was the file added at watch instantiation?
-// * depth      - int, depth relative to user-supplied path
-// * target     - string, child path actually targeted for watch
-// * wh         - object, common watch helpers for this path
-// * callback   - function, called when dir scan is complete
-
-// Returns close function for the watcher instance
-NodeFsHandler.prototype._handleDir =
-function(dir, stats, initialAdd, depth, target, wh, callback) {
-  var parentDir = this._getWatchedDir(sysPath.dirname(dir));
-  var tracked = parentDir.has(sysPath.basename(dir));
-  if (!(initialAdd && this.options.ignoreInitial) && !target && !tracked) {
-    if (!wh.hasGlob || wh.globFilter(dir)) this._emit('addDir', dir, stats);
-  }
-
-  // ensure dir is tracked (harmless if redundant)
-  parentDir.add(sysPath.basename(dir));
-  this._getWatchedDir(dir);
-
-  var read = function(directory, initialAdd, done) {
-    // Normalize the directory name on Windows
-    directory = sysPath.join(directory, '');
-
-    if (!wh.hasGlob) {
-      var throttler = this._throttle('readdir', directory, 1000);
-      if (!throttler) return;
-    }
-
-    var previous = this._getWatchedDir(wh.path);
-    var current = [];
-
-    readdirp({
-      root: directory,
-      entryType: 'all',
-      fileFilter: wh.filterPath,
-      directoryFilter: wh.filterDir,
-      depth: 0,
-      lstat: true
-    }).on('data', function(entry) {
-      var item = entry.path;
-      var path = sysPath.join(directory, item);
-      current.push(item);
-
-      if (entry.stat.isSymbolicLink() &&
-        this._handleSymlink(entry, directory, path, item)) return;
-
-      // Files that present in current directory snapshot
-      // but absent in previous are added to watch list and
-      // emit `add` event.
-      if (item === target || !target && !previous.has(item)) {
-        this._readyCount++;
-
-        // ensure relativeness of path is preserved in case of watcher reuse
-        path = sysPath.join(dir, sysPath.relative(dir, path));
-
-        this._addToNodeFs(path, initialAdd, wh, depth + 1);
-      }
-    }.bind(this)).on('end', function() {
-      if (throttler) throttler.clear();
-      if (done) done();
-
-      // Files that absent in current directory snapshot
-      // but present in previous emit `remove` event
-      // and are removed from @watched[directory].
-      previous.children().filter(function(item) {
-        return item !== directory &&
-          current.indexOf(item) === -1 &&
-          // in case of intersecting globs;
-          // a path may have been filtered out of this readdir, but
-          // shouldn't be removed because it matches a different glob
-          (!wh.hasGlob || wh.filterPath({
-            fullPath: sysPath.resolve(directory, item)
-          }));
-      }).forEach(function(item) {
-        this._remove(directory, item);
-      }, this);
-    }.bind(this)).on('error', this._handleError.bind(this));
-  }.bind(this);
-
-  var closer;
-
-  if (this.options.depth == null || depth <= this.options.depth) {
-    if (!target) read(dir, initialAdd, callback);
-    closer = this._watchWithNodeFs(dir, function(dirPath, stats) {
-      // if current directory is removed, do nothing
-      if (stats && stats.mtime.getTime() === 0) return;
-
-      read(dirPath, false);
-    });
-  } else {
-    callback();
-  }
-  return closer;
-};
-
-// Private method: Handle added file, directory, or glob pattern.
-// Delegates call to _handleFile / _handleDir after checks.
-
-// * path       - string, path to file or directory.
-// * initialAdd - boolean, was the file added at watch instantiation?
-// * depth      - int, depth relative to user-supplied path
-// * target     - string, child path actually targeted for watch
-// * callback   - function, indicates whether the path was found or not
-
-// Returns nothing
-NodeFsHandler.prototype._addToNodeFs =
-function(path, initialAdd, priorWh, depth, target, callback) {
-  if (!callback) callback = Function.prototype;
-  var ready = this._emitReady;
-  if (this._isIgnored(path) || this.closed) {
-    ready();
-    return callback(null, false);
-  }
-
-  var wh = this._getWatchHelpers(path, depth);
-  if (!wh.hasGlob && priorWh) {
-    wh.hasGlob = priorWh.hasGlob;
-    wh.globFilter = priorWh.globFilter;
-    wh.filterPath = priorWh.filterPath;
-    wh.filterDir = priorWh.filterDir;
-  }
-
-  // evaluate what is at the path we're being asked to watch
-  fs[wh.statMethod](wh.watchPath, function(error, stats) {
-    if (this._handleError(error)) return callback(null, path);
-    if (this._isIgnored(wh.watchPath, stats)) {
-      ready();
-      return callback(null, false);
-    }
-
-    var initDir = function(dir, target) {
-      return this._handleDir(dir, stats, initialAdd, depth, target, wh, ready);
-    }.bind(this);
-
-    var closer;
-    if (stats.isDirectory()) {
-      closer = initDir(wh.watchPath, target);
-    } else if (stats.isSymbolicLink()) {
-      var parent = sysPath.dirname(wh.watchPath);
-      this._getWatchedDir(parent).add(wh.watchPath);
-      this._emit('add', wh.watchPath, stats);
-      closer = initDir(parent, path);
-
-      // preserve this symlink's target path
-      fs.realpath(path, function(error, targetPath) {
-        this._symlinkPaths[sysPath.resolve(path)] = targetPath;
-        ready();
-      }.bind(this));
-    } else {
-      closer = this._handleFile(wh.watchPath, stats, initialAdd, ready);
-    }
-
-    if (closer) this._closers[path] = closer;
-    callback(null, false);
-  }.bind(this));
-};
-
-module.exports = NodeFsHandler;

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/chokidar/package.json
----------------------------------------------------------------------
diff --git a/node_modules/chokidar/package.json b/node_modules/chokidar/package.json
deleted file mode 100644
index 93873f2..0000000
--- a/node_modules/chokidar/package.json
+++ /dev/null
@@ -1,124 +0,0 @@
-{
-  "_args": [
-    [
-      {
-        "raw": "chokidar@^1.5.2",
-        "scope": null,
-        "escapedName": "chokidar",
-        "name": "chokidar",
-        "rawSpec": "^1.5.2",
-        "spec": ">=1.5.2 <2.0.0",
-        "type": "range"
-      },
-      "/Users/yueguo/repo.site/incubator-griffin-site/node_modules/hexo-fs"
-    ]
-  ],
-  "_from": "chokidar@>=1.5.2 <2.0.0",
-  "_id": "chokidar@1.6.1",
-  "_inCache": true,
-  "_installable": true,
-  "_location": "/chokidar",
-  "_nodeVersion": "6.6.0",
-  "_npmOperationalInternal": {
-    "host": "packages-12-west.internal.npmjs.com",
-    "tmp": "tmp/chokidar-1.6.1.tgz_1476470196311_0.5785318606067449"
-  },
-  "_npmUser": {
-    "name": "paulmillr",
-    "email": "paul@paulmillr.com"
-  },
-  "_npmVersion": "3.10.7",
-  "_phantomChildren": {},
-  "_requested": {
-    "raw": "chokidar@^1.5.2",
-    "scope": null,
-    "escapedName": "chokidar",
-    "name": "chokidar",
-    "rawSpec": "^1.5.2",
-    "spec": ">=1.5.2 <2.0.0",
-    "type": "range"
-  },
-  "_requiredBy": [
-    "/hexo-fs",
-    "/nunjucks"
-  ],
-  "_resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.6.1.tgz",
-  "_shasum": "2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2",
-  "_shrinkwrap": null,
-  "_spec": "chokidar@^1.5.2",
-  "_where": "/Users/yueguo/repo.site/incubator-griffin-site/node_modules/hexo-fs",
-  "author": {
-    "name": "Paul Miller",
-    "url": "http://paulmillr.com"
-  },
-  "bugs": {
-    "url": "http://github.com/paulmillr/chokidar/issues"
-  },
-  "dependencies": {
-    "anymatch": "^1.3.0",
-    "async-each": "^1.0.0",
-    "fsevents": "^1.0.0",
-    "glob-parent": "^2.0.0",
-    "inherits": "^2.0.1",
-    "is-binary-path": "^1.0.0",
-    "is-glob": "^2.0.0",
-    "path-is-absolute": "^1.0.0",
-    "readdirp": "^2.0.0"
-  },
-  "description": "A neat wrapper around node.js fs.watch / fs.watchFile / fsevents.",
-  "devDependencies": {
-    "chai": "^3.2.0",
-    "coveralls": "^2.11.2",
-    "graceful-fs": "4.1.4",
-    "istanbul": "^0.3.20",
-    "mocha": "^2.0.0",
-    "rimraf": "^2.4.3",
-    "sinon": "^1.10.3",
-    "sinon-chai": "^2.6.0"
-  },
-  "directories": {},
-  "dist": {
-    "shasum": "2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2",
-    "tarball": "https://registry.npmjs.org/chokidar/-/chokidar-1.6.1.tgz"
-  },
-  "files": [
-    "index.js",
-    "lib/"
-  ],
-  "gitHead": "c08145c5368fac6441773e621da9db215cc0d3b2",
-  "homepage": "https://github.com/paulmillr/chokidar",
-  "keywords": [
-    "fs",
-    "watch",
-    "watchFile",
-    "watcher",
-    "watching",
-    "file",
-    "fsevents"
-  ],
-  "license": "MIT",
-  "maintainers": [
-    {
-      "name": "paulmillr",
-      "email": "paul@paulmillr.com"
-    },
-    {
-      "name": "es128",
-      "email": "elan.shanker+npm@gmail.com"
-    }
-  ],
-  "name": "chokidar",
-  "optionalDependencies": {
-    "fsevents": "^1.0.0"
-  },
-  "readme": "ERROR: No README data found!",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/paulmillr/chokidar.git"
-  },
-  "scripts": {
-    "ci-test": "istanbul cover _mocha && cat ./coverage/lcov.info | coveralls",
-    "test": "istanbul test node_modules/mocha/bin/_mocha"
-  },
-  "version": "1.6.1"
-}

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/cliui/CHANGELOG.md
----------------------------------------------------------------------
diff --git a/node_modules/cliui/CHANGELOG.md b/node_modules/cliui/CHANGELOG.md
deleted file mode 100644
index ef6a35e..0000000
--- a/node_modules/cliui/CHANGELOG.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
-
-<a name="3.2.0"></a>
-# [3.2.0](https://github.com/yargs/cliui/compare/v3.1.2...v3.2.0) (2016-04-11)
-
-
-### Bug Fixes
-
-* reduces tarball size ([acc6c33](https://github.com/yargs/cliui/commit/acc6c33))
-
-### Features
-
-* adds standard-version for release management ([ff84e32](https://github.com/yargs/cliui/commit/ff84e32))

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/cliui/LICENSE.txt
----------------------------------------------------------------------
diff --git a/node_modules/cliui/LICENSE.txt b/node_modules/cliui/LICENSE.txt
deleted file mode 100644
index c7e2747..0000000
--- a/node_modules/cliui/LICENSE.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-Copyright (c) 2015, Contributors
-
-Permission to use, copy, modify, and/or distribute this software
-for any purpose with or without fee is hereby granted, provided
-that the above copyright notice and this permission notice
-appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
-OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
-LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
-OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/cliui/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cliui/README.md b/node_modules/cliui/README.md
deleted file mode 100644
index 028392c..0000000
--- a/node_modules/cliui/README.md
+++ /dev/null
@@ -1,110 +0,0 @@
-# cliui
-
-[![Build Status](https://travis-ci.org/yargs/cliui.svg)](https://travis-ci.org/yargs/cliui)
-[![Coverage Status](https://coveralls.io/repos/yargs/cliui/badge.svg?branch=)](https://coveralls.io/r/yargs/cliui?branch=)
-[![NPM version](https://img.shields.io/npm/v/cliui.svg)](https://www.npmjs.com/package/cliui)
-[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version)
-
-easily create complex multi-column command-line-interfaces.
-
-## Example
-
-```js
-var ui = require('cliui')({
-  width: 80
-})
-
-ui.div('Usage: $0 [command] [options]')
-
-ui.div({
-  text: 'Options:',
-  padding: [2, 0, 2, 0]
-})
-
-ui.div(
-  {
-    text: "-f, --file",
-    width: 20,
-    padding: [0, 4, 0, 4]
-  },
-  {
-    text: "the file to load." +
-      chalk.green("(if this description is long it wraps).")
-    ,
-    width: 20
-  },
-  {
-    text: chalk.red("[required]"),
-    align: 'right'
-  }
-)
-
-console.log(ui.toString())
-```
-
-<img width="500" src="screenshot.png">
-
-## Layout DSL
-
-cliui exposes a simple layout DSL:
-
-If you create a single `ui.row`, passing a string rather than an
-object:
-
-* `\n`: characters will be interpreted as new rows.
-* `\t`: characters will be interpreted as new columns.
-* `\s`: characters will be interpreted as padding.
-
-**as an example...**
-
-```js
-var ui = require('./')({
-  width: 60
-})
-
-ui.div(
-  'Usage: node ./bin/foo.js\n' +
-  '  <regex>\t  provide a regex\n' +
-  '  <glob>\t  provide a glob\t [required]'
-)
-
-console.log(ui.toString())
-```
-
-**will output:**
-
-```shell
-Usage: node ./bin/foo.js
-  <regex>  provide a regex
-  <glob>   provide a glob          [required]
-```
-
-## Methods
-
-```js
-cliui = require('cliui')
-```
-
-### cliui({width: integer})
-
-Specify the maximum width of the UI being generated.
-
-### cliui({wrap: boolean})
-
-Enable or disable the wrapping of text in a column.
-
-### cliui.div(column, column, column)
-
-Create a row with any number of columns, a column
-can either be a string, or an object with the following
-options:
-
-* **width:** the width of a column.
-* **align:** alignment, `right` or `center`.
-* **padding:** `[top, right, bottom, left]`.
-* **border:** should a border be placed around the div?
-
-### cliui.span(column, column, column)
-
-Similar to `div`, except the next row will be appended without
-a new line being created.

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/cliui/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cliui/index.js b/node_modules/cliui/index.js
deleted file mode 100644
index e501e78..0000000
--- a/node_modules/cliui/index.js
+++ /dev/null
@@ -1,316 +0,0 @@
-var stringWidth = require('string-width')
-var stripAnsi = require('strip-ansi')
-var wrap = require('wrap-ansi')
-var align = {
-  right: alignRight,
-  center: alignCenter
-}
-var top = 0
-var right = 1
-var bottom = 2
-var left = 3
-
-function UI (opts) {
-  this.width = opts.width
-  this.wrap = opts.wrap
-  this.rows = []
-}
-
-UI.prototype.span = function () {
-  var cols = this.div.apply(this, arguments)
-  cols.span = true
-}
-
-UI.prototype.div = function () {
-  if (arguments.length === 0) this.div('')
-  if (this.wrap && this._shouldApplyLayoutDSL.apply(this, arguments)) {
-    return this._applyLayoutDSL(arguments[0])
-  }
-
-  var cols = []
-
-  for (var i = 0, arg; (arg = arguments[i]) !== undefined; i++) {
-    if (typeof arg === 'string') cols.push(this._colFromString(arg))
-    else cols.push(arg)
-  }
-
-  this.rows.push(cols)
-  return cols
-}
-
-UI.prototype._shouldApplyLayoutDSL = function () {
-  return arguments.length === 1 && typeof arguments[0] === 'string' &&
-    /[\t\n]/.test(arguments[0])
-}
-
-UI.prototype._applyLayoutDSL = function (str) {
-  var _this = this
-  var rows = str.split('\n')
-  var leftColumnWidth = 0
-
-  // simple heuristic for layout, make sure the
-  // second column lines up along the left-hand.
-  // don't allow the first column to take up more
-  // than 50% of the screen.
-  rows.forEach(function (row) {
-    var columns = row.split('\t')
-    if (columns.length > 1 && stringWidth(columns[0]) > leftColumnWidth) {
-      leftColumnWidth = Math.min(
-        Math.floor(_this.width * 0.5),
-        stringWidth(columns[0])
-      )
-    }
-  })
-
-  // generate a table:
-  //  replacing ' ' with padding calculations.
-  //  using the algorithmically generated width.
-  rows.forEach(function (row) {
-    var columns = row.split('\t')
-    _this.div.apply(_this, columns.map(function (r, i) {
-      return {
-        text: r.trim(),
-        padding: _this._measurePadding(r),
-        width: (i === 0 && columns.length > 1) ? leftColumnWidth : undefined
-      }
-    }))
-  })
-
-  return this.rows[this.rows.length - 1]
-}
-
-UI.prototype._colFromString = function (str) {
-  return {
-    text: str,
-    padding: this._measurePadding(str)
-  }
-}
-
-UI.prototype._measurePadding = function (str) {
-  // measure padding without ansi escape codes
-  var noAnsi = stripAnsi(str)
-  return [0, noAnsi.match(/\s*$/)[0].length, 0, noAnsi.match(/^\s*/)[0].length]
-}
-
-UI.prototype.toString = function () {
-  var _this = this
-  var lines = []
-
-  _this.rows.forEach(function (row, i) {
-    _this.rowToString(row, lines)
-  })
-
-  // don't display any lines with the
-  // hidden flag set.
-  lines = lines.filter(function (line) {
-    return !line.hidden
-  })
-
-  return lines.map(function (line) {
-    return line.text
-  }).join('\n')
-}
-
-UI.prototype.rowToString = function (row, lines) {
-  var _this = this
-  var padding
-  var rrows = this._rasterize(row)
-  var str = ''
-  var ts
-  var width
-  var wrapWidth
-
-  rrows.forEach(function (rrow, r) {
-    str = ''
-    rrow.forEach(function (col, c) {
-      ts = '' // temporary string used during alignment/padding.
-      width = row[c].width // the width with padding.
-      wrapWidth = _this._negatePadding(row[c]) // the width without padding.
-
-      ts += col
-
-      for (var i = 0; i < wrapWidth - stringWidth(col); i++) {
-        ts += ' '
-      }
-
-      // align the string within its column.
-      if (row[c].align && row[c].align !== 'left' && _this.wrap) {
-        ts = align[row[c].align](ts, wrapWidth)
-        if (stringWidth(ts) < wrapWidth) ts += new Array(width - stringWidth(ts)).join(' ')
-      }
-
-      // apply border and padding to string.
-      padding = row[c].padding || [0, 0, 0, 0]
-      if (padding[left]) str += new Array(padding[left] + 1).join(' ')
-      str += addBorder(row[c], ts, '| ')
-      str += ts
-      str += addBorder(row[c], ts, ' |')
-      if (padding[right]) str += new Array(padding[right] + 1).join(' ')
-
-      // if prior row is span, try to render the
-      // current row on the prior line.
-      if (r === 0 && lines.length > 0) {
-        str = _this._renderInline(str, lines[lines.length - 1])
-      }
-    })
-
-    // remove trailing whitespace.
-    lines.push({
-      text: str.replace(/ +$/, ''),
-      span: row.span
-    })
-  })
-
-  return lines
-}
-
-function addBorder (col, ts, style) {
-  if (col.border) {
-    if (/[.']-+[.']/.test(ts)) return ''
-    else if (ts.trim().length) return style
-    else return '  '
-  }
-  return ''
-}
-
-// if the full 'source' can render in
-// the target line, do so.
-UI.prototype._renderInline = function (source, previousLine) {
-  var leadingWhitespace = source.match(/^ */)[0].length
-  var target = previousLine.text
-  var targetTextWidth = stringWidth(target.trimRight())
-
-  if (!previousLine.span) return source
-
-  // if we're not applying wrapping logic,
-  // just always append to the span.
-  if (!this.wrap) {
-    previousLine.hidden = true
-    return target + source
-  }
-
-  if (leadingWhitespace < targetTextWidth) return source
-
-  previousLine.hidden = true
-
-  return target.trimRight() + new Array(leadingWhitespace - targetTextWidth + 1).join(' ') + source.trimLeft()
-}
-
-UI.prototype._rasterize = function (row) {
-  var _this = this
-  var i
-  var rrow
-  var rrows = []
-  var widths = this._columnWidths(row)
-  var wrapped
-
-  // word wrap all columns, and create
-  // a data-structure that is easy to rasterize.
-  row.forEach(function (col, c) {
-    // leave room for left and right padding.
-    col.width = widths[c]
-    if (_this.wrap) wrapped = wrap(col.text, _this._negatePadding(col), {hard: true}).split('\n')
-    else wrapped = col.text.split('\n')
-
-    if (col.border) {
-      wrapped.unshift('.' + new Array(_this._negatePadding(col) + 3).join('-') + '.')
-      wrapped.push("'" + new Array(_this._negatePadding(col) + 3).join('-') + "'")
-    }
-
-    // add top and bottom padding.
-    if (col.padding) {
-      for (i = 0; i < (col.padding[top] || 0); i++) wrapped.unshift('')
-      for (i = 0; i < (col.padding[bottom] || 0); i++) wrapped.push('')
-    }
-
-    wrapped.forEach(function (str, r) {
-      if (!rrows[r]) rrows.push([])
-
-      rrow = rrows[r]
-
-      for (var i = 0; i < c; i++) {
-        if (rrow[i] === undefined) rrow.push('')
-      }
-      rrow.push(str)
-    })
-  })
-
-  return rrows
-}
-
-UI.prototype._negatePadding = function (col) {
-  var wrapWidth = col.width
-  if (col.padding) wrapWidth -= (col.padding[left] || 0) + (col.padding[right] || 0)
-  if (col.border) wrapWidth -= 4
-  return wrapWidth
-}
-
-UI.prototype._columnWidths = function (row) {
-  var _this = this
-  var widths = []
-  var unset = row.length
-  var unsetWidth
-  var remainingWidth = this.width
-
-  // column widths can be set in config.
-  row.forEach(function (col, i) {
-    if (col.width) {
-      unset--
-      widths[i] = col.width
-      remainingWidth -= col.width
-    } else {
-      widths[i] = undefined
-    }
-  })
-
-  // any unset widths should be calculated.
-  if (unset) unsetWidth = Math.floor(remainingWidth / unset)
-  widths.forEach(function (w, i) {
-    if (!_this.wrap) widths[i] = row[i].width || stringWidth(row[i].text)
-    else if (w === undefined) widths[i] = Math.max(unsetWidth, _minWidth(row[i]))
-  })
-
-  return widths
-}
-
-// calculates the minimum width of
-// a column, based on padding preferences.
-function _minWidth (col) {
-  var padding = col.padding || []
-  var minWidth = 1 + (padding[left] || 0) + (padding[right] || 0)
-  if (col.border) minWidth += 4
-  return minWidth
-}
-
-function alignRight (str, width) {
-  str = str.trim()
-  var padding = ''
-  var strWidth = stringWidth(str)
-
-  if (strWidth < width) {
-    padding = new Array(width - strWidth + 1).join(' ')
-  }
-
-  return padding + str
-}
-
-function alignCenter (str, width) {
-  str = str.trim()
-  var padding = ''
-  var strWidth = stringWidth(str.trim())
-
-  if (strWidth < width) {
-    padding = new Array(parseInt((width - strWidth) / 2, 10) + 1).join(' ')
-  }
-
-  return padding + str
-}
-
-module.exports = function (opts) {
-  opts = opts || {}
-
-  return new UI({
-    width: (opts || {}).width || 80,
-    wrap: typeof opts.wrap === 'boolean' ? opts.wrap : true
-  })
-}

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/cliui/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cliui/package.json b/node_modules/cliui/package.json
deleted file mode 100644
index b268adf..0000000
--- a/node_modules/cliui/package.json
+++ /dev/null
@@ -1,132 +0,0 @@
-{
-  "_args": [
-    [
-      {
-        "raw": "cliui@^3.0.3",
-        "scope": null,
-        "escapedName": "cliui",
-        "name": "cliui",
-        "rawSpec": "^3.0.3",
-        "spec": ">=3.0.3 <4.0.0",
-        "type": "range"
-      },
-      "/Users/yueguo/repo.site/incubator-griffin-site/node_modules/yargs"
-    ]
-  ],
-  "_from": "cliui@>=3.0.3 <4.0.0",
-  "_id": "cliui@3.2.0",
-  "_inCache": true,
-  "_installable": true,
-  "_location": "/cliui",
-  "_nodeVersion": "5.1.0",
-  "_npmOperationalInternal": {
-    "host": "packages-12-west.internal.npmjs.com",
-    "tmp": "tmp/cliui-3.2.0.tgz_1460342854008_0.8861493801232427"
-  },
-  "_npmUser": {
-    "name": "bcoe",
-    "email": "ben@npmjs.com"
-  },
-  "_npmVersion": "3.3.12",
-  "_phantomChildren": {},
-  "_requested": {
-    "raw": "cliui@^3.0.3",
-    "scope": null,
-    "escapedName": "cliui",
-    "name": "cliui",
-    "rawSpec": "^3.0.3",
-    "spec": ">=3.0.3 <4.0.0",
-    "type": "range"
-  },
-  "_requiredBy": [
-    "/yargs"
-  ],
-  "_resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
-  "_shasum": "120601537a916d29940f934da3b48d585a39213d",
-  "_shrinkwrap": null,
-  "_spec": "cliui@^3.0.3",
-  "_where": "/Users/yueguo/repo.site/incubator-griffin-site/node_modules/yargs",
-  "author": {
-    "name": "Ben Coe",
-    "email": "ben@npmjs.com"
-  },
-  "bugs": {
-    "url": "https://github.com/yargs/cliui/issues"
-  },
-  "config": {
-    "blanket": {
-      "pattern": [
-        "index.js"
-      ],
-      "data-cover-never": [
-        "node_modules",
-        "test"
-      ],
-      "output-reporter": "spec"
-    }
-  },
-  "dependencies": {
-    "string-width": "^1.0.1",
-    "strip-ansi": "^3.0.1",
-    "wrap-ansi": "^2.0.0"
-  },
-  "description": "easily create complex multi-column command-line-interfaces",
-  "devDependencies": {
-    "chai": "^3.5.0",
-    "chalk": "^1.1.2",
-    "coveralls": "^2.11.8",
-    "mocha": "^2.4.5",
-    "nyc": "^6.4.0",
-    "standard": "^6.0.8",
-    "standard-version": "^2.1.2"
-  },
-  "directories": {},
-  "dist": {
-    "shasum": "120601537a916d29940f934da3b48d585a39213d",
-    "tarball": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz"
-  },
-  "files": [
-    "index.js"
-  ],
-  "gitHead": "75d62e9dfa77a0e0a9c3ac3b96b02baa294142ce",
-  "homepage": "https://github.com/yargs/cliui#readme",
-  "keywords": [
-    "cli",
-    "command-line",
-    "layout",
-    "design",
-    "console",
-    "wrap",
-    "table"
-  ],
-  "license": "ISC",
-  "main": "index.js",
-  "maintainers": [
-    {
-      "name": "bcoe",
-      "email": "ben@npmjs.com"
-    }
-  ],
-  "name": "cliui",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
-  "repository": {
-    "type": "git",
-    "url": "git+ssh://git@github.com/yargs/cliui.git"
-  },
-  "scripts": {
-    "coverage": "nyc --reporter=text-lcov mocha | coveralls",
-    "pretest": "standard",
-    "test": "nyc mocha",
-    "version": "standard-version"
-  },
-  "standard": {
-    "ignore": [
-      "**/example/**"
-    ],
-    "globals": [
-      "it"
-    ]
-  },
-  "version": "3.2.0"
-}

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/co/History.md
----------------------------------------------------------------------
diff --git a/node_modules/co/History.md b/node_modules/co/History.md
deleted file mode 100644
index 68fbb15..0000000
--- a/node_modules/co/History.md
+++ /dev/null
@@ -1,172 +0,0 @@
-4.6.0 / 2015-07-09
-==================
-
- * support passing the rest of the arguments to co into the generator
-
- ```js
- function *gen(...args) { }
- co(gen, ...args);
- ```
-
-4.5.0 / 2015-03-17
-==================
-
- * support regular functions (that return promises)
-
-4.4.0 / 2015-02-14
-==================
-
- * refactor `isGeneratorFunction`
- * expose generator function from `co.wrap()`
- * drop support for node < 0.12
-
-4.3.0 / 2015-02-05
-==================
-
- * check for generator functions in a ES5-transpiler-friendly way
-
-4.2.0 / 2015-01-20
-==================
-
- * support comparing generator functions with ES6 transpilers
-
-4.1.0 / 2014-12-26
-==================
-
- * fix memory leak #180
-
-4.0.2 / 2014-12-18
-==================
-
- * always return a global promise implementation
-
-4.0.1 / 2014-11-30
-==================
-
- * friendlier ES6 module exports
-
-4.0.0 / 2014-11-15
-==================
-
- * co now returns a promise and uses promises underneath
- * `co.wrap()` for wrapping generator functions
-
-3.1.0 / 2014-06-30
-==================
-
- * remove `setImmediate()` shim for node 0.8. semi-backwards breaking.
-   Users are expected to shim themselves. Also returns CommonJS browser support.
- * added key order preservation for objects. thanks @greim
- * replace `q` with `bluebird` in benchmarks and tests
-
-3.0.6 / 2014-05-03
-==================
-
- * add `setImmediate()` fallback to `process.nextTick`
- * remove duplicate code in toThunk
- * update thunkify
-
-3.0.5 / 2014-03-17
-==================
-
- * fix object/array test failure which tries to enumerate dates. Closes #98
- * fix final callback error propagation. Closes #92
-
-3.0.4 / 2014-02-17
-==================
-
- * fix toThunk object check regression. Closes #89
-
-3.0.3 / 2014-02-08
-==================
-
- * refactor: arrayToThunk @AutoSponge #88
-
-3.0.2 / 2014-01-01
-==================
-
- * fixed: nil arguments replaced with error fn
-
-3.0.1 / 2013-12-19
-==================
-
- * fixed: callback passed as an argument to generators
-
-3.0.0 / 2013-12-19
-==================
-
- * fixed: callback passed as an argument to generators
- * change: `co(function *(){})` now returns a reusable thunk
- * change: `this` must now be passed through the returned thunk, ex. `co(function *(){}).call(this)`
- * fix "generator already finished" errors
-
-2.3.0 / 2013-11-12
-==================
-
- * add `yield object` support
-
-2.2.0 / 2013-11-05
-==================
-
- * change: make the `isGenerator()` function more generic
-
-2.1.0 / 2013-10-21
-==================
-
- * add passing of arguments into the generator. closes #33.
-
-2.0.0 / 2013-10-14
-==================
-
- * remove callback in favour of thunk-only co(). Closes #30 [breaking change]
- * remove `co.wrap()` [breaking change]
-
-1.5.2 / 2013-09-02
-==================
-
- * fix: preserve receiver with co.wrap()
-
-1.5.1 / 2013-08-11
-==================
-
- * remove setImmediate() usage - ~110% perf increase. Closes #14
-
-0.5.0 / 2013-08-10
-==================
-
- * add receiver propagation support
- * examples: update streams.js example to use `http.get()` and streams2 API
-
-1.4.1 / 2013-07-01
-==================
-
- * fix gen.next(val) for latest v8. Closes #8
-
-1.4.0 / 2013-06-21
-==================
-
- * add promise support to joins
- * add `yield generatorFunction` support
- * add `yield generator` support
- * add nested join support
-
-1.3.0 / 2013-06-10
-==================
-
- * add passing of arguments
-
-1.2.1 / 2013-06-08
-==================
-
- * fix join() of zero thunks
-
-1.2.0 / 2013-06-08
-==================
-
- * add array yielding support. great suggestion by @domenic
-
-1.1.0 / 2013-06-06
-==================
-
- * add promise support
- * change nextTick to setImmediate

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/co/LICENSE
----------------------------------------------------------------------
diff --git a/node_modules/co/LICENSE b/node_modules/co/LICENSE
deleted file mode 100644
index 92faba5..0000000
--- a/node_modules/co/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2014 TJ Holowaychuk &lt;tj@vision-media.ca&gt;
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/co/Readme.md
----------------------------------------------------------------------
diff --git a/node_modules/co/Readme.md b/node_modules/co/Readme.md
deleted file mode 100644
index c1d4882..0000000
--- a/node_modules/co/Readme.md
+++ /dev/null
@@ -1,212 +0,0 @@
-# co
-
-[![Gitter][gitter-image]][gitter-url]
-[![NPM version][npm-image]][npm-url]
-[![Build status][travis-image]][travis-url]
-[![Test coverage][coveralls-image]][coveralls-url]
-[![Downloads][downloads-image]][downloads-url]
-
-  Generator based control flow goodness for nodejs and the browser,
-  using promises, letting you write non-blocking code in a nice-ish way.
-
-## Co v4
-
-  `co@4.0.0` has been released, which now relies on promises.
-  It is a stepping stone towards [ES7 async/await](https://github.com/lukehoban/ecmascript-asyncawait).
-  The primary API change is how `co()` is invoked.
-  Before, `co` returned a "thunk", which you then called with a callback and optional arguments.
-  Now, `co()` returns a promise.
-
-```js
-co(function* () {
-  var result = yield Promise.resolve(true);
-  return result;
-}).then(function (value) {
-  console.log(value);
-}, function (err) {
-  console.error(err.stack);
-});
-```
-
-  If you want to convert a `co`-generator-function into a regular function that returns a promise,
-  you now use `co.wrap(fn*)`.
-
-```js
-var fn = co.wrap(function* (val) {
-  return yield Promise.resolve(val);
-});
-
-fn(true).then(function (val) {
-
-});
-```
-
-## Platform Compatibility
-
-  `co@4+` requires a `Promise` implementation.
-  For versions of node `< 0.11` and for many older browsers,
-  you should/must include your own `Promise` polyfill.
-
-  When using node 0.11.x or greater, you must use the `--harmony-generators`
-  flag or just `--harmony` to get access to generators.
-
-  When using node 0.10.x and lower or browsers without generator support,
-  you must use [gnode](https://github.com/TooTallNate/gnode) and/or [regenerator](http://facebook.github.io/regenerator/).
-
-  io.js is supported out of the box, you can use `co` without flags or polyfills.
-
-## Installation
-
-```
-$ npm install co
-```
-
-## Associated libraries
-
-Any library that returns promises work well with `co`.
-
-- [mz](https://github.com/normalize/mz) - wrap all of node's code libraries as promises.
-
-View the [wiki](https://github.com/visionmedia/co/wiki) for more libraries.
-
-## Examples
-
-```js
-var co = require('co');
-
-co(function *(){
-  // yield any promise
-  var result = yield Promise.resolve(true);
-}).catch(onerror);
-
-co(function *(){
-  // resolve multiple promises in parallel
-  var a = Promise.resolve(1);
-  var b = Promise.resolve(2);
-  var c = Promise.resolve(3);
-  var res = yield [a, b, c];
-  console.log(res);
-  // => [1, 2, 3]
-}).catch(onerror);
-
-// errors can be try/catched
-co(function *(){
-  try {
-    yield Promise.reject(new Error('boom'));
-  } catch (err) {
-    console.error(err.message); // "boom"
- }
-}).catch(onerror);
-
-function onerror(err) {
-  // log any uncaught errors
-  // co will not throw any errors you do not handle!!!
-  // HANDLE ALL YOUR ERRORS!!!
-  console.error(err.stack);
-}
-```
-
-## Yieldables
-
-  The `yieldable` objects currently supported are:
-
-  - promises
-  - thunks (functions)
-  - array (parallel execution)
-  - objects (parallel execution)
-  - generators (delegation)
-  - generator functions (delegation)
-
-Nested `yieldable` objects are supported, meaning you can nest
-promises within objects within arrays, and so on!
-
-### Promises
-
-[Read more on promises!](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)
-
-### Thunks
-
-Thunks are functions that only have a single argument, a callback.
-Thunk support only remains for backwards compatibility and may
-be removed in future versions of `co`.
-
-### Arrays
-
-`yield`ing an array will resolve all the `yieldables` in parallel.
-
-```js
-co(function* () {
-  var res = yield [
-    Promise.resolve(1),
-    Promise.resolve(2),
-    Promise.resolve(3),
-  ];
-  console.log(res); // => [1, 2, 3]
-}).catch(onerror);
-```
-
-### Objects
-
-Just like arrays, objects resolve all `yieldable`s in parallel.
-
-```js
-co(function* () {
-  var res = yield {
-    1: Promise.resolve(1),
-    2: Promise.resolve(2),
-  };
-  console.log(res); // => { 1: 1, 2: 2 }
-}).catch(onerror);
-```
-
-### Generators and Generator Functions
-
-Any generator or generator function you can pass into `co`
-can be yielded as well. This should generally be avoided
-as we should be moving towards spec-compliant `Promise`s instead.
-
-## API
-
-### co(fn*).then( val => )
-
-Returns a promise that resolves a generator, generator function,
-or any function that returns a generator.
-
-```js
-co(function* () {
-  return yield Promise.resolve(true);
-}).then(function (val) {
-  console.log(val);
-}, function (err) {
-  console.error(err.stack);
-});
-```
-
-### var fn = co.wrap(fn*)
-
-Convert a generator into a regular function that returns a `Promise`.
-
-```js
-var fn = co.wrap(function* (val) {
-  return yield Promise.resolve(val);
-});
-
-fn(true).then(function (val) {
-
-});
-```
-
-## License
-
-  MIT
-
-[npm-image]: https://img.shields.io/npm/v/co.svg?style=flat-square
-[npm-url]: https://npmjs.org/package/co
-[travis-image]: https://img.shields.io/travis/tj/co.svg?style=flat-square
-[travis-url]: https://travis-ci.org/tj/co
-[coveralls-image]: https://img.shields.io/coveralls/tj/co.svg?style=flat-square
-[coveralls-url]: https://coveralls.io/r/tj/co
-[downloads-image]: http://img.shields.io/npm/dm/co.svg?style=flat-square
-[downloads-url]: https://npmjs.org/package/co
-[gitter-image]: https://badges.gitter.im/Join%20Chat.svg
-[gitter-url]: https://gitter.im/tj/co?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge