http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/amdefine/amdefine.js
----------------------------------------------------------------------
diff --git a/node_modules/amdefine/amdefine.js 
b/node_modules/amdefine/amdefine.js
new file mode 100644
index 0000000..ca830ba
--- /dev/null
+++ b/node_modules/amdefine/amdefine.js
@@ -0,0 +1,301 @@
+/** vim: et:ts=4:sw=4:sts=4
+ * @license amdefine 1.0.1 Copyright (c) 2011-2016, The Dojo Foundation All 
Rights Reserved.
+ * Available via the MIT or new BSD license.
+ * see: http://github.com/jrburke/amdefine for details
+ */
+
+/*jslint node: true */
+/*global module, process */
+'use strict';
+
+/**
+ * Creates a define for node.
+ * @param {Object} module the "module" object that is defined by Node for the
+ * current module.
+ * @param {Function} [requireFn]. Node's require function for the current 
module.
+ * It only needs to be passed in Node versions before 0.5, when module.require
+ * did not exist.
+ * @returns {Function} a define function that is usable for the current node
+ * module.
+ */
+function amdefine(module, requireFn) {
+    'use strict';
+    var defineCache = {},
+        loaderCache = {},
+        alreadyCalled = false,
+        path = require('path'),
+        makeRequire, stringRequire;
+
+    /**
+     * Trims the . and .. from an array of path segments.
+     * It will keep a leading path segment if a .. will become
+     * the first path segment, to help with module name lookups,
+     * which act like paths, but can be remapped. But the end result,
+     * all paths that use this function should look normalized.
+     * NOTE: this method MODIFIES the input array.
+     * @param {Array} ary the array of path segments.
+     */
+    function trimDots(ary) {
+        var i, part;
+        for (i = 0; ary[i]; i+= 1) {
+            part = ary[i];
+            if (part === '.') {
+                ary.splice(i, 1);
+                i -= 1;
+            } else if (part === '..') {
+                if (i === 1 && (ary[2] === '..' || ary[0] === '..')) {
+                    //End of the line. Keep at least one non-dot
+                    //path segment at the front so it can be mapped
+                    //correctly to disk. Otherwise, there is likely
+                    //no path mapping for a path starting with '..'.
+                    //This can still fail, but catches the most reasonable
+                    //uses of ..
+                    break;
+                } else if (i > 0) {
+                    ary.splice(i - 1, 2);
+                    i -= 2;
+                }
+            }
+        }
+    }
+
+    function normalize(name, baseName) {
+        var baseParts;
+
+        //Adjust any relative paths.
+        if (name && name.charAt(0) === '.') {
+            //If have a base name, try to normalize against it,
+            //otherwise, assume it is a top-level require that will
+            //be relative to baseUrl in the end.
+            if (baseName) {
+                baseParts = baseName.split('/');
+                baseParts = baseParts.slice(0, baseParts.length - 1);
+                baseParts = baseParts.concat(name.split('/'));
+                trimDots(baseParts);
+                name = baseParts.join('/');
+            }
+        }
+
+        return name;
+    }
+
+    /**
+     * Create the normalize() function passed to a loader plugin's
+     * normalize method.
+     */
+    function makeNormalize(relName) {
+        return function (name) {
+            return normalize(name, relName);
+        };
+    }
+
+    function makeLoad(id) {
+        function load(value) {
+            loaderCache[id] = value;
+        }
+
+        load.fromText = function (id, text) {
+            //This one is difficult because the text can/probably uses
+            //define, and any relative paths and requires should be relative
+            //to that id was it would be found on disk. But this would require
+            //bootstrapping a module/require fairly deeply from node core.
+            //Not sure how best to go about that yet.
+            throw new Error('amdefine does not implement load.fromText');
+        };
+
+        return load;
+    }
+
+    makeRequire = function (systemRequire, exports, module, relId) {
+        function amdRequire(deps, callback) {
+            if (typeof deps === 'string') {
+                //Synchronous, single module require('')
+                return stringRequire(systemRequire, exports, module, deps, 
relId);
+            } else {
+                //Array of dependencies with a callback.
+
+                //Convert the dependencies to modules.
+                deps = deps.map(function (depName) {
+                    return stringRequire(systemRequire, exports, module, 
depName, relId);
+                });
+
+                //Wait for next tick to call back the require call.
+                if (callback) {
+                    process.nextTick(function () {
+                        callback.apply(null, deps);
+                    });
+                }
+            }
+        }
+
+        amdRequire.toUrl = function (filePath) {
+            if (filePath.indexOf('.') === 0) {
+                return normalize(filePath, path.dirname(module.filename));
+            } else {
+                return filePath;
+            }
+        };
+
+        return amdRequire;
+    };
+
+    //Favor explicit value, passed in if the module wants to support Node 0.4.
+    requireFn = requireFn || function req() {
+        return module.require.apply(module, arguments);
+    };
+
+    function runFactory(id, deps, factory) {
+        var r, e, m, result;
+
+        if (id) {
+            e = loaderCache[id] = {};
+            m = {
+                id: id,
+                uri: __filename,
+                exports: e
+            };
+            r = makeRequire(requireFn, e, m, id);
+        } else {
+            //Only support one define call per file
+            if (alreadyCalled) {
+                throw new Error('amdefine with no module ID cannot be called 
more than once per file.');
+            }
+            alreadyCalled = true;
+
+            //Use the real variables from node
+            //Use module.exports for exports, since
+            //the exports in here is amdefine exports.
+            e = module.exports;
+            m = module;
+            r = makeRequire(requireFn, e, m, module.id);
+        }
+
+        //If there are dependencies, they are strings, so need
+        //to convert them to dependency values.
+        if (deps) {
+            deps = deps.map(function (depName) {
+                return r(depName);
+            });
+        }
+
+        //Call the factory with the right dependencies.
+        if (typeof factory === 'function') {
+            result = factory.apply(m.exports, deps);
+        } else {
+            result = factory;
+        }
+
+        if (result !== undefined) {
+            m.exports = result;
+            if (id) {
+                loaderCache[id] = m.exports;
+            }
+        }
+    }
+
+    stringRequire = function (systemRequire, exports, module, id, relId) {
+        //Split the ID by a ! so that
+        var index = id.indexOf('!'),
+            originalId = id,
+            prefix, plugin;
+
+        if (index === -1) {
+            id = normalize(id, relId);
+
+            //Straight module lookup. If it is one of the special dependencies,
+            //deal with it, otherwise, delegate to node.
+            if (id === 'require') {
+                return makeRequire(systemRequire, exports, module, relId);
+            } else if (id === 'exports') {
+                return exports;
+            } else if (id === 'module') {
+                return module;
+            } else if (loaderCache.hasOwnProperty(id)) {
+                return loaderCache[id];
+            } else if (defineCache[id]) {
+                runFactory.apply(null, defineCache[id]);
+                return loaderCache[id];
+            } else {
+                if(systemRequire) {
+                    return systemRequire(originalId);
+                } else {
+                    throw new Error('No module with ID: ' + id);
+                }
+            }
+        } else {
+            //There is a plugin in play.
+            prefix = id.substring(0, index);
+            id = id.substring(index + 1, id.length);
+
+            plugin = stringRequire(systemRequire, exports, module, prefix, 
relId);
+
+            if (plugin.normalize) {
+                id = plugin.normalize(id, makeNormalize(relId));
+            } else {
+                //Normalize the ID normally.
+                id = normalize(id, relId);
+            }
+
+            if (loaderCache[id]) {
+                return loaderCache[id];
+            } else {
+                plugin.load(id, makeRequire(systemRequire, exports, module, 
relId), makeLoad(id), {});
+
+                return loaderCache[id];
+            }
+        }
+    };
+
+    //Create a define function specific to the module asking for amdefine.
+    function define(id, deps, factory) {
+        if (Array.isArray(id)) {
+            factory = deps;
+            deps = id;
+            id = undefined;
+        } else if (typeof id !== 'string') {
+            factory = id;
+            id = deps = undefined;
+        }
+
+        if (deps && !Array.isArray(deps)) {
+            factory = deps;
+            deps = undefined;
+        }
+
+        if (!deps) {
+            deps = ['require', 'exports', 'module'];
+        }
+
+        //Set up properties for this module. If an ID, then use
+        //internal cache. If no ID, then use the external variables
+        //for this node module.
+        if (id) {
+            //Put the module in deep freeze until there is a
+            //require call for it.
+            defineCache[id] = [id, deps, factory];
+        } else {
+            runFactory(id, deps, factory);
+        }
+    }
+
+    //define.require, which has access to all the values in the
+    //cache. Useful for AMD modules that all have IDs in the file,
+    //but need to finally export a value to node based on one of those
+    //IDs.
+    define.require = function (id) {
+        if (loaderCache[id]) {
+            return loaderCache[id];
+        }
+
+        if (defineCache[id]) {
+            runFactory.apply(null, defineCache[id]);
+            return loaderCache[id];
+        }
+    };
+
+    define.amd = {};
+
+    return define;
+}
+
+module.exports = amdefine;

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/amdefine/intercept.js
----------------------------------------------------------------------
diff --git a/node_modules/amdefine/intercept.js 
b/node_modules/amdefine/intercept.js
new file mode 100644
index 0000000..771a983
--- /dev/null
+++ b/node_modules/amdefine/intercept.js
@@ -0,0 +1,36 @@
+/*jshint node: true */
+var inserted,
+    Module = require('module'),
+    fs = require('fs'),
+    existingExtFn = Module._extensions['.js'],
+    amdefineRegExp = /amdefine\.js/;
+
+inserted  = "if (typeof define !== 'function') {var define = 
require('amdefine')(module)}";
+
+//From the node/lib/module.js source:
+function stripBOM(content) {
+    // Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
+    // because the buffer-to-string conversion in `fs.readFileSync()`
+    // translates it to FEFF, the UTF-16 BOM.
+    if (content.charCodeAt(0) === 0xFEFF) {
+        content = content.slice(1);
+    }
+    return content;
+}
+
+//Also adapted from the node/lib/module.js source:
+function intercept(module, filename) {
+    var content = stripBOM(fs.readFileSync(filename, 'utf8'));
+
+    if (!amdefineRegExp.test(module.id)) {
+        content = inserted + content;
+    }
+
+    module._compile(content, filename);
+}
+
+intercept._id = 'amdefine/intercept';
+
+if (!existingExtFn._id || existingExtFn._id !== intercept._id) {
+    Module._extensions['.js'] = intercept;
+}

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/amdefine/package.json
----------------------------------------------------------------------
diff --git a/node_modules/amdefine/package.json 
b/node_modules/amdefine/package.json
new file mode 100644
index 0000000..5463bb5
--- /dev/null
+++ b/node_modules/amdefine/package.json
@@ -0,0 +1,90 @@
+{
+  "_args": [
+    [
+      {
+        "raw": "amdefine@>=0.0.4",
+        "scope": null,
+        "escapedName": "amdefine",
+        "name": "amdefine",
+        "rawSpec": ">=0.0.4",
+        "spec": ">=0.0.4",
+        "type": "range"
+      },
+      "/Users/yueguo/tmp/griffin-site/node_modules/source-map"
+    ]
+  ],
+  "_from": "amdefine@>=0.0.4",
+  "_id": "amdefine@1.0.1",
+  "_inCache": true,
+  "_installable": true,
+  "_location": "/amdefine",
+  "_nodeVersion": "6.7.0",
+  "_npmOperationalInternal": {
+    "host": "packages-18-east.internal.npmjs.com",
+    "tmp": "tmp/amdefine-1.0.1.tgz_1478062849665_0.19916908955201507"
+  },
+  "_npmUser": {
+    "name": "jrburke",
+    "email": "jrbu...@gmail.com"
+  },
+  "_npmVersion": "3.10.3",
+  "_phantomChildren": {},
+  "_requested": {
+    "raw": "amdefine@>=0.0.4",
+    "scope": null,
+    "escapedName": "amdefine",
+    "name": "amdefine",
+    "rawSpec": ">=0.0.4",
+    "spec": ">=0.0.4",
+    "type": "range"
+  },
+  "_requiredBy": [
+    "/nib/source-map",
+    "/source-map",
+    "/stylus/source-map",
+    "/uglify-js/source-map"
+  ],
+  "_resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz";,
+  "_shasum": "4a5282ac164729e93619bcfd3ad151f817ce91f5",
+  "_shrinkwrap": null,
+  "_spec": "amdefine@>=0.0.4",
+  "_where": "/Users/yueguo/tmp/griffin-site/node_modules/source-map",
+  "author": {
+    "name": "James Burke",
+    "email": "jrbu...@gmail.com",
+    "url": "http://github.com/jrburke";
+  },
+  "bugs": {
+    "url": "https://github.com/jrburke/amdefine/issues";
+  },
+  "dependencies": {},
+  "description": "Provide AMD's define() API for declaring modules in the AMD 
format",
+  "devDependencies": {},
+  "directories": {},
+  "dist": {
+    "shasum": "4a5282ac164729e93619bcfd3ad151f817ce91f5",
+    "tarball": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz";
+  },
+  "engines": {
+    "node": ">=0.4.2"
+  },
+  "gitHead": "e59edc9da24404ec7937098e3992f8fb0e260be7",
+  "homepage": "http://github.com/jrburke/amdefine";,
+  "license": "BSD-3-Clause OR MIT",
+  "main": "./amdefine.js",
+  "maintainers": [
+    {
+      "name": "jrburke",
+      "email": "jrbu...@gmail.com"
+    }
+  ],
+  "name": "amdefine",
+  "optionalDependencies": {},
+  "readme": "ERROR: No README data found!",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jrburke/amdefine.git";
+  },
+  "scripts": {},
+  "version": "1.0.1"
+}

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/ansi-regex/index.js
----------------------------------------------------------------------
diff --git a/node_modules/ansi-regex/index.js b/node_modules/ansi-regex/index.js
new file mode 100644
index 0000000..b9574ed
--- /dev/null
+++ b/node_modules/ansi-regex/index.js
@@ -0,0 +1,4 @@
+'use strict';
+module.exports = function () {
+       return 
/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;
+};

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/ansi-regex/license
----------------------------------------------------------------------
diff --git a/node_modules/ansi-regex/license b/node_modules/ansi-regex/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/node_modules/ansi-regex/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresor...@gmail.com> (sindresorhus.com)
+
+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/4f8fa326/node_modules/ansi-regex/package.json
----------------------------------------------------------------------
diff --git a/node_modules/ansi-regex/package.json 
b/node_modules/ansi-regex/package.json
new file mode 100644
index 0000000..e0f596e
--- /dev/null
+++ b/node_modules/ansi-regex/package.json
@@ -0,0 +1,133 @@
+{
+  "_args": [
+    [
+      {
+        "raw": "ansi-regex@^2.0.0",
+        "scope": null,
+        "escapedName": "ansi-regex",
+        "name": "ansi-regex",
+        "rawSpec": "^2.0.0",
+        "spec": ">=2.0.0 <3.0.0",
+        "type": "range"
+      },
+      "/Users/yueguo/tmp/griffin-site/node_modules/has-ansi"
+    ]
+  ],
+  "_from": "ansi-regex@>=2.0.0 <3.0.0",
+  "_id": "ansi-regex@2.1.1",
+  "_inCache": true,
+  "_installable": true,
+  "_location": "/ansi-regex",
+  "_nodeVersion": "0.10.32",
+  "_npmOperationalInternal": {
+    "host": "packages-18-east.internal.npmjs.com",
+    "tmp": "tmp/ansi-regex-2.1.1.tgz_1484363378013_0.4482989883981645"
+  },
+  "_npmUser": {
+    "name": "qix",
+    "email": "i.am....@gmail.com"
+  },
+  "_npmVersion": "2.14.2",
+  "_phantomChildren": {},
+  "_requested": {
+    "raw": "ansi-regex@^2.0.0",
+    "scope": null,
+    "escapedName": "ansi-regex",
+    "name": "ansi-regex",
+    "rawSpec": "^2.0.0",
+    "spec": ">=2.0.0 <3.0.0",
+    "type": "range"
+  },
+  "_requiredBy": [
+    "/has-ansi",
+    "/strip-ansi"
+  ],
+  "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";,
+  "_shasum": "c3b33ab5ee360d86e0e628f0468ae7ef27d654df",
+  "_shrinkwrap": null,
+  "_spec": "ansi-regex@^2.0.0",
+  "_where": "/Users/yueguo/tmp/griffin-site/node_modules/has-ansi",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresor...@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/chalk/ansi-regex/issues";
+  },
+  "dependencies": {},
+  "description": "Regular expression for matching ANSI escape codes",
+  "devDependencies": {
+    "ava": "0.17.0",
+    "xo": "0.16.0"
+  },
+  "directories": {},
+  "dist": {
+    "shasum": "c3b33ab5ee360d86e0e628f0468ae7ef27d654df",
+    "tarball": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "gitHead": "7c908e7b4eb6cd82bfe1295e33fdf6d166c7ed85",
+  "homepage": "https://github.com/chalk/ansi-regex#readme";,
+  "keywords": [
+    "ansi",
+    "styles",
+    "color",
+    "colour",
+    "colors",
+    "terminal",
+    "console",
+    "cli",
+    "string",
+    "tty",
+    "escape",
+    "formatting",
+    "rgb",
+    "256",
+    "shell",
+    "xterm",
+    "command-line",
+    "text",
+    "regex",
+    "regexp",
+    "re",
+    "match",
+    "test",
+    "find",
+    "pattern"
+  ],
+  "license": "MIT",
+  "maintainers": [
+    {
+      "name": "qix",
+      "email": "i.am....@gmail.com"
+    },
+    {
+      "name": "sindresorhus",
+      "email": "sindresor...@gmail.com"
+    }
+  ],
+  "name": "ansi-regex",
+  "optionalDependencies": {},
+  "readme": "ERROR: No README data found!",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/chalk/ansi-regex.git";
+  },
+  "scripts": {
+    "test": "xo && ava --verbose",
+    "view-supported": "node fixtures/view-codes.js"
+  },
+  "version": "2.1.1",
+  "xo": {
+    "rules": {
+      "guard-for-in": 0,
+      "no-loop-func": 0
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/ansi-regex/readme.md
----------------------------------------------------------------------
diff --git a/node_modules/ansi-regex/readme.md 
b/node_modules/ansi-regex/readme.md
new file mode 100644
index 0000000..6a928ed
--- /dev/null
+++ b/node_modules/ansi-regex/readme.md
@@ -0,0 +1,39 @@
+# ansi-regex [![Build 
Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex)
+
+> Regular expression for matching [ANSI escape 
codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
+
+
+## Install
+
+```
+$ npm install --save ansi-regex
+```
+
+
+## Usage
+
+```js
+const ansiRegex = require('ansi-regex');
+
+ansiRegex().test('\u001b[4mcake\u001b[0m');
+//=> true
+
+ansiRegex().test('cake');
+//=> false
+
+'\u001b[4mcake\u001b[0m'.match(ansiRegex());
+//=> ['\u001b[4m', '\u001b[0m']
+```
+
+## FAQ
+
+### Why do you test for codes not in the ECMA 48 standard?
+
+Some of the codes we run as a test are codes that we acquired finding various 
lists of non-standard or manufacturer specific codes. If I recall correctly, we 
test for both standard and non-standard codes, as most of them follow the same 
or similar format and can be safely matched in strings without the risk of 
removing actual string content. There are a few non-standard control codes that 
do not follow the traditional format (i.e. they end in numbers) thus forcing us 
to exclude them from the test because we cannot reliably match them.
+
+On the historical side, those ECMA standards were established in the early 
90's whereas the VT100, for example, was designed in the mid/late 70's. At that 
point in time, control codes were still pretty ungoverned and engineers used 
them for a multitude of things, namely to activate hardware ports that may have 
been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the 
x86 architecture for processors; there are a ton of "interrupts" that can mean 
different things on certain brands of processors, most of which have been 
phased out.
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/ansi-styles/index.js
----------------------------------------------------------------------
diff --git a/node_modules/ansi-styles/index.js 
b/node_modules/ansi-styles/index.js
new file mode 100644
index 0000000..7894527
--- /dev/null
+++ b/node_modules/ansi-styles/index.js
@@ -0,0 +1,65 @@
+'use strict';
+
+function assembleStyles () {
+       var styles = {
+               modifiers: {
+                       reset: [0, 0],
+                       bold: [1, 22], // 21 isn't widely supported and 22 does 
the same thing
+                       dim: [2, 22],
+                       italic: [3, 23],
+                       underline: [4, 24],
+                       inverse: [7, 27],
+                       hidden: [8, 28],
+                       strikethrough: [9, 29]
+               },
+               colors: {
+                       black: [30, 39],
+                       red: [31, 39],
+                       green: [32, 39],
+                       yellow: [33, 39],
+                       blue: [34, 39],
+                       magenta: [35, 39],
+                       cyan: [36, 39],
+                       white: [37, 39],
+                       gray: [90, 39]
+               },
+               bgColors: {
+                       bgBlack: [40, 49],
+                       bgRed: [41, 49],
+                       bgGreen: [42, 49],
+                       bgYellow: [43, 49],
+                       bgBlue: [44, 49],
+                       bgMagenta: [45, 49],
+                       bgCyan: [46, 49],
+                       bgWhite: [47, 49]
+               }
+       };
+
+       // fix humans
+       styles.colors.grey = styles.colors.gray;
+
+       Object.keys(styles).forEach(function (groupName) {
+               var group = styles[groupName];
+
+               Object.keys(group).forEach(function (styleName) {
+                       var style = group[styleName];
+
+                       styles[styleName] = group[styleName] = {
+                               open: '\u001b[' + style[0] + 'm',
+                               close: '\u001b[' + style[1] + 'm'
+                       };
+               });
+
+               Object.defineProperty(styles, groupName, {
+                       value: group,
+                       enumerable: false
+               });
+       });
+
+       return styles;
+}
+
+Object.defineProperty(module, 'exports', {
+       enumerable: true,
+       get: assembleStyles
+});

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/ansi-styles/license
----------------------------------------------------------------------
diff --git a/node_modules/ansi-styles/license b/node_modules/ansi-styles/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/node_modules/ansi-styles/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresor...@gmail.com> (sindresorhus.com)
+
+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/4f8fa326/node_modules/ansi-styles/package.json
----------------------------------------------------------------------
diff --git a/node_modules/ansi-styles/package.json 
b/node_modules/ansi-styles/package.json
new file mode 100644
index 0000000..9cfedd2
--- /dev/null
+++ b/node_modules/ansi-styles/package.json
@@ -0,0 +1,115 @@
+{
+  "_args": [
+    [
+      {
+        "raw": "ansi-styles@^2.2.1",
+        "scope": null,
+        "escapedName": "ansi-styles",
+        "name": "ansi-styles",
+        "rawSpec": "^2.2.1",
+        "spec": ">=2.2.1 <3.0.0",
+        "type": "range"
+      },
+      "/Users/yueguo/tmp/griffin-site/node_modules/chalk"
+    ]
+  ],
+  "_from": "ansi-styles@>=2.2.1 <3.0.0",
+  "_id": "ansi-styles@2.2.1",
+  "_inCache": true,
+  "_installable": true,
+  "_location": "/ansi-styles",
+  "_nodeVersion": "4.3.0",
+  "_npmOperationalInternal": {
+    "host": "packages-12-west.internal.npmjs.com",
+    "tmp": "tmp/ansi-styles-2.2.1.tgz_1459197317833_0.9694824463222176"
+  },
+  "_npmUser": {
+    "name": "sindresorhus",
+    "email": "sindresor...@gmail.com"
+  },
+  "_npmVersion": "3.8.3",
+  "_phantomChildren": {},
+  "_requested": {
+    "raw": "ansi-styles@^2.2.1",
+    "scope": null,
+    "escapedName": "ansi-styles",
+    "name": "ansi-styles",
+    "rawSpec": "^2.2.1",
+    "spec": ">=2.2.1 <3.0.0",
+    "type": "range"
+  },
+  "_requiredBy": [
+    "/chalk"
+  ],
+  "_resolved": 
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";,
+  "_shasum": "b432dd3358b634cf75e1e4664368240533c1ddbe",
+  "_shrinkwrap": null,
+  "_spec": "ansi-styles@^2.2.1",
+  "_where": "/Users/yueguo/tmp/griffin-site/node_modules/chalk",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresor...@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/chalk/ansi-styles/issues";
+  },
+  "dependencies": {},
+  "description": "ANSI escape codes for styling strings in the terminal",
+  "devDependencies": {
+    "mocha": "*"
+  },
+  "directories": {},
+  "dist": {
+    "shasum": "b432dd3358b634cf75e1e4664368240533c1ddbe",
+    "tarball": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "gitHead": "95c59b23be760108b6530ca1c89477c21b258032",
+  "homepage": "https://github.com/chalk/ansi-styles#readme";,
+  "keywords": [
+    "ansi",
+    "styles",
+    "color",
+    "colour",
+    "colors",
+    "terminal",
+    "console",
+    "cli",
+    "string",
+    "tty",
+    "escape",
+    "formatting",
+    "rgb",
+    "256",
+    "shell",
+    "xterm",
+    "log",
+    "logging",
+    "command-line",
+    "text"
+  ],
+  "license": "MIT",
+  "maintainers": [
+    {
+      "name": "sindresorhus",
+      "email": "sindresor...@gmail.com"
+    }
+  ],
+  "name": "ansi-styles",
+  "optionalDependencies": {},
+  "readme": "ERROR: No README data found!",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/chalk/ansi-styles.git";
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "version": "2.2.1"
+}

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/ansi-styles/readme.md
----------------------------------------------------------------------
diff --git a/node_modules/ansi-styles/readme.md 
b/node_modules/ansi-styles/readme.md
new file mode 100644
index 0000000..3f933f6
--- /dev/null
+++ b/node_modules/ansi-styles/readme.md
@@ -0,0 +1,86 @@
+# ansi-styles [![Build 
Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles)
+
+> [ANSI escape 
codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for 
styling strings in the terminal
+
+You probably want the higher-level [chalk](https://github.com/chalk/chalk) 
module for styling your strings.
+
+![](screenshot.png)
+
+
+## Install
+
+```
+$ npm install --save ansi-styles
+```
+
+
+## Usage
+
+```js
+var ansi = require('ansi-styles');
+
+console.log(ansi.green.open + 'Hello world!' + ansi.green.close);
+```
+
+
+## API
+
+Each style has an `open` and `close` property.
+
+
+## Styles
+
+### Modifiers
+
+- `reset`
+- `bold`
+- `dim`
+- `italic` *(not widely supported)*
+- `underline`
+- `inverse`
+- `hidden`
+- `strikethrough` *(not widely supported)*
+
+### Colors
+
+- `black`
+- `red`
+- `green`
+- `yellow`
+- `blue`
+- `magenta`
+- `cyan`
+- `white`
+- `gray`
+
+### Background colors
+
+- `bgBlack`
+- `bgRed`
+- `bgGreen`
+- `bgYellow`
+- `bgBlue`
+- `bgMagenta`
+- `bgCyan`
+- `bgWhite`
+
+
+## Advanced usage
+
+By default you get a map of styles, but the styles are also available as 
groups. They are non-enumerable so they don't show up unless you access them 
explicitly. This makes it easier to expose only a subset in a higher-level 
module.
+
+- `ansi.modifiers`
+- `ansi.colors`
+- `ansi.bgColors`
+
+
+###### Example
+
+```js
+console.log(ansi.colors.green.open);
+```
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/anymatch/LICENSE
----------------------------------------------------------------------
diff --git a/node_modules/anymatch/LICENSE b/node_modules/anymatch/LICENSE
new file mode 100644
index 0000000..bc42470
--- /dev/null
+++ b/node_modules/anymatch/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) 2014 Elan Shanker
+
+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/4f8fa326/node_modules/anymatch/README.md
----------------------------------------------------------------------
diff --git a/node_modules/anymatch/README.md b/node_modules/anymatch/README.md
new file mode 100644
index 0000000..0a63292
--- /dev/null
+++ b/node_modules/anymatch/README.md
@@ -0,0 +1,91 @@
+anymatch [![Build 
Status](https://travis-ci.org/es128/anymatch.svg?branch=master)](https://travis-ci.org/es128/anymatch)
 [![Coverage 
Status](https://img.shields.io/coveralls/es128/anymatch.svg?branch=master)](https://coveralls.io/r/es128/anymatch?branch=master)
+======
+Javascript module to match a string against a regular expression, glob, string,
+or function that takes the string as an argument and returns a truthy or falsy
+value. The matcher can also be an array of any or all of these. Useful for
+allowing a very flexible user-defined config to define things like file paths.
+
+[![NPM](https://nodei.co/npm/anymatch.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/anymatch/)
+[![NPM](https://nodei.co/npm-dl/anymatch.png?height=3&months=9)](https://nodei.co/npm-dl/anymatch/)
+
+Usage
+-----
+```sh
+npm install anymatch --save
+```
+
+#### anymatch (matchers, testString, [returnIndex], [startIndex], [endIndex])
+* __matchers__: (_Array|String|RegExp|Function_)
+String to be directly matched, string with glob patterns, regular expression
+test, function that takes the testString as an argument and returns a truthy
+value if it should be matched, or an array of any number and mix of these 
types.
+* __testString__: (_String|Array_) The string to test against the matchers. If
+passed as an array, the first element of the array will be used as the
+`testString` for non-function matchers, while the entire array will be applied
+as the arguments for function matchers.
+* __returnIndex__: (_Boolean [optional]_) If true, return the array index of
+the first matcher that that testString matched, or -1 if no match, instead of a
+boolean result.
+* __startIndex, endIndex__: (_Integer [optional]_) Can be used to define a
+subset out of the array of provided matchers to test against. Can be useful
+with bound matcher functions (see below). When used with `returnIndex = true`
+preserves original indexing. Behaves the same as `Array.prototype.slice` (i.e.
+includes array members up to, but not including endIndex).
+
+```js
+var anymatch = require('anymatch');
+
+var matchers = [
+       'path/to/file.js',
+       'path/anyjs/**/*.js',
+       /foo.js$/,
+       function (string) {
+               return string.indexOf('bar') !== -1 && string.length > 10
+       }
+];
+
+anymatch(matchers, 'path/to/file.js'); // true
+anymatch(matchers, 'path/anyjs/baz.js'); // true
+anymatch(matchers, 'path/to/foo.js'); // true
+anymatch(matchers, 'path/to/bar.js'); // true
+anymatch(matchers, 'bar.js'); // false
+
+// returnIndex = true
+anymatch(matchers, 'foo.js', true); // 2
+anymatch(matchers, 'path/anyjs/foo.js', true); // 1
+
+// skip matchers
+anymatch(matchers, 'path/to/file.js', false, 1); // false
+anymatch(matchers, 'path/anyjs/foo.js', true, 2, 3); // 2
+anymatch(matchers, 'path/to/bar.js', true, 0, 3); // -1
+```
+
+#### anymatch (matchers)
+You can also pass in only your matcher(s) to get a curried function that has
+already been bound to the provided matching criteria. This can be used as an
+`Array.prototype.filter` callback.
+
+```js
+var matcher = anymatch(matchers);
+
+matcher('path/to/file.js'); // true
+matcher('path/anyjs/baz.js', true); // 1
+matcher('path/anyjs/baz.js', true, 2); // -1
+
+['foo.js', 'bar.js'].filter(matcher); // ['foo.js']
+```
+
+Change Log
+----------
+[See release notes page on GitHub](https://github.com/es128/anymatch/releases)
+
+NOTE: As of v1.2.0, anymatch uses 
[micromatch](https://github.com/jonschlinkert/micromatch)
+for glob pattern matching. The glob matching behavior should be functionally
+equivalent to the commonly used 
[minimatch](https://github.com/isaacs/minimatch)
+library (aside from some fixed bugs and greater performance), so a major
+version bump wasn't merited. Issues with glob pattern matching should be
+reported directly to the [micromatch issue 
tracker](https://github.com/jonschlinkert/micromatch/issues).
+
+License
+-------
+[ISC](https://raw.github.com/es128/anymatch/master/LICENSE)

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/anymatch/index.js
----------------------------------------------------------------------
diff --git a/node_modules/anymatch/index.js b/node_modules/anymatch/index.js
new file mode 100644
index 0000000..fd70ba0
--- /dev/null
+++ b/node_modules/anymatch/index.js
@@ -0,0 +1,64 @@
+'use strict';
+
+var arrify = require('arrify');
+var micromatch = require('micromatch');
+var path = require('path');
+
+var anymatch = function(criteria, value, returnIndex, startIndex, endIndex) {
+  criteria = arrify(criteria);
+  value = arrify(value);
+  if (arguments.length === 1) {
+    return anymatch.bind(null, criteria.map(function(criterion) {
+      return typeof criterion === 'string' && criterion[0] !== '!' ?
+        micromatch.matcher(criterion) : criterion;
+    }));
+  }
+  startIndex = startIndex || 0;
+  var string = value[0];
+  var altString;
+  var matched = false;
+  var matchIndex = -1;
+  function testCriteria (criterion, index) {
+    var result;
+    switch (toString.call(criterion)) {
+    case '[object String]':
+      result = string === criterion || altString && altString === criterion;
+      result = result || micromatch.isMatch(string, criterion);
+      break;
+    case '[object RegExp]':
+      result = criterion.test(string) || altString && 
criterion.test(altString);
+      break;
+    case '[object Function]':
+      result = criterion.apply(null, value);
+      break;
+    default:
+      result = false;
+    }
+    if (result) {
+      matchIndex = index + startIndex;
+    }
+    return result;
+  }
+  var crit = criteria;
+  var negGlobs = crit.reduce(function(arr, criterion, index) {
+    if (typeof criterion === 'string' && criterion[0] === '!') {
+      if (crit === criteria) {
+        // make a copy before modifying
+        crit = crit.slice();
+      }
+      crit[index] = null;
+      arr.push(criterion.substr(1));
+    }
+    return arr;
+  }, []);
+  if (!negGlobs.length || !micromatch.any(string, negGlobs)) {
+    if (path.sep === '\\' && typeof string === 'string') {
+      altString = string.split('\\').join('/');
+      altString = altString === string ? null : altString;
+    }
+    matched = crit.slice(startIndex, endIndex).some(testCriteria);
+  }
+  return returnIndex === true ? matchIndex : matched;
+};
+
+module.exports = anymatch;

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/anymatch/package.json
----------------------------------------------------------------------
diff --git a/node_modules/anymatch/package.json 
b/node_modules/anymatch/package.json
new file mode 100644
index 0000000..ece1398
--- /dev/null
+++ b/node_modules/anymatch/package.json
@@ -0,0 +1,104 @@
+{
+  "_args": [
+    [
+      {
+        "raw": "anymatch@^1.3.0",
+        "scope": null,
+        "escapedName": "anymatch",
+        "name": "anymatch",
+        "rawSpec": "^1.3.0",
+        "spec": ">=1.3.0 <2.0.0",
+        "type": "range"
+      },
+      "/Users/yueguo/tmp/griffin-site/node_modules/chokidar"
+    ]
+  ],
+  "_from": "anymatch@>=1.3.0 <2.0.0",
+  "_id": "anymatch@1.3.0",
+  "_inCache": true,
+  "_installable": true,
+  "_location": "/anymatch",
+  "_nodeVersion": "1.6.2",
+  "_npmUser": {
+    "name": "es128",
+    "email": "elan.shanker+...@gmail.com"
+  },
+  "_npmVersion": "2.7.3",
+  "_phantomChildren": {},
+  "_requested": {
+    "raw": "anymatch@^1.3.0",
+    "scope": null,
+    "escapedName": "anymatch",
+    "name": "anymatch",
+    "rawSpec": "^1.3.0",
+    "spec": ">=1.3.0 <2.0.0",
+    "type": "range"
+  },
+  "_requiredBy": [
+    "/chokidar"
+  ],
+  "_resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz";,
+  "_shasum": "a3e52fa39168c825ff57b0248126ce5a8ff95507",
+  "_shrinkwrap": null,
+  "_spec": "anymatch@^1.3.0",
+  "_where": "/Users/yueguo/tmp/griffin-site/node_modules/chokidar",
+  "author": {
+    "name": "Elan Shanker",
+    "url": "http://github.com/es128";
+  },
+  "bugs": {
+    "url": "https://github.com/es128/anymatch/issues";
+  },
+  "dependencies": {
+    "arrify": "^1.0.0",
+    "micromatch": "^2.1.5"
+  },
+  "description": "Matches strings against configurable strings, globs, regular 
expressions, and/or functions",
+  "devDependencies": {
+    "coveralls": "^2.11.2",
+    "istanbul": "^0.3.13",
+    "mocha": "^2.2.4"
+  },
+  "directories": {},
+  "dist": {
+    "shasum": "a3e52fa39168c825ff57b0248126ce5a8ff95507",
+    "tarball": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz";
+  },
+  "files": [
+    "index.js"
+  ],
+  "gitHead": "253d2ad42f644ed18557f561312a7f8426daca84",
+  "homepage": "https://github.com/es128/anymatch";,
+  "keywords": [
+    "match",
+    "any",
+    "string",
+    "file",
+    "fs",
+    "list",
+    "glob",
+    "regex",
+    "regexp",
+    "regular",
+    "expression",
+    "function"
+  ],
+  "license": "ISC",
+  "maintainers": [
+    {
+      "name": "es128",
+      "email": "elan.shanker+...@gmail.com"
+    }
+  ],
+  "name": "anymatch",
+  "optionalDependencies": {},
+  "readme": "ERROR: No README data found!",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/es128/anymatch.git";
+  },
+  "scripts": {
+    "test": "istanbul cover _mocha && cat ./coverage/lcov.info | coveralls"
+  },
+  "version": "1.3.0"
+}

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/archy/.travis.yml
----------------------------------------------------------------------
diff --git a/node_modules/archy/.travis.yml b/node_modules/archy/.travis.yml
new file mode 100644
index 0000000..895dbd3
--- /dev/null
+++ b/node_modules/archy/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+  - 0.6
+  - 0.8

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/archy/LICENSE
----------------------------------------------------------------------
diff --git a/node_modules/archy/LICENSE b/node_modules/archy/LICENSE
new file mode 100644
index 0000000..ee27ba4
--- /dev/null
+++ b/node_modules/archy/LICENSE
@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+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/4f8fa326/node_modules/archy/examples/beep.js
----------------------------------------------------------------------
diff --git a/node_modules/archy/examples/beep.js 
b/node_modules/archy/examples/beep.js
new file mode 100644
index 0000000..9c07047
--- /dev/null
+++ b/node_modules/archy/examples/beep.js
@@ -0,0 +1,24 @@
+var archy = require('../');
+var s = archy({
+  label : 'beep',
+  nodes : [
+    'ity',
+    {
+      label : 'boop',
+      nodes : [
+        {
+          label : 'o_O',
+          nodes : [
+            {
+              label : 'oh',
+              nodes : [ 'hello', 'puny' ]
+            },
+            'human'
+          ]
+        },
+        'party\ntime!'
+      ]
+    }
+  ]
+});
+console.log(s);

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/archy/examples/multi_line.js
----------------------------------------------------------------------
diff --git a/node_modules/archy/examples/multi_line.js 
b/node_modules/archy/examples/multi_line.js
new file mode 100644
index 0000000..8afdfad
--- /dev/null
+++ b/node_modules/archy/examples/multi_line.js
@@ -0,0 +1,25 @@
+var archy = require('../');
+
+var s = archy({
+  label : 'beep\none\ntwo',
+  nodes : [
+    'ity',
+    {
+      label : 'boop',
+      nodes : [
+        {
+          label : 'o_O\nwheee',
+          nodes : [
+            {
+              label : 'oh',
+              nodes : [ 'hello', 'puny\nmeat' ]
+            },
+            'creature'
+          ]
+        },
+        'party\ntime!'
+      ]
+    }
+  ]
+});
+console.log(s);

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/archy/index.js
----------------------------------------------------------------------
diff --git a/node_modules/archy/index.js b/node_modules/archy/index.js
new file mode 100644
index 0000000..869d64e
--- /dev/null
+++ b/node_modules/archy/index.js
@@ -0,0 +1,35 @@
+module.exports = function archy (obj, prefix, opts) {
+    if (prefix === undefined) prefix = '';
+    if (!opts) opts = {};
+    var chr = function (s) {
+        var chars = {
+            '│' : '|',
+            '└' : '`',
+            '├' : '+',
+            '─' : '-',
+            '┬' : '-'
+        };
+        return opts.unicode === false ? chars[s] : s;
+    };
+    
+    if (typeof obj === 'string') obj = { label : obj };
+    
+    var nodes = obj.nodes || [];
+    var lines = (obj.label || '').split('\n');
+    var splitter = '\n' + prefix + (nodes.length ? chr('│') : ' ') + ' ';
+    
+    return prefix
+        + lines.join(splitter) + '\n'
+        + nodes.map(function (node, ix) {
+            var last = ix === nodes.length - 1;
+            var more = node.nodes && node.nodes.length;
+            var prefix_ = prefix + (last ? ' ' : chr('│')) + ' ';
+            
+            return prefix
+                + (last ? chr('└') : chr('├')) + chr('─')
+                + (more ? chr('┬') : chr('─')) + ' '
+                + archy(node, prefix_, opts).slice(prefix.length + 2)
+            ;
+        }).join('')
+    ;
+};

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/archy/package.json
----------------------------------------------------------------------
diff --git a/node_modules/archy/package.json b/node_modules/archy/package.json
new file mode 100644
index 0000000..92d54e7
--- /dev/null
+++ b/node_modules/archy/package.json
@@ -0,0 +1,115 @@
+{
+  "_args": [
+    [
+      {
+        "raw": "archy@^1.0.0",
+        "scope": null,
+        "escapedName": "archy",
+        "name": "archy",
+        "rawSpec": "^1.0.0",
+        "spec": ">=1.0.0 <2.0.0",
+        "type": "range"
+      },
+      "/Users/yueguo/tmp/griffin-site/node_modules/hexo"
+    ]
+  ],
+  "_from": "archy@>=1.0.0 <2.0.0",
+  "_id": "archy@1.0.0",
+  "_inCache": true,
+  "_installable": true,
+  "_location": "/archy",
+  "_npmUser": {
+    "name": "substack",
+    "email": "m...@substack.net"
+  },
+  "_npmVersion": "1.4.25",
+  "_phantomChildren": {},
+  "_requested": {
+    "raw": "archy@^1.0.0",
+    "scope": null,
+    "escapedName": "archy",
+    "name": "archy",
+    "rawSpec": "^1.0.0",
+    "spec": ">=1.0.0 <2.0.0",
+    "type": "range"
+  },
+  "_requiredBy": [
+    "/hexo"
+  ],
+  "_resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz";,
+  "_shasum": "f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40",
+  "_shrinkwrap": null,
+  "_spec": "archy@^1.0.0",
+  "_where": "/Users/yueguo/tmp/griffin-site/node_modules/hexo",
+  "author": {
+    "name": "James Halliday",
+    "email": "m...@substack.net",
+    "url": "http://substack.net";
+  },
+  "bugs": {
+    "url": "https://github.com/substack/node-archy/issues";
+  },
+  "dependencies": {},
+  "description": "render nested hierarchies `npm ls` style with unicode pipes",
+  "devDependencies": {
+    "tap": "~0.3.3",
+    "tape": "~0.1.1"
+  },
+  "directories": {},
+  "dist": {
+    "shasum": "f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40",
+    "tarball": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz";
+  },
+  "gitHead": "30223c16191e877bf027b15b12daf077b9b55b84",
+  "homepage": "https://github.com/substack/node-archy";,
+  "keywords": [
+    "hierarchy",
+    "npm ls",
+    "unicode",
+    "pretty",
+    "print"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "maintainers": [
+    {
+      "name": "substack",
+      "email": "m...@substack.net"
+    }
+  ],
+  "name": "archy",
+  "optionalDependencies": {},
+  "readme": "ERROR: No README data found!",
+  "repository": {
+    "type": "git",
+    "url": "git+ssh://g...@github.com/substack/node-archy.git"
+  },
+  "scripts": {
+    "test": "tap test"
+  },
+  "testling": {
+    "files": "test/*.js",
+    "browsers": {
+      "iexplore": [
+        "6.0",
+        "7.0",
+        "8.0",
+        "9.0"
+      ],
+      "chrome": [
+        "20.0"
+      ],
+      "firefox": [
+        "10.0",
+        "15.0"
+      ],
+      "safari": [
+        "5.1"
+      ],
+      "opera": [
+        "12.0"
+      ]
+    }
+  },
+  "version": "1.0.0"
+}

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/archy/readme.markdown
----------------------------------------------------------------------
diff --git a/node_modules/archy/readme.markdown 
b/node_modules/archy/readme.markdown
new file mode 100644
index 0000000..ef7a5cf
--- /dev/null
+++ b/node_modules/archy/readme.markdown
@@ -0,0 +1,88 @@
+# archy
+
+Render nested hierarchies `npm ls` style with unicode pipes.
+
+[![browser 
support](http://ci.testling.com/substack/node-archy.png)](http://ci.testling.com/substack/node-archy)
+
+[![build 
status](https://secure.travis-ci.org/substack/node-archy.png)](http://travis-ci.org/substack/node-archy)
+
+# example
+
+``` js
+var archy = require('archy');
+var s = archy({
+  label : 'beep',
+  nodes : [
+    'ity',
+    {
+      label : 'boop',
+      nodes : [
+        {
+          label : 'o_O',
+          nodes : [
+            {
+              label : 'oh',
+              nodes : [ 'hello', 'puny' ]
+            },
+            'human'
+          ]
+        },
+        'party\ntime!'
+      ]
+    }
+  ]
+});
+console.log(s);
+```
+
+output
+
+```
+beep
+├── ity
+└─┬ boop
+  ├─┬ o_O
+  │ ├─┬ oh
+  │ │ ├── hello
+  │ │ └── puny
+  │ └── human
+  └── party
+      time!
+```
+
+# methods
+
+var archy = require('archy')
+
+## archy(obj, prefix='', opts={})
+
+Return a string representation of `obj` with unicode pipe characters like how
+`npm ls` looks.
+
+`obj` should be a tree of nested objects with `'label'` and `'nodes'` fields.
+`'label'` is a string of text to display at a node level and `'nodes'` is an
+array of the descendents of the current node.
+
+If a node is a string, that string will be used as the `'label'` and an empty
+array of `'nodes'` will be used.
+
+`prefix` gets prepended to all the lines and is used by the algorithm to
+recursively update.
+
+If `'label'` has newlines they will be indented at the present indentation 
level
+with the current prefix.
+
+To disable unicode results in favor of all-ansi output set `opts.unicode` to
+`false`.
+
+# install
+
+With [npm](http://npmjs.org) do:
+
+```
+npm install archy
+```
+
+# license
+
+MIT

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/archy/test/beep.js
----------------------------------------------------------------------
diff --git a/node_modules/archy/test/beep.js b/node_modules/archy/test/beep.js
new file mode 100644
index 0000000..4ea74f9
--- /dev/null
+++ b/node_modules/archy/test/beep.js
@@ -0,0 +1,40 @@
+var test = require('tape');
+var archy = require('../');
+
+test('beep', function (t) {
+    var s = archy({
+      label : 'beep',
+      nodes : [
+        'ity',
+        {
+          label : 'boop',
+          nodes : [
+            {
+              label : 'o_O',
+              nodes : [
+                {
+                  label : 'oh',
+                  nodes : [ 'hello', 'puny' ]
+                },
+                'human'
+              ]
+            },
+            'party!'
+          ]
+        }
+      ]
+    });
+    t.equal(s, [
+        'beep',
+        '├── ity',
+        '└─┬ boop',
+        '  ├─┬ o_O',
+        '  │ ├─┬ oh',
+        '  │ │ ├── hello',
+        '  │ │ └── puny',
+        '  │ └── human',
+        '  └── party!',
+        ''
+    ].join('\n'));
+    t.end();
+});

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/archy/test/multi_line.js
----------------------------------------------------------------------
diff --git a/node_modules/archy/test/multi_line.js 
b/node_modules/archy/test/multi_line.js
new file mode 100644
index 0000000..2cf2154
--- /dev/null
+++ b/node_modules/archy/test/multi_line.js
@@ -0,0 +1,45 @@
+var test = require('tape');
+var archy = require('../');
+
+test('multi-line', function (t) {
+    var s = archy({
+      label : 'beep\none\ntwo',
+      nodes : [
+        'ity',
+        {
+          label : 'boop',
+          nodes : [
+            {
+              label : 'o_O\nwheee',
+              nodes : [
+                {
+                  label : 'oh',
+                  nodes : [ 'hello', 'puny\nmeat' ]
+                },
+                'creature'
+              ]
+            },
+            'party\ntime!'
+          ]
+        }
+      ]
+    });
+    t.equal(s, [
+        'beep',
+        '│ one',
+        '│ two',
+        '├── ity',
+        '└─┬ boop',
+        '  ├─┬ o_O',
+        '  │ │ wheee',
+        '  │ ├─┬ oh',
+        '  │ │ ├── hello',
+        '  │ │ └── puny',
+        '  │ │     meat',
+        '  │ └── creature',
+        '  └── party',
+        '      time!',
+        ''
+    ].join('\n'));
+    t.end();
+});

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/archy/test/non_unicode.js
----------------------------------------------------------------------
diff --git a/node_modules/archy/test/non_unicode.js 
b/node_modules/archy/test/non_unicode.js
new file mode 100644
index 0000000..7204d33
--- /dev/null
+++ b/node_modules/archy/test/non_unicode.js
@@ -0,0 +1,40 @@
+var test = require('tape');
+var archy = require('../');
+
+test('beep', function (t) {
+    var s = archy({
+      label : 'beep',
+      nodes : [
+        'ity',
+        {
+          label : 'boop',
+          nodes : [
+            {
+              label : 'o_O',
+              nodes : [
+                {
+                  label : 'oh',
+                  nodes : [ 'hello', 'puny' ]
+                },
+                'human'
+              ]
+            },
+            'party!'
+          ]
+        }
+      ]
+    }, '', { unicode : false });
+    t.equal(s, [
+        'beep',
+        '+-- ity',
+        '`-- boop',
+        '  +-- o_O',
+        '  | +-- oh',
+        '  | | +-- hello',
+        '  | | `-- puny',
+        '  | `-- human',
+        '  `-- party!',
+        ''
+    ].join('\n'));
+    t.end();
+});

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/argparse/CHANGELOG.md
----------------------------------------------------------------------
diff --git a/node_modules/argparse/CHANGELOG.md 
b/node_modules/argparse/CHANGELOG.md
new file mode 100644
index 0000000..e422115
--- /dev/null
+++ b/node_modules/argparse/CHANGELOG.md
@@ -0,0 +1,179 @@
+1.0.9 / 2016-09-29
+------------------
+
+- Rerelease after 1.0.8 - deps cleanup.
+
+
+1.0.8 / 2016-09-29
+------------------
+
+- Maintenance (deps bump, fix node 6.5+ tests, coverage report).
+
+
+1.0.7 / 2016-03-17
+------------------
+
+- Teach `addArgument` to accept string arg names. #97, @tomxtobin.
+
+
+1.0.6 / 2016-02-06
+------------------
+
+- Maintenance: moved to eslint & updated CS.
+
+
+1.0.5 / 2016-02-05
+------------------
+
+- Removed lodash dependency to significantly reduce install size.
+  Thanks to @mourner.
+
+
+1.0.4 / 2016-01-17
+------------------
+
+- Maintenance: lodash update to 4.0.0.
+
+
+1.0.3 / 2015-10-27
+------------------
+
+- Fix parse `=` in args: `--examplepath="C:\myfolder\env=x64"`. #84, 
@CatWithApple.
+
+
+1.0.2 / 2015-03-22
+------------------
+
+- Relaxed lodash version dependency.
+
+
+1.0.1 / 2015-02-20
+------------------
+
+- Changed dependencies to be compatible with ancient nodejs.
+
+
+1.0.0 / 2015-02-19
+------------------
+
+- Maintenance release.
+- Replaced `underscore` with `lodash`.
+- Bumped version to 1.0.0 to better reflect semver meaning.
+- HISTORY.md -> CHANGELOG.md
+
+
+0.1.16 / 2013-12-01
+-------------------
+
+- Maintenance release. Updated dependencies and docs.
+
+
+0.1.15 / 2013-05-13
+-------------------
+
+- Fixed #55, @trebor89
+
+
+0.1.14 / 2013-05-12
+-------------------
+
+- Fixed #62, @maxtaco
+
+
+0.1.13 / 2013-04-08
+-------------------
+
+- Added `.npmignore` to reduce package size
+
+
+0.1.12 / 2013-02-10
+-------------------
+
+- Fixed conflictHandler (#46), @hpaulj
+
+
+0.1.11 / 2013-02-07
+-------------------
+
+- Multiple bugfixes, @hpaulj
+- Added 70+ tests (ported from python), @hpaulj
+- Added conflictHandler, @applepicke
+- Added fromfilePrefixChar, @hpaulj
+
+
+0.1.10 / 2012-12-30
+-------------------
+
+- Added [mutual 
exclusion](http://docs.python.org/dev/library/argparse.html#mutual-exclusion)
+  support, thanks to @hpaulj
+- Fixed options check for `storeConst` & `appendConst` actions, thanks to 
@hpaulj
+
+
+0.1.9 / 2012-12-27
+------------------
+
+- Fixed option dest interferens with other options (issue #23), thanks to 
@hpaulj
+- Fixed default value behavior with `*` positionals, thanks to @hpaulj
+- Improve `getDefault()` behavior, thanks to @hpaulj
+- Imrove negative argument parsing, thanks to @hpaulj
+
+
+0.1.8 / 2012-12-01
+------------------
+
+- Fixed parser parents (issue #19), thanks to @hpaulj
+- Fixed negative argument parse (issue #20), thanks to @hpaulj
+
+
+0.1.7 / 2012-10-14
+------------------
+
+- Fixed 'choices' argument parse (issue #16)
+- Fixed stderr output (issue #15)
+
+
+0.1.6 / 2012-09-09
+------------------
+
+- Fixed check for conflict of options (thanks to @tomxtobin)
+
+
+0.1.5 / 2012-09-03
+------------------
+
+- Fix parser #setDefaults method (thanks to @tomxtobin)
+
+
+0.1.4 / 2012-07-30
+------------------
+
+- Fixed pseudo-argument support (thanks to @CGamesPlay)
+- Fixed addHelp default (should be true), if not set (thanks to @benblank)
+
+
+0.1.3 / 2012-06-27
+------------------
+
+- Fixed formatter api name: Formatter -> HelpFormatter
+
+
+0.1.2 / 2012-05-29
+------------------
+
+- Added basic tests
+- Removed excess whitespace in help
+- Fixed error reporting, when parcer with subcommands
+  called with empty arguments
+
+
+0.1.1 / 2012-05-23
+------------------
+
+- Fixed line wrapping in help formatter
+- Added better error reporting on invalid arguments
+
+
+0.1.0 / 2012-05-16
+------------------
+
+- First release.

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/argparse/LICENSE
----------------------------------------------------------------------
diff --git a/node_modules/argparse/LICENSE b/node_modules/argparse/LICENSE
new file mode 100644
index 0000000..1afdae5
--- /dev/null
+++ b/node_modules/argparse/LICENSE
@@ -0,0 +1,21 @@
+(The MIT License)
+
+Copyright (C) 2012 by Vitaly Puzrin
+
+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/4f8fa326/node_modules/argparse/README.md
----------------------------------------------------------------------
diff --git a/node_modules/argparse/README.md b/node_modules/argparse/README.md
new file mode 100644
index 0000000..2d0bcab
--- /dev/null
+++ b/node_modules/argparse/README.md
@@ -0,0 +1,253 @@
+argparse
+========
+
+[![Build 
Status](https://secure.travis-ci.org/nodeca/argparse.png?branch=master)](http://travis-ci.org/nodeca/argparse)
+[![NPM 
version](https://img.shields.io/npm/v/argparse.svg)](https://www.npmjs.org/package/argparse)
+
+CLI arguments parser for node.js. Javascript port of python's
+[argparse](http://docs.python.org/dev/library/argparse.html) module
+(original version 3.2). That's a full port, except some very rare options,
+recorded in issue tracker.
+
+**NB. Difference with original.**
+
+- Method names changed to camelCase. See [generated 
docs](http://nodeca.github.com/argparse/).
+- Use `defaultValue` instead of `default`.
+
+
+Example
+=======
+
+test.js file:
+
+```javascript
+#!/usr/bin/env node
+'use strict';
+
+var ArgumentParser = require('../lib/argparse').ArgumentParser;
+var parser = new ArgumentParser({
+  version: '0.0.1',
+  addHelp:true,
+  description: 'Argparse example'
+});
+parser.addArgument(
+  [ '-f', '--foo' ],
+  {
+    help: 'foo bar'
+  }
+);
+parser.addArgument(
+  [ '-b', '--bar' ],
+  {
+    help: 'bar foo'
+  }
+);
+parser.addArgument(
+  '--baz',
+  {
+    help: 'baz bar'
+  }
+);
+var args = parser.parseArgs();
+console.dir(args);
+```
+
+Display help:
+
+```
+$ ./test.js -h
+usage: example.js [-h] [-v] [-f FOO] [-b BAR] [--baz BAZ]
+
+Argparse example
+
+Optional arguments:
+  -h, --help         Show this help message and exit.
+  -v, --version      Show program's version number and exit.
+  -f FOO, --foo FOO  foo bar
+  -b BAR, --bar BAR  bar foo
+  --baz BAZ          baz bar
+```
+
+Parse arguments:
+
+```
+$ ./test.js -f=3 --bar=4 --baz 5
+{ foo: '3', bar: '4', baz: '5' }
+```
+
+More [examples](https://github.com/nodeca/argparse/tree/master/examples).
+
+
+ArgumentParser objects
+======================
+
+```
+new ArgumentParser({paramters hash});
+```
+
+Creates a new ArgumentParser object.
+
+**Supported params:**
+
+- ```description``` - Text to display before the argument help.
+- ```epilog``` - Text to display after the argument help.
+- ```addHelp``` - Add a -h/–help option to the parser. (default: true)
+- ```argumentDefault``` - Set the global default value for arguments. 
(default: null)
+- ```parents``` - A list of ArgumentParser objects whose arguments should also 
be included.
+- ```prefixChars``` - The set of characters that prefix optional arguments. 
(default: ‘-‘)
+- ```formatterClass``` - A class for customizing the help output.
+- ```prog``` - The name of the program (default: 
`path.basename(process.argv[1])`)
+- ```usage``` - The string describing the program usage (default: generated)
+- ```conflictHandler``` - Usually unnecessary, defines strategy for resolving 
conflicting optionals.
+
+**Not supportied yet**
+
+- ```fromfilePrefixChars``` - The set of characters that prefix files from 
which additional arguments should be read.
+
+
+Details in [original ArgumentParser 
guide](http://docs.python.org/dev/library/argparse.html#argumentparser-objects)
+
+
+addArgument() method
+====================
+
+```
+ArgumentParser.addArgument(name or flag or [name] or [flags...], {options})
+```
+
+Defines how a single command-line argument should be parsed.
+
+- ```name or flag or [name] or [flags...]``` - Either a positional name
+  (e.g., `'foo'`), a single option (e.g., `'-f'` or `'--foo'`), an array
+  of a single positional name (e.g., `['foo']`), or an array of options
+  (e.g., `['-f', '--foo']`).
+
+Options:
+
+- ```action``` - The basic type of action to be taken when this argument is 
encountered at the command line.
+- ```nargs```- The number of command-line arguments that should be consumed.
+- ```constant``` - A constant value required by some action and nargs 
selections.
+- ```defaultValue``` - The value produced if the argument is absent from the 
command line.
+- ```type``` - The type to which the command-line argument should be converted.
+- ```choices``` - A container of the allowable values for the argument.
+- ```required``` - Whether or not the command-line option may be omitted 
(optionals only).
+- ```help``` - A brief description of what the argument does.
+- ```metavar``` - A name for the argument in usage messages.
+- ```dest``` - The name of the attribute to be added to the object returned by 
parseArgs().
+
+Details in [original add_argument 
guide](http://docs.python.org/dev/library/argparse.html#the-add-argument-method)
+
+
+Action (some details)
+================
+
+ArgumentParser objects associate command-line arguments with actions.
+These actions can do just about anything with the command-line arguments 
associated
+with them, though most actions simply add an attribute to the object returned 
by
+parseArgs(). The action keyword argument specifies how the command-line 
arguments
+should be handled. The supported actions are:
+
+- ```store``` - Just stores the argument’s value. This is the default action.
+- ```storeConst``` - Stores value, specified by the const keyword argument.
+  (Note that the const keyword argument defaults to the rather unhelpful None.)
+  The 'storeConst' action is most commonly used with optional arguments, that
+  specify some sort of flag.
+- ```storeTrue``` and ```storeFalse``` - Stores values True and False
+  respectively. These are special cases of 'storeConst'.
+- ```append``` - Stores a list, and appends each argument value to the list.
+  This is useful to allow an option to be specified multiple times.
+- ```appendConst``` - Stores a list, and appends value, specified by the
+  const keyword argument to the list. (Note, that the const keyword argument 
defaults
+  is None.) The 'appendConst' action is typically used when multiple arguments 
need
+  to store constants to the same list.
+- ```count``` - Counts the number of times a keyword argument occurs. For 
example,
+  used for increasing verbosity levels.
+- ```help``` - Prints a complete help message for all the options in the 
current
+  parser and then exits. By default a help action is automatically added to 
the parser.
+  See ArgumentParser for details of how the output is created.
+- ```version``` - Prints version information and exit. Expects a `version=`
+  keyword argument in the addArgument() call.
+
+Details in [original action 
guide](http://docs.python.org/dev/library/argparse.html#action)
+
+
+Sub-commands
+============
+
+ArgumentParser.addSubparsers()
+
+Many programs split their functionality into a number of sub-commands, for
+example, the svn program can invoke sub-commands like `svn checkout`, `svn 
update`,
+and `svn commit`. Splitting up functionality this way can be a particularly 
good
+idea when a program performs several different functions which require 
different
+kinds of command-line arguments. `ArgumentParser` supports creation of such
+sub-commands with `addSubparsers()` method. The `addSubparsers()` method is
+normally called with no arguments and returns an special action object.
+This object has a single method `addParser()`, which takes a command name and
+any `ArgumentParser` constructor arguments, and returns an `ArgumentParser` 
object
+that can be modified as usual.
+
+Example:
+
+sub_commands.js
+```javascript
+#!/usr/bin/env node
+'use strict';
+
+var ArgumentParser = require('../lib/argparse').ArgumentParser;
+var parser = new ArgumentParser({
+  version: '0.0.1',
+  addHelp:true,
+  description: 'Argparse examples: sub-commands',
+});
+
+var subparsers = parser.addSubparsers({
+  title:'subcommands',
+  dest:"subcommand_name"
+});
+
+var bar = subparsers.addParser('c1', {addHelp:true});
+bar.addArgument(
+  [ '-f', '--foo' ],
+  {
+    action: 'store',
+    help: 'foo3 bar3'
+  }
+);
+var bar = subparsers.addParser(
+  'c2',
+  {aliases:['co'], addHelp:true}
+);
+bar.addArgument(
+  [ '-b', '--bar' ],
+  {
+    action: 'store',
+    type: 'int',
+    help: 'foo3 bar3'
+  }
+);
+
+var args = parser.parseArgs();
+console.dir(args);
+
+```
+
+Details in [original sub-commands 
guide](http://docs.python.org/dev/library/argparse.html#sub-commands)
+
+
+Contributors
+============
+
+- [Eugene Shkuropat](https://github.com/shkuropat)
+- [Paul Jacobson](https://github.com/hpaulj)
+
+[others](https://github.com/nodeca/argparse/graphs/contributors)
+
+License
+=======
+
+Copyright (c) 2012 [Vitaly Puzrin](https://github.com/puzrin).
+Released under the MIT license. See
+[LICENSE](https://github.com/nodeca/argparse/blob/master/LICENSE) for details.
+
+

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/argparse/index.js
----------------------------------------------------------------------
diff --git a/node_modules/argparse/index.js b/node_modules/argparse/index.js
new file mode 100644
index 0000000..3bbc143
--- /dev/null
+++ b/node_modules/argparse/index.js
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('./lib/argparse');

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/argparse/lib/action.js
----------------------------------------------------------------------
diff --git a/node_modules/argparse/lib/action.js 
b/node_modules/argparse/lib/action.js
new file mode 100644
index 0000000..ef35989
--- /dev/null
+++ b/node_modules/argparse/lib/action.js
@@ -0,0 +1,146 @@
+/**
+ * class Action
+ *
+ * Base class for all actions
+ * Do not call in your code, use this class only for inherits your own action
+ *
+ * Information about how to convert command line strings to Javascript objects.
+ * Action objects are used by an ArgumentParser to represent the information
+ * needed to parse a single argument from one or more strings from the command
+ * line. The keyword arguments to the Action constructor are also all 
attributes
+ * of Action instances.
+ *
+ * #####Alowed keywords:
+ *
+ * - `store`
+ * - `storeConstant`
+ * - `storeTrue`
+ * - `storeFalse`
+ * - `append`
+ * - `appendConstant`
+ * - `count`
+ * - `help`
+ * - `version`
+ *
+ * Information about action options see [[Action.new]]
+ *
+ * See also [original 
guide](http://docs.python.org/dev/library/argparse.html#action)
+ *
+ **/
+
+'use strict';
+
+
+// Constants
+var c = require('./const');
+
+
+/**
+ * new Action(options)
+ *
+ * Base class for all actions. Used only for inherits
+ *
+ *
+ * ##### Options:
+ *
+ * - `optionStrings`  A list of command-line option strings for the action.
+ * - `dest`  Attribute to hold the created object(s)
+ * - `nargs`  The number of command-line arguments that should be consumed.
+ * By default, one argument will be consumed and a single value will be
+ * produced.
+ * - `constant`  Default value for an action with no value.
+ * - `defaultValue`  The value to be produced if the option is not specified.
+ * - `type`  Cast to 'string'|'int'|'float'|'complex'|function (string). If
+ * None, 'string'.
+ * - `choices`  The choices available.
+ * - `required`  True if the action must always be specified at the command
+ * line.
+ * - `help`  The help describing the argument.
+ * - `metavar`  The name to be used for the option's argument with the help
+ * string. If None, the 'dest' value will be used as the name.
+ *
+ * ##### nargs supported values:
+ *
+ * - `N` (an integer) consumes N arguments (and produces a list)
+ * - `?`  consumes zero or one arguments
+ * - `*` consumes zero or more arguments (and produces a list)
+ * - `+` consumes one or more arguments (and produces a list)
+ *
+ * Note: that the difference between the default and nargs=1 is that with the
+ * default, a single value will be produced, while with nargs=1, a list
+ * containing a single value will be produced.
+ **/
+var Action = module.exports = function Action(options) {
+  options = options || {};
+  this.optionStrings = options.optionStrings || [];
+  this.dest = options.dest;
+  this.nargs = typeof options.nargs !== 'undefined' ? options.nargs : null;
+  this.constant = typeof options.constant !== 'undefined' ? options.constant : 
null;
+  this.defaultValue = options.defaultValue;
+  this.type = typeof options.type !== 'undefined' ? options.type : null;
+  this.choices = typeof options.choices !== 'undefined' ? options.choices : 
null;
+  this.required = typeof options.required !== 'undefined' ? options.required : 
false;
+  this.help = typeof options.help !== 'undefined' ? options.help : null;
+  this.metavar = typeof options.metavar !== 'undefined' ? options.metavar : 
null;
+
+  if (!(this.optionStrings instanceof Array)) {
+    throw new Error('optionStrings should be an array');
+  }
+  if (typeof this.required !== 'undefined' && typeof this.required !== 
'boolean') {
+    throw new Error('required should be a boolean');
+  }
+};
+
+/**
+ * Action#getName -> String
+ *
+ * Tells action name
+ **/
+Action.prototype.getName = function () {
+  if (this.optionStrings.length > 0) {
+    return this.optionStrings.join('/');
+  } else if (this.metavar !== null && this.metavar !== c.SUPPRESS) {
+    return this.metavar;
+  } else if (typeof this.dest !== 'undefined' && this.dest !== c.SUPPRESS) {
+    return this.dest;
+  }
+  return null;
+};
+
+/**
+ * Action#isOptional -> Boolean
+ *
+ * Return true if optional
+ **/
+Action.prototype.isOptional = function () {
+  return !this.isPositional();
+};
+
+/**
+ * Action#isPositional -> Boolean
+ *
+ * Return true if positional
+ **/
+Action.prototype.isPositional = function () {
+  return (this.optionStrings.length === 0);
+};
+
+/**
+ * Action#call(parser, namespace, values, optionString) -> Void
+ * - parser (ArgumentParser): current parser
+ * - namespace (Namespace): namespace for output data
+ * - values (Array): parsed values
+ * - optionString (Array): input option string(not parsed)
+ *
+ * Call the action. Should be implemented in inherited classes
+ *
+ * ##### Example
+ *
+ *      ActionCount.prototype.call = function (parser, namespace, values, 
optionString) {
+ *        namespace.set(this.dest, (namespace[this.dest] || 0) + 1);
+ *      };
+ *
+ **/
+Action.prototype.call = function () {
+  throw new Error('.call() not defined');// Not Implemented error
+};

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/argparse/lib/action/append.js
----------------------------------------------------------------------
diff --git a/node_modules/argparse/lib/action/append.js 
b/node_modules/argparse/lib/action/append.js
new file mode 100644
index 0000000..b5da0de
--- /dev/null
+++ b/node_modules/argparse/lib/action/append.js
@@ -0,0 +1,53 @@
+/*:nodoc:*
+ * class ActionAppend
+ *
+ * This action stores a list, and appends each argument value to the list.
+ * This is useful to allow an option to be specified multiple times.
+ * This class inherided from [[Action]]
+ *
+ **/
+
+'use strict';
+
+var util = require('util');
+
+var Action = require('../action');
+
+// Constants
+var c = require('../const');
+
+/*:nodoc:*
+ * new ActionAppend(options)
+ * - options (object): options hash see [[Action.new]]
+ *
+ * Note: options.nargs should be optional for constants
+ * and more then zero for other
+ **/
+var ActionAppend = module.exports = function ActionAppend(options) {
+  options = options || {};
+  if (this.nargs <= 0) {
+    throw new Error('nargs for append actions must be > 0; if arg ' +
+        'strings are not supplying the value to append, ' +
+        'the append const action may be more appropriate');
+  }
+  if (!!this.constant && this.nargs !== c.OPTIONAL) {
+    throw new Error('nargs must be OPTIONAL to supply const');
+  }
+  Action.call(this, options);
+};
+util.inherits(ActionAppend, Action);
+
+/*:nodoc:*
+ * ActionAppend#call(parser, namespace, values, optionString) -> Void
+ * - parser (ArgumentParser): current parser
+ * - namespace (Namespace): namespace for output data
+ * - values (Array): parsed values
+ * - optionString (Array): input option string(not parsed)
+ *
+ * Call the action. Save result in namespace object
+ **/
+ActionAppend.prototype.call = function (parser, namespace, values) {
+  var items = (namespace[this.dest] || []).slice();
+  items.push(values);
+  namespace.set(this.dest, items);
+};

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/argparse/lib/action/append/constant.js
----------------------------------------------------------------------
diff --git a/node_modules/argparse/lib/action/append/constant.js 
b/node_modules/argparse/lib/action/append/constant.js
new file mode 100644
index 0000000..313f5d2
--- /dev/null
+++ b/node_modules/argparse/lib/action/append/constant.js
@@ -0,0 +1,47 @@
+/*:nodoc:*
+ * class ActionAppendConstant
+ *
+ * This stores a list, and appends the value specified by
+ * the const keyword argument to the list.
+ * (Note that the const keyword argument defaults to null.)
+ * The 'appendConst' action is typically useful when multiple
+ * arguments need to store constants to the same list.
+ *
+ * This class inherited from [[Action]]
+ **/
+
+'use strict';
+
+var util = require('util');
+
+var Action = require('../../action');
+
+/*:nodoc:*
+ * new ActionAppendConstant(options)
+ * - options (object): options hash see [[Action.new]]
+ *
+ **/
+var ActionAppendConstant = module.exports = function 
ActionAppendConstant(options) {
+  options = options || {};
+  options.nargs = 0;
+  if (typeof options.constant === 'undefined') {
+    throw new Error('constant option is required for appendAction');
+  }
+  Action.call(this, options);
+};
+util.inherits(ActionAppendConstant, Action);
+
+/*:nodoc:*
+ * ActionAppendConstant#call(parser, namespace, values, optionString) -> Void
+ * - parser (ArgumentParser): current parser
+ * - namespace (Namespace): namespace for output data
+ * - values (Array): parsed values
+ * - optionString (Array): input option string(not parsed)
+ *
+ * Call the action. Save result in namespace object
+ **/
+ActionAppendConstant.prototype.call = function (parser, namespace) {
+  var items = [].concat(namespace[this.dest] || []);
+  items.push(this.constant);
+  namespace.set(this.dest, items);
+};

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/argparse/lib/action/count.js
----------------------------------------------------------------------
diff --git a/node_modules/argparse/lib/action/count.js 
b/node_modules/argparse/lib/action/count.js
new file mode 100644
index 0000000..d6a5899
--- /dev/null
+++ b/node_modules/argparse/lib/action/count.js
@@ -0,0 +1,40 @@
+/*:nodoc:*
+ * class ActionCount
+ *
+ * This counts the number of times a keyword argument occurs.
+ * For example, this is useful for increasing verbosity levels
+ *
+ * This class inherided from [[Action]]
+ *
+ **/
+'use strict';
+
+var util = require('util');
+
+var Action = require('../action');
+
+/*:nodoc:*
+ * new ActionCount(options)
+ * - options (object): options hash see [[Action.new]]
+ *
+ **/
+var ActionCount = module.exports = function ActionCount(options) {
+  options = options || {};
+  options.nargs = 0;
+
+  Action.call(this, options);
+};
+util.inherits(ActionCount, Action);
+
+/*:nodoc:*
+ * ActionCount#call(parser, namespace, values, optionString) -> Void
+ * - parser (ArgumentParser): current parser
+ * - namespace (Namespace): namespace for output data
+ * - values (Array): parsed values
+ * - optionString (Array): input option string(not parsed)
+ *
+ * Call the action. Save result in namespace object
+ **/
+ActionCount.prototype.call = function (parser, namespace) {
+  namespace.set(this.dest, (namespace[this.dest] || 0) + 1);
+};

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/argparse/lib/action/help.js
----------------------------------------------------------------------
diff --git a/node_modules/argparse/lib/action/help.js 
b/node_modules/argparse/lib/action/help.js
new file mode 100644
index 0000000..b40e05a
--- /dev/null
+++ b/node_modules/argparse/lib/action/help.js
@@ -0,0 +1,47 @@
+/*:nodoc:*
+ * class ActionHelp
+ *
+ * Support action for printing help
+ * This class inherided from [[Action]]
+ **/
+'use strict';
+
+var util = require('util');
+
+var Action = require('../action');
+
+// Constants
+var c  = require('../const');
+
+/*:nodoc:*
+ * new ActionHelp(options)
+ * - options (object): options hash see [[Action.new]]
+ *
+ **/
+var ActionHelp = module.exports = function ActionHelp(options) {
+  options = options || {};
+  if (options.defaultValue !== null) {
+    options.defaultValue = options.defaultValue;
+  } else {
+    options.defaultValue = c.SUPPRESS;
+  }
+  options.dest = (options.dest !== null ? options.dest : c.SUPPRESS);
+  options.nargs = 0;
+  Action.call(this, options);
+
+};
+util.inherits(ActionHelp, Action);
+
+/*:nodoc:*
+ * ActionHelp#call(parser, namespace, values, optionString)
+ * - parser (ArgumentParser): current parser
+ * - namespace (Namespace): namespace for output data
+ * - values (Array): parsed values
+ * - optionString (Array): input option string(not parsed)
+ *
+ * Print help and exit
+ **/
+ActionHelp.prototype.call = function (parser) {
+  parser.printHelp();
+  parser.exit();
+};

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/argparse/lib/action/store.js
----------------------------------------------------------------------
diff --git a/node_modules/argparse/lib/action/store.js 
b/node_modules/argparse/lib/action/store.js
new file mode 100644
index 0000000..283b860
--- /dev/null
+++ b/node_modules/argparse/lib/action/store.js
@@ -0,0 +1,50 @@
+/*:nodoc:*
+ * class ActionStore
+ *
+ * This action just stores the argument’s value. This is the default action.
+ *
+ * This class inherited from [[Action]]
+ *
+ **/
+'use strict';
+
+var util = require('util');
+
+var Action = require('../action');
+
+// Constants
+var c = require('../const');
+
+
+/*:nodoc:*
+ * new ActionStore(options)
+ * - options (object): options hash see [[Action.new]]
+ *
+ **/
+var ActionStore = module.exports = function ActionStore(options) {
+  options = options || {};
+  if (this.nargs <= 0) {
+    throw new Error('nargs for store actions must be > 0; if you ' +
+        'have nothing to store, actions such as store ' +
+        'true or store const may be more appropriate');
+
+  }
+  if (typeof this.constant !== 'undefined' && this.nargs !== c.OPTIONAL) {
+    throw new Error('nargs must be OPTIONAL to supply const');
+  }
+  Action.call(this, options);
+};
+util.inherits(ActionStore, Action);
+
+/*:nodoc:*
+ * ActionStore#call(parser, namespace, values, optionString) -> Void
+ * - parser (ArgumentParser): current parser
+ * - namespace (Namespace): namespace for output data
+ * - values (Array): parsed values
+ * - optionString (Array): input option string(not parsed)
+ *
+ * Call the action. Save result in namespace object
+ **/
+ActionStore.prototype.call = function (parser, namespace, values) {
+  namespace.set(this.dest, values);
+};

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/argparse/lib/action/store/constant.js
----------------------------------------------------------------------
diff --git a/node_modules/argparse/lib/action/store/constant.js 
b/node_modules/argparse/lib/action/store/constant.js
new file mode 100644
index 0000000..23caa89
--- /dev/null
+++ b/node_modules/argparse/lib/action/store/constant.js
@@ -0,0 +1,43 @@
+/*:nodoc:*
+ * class ActionStoreConstant
+ *
+ * This action stores the value specified by the const keyword argument.
+ * (Note that the const keyword argument defaults to the rather unhelpful 
null.)
+ * The 'store_const' action is most commonly used with optional
+ * arguments that specify some sort of flag.
+ *
+ * This class inherited from [[Action]]
+ **/
+'use strict';
+
+var util = require('util');
+
+var Action = require('../../action');
+
+/*:nodoc:*
+ * new ActionStoreConstant(options)
+ * - options (object): options hash see [[Action.new]]
+ *
+ **/
+var ActionStoreConstant = module.exports = function 
ActionStoreConstant(options) {
+  options = options || {};
+  options.nargs = 0;
+  if (typeof options.constant === 'undefined') {
+    throw new Error('constant option is required for storeAction');
+  }
+  Action.call(this, options);
+};
+util.inherits(ActionStoreConstant, Action);
+
+/*:nodoc:*
+ * ActionStoreConstant#call(parser, namespace, values, optionString) -> Void
+ * - parser (ArgumentParser): current parser
+ * - namespace (Namespace): namespace for output data
+ * - values (Array): parsed values
+ * - optionString (Array): input option string(not parsed)
+ *
+ * Call the action. Save result in namespace object
+ **/
+ActionStoreConstant.prototype.call = function (parser, namespace) {
+  namespace.set(this.dest, this.constant);
+};

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/argparse/lib/action/store/false.js
----------------------------------------------------------------------
diff --git a/node_modules/argparse/lib/action/store/false.js 
b/node_modules/argparse/lib/action/store/false.js
new file mode 100644
index 0000000..9924f46
--- /dev/null
+++ b/node_modules/argparse/lib/action/store/false.js
@@ -0,0 +1,27 @@
+/*:nodoc:*
+ * class ActionStoreFalse
+ *
+ * This action store the values False respectively.
+ * This is special cases of 'storeConst'
+ *
+ * This class inherited from [[Action]]
+ **/
+
+'use strict';
+
+var util = require('util');
+
+var ActionStoreConstant = require('./constant');
+
+/*:nodoc:*
+ * new ActionStoreFalse(options)
+ * - options (object): hash of options see [[Action.new]]
+ *
+ **/
+var ActionStoreFalse = module.exports = function ActionStoreFalse(options) {
+  options = options || {};
+  options.constant = false;
+  options.defaultValue = options.defaultValue !== null ? options.defaultValue 
: true;
+  ActionStoreConstant.call(this, options);
+};
+util.inherits(ActionStoreFalse, ActionStoreConstant);

http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/4f8fa326/node_modules/argparse/lib/action/store/true.js
----------------------------------------------------------------------
diff --git a/node_modules/argparse/lib/action/store/true.js 
b/node_modules/argparse/lib/action/store/true.js
new file mode 100644
index 0000000..9e22f7d
--- /dev/null
+++ b/node_modules/argparse/lib/action/store/true.js
@@ -0,0 +1,26 @@
+/*:nodoc:*
+ * class ActionStoreTrue
+ *
+ * This action store the values True respectively.
+ * This isspecial cases of 'storeConst'
+ *
+ * This class inherited from [[Action]]
+ **/
+'use strict';
+
+var util = require('util');
+
+var ActionStoreConstant = require('./constant');
+
+/*:nodoc:*
+ * new ActionStoreTrue(options)
+ * - options (object): options hash see [[Action.new]]
+ *
+ **/
+var ActionStoreTrue = module.exports = function ActionStoreTrue(options) {
+  options = options || {};
+  options.constant = true;
+  options.defaultValue = options.defaultValue !== null ? options.defaultValue 
: false;
+  ActionStoreConstant.call(this, options);
+};
+util.inherits(ActionStoreTrue, ActionStoreConstant);


Reply via email to