+ * MIT Licensed
+ */
+
+/**
+ * Lame Array.isArray() polyfill for now.
+ */
+
+if (!Array.isArray) {
+ Array.isArray = function(arr){
+ return '[object Array]' == Object.prototype.toString.call(arr);
+ };
+}
+
+/**
+ * Lame Object.keys() polyfill for now.
+ */
+
+if (!Object.keys) {
+ Object.keys = function(obj){
+ var arr = [];
+ for (var key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ arr.push(key);
+ }
+ }
+ return arr;
+ }
+}
+
+/**
+ * Merge two attribute objects giving precedence
+ * to values in object `b`. Classes are special-cased
+ * allowing for arrays and merging/joining appropriately
+ * resulting in a string.
+ *
+ * @param {Object} a
+ * @param {Object} b
+ * @return {Object} a
+ * @api private
+ */
+
+exports.merge = function merge(a, b) {
+ var ac = a['class'];
+ var bc = b['class'];
+
+ if (ac || bc) {
+ ac = ac || [];
+ bc = bc || [];
+ if (!Array.isArray(ac)) ac = [ac];
+ if (!Array.isArray(bc)) bc = [bc];
+ ac = ac.filter(nulls);
+ bc = bc.filter(nulls);
+ a['class'] = ac.concat(bc).join(' ');
+ }
+
+ for (var key in b) {
+ if (key != 'class') {
+ a[key] = b[key];
+ }
+ }
+
+ return a;
+};
+
+/**
+ * Filter null `val`s.
+ *
+ * @param {Mixed} val
+ * @return {Mixed}
+ * @api private
+ */
+
+function nulls(val) {
+ return val != null;
+}
+
+/**
+ * Render the given attributes object.
+ *
+ * @param {Object} obj
+ * @param {Object} escaped
+ * @return {String}
+ * @api private
+ */
+
+exports.attrs = function attrs(obj, escaped){
+ var buf = []
+ , terse = obj.terse;
+
+ delete obj.terse;
+ var keys = Object.keys(obj)
+ , len = keys.length;
+
+ if (len) {
+ buf.push('');
+ for (var i = 0; i < len; ++i) {
+ var key = keys[i]
+ , val = obj[key];
+
+ if ('boolean' == typeof val || null == val) {
+ if (val) {
+ terse
+ ? buf.push(key)
+ : buf.push(key + '="' + key + '"');
+ }
+ } else if (0 == key.indexOf('data') && 'string' != typeof val) {
+ buf.push(key + "='" + JSON.stringify(val) + "'");
+ } else if ('class' == key && Array.isArray(val)) {
+ buf.push(key + '="' + exports.escape(val.join(' ')) + '"');
+ } else if (escaped && escaped[key]) {
+ buf.push(key + '="' + exports.escape(val) + '"');
+ } else {
+ buf.push(key + '="' + val + '"');
+ }
+ }
+ }
+
+ return buf.join(' ');
+};
+
+/**
+ * Escape the given string of `html`.
+ *
+ * @param {String} html
+ * @return {String}
+ * @api private
+ */
+
+exports.escape = function escape(html){
+ return String(html)
+ .replace(/&(?!(\w+|\#\d+);)/g, '&')
+ .replace(//g, '>')
+ .replace(/"/g, '"');
+};
+
+/**
+ * Re-throw the given `err` in context to the
+ * the jade in `filename` at the given `lineno`.
+ *
+ * @param {Error} err
+ * @param {String} filename
+ * @param {String} lineno
+ * @api private
+ */
+
+exports.rethrow = function rethrow(err, filename, lineno){
+ if (!filename) throw err;
+
+ var context = 3
+ , str = require('fs').readFileSync(filename, 'utf8')
+ , lines = str.split('\n')
+ , start = Math.max(lineno - context, 0)
+ , end = Math.min(lines.length, lineno + context);
+
+ // Error context
+ var context = lines.slice(start, end).map(function(line, i){
+ var curr = i + start + 1;
+ return (curr == lineno ? ' > ' : ' ')
+ + curr
+ + '| '
+ + line;
+ }).join('\n');
+
+ // Alter exception message
+ err.path = filename;
+ err.message = (filename || 'Jade') + ':' + lineno
+ + '\n' + context + '\n\n' + err.message;
+ throw err;
+};
+
+ return exports;
+
+})({});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/runtime.min.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/runtime.min.js
new file mode 100644
index 0000000..1714efb
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/runtime.min.js
@@ -0,0 +1 @@
+jade=function(exports){Array.isArray||(Array.isArray=function(arr){return"[object Array]"==Object.prototype.toString.call(arr)}),Object.keys||(Object.keys=function(obj){var arr=[];for(var key in obj)obj.hasOwnProperty(key)&&arr.push(key);return arr}),exports.merge=function merge(a,b){var ac=a["class"],bc=b["class"];if(ac||bc)ac=ac||[],bc=bc||[],Array.isArray(ac)||(ac=[ac]),Array.isArray(bc)||(bc=[bc]),ac=ac.filter(nulls),bc=bc.filter(nulls),a["class"]=ac.concat(bc).join(" ");for(var key in b)key!="class"&&(a[key]=b[key]);return a};function nulls(val){return val!=null}return exports.attrs=function attrs(obj,escaped){var buf=[],terse=obj.terse;delete obj.terse;var keys=Object.keys(obj),len=keys.length;if(len){buf.push("");for(var i=0;i/g,">").replace(/"/g,""")},exports.rethrow=function rethrow(err,filename,lineno){if(!filename)throw err;var context=3,str=require("fs").readFileSync(filename,"utf8"),lines=str.split("\n"),start=Math.max(lineno-context,0),end=Math.min(lines.length,lineno+context),context=lines.slice(start,end).map(function(line,i){var curr=i+start+1;return(curr==lineno?" > ":" ")+curr+"| "+line}).join("\n");throw err.path=filename,err.message=(filename||"Jade")+":"+lineno+"\n"+context+"\n\n"+err.message,err},exports}({});
\ No newline at end of file
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/test.jade b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/test.jade
new file mode 100644
index 0000000..b3a8988
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/test.jade
@@ -0,0 +1,7 @@
+p.
+ This is a large
+ body of text for
+ this tag.
+
+ Nothing too
+ exciting.
\ No newline at end of file
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/head.jade b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/head.jade
new file mode 100644
index 0000000..8515406
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/head.jade
@@ -0,0 +1,5 @@
+head
+ script(src='/jquery.js')
+ yield
+ if false
+ script(src='/jquery.ui.js')
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/index.jade b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/index.jade
new file mode 100644
index 0000000..1032c5f
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/index.jade
@@ -0,0 +1,22 @@
+
+tag = 'p'
+foo = 'bar'
+
+#{tag} value
+#{tag}(foo='bar') value
+#{foo ? 'a' : 'li'}(something) here
+
+mixin item(icon)
+ li
+ if attributes.href
+ a(attributes)
+ img.icon(src=icon)
+ block
+ else
+ span(attributes)
+ img.icon(src=icon)
+ block
+
+ul
+ +item('contact') Contact
+ +item(href='/contact') Contact
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/index.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/index.js
new file mode 100644
index 0000000..226e8c0
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/index.js
@@ -0,0 +1,11 @@
+
+/**
+ * Module dependencies.
+ */
+
+var jade = require('../');
+
+jade.renderFile('testing/index.jade', { pretty: true, debug: true, compileDebug: false }, function(err, str){
+ if (err) throw err;
+ console.log(str);
+});
\ No newline at end of file
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/layout.jade b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/layout.jade
new file mode 100644
index 0000000..6923cf1
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/layout.jade
@@ -0,0 +1,6 @@
+html
+ include head
+ script(src='/caustic.js')
+ script(src='/app.js')
+ body
+ block content
\ No newline at end of file
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/user.jade b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/user.jade
new file mode 100644
index 0000000..3c636b7
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/user.jade
@@ -0,0 +1,7 @@
+h1 Tobi
+p Is a ferret
+
+ul
+ li: a foo
+ li: a bar
+ li: a baz
\ No newline at end of file
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/user.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/user.js
new file mode 100644
index 0000000..2ecc45e
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/jade/testing/user.js
@@ -0,0 +1,27 @@
+function anonymous(locals, attrs, escape, rethrow) {
+var attrs = jade.attrs, escape = jade.escape, rethrow = jade.rethrow;
+var __jade = [{ lineno: 1, filename: "testing/user.jade" }];
+try {
+var buf = [];
+with (locals || {}) {
+var interp;
+__jade.unshift({ lineno: 1, filename: __jade[0].filename });
+__jade.unshift({ lineno: 1, filename: __jade[0].filename });
+buf.push('Tobi');
+__jade.unshift({ lineno: undefined, filename: __jade[0].filename });
+__jade.shift();
+buf.push('
');
+__jade.shift();
+__jade.unshift({ lineno: 2, filename: __jade[0].filename });
+buf.push('Is a ferret');
+__jade.unshift({ lineno: undefined, filename: __jade[0].filename });
+__jade.shift();
+buf.push('
');
+__jade.shift();
+__jade.shift();
+}
+return buf.join("");
+} catch (err) {
+ rethrow(err, __jade[0].filename, __jade[0].lineno);
+}
+}
\ No newline at end of file
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/.npmignore b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/.npmignore
new file mode 100644
index 0000000..9303c34
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/.npmignore
@@ -0,0 +1,2 @@
+node_modules/
+npm-debug.log
\ No newline at end of file
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/.travis.yml b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/.travis.yml
new file mode 100644
index 0000000..c693a93
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/.travis.yml
@@ -0,0 +1,5 @@
+language: node_js
+node_js:
+ - 0.6
+ - 0.8
+ - "0.10"
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/LICENSE b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/LICENSE
new file mode 100644
index 0000000..432d1ae
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/LICENSE
@@ -0,0 +1,21 @@
+Copyright 2010 James Halliday (mail@substack.net)
+
+This project is free software released under the MIT/X11 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.
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/bin/cmd.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/bin/cmd.js
new file mode 100755
index 0000000..d95de15
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/bin/cmd.js
@@ -0,0 +1,33 @@
+#!/usr/bin/env node
+
+var mkdirp = require('../');
+var minimist = require('minimist');
+var fs = require('fs');
+
+var argv = minimist(process.argv.slice(2), {
+ alias: { m: 'mode', h: 'help' },
+ string: [ 'mode' ]
+});
+if (argv.help) {
+ fs.createReadStream(__dirname + '/usage.txt').pipe(process.stdout);
+ return;
+}
+
+var paths = argv._.slice();
+var mode = argv.mode ? parseInt(argv.mode, 8) : undefined;
+
+(function next () {
+ if (paths.length === 0) return;
+ var p = paths.shift();
+
+ if (mode === undefined) mkdirp(p, cb)
+ else mkdirp(p, mode, cb)
+
+ function cb (err) {
+ if (err) {
+ console.error(err.message);
+ process.exit(1);
+ }
+ else next();
+ }
+})();
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/bin/usage.txt b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/bin/usage.txt
new file mode 100644
index 0000000..f952aa2
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/bin/usage.txt
@@ -0,0 +1,12 @@
+usage: mkdirp [DIR1,DIR2..] {OPTIONS}
+
+ Create each supplied directory including any necessary parent directories that
+ don't yet exist.
+
+ If the directory already exists, do nothing.
+
+OPTIONS are:
+
+ -m, --mode If a directory needs to be created, set the mode as an octal
+ permission string.
+
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/examples/pow.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/examples/pow.js
new file mode 100644
index 0000000..e692421
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/examples/pow.js
@@ -0,0 +1,6 @@
+var mkdirp = require('mkdirp');
+
+mkdirp('/tmp/foo/bar/baz', function (err) {
+ if (err) console.error(err)
+ else console.log('pow!')
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/index.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/index.js
new file mode 100644
index 0000000..a1742b2
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/index.js
@@ -0,0 +1,97 @@
+var path = require('path');
+var fs = require('fs');
+
+module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP;
+
+function mkdirP (p, opts, f, made) {
+ if (typeof opts === 'function') {
+ f = opts;
+ opts = {};
+ }
+ else if (!opts || typeof opts !== 'object') {
+ opts = { mode: opts };
+ }
+
+ var mode = opts.mode;
+ var xfs = opts.fs || fs;
+
+ if (mode === undefined) {
+ mode = 0777 & (~process.umask());
+ }
+ if (!made) made = null;
+
+ var cb = f || function () {};
+ p = path.resolve(p);
+
+ xfs.mkdir(p, mode, function (er) {
+ if (!er) {
+ made = made || p;
+ return cb(null, made);
+ }
+ switch (er.code) {
+ case 'ENOENT':
+ mkdirP(path.dirname(p), opts, function (er, made) {
+ if (er) cb(er, made);
+ else mkdirP(p, opts, cb, made);
+ });
+ break;
+
+ // In the case of any other error, just see if there's a dir
+ // there already. If so, then hooray! If not, then something
+ // is borked.
+ default:
+ xfs.stat(p, function (er2, stat) {
+ // if the stat fails, then that's super weird.
+ // let the original error be the failure reason.
+ if (er2 || !stat.isDirectory()) cb(er, made)
+ else cb(null, made);
+ });
+ break;
+ }
+ });
+}
+
+mkdirP.sync = function sync (p, opts, made) {
+ if (!opts || typeof opts !== 'object') {
+ opts = { mode: opts };
+ }
+
+ var mode = opts.mode;
+ var xfs = opts.fs || fs;
+
+ if (mode === undefined) {
+ mode = 0777 & (~process.umask());
+ }
+ if (!made) made = null;
+
+ p = path.resolve(p);
+
+ try {
+ xfs.mkdirSync(p, mode);
+ made = made || p;
+ }
+ catch (err0) {
+ switch (err0.code) {
+ case 'ENOENT' :
+ made = sync(path.dirname(p), opts, made);
+ sync(p, opts, made);
+ break;
+
+ // In the case of any other error, just see if there's a dir
+ // there already. If so, then hooray! If not, then something
+ // is borked.
+ default:
+ var stat;
+ try {
+ stat = xfs.statSync(p);
+ }
+ catch (err1) {
+ throw err0;
+ }
+ if (!stat.isDirectory()) throw err0;
+ break;
+ }
+ }
+
+ return made;
+};
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/.travis.yml b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/.travis.yml
new file mode 100644
index 0000000..cc4dba2
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - "0.8"
+ - "0.10"
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/LICENSE b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/LICENSE
new file mode 100644
index 0000000..ee27ba4
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/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.
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/example/parse.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/example/parse.js
new file mode 100644
index 0000000..abff3e8
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/example/parse.js
@@ -0,0 +1,2 @@
+var argv = require('../')(process.argv.slice(2));
+console.dir(argv);
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/index.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/index.js
new file mode 100644
index 0000000..584f551
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/index.js
@@ -0,0 +1,187 @@
+module.exports = function (args, opts) {
+ if (!opts) opts = {};
+
+ var flags = { bools : {}, strings : {} };
+
+ [].concat(opts['boolean']).filter(Boolean).forEach(function (key) {
+ flags.bools[key] = true;
+ });
+
+ [].concat(opts.string).filter(Boolean).forEach(function (key) {
+ flags.strings[key] = true;
+ });
+
+ var aliases = {};
+ Object.keys(opts.alias || {}).forEach(function (key) {
+ aliases[key] = [].concat(opts.alias[key]);
+ aliases[key].forEach(function (x) {
+ aliases[x] = [key].concat(aliases[key].filter(function (y) {
+ return x !== y;
+ }));
+ });
+ });
+
+ var defaults = opts['default'] || {};
+
+ var argv = { _ : [] };
+ Object.keys(flags.bools).forEach(function (key) {
+ setArg(key, defaults[key] === undefined ? false : defaults[key]);
+ });
+
+ var notFlags = [];
+
+ if (args.indexOf('--') !== -1) {
+ notFlags = args.slice(args.indexOf('--')+1);
+ args = args.slice(0, args.indexOf('--'));
+ }
+
+ function setArg (key, val) {
+ var value = !flags.strings[key] && isNumber(val)
+ ? Number(val) : val
+ ;
+ setKey(argv, key.split('.'), value);
+
+ (aliases[key] || []).forEach(function (x) {
+ setKey(argv, x.split('.'), value);
+ });
+ }
+
+ for (var i = 0; i < args.length; i++) {
+ var arg = args[i];
+
+ if (/^--.+=/.test(arg)) {
+ // Using [\s\S] instead of . because js doesn't support the
+ // 'dotall' regex modifier. See:
+ // http://stackoverflow.com/a/1068308/13216
+ var m = arg.match(/^--([^=]+)=([\s\S]*)$/);
+ setArg(m[1], m[2]);
+ }
+ else if (/^--no-.+/.test(arg)) {
+ var key = arg.match(/^--no-(.+)/)[1];
+ setArg(key, false);
+ }
+ else if (/^--.+/.test(arg)) {
+ var key = arg.match(/^--(.+)/)[1];
+ var next = args[i + 1];
+ if (next !== undefined && !/^-/.test(next)
+ && !flags.bools[key]
+ && (aliases[key] ? !flags.bools[aliases[key]] : true)) {
+ setArg(key, next);
+ i++;
+ }
+ else if (/^(true|false)$/.test(next)) {
+ setArg(key, next === 'true');
+ i++;
+ }
+ else {
+ setArg(key, flags.strings[key] ? '' : true);
+ }
+ }
+ else if (/^-[^-]+/.test(arg)) {
+ var letters = arg.slice(1,-1).split('');
+
+ var broken = false;
+ for (var j = 0; j < letters.length; j++) {
+ var next = arg.slice(j+2);
+
+ if (next === '-') {
+ setArg(letters[j], next)
+ continue;
+ }
+
+ if (/[A-Za-z]/.test(letters[j])
+ && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {
+ setArg(letters[j], next);
+ broken = true;
+ break;
+ }
+
+ if (letters[j+1] && letters[j+1].match(/\W/)) {
+ setArg(letters[j], arg.slice(j+2));
+ broken = true;
+ break;
+ }
+ else {
+ setArg(letters[j], flags.strings[letters[j]] ? '' : true);
+ }
+ }
+
+ var key = arg.slice(-1)[0];
+ if (!broken && key !== '-') {
+ if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1])
+ && !flags.bools[key]
+ && (aliases[key] ? !flags.bools[aliases[key]] : true)) {
+ setArg(key, args[i+1]);
+ i++;
+ }
+ else if (args[i+1] && /true|false/.test(args[i+1])) {
+ setArg(key, args[i+1] === 'true');
+ i++;
+ }
+ else {
+ setArg(key, flags.strings[key] ? '' : true);
+ }
+ }
+ }
+ else {
+ argv._.push(
+ flags.strings['_'] || !isNumber(arg) ? arg : Number(arg)
+ );
+ }
+ }
+
+ Object.keys(defaults).forEach(function (key) {
+ if (!hasKey(argv, key.split('.'))) {
+ setKey(argv, key.split('.'), defaults[key]);
+
+ (aliases[key] || []).forEach(function (x) {
+ setKey(argv, x.split('.'), defaults[key]);
+ });
+ }
+ });
+
+ notFlags.forEach(function(key) {
+ argv._.push(key);
+ });
+
+ return argv;
+};
+
+function hasKey (obj, keys) {
+ var o = obj;
+ keys.slice(0,-1).forEach(function (key) {
+ o = (o[key] || {});
+ });
+
+ var key = keys[keys.length - 1];
+ return key in o;
+}
+
+function setKey (obj, keys, value) {
+ var o = obj;
+ keys.slice(0,-1).forEach(function (key) {
+ if (o[key] === undefined) o[key] = {};
+ o = o[key];
+ });
+
+ var key = keys[keys.length - 1];
+ if (o[key] === undefined || typeof o[key] === 'boolean') {
+ o[key] = value;
+ }
+ else if (Array.isArray(o[key])) {
+ o[key].push(value);
+ }
+ else {
+ o[key] = [ o[key], value ];
+ }
+}
+
+function isNumber (x) {
+ if (typeof x === 'number') return true;
+ if (/^0x[0-9a-f]+$/i.test(x)) return true;
+ return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);
+}
+
+function longest (xs) {
+ return Math.max.apply(null, xs.map(function (x) { return x.length }));
+}
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/package.json b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/package.json
new file mode 100644
index 0000000..09e9ec4
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/package.json
@@ -0,0 +1,67 @@
+{
+ "name": "minimist",
+ "version": "0.0.8",
+ "description": "parse argument options",
+ "main": "index.js",
+ "devDependencies": {
+ "tape": "~1.0.4",
+ "tap": "~0.4.0"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "testling": {
+ "files": "test/*.js",
+ "browsers": [
+ "ie/6..latest",
+ "ff/5",
+ "firefox/latest",
+ "chrome/10",
+ "chrome/latest",
+ "safari/5.1",
+ "safari/latest",
+ "opera/12"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/substack/minimist.git"
+ },
+ "homepage": "https://github.com/substack/minimist",
+ "keywords": [
+ "argv",
+ "getopt",
+ "parser",
+ "optimist"
+ ],
+ "author": {
+ "name": "James Halliday",
+ "email": "mail@substack.net",
+ "url": "http://substack.net"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/substack/minimist/issues"
+ },
+ "_id": "minimist@0.0.8",
+ "dist": {
+ "shasum": "857fcabfc3397d2625b8228262e86aa7a011b05d",
+ "tarball": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
+ },
+ "_from": "minimist@0.0.8",
+ "_npmVersion": "1.4.3",
+ "_npmUser": {
+ "name": "substack",
+ "email": "mail@substack.net"
+ },
+ "maintainers": [
+ {
+ "name": "substack",
+ "email": "mail@substack.net"
+ }
+ ],
+ "directories": {},
+ "_shasum": "857fcabfc3397d2625b8228262e86aa7a011b05d",
+ "_resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/readme.markdown b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/readme.markdown
new file mode 100644
index 0000000..c256353
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/readme.markdown
@@ -0,0 +1,73 @@
+# minimist
+
+parse argument options
+
+This module is the guts of optimist's argument parser without all the
+fanciful decoration.
+
+[](http://ci.testling.com/substack/minimist)
+
+[](http://travis-ci.org/substack/minimist)
+
+# example
+
+``` js
+var argv = require('minimist')(process.argv.slice(2));
+console.dir(argv);
+```
+
+```
+$ node example/parse.js -a beep -b boop
+{ _: [], a: 'beep', b: 'boop' }
+```
+
+```
+$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz
+{ _: [ 'foo', 'bar', 'baz' ],
+ x: 3,
+ y: 4,
+ n: 5,
+ a: true,
+ b: true,
+ c: true,
+ beep: 'boop' }
+```
+
+# methods
+
+``` js
+var parseArgs = require('minimist')
+```
+
+## var argv = parseArgs(args, opts={})
+
+Return an argument object `argv` populated with the array arguments from `args`.
+
+`argv._` contains all the arguments that didn't have an option associated with
+them.
+
+Numeric-looking arguments will be returned as numbers unless `opts.string` or
+`opts.boolean` is set for that argument name.
+
+Any arguments after `'--'` will not be parsed and will end up in `argv._`.
+
+options can be:
+
+* `opts.string` - a string or array of strings argument names to always treat as
+strings
+* `opts.boolean` - a string or array of strings to always treat as booleans
+* `opts.alias` - an object mapping string names to strings or arrays of string
+argument names to use as aliases
+* `opts.default` - an object mapping string argument names to default values
+
+# install
+
+With [npm](https://npmjs.org) do:
+
+```
+npm install minimist
+```
+
+# license
+
+MIT
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/dash.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/dash.js
new file mode 100644
index 0000000..8b034b9
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/dash.js
@@ -0,0 +1,24 @@
+var parse = require('../');
+var test = require('tape');
+
+test('-', function (t) {
+ t.plan(5);
+ t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] });
+ t.deepEqual(parse([ '-' ]), { _: [ '-' ] });
+ t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] });
+ t.deepEqual(
+ parse([ '-b', '-' ], { boolean: 'b' }),
+ { b: true, _: [ '-' ] }
+ );
+ t.deepEqual(
+ parse([ '-s', '-' ], { string: 's' }),
+ { s: '-', _: [] }
+ );
+});
+
+test('-a -- b', function (t) {
+ t.plan(3);
+ t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] });
+ t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] });
+ t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/default_bool.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/default_bool.js
new file mode 100644
index 0000000..f0041ee
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/default_bool.js
@@ -0,0 +1,20 @@
+var test = require('tape');
+var parse = require('../');
+
+test('boolean default true', function (t) {
+ var argv = parse([], {
+ boolean: 'sometrue',
+ default: { sometrue: true }
+ });
+ t.equal(argv.sometrue, true);
+ t.end();
+});
+
+test('boolean default false', function (t) {
+ var argv = parse([], {
+ boolean: 'somefalse',
+ default: { somefalse: false }
+ });
+ t.equal(argv.somefalse, false);
+ t.end();
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/dotted.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/dotted.js
new file mode 100644
index 0000000..ef0ae34
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/dotted.js
@@ -0,0 +1,16 @@
+var parse = require('../');
+var test = require('tape');
+
+test('dotted alias', function (t) {
+ var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}});
+ t.equal(argv.a.b, 22);
+ t.equal(argv.aa.bb, 22);
+ t.end();
+});
+
+test('dotted default', function (t) {
+ var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}});
+ t.equal(argv.a.b, 11);
+ t.equal(argv.aa.bb, 11);
+ t.end();
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/long.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/long.js
new file mode 100644
index 0000000..5d3a1e0
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/long.js
@@ -0,0 +1,31 @@
+var test = require('tape');
+var parse = require('../');
+
+test('long opts', function (t) {
+ t.deepEqual(
+ parse([ '--bool' ]),
+ { bool : true, _ : [] },
+ 'long boolean'
+ );
+ t.deepEqual(
+ parse([ '--pow', 'xixxle' ]),
+ { pow : 'xixxle', _ : [] },
+ 'long capture sp'
+ );
+ t.deepEqual(
+ parse([ '--pow=xixxle' ]),
+ { pow : 'xixxle', _ : [] },
+ 'long capture eq'
+ );
+ t.deepEqual(
+ parse([ '--host', 'localhost', '--port', '555' ]),
+ { host : 'localhost', port : 555, _ : [] },
+ 'long captures sp'
+ );
+ t.deepEqual(
+ parse([ '--host=localhost', '--port=555' ]),
+ { host : 'localhost', port : 555, _ : [] },
+ 'long captures eq'
+ );
+ t.end();
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/parse.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/parse.js
new file mode 100644
index 0000000..8a90646
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/parse.js
@@ -0,0 +1,318 @@
+var parse = require('../');
+var test = require('tape');
+
+test('parse args', function (t) {
+ t.deepEqual(
+ parse([ '--no-moo' ]),
+ { moo : false, _ : [] },
+ 'no'
+ );
+ t.deepEqual(
+ parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]),
+ { v : ['a','b','c'], _ : [] },
+ 'multi'
+ );
+ t.end();
+});
+
+test('comprehensive', function (t) {
+ t.deepEqual(
+ parse([
+ '--name=meowmers', 'bare', '-cats', 'woo',
+ '-h', 'awesome', '--multi=quux',
+ '--key', 'value',
+ '-b', '--bool', '--no-meep', '--multi=baz',
+ '--', '--not-a-flag', 'eek'
+ ]),
+ {
+ c : true,
+ a : true,
+ t : true,
+ s : 'woo',
+ h : 'awesome',
+ b : true,
+ bool : true,
+ key : 'value',
+ multi : [ 'quux', 'baz' ],
+ meep : false,
+ name : 'meowmers',
+ _ : [ 'bare', '--not-a-flag', 'eek' ]
+ }
+ );
+ t.end();
+});
+
+test('nums', function (t) {
+ var argv = parse([
+ '-x', '1234',
+ '-y', '5.67',
+ '-z', '1e7',
+ '-w', '10f',
+ '--hex', '0xdeadbeef',
+ '789'
+ ]);
+ t.deepEqual(argv, {
+ x : 1234,
+ y : 5.67,
+ z : 1e7,
+ w : '10f',
+ hex : 0xdeadbeef,
+ _ : [ 789 ]
+ });
+ t.deepEqual(typeof argv.x, 'number');
+ t.deepEqual(typeof argv.y, 'number');
+ t.deepEqual(typeof argv.z, 'number');
+ t.deepEqual(typeof argv.w, 'string');
+ t.deepEqual(typeof argv.hex, 'number');
+ t.deepEqual(typeof argv._[0], 'number');
+ t.end();
+});
+
+test('flag boolean', function (t) {
+ var argv = parse([ '-t', 'moo' ], { boolean: 't' });
+ t.deepEqual(argv, { t : true, _ : [ 'moo' ] });
+ t.deepEqual(typeof argv.t, 'boolean');
+ t.end();
+});
+
+test('flag boolean value', function (t) {
+ var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], {
+ boolean: [ 't', 'verbose' ],
+ default: { verbose: true }
+ });
+
+ t.deepEqual(argv, {
+ verbose: false,
+ t: true,
+ _: ['moo']
+ });
+
+ t.deepEqual(typeof argv.verbose, 'boolean');
+ t.deepEqual(typeof argv.t, 'boolean');
+ t.end();
+});
+
+test('flag boolean default false', function (t) {
+ var argv = parse(['moo'], {
+ boolean: ['t', 'verbose'],
+ default: { verbose: false, t: false }
+ });
+
+ t.deepEqual(argv, {
+ verbose: false,
+ t: false,
+ _: ['moo']
+ });
+
+ t.deepEqual(typeof argv.verbose, 'boolean');
+ t.deepEqual(typeof argv.t, 'boolean');
+ t.end();
+
+});
+
+test('boolean groups', function (t) {
+ var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], {
+ boolean: ['x','y','z']
+ });
+
+ t.deepEqual(argv, {
+ x : true,
+ y : false,
+ z : true,
+ _ : [ 'one', 'two', 'three' ]
+ });
+
+ t.deepEqual(typeof argv.x, 'boolean');
+ t.deepEqual(typeof argv.y, 'boolean');
+ t.deepEqual(typeof argv.z, 'boolean');
+ t.end();
+});
+
+test('newlines in params' , function (t) {
+ var args = parse([ '-s', "X\nX" ])
+ t.deepEqual(args, { _ : [], s : "X\nX" });
+
+ // reproduce in bash:
+ // VALUE="new
+ // line"
+ // node program.js --s="$VALUE"
+ args = parse([ "--s=X\nX" ])
+ t.deepEqual(args, { _ : [], s : "X\nX" });
+ t.end();
+});
+
+test('strings' , function (t) {
+ var s = parse([ '-s', '0001234' ], { string: 's' }).s;
+ t.equal(s, '0001234');
+ t.equal(typeof s, 'string');
+
+ var x = parse([ '-x', '56' ], { string: 'x' }).x;
+ t.equal(x, '56');
+ t.equal(typeof x, 'string');
+ t.end();
+});
+
+test('stringArgs', function (t) {
+ var s = parse([ ' ', ' ' ], { string: '_' })._;
+ t.same(s.length, 2);
+ t.same(typeof s[0], 'string');
+ t.same(s[0], ' ');
+ t.same(typeof s[1], 'string');
+ t.same(s[1], ' ');
+ t.end();
+});
+
+test('empty strings', function(t) {
+ var s = parse([ '-s' ], { string: 's' }).s;
+ t.equal(s, '');
+ t.equal(typeof s, 'string');
+
+ var str = parse([ '--str' ], { string: 'str' }).str;
+ t.equal(str, '');
+ t.equal(typeof str, 'string');
+
+ var letters = parse([ '-art' ], {
+ string: [ 'a', 't' ]
+ });
+
+ t.equal(letters.a, '');
+ t.equal(letters.r, true);
+ t.equal(letters.t, '');
+
+ t.end();
+});
+
+
+test('slashBreak', function (t) {
+ t.same(
+ parse([ '-I/foo/bar/baz' ]),
+ { I : '/foo/bar/baz', _ : [] }
+ );
+ t.same(
+ parse([ '-xyz/foo/bar/baz' ]),
+ { x : true, y : true, z : '/foo/bar/baz', _ : [] }
+ );
+ t.end();
+});
+
+test('alias', function (t) {
+ var argv = parse([ '-f', '11', '--zoom', '55' ], {
+ alias: { z: 'zoom' }
+ });
+ t.equal(argv.zoom, 55);
+ t.equal(argv.z, argv.zoom);
+ t.equal(argv.f, 11);
+ t.end();
+});
+
+test('multiAlias', function (t) {
+ var argv = parse([ '-f', '11', '--zoom', '55' ], {
+ alias: { z: [ 'zm', 'zoom' ] }
+ });
+ t.equal(argv.zoom, 55);
+ t.equal(argv.z, argv.zoom);
+ t.equal(argv.z, argv.zm);
+ t.equal(argv.f, 11);
+ t.end();
+});
+
+test('nested dotted objects', function (t) {
+ var argv = parse([
+ '--foo.bar', '3', '--foo.baz', '4',
+ '--foo.quux.quibble', '5', '--foo.quux.o_O',
+ '--beep.boop'
+ ]);
+
+ t.same(argv.foo, {
+ bar : 3,
+ baz : 4,
+ quux : {
+ quibble : 5,
+ o_O : true
+ }
+ });
+ t.same(argv.beep, { boop : true });
+ t.end();
+});
+
+test('boolean and alias with chainable api', function (t) {
+ var aliased = [ '-h', 'derp' ];
+ var regular = [ '--herp', 'derp' ];
+ var opts = {
+ herp: { alias: 'h', boolean: true }
+ };
+ var aliasedArgv = parse(aliased, {
+ boolean: 'herp',
+ alias: { h: 'herp' }
+ });
+ var propertyArgv = parse(regular, {
+ boolean: 'herp',
+ alias: { h: 'herp' }
+ });
+ var expected = {
+ herp: true,
+ h: true,
+ '_': [ 'derp' ]
+ };
+
+ t.same(aliasedArgv, expected);
+ t.same(propertyArgv, expected);
+ t.end();
+});
+
+test('boolean and alias with options hash', function (t) {
+ var aliased = [ '-h', 'derp' ];
+ var regular = [ '--herp', 'derp' ];
+ var opts = {
+ alias: { 'h': 'herp' },
+ boolean: 'herp'
+ };
+ var aliasedArgv = parse(aliased, opts);
+ var propertyArgv = parse(regular, opts);
+ var expected = {
+ herp: true,
+ h: true,
+ '_': [ 'derp' ]
+ };
+ t.same(aliasedArgv, expected);
+ t.same(propertyArgv, expected);
+ t.end();
+});
+
+test('boolean and alias using explicit true', function (t) {
+ var aliased = [ '-h', 'true' ];
+ var regular = [ '--herp', 'true' ];
+ var opts = {
+ alias: { h: 'herp' },
+ boolean: 'h'
+ };
+ var aliasedArgv = parse(aliased, opts);
+ var propertyArgv = parse(regular, opts);
+ var expected = {
+ herp: true,
+ h: true,
+ '_': [ ]
+ };
+
+ t.same(aliasedArgv, expected);
+ t.same(propertyArgv, expected);
+ t.end();
+});
+
+// regression, see https://github.com/substack/node-optimist/issues/71
+test('boolean and --x=true', function(t) {
+ var parsed = parse(['--boool', '--other=true'], {
+ boolean: 'boool'
+ });
+
+ t.same(parsed.boool, true);
+ t.same(parsed.other, 'true');
+
+ parsed = parse(['--boool', '--other=false'], {
+ boolean: 'boool'
+ });
+
+ t.same(parsed.boool, true);
+ t.same(parsed.other, 'false');
+ t.end();
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js
new file mode 100644
index 0000000..21851b0
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js
@@ -0,0 +1,9 @@
+var parse = require('../');
+var test = require('tape');
+
+test('parse with modifier functions' , function (t) {
+ t.plan(1);
+
+ var argv = parse([ '-b', '123' ], { boolean: 'b' });
+ t.deepEqual(argv, { b: true, _: ['123'] });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/short.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/short.js
new file mode 100644
index 0000000..d513a1c
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/short.js
@@ -0,0 +1,67 @@
+var parse = require('../');
+var test = require('tape');
+
+test('numeric short args', function (t) {
+ t.plan(2);
+ t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] });
+ t.deepEqual(
+ parse([ '-123', '456' ]),
+ { 1: true, 2: true, 3: 456, _: [] }
+ );
+});
+
+test('short', function (t) {
+ t.deepEqual(
+ parse([ '-b' ]),
+ { b : true, _ : [] },
+ 'short boolean'
+ );
+ t.deepEqual(
+ parse([ 'foo', 'bar', 'baz' ]),
+ { _ : [ 'foo', 'bar', 'baz' ] },
+ 'bare'
+ );
+ t.deepEqual(
+ parse([ '-cats' ]),
+ { c : true, a : true, t : true, s : true, _ : [] },
+ 'group'
+ );
+ t.deepEqual(
+ parse([ '-cats', 'meow' ]),
+ { c : true, a : true, t : true, s : 'meow', _ : [] },
+ 'short group next'
+ );
+ t.deepEqual(
+ parse([ '-h', 'localhost' ]),
+ { h : 'localhost', _ : [] },
+ 'short capture'
+ );
+ t.deepEqual(
+ parse([ '-h', 'localhost', '-p', '555' ]),
+ { h : 'localhost', p : 555, _ : [] },
+ 'short captures'
+ );
+ t.end();
+});
+
+test('mixed short bool and capture', function (t) {
+ t.same(
+ parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]),
+ {
+ f : true, p : 555, h : 'localhost',
+ _ : [ 'script.js' ]
+ }
+ );
+ t.end();
+});
+
+test('short and long', function (t) {
+ t.deepEqual(
+ parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]),
+ {
+ f : true, p : 555, h : 'localhost',
+ _ : [ 'script.js' ]
+ }
+ );
+ t.end();
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/whitespace.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/whitespace.js
new file mode 100644
index 0000000..8a52a58
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/node_modules/minimist/test/whitespace.js
@@ -0,0 +1,8 @@
+var parse = require('../');
+var test = require('tape');
+
+test('whitespace should be whitespace' , function (t) {
+ t.plan(1);
+ var x = parse([ '-x', '\t' ]).x;
+ t.equal(x, '\t');
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/package.json b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/package.json
new file mode 100644
index 0000000..14bae95
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/package.json
@@ -0,0 +1,58 @@
+{
+ "name": "mkdirp",
+ "description": "Recursively mkdir, like `mkdir -p`",
+ "version": "0.5.0",
+ "author": {
+ "name": "James Halliday",
+ "email": "mail@substack.net",
+ "url": "http://substack.net"
+ },
+ "main": "./index",
+ "keywords": [
+ "mkdir",
+ "directory"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/substack/node-mkdirp.git"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "dependencies": {
+ "minimist": "0.0.8"
+ },
+ "devDependencies": {
+ "tap": "~0.4.0",
+ "mock-fs": "~2.2.0"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/substack/node-mkdirp/issues"
+ },
+ "homepage": "https://github.com/substack/node-mkdirp",
+ "_id": "mkdirp@0.5.0",
+ "dist": {
+ "shasum": "1d73076a6df986cd9344e15e71fcc05a4c9abf12",
+ "tarball": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz"
+ },
+ "_from": "mkdirp@0.5.0",
+ "_npmVersion": "1.4.3",
+ "_npmUser": {
+ "name": "substack",
+ "email": "mail@substack.net"
+ },
+ "maintainers": [
+ {
+ "name": "substack",
+ "email": "mail@substack.net"
+ }
+ ],
+ "directories": {},
+ "_shasum": "1d73076a6df986cd9344e15e71fcc05a4c9abf12",
+ "_resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/readme.markdown b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/readme.markdown
new file mode 100644
index 0000000..3cc1315
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/readme.markdown
@@ -0,0 +1,100 @@
+# mkdirp
+
+Like `mkdir -p`, but in node.js!
+
+[](http://travis-ci.org/substack/node-mkdirp)
+
+# example
+
+## pow.js
+
+```js
+var mkdirp = require('mkdirp');
+
+mkdirp('/tmp/foo/bar/baz', function (err) {
+ if (err) console.error(err)
+ else console.log('pow!')
+});
+```
+
+Output
+
+```
+pow!
+```
+
+And now /tmp/foo/bar/baz exists, huzzah!
+
+# methods
+
+```js
+var mkdirp = require('mkdirp');
+```
+
+## mkdirp(dir, opts, cb)
+
+Create a new directory and any necessary subdirectories at `dir` with octal
+permission string `opts.mode`. If `opts` is a non-object, it will be treated as
+the `opts.mode`.
+
+If `opts.mode` isn't specified, it defaults to `0777 & (~process.umask())`.
+
+`cb(err, made)` fires with the error or the first directory `made`
+that had to be created, if any.
+
+You can optionally pass in an alternate `fs` implementation by passing in
+`opts.fs`. Your implementation should have `opts.fs.mkdir(path, mode, cb)` and
+`opts.fs.stat(path, cb)`.
+
+## mkdirp.sync(dir, opts)
+
+Synchronously create a new directory and any necessary subdirectories at `dir`
+with octal permission string `opts.mode`. If `opts` is a non-object, it will be
+treated as the `opts.mode`.
+
+If `opts.mode` isn't specified, it defaults to `0777 & (~process.umask())`.
+
+Returns the first directory that had to be created, if any.
+
+You can optionally pass in an alternate `fs` implementation by passing in
+`opts.fs`. Your implementation should have `opts.fs.mkdirSync(path, mode)` and
+`opts.fs.statSync(path)`.
+
+# usage
+
+This package also ships with a `mkdirp` command.
+
+```
+usage: mkdirp [DIR1,DIR2..] {OPTIONS}
+
+ Create each supplied directory including any necessary parent directories that
+ don't yet exist.
+
+ If the directory already exists, do nothing.
+
+OPTIONS are:
+
+ -m, --mode If a directory needs to be created, set the mode as an octal
+ permission string.
+
+```
+
+# install
+
+With [npm](http://npmjs.org) do:
+
+```
+npm install mkdirp
+```
+
+to get the library, or
+
+```
+npm install -g mkdirp
+```
+
+to get the command.
+
+# license
+
+MIT
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/chmod.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/chmod.js
new file mode 100644
index 0000000..520dcb8
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/chmod.js
@@ -0,0 +1,38 @@
+var mkdirp = require('../').mkdirp;
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+var ps = [ '', 'tmp' ];
+
+for (var i = 0; i < 25; i++) {
+ var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ ps.push(dir);
+}
+
+var file = ps.join('/');
+
+test('chmod-pre', function (t) {
+ var mode = 0744
+ mkdirp(file, mode, function (er) {
+ t.ifError(er, 'should not error');
+ fs.stat(file, function (er, stat) {
+ t.ifError(er, 'should exist');
+ t.ok(stat && stat.isDirectory(), 'should be directory');
+ t.equal(stat && stat.mode & 0777, mode, 'should be 0744');
+ t.end();
+ });
+ });
+});
+
+test('chmod', function (t) {
+ var mode = 0755
+ mkdirp(file, mode, function (er) {
+ t.ifError(er, 'should not error');
+ fs.stat(file, function (er, stat) {
+ t.ifError(er, 'should exist');
+ t.ok(stat && stat.isDirectory(), 'should be directory');
+ t.end();
+ });
+ });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/clobber.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/clobber.js
new file mode 100644
index 0000000..0eb7099
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/clobber.js
@@ -0,0 +1,37 @@
+var mkdirp = require('../').mkdirp;
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+var ps = [ '', 'tmp' ];
+
+for (var i = 0; i < 25; i++) {
+ var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ ps.push(dir);
+}
+
+var file = ps.join('/');
+
+// a file in the way
+var itw = ps.slice(0, 3).join('/');
+
+
+test('clobber-pre', function (t) {
+ console.error("about to write to "+itw)
+ fs.writeFileSync(itw, 'I AM IN THE WAY, THE TRUTH, AND THE LIGHT.');
+
+ fs.stat(itw, function (er, stat) {
+ t.ifError(er)
+ t.ok(stat && stat.isFile(), 'should be file')
+ t.end()
+ })
+})
+
+test('clobber', function (t) {
+ t.plan(2);
+ mkdirp(file, 0755, function (err) {
+ t.ok(err);
+ t.equal(err.code, 'ENOTDIR');
+ t.end();
+ });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/mkdirp.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/mkdirp.js
new file mode 100644
index 0000000..3b624dd
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/mkdirp.js
@@ -0,0 +1,26 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var exists = fs.exists || path.exists;
+var test = require('tap').test;
+
+test('woo', function (t) {
+ t.plan(5);
+ var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+
+ var file = '/tmp/' + [x,y,z].join('/');
+
+ mkdirp(file, 0755, function (err) {
+ t.ifError(err);
+ exists(file, function (ex) {
+ t.ok(ex, 'file created');
+ fs.stat(file, function (err, stat) {
+ t.ifError(err);
+ t.equal(stat.mode & 0777, 0755);
+ t.ok(stat.isDirectory(), 'target not a directory');
+ })
+ })
+ });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/opts_fs.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/opts_fs.js
new file mode 100644
index 0000000..f1fbeca
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/opts_fs.js
@@ -0,0 +1,27 @@
+var mkdirp = require('../');
+var path = require('path');
+var test = require('tap').test;
+var mockfs = require('mock-fs');
+
+test('opts.fs', function (t) {
+ t.plan(5);
+
+ var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+
+ var file = '/beep/boop/' + [x,y,z].join('/');
+ var xfs = mockfs.fs();
+
+ mkdirp(file, { fs: xfs, mode: 0755 }, function (err) {
+ t.ifError(err);
+ xfs.exists(file, function (ex) {
+ t.ok(ex, 'created file');
+ xfs.stat(file, function (err, stat) {
+ t.ifError(err);
+ t.equal(stat.mode & 0777, 0755);
+ t.ok(stat.isDirectory(), 'target not a directory');
+ });
+ });
+ });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/opts_fs_sync.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/opts_fs_sync.js
new file mode 100644
index 0000000..224b506
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/opts_fs_sync.js
@@ -0,0 +1,25 @@
+var mkdirp = require('../');
+var path = require('path');
+var test = require('tap').test;
+var mockfs = require('mock-fs');
+
+test('opts.fs sync', function (t) {
+ t.plan(4);
+
+ var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+
+ var file = '/beep/boop/' + [x,y,z].join('/');
+ var xfs = mockfs.fs();
+
+ mkdirp.sync(file, { fs: xfs, mode: 0755 });
+ xfs.exists(file, function (ex) {
+ t.ok(ex, 'created file');
+ xfs.stat(file, function (err, stat) {
+ t.ifError(err);
+ t.equal(stat.mode & 0777, 0755);
+ t.ok(stat.isDirectory(), 'target not a directory');
+ });
+ });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/perm.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/perm.js
new file mode 100644
index 0000000..2c97590
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/perm.js
@@ -0,0 +1,30 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var exists = fs.exists || path.exists;
+var test = require('tap').test;
+
+test('async perm', function (t) {
+ t.plan(5);
+ var file = '/tmp/' + (Math.random() * (1<<30)).toString(16);
+
+ mkdirp(file, 0755, function (err) {
+ t.ifError(err);
+ exists(file, function (ex) {
+ t.ok(ex, 'file created');
+ fs.stat(file, function (err, stat) {
+ t.ifError(err);
+ t.equal(stat.mode & 0777, 0755);
+ t.ok(stat.isDirectory(), 'target not a directory');
+ })
+ })
+ });
+});
+
+test('async root perm', function (t) {
+ mkdirp('/tmp', 0755, function (err) {
+ if (err) t.fail(err);
+ t.end();
+ });
+ t.end();
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/perm_sync.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/perm_sync.js
new file mode 100644
index 0000000..327e54b
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/perm_sync.js
@@ -0,0 +1,34 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var exists = fs.exists || path.exists;
+var test = require('tap').test;
+
+test('sync perm', function (t) {
+ t.plan(4);
+ var file = '/tmp/' + (Math.random() * (1<<30)).toString(16) + '.json';
+
+ mkdirp.sync(file, 0755);
+ exists(file, function (ex) {
+ t.ok(ex, 'file created');
+ fs.stat(file, function (err, stat) {
+ t.ifError(err);
+ t.equal(stat.mode & 0777, 0755);
+ t.ok(stat.isDirectory(), 'target not a directory');
+ });
+ });
+});
+
+test('sync root perm', function (t) {
+ t.plan(3);
+
+ var file = '/tmp';
+ mkdirp.sync(file, 0755);
+ exists(file, function (ex) {
+ t.ok(ex, 'file created');
+ fs.stat(file, function (err, stat) {
+ t.ifError(err);
+ t.ok(stat.isDirectory(), 'target not a directory');
+ })
+ });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/race.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/race.js
new file mode 100644
index 0000000..7c295f4
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/race.js
@@ -0,0 +1,40 @@
+var mkdirp = require('../').mkdirp;
+var path = require('path');
+var fs = require('fs');
+var exists = fs.exists || path.exists;
+var test = require('tap').test;
+
+test('race', function (t) {
+ t.plan(6);
+ var ps = [ '', 'tmp' ];
+
+ for (var i = 0; i < 25; i++) {
+ var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ ps.push(dir);
+ }
+ var file = ps.join('/');
+
+ var res = 2;
+ mk(file, function () {
+ if (--res === 0) t.end();
+ });
+
+ mk(file, function () {
+ if (--res === 0) t.end();
+ });
+
+ function mk (file, cb) {
+ mkdirp(file, 0755, function (err) {
+ t.ifError(err);
+ exists(file, function (ex) {
+ t.ok(ex, 'file created');
+ fs.stat(file, function (err, stat) {
+ t.ifError(err);
+ t.equal(stat.mode & 0777, 0755);
+ t.ok(stat.isDirectory(), 'target not a directory');
+ if (cb) cb();
+ });
+ })
+ });
+ }
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/rel.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/rel.js
new file mode 100644
index 0000000..d1f175c
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/rel.js
@@ -0,0 +1,30 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var exists = fs.exists || path.exists;
+var test = require('tap').test;
+
+test('rel', function (t) {
+ t.plan(5);
+ var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+
+ var cwd = process.cwd();
+ process.chdir('/tmp');
+
+ var file = [x,y,z].join('/');
+
+ mkdirp(file, 0755, function (err) {
+ t.ifError(err);
+ exists(file, function (ex) {
+ t.ok(ex, 'file created');
+ fs.stat(file, function (err, stat) {
+ t.ifError(err);
+ process.chdir(cwd);
+ t.equal(stat.mode & 0777, 0755);
+ t.ok(stat.isDirectory(), 'target not a directory');
+ })
+ })
+ });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/return.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/return.js
new file mode 100644
index 0000000..bce68e5
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/return.js
@@ -0,0 +1,25 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('return value', function (t) {
+ t.plan(4);
+ var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+
+ var file = '/tmp/' + [x,y,z].join('/');
+
+ // should return the first dir created.
+ // By this point, it would be profoundly surprising if /tmp didn't
+ // already exist, since every other test makes things in there.
+ mkdirp(file, function (err, made) {
+ t.ifError(err);
+ t.equal(made, '/tmp/' + x);
+ mkdirp(file, function (err, made) {
+ t.ifError(err);
+ t.equal(made, null);
+ });
+ });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/return_sync.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/return_sync.js
new file mode 100644
index 0000000..7c222d3
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/return_sync.js
@@ -0,0 +1,24 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('return value', function (t) {
+ t.plan(2);
+ var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+
+ var file = '/tmp/' + [x,y,z].join('/');
+
+ // should return the first dir created.
+ // By this point, it would be profoundly surprising if /tmp didn't
+ // already exist, since every other test makes things in there.
+ // Note that this will throw on failure, which will fail the test.
+ var made = mkdirp.sync(file);
+ t.equal(made, '/tmp/' + x);
+
+ // making the same file again should have no effect.
+ made = mkdirp.sync(file);
+ t.equal(made, null);
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/root.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/root.js
new file mode 100644
index 0000000..97ad7a2
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/root.js
@@ -0,0 +1,18 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var test = require('tap').test;
+
+test('root', function (t) {
+ // '/' on unix, 'c:/' on windows.
+ var file = path.resolve('/');
+
+ mkdirp(file, 0755, function (err) {
+ if (err) throw err
+ fs.stat(file, function (er, stat) {
+ if (er) throw er
+ t.ok(stat.isDirectory(), 'target is a directory');
+ t.end();
+ })
+ });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/sync.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/sync.js
new file mode 100644
index 0000000..88fa432
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/sync.js
@@ -0,0 +1,30 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var exists = fs.exists || path.exists;
+var test = require('tap').test;
+
+test('sync', function (t) {
+ t.plan(4);
+ var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+
+ var file = '/tmp/' + [x,y,z].join('/');
+
+ try {
+ mkdirp.sync(file, 0755);
+ } catch (err) {
+ t.fail(err);
+ return t.end();
+ }
+
+ exists(file, function (ex) {
+ t.ok(ex, 'file created');
+ fs.stat(file, function (err, stat) {
+ t.ifError(err);
+ t.equal(stat.mode & 0777, 0755);
+ t.ok(stat.isDirectory(), 'target not a directory');
+ });
+ });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/umask.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/umask.js
new file mode 100644
index 0000000..82c393a
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/umask.js
@@ -0,0 +1,26 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var exists = fs.exists || path.exists;
+var test = require('tap').test;
+
+test('implicit mode from umask', function (t) {
+ t.plan(5);
+ var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+
+ var file = '/tmp/' + [x,y,z].join('/');
+
+ mkdirp(file, function (err) {
+ t.ifError(err);
+ exists(file, function (ex) {
+ t.ok(ex, 'file created');
+ fs.stat(file, function (err, stat) {
+ t.ifError(err);
+ t.equal(stat.mode & 0777, 0777 & (~process.umask()));
+ t.ok(stat.isDirectory(), 'target not a directory');
+ });
+ })
+ });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/umask_sync.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/umask_sync.js
new file mode 100644
index 0000000..e537fbe
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/mkdirp/test/umask_sync.js
@@ -0,0 +1,30 @@
+var mkdirp = require('../');
+var path = require('path');
+var fs = require('fs');
+var exists = fs.exists || path.exists;
+var test = require('tap').test;
+
+test('umask sync modes', function (t) {
+ t.plan(4);
+ var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+ var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
+
+ var file = '/tmp/' + [x,y,z].join('/');
+
+ try {
+ mkdirp.sync(file);
+ } catch (err) {
+ t.fail(err);
+ return t.end();
+ }
+
+ exists(file, function (ex) {
+ t.ok(ex, 'file created');
+ fs.stat(file, function (err, stat) {
+ t.ifError(err);
+ t.equal(stat.mode & 0777, (0777 & (~process.umask())));
+ t.ok(stat.isDirectory(), 'target not a directory');
+ });
+ });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/supports-color/cli.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/supports-color/cli.js
new file mode 100755
index 0000000..e746987
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/supports-color/cli.js
@@ -0,0 +1,29 @@
+#!/usr/bin/env node
+'use strict';
+var pkg = require('./package.json');
+var supportsColor = require('./');
+var argv = process.argv.slice(2);
+
+function help() {
+ console.log([
+ '',
+ ' ' + pkg.description,
+ '',
+ ' Usage',
+ ' supports-color',
+ '',
+ ' Exits with code 0 if color is supported and 1 if not'
+ ].join('\n'));
+}
+
+if (argv.indexOf('--help') !== -1) {
+ help();
+ return;
+}
+
+if (argv.indexOf('--version') !== -1) {
+ console.log(pkg.version);
+ return;
+}
+
+process.exit(supportsColor ? 0 : 1);
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/supports-color/index.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/supports-color/index.js
new file mode 100644
index 0000000..a2b9784
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/supports-color/index.js
@@ -0,0 +1,39 @@
+'use strict';
+var argv = process.argv;
+
+module.exports = (function () {
+ if (argv.indexOf('--no-color') !== -1 ||
+ argv.indexOf('--no-colors') !== -1 ||
+ argv.indexOf('--color=false') !== -1) {
+ return false;
+ }
+
+ if (argv.indexOf('--color') !== -1 ||
+ argv.indexOf('--colors') !== -1 ||
+ argv.indexOf('--color=true') !== -1 ||
+ argv.indexOf('--color=always') !== -1) {
+ return true;
+ }
+
+ if (process.stdout && !process.stdout.isTTY) {
+ return false;
+ }
+
+ if (process.platform === 'win32') {
+ return true;
+ }
+
+ if ('COLORTERM' in process.env) {
+ return true;
+ }
+
+ if (process.env.TERM === 'dumb') {
+ return false;
+ }
+
+ if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) {
+ return true;
+ }
+
+ return false;
+})();
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/supports-color/package.json b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/supports-color/package.json
new file mode 100644
index 0000000..acd9b66
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/supports-color/package.json
@@ -0,0 +1,85 @@
+{
+ "name": "supports-color",
+ "version": "1.2.0",
+ "description": "Detect whether a terminal supports color",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/sindresorhus/supports-color.git"
+ },
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "http://sindresorhus.com"
+ },
+ "bin": {
+ "supports-color": "cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "files": [
+ "index.js",
+ "cli.js"
+ ],
+ "keywords": [
+ "cli",
+ "bin",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "ansi",
+ "styles",
+ "tty",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "command-line",
+ "support",
+ "supports",
+ "capability",
+ "detect"
+ ],
+ "devDependencies": {
+ "mocha": "*",
+ "require-uncached": "^1.0.2"
+ },
+ "gitHead": "e1815a472ebb59612e485096ae31a394e47d3c93",
+ "bugs": {
+ "url": "https://github.com/sindresorhus/supports-color/issues"
+ },
+ "homepage": "https://github.com/sindresorhus/supports-color",
+ "_id": "supports-color@1.2.0",
+ "_shasum": "ff1ed1e61169d06b3cf2d588e188b18d8847e17e",
+ "_from": "supports-color@1.2.0",
+ "_npmVersion": "2.1.2",
+ "_nodeVersion": "0.10.32",
+ "_npmUser": {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ },
+ {
+ "name": "jbnicolai",
+ "email": "jappelman@xebia.com"
+ }
+ ],
+ "dist": {
+ "shasum": "ff1ed1e61169d06b3cf2d588e188b18d8847e17e",
+ "tarball": "http://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/supports-color/readme.md b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/supports-color/readme.md
new file mode 100644
index 0000000..32d4f46
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/node_modules/supports-color/readme.md
@@ -0,0 +1,44 @@
+# supports-color [](https://travis-ci.org/sindresorhus/supports-color)
+
+> Detect whether a terminal supports color
+
+
+## Install
+
+```sh
+$ npm install --save supports-color
+```
+
+
+## Usage
+
+```js
+var supportsColor = require('supports-color');
+
+if (supportsColor) {
+ console.log('Terminal supports color');
+}
+```
+
+It obeys the `--color` and `--no-color` CLI flags.
+
+
+## CLI
+
+```sh
+$ npm install --global supports-color
+```
+
+```
+$ supports-color --help
+
+ Usage
+ supports-color
+
+ Exits with code 0 if color is supported and 1 if not
+```
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/package.json b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/package.json
new file mode 100644
index 0000000..16a112d
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/mocha/package.json
@@ -0,0 +1,1073 @@
+{
+ "name": "mocha",
+ "version": "2.3.3",
+ "description": "simple, flexible, fun test framework",
+ "keywords": [
+ "mocha",
+ "test",
+ "bdd",
+ "tdd",
+ "tap"
+ ],
+ "author": {
+ "name": "TJ Holowaychuk",
+ "email": "tj@vision-media.ca"
+ },
+ "contributors": [
+ {
+ "name": "Travis Jeffery",
+ "email": "tj@travisjeffery.com"
+ },
+ {
+ "name": "Christopher Hiller",
+ "email": "boneskull@boneskull.com"
+ },
+ {
+ "name": "Joshua Appelman",
+ "email": "jappelman@xebia.com"
+ },
+ {
+ "name": "Guillermo Rauch",
+ "email": "rauchg@gmail.com"
+ },
+ {
+ "name": "David da Silva Contín",
+ "email": "dasilvacontin@gmail.com"
+ },
+ {
+ "name": "Daniel St. Jules",
+ "email": "danielst.jules@gmail.com"
+ },
+ {
+ "name": "Ariel Mashraki",
+ "email": "ariel@mashraki.co.il"
+ },
+ {
+ "name": "Attila Domokos",
+ "email": "adomokos@gmail.com"
+ },
+ {
+ "name": "John Firebaugh",
+ "email": "john.firebaugh@gmail.com"
+ },
+ {
+ "name": "Nathan Rajlich",
+ "email": "nathan@tootallnate.net"
+ },
+ {
+ "name": "Jo Liss",
+ "email": "joliss42@gmail.com"
+ },
+ {
+ "name": "Mike Pennisi",
+ "email": "mike@mikepennisi.com"
+ },
+ {
+ "name": "Brendan Nee",
+ "email": "brendan.nee@gmail.com"
+ },
+ {
+ "name": "James Carr",
+ "email": "james.r.carr@gmail.com"
+ },
+ {
+ "name": "Ryunosuke SATO",
+ "email": "tricknotes.rs@gmail.com"
+ },
+ {
+ "name": "Aaron Heckmann",
+ "email": "aaron.heckmann+github@gmail.com"
+ },
+ {
+ "name": "Jonathan Ong",
+ "email": "jonathanrichardong@gmail.com"
+ },
+ {
+ "name": "Forbes Lindesay",
+ "email": "forbes@lindesay.co.uk"
+ },
+ {
+ "name": "Raynos",
+ "email": "raynos2@gmail.com"
+ },
+ {
+ "name": "Xavier Antoviaque",
+ "email": "xavier@antoviaque.org"
+ },
+ {
+ "name": "hokaccha",
+ "email": "k.hokamura@gmail.com"
+ },
+ {
+ "name": "Joshua Krall",
+ "email": "joshuakrall@pobox.com"
+ },
+ {
+ "name": "Domenic Denicola",
+ "email": "domenic@domenicdenicola.com"
+ },
+ {
+ "name": "Glen Mailer",
+ "email": "glenjamin@gmail.com"
+ },
+ {
+ "name": "Mathieu Desvé",
+ "email": "mathieudesve@MacBook-Pro-de-Mathieu.local"
+ },
+ {
+ "name": "Cory Thomas",
+ "email": "cory.thomas@bazaarvoice.com"
+ },
+ {
+ "name": "Fredrik Enestad",
+ "email": "fredrik@devloop.se"
+ },
+ {
+ "name": "Ben Bradley",
+ "email": "ben@bradleyit.com"
+ },
+ {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com"
+ },
+ {
+ "name": "Jesse Dailey",
+ "email": "jesse.dailey@gmail.com"
+ },
+ {
+ "name": "Ben Lindsey",
+ "email": "ben.lindsey@vungle.com"
+ },
+ {
+ "name": "Maximilian Antoni",
+ "email": "mail@maxantoni.de"
+ },
+ {
+ "name": "Merrick Christensen",
+ "email": "merrick.christensen@gmail.com"
+ },
+ {
+ "name": "Michael Demmer",
+ "email": "demmer@jut.io"
+ },
+ {
+ "name": "Tyson Tate",
+ "email": "tyson@tysontate.com"
+ },
+ {
+ "name": "Valentin Agachi",
+ "email": "github-com@agachi.name"
+ },
+ {
+ "name": "Wil Moore III",
+ "email": "wil.moore@wilmoore.com"
+ },
+ {
+ "name": "Benjie Gillam",
+ "email": "benjie@jemjie.com"
+ },
+ {
+ "name": "Nathan Bowser",
+ "email": "nathan.bowser@spiderstrategies.com"
+ },
+ {
+ "name": "eiji.ienaga",
+ "email": "eiji.ienaga@gmail.com"
+ },
+ {
+ "name": "fool2fish",
+ "email": "fool2fish@gmail.com"
+ },
+ {
+ "name": "Paul Miller",
+ "email": "paul@paulmillr.com"
+ },
+ {
+ "name": "Andreas Lind Petersen",
+ "email": "andreas@one.com"
+ },
+ {
+ "name": "Timo Tijhof",
+ "email": "krinklemail@gmail.com"
+ },
+ {
+ "name": "Nathan Alderson",
+ "email": "nathan.alderson@adtran.com"
+ },
+ {
+ "name": "Ian Storm Taylor",
+ "email": "ian@ianstormtaylor.com"
+ },
+ {
+ "name": "Arian Stolwijk",
+ "email": "arian@aryweb.nl"
+ },
+ {
+ "name": "Rico Sta. Cruz",
+ "email": "rstacruz@users.noreply.github.com"
+ },
+ {
+ "name": "domenic",
+ "email": "domenic@domenicdenicola.com"
+ },
+ {
+ "name": "Jacob Wejendorp",
+ "email": "jacob@wejendorp.dk"
+ },
+ {
+ "name": "fcrisci",
+ "email": "fabio.crisci@amadeus.com"
+ },
+ {
+ "name": "Simon Gaeremynck",
+ "email": "gaeremyncks@gmail.com"
+ },
+ {
+ "name": "James Nylen",
+ "email": "jnylen@gmail.com"
+ },
+ {
+ "name": "Shawn Krisman",
+ "email": "telaviv@github"
+ },
+ {
+ "name": "Sean Lang",
+ "email": "slang800@gmail.com"
+ },
+ {
+ "name": "David Henderson",
+ "email": "david.henderson@triggeredmessaging.com"
+ },
+ {
+ "name": "jsdevel",
+ "email": "js.developer.undefined@gmail.com"
+ },
+ {
+ "name": "Alexander Early",
+ "email": "alexander.early@gmail.com"
+ },
+ {
+ "name": "Parker Moore",
+ "email": "parkrmoore@gmail.com"
+ },
+ {
+ "name": "Paul Armstrong",
+ "email": "paul@paularmstrongdesigns.com"
+ },
+ {
+ "name": "monowerker",
+ "email": "monowerker@gmail.com"
+ },
+ {
+ "name": "Konstantin Käfer",
+ "email": "github@kkaefer.com"
+ },
+ {
+ "name": "Justin DuJardin",
+ "email": "justin.dujardin@sococo.com"
+ },
+ {
+ "name": "Juzer Ali",
+ "email": "er.juzerali@gmail.com"
+ },
+ {
+ "name": "Dominique Quatravaux",
+ "email": "dominique@quatravaux.org"
+ },
+ {
+ "name": "Quang Van",
+ "email": "quangvvv@gmail.com"
+ },
+ {
+ "name": "Quanlong He",
+ "email": "kyan.ql.he@gmail.com"
+ },
+ {
+ "name": "Vlad Magdalin",
+ "email": "vlad@webflow.com"
+ },
+ {
+ "name": "Brian Beck",
+ "email": "exogen@gmail.com"
+ },
+ {
+ "name": "Jonas Westerlund",
+ "email": "jonas.westerlund@me.com"
+ },
+ {
+ "name": "Michael Riley",
+ "email": "michael.riley@autodesk.com"
+ },
+ {
+ "name": "Buck Doyle",
+ "email": "b@chromatin.ca"
+ },
+ {
+ "name": "FARKAS Máté",
+ "email": "mate.farkas@virtual-call-center.eu"
+ },
+ {
+ "name": "Sune Simonsen",
+ "email": "sune@we-knowhow.dk"
+ },
+ {
+ "name": "Keith Cirkel",
+ "email": "github@keithcirkel.co.uk"
+ },
+ {
+ "name": "Kent C. Dodds",
+ "email": "kent+github@doddsfamily.us"
+ },
+ {
+ "name": "Kevin Conway",
+ "email": "kevinjacobconway@gmail.com"
+ },
+ {
+ "name": "Kevin Kirsche",
+ "email": "Kev.Kirsche+GitHub@gmail.com"
+ },
+ {
+ "name": "Kirill Korolyov",
+ "email": "kirill.korolyov@gmail.com"
+ },
+ {
+ "name": "Koen Punt",
+ "email": "koen@koenpunt.nl"
+ },
+ {
+ "name": "Kyle Mitchell",
+ "email": "kyle@kemitchell.com"
+ },
+ {
+ "name": "Laszlo Bacsi",
+ "email": "lackac@lackac.hu"
+ },
+ {
+ "name": "Liam Newman",
+ "email": "bitwiseman@gmail.com"
+ },
+ {
+ "name": "Linus Unnebäck",
+ "email": "linus@folkdatorn.se"
+ },
+ {
+ "name": "László Bácsi",
+ "email": "lackac@lackac.hu"
+ },
+ {
+ "name": "Maciej Małecki",
+ "email": "maciej.malecki@notimplemented.org"
+ },
+ {
+ "name": "Mal Graty",
+ "email": "mal.graty@googlemail.com"
+ },
+ {
+ "name": "Marc Kuo",
+ "email": "kuomarc2@gmail.com"
+ },
+ {
+ "name": "Marcello Bastea-Forte",
+ "email": "marcello@cellosoft.com"
+ },
+ {
+ "name": "Martin Marko",
+ "email": "marcus@gratex.com"
+ },
+ {
+ "name": "Matija Marohnić",
+ "email": "matija.marohnic@gmail.com"
+ },
+ {
+ "name": "Matt Robenolt",
+ "email": "matt@ydekproductions.com"
+ },
+ {
+ "name": "Matt Smith",
+ "email": "matthewgarysmith@gmail.com"
+ },
+ {
+ "name": "Matthew Shanley",
+ "email": "matthewshanley@littlesecretsrecords.com"
+ },
+ {
+ "name": "Mattias Tidlund",
+ "email": "mattias.tidlund@learningwell.se"
+ },
+ {
+ "name": "Michael Jackson",
+ "email": "mjijackson@gmail.com"
+ },
+ {
+ "name": "Michael Olson",
+ "email": "mwolson@member.fsf.org"
+ },
+ {
+ "name": "Michael Schoonmaker",
+ "email": "michael.r.schoonmaker@gmail.com"
+ },
+ {
+ "name": "Michal Charemza",
+ "email": "michalcharemza@gmail.com"
+ },
+ {
+ "name": "Moshe Kolodny",
+ "email": "mkolodny@integralads.com"
+ },
+ {
+ "name": "Nathan Black",
+ "email": "nathan@nathanblack.org"
+ },
+ {
+ "name": "Nick Fitzgerald",
+ "email": "fitzgen@gmail.com"
+ },
+ {
+ "name": "Nicolo Taddei",
+ "email": "taddei.uk@gmail.com"
+ },
+ {
+ "name": "Noshir Patel",
+ "email": "nosh@blackpiano.com"
+ },
+ {
+ "name": "Panu Horsmalahti",
+ "email": "panu.horsmalahti@iki.fi"
+ },
+ {
+ "name": "Pete Hawkins",
+ "email": "pete@petes-imac.frontinternal.net"
+ },
+ {
+ "name": "Pete Hawkins",
+ "email": "pete@phawk.co.uk"
+ },
+ {
+ "name": "Phil Sung",
+ "email": "psung@dnanexus.com"
+ },
+ {
+ "name": "R56",
+ "email": "rviskus@gmail.com"
+ },
+ {
+ "name": "Raynos",
+ "email": "="
+ },
+ {
+ "name": "Refael Ackermann",
+ "email": "refael@empeeric.com"
+ },
+ {
+ "name": "Richard Dingwall",
+ "email": "rdingwall@gmail.com"
+ },
+ {
+ "name": "Richard Knop",
+ "email": "RichardKnop@users.noreply.github.com"
+ },
+ {
+ "name": "Rob Wu",
+ "email": "rob@robwu.nl"
+ },
+ {
+ "name": "Romain Prieto",
+ "email": "romain.prieto@gmail.com"
+ },
+ {
+ "name": "Roman Neuhauser",
+ "email": "rneuhauser@suse.cz"
+ },
+ {
+ "name": "Roman Shtylman",
+ "email": "shtylman@gmail.com"
+ },
+ {
+ "name": "Russ Bradberry",
+ "email": "devdazed@me.com"
+ },
+ {
+ "name": "Russell Munson",
+ "email": "rmunson@github.com"
+ },
+ {
+ "name": "Rustem Mustafin",
+ "email": "mustafin@kt-labs.com"
+ },
+ {
+ "name": "Ryan Hubbard",
+ "email": "ryanmhubbard@gmail.com"
+ },
+ {
+ "name": "Salehen Shovon Rahman",
+ "email": "salehen.rahman@gmail.com"
+ },
+ {
+ "name": "Sam Mussell",
+ "email": "smussell@gmail.com"
+ },
+ {
+ "name": "Sasha Koss",
+ "email": "koss@nocorp.me"
+ },
+ {
+ "name": "Seiya Konno",
+ "email": "nulltask@gmail.com"
+ },
+ {
+ "name": "Shaine Hatch",
+ "email": "shaine@squidtree.com"
+ },
+ {
+ "name": "Simon Goumaz",
+ "email": "simon@attentif.ch"
+ },
+ {
+ "name": "Standa Opichal",
+ "email": "opichals@gmail.com"
+ },
+ {
+ "name": "Stephen Mathieson",
+ "email": "smath23@gmail.com"
+ },
+ {
+ "name": "Steve Mason",
+ "email": "stevem@brandwatch.com"
+ },
+ {
+ "name": "Stewart Taylor",
+ "email": "stewart.taylor1@gmail.com"
+ },
+ {
+ "name": "Tapiwa Kelvin",
+ "email": "tapiwa@munzwa.tk"
+ },
+ {
+ "name": "Teddy Zeenny",
+ "email": "teddyzeenny@gmail.com"
+ },
+ {
+ "name": "Tim Ehat",
+ "email": "timehat@gmail.com"
+ },
+ {
+ "name": "Todd Agulnick",
+ "email": "tagulnick@onjack.com"
+ },
+ {
+ "name": "Tom Coquereau",
+ "email": "tom@thau.me"
+ },
+ {
+ "name": "Vadim Nikitin",
+ "email": "vnikiti@ncsu.edu"
+ },
+ {
+ "name": "Victor Costan",
+ "email": "costan@gmail.com"
+ },
+ {
+ "name": "Will Langstroth",
+ "email": "william.langstroth@gmail.com"
+ },
+ {
+ "name": "Yanis Wang",
+ "email": "yanis.wang@gmail.com"
+ },
+ {
+ "name": "Yuest Wang",
+ "email": "yuestwang@gmail.com"
+ },
+ {
+ "name": "Zsolt Takács",
+ "email": "zsolt@takacs.cc"
+ },
+ {
+ "name": "abrkn",
+ "email": "a@abrkn.com"
+ },
+ {
+ "name": "airportyh",
+ "email": "airportyh@gmail.com"
+ },
+ {
+ "name": "badunk",
+ "email": "baduncaduncan@gmail.com"
+ },
+ {
+ "name": "claudyus",
+ "email": "claudyus@HEX.(none)",
+ "url": "none"
+ },
+ {
+ "name": "dasilvacontin",
+ "email": "daviddasilvacontin@gmail.com"
+ },
+ {
+ "name": "fengmk2",
+ "email": "fengmk2@gmail.com"
+ },
+ {
+ "name": "gaye",
+ "email": "gaye@mozilla.com"
+ },
+ {
+ "name": "grasGendarme",
+ "email": "me@grasgendar.me"
+ },
+ {
+ "name": "klaemo",
+ "email": "klaemo@fastmail.fm"
+ },
+ {
+ "name": "lakmeer",
+ "email": "lakmeerkravid@gmail.com"
+ },
+ {
+ "name": "lodr",
+ "email": "salva@unoyunodiez.com"
+ },
+ {
+ "name": "mrShturman",
+ "email": "mrshturman@gmail.com"
+ },
+ {
+ "name": "nishigori",
+ "email": "Takuya_Nishigori@voyagegroup.com"
+ },
+ {
+ "name": "omardelarosa",
+ "email": "thedelarosa@gmail.com"
+ },
+ {
+ "name": "qiuzuhui",
+ "email": "qiuzuhui@users.noreply.github.com"
+ },
+ {
+ "name": "samuel goldszmidt",
+ "email": "samuel.goldszmidt@gmail.com"
+ },
+ {
+ "name": "sebv",
+ "email": "seb.vincent@gmail.com"
+ },
+ {
+ "name": "slyg",
+ "email": "syl.faucherand@gmail.com"
+ },
+ {
+ "name": "startswithaj",
+ "email": "jake.mc@icloud.com"
+ },
+ {
+ "name": "tgautier@yahoo.com",
+ "email": "tgautier@gmail.com"
+ },
+ {
+ "name": "traleig1",
+ "email": "darkphoenix739@gmail.com"
+ },
+ {
+ "name": "vlad",
+ "email": "iamvlad@gmail.com"
+ },
+ {
+ "name": "yuitest",
+ "email": "yuitest@cjhat.net"
+ },
+ {
+ "name": "zhiyelee",
+ "email": "zhiyelee@gmail.com"
+ },
+ {
+ "name": "Adam Crabtree",
+ "email": "adam.crabtree@redrobotlabs.com"
+ },
+ {
+ "name": "Adam Gruber",
+ "email": "talknmime@gmail.com"
+ },
+ {
+ "name": "Andreas Brekken",
+ "email": "andreas@opuno.com"
+ },
+ {
+ "name": "Andrew Nesbitt",
+ "email": "andrewnez@gmail.com"
+ },
+ {
+ "name": "Andrey Popp",
+ "email": "8mayday@gmail.com"
+ },
+ {
+ "name": "Andrii Shumada",
+ "email": "eagleeyes91@gmail.com"
+ },
+ {
+ "name": "Anis Safine",
+ "email": "anis.safine.ext@francetv.fr"
+ },
+ {
+ "name": "Arnaud Brousseau",
+ "email": "arnaud.brousseau@gmail.com"
+ },
+ {
+ "name": "Atsuya Takagi",
+ "email": "asoftonight@gmail.com"
+ },
+ {
+ "name": "Austin Birch",
+ "email": "mraustinbirch@gmail.com"
+ },
+ {
+ "name": "Ben Noordhuis",
+ "email": "info@bnoordhuis.nl"
+ },
+ {
+ "name": "Benoît Zugmeyer",
+ "email": "bzugmeyer@gmail.com"
+ },
+ {
+ "name": "Bjørge Næss",
+ "email": "bjoerge@origo.no"
+ },
+ {
+ "name": "Brian Lalor",
+ "email": "blalor@bravo5.org"
+ },
+ {
+ "name": "Brian M. Carlson",
+ "email": "brian.m.carlson@gmail.com"
+ },
+ {
+ "name": "Brian Moore",
+ "email": "guardbionic-github@yahoo.com"
+ },
+ {
+ "name": "Bryan Donovan",
+ "email": "bdondo@gmail.com"
+ },
+ {
+ "name": "C. Scott Ananian",
+ "email": "cscott@cscott.net"
+ },
+ {
+ "name": "Casey Foster",
+ "email": "casey@caseywebdev.com"
+ },
+ {
+ "name": "Chris Buckley",
+ "email": "chris@cmbuckley.co.uk"
+ },
+ {
+ "name": "ChrisWren",
+ "email": "cthewren@gmail.com"
+ },
+ {
+ "name": "Connor Dunn",
+ "email": "connorhd@gmail.com"
+ },
+ {
+ "name": "Corey Butler",
+ "email": "corey@coreybutler.com"
+ },
+ {
+ "name": "Daniel Stockman",
+ "email": "daniel.stockman@gmail.com"
+ },
+ {
+ "name": "Dave McKenna",
+ "email": "davemckenna01@gmail.com"
+ },
+ {
+ "name": "Denis Bardadym",
+ "email": "bardadymchik@gmail.com"
+ },
+ {
+ "name": "Devin Weaver",
+ "email": "suki@tritarget.org"
+ },
+ {
+ "name": "Di Wu",
+ "email": "dwu@palantir.com"
+ },
+ {
+ "name": "Diogo Monteiro",
+ "email": "diogo.gmt@gmail.com"
+ },
+ {
+ "name": "Dmitry Shirokov",
+ "email": "deadrunk@gmail.com"
+ },
+ {
+ "name": "Dominic Barnes",
+ "email": "dominic@dbarnes.info"
+ },
+ {
+ "name": "Douglas Christopher Wilson",
+ "email": "doug@somethingdoug.com"
+ },
+ {
+ "name": "Fede Ramirez",
+ "email": "i@2fd.me"
+ },
+ {
+ "name": "Fedor Indutny",
+ "email": "fedor.indutny@gmail.com"
+ },
+ {
+ "name": "Florian Margaine",
+ "email": "florian@margaine.com"
+ },
+ {
+ "name": "Frederico Silva",
+ "email": "frederico.silva@gmail.com"
+ },
+ {
+ "name": "Fredrik Lindin",
+ "email": "fredriklindin@gmail.com"
+ },
+ {
+ "name": "Gareth Aye",
+ "email": "gaye@mozilla.com"
+ },
+ {
+ "name": "Gareth Murphy",
+ "email": "gareth.cpm@gmail.com"
+ },
+ {
+ "name": "Gavin Mogan",
+ "email": "GavinM@airg.com"
+ },
+ {
+ "name": "Giovanni Bassi",
+ "email": "giggio@giggio.net"
+ },
+ {
+ "name": "Glen Huang",
+ "email": "curvedmark@gmail.com"
+ },
+ {
+ "name": "Greg Perkins",
+ "email": "gregperkins@alum.mit.edu"
+ },
+ {
+ "name": "Harish",
+ "email": "hyeluri@gmail.com"
+ },
+ {
+ "name": "Harry Brundage",
+ "email": "harry.brundage@gmail.com"
+ },
+ {
+ "name": "Herman Junge",
+ "email": "herman@geekli.st"
+ },
+ {
+ "name": "Ian Young",
+ "email": "ian.greenleaf@gmail.com"
+ },
+ {
+ "name": "Ian Zamojc",
+ "email": "ian@thesecretlocation.net"
+ },
+ {
+ "name": "Ivan",
+ "email": "ivan@kinvey.com"
+ },
+ {
+ "name": "JP Bochi",
+ "email": "jpbochi@gmail.com"
+ },
+ {
+ "name": "Jaakko Salonen",
+ "email": "jaakko.salonen@iki.fi"
+ },
+ {
+ "name": "Jake Craige",
+ "email": "james.craige@gmail.com"
+ },
+ {
+ "name": "Jake Marsh",
+ "email": "jakemmarsh@gmail.com"
+ },
+ {
+ "name": "Jakub Nešetřil",
+ "email": "jakub@apiary.io"
+ },
+ {
+ "name": "James Bowes",
+ "email": "jbowes@repl.ca"
+ },
+ {
+ "name": "James Lal",
+ "email": "james@lightsofapollo.com"
+ },
+ {
+ "name": "Jan Kopriva",
+ "email": "jan.kopriva@gooddata.com"
+ },
+ {
+ "name": "Jason Barry",
+ "email": "jay@jcbarry.com"
+ },
+ {
+ "name": "Javier Aranda",
+ "email": "javierav@javierav.com"
+ },
+ {
+ "name": "Jean Ponchon",
+ "email": "gelule@gmail.com"
+ },
+ {
+ "name": "Jeff Kunkle",
+ "email": "jeff.kunkle@nearinfinity.com"
+ },
+ {
+ "name": "Jeff Schilling",
+ "email": "jeff.schilling@q2ebanking.com"
+ },
+ {
+ "name": "Jeremy Martin",
+ "email": "jmar777@gmail.com"
+ },
+ {
+ "name": "Jimmy Cuadra",
+ "email": "jimmy@jimmycuadra.com"
+ },
+ {
+ "name": "John Doty",
+ "email": "jrhdoty@gmail.com"
+ },
+ {
+ "name": "Johnathon Sanders",
+ "email": "outdooricon@gmail.com"
+ },
+ {
+ "name": "Jonas Dohse",
+ "email": "jonas@mbr-targeting.com"
+ },
+ {
+ "name": "Jonathan Creamer",
+ "email": "matrixhasyou2k4@gmail.com"
+ },
+ {
+ "name": "Jonathan Delgado",
+ "email": "jdelgado@rewip.com"
+ },
+ {
+ "name": "Jonathan Park",
+ "email": "jpark@daptiv.com"
+ },
+ {
+ "name": "Jordan Sexton",
+ "email": "jordan@jordansexton.com"
+ },
+ {
+ "name": "Jussi Virtanen",
+ "email": "jussi.k.virtanen@gmail.com"
+ },
+ {
+ "name": "Katie Gengler",
+ "email": "katiegengler@gmail.com"
+ },
+ {
+ "name": "Kazuhito Hokamura",
+ "email": "k.hokamura@gmail.com"
+ }
+ ],
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/mochajs/mocha.git"
+ },
+ "maintainers": [
+ {
+ "name": "tjholowaychuk",
+ "email": "tj@vision-media.ca"
+ },
+ {
+ "name": "travisjeffery",
+ "email": "tj@travisjeffery.com"
+ },
+ {
+ "name": "boneskull",
+ "email": "boneskull@boneskull.com"
+ },
+ {
+ "name": "jbnicolai",
+ "email": "jappelman@xebia.com"
+ }
+ ],
+ "main": "./index",
+ "bin": {
+ "mocha": "./bin/mocha",
+ "_mocha": "./bin/_mocha"
+ },
+ "engines": {
+ "node": ">= 0.8.x"
+ },
+ "scripts": {
+ "test": "make test-all"
+ },
+ "dependencies": {
+ "commander": "2.3.0",
+ "debug": "2.0.0",
+ "diff": "1.4.0",
+ "escape-string-regexp": "1.0.2",
+ "glob": "3.2.3",
+ "growl": "1.8.1",
+ "jade": "0.26.3",
+ "mkdirp": "0.5.0",
+ "supports-color": "1.2.0"
+ },
+ "devDependencies": {
+ "browser-stdout": "^1.2.0",
+ "browserify": "10.2.4",
+ "coffee-script": "~1.8.0",
+ "eslint": "^1.2.1",
+ "should": "~4.0.0",
+ "through2": "~0.6.5"
+ },
+ "files": [
+ "bin",
+ "images",
+ "lib",
+ "index.js",
+ "mocha.css",
+ "mocha.js",
+ "LICENSE"
+ ],
+ "browser": {
+ "debug": "./lib/browser/debug.js",
+ "events": "./lib/browser/events.js",
+ "tty": "./lib/browser/tty.js"
+ },
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "https://raw.github.com/mochajs/mocha/master/LICENSE"
+ }
+ ],
+ "gitHead": "c4393c456839d6bf2cbb4abb1cd177010ee06458",
+ "bugs": {
+ "url": "https://github.com/mochajs/mocha/issues"
+ },
+ "homepage": "https://github.com/mochajs/mocha#readme",
+ "_id": "mocha@2.3.3",
+ "_shasum": "96488c49bfd71d86a518cb941e291a83f48d8856",
+ "_from": "mocha@>=2.0.1 <3.0.0",
+ "_npmVersion": "2.14.2",
+ "_nodeVersion": "4.0.0",
+ "_npmUser": {
+ "name": "boneskull",
+ "email": "chiller@badwing.com"
+ },
+ "dist": {
+ "shasum": "96488c49bfd71d86a518cb941e291a83f48d8856",
+ "tarball": "http://registry.npmjs.org/mocha/-/mocha-2.3.3.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/mocha/-/mocha-2.3.3.tgz",
+ "readme": "ERROR: No README data found!"
+}
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/plur/index.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/plur/index.js
new file mode 100644
index 0000000..0a16a55
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/plur/index.js
@@ -0,0 +1,9 @@
+'use strict';
+module.exports = function (str, plural, count) {
+ if (typeof plural === 'number') {
+ count = plural;
+ plural = str + 's';
+ }
+
+ return count === 1 ? str : plural;
+};
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/plur/license b/walter_nicholas/node_modules/gulp-mocha/node_modules/plur/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/plur/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (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.
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/plur/package.json b/walter_nicholas/node_modules/gulp-mocha/node_modules/plur/package.json
new file mode 100644
index 0000000..5eda0af
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/plur/package.json
@@ -0,0 +1,66 @@
+{
+ "name": "plur",
+ "version": "1.0.0",
+ "description": "Naively pluralize a word",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/sindresorhus/plur"
+ },
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "node test.js"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "plur",
+ "plural",
+ "plurals",
+ "pluralize",
+ "singular",
+ "count",
+ "word",
+ "string",
+ "str",
+ "naive",
+ "simple"
+ ],
+ "devDependencies": {
+ "ava": "0.0.4"
+ },
+ "gitHead": "71a8ef7aee0ef498a1a04e3e01bea1931e6a366b",
+ "bugs": {
+ "url": "https://github.com/sindresorhus/plur/issues"
+ },
+ "homepage": "https://github.com/sindresorhus/plur",
+ "_id": "plur@1.0.0",
+ "_shasum": "db85c6814f5e5e5a3b49efc28d604fec62975156",
+ "_from": "plur@>=1.0.0 <2.0.0",
+ "_npmVersion": "2.10.1",
+ "_nodeVersion": "0.12.4",
+ "_npmUser": {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ },
+ "dist": {
+ "shasum": "db85c6814f5e5e5a3b49efc28d604fec62975156",
+ "tarball": "http://registry.npmjs.org/plur/-/plur-1.0.0.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ }
+ ],
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/plur/-/plur-1.0.0.tgz"
+}
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/plur/readme.md b/walter_nicholas/node_modules/gulp-mocha/node_modules/plur/readme.md
new file mode 100644
index 0000000..ebc7d43
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/plur/readme.md
@@ -0,0 +1,52 @@
+# plur [](https://travis-ci.org/sindresorhus/plur)
+
+> Naively pluralize a word
+
+
+## Install
+
+```
+$ npm install --save plur
+```
+
+
+## Usage
+
+```js
+var plur = require('plur');
+
+plur('unicorn', 4);
+//=> 'unicorns'
+
+plur('hero', 'heroes', 4);
+//=> 'heroes'
+```
+
+
+## API
+
+### plur(word, [plural], count)
+
+#### word
+
+Type: `string`
+
+Word to pluralize.
+
+#### plural
+
+Type: `string`
+Default: `word` + `s`
+
+Pluralized word.
+
+#### count
+
+Type: `number`
+
+Count to determine whether to use singular or plural.
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/resolve-from/index.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/resolve-from/index.js
new file mode 100644
index 0000000..9162f4a
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/resolve-from/index.js
@@ -0,0 +1,19 @@
+'use strict';
+var path = require('path');
+var Module = require('module');
+
+module.exports = function (fromDir, moduleId) {
+ if (typeof fromDir !== 'string' || typeof moduleId !== 'string') {
+ throw new TypeError('Expected `fromDir` and `moduleId` to be a string');
+ }
+
+ fromDir = path.resolve(fromDir);
+
+ var fromFile = path.join(fromDir, 'noop.js');
+
+ return Module._resolveFilename(moduleId, {
+ id: fromFile,
+ filename: fromFile,
+ paths: Module._nodeModulePaths(fromDir)
+ });
+};
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/resolve-from/license b/walter_nicholas/node_modules/gulp-mocha/node_modules/resolve-from/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/resolve-from/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (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.
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/resolve-from/package.json b/walter_nicholas/node_modules/gulp-mocha/node_modules/resolve-from/package.json
new file mode 100644
index 0000000..1983b52
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/resolve-from/package.json
@@ -0,0 +1,63 @@
+{
+ "name": "resolve-from",
+ "version": "1.0.1",
+ "description": "Resolve the path of a module like require.resolve() but from a given path",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/sindresorhus/resolve-from"
+ },
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "xo && ava"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "require",
+ "resolve",
+ "path",
+ "module",
+ "from",
+ "like",
+ "path"
+ ],
+ "devDependencies": {
+ "ava": "*",
+ "xo": "*"
+ },
+ "gitHead": "bae2cf1d66c616ad2eb27e0fe85a10ff0f2dfc92",
+ "bugs": {
+ "url": "https://github.com/sindresorhus/resolve-from/issues"
+ },
+ "homepage": "https://github.com/sindresorhus/resolve-from",
+ "_id": "resolve-from@1.0.1",
+ "_shasum": "26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226",
+ "_from": "resolve-from@>=1.0.0 <2.0.0",
+ "_npmVersion": "2.14.4",
+ "_nodeVersion": "4.1.1",
+ "_npmUser": {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ },
+ "dist": {
+ "shasum": "26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226",
+ "tarball": "http://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ }
+ ],
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz"
+}
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/resolve-from/readme.md b/walter_nicholas/node_modules/gulp-mocha/node_modules/resolve-from/readme.md
new file mode 100644
index 0000000..80a240c
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/resolve-from/readme.md
@@ -0,0 +1,56 @@
+# resolve-from [](https://travis-ci.org/sindresorhus/resolve-from)
+
+> Resolve the path of a module like [`require.resolve()`](http://nodejs.org/api/globals.html#globals_require_resolve) but from a given path
+
+
+## Install
+
+```
+$ npm install --save resolve-from
+```
+
+
+## Usage
+
+```js
+const resolveFrom = require('resolve-from');
+
+// there's a file at `./foo/bar.js`
+
+resolveFrom('foo', './bar');
+//=> '/Users/sindresorhus/dev/test/foo/bar.js'
+```
+
+
+## API
+
+### resolveFrom(fromDir, moduleId)
+
+#### fromDir
+
+Type: `string`
+
+The directory to resolve from.
+
+#### moduleId
+
+Type: `string`
+
+What you would use in `require()`.
+
+
+## Tip
+
+Create a partial using a bound function if you want to require from the same `fromDir` multiple times:
+
+```js
+const resolveFromFoo = resolveFrom.bind(null, 'foo');
+
+resolveFromFoo('./bar');
+resolveFromFoo('./baz');
+```
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/.npmignore b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/.npmignore
new file mode 100644
index 0000000..0593600
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/.npmignore
@@ -0,0 +1,7 @@
+.DS_Store
+.\#*
+/node_modules
+\#*
+npm-debug.log
+node_modules
+*.tgz
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/.travis.yml b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/.travis.yml
new file mode 100644
index 0000000..2083806
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - "0.11"
+ - "0.10"
\ No newline at end of file
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/LICENSE b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/LICENSE
new file mode 100644
index 0000000..beb1b71
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2010-2014 Bruce Williams
+
+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.
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/README.md b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/README.md
new file mode 100644
index 0000000..5eff6fa
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/README.md
@@ -0,0 +1,293 @@
+node-temp
+=========
+
+Temporary files, directories, and streams for Node.js.
+
+Handles generating a unique file/directory name under the appropriate
+system temporary directory, changing the file to an appropriate mode,
+and supports automatic removal (if asked)
+
+`temp` has a similar API to the `fs` module.
+
+Node.js Compatibility
+---------------------
+
+Supports v0.10.0+.
+
+[](https://travis-ci.org/bruce/node-temp)
+
+Please let me know if you have problems running it on a later version of Node.js or
+have platform-specific problems.
+
+Installation
+------------
+
+Install it using [npm](http://github.com/isaacs/npm):
+
+ $ npm install temp
+
+Or get it directly from:
+http://github.com/bruce/node-temp
+
+Synopsis
+--------
+
+You can create temporary files with `open` and `openSync`, temporary
+directories with `mkdir` and `mkdirSync`, or you can get a unique name
+in the system temporary directory with `path`.
+
+Working copies of the following examples can be found under the
+`examples` directory.
+
+### Temporary Files
+
+To create a temporary file use `open` or `openSync`, passing
+them an optional prefix, suffix, or both (see below for details on
+affixes). The object passed to the callback (or returned) has
+`path` and `fd` keys:
+
+```javascript
+{ path: "/path/to/file",
+, fd: theFileDescriptor
+}
+```
+
+In this example we write to a temporary file and call out to `grep` and
+`wc -l` to determine the number of time `foo` occurs in the text. The
+temporary file is chmod'd `0600` and cleaned up automatically when the
+process at exit (because `temp.track()` is called):
+
+```javascript
+var temp = require('temp'),
+ fs = require('fs'),
+ util = require('util'),
+ exec = require('child_process').exec;
+
+// Automatically track and cleanup files at exit
+temp.track();
+
+// Fake data
+var myData = "foo\nbar\nfoo\nbaz";
+
+// Process the data (note: error handling omitted)
+temp.open('myprefix', function(err, info) {
+ if (!err) {
+ fs.write(info.fd, myData);
+ fs.close(info.fd, function(err) {
+ exec("grep foo '" + info.path + "' | wc -l", function(err, stdout) {
+ util.puts(stdout.trim());
+ });
+ });
+ }
+});
+```
+
+### Want Cleanup? Make sure you ask for it.
+
+As noted in the example above, if you want temp to track the files and
+directories it creates and handle removing those files and directories
+on exit, you must call `track()`. The `track()` function is chainable,
+and it's recommended that you call it when requiring the module.
+
+```javascript
+var temp = require("temp").track();
+```
+
+Why is this necessary? In pre-0.6 versions of temp, tracking was
+automatic. While this works great for scripts and
+[Grunt tasks](http://gruntjs.com/), it's not so great for long-running
+server processes. Since that's arguably what Node.js is _for_, you
+have to opt-in to tracking.
+
+But it's easy.
+
+#### Cleanup anytime
+
+When tracking, you can run `cleanup()` and `cleanupSync()` anytime
+(`cleanupSync()` will be run for you on process exit). An object will
+be returned (or passed to the callback) with cleanup counts and
+the file/directory tracking lists will be reset.
+
+```javascript
+> temp.cleanupSync();
+{ files: 1,
+ dirs: 0 }
+```
+
+```javascript
+> temp.cleanup(function(err, stats) {
+ console.log(stats);
+ });
+{ files: 1,
+ dirs: 0 }
+```
+
+Note: If you're not tracking, an error ("not tracking") will be passed
+to the callback.
+
+### Temporary Directories
+
+To create a temporary directory, use `mkdir` or `mkdirSync`, passing
+it an optional prefix, suffix, or both (see below for details on affixes).
+
+In this example we create a temporary directory, write to a file
+within it, call out to an external program to create a PDF, and read
+the result. While the external process creates a lot of additional
+files, the temporary directory is removed automatically at exit (because
+`temp.track()` is called):
+
+```javascript
+var temp = require('temp'),
+ fs = require('fs'),
+ util = require('util'),
+ path = require('path'),
+ exec = require('child_process').exec;
+
+// Automatically track and cleanup files at exit
+temp.track();
+
+// For use with ConTeXt, http://wiki.contextgarden.net
+var myData = "\\starttext\nHello World\n\\stoptext";
+
+temp.mkdir('pdfcreator', function(err, dirPath) {
+ var inputPath = path.join(dirPath, 'input.tex')
+ fs.writeFile(inputPath, myData, function(err) {
+ if (err) throw err;
+ process.chdir(dirPath);
+ exec("texexec '" + inputPath + "'", function(err) {
+ if (err) throw err;
+ fs.readFile(path.join(dirPath, 'input.pdf'), function(err, data) {
+ if (err) throw err;
+ sys.print(data);
+ });
+ });
+ });
+});
+```
+
+### Temporary Streams
+
+To create a temporary WriteStream, use 'createWriteStream', which sits
+on top of `fs.createWriteStream`. The return value is a
+`fs.WriteStream` whose `path` is registered for removal when
+`temp.cleanup` is called (because `temp.track()` is called).
+
+```javascript
+var temp = require('temp');
+
+// Automatically track and cleanup files at exit
+temp.track();
+
+var stream = temp.createWriteStream();
+stream.write("Some data");
+// Maybe do some other things
+stream.end();
+```
+
+### Affixes
+
+You can provide custom prefixes and suffixes when creating temporary
+files and directories. If you provide a string, it is used as the prefix
+for the temporary name. If you provide an object with `prefix`,
+`suffix` and `dir` keys, they are used for the temporary name.
+
+Here are some examples:
+
+* `"aprefix"`: A simple prefix, prepended to the filename; this is
+ shorthand for:
+* `{prefix: "aprefix"}`: A simple prefix, prepended to the filename
+* `{suffix: ".asuffix"}`: A suffix, appended to the filename
+ (especially useful when the file needs to be named with specific
+ extension for use with an external program).
+* `{prefix: "myprefix", suffix: "mysuffix"}`: Customize both affixes
+* `{dir: path.join(os.tmpDir(), "myapp")}`: default prefix and suffix
+ within a new temporary directory.
+* `null`: Use the defaults for files and directories (prefixes `"f-"`
+ and `"d-"`, respectively, no suffixes).
+
+In this simple example we read a `pdf`, write it to a temporary file with
+a `.pdf` extension, and close it.
+
+```javascript
+var fs = require('fs'),
+ temp = require('temp');
+
+fs.readFile('/path/to/source.pdf', function(err, data) {
+ temp.open({suffix: '.pdf'}, function(err, info) {
+ if (err) throw err;
+ fs.write(info.fd, contents);
+ fs.close(info.fd, function(err) {
+ if (err) throw err;
+ // Do something with the file
+ });
+ });
+});
+```
+
+### Just a path, please
+
+If you just want a unique name in your temporary directory, use
+`path`:
+
+```javascript
+var fs = require('fs');
+var tempName = temp.path({suffix: '.pdf'});
+// Do something with tempName
+```
+
+Note: The file isn't created for you, and the mode is not changed -- and it
+will not be removed automatically at exit. If you use `path`, it's
+all up to you.
+
+Using it with Grunt
+-------------------
+
+If you want to use the module with [Grunt](http://gruntjs.com/), make sure you
+use `async()` in your Gruntfile:
+
+```javascript
+module.exports = function (grunt) {
+ var temp = require("temp");
+ temp.track(); // Cleanup files, please
+ grunt.registerTask("temptest", "Testing temp", function() {
+
+ var done = this.async(); // Don't forget this!
+
+ grunt.log.writeln("About to write a file...");
+ temp.open('tempfile', function(err, info) {
+ // File writing shenanigans here
+ grunt.log.writeln("Wrote a file!")
+
+ done(); // REALLY don't forget this!
+
+ });
+ });
+};
+```
+
+For more information, see the [Grunt FAQ](http://gruntjs.com/frequently-asked-questions#why-doesn-t-my-asynchronous-task-complete).
+
+Testing
+-------
+
+```sh
+$ npm test
+```
+
+Contributing
+------------
+
+You can find the repository at:
+http://github.com/bruce/node-temp
+
+Issues/Feature Requests can be submitted at:
+http://github.com/bruce/node-temp/issues
+
+I'd really like to hear your feedback, and I'd love to receive your
+pull-requests!
+
+Copyright
+---------
+
+Copyright (c) 2010-2014 Bruce Williams. This software is licensed
+under the MIT License, see LICENSE for details.
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/examples/grepcount.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/examples/grepcount.js
new file mode 100644
index 0000000..420d864
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/examples/grepcount.js
@@ -0,0 +1,18 @@
+var temp = require('../lib/temp'),
+ fs = require('fs'),
+ util = require('util'),
+ exec = require('child_process').exec;
+
+var myData = "foo\nbar\nfoo\nbaz";
+
+temp.open('myprefix', function(err, info) {
+ if (err) throw err;
+ fs.write(info.fd, myData);
+ fs.close(info.fd, function(err) {
+ if (err) throw err;
+ exec("grep foo '" + info.path + "' | wc -l", function(err, stdout) {
+ if (err) throw err;
+ util.puts(stdout.trim());
+ });
+ });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/examples/pdfcreator.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/examples/pdfcreator.js
new file mode 100644
index 0000000..63fd277
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/examples/pdfcreator.js
@@ -0,0 +1,22 @@
+var temp = require('../lib/temp'),
+ fs = require('fs'),
+ util = require('util'),
+ path = require('path'),
+ exec = require('child_process').exec;
+
+var myData = "\\starttext\nHello World\n\\stoptext";
+
+temp.mkdir('pdfcreator', function(err, dirPath) {
+ var inputPath = path.join(dirPath, 'input.tex')
+ fs.writeFile(inputPath, myData, function(err) {
+ if (err) throw err;
+ process.chdir(dirPath);
+ exec("texexec '" + inputPath + "'", function(err) {
+ if (err) throw err;
+ fs.readFile(path.join(dirPath, 'input.pdf'), function(err, data) {
+ if (err) throw err;
+ util.print(data);
+ });
+ });
+ });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/lib/temp.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/lib/temp.js
new file mode 100644
index 0000000..f73f0c8
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/lib/temp.js
@@ -0,0 +1,283 @@
+var fs = require('fs'),
+ path = require('path'),
+ cnst = require('constants');
+
+var rimraf = require('rimraf'),
+ osTmpdir = require('os-tmpdir'),
+ rimrafSync = rimraf.sync;
+
+/* HELPERS */
+
+var RDWR_EXCL = cnst.O_CREAT | cnst.O_TRUNC | cnst.O_RDWR | cnst.O_EXCL;
+
+var generateName = function(rawAffixes, defaultPrefix) {
+ var affixes = parseAffixes(rawAffixes, defaultPrefix);
+ var now = new Date();
+ var name = [affixes.prefix,
+ now.getYear(), now.getMonth(), now.getDate(),
+ '-',
+ process.pid,
+ '-',
+ (Math.random() * 0x100000000 + 1).toString(36),
+ affixes.suffix].join('');
+ return path.join(affixes.dir || exports.dir, name);
+};
+
+var parseAffixes = function(rawAffixes, defaultPrefix) {
+ var affixes = {prefix: null, suffix: null};
+ if(rawAffixes) {
+ switch (typeof(rawAffixes)) {
+ case 'string':
+ affixes.prefix = rawAffixes;
+ break;
+ case 'object':
+ affixes = rawAffixes;
+ break;
+ default:
+ throw new Error("Unknown affix declaration: " + affixes);
+ }
+ } else {
+ affixes.prefix = defaultPrefix;
+ }
+ return affixes;
+};
+
+/* -------------------------------------------------------------------------
+ * Don't forget to call track() if you want file tracking and exit handlers!
+ * -------------------------------------------------------------------------
+ * When any temp file or directory is created, it is added to filesToDelete
+ * or dirsToDelete. The first time any temp file is created, a listener is
+ * added to remove all temp files and directories at exit.
+ */
+var tracking = false;
+var track = function(value) {
+ tracking = (value !== false);
+ return module.exports; // chainable
+};
+var exitListenerAttached = false;
+var filesToDelete = [];
+var dirsToDelete = [];
+
+function deleteFileOnExit(filePath) {
+ if (!tracking) return false;
+ attachExitListener();
+ filesToDelete.push(filePath);
+}
+
+function deleteDirOnExit(dirPath) {
+ if (!tracking) return false;
+ attachExitListener();
+ dirsToDelete.push(dirPath);
+}
+
+function attachExitListener() {
+ if (!tracking) return false;
+ if (!exitListenerAttached) {
+ process.addListener('exit', cleanupSync);
+ exitListenerAttached = true;
+ }
+}
+
+function cleanupFilesSync() {
+ if (!tracking) {
+ return false;
+ }
+ var count = 0;
+ var toDelete;
+ while ((toDelete = filesToDelete.shift()) !== undefined) {
+ rimrafSync(toDelete);
+ count++;
+ }
+ return count;
+}
+
+function cleanupFiles(callback) {
+ if (!tracking) {
+ if (callback) {
+ callback(new Error("not tracking"));
+ }
+ return;
+ }
+ var count = 0;
+ var left = filesToDelete.length;
+ if (!left) {
+ if (callback) {
+ callback(null, count);
+ }
+ return;
+ }
+ var toDelete;
+ var rimrafCallback = function(err) {
+ if (!left) {
+ // Prevent processing if aborted
+ return;
+ }
+ if (err) {
+ // This shouldn't happen; pass error to callback and abort
+ // processing
+ if (callback) {
+ callback(err);
+ }
+ left = 0;
+ return;
+ } else {
+ count++;
+ }
+ left--;
+ if (!left && callback) {
+ callback(null, count);
+ }
+ };
+ while ((toDelete = filesToDelete.shift()) !== undefined) {
+ rimraf(toDelete, rimrafCallback);
+ }
+}
+
+function cleanupDirsSync() {
+ if (!tracking) {
+ return false;
+ }
+ var count = 0;
+ var toDelete;
+ while ((toDelete = dirsToDelete.shift()) !== undefined) {
+ rimrafSync(toDelete);
+ count++;
+ }
+ return count;
+}
+
+function cleanupDirs(callback) {
+ if (!tracking) {
+ if (callback) {
+ callback(new Error("not tracking"));
+ }
+ return;
+ }
+ var count = 0;
+ var left = dirsToDelete.length;
+ if (!left) {
+ if (callback) {
+ callback(null, count);
+ }
+ return;
+ }
+ var toDelete;
+ var rimrafCallback = function (err) {
+ if (!left) {
+ // Prevent processing if aborted
+ return;
+ }
+ if (err) {
+ // rimraf handles most "normal" errors; pass the error to the
+ // callback and abort processing
+ if (callback) {
+ callback(err, count);
+ }
+ left = 0;
+ return;
+ } else {
+ count;
+ }
+ left--;
+ if (!left && callback) {
+ callback(null, count);
+ }
+ };
+ while ((toDelete = dirsToDelete.shift()) !== undefined) {
+ rimraf(toDelete, rimrafCallback);
+ }
+}
+
+function cleanupSync() {
+ if (!tracking) {
+ return false;
+ }
+ var fileCount = cleanupFilesSync();
+ var dirCount = cleanupDirsSync();
+ return {files: fileCount, dirs: dirCount};
+}
+
+function cleanup(callback) {
+ if (!tracking) {
+ if (callback) {
+ callback(new Error("not tracking"));
+ }
+ return;
+ }
+ cleanupFiles(function(fileErr, fileCount) {
+ if (fileErr) {
+ if (callback) {
+ callback(fileErr, {files: fileCount})
+ }
+ } else {
+ cleanupDirs(function(dirErr, dirCount) {
+ if (callback) {
+ callback(dirErr, {files: fileCount, dirs: dirCount});
+ }
+ });
+ }
+ });
+}
+
+/* DIRECTORIES */
+
+function mkdir(affixes, callback) {
+ var dirPath = generateName(affixes, 'd-');
+ fs.mkdir(dirPath, 0700, function(err) {
+ if (!err) {
+ deleteDirOnExit(dirPath);
+ }
+ if (callback) {
+ callback(err, dirPath);
+ }
+ });
+}
+
+function mkdirSync(affixes) {
+ var dirPath = generateName(affixes, 'd-');
+ fs.mkdirSync(dirPath, 0700);
+ deleteDirOnExit(dirPath);
+ return dirPath;
+}
+
+/* FILES */
+
+function open(affixes, callback) {
+ var filePath = generateName(affixes, 'f-');
+ fs.open(filePath, RDWR_EXCL, 0600, function(err, fd) {
+ if (!err) {
+ deleteFileOnExit(filePath);
+ }
+ if (callback) {
+ callback(err, {path: filePath, fd: fd});
+ }
+ });
+}
+
+function openSync(affixes) {
+ var filePath = generateName(affixes, 'f-');
+ var fd = fs.openSync(filePath, RDWR_EXCL, 0600);
+ deleteFileOnExit(filePath);
+ return {path: filePath, fd: fd};
+}
+
+function createWriteStream(affixes) {
+ var filePath = generateName(affixes, 's-');
+ var stream = fs.createWriteStream(filePath, {flags: RDWR_EXCL, mode: 0600});
+ deleteFileOnExit(filePath);
+ return stream;
+}
+
+/* EXPORTS */
+// Settings
+exports.dir = path.resolve(osTmpdir());
+exports.track = track;
+// Functions
+exports.mkdir = mkdir;
+exports.mkdirSync = mkdirSync;
+exports.open = open;
+exports.openSync = openSync;
+exports.path = generateName;
+exports.cleanup = cleanup;
+exports.cleanupSync = cleanupSync;
+exports.createWriteStream = createWriteStream;
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/no_cleanup.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/no_cleanup.js
new file mode 100644
index 0000000..ce45472
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/no_cleanup.js
@@ -0,0 +1,4 @@
+var temp = require('temp').track();
+
+var p = temp.mkdirSync("shouldBeDeletedOnExitNotJasmine");
+console.log('created dir ' + p);
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/no_cleanup_on_exit.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/no_cleanup_on_exit.js
new file mode 100644
index 0000000..f18a110
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/no_cleanup_on_exit.js
@@ -0,0 +1,8 @@
+var temp = require('temp').track();
+
+describe('temp will create dir that will remain after the process exits', function() {
+ it('creates a dir', function() {
+ var p = temp.mkdirSync("shouldBeDeletedOnExit");
+ console.log('created dir ' + p);
+ });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/no_cleanup_on_exit.spec.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/no_cleanup_on_exit.spec.js
new file mode 100644
index 0000000..13ae28a
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/no_cleanup_on_exit.spec.js
@@ -0,0 +1,11 @@
+var temp = require('temp');
+temp.track();
+
+console.log('Doing something');
+
+describe('temp will create dir that will remain after the process exits', function() {
+ it('creates a dir', function() {
+ var p = temp.mkdirSync("shouldBeDeletedOnExit");
+ console.log('created dir ' + p);
+ });
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/.bin/rimraf b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/.bin/rimraf
new file mode 120000
index 0000000..4cd49a4
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/.bin/rimraf
@@ -0,0 +1 @@
+../rimraf/bin.js
\ No newline at end of file
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/os-tmpdir/index.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/os-tmpdir/index.js
new file mode 100644
index 0000000..52d90bf
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/os-tmpdir/index.js
@@ -0,0 +1,25 @@
+'use strict';
+var isWindows = process.platform === 'win32';
+var trailingSlashRe = isWindows ? /[^:]\\$/ : /.\/$/;
+
+// https://github.com/nodejs/io.js/blob/3e7a14381497a3b73dda68d05b5130563cdab420/lib/os.js#L25-L43
+module.exports = function () {
+ var path;
+
+ if (isWindows) {
+ path = process.env.TEMP ||
+ process.env.TMP ||
+ (process.env.SystemRoot || process.env.windir) + '\\temp';
+ } else {
+ path = process.env.TMPDIR ||
+ process.env.TMP ||
+ process.env.TEMP ||
+ '/tmp';
+ }
+
+ if (trailingSlashRe.test(path)) {
+ path = path.slice(0, -1);
+ }
+
+ return path;
+};
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/os-tmpdir/license b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/os-tmpdir/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/os-tmpdir/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (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.
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/os-tmpdir/package.json b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/os-tmpdir/package.json
new file mode 100644
index 0000000..f8b2682
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/os-tmpdir/package.json
@@ -0,0 +1,69 @@
+{
+ "name": "os-tmpdir",
+ "version": "1.0.1",
+ "description": "Node.js os.tmpdir() ponyfill",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/sindresorhus/os-tmpdir"
+ },
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "node test.js"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "built-in",
+ "core",
+ "ponyfill",
+ "polyfill",
+ "shim",
+ "os",
+ "tmpdir",
+ "tempdir",
+ "tmp",
+ "temp",
+ "dir",
+ "directory",
+ "env",
+ "environment"
+ ],
+ "devDependencies": {
+ "ava": "0.0.4"
+ },
+ "gitHead": "5c5d355f81378980db629d60128ad03e02b1c1e5",
+ "bugs": {
+ "url": "https://github.com/sindresorhus/os-tmpdir/issues"
+ },
+ "homepage": "https://github.com/sindresorhus/os-tmpdir",
+ "_id": "os-tmpdir@1.0.1",
+ "_shasum": "e9b423a1edaf479882562e92ed71d7743a071b6e",
+ "_from": "os-tmpdir@>=1.0.0 <2.0.0",
+ "_npmVersion": "2.9.1",
+ "_nodeVersion": "0.12.3",
+ "_npmUser": {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ },
+ "dist": {
+ "shasum": "e9b423a1edaf479882562e92ed71d7743a071b6e",
+ "tarball": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.1.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ }
+ ],
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.1.tgz"
+}
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/os-tmpdir/readme.md b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/os-tmpdir/readme.md
new file mode 100644
index 0000000..54d4c6e
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/os-tmpdir/readme.md
@@ -0,0 +1,36 @@
+# os-tmpdir [](https://travis-ci.org/sindresorhus/os-tmpdir)
+
+> Node.js [`os.tmpdir()`](https://nodejs.org/api/os.html#os_os_tmpdir) ponyfill
+
+> Ponyfill: A polyfill that doesn't overwrite the native method
+
+Use this instead of `require('os').tmpdir()` to get a consistent behaviour on different Node.js versions (even 0.8).
+
+*This is actually taken from io.js 2.0.2 as it contains some fixes that haven't bubbled up to Node.js yet.*
+
+
+## Install
+
+```
+$ npm install --save os-tmpdir
+```
+
+
+## Usage
+
+```js
+var osTmpdir = require('os-tmpdir');
+
+osTmpdir();
+//=> /var/folders/m3/5574nnhn0yj488ccryqr7tc80000gn/T
+```
+
+
+## API
+
+See the [`os.tmpdir()` docs](https://nodejs.org/api/os.html#os_os_tmpdir).
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/AUTHORS b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/AUTHORS
new file mode 100644
index 0000000..247b754
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/AUTHORS
@@ -0,0 +1,6 @@
+# Authors sorted by whether or not they're me.
+Isaac Z. Schlueter (http://blog.izs.me)
+Wayne Larsen (http://github.com/wvl)
+ritch
+Marcel Laverdet
+Yosef Dinerstein
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/LICENSE b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/LICENSE
new file mode 100644
index 0000000..05a4010
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/LICENSE
@@ -0,0 +1,23 @@
+Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
+All rights reserved.
+
+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.
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/README.md b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/README.md
new file mode 100644
index 0000000..cd123b6
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/README.md
@@ -0,0 +1,30 @@
+`rm -rf` for node.
+
+Install with `npm install rimraf`, or just drop rimraf.js somewhere.
+
+## API
+
+`rimraf(f, callback)`
+
+The callback will be called with an error if there is one. Certain
+errors are handled for you:
+
+* Windows: `EBUSY` and `ENOTEMPTY` - rimraf will back off a maximum of
+ `opts.maxBusyTries` times before giving up.
+* `ENOENT` - If the file doesn't exist, rimraf will return
+ successfully, since your desired outcome is already the case.
+
+## rimraf.sync
+
+It can remove stuff synchronously, too. But that's not so good. Use
+the async API. It's better.
+
+## CLI
+
+If installed with `npm install rimraf -g` it can be used as a global
+command `rimraf ` which is useful for cross platform support.
+
+## mkdirp
+
+If you need to create a directory recursively, check out
+[mkdirp](https://github.com/substack/node-mkdirp).
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/bin.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/bin.js
new file mode 100755
index 0000000..29bfa8a
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/bin.js
@@ -0,0 +1,33 @@
+#!/usr/bin/env node
+
+var rimraf = require('./')
+
+var help = false
+var dashdash = false
+var args = process.argv.slice(2).filter(function(arg) {
+ if (dashdash)
+ return !!arg
+ else if (arg === '--')
+ dashdash = true
+ else if (arg.match(/^(-+|\/)(h(elp)?|\?)$/))
+ help = true
+ else
+ return !!arg
+});
+
+if (help || args.length === 0) {
+ // If they didn't ask for help, then this is not a "success"
+ var log = help ? console.log : console.error
+ log('Usage: rimraf ')
+ log('')
+ log(' Deletes all files and folders at "path" recursively.')
+ log('')
+ log('Options:')
+ log('')
+ log(' -h, --help Display this usage info')
+ process.exit(help ? 0 : 1)
+} else {
+ args.forEach(function(arg) {
+ rimraf.sync(arg)
+ })
+}
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/package.json b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/package.json
new file mode 100644
index 0000000..9cef163
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/package.json
@@ -0,0 +1,72 @@
+{
+ "name": "rimraf",
+ "version": "2.2.8",
+ "main": "rimraf.js",
+ "description": "A deep deletion module for node (like `rm -rf`)",
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "license": {
+ "type": "MIT",
+ "url": "https://github.com/isaacs/rimraf/raw/master/LICENSE"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/rimraf.git"
+ },
+ "scripts": {
+ "test": "cd test && bash run.sh"
+ },
+ "bin": {
+ "rimraf": "./bin.js"
+ },
+ "contributors": [
+ {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me"
+ },
+ {
+ "name": "Wayne Larsen",
+ "email": "wayne@larsen.st",
+ "url": "http://github.com/wvl"
+ },
+ {
+ "name": "ritch",
+ "email": "skawful@gmail.com"
+ },
+ {
+ "name": "Marcel Laverdet"
+ },
+ {
+ "name": "Yosef Dinerstein",
+ "email": "yosefd@microsoft.com"
+ }
+ ],
+ "bugs": {
+ "url": "https://github.com/isaacs/rimraf/issues"
+ },
+ "homepage": "https://github.com/isaacs/rimraf",
+ "_id": "rimraf@2.2.8",
+ "_shasum": "e439be2aaee327321952730f99a8929e4fc50582",
+ "_from": "rimraf@>=2.2.6 <2.3.0",
+ "_npmVersion": "1.4.10",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "dist": {
+ "shasum": "e439be2aaee327321952730f99a8929e4fc50582",
+ "tarball": "http://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz"
+}
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/rimraf.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/rimraf.js
new file mode 100644
index 0000000..eb96c46
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/rimraf.js
@@ -0,0 +1,248 @@
+module.exports = rimraf
+rimraf.sync = rimrafSync
+
+var assert = require("assert")
+var path = require("path")
+var fs = require("fs")
+
+// for EMFILE handling
+var timeout = 0
+exports.EMFILE_MAX = 1000
+exports.BUSYTRIES_MAX = 3
+
+var isWindows = (process.platform === "win32")
+
+function defaults (options) {
+ var methods = [
+ 'unlink',
+ 'chmod',
+ 'stat',
+ 'rmdir',
+ 'readdir'
+ ]
+ methods.forEach(function(m) {
+ options[m] = options[m] || fs[m]
+ m = m + 'Sync'
+ options[m] = options[m] || fs[m]
+ })
+}
+
+function rimraf (p, options, cb) {
+ if (typeof options === 'function') {
+ cb = options
+ options = {}
+ }
+ assert(p)
+ assert(options)
+ assert(typeof cb === 'function')
+
+ defaults(options)
+
+ if (!cb) throw new Error("No callback passed to rimraf()")
+
+ var busyTries = 0
+ rimraf_(p, options, function CB (er) {
+ if (er) {
+ if (isWindows && (er.code === "EBUSY" || er.code === "ENOTEMPTY") &&
+ busyTries < exports.BUSYTRIES_MAX) {
+ busyTries ++
+ var time = busyTries * 100
+ // try again, with the same exact callback as this one.
+ return setTimeout(function () {
+ rimraf_(p, options, CB)
+ }, time)
+ }
+
+ // this one won't happen if graceful-fs is used.
+ if (er.code === "EMFILE" && timeout < exports.EMFILE_MAX) {
+ return setTimeout(function () {
+ rimraf_(p, options, CB)
+ }, timeout ++)
+ }
+
+ // already gone
+ if (er.code === "ENOENT") er = null
+ }
+
+ timeout = 0
+ cb(er)
+ })
+}
+
+// Two possible strategies.
+// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR
+// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR
+//
+// Both result in an extra syscall when you guess wrong. However, there
+// are likely far more normal files in the world than directories. This
+// is based on the assumption that a the average number of files per
+// directory is >= 1.
+//
+// If anyone ever complains about this, then I guess the strategy could
+// be made configurable somehow. But until then, YAGNI.
+function rimraf_ (p, options, cb) {
+ assert(p)
+ assert(options)
+ assert(typeof cb === 'function')
+
+ options.unlink(p, function (er) {
+ if (er) {
+ if (er.code === "ENOENT")
+ return cb(null)
+ if (er.code === "EPERM")
+ return (isWindows)
+ ? fixWinEPERM(p, options, er, cb)
+ : rmdir(p, options, er, cb)
+ if (er.code === "EISDIR")
+ return rmdir(p, options, er, cb)
+ }
+ return cb(er)
+ })
+}
+
+function fixWinEPERM (p, options, er, cb) {
+ assert(p)
+ assert(options)
+ assert(typeof cb === 'function')
+ if (er)
+ assert(er instanceof Error)
+
+ options.chmod(p, 666, function (er2) {
+ if (er2)
+ cb(er2.code === "ENOENT" ? null : er)
+ else
+ options.stat(p, function(er3, stats) {
+ if (er3)
+ cb(er3.code === "ENOENT" ? null : er)
+ else if (stats.isDirectory())
+ rmdir(p, options, er, cb)
+ else
+ options.unlink(p, cb)
+ })
+ })
+}
+
+function fixWinEPERMSync (p, options, er) {
+ assert(p)
+ assert(options)
+ if (er)
+ assert(er instanceof Error)
+
+ try {
+ options.chmodSync(p, 666)
+ } catch (er2) {
+ if (er2.code === "ENOENT")
+ return
+ else
+ throw er
+ }
+
+ try {
+ var stats = options.statSync(p)
+ } catch (er3) {
+ if (er3.code === "ENOENT")
+ return
+ else
+ throw er
+ }
+
+ if (stats.isDirectory())
+ rmdirSync(p, options, er)
+ else
+ options.unlinkSync(p)
+}
+
+function rmdir (p, options, originalEr, cb) {
+ assert(p)
+ assert(options)
+ if (originalEr)
+ assert(originalEr instanceof Error)
+ assert(typeof cb === 'function')
+
+ // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
+ // if we guessed wrong, and it's not a directory, then
+ // raise the original error.
+ options.rmdir(p, function (er) {
+ if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM"))
+ rmkids(p, options, cb)
+ else if (er && er.code === "ENOTDIR")
+ cb(originalEr)
+ else
+ cb(er)
+ })
+}
+
+function rmkids(p, options, cb) {
+ assert(p)
+ assert(options)
+ assert(typeof cb === 'function')
+
+ options.readdir(p, function (er, files) {
+ if (er)
+ return cb(er)
+ var n = files.length
+ if (n === 0)
+ return options.rmdir(p, cb)
+ var errState
+ files.forEach(function (f) {
+ rimraf(path.join(p, f), options, function (er) {
+ if (errState)
+ return
+ if (er)
+ return cb(errState = er)
+ if (--n === 0)
+ options.rmdir(p, cb)
+ })
+ })
+ })
+}
+
+// this looks simpler, and is strictly *faster*, but will
+// tie up the JavaScript thread and fail on excessively
+// deep directory trees.
+function rimrafSync (p, options) {
+ options = options || {}
+ defaults(options)
+
+ assert(p)
+ assert(options)
+
+ try {
+ options.unlinkSync(p)
+ } catch (er) {
+ if (er.code === "ENOENT")
+ return
+ if (er.code === "EPERM")
+ return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
+ if (er.code !== "EISDIR")
+ throw er
+ rmdirSync(p, options, er)
+ }
+}
+
+function rmdirSync (p, options, originalEr) {
+ assert(p)
+ assert(options)
+ if (originalEr)
+ assert(originalEr instanceof Error)
+
+ try {
+ options.rmdirSync(p)
+ } catch (er) {
+ if (er.code === "ENOENT")
+ return
+ if (er.code === "ENOTDIR")
+ throw originalEr
+ if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")
+ rmkidsSync(p, options)
+ }
+}
+
+function rmkidsSync (p, options) {
+ assert(p)
+ assert(options)
+ options.readdirSync(p).forEach(function (f) {
+ rimrafSync(path.join(p, f), options)
+ })
+ options.rmdirSync(p, options)
+}
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/test/run.sh b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/test/run.sh
new file mode 100644
index 0000000..653ff9b
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/test/run.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+set -e
+code=0
+for i in test-*.js; do
+ echo -n $i ...
+ bash setup.sh
+ node $i
+ if [ -d target ]; then
+ echo "fail"
+ code=1
+ else
+ echo "pass"
+ fi
+done
+rm -rf target
+exit $code
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/test/setup.sh b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/test/setup.sh
new file mode 100644
index 0000000..2602e63
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/test/setup.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+set -e
+
+files=10
+folders=2
+depth=4
+target="$PWD/target"
+
+rm -rf target
+
+fill () {
+ local depth=$1
+ local files=$2
+ local folders=$3
+ local target=$4
+
+ if ! [ -d $target ]; then
+ mkdir -p $target
+ fi
+
+ local f
+
+ f=$files
+ while [ $f -gt 0 ]; do
+ touch "$target/f-$depth-$f"
+ let f--
+ done
+
+ let depth--
+
+ if [ $depth -le 0 ]; then
+ return 0
+ fi
+
+ f=$folders
+ while [ $f -gt 0 ]; do
+ mkdir "$target/folder-$depth-$f"
+ fill $depth $files $folders "$target/d-$depth-$f"
+ let f--
+ done
+}
+
+fill $depth $files $folders $target
+
+# sanity assert
+[ -d $target ]
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/test/test-async.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/test/test-async.js
new file mode 100644
index 0000000..9c2e0b7
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/test/test-async.js
@@ -0,0 +1,5 @@
+var rimraf = require("../rimraf")
+ , path = require("path")
+rimraf(path.join(__dirname, "target"), function (er) {
+ if (er) throw er
+})
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/test/test-sync.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/test/test-sync.js
new file mode 100644
index 0000000..eb71f10
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/node_modules/rimraf/test/test-sync.js
@@ -0,0 +1,3 @@
+var rimraf = require("../rimraf")
+ , path = require("path")
+rimraf.sync(path.join(__dirname, "target"))
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/package.json b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/package.json
new file mode 100644
index 0000000..285c20f
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/package.json
@@ -0,0 +1,72 @@
+{
+ "name": "temp",
+ "description": "Temporary files and directories",
+ "tags": [
+ "temporary",
+ "temp",
+ "tempfile",
+ "tempdir",
+ "tmpfile",
+ "tmpdir",
+ "security"
+ ],
+ "version": "0.8.3",
+ "author": {
+ "name": "Bruce Williams",
+ "email": "brwcodes@gmail.com"
+ },
+ "license": "MIT",
+ "directories": {
+ "lib": "lib"
+ },
+ "engines": [
+ "node >=0.8.0"
+ ],
+ "main": "./lib/temp",
+ "dependencies": {
+ "os-tmpdir": "^1.0.0",
+ "rimraf": "~2.2.6"
+ },
+ "keywords": [
+ "temporary",
+ "tmp",
+ "temp",
+ "tempdir",
+ "tempfile",
+ "tmpdir",
+ "tmpfile"
+ ],
+ "devDependencies": {},
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/bruce/node-temp.git"
+ },
+ "scripts": {
+ "test": "node test/temp-test.js"
+ },
+ "gitHead": "76966b174840a540c8d1566507f2afcad99a3afa",
+ "bugs": {
+ "url": "https://github.com/bruce/node-temp/issues"
+ },
+ "homepage": "https://github.com/bruce/node-temp",
+ "_id": "temp@0.8.3",
+ "_shasum": "e0c6bc4d26b903124410e4fed81103014dfc1f59",
+ "_from": "temp@>=0.8.3 <0.9.0",
+ "_npmVersion": "2.5.1",
+ "_nodeVersion": "0.12.0",
+ "_npmUser": {
+ "name": "bruce",
+ "email": "brwcodes@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "bruce",
+ "email": "bruce@codefluency.com"
+ }
+ ],
+ "dist": {
+ "shasum": "e0c6bc4d26b903124410e4fed81103014dfc1f59",
+ "tarball": "http://registry.npmjs.org/temp/-/temp-0.8.3.tgz"
+ },
+ "_resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz"
+}
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/test/temp-test.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/test/temp-test.js
new file mode 100644
index 0000000..c755509
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/temp/test/temp-test.js
@@ -0,0 +1,99 @@
+var assert = require('assert');
+var path = require('path');
+var fs = require('fs');
+var util = require('util');
+
+var temp = require('../lib/temp');
+temp.track();
+
+var existsSync = function(path){
+ try {
+ fs.statSync(path);
+ return true;
+ } catch (e){
+ return false;
+ }
+};
+
+// Use path.exists for 0.6 if necessary
+var safeExists = fs.exists || path.exists;
+
+var mkdirFired = false;
+var mkdirPath = null;
+temp.mkdir('foo', function(err, tpath) {
+ mkdirFired = true;
+ assert.ok(!err, "temp.mkdir did not execute without errors");
+ assert.ok(path.basename(tpath).slice(0, 3) == 'foo', 'temp.mkdir did not use the prefix');
+ assert.ok(existsSync(tpath), 'temp.mkdir did not create the directory');
+
+ fs.writeFileSync(path.join(tpath, 'a file'), 'a content');
+ temp.cleanupSync();
+ assert.ok(!existsSync(tpath), 'temp.cleanupSync did not remove the directory');
+
+ mkdirPath = tpath;
+});
+
+var openFired = false;
+var openPath = null;
+temp.open('bar', function(err, info) {
+ openFired = true;
+ assert.equal('object', typeof(info), "temp.open did not invoke the callback with the err and info object");
+ assert.equal('number', typeof(info.fd), 'temp.open did not invoke the callback with an fd');
+ fs.writeSync(info.fd, 'foo');
+ fs.closeSync(info.fd);
+ assert.equal('string', typeof(info.path), 'temp.open did not invoke the callback with a path');
+ assert.ok(existsSync(info.path), 'temp.open did not create a file');
+
+ temp.cleanupSync();
+ assert.ok(!existsSync(info.path), 'temp.cleanupSync did not remove the file');
+
+ openPath = info.path;
+});
+
+
+var stream = temp.createWriteStream('baz');
+assert.ok(stream instanceof fs.WriteStream, 'temp.createWriteStream did not invoke the callback with the err and stream object');
+stream.write('foo');
+stream.end("More text here\nand more...");
+assert.ok(existsSync(stream.path), 'temp.createWriteStream did not create a file');
+
+var tempDir = temp.mkdirSync("foobar");
+assert.ok(existsSync(tempDir), 'temp.mkdirTemp did not create a directory');
+
+// cleanupSync()
+temp.cleanupSync();
+assert.ok(!existsSync(stream.path), 'temp.cleanupSync did not remove the createWriteStream file');
+assert.ok(!existsSync(tempDir), 'temp.cleanupSync did not remove the mkdirSync directory');
+
+// cleanup()
+var cleanupFired = false;
+// Make a temp file just to cleanup
+var tempFile = temp.openSync();
+fs.writeSync(tempFile.fd, 'foo');
+fs.closeSync(tempFile.fd);
+assert.ok(existsSync(tempFile.path), 'temp.openSync did not create a file for cleanup');
+
+// run cleanup()
+temp.cleanup(function(err, counts) {
+ cleanupFired = true;
+ assert.ok(!err, 'temp.cleanup did not run without encountering an error');
+ assert.ok(!existsSync(tempFile.path), 'temp.cleanup did not remove the openSync file for cleanup');
+ assert.equal(1, counts.files, 'temp.cleanup did not report the correct removal statistics');
+});
+
+var tempPath = temp.path();
+assert.ok(path.dirname(tempPath) === temp.dir, "temp.path does not work in default os temporary directory");
+
+tempPath = temp.path({dir: process.cwd()});
+assert.ok(path.dirname(tempPath) === process.cwd(), "temp.path does not work in user-provided temporary directory");
+
+for (var i=0; i <= 10; i++) {
+ temp.openSync();
+}
+assert.equal(process.listeners('exit').length, 1, 'temp created more than one listener for exit');
+
+process.addListener('exit', function() {
+ assert.ok(mkdirFired, "temp.mkdir callback did not fire");
+ assert.ok(openFired, "temp.open callback did not fire");
+ assert.ok(cleanupFired, "temp.cleanup callback did not fire");
+});
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/through/.travis.yml b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/.travis.yml
new file mode 100644
index 0000000..c693a93
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/.travis.yml
@@ -0,0 +1,5 @@
+language: node_js
+node_js:
+ - 0.6
+ - 0.8
+ - "0.10"
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/through/LICENSE.APACHE2 b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/LICENSE.APACHE2
new file mode 100644
index 0000000..6366c04
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/LICENSE.APACHE2
@@ -0,0 +1,15 @@
+Apache License, Version 2.0
+
+Copyright (c) 2011 Dominic Tarr
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/through/LICENSE.MIT b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/LICENSE.MIT
new file mode 100644
index 0000000..6eafbd7
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/LICENSE.MIT
@@ -0,0 +1,24 @@
+The MIT License
+
+Copyright (c) 2011 Dominic Tarr
+
+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.
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/through/index.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/index.js
new file mode 100644
index 0000000..ca5fc59
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/index.js
@@ -0,0 +1,108 @@
+var Stream = require('stream')
+
+// through
+//
+// a stream that does nothing but re-emit the input.
+// useful for aggregating a series of changing but not ending streams into one stream)
+
+exports = module.exports = through
+through.through = through
+
+//create a readable writable stream.
+
+function through (write, end, opts) {
+ write = write || function (data) { this.queue(data) }
+ end = end || function () { this.queue(null) }
+
+ var ended = false, destroyed = false, buffer = [], _ended = false
+ var stream = new Stream()
+ stream.readable = stream.writable = true
+ stream.paused = false
+
+// stream.autoPause = !(opts && opts.autoPause === false)
+ stream.autoDestroy = !(opts && opts.autoDestroy === false)
+
+ stream.write = function (data) {
+ write.call(this, data)
+ return !stream.paused
+ }
+
+ function drain() {
+ while(buffer.length && !stream.paused) {
+ var data = buffer.shift()
+ if(null === data)
+ return stream.emit('end')
+ else
+ stream.emit('data', data)
+ }
+ }
+
+ stream.queue = stream.push = function (data) {
+// console.error(ended)
+ if(_ended) return stream
+ if(data === null) _ended = true
+ buffer.push(data)
+ drain()
+ return stream
+ }
+
+ //this will be registered as the first 'end' listener
+ //must call destroy next tick, to make sure we're after any
+ //stream piped from here.
+ //this is only a problem if end is not emitted synchronously.
+ //a nicer way to do this is to make sure this is the last listener for 'end'
+
+ stream.on('end', function () {
+ stream.readable = false
+ if(!stream.writable && stream.autoDestroy)
+ process.nextTick(function () {
+ stream.destroy()
+ })
+ })
+
+ function _end () {
+ stream.writable = false
+ end.call(stream)
+ if(!stream.readable && stream.autoDestroy)
+ stream.destroy()
+ }
+
+ stream.end = function (data) {
+ if(ended) return
+ ended = true
+ if(arguments.length) stream.write(data)
+ _end() // will emit or queue
+ return stream
+ }
+
+ stream.destroy = function () {
+ if(destroyed) return
+ destroyed = true
+ ended = true
+ buffer.length = 0
+ stream.writable = stream.readable = false
+ stream.emit('close')
+ return stream
+ }
+
+ stream.pause = function () {
+ if(stream.paused) return
+ stream.paused = true
+ return stream
+ }
+
+ stream.resume = function () {
+ if(stream.paused) {
+ stream.paused = false
+ stream.emit('resume')
+ }
+ drain()
+ //may have become paused again,
+ //as drain emits 'data'.
+ if(!stream.paused)
+ stream.emit('drain')
+ return stream
+ }
+ return stream
+}
+
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/through/package.json b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/package.json
new file mode 100644
index 0000000..1737554
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/package.json
@@ -0,0 +1,65 @@
+{
+ "name": "through",
+ "version": "2.3.8",
+ "description": "simplified stream construction",
+ "main": "index.js",
+ "scripts": {
+ "test": "set -e; for t in test/*.js; do node $t; done"
+ },
+ "devDependencies": {
+ "stream-spec": "~0.3.5",
+ "tape": "~2.3.2",
+ "from": "~0.1.3"
+ },
+ "keywords": [
+ "stream",
+ "streams",
+ "user-streams",
+ "pipe"
+ ],
+ "author": {
+ "name": "Dominic Tarr",
+ "email": "dominic.tarr@gmail.com",
+ "url": "dominictarr.com"
+ },
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/dominictarr/through.git"
+ },
+ "homepage": "https://github.com/dominictarr/through",
+ "testling": {
+ "browsers": [
+ "ie/8..latest",
+ "ff/15..latest",
+ "chrome/20..latest",
+ "safari/5.1..latest"
+ ],
+ "files": "test/*.js"
+ },
+ "gitHead": "2c5a6f9a0cc54da759b6e10964f2081c358e49dc",
+ "bugs": {
+ "url": "https://github.com/dominictarr/through/issues"
+ },
+ "_id": "through@2.3.8",
+ "_shasum": "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5",
+ "_from": "through@>=2.3.4 <3.0.0",
+ "_npmVersion": "2.12.0",
+ "_nodeVersion": "2.3.1",
+ "_npmUser": {
+ "name": "dominictarr",
+ "email": "dominic.tarr@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "dominictarr",
+ "email": "dominic.tarr@gmail.com"
+ }
+ ],
+ "dist": {
+ "shasum": "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5",
+ "tarball": "http://registry.npmjs.org/through/-/through-2.3.8.tgz"
+ },
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz"
+}
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/through/readme.markdown b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/readme.markdown
new file mode 100644
index 0000000..cb34c81
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/readme.markdown
@@ -0,0 +1,64 @@
+#through
+
+[](http://travis-ci.org/dominictarr/through)
+[](https://ci.testling.com/dominictarr/through)
+
+Easy way to create a `Stream` that is both `readable` and `writable`.
+
+* Pass in optional `write` and `end` methods.
+* `through` takes care of pause/resume logic if you use `this.queue(data)` instead of `this.emit('data', data)`.
+* Use `this.pause()` and `this.resume()` to manage flow.
+* Check `this.paused` to see current flow state. (`write` always returns `!this.paused`).
+
+This function is the basis for most of the synchronous streams in
+[event-stream](http://github.com/dominictarr/event-stream).
+
+``` js
+var through = require('through')
+
+through(function write(data) {
+ this.queue(data) //data *must* not be null
+ },
+ function end () { //optional
+ this.queue(null)
+ })
+```
+
+Or, can also be used _without_ buffering on pause, use `this.emit('data', data)`,
+and this.emit('end')
+
+``` js
+var through = require('through')
+
+through(function write(data) {
+ this.emit('data', data)
+ //this.pause()
+ },
+ function end () { //optional
+ this.emit('end')
+ })
+```
+
+## Extended Options
+
+You will probably not need these 99% of the time.
+
+### autoDestroy=false
+
+By default, `through` emits close when the writable
+and readable side of the stream has ended.
+If that is not desired, set `autoDestroy=false`.
+
+``` js
+var through = require('through')
+
+//like this
+var ts = through(write, end, {autoDestroy: false})
+//or like this
+var ts = through(write, end)
+ts.autoDestroy = false
+```
+
+## License
+
+MIT / Apache2
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/through/test/async.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/test/async.js
new file mode 100644
index 0000000..46bdbae
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/test/async.js
@@ -0,0 +1,28 @@
+var from = require('from')
+var through = require('../')
+
+var tape = require('tape')
+
+tape('simple async example', function (t) {
+
+ var n = 0, expected = [1,2,3,4,5], actual = []
+ from(expected)
+ .pipe(through(function(data) {
+ this.pause()
+ n ++
+ setTimeout(function(){
+ console.log('pushing data', data)
+ this.push(data)
+ this.resume()
+ }.bind(this), 300)
+ })).pipe(through(function(data) {
+ console.log('pushing data second time', data);
+ this.push(data)
+ })).on('data', function (d) {
+ actual.push(d)
+ }).on('end', function() {
+ t.deepEqual(actual, expected)
+ t.end()
+ })
+
+})
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/through/test/auto-destroy.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/test/auto-destroy.js
new file mode 100644
index 0000000..9a8fd00
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/test/auto-destroy.js
@@ -0,0 +1,30 @@
+var test = require('tape')
+var through = require('../')
+
+// must emit end before close.
+
+test('end before close', function (assert) {
+ var ts = through()
+ ts.autoDestroy = false
+ var ended = false, closed = false
+
+ ts.on('end', function () {
+ assert.ok(!closed)
+ ended = true
+ })
+ ts.on('close', function () {
+ assert.ok(ended)
+ closed = true
+ })
+
+ ts.write(1)
+ ts.write(2)
+ ts.write(3)
+ ts.end()
+ assert.ok(ended)
+ assert.notOk(closed)
+ ts.destroy()
+ assert.ok(closed)
+ assert.end()
+})
+
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/through/test/buffering.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/test/buffering.js
new file mode 100644
index 0000000..b0084bf
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/test/buffering.js
@@ -0,0 +1,71 @@
+var test = require('tape')
+var through = require('../')
+
+// must emit end before close.
+
+test('buffering', function(assert) {
+ var ts = through(function (data) {
+ this.queue(data)
+ }, function () {
+ this.queue(null)
+ })
+
+ var ended = false, actual = []
+
+ ts.on('data', actual.push.bind(actual))
+ ts.on('end', function () {
+ ended = true
+ })
+
+ ts.write(1)
+ ts.write(2)
+ ts.write(3)
+ assert.deepEqual(actual, [1, 2, 3])
+ ts.pause()
+ ts.write(4)
+ ts.write(5)
+ ts.write(6)
+ assert.deepEqual(actual, [1, 2, 3])
+ ts.resume()
+ assert.deepEqual(actual, [1, 2, 3, 4, 5, 6])
+ ts.pause()
+ ts.end()
+ assert.ok(!ended)
+ ts.resume()
+ assert.ok(ended)
+ assert.end()
+})
+
+test('buffering has data in queue, when ends', function (assert) {
+
+ /*
+ * If stream ends while paused with data in the queue,
+ * stream should still emit end after all data is written
+ * on resume.
+ */
+
+ var ts = through(function (data) {
+ this.queue(data)
+ }, function () {
+ this.queue(null)
+ })
+
+ var ended = false, actual = []
+
+ ts.on('data', actual.push.bind(actual))
+ ts.on('end', function () {
+ ended = true
+ })
+
+ ts.pause()
+ ts.write(1)
+ ts.write(2)
+ ts.write(3)
+ ts.end()
+ assert.deepEqual(actual, [], 'no data written yet, still paused')
+ assert.ok(!ended, 'end not emitted yet, still paused')
+ ts.resume()
+ assert.deepEqual(actual, [1, 2, 3], 'resumed, all data should be delivered')
+ assert.ok(ended, 'end should be emitted once all data was delivered')
+ assert.end();
+})
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/through/test/end.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/test/end.js
new file mode 100644
index 0000000..fa113f5
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/test/end.js
@@ -0,0 +1,45 @@
+var test = require('tape')
+var through = require('../')
+
+// must emit end before close.
+
+test('end before close', function (assert) {
+ var ts = through()
+ var ended = false, closed = false
+
+ ts.on('end', function () {
+ assert.ok(!closed)
+ ended = true
+ })
+ ts.on('close', function () {
+ assert.ok(ended)
+ closed = true
+ })
+
+ ts.write(1)
+ ts.write(2)
+ ts.write(3)
+ ts.end()
+ assert.ok(ended)
+ assert.ok(closed)
+ assert.end()
+})
+
+test('end only once', function (t) {
+
+ var ts = through()
+ var ended = false, closed = false
+
+ ts.on('end', function () {
+ t.equal(ended, false)
+ ended = true
+ })
+
+ ts.queue(null)
+ ts.queue(null)
+ ts.queue(null)
+
+ ts.resume()
+
+ t.end()
+})
diff --git a/walter_nicholas/node_modules/gulp-mocha/node_modules/through/test/index.js b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/test/index.js
new file mode 100644
index 0000000..96da82f
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/node_modules/through/test/index.js
@@ -0,0 +1,133 @@
+
+var test = require('tape')
+var spec = require('stream-spec')
+var through = require('../')
+
+/*
+ I'm using these two functions, and not streams and pipe
+ so there is less to break. if this test fails it must be
+ the implementation of _through_
+*/
+
+function write(array, stream) {
+ array = array.slice()
+ function next() {
+ while(array.length)
+ if(stream.write(array.shift()) === false)
+ return stream.once('drain', next)
+
+ stream.end()
+ }
+
+ next()
+}
+
+function read(stream, callback) {
+ var actual = []
+ stream.on('data', function (data) {
+ actual.push(data)
+ })
+ stream.once('end', function () {
+ callback(null, actual)
+ })
+ stream.once('error', function (err) {
+ callback(err)
+ })
+}
+
+test('simple defaults', function(assert) {
+
+ var l = 1000
+ , expected = []
+
+ while(l--) expected.push(l * Math.random())
+
+ var t = through()
+ var s = spec(t).through().pausable()
+
+ read(t, function (err, actual) {
+ assert.ifError(err)
+ assert.deepEqual(actual, expected)
+ assert.end()
+ })
+
+ t.on('close', s.validate)
+
+ write(expected, t)
+});
+
+test('simple functions', function(assert) {
+
+ var l = 1000
+ , expected = []
+
+ while(l--) expected.push(l * Math.random())
+
+ var t = through(function (data) {
+ this.emit('data', data*2)
+ })
+ var s = spec(t).through().pausable()
+
+
+ read(t, function (err, actual) {
+ assert.ifError(err)
+ assert.deepEqual(actual, expected.map(function (data) {
+ return data*2
+ }))
+ assert.end()
+ })
+
+ t.on('close', s.validate)
+
+ write(expected, t)
+})
+
+test('pauses', function(assert) {
+
+ var l = 1000
+ , expected = []
+
+ while(l--) expected.push(l) //Math.random())
+
+ var t = through()
+
+ var s = spec(t)
+ .through()
+ .pausable()
+
+ t.on('data', function () {
+ if(Math.random() > 0.1) return
+ t.pause()
+ process.nextTick(function () {
+ t.resume()
+ })
+ })
+
+ read(t, function (err, actual) {
+ assert.ifError(err)
+ assert.deepEqual(actual, expected)
+ })
+
+ t.on('close', function () {
+ s.validate()
+ assert.end()
+ })
+
+ write(expected, t)
+})
+
+test('does not soft-end on `undefined`', function(assert) {
+ var stream = through()
+ , count = 0
+
+ stream.on('data', function (data) {
+ count++
+ })
+
+ stream.write(undefined)
+ stream.write(undefined)
+
+ assert.equal(count, 2)
+
+ assert.end()
+})
diff --git a/walter_nicholas/node_modules/gulp-mocha/package.json b/walter_nicholas/node_modules/gulp-mocha/package.json
new file mode 100644
index 0000000..d84e1f2
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/package.json
@@ -0,0 +1,76 @@
+{
+ "name": "gulp-mocha",
+ "version": "2.1.3",
+ "description": "Run Mocha tests",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/sindresorhus/gulp-mocha.git"
+ },
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "gulpplugin",
+ "mocha",
+ "test",
+ "testing",
+ "unit",
+ "framework",
+ "runner",
+ "tdd",
+ "bdd",
+ "qunit",
+ "spec",
+ "tap"
+ ],
+ "dependencies": {
+ "gulp-util": "^3.0.0",
+ "mocha": "^2.0.1",
+ "plur": "^1.0.0",
+ "resolve-from": "^1.0.0",
+ "temp": "^0.8.3",
+ "through": "^2.3.4"
+ },
+ "gitHead": "3ca5413ff235f7cf433541a141035cc64ea6e5db",
+ "bugs": {
+ "url": "https://github.com/sindresorhus/gulp-mocha/issues"
+ },
+ "homepage": "https://github.com/sindresorhus/gulp-mocha#readme",
+ "_id": "gulp-mocha@2.1.3",
+ "_shasum": "e906f2515ead1b273277003f60d584aceb94f362",
+ "_from": "gulp-mocha@*",
+ "_npmVersion": "2.11.2",
+ "_nodeVersion": "0.12.5",
+ "_npmUser": {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ },
+ "dist": {
+ "shasum": "e906f2515ead1b273277003f60d584aceb94f362",
+ "tarball": "http://registry.npmjs.org/gulp-mocha/-/gulp-mocha-2.1.3.tgz"
+ },
+ "maintainers": [
+ {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ },
+ {
+ "name": "kevva",
+ "email": "kevinmartensson@gmail.com"
+ }
+ ],
+ "directories": {},
+ "_resolved": "https://registry.npmjs.org/gulp-mocha/-/gulp-mocha-2.1.3.tgz"
+}
diff --git a/walter_nicholas/node_modules/gulp-mocha/readme.md b/walter_nicholas/node_modules/gulp-mocha/readme.md
new file mode 100644
index 0000000..237e19f
--- /dev/null
+++ b/walter_nicholas/node_modules/gulp-mocha/readme.md
@@ -0,0 +1,122 @@
+# gulp-mocha [](https://travis-ci.org/sindresorhus/gulp-mocha)
+
+> Run [Mocha](https://github.com/mochajs/mocha/) tests
+
+*Keep in mind that this is just a thin wrapper around Mocha and your issue is most likely with Mocha.*
+
+
+## Install
+
+```
+$ npm install --save-dev gulp-mocha
+```
+
+
+## Usage
+
+```js
+var gulp = require('gulp');
+var mocha = require('gulp-mocha');
+
+gulp.task('default', function () {
+ return gulp.src('test.js', {read: false})
+ // gulp-mocha needs filepaths so you can't have any plugins before it
+ .pipe(mocha({reporter: 'nyan'}));
+});
+```
+
+
+## API
+
+### mocha([options])
+
+#### options
+
+##### ui
+
+Type: `string`
+Default: `bdd`
+Values: `bdd`, `tdd`, `qunit`, `exports`
+
+The interface to use.
+
+##### reporter
+
+Type: `string`
+Default: `spec` | `dot` prior to mocha v1.21.0
+Values: [reporters](https://github.com/mochajs/mocha/tree/master/lib/reporters)
+
+The reporter that will be used.
+
+This option can also be used to utilize third-party reporters. For example if you `npm install mocha-lcov-reporter` you can then do use `mocha-lcov-reporter` as value.
+
+##### globals
+
+Type: `array`
+
+List of accepted global variable names, example `['YUI']`. Accepts wildcards to match multiple global variables, e.g. `['gulp*']` or even `['*']`. See [Mocha globals option](http://mochajs.org/#globals-option).
+
+##### timeout
+
+Type: `number`
+Default: `2000`
+
+Test-case timeout in milliseconds.
+
+##### bail
+
+Type: `boolean`
+Default: `false`
+
+Bail on the first test failure.
+
+##### ignoreLeaks
+
+Type: `boolean`
+Default: `false`
+
+Ignore global leaks.
+
+##### grep
+
+Type: `string`
+
+Only run tests matching the given pattern which is internally compiled to a RegExp.
+
+##### require
+
+Type: `array`
+
+Require custom modules before tests are run.
+
+
+## FAQ
+
+### Test suite not exiting
+
+If your test suite is not exiting it might be because you still have a lingering callback, most often caused by an open database connection. You should close this connection or do the following:
+
+```js
+gulp.task('default', function () {
+ return gulp.src('test.js')
+ .pipe(mocha())
+ .once('error', function () {
+ process.exit(1);
+ })
+ .once('end', function () {
+ process.exit();
+ });
+});
+```
+
+### CoffeeScript
+
+Add `require('coffee-script/register')` to the top of your `gulpfile.js`.
+
+### Babel
+
+Add `require('babel/register')` to the top of your `gulpfile.js`.
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/walter_nicholas/package.json b/walter_nicholas/package.json
new file mode 100644
index 0000000..7a7147a
--- /dev/null
+++ b/walter_nicholas/package.json
@@ -0,0 +1,23 @@
+{
+ "name": "oct28_assignment",
+ "version": "0.1.0",
+ "description": "greeting app",
+ "main": "index.js",
+ "directories": {
+ "test": "test"
+ },
+ "scripts": {
+ "test": "./node_modules/mocha/bin/mocha test",
+ "start": "echo 'hello world'",
+ "custom": "echo 'custom'"
+ },
+ "author": "walter nicholas",
+ "license": "MIT",
+ "devDependencies": {
+ "chai": "^3.4.0",
+ "gulp": "^3.9.0",
+ "gulp-jshint": "^1.11.2",
+ "gulp-mocha": "^2.1.3",
+ "mocha": "^2.3.3"
+ }
+}
diff --git a/walter_nicholas/test/greet_test.js b/walter_nicholas/test/greet_test.js
index 064a25f..3e07e59 100644
--- a/walter_nicholas/test/greet_test.js
+++ b/walter_nicholas/test/greet_test.js
@@ -6,6 +6,7 @@ var greet = require(__dirname + '/../lib/greet');
describe('the greet function', function() {
it('should output hello followed by the string which is passed to it', function() {
expect(greet.greet('walter')).to.eql('hello walter');
+
});
});