You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by an...@apache.org on 2016/03/04 13:35:48 UTC

[01/14] cordova-browser git commit: CB-10788 Updated checked in node_modules [Forced Update!]

Repository: cordova-browser
Updated Branches:
  refs/heads/master 39c83314d -> da6c350e9 (forced update)


http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/mv.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/mv.js b/node_modules/shelljs/test/mv.js
deleted file mode 100644
index 89bca91..0000000
--- a/node_modules/shelljs/test/mv.js
+++ /dev/null
@@ -1,130 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-function numLines(str) {
-  return typeof str === 'string' ? str.match(/\n/g).length : 0;
-}
-
-shell.rm('-rf', 'tmp');
-shell.mkdir('tmp');
-
-// Prepare tmp/
-shell.cp('resources/*', 'tmp');
-
-//
-// Invalids
-//
-
-shell.mv();
-assert.ok(shell.error());
-
-shell.mv('file1');
-assert.ok(shell.error());
-
-shell.mv('-f');
-assert.ok(shell.error());
-
-shell.mv('-Z', 'tmp/file1', 'tmp/file1'); // option not supported
-assert.ok(shell.error());
-assert.equal(fs.existsSync('tmp/file1'), true);
-
-shell.mv('asdfasdf', 'tmp'); // source does not exist
-assert.ok(shell.error());
-assert.equal(numLines(shell.error()), 1);
-assert.equal(fs.existsSync('tmp/asdfasdf'), false);
-
-shell.mv('asdfasdf1', 'asdfasdf2', 'tmp'); // sources do not exist
-assert.ok(shell.error());
-assert.equal(numLines(shell.error()), 2);
-assert.equal(fs.existsSync('tmp/asdfasdf1'), false);
-assert.equal(fs.existsSync('tmp/asdfasdf2'), false);
-
-shell.mv('asdfasdf1', 'asdfasdf2', 'tmp/file1'); // too many sources (dest is file)
-assert.ok(shell.error());
-
-shell.mv('tmp/file1', 'tmp/file2'); // dest already exists
-assert.ok(shell.error());
-
-shell.mv('tmp/file1', 'tmp/file2', 'tmp/a_file'); // too many sources (exist, but dest is file)
-assert.ok(shell.error());
-assert.equal(fs.existsSync('tmp/a_file'), false);
-
-shell.mv('tmp/file*', 'tmp/file1'); // can't use wildcard when dest is file
-assert.ok(shell.error());
-assert.equal(fs.existsSync('tmp/file1'), true);
-assert.equal(fs.existsSync('tmp/file2'), true);
-assert.equal(fs.existsSync('tmp/file1.js'), true);
-assert.equal(fs.existsSync('tmp/file2.js'), true);
-
-//
-// Valids
-//
-
-shell.cd('tmp');
-
-// handles self OK
-shell.mkdir('tmp2');
-shell.mv('*', 'tmp2'); // has to handle self (tmp2 --> tmp2) without throwing error
-assert.ok(shell.error()); // there's an error, but not fatal
-assert.equal(fs.existsSync('tmp2/file1'), true); // moved OK
-shell.mv('tmp2/*', '.'); // revert
-assert.equal(fs.existsSync('file1'), true); // moved OK
-
-shell.mv('file1', 'file3'); // one source
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('file1'), false);
-assert.equal(fs.existsSync('file3'), true);
-shell.mv('file3', 'file1'); // revert
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('file1'), true);
-
-// two sources
-shell.rm('-rf', 't');
-shell.mkdir('-p', 't');
-shell.mv('file1', 'file2', 't');
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('file1'), false);
-assert.equal(fs.existsSync('file2'), false);
-assert.equal(fs.existsSync('t/file1'), true);
-assert.equal(fs.existsSync('t/file2'), true);
-shell.mv('t/*', '.'); // revert
-assert.equal(fs.existsSync('file1'), true);
-assert.equal(fs.existsSync('file2'), true);
-
-// two sources, array style
-shell.rm('-rf', 't');
-shell.mkdir('-p', 't');
-shell.mv(['file1', 'file2'], 't'); // two sources
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('file1'), false);
-assert.equal(fs.existsSync('file2'), false);
-assert.equal(fs.existsSync('t/file1'), true);
-assert.equal(fs.existsSync('t/file2'), true);
-shell.mv('t/*', '.'); // revert
-assert.equal(fs.existsSync('file1'), true);
-assert.equal(fs.existsSync('file2'), true);
-
-shell.mv('file*.js', 't'); // wildcard
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('file1.js'), false);
-assert.equal(fs.existsSync('file2.js'), false);
-assert.equal(fs.existsSync('t/file1.js'), true);
-assert.equal(fs.existsSync('t/file2.js'), true);
-shell.mv('t/*', '.'); // revert
-assert.equal(fs.existsSync('file1.js'), true);
-assert.equal(fs.existsSync('file2.js'), true);
-
-shell.mv('-f', 'file1', 'file2'); // dest exists, but -f given
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('file1'), false);
-assert.equal(fs.existsSync('file2'), true);
-
-shell.exit(123);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/popd.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/popd.js b/node_modules/shelljs/test/popd.js
deleted file mode 100644
index fd79533..0000000
--- a/node_modules/shelljs/test/popd.js
+++ /dev/null
@@ -1,118 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-var root = path.resolve(), trail;
-
-function reset() {
-    shell.dirs('-c');
-    shell.cd(root);
-}
-
-// Valid
-shell.pushd('resources/pushd');
-trail = shell.popd();
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [ root ]);
-
-shell.pushd('resources/pushd');
-shell.pushd('a');
-trail = shell.popd();
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    path.resolve(root, 'resources/pushd'),
-    root
-]);
-
-shell.pushd('b');
-trail = shell.popd();
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    path.resolve(root, 'resources/pushd'),
-    root
-]);
-
-shell.pushd('b');
-shell.pushd('c');
-trail = shell.popd();
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    path.resolve(root, 'resources/pushd/b'),
-    path.resolve(root, 'resources/pushd'),
-    root
-]);
-
-trail = shell.popd();
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    path.resolve(root, 'resources/pushd'),
-    root
-]);
-
-trail = shell.popd();
-assert.equal(shell.error(), null);
-assert.equal(trail.length, 1);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [ root ]);
-
-// Valid by index
-shell.pushd('resources/pushd');
-trail = shell.popd('+0');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [ root ]);
-
-shell.pushd('resources/pushd');
-trail = shell.popd('+1');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [ path.resolve(root, 'resources/pushd') ]);
-
-reset(); shell.pushd('resources/pushd');
-trail = shell.popd('-0');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [ path.resolve(root, 'resources/pushd') ]);
-
-reset(); shell.pushd('resources/pushd');
-trail = shell.popd('-1');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [ root ]);
-
-
-reset(); shell.pushd('resources/pushd');
-trail = shell.popd('-n');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [ path.resolve(root, 'resources/pushd') ]);
-
-// Invalid
-trail = shell.popd();
-assert.ok(shell.error('popd: directory stack empty\n'));
-
-// Test that the root dir is not stored
-shell.cd('resources/pushd');
-shell.pushd('b');
-trail = shell.popd();
-assert.equal(shell.error(), null);
-assert.equal(trail[0], path.resolve(root, 'resources/pushd'));
-assert.equal(process.cwd(), trail[0]);
-shell.popd();
-assert.ok(shell.error(), null);
-
-shell.cd(root);
-
-shell.exit(123);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/pushd.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/pushd.js b/node_modules/shelljs/test/pushd.js
deleted file mode 100644
index 32089dc..0000000
--- a/node_modules/shelljs/test/pushd.js
+++ /dev/null
@@ -1,228 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-var root = path.resolve(), trail;
-
-function reset() {
-    shell.dirs('-c');
-    shell.cd(root);
-}
-
-// Push valid directories
-trail = shell.pushd('resources/pushd');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    path.resolve(root, 'resources/pushd'),
-    root
-]);
-
-trail = shell.pushd('a');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    path.resolve(root, 'resources/pushd/a'),
-    path.resolve(root, 'resources/pushd'),
-    root
-]);
-
-trail = shell.pushd('../b');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    path.resolve(root, 'resources/pushd/b'),
-    path.resolve(root, 'resources/pushd/a'),
-    path.resolve(root, 'resources/pushd'),
-    root
-]);
-
-trail = shell.pushd('c');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    path.resolve(root, 'resources/pushd/b/c'),
-    path.resolve(root, 'resources/pushd/b'),
-    path.resolve(root, 'resources/pushd/a'),
-    path.resolve(root, 'resources/pushd'),
-    root
-]);
-
-// Push stuff around with positive indices
-trail = shell.pushd('+0');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    path.resolve(root, 'resources/pushd/b/c'),
-    path.resolve(root, 'resources/pushd/b'),
-    path.resolve(root, 'resources/pushd/a'),
-    path.resolve(root, 'resources/pushd'),
-    root
-]);
-
-trail = shell.pushd('+1');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    path.resolve(root, 'resources/pushd/b'),
-    path.resolve(root, 'resources/pushd/a'),
-    path.resolve(root, 'resources/pushd'),
-    root,
-    path.resolve(root, 'resources/pushd/b/c')
-]);
-
-trail = shell.pushd('+2');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    path.resolve(root, 'resources/pushd'),
-    root,
-    path.resolve(root, 'resources/pushd/b/c'),
-    path.resolve(root, 'resources/pushd/b'),
-    path.resolve(root, 'resources/pushd/a')
-]);
-
-trail = shell.pushd('+3');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    path.resolve(root, 'resources/pushd/b'),
-    path.resolve(root, 'resources/pushd/a'),
-    path.resolve(root, 'resources/pushd'),
-    root,
-    path.resolve(root, 'resources/pushd/b/c')
-]);
-
-trail = shell.pushd('+4');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    path.resolve(root, 'resources/pushd/b/c'),
-    path.resolve(root, 'resources/pushd/b'),
-    path.resolve(root, 'resources/pushd/a'),
-    path.resolve(root, 'resources/pushd'),
-    root
-]);
-
-// Push stuff around with negative indices
-trail = shell.pushd('-0');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    root,
-    path.resolve(root, 'resources/pushd/b/c'),
-    path.resolve(root, 'resources/pushd/b'),
-    path.resolve(root, 'resources/pushd/a'),
-    path.resolve(root, 'resources/pushd')
-]);
-
-trail = shell.pushd('-1');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    path.resolve(root, 'resources/pushd/a'),
-    path.resolve(root, 'resources/pushd'),
-    root,
-    path.resolve(root, 'resources/pushd/b/c'),
-    path.resolve(root, 'resources/pushd/b')
-]);
-
-trail = shell.pushd('-2');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    root,
-    path.resolve(root, 'resources/pushd/b/c'),
-    path.resolve(root, 'resources/pushd/b'),
-    path.resolve(root, 'resources/pushd/a'),
-    path.resolve(root, 'resources/pushd')
-]);
-
-trail = shell.pushd('-3');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    path.resolve(root, 'resources/pushd/b/c'),
-    path.resolve(root, 'resources/pushd/b'),
-    path.resolve(root, 'resources/pushd/a'),
-    path.resolve(root, 'resources/pushd'),
-    root
-]);
-
-trail = shell.pushd('-4');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    path.resolve(root, 'resources/pushd/b/c'),
-    path.resolve(root, 'resources/pushd/b'),
-    path.resolve(root, 'resources/pushd/a'),
-    path.resolve(root, 'resources/pushd'),
-    root
-]);
-
-// Push without changing directory or resolving paths
-reset(); trail = shell.pushd('-n', 'resources/pushd');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    root,
-    'resources/pushd'
-]);
-
-trail = shell.pushd('-n', 'resources/pushd/a');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), trail[0]);
-assert.deepEqual(trail, [
-    root,
-    'resources/pushd/a',
-    'resources/pushd'
-]);
-
-// Push invalid directory
-shell.pushd('does/not/exist');
-assert.equal(shell.error(), 'pushd: no such file or directory: ' + path.resolve('.', 'does/not/exist') + '\n');
-assert.equal(process.cwd(), trail[0]);
-
-// Push without arguments should swap top two directories when stack length is 2
-reset(); trail = shell.pushd('resources/pushd');
-assert.equal(shell.error(), null);
-assert.equal(trail.length, 2);
-assert.equal(path.relative(root, trail[0]), 'resources/pushd');
-assert.equal(trail[1], root);
-assert.equal(process.cwd(), trail[0]);
-trail = shell.pushd();
-assert.equal(shell.error(), null);
-assert.equal(trail.length, 2);
-assert.equal(trail[0], root);
-assert.equal(path.relative(root, trail[1]), 'resources/pushd');
-assert.equal(process.cwd(), trail[0]);
-
-// Push without arguments should swap top two directories when stack length is > 2
-trail = shell.pushd('resources/pushd/a');
-assert.equal(shell.error(), null);
-assert.equal(trail.length, 3);
-assert.equal(path.relative(root, trail[0]), 'resources/pushd/a');
-assert.equal(trail[1], root);
-assert.equal(path.relative(root, trail[2]), 'resources/pushd');
-assert.equal(process.cwd(), trail[0]);
-
-trail = shell.pushd();
-assert.equal(shell.error(), null);
-assert.equal(trail.length, 3);
-assert.equal(trail[0], root);
-assert.equal(path.relative(root, trail[1]), 'resources/pushd/a');
-assert.equal(path.relative(root, trail[2]), 'resources/pushd');
-assert.equal(process.cwd(), trail[0]);
-
-// Push without arguments invalid when stack is empty
-reset(); shell.pushd();
-assert.equal(shell.error(), 'pushd: no other directory\n');
-
-shell.exit(123);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/pwd.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/pwd.js b/node_modules/shelljs/test/pwd.js
deleted file mode 100644
index d1f563f..0000000
--- a/node_modules/shelljs/test/pwd.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path');
-
-shell.config.silent = true;
-
-function numLines(str) {
-  return typeof str === 'string' ? str.match(/\n/g).length : 0;
-}
-
-shell.rm('-rf', 'tmp');
-shell.mkdir('tmp');
-
-//
-// Valids
-//
-
-var _pwd = shell.pwd();
-assert.equal(shell.error(), null);
-assert.equal(_pwd, path.resolve('.'));
-
-shell.cd('tmp');
-var _pwd = shell.pwd();
-assert.equal(shell.error(), null);
-assert.equal(path.basename(_pwd), 'tmp');
-
-shell.exit(123);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/a.txt
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/a.txt b/node_modules/shelljs/test/resources/a.txt
deleted file mode 100644
index 356ce49..0000000
--- a/node_modules/shelljs/test/resources/a.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-This is line one
-This is line two
-
-This is line four
-.
-.
-More content here
-.
-.
-
-This is line eleven

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/chmod/a/b/c/.npmignore
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/chmod/a/b/c/.npmignore b/node_modules/shelljs/test/resources/chmod/a/b/c/.npmignore
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/chmod/b/a/b/.npmignore
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/chmod/b/a/b/.npmignore b/node_modules/shelljs/test/resources/chmod/b/a/b/.npmignore
deleted file mode 100755
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/chmod/c/a/b/.npmignore
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/chmod/c/a/b/.npmignore b/node_modules/shelljs/test/resources/chmod/c/a/b/.npmignore
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/chmod/file1
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/chmod/file1 b/node_modules/shelljs/test/resources/chmod/file1
deleted file mode 100644
index db3f9ca..0000000
--- a/node_modules/shelljs/test/resources/chmod/file1
+++ /dev/null
@@ -1,2 +0,0 @@
-this is test file 1
-default state should be 0644 (rw-r--r--)

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/cp/a
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/cp/a b/node_modules/shelljs/test/resources/cp/a
deleted file mode 100644
index 8bd6648..0000000
--- a/node_modules/shelljs/test/resources/cp/a
+++ /dev/null
@@ -1 +0,0 @@
-asdf

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/cp/b
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/cp/b b/node_modules/shelljs/test/resources/cp/b
deleted file mode 100644
index 8bd6648..0000000
--- a/node_modules/shelljs/test/resources/cp/b
+++ /dev/null
@@ -1 +0,0 @@
-asdf

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/cp/dir_a/z
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/cp/dir_a/z b/node_modules/shelljs/test/resources/cp/dir_a/z
deleted file mode 100644
index 8bd6648..0000000
--- a/node_modules/shelljs/test/resources/cp/dir_a/z
+++ /dev/null
@@ -1 +0,0 @@
-asdf

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/cp/dir_b/dir_b_a/dir_b_a_a/z
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/cp/dir_b/dir_b_a/dir_b_a_a/z b/node_modules/shelljs/test/resources/cp/dir_b/dir_b_a/dir_b_a_a/z
deleted file mode 100644
index 8bd6648..0000000
--- a/node_modules/shelljs/test/resources/cp/dir_b/dir_b_a/dir_b_a_a/z
+++ /dev/null
@@ -1 +0,0 @@
-asdf

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/external/node_script.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/external/node_script.js b/node_modules/shelljs/test/resources/external/node_script.js
deleted file mode 100755
index 3b2d24a..0000000
--- a/node_modules/shelljs/test/resources/external/node_script.js
+++ /dev/null
@@ -1,2 +0,0 @@
-console.log('node_script_1234');
-

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/file1
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/file1 b/node_modules/shelljs/test/resources/file1
deleted file mode 100644
index f079749..0000000
--- a/node_modules/shelljs/test/resources/file1
+++ /dev/null
@@ -1 +0,0 @@
-test1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/file1.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/file1.js b/node_modules/shelljs/test/resources/file1.js
deleted file mode 100644
index 9daeafb..0000000
--- a/node_modules/shelljs/test/resources/file1.js
+++ /dev/null
@@ -1 +0,0 @@
-test

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/file1.txt
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/file1.txt b/node_modules/shelljs/test/resources/file1.txt
deleted file mode 100644
index a5bce3f..0000000
--- a/node_modules/shelljs/test/resources/file1.txt
+++ /dev/null
@@ -1 +0,0 @@
-test1

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/file2
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/file2 b/node_modules/shelljs/test/resources/file2
deleted file mode 100644
index d606037..0000000
--- a/node_modules/shelljs/test/resources/file2
+++ /dev/null
@@ -1 +0,0 @@
-test2
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/file2.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/file2.js b/node_modules/shelljs/test/resources/file2.js
deleted file mode 100644
index 9daeafb..0000000
--- a/node_modules/shelljs/test/resources/file2.js
+++ /dev/null
@@ -1 +0,0 @@
-test

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/file2.txt
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/file2.txt b/node_modules/shelljs/test/resources/file2.txt
deleted file mode 100644
index 180cf83..0000000
--- a/node_modules/shelljs/test/resources/file2.txt
+++ /dev/null
@@ -1 +0,0 @@
-test2

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/find/.hidden
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/find/.hidden b/node_modules/shelljs/test/resources/find/.hidden
deleted file mode 100644
index 8bd6648..0000000
--- a/node_modules/shelljs/test/resources/find/.hidden
+++ /dev/null
@@ -1 +0,0 @@
-asdf

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/find/a
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/find/a b/node_modules/shelljs/test/resources/find/a
deleted file mode 100644
index 8bd6648..0000000
--- a/node_modules/shelljs/test/resources/find/a
+++ /dev/null
@@ -1 +0,0 @@
-asdf

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/find/b
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/find/b b/node_modules/shelljs/test/resources/find/b
deleted file mode 100644
index 8bd6648..0000000
--- a/node_modules/shelljs/test/resources/find/b
+++ /dev/null
@@ -1 +0,0 @@
-asdf

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/find/dir1/a_dir1
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/find/dir1/a_dir1 b/node_modules/shelljs/test/resources/find/dir1/a_dir1
deleted file mode 100644
index 8bd6648..0000000
--- a/node_modules/shelljs/test/resources/find/dir1/a_dir1
+++ /dev/null
@@ -1 +0,0 @@
-asdf

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/find/dir1/dir11/a_dir11
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/find/dir1/dir11/a_dir11 b/node_modules/shelljs/test/resources/find/dir1/dir11/a_dir11
deleted file mode 100644
index 8bd6648..0000000
--- a/node_modules/shelljs/test/resources/find/dir1/dir11/a_dir11
+++ /dev/null
@@ -1 +0,0 @@
-asdf

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/find/dir2/a_dir1
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/find/dir2/a_dir1 b/node_modules/shelljs/test/resources/find/dir2/a_dir1
deleted file mode 100644
index 8bd6648..0000000
--- a/node_modules/shelljs/test/resources/find/dir2/a_dir1
+++ /dev/null
@@ -1 +0,0 @@
-asdf

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/issue44/main.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/issue44/main.js b/node_modules/shelljs/test/resources/issue44/main.js
deleted file mode 100644
index d800886..0000000
--- a/node_modules/shelljs/test/resources/issue44/main.js
+++ /dev/null
@@ -1 +0,0 @@
-123
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/ls/.hidden_dir/nada
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/ls/.hidden_dir/nada b/node_modules/shelljs/test/resources/ls/.hidden_dir/nada
deleted file mode 100644
index 8bd6648..0000000
--- a/node_modules/shelljs/test/resources/ls/.hidden_dir/nada
+++ /dev/null
@@ -1 +0,0 @@
-asdf

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/ls/.hidden_file
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/ls/.hidden_file b/node_modules/shelljs/test/resources/ls/.hidden_file
deleted file mode 100644
index 8bd6648..0000000
--- a/node_modules/shelljs/test/resources/ls/.hidden_file
+++ /dev/null
@@ -1 +0,0 @@
-asdf

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/ls/a_dir/.hidden_dir/nada
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/ls/a_dir/.hidden_dir/nada b/node_modules/shelljs/test/resources/ls/a_dir/.hidden_dir/nada
deleted file mode 100644
index 5fedf57..0000000
--- a/node_modules/shelljs/test/resources/ls/a_dir/.hidden_dir/nada
+++ /dev/null
@@ -1 +0,0 @@
-nada
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/ls/a_dir/b_dir/z
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/ls/a_dir/b_dir/z b/node_modules/shelljs/test/resources/ls/a_dir/b_dir/z
deleted file mode 100644
index 8bd6648..0000000
--- a/node_modules/shelljs/test/resources/ls/a_dir/b_dir/z
+++ /dev/null
@@ -1 +0,0 @@
-asdf

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/ls/a_dir/nada
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/ls/a_dir/nada b/node_modules/shelljs/test/resources/ls/a_dir/nada
deleted file mode 100644
index 8bd6648..0000000
--- a/node_modules/shelljs/test/resources/ls/a_dir/nada
+++ /dev/null
@@ -1 +0,0 @@
-asdf

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/ls/file1
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/ls/file1 b/node_modules/shelljs/test/resources/ls/file1
deleted file mode 100644
index 9daeafb..0000000
--- a/node_modules/shelljs/test/resources/ls/file1
+++ /dev/null
@@ -1 +0,0 @@
-test

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/ls/file1.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/ls/file1.js b/node_modules/shelljs/test/resources/ls/file1.js
deleted file mode 100644
index 9daeafb..0000000
--- a/node_modules/shelljs/test/resources/ls/file1.js
+++ /dev/null
@@ -1 +0,0 @@
-test

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/ls/file2
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/ls/file2 b/node_modules/shelljs/test/resources/ls/file2
deleted file mode 100644
index 9daeafb..0000000
--- a/node_modules/shelljs/test/resources/ls/file2
+++ /dev/null
@@ -1 +0,0 @@
-test

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/ls/file2.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/ls/file2.js b/node_modules/shelljs/test/resources/ls/file2.js
deleted file mode 100644
index 9daeafb..0000000
--- a/node_modules/shelljs/test/resources/ls/file2.js
+++ /dev/null
@@ -1 +0,0 @@
-test

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/ls/filename(with)[chars$]^that.must+be-escaped
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/ls/filename(with)[chars$]^that.must+be-escaped b/node_modules/shelljs/test/resources/ls/filename(with)[chars$]^that.must+be-escaped
deleted file mode 100644
index 8bd6648..0000000
--- a/node_modules/shelljs/test/resources/ls/filename(with)[chars$]^that.must+be-escaped
+++ /dev/null
@@ -1 +0,0 @@
-asdf

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/pushd/a/dummy
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/pushd/a/dummy b/node_modules/shelljs/test/resources/pushd/a/dummy
deleted file mode 100644
index 72e12a9..0000000
--- a/node_modules/shelljs/test/resources/pushd/a/dummy
+++ /dev/null
@@ -1 +0,0 @@
-meh
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/resources/pushd/b/c/dummy
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/resources/pushd/b/c/dummy b/node_modules/shelljs/test/resources/pushd/b/c/dummy
deleted file mode 100644
index 72e12a9..0000000
--- a/node_modules/shelljs/test/resources/pushd/b/c/dummy
+++ /dev/null
@@ -1 +0,0 @@
-meh
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/rm.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/rm.js b/node_modules/shelljs/test/rm.js
deleted file mode 100644
index 61182a1..0000000
--- a/node_modules/shelljs/test/rm.js
+++ /dev/null
@@ -1,183 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-shell.rm('-rf', 'tmp');
-shell.mkdir('tmp');
-
-//
-// Invalids
-//
-
-shell.rm();
-assert.ok(shell.error());
-
-shell.rm('asdfasdf'); // file does not exist
-assert.ok(shell.error());
-
-shell.rm('-f'); // no file
-assert.ok(shell.error());
-
-shell.rm('-@', 'resources/file1'); // invalid option
-assert.ok(shell.error());
-assert.equal(fs.existsSync('resources/file1'), true);
-
-//
-// Valids
-//
-
-// file does not exist, but -f specified
-shell.rm('-f', 'asdfasdf');
-assert.equal(shell.error(), null);
-
-// simple rm
-shell.cp('-f', 'resources/file1', 'tmp/file1');
-assert.equal(fs.existsSync('tmp/file1'), true);
-shell.rm('tmp/file1');
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('tmp/file1'), false);
-
-// recursive dir removal - small-caps '-r'
-shell.mkdir('-p', 'tmp/a/b/c');
-assert.equal(fs.existsSync('tmp/a/b/c'), true);
-shell.rm('-rf', 'tmp/a');
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('tmp/a'), false);
-
-// recursive dir removal - capital '-R'
-shell.mkdir('-p', 'tmp/a/b/c');
-assert.equal(fs.existsSync('tmp/a/b/c'), true);
-shell.rm('-Rf', 'tmp/a');
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('tmp/a'), false);
-
-// recursive dir removal - absolute path
-shell.mkdir('-p', 'tmp/a/b/c');
-assert.equal(fs.existsSync('tmp/a/b/c'), true);
-shell.rm('-Rf', path.resolve('./tmp/a'));
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('tmp/a'), false);
-
-// wildcard
-shell.cp('-f', 'resources/file*', 'tmp');
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('tmp/file1'), true);
-assert.equal(fs.existsSync('tmp/file2'), true);
-assert.equal(fs.existsSync('tmp/file1.js'), true);
-assert.equal(fs.existsSync('tmp/file2.js'), true);
-shell.rm('tmp/file*');
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('tmp/file1'), false);
-assert.equal(fs.existsSync('tmp/file2'), false);
-assert.equal(fs.existsSync('tmp/file1.js'), false);
-assert.equal(fs.existsSync('tmp/file2.js'), false);
-
-// recursive dir removal
-shell.mkdir('-p', 'tmp/a/b/c');
-shell.mkdir('-p', 'tmp/b');
-shell.mkdir('-p', 'tmp/c');
-shell.mkdir('-p', 'tmp/.hidden');
-assert.equal(fs.existsSync('tmp/a/b/c'), true);
-assert.equal(fs.existsSync('tmp/b'), true);
-assert.equal(fs.existsSync('tmp/c'), true);
-assert.equal(fs.existsSync('tmp/.hidden'), true);
-shell.rm('-rf', 'tmp/*'); 
-assert.equal(shell.error(), null);
-var contents = fs.readdirSync('tmp');
-assert.equal(contents.length, 1);
-assert.equal(contents[0], '.hidden'); // shouldn't remove hiddden if no .* given
-
-// recursive dir removal
-shell.mkdir('-p', 'tmp/a/b/c');
-shell.mkdir('-p', 'tmp/b');
-shell.mkdir('-p', 'tmp/c');
-shell.mkdir('-p', 'tmp/.hidden');
-assert.equal(fs.existsSync('tmp/a/b/c'), true);
-assert.equal(fs.existsSync('tmp/b'), true);
-assert.equal(fs.existsSync('tmp/c'), true);
-assert.equal(fs.existsSync('tmp/.hidden'), true);
-shell.rm('-rf', 'tmp/*', 'tmp/.*');
-assert.equal(shell.error(), null);
-var contents = fs.readdirSync('tmp');
-assert.equal(contents.length, 0);
-
-// recursive dir removal - array-syntax
-shell.mkdir('-p', 'tmp/a/b/c');
-shell.mkdir('-p', 'tmp/b');
-shell.mkdir('-p', 'tmp/c');
-shell.mkdir('-p', 'tmp/.hidden');
-assert.equal(fs.existsSync('tmp/a/b/c'), true);
-assert.equal(fs.existsSync('tmp/b'), true);
-assert.equal(fs.existsSync('tmp/c'), true);
-assert.equal(fs.existsSync('tmp/.hidden'), true);
-shell.rm('-rf', ['tmp/*', 'tmp/.*']);
-assert.equal(shell.error(), null);
-var contents = fs.readdirSync('tmp');
-assert.equal(contents.length, 0);
-
-// removal of a read-only file (unforced)
-shell.mkdir('-p', 'tmp/readonly');
-'asdf'.to('tmp/readonly/file1');
-fs.chmodSync('tmp/readonly/file1', '0444'); // -r--r--r--
-shell.rm('tmp/readonly/file1');
-assert.equal(fs.existsSync('tmp/readonly/file1'), true); // bash's rm always asks before removing read-only files
-                                                         // here we just assume "no"
-
-// removal of a read-only file (forced)
-shell.mkdir('-p', 'tmp/readonly');
-'asdf'.to('tmp/readonly/file2');
-fs.chmodSync('tmp/readonly/file2', '0444'); // -r--r--r--
-shell.rm('-f', 'tmp/readonly/file2');
-assert.equal(fs.existsSync('tmp/readonly/file2'), false);
-
-// removal of a tree containing read-only files (unforced)
-shell.mkdir('-p', 'tmp/tree2');
-'asdf'.to('tmp/tree2/file1');
-'asdf'.to('tmp/tree2/file2');
-fs.chmodSync('tmp/tree2/file1', '0444'); // -r--r--r--
-shell.rm('-r', 'tmp/tree2');
-assert.equal(fs.existsSync('tmp/tree2/file1'), true);
-assert.equal(fs.existsSync('tmp/tree2/file2'), false);
-
-// removal of a tree containing read-only files (forced)
-shell.mkdir('-p', 'tmp/tree');
-'asdf'.to('tmp/tree/file1');
-'asdf'.to('tmp/tree/file2');
-fs.chmodSync('tmp/tree/file1', '0444'); // -r--r--r--
-shell.rm('-rf', 'tmp/tree');
-assert.equal(fs.existsSync('tmp/tree'), false);
-
-// removal of a sub-tree containing read-only and hidden files - rm('dir/*')
-shell.mkdir('-p', 'tmp/tree3');
-shell.mkdir('-p', 'tmp/tree3/subtree');
-shell.mkdir('-p', 'tmp/tree3/.hidden');
-'asdf'.to('tmp/tree3/subtree/file');
-'asdf'.to('tmp/tree3/.hidden/file');
-'asdf'.to('tmp/tree3/file');
-fs.chmodSync('tmp/tree3/file', '0444'); // -r--r--r--
-fs.chmodSync('tmp/tree3/subtree/file', '0444'); // -r--r--r--
-fs.chmodSync('tmp/tree3/.hidden/file', '0444'); // -r--r--r--
-shell.rm('-rf', 'tmp/tree3/*', 'tmp/tree3/.*'); // erase dir contents
-assert.equal(shell.ls('tmp/tree3').length, 0);
-
-// removal of a sub-tree containing read-only and hidden files - rm('dir')
-shell.mkdir('-p', 'tmp/tree4');
-shell.mkdir('-p', 'tmp/tree4/subtree');
-shell.mkdir('-p', 'tmp/tree4/.hidden');
-'asdf'.to('tmp/tree4/subtree/file');
-'asdf'.to('tmp/tree4/.hidden/file');
-'asdf'.to('tmp/tree4/file');
-fs.chmodSync('tmp/tree4/file', '0444'); // -r--r--r--
-fs.chmodSync('tmp/tree4/subtree/file', '0444'); // -r--r--r--
-fs.chmodSync('tmp/tree4/.hidden/file', '0444'); // -r--r--r--
-shell.rm('-rf', 'tmp/tree4'); // erase dir contents
-assert.equal(fs.existsSync('tmp/tree4'), false);
-
-shell.exit(123);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/sed.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/sed.js b/node_modules/shelljs/test/sed.js
deleted file mode 100644
index d3d66b1..0000000
--- a/node_modules/shelljs/test/sed.js
+++ /dev/null
@@ -1,58 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-function numLines(str) {
-  return typeof str === 'string' ? str.match(/\n/g).length : 0;
-}
-
-shell.rm('-rf', 'tmp');
-shell.mkdir('tmp');
-
-//
-// Invalids
-//
-
-shell.sed();
-assert.ok(shell.error());
-
-shell.sed(/asdf/g); // too few args
-assert.ok(shell.error());
-
-shell.sed(/asdf/g, 'nada'); // too few args
-assert.ok(shell.error());
-
-assert.equal(fs.existsSync('/asdfasdf'), false); // sanity check
-shell.sed(/asdf/g, 'nada', '/asdfasdf'); // no such file
-assert.ok(shell.error());
-
-//
-// Valids
-//
-
-shell.cp('-f', 'resources/file1', 'tmp/file1');
-var result = shell.sed('test1', 'hello', 'tmp/file1'); // search string
-assert.equal(shell.error(), null);
-assert.equal(result, 'hello');
-
-var result = shell.sed(/test1/, 'hello', 'tmp/file1'); // search regex
-assert.equal(shell.error(), null);
-assert.equal(result, 'hello');
-
-var result = shell.sed(/test1/, 1234, 'tmp/file1'); // numeric replacement
-assert.equal(shell.error(), null);
-assert.equal(result, '1234');
-
-var result = shell.sed('-i', /test1/, 'hello', 'tmp/file1');
-assert.equal(shell.error(), null);
-assert.equal(result, 'hello');
-assert.equal(shell.cat('tmp/file1'), 'hello');
-
-shell.exit(123);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/tempdir.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/tempdir.js b/node_modules/shelljs/test/tempdir.js
deleted file mode 100644
index 704ca56..0000000
--- a/node_modules/shelljs/test/tempdir.js
+++ /dev/null
@@ -1,27 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-function numLines(str) {
-  return typeof str === 'string' ? str.match(/\n/g).length : 0;
-}
-
-shell.rm('-rf', 'tmp');
-shell.mkdir('tmp');
-
-//
-// Valids
-//
-
-var tmp = shell.tempdir();
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync(tmp), true);
-
-shell.exit(123);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/test.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/test.js b/node_modules/shelljs/test/test.js
deleted file mode 100644
index a824edb..0000000
--- a/node_modules/shelljs/test/test.js
+++ /dev/null
@@ -1,91 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-shell.rm('-rf', 'tmp');
-shell.mkdir('tmp');
-
-//
-// Invalids
-//
-
-var result = shell.test(); // no expression given
-assert.ok(shell.error());
-
-var result = shell.test('asdf'); // bad expression
-assert.ok(shell.error());
-
-var result = shell.test('f', 'resources/file1'); // bad expression
-assert.ok(shell.error());
-
-var result = shell.test('-f'); // no file
-assert.ok(shell.error());
-
-//
-// Valids
-//
-
-//exists
-var result = shell.test('-e', 'resources/file1');
-assert.equal(shell.error(), null);
-assert.equal(result, true);//true
-
-var result = shell.test('-e', 'resources/404');
-assert.equal(shell.error(), null);
-assert.equal(result, false);
-
-//directory
-var result = shell.test('-d', 'resources');
-assert.equal(shell.error(), null);
-assert.equal(result, true);//true
-
-var result = shell.test('-f', 'resources');
-assert.equal(shell.error(), null);
-assert.equal(result, false);
-
-var result = shell.test('-L', 'resources');
-assert.equal(shell.error(), null);
-assert.equal(result, false);
-
-//file
-var result = shell.test('-d', 'resources/file1');
-assert.equal(shell.error(), null);
-assert.equal(result, false);
-
-var result = shell.test('-f', 'resources/file1');
-assert.equal(shell.error(), null);
-assert.equal(result, true);//true
-
-var result = shell.test('-L', 'resources/file1');
-assert.equal(shell.error(), null);
-assert.equal(result, false);
-
-//link
-var result = shell.test('-d', 'resources/link');
-assert.equal(shell.error(), null);
-assert.equal(result, false);
-
-var result = shell.test('-f', 'resources/link');
-assert.equal(shell.error(), null);
-assert.equal(result, true);//true
-
-var result = shell.test('-L', 'resources/link');
-assert.equal(shell.error(), null);
-assert.equal(result, true);//true
-
-var result = shell.test('-L', 'resources/badlink');
-assert.equal(shell.error(), null);
-assert.equal(result, true);//true
-
-var result = shell.test('-L', 'resources/404');
-assert.equal(shell.error(), null);
-assert.equal(result, false);//false
-
-shell.exit(123);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/to.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/to.js b/node_modules/shelljs/test/to.js
deleted file mode 100644
index 2e1253d..0000000
--- a/node_modules/shelljs/test/to.js
+++ /dev/null
@@ -1,39 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-function numLines(str) {
-  return typeof str === 'string' ? str.match(/\n/g).length : 0;
-}
-
-shell.rm('-rf', 'tmp');
-shell.mkdir('tmp');
-
-//
-// Invalids
-//
-
-'hello world'.to();
-assert.ok(shell.error());
-
-assert.equal(fs.existsSync('/asdfasdf'), false); // sanity check
-'hello world'.to('/asdfasdf/file');
-assert.ok(shell.error());
-
-//
-// Valids
-//
-
-'hello world'.to('tmp/to1');
-var result = shell.cat('tmp/to1');
-assert.equal(shell.error(), null);
-assert.equal(result, 'hello world');
-
-shell.exit(123);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/which.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/which.js b/node_modules/shelljs/test/which.js
deleted file mode 100644
index ac9a04d..0000000
--- a/node_modules/shelljs/test/which.js
+++ /dev/null
@@ -1,38 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-function numLines(str) {
-  return typeof str === 'string' ? str.match(/\n/g).length : 0;
-}
-
-shell.rm('-rf', 'tmp');
-shell.mkdir('tmp');
-
-//
-// Invalids
-//
-
-shell.which();
-assert.ok(shell.error());
-
-var result = shell.which('asdfasdfasdfasdfasdf'); // what are the odds...
-assert.equal(shell.error(), null);
-assert.equal(result, null);
-
-//
-// Valids
-//
-
-var result = shell.which('node');
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync(result), true);
-
-shell.exit(123);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 0c567f9..3751b1b 100644
--- a/package.json
+++ b/package.json
@@ -18,11 +18,11 @@
     "jshint": "node node_modules/jshint/bin/jshint bin && node node_modules/jshint/bin/jshint tests"
   },
   "dependencies": {
-    "adm-zip": "0.4.4",
+    "adm-zip": "^0.4.7",
     "cordova-serve": "^1.0.0",
-    "nopt": "~3",
+    "nopt": "^3.0.6",
     "q": "^1.4.1",
-    "shelljs": "^0.1.4"
+    "shelljs": "^0.6.0"
   },
   "devDependencies": {
     "jasmine-node": "~1",


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[06/14] cordova-browser git commit: CB-10788 Updated checked in node_modules

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/serve-static/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/serve-static/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/serve-static/package.json
index cc858fd..b789b9a 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/serve-static/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/serve-static/package.json
@@ -1,7 +1,7 @@
 {
   "name": "serve-static",
   "description": "Serve static files",
-  "version": "1.10.0",
+  "version": "1.10.2",
   "author": {
     "name": "Douglas Christopher Wilson",
     "email": "doug@somethingdoug.com"
@@ -12,14 +12,14 @@
     "url": "git+https://github.com/expressjs/serve-static.git"
   },
   "dependencies": {
-    "escape-html": "1.0.2",
-    "parseurl": "~1.3.0",
-    "send": "0.13.0"
+    "escape-html": "~1.0.3",
+    "parseurl": "~1.3.1",
+    "send": "0.13.1"
   },
   "devDependencies": {
-    "istanbul": "0.3.9",
-    "mocha": "2.2.5",
-    "supertest": "1.0.1"
+    "istanbul": "0.4.2",
+    "mocha": "2.3.4",
+    "supertest": "1.1.0"
   },
   "files": [
     "LICENSE",
@@ -34,14 +34,50 @@
     "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/"
   },
-  "readme": "# serve-static\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Linux Build][travis-image]][travis-url]\n[![Windows Build][appveyor-image]][appveyor-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n[![Gratipay][gratipay-image]][gratipay-url]\n\n## Install\n\n```sh\n$ npm install serve-static\n```\n\n## API\n\n```js\nvar serveStatic = require('serve-static')\n```\n\n### serveStatic(root, options)\n\nCreate a new middleware function to serve files from within a given root\ndirectory. The file to serve will be determined by combining `req.url`\nwith the provided root directory. When a file is not found, instead of\nsending a 404 response, this module will instead call `next()` to move on\nto the next middleware, allowing for stacking and fall-backs.\n\n#### Options\n\n##### dotfiles\n\n Set how \"dotfiles\" are treated when encountered. A dotfile is a file\nor directory that begins with a dot (\".\"). Note this check 
 is done on\nthe path itself without checking if the path actually exists on the\ndisk. If `root` is specified, only the dotfiles above the root are\nchecked (i.e. the root itself can be within a dotfile when set\nto \"deny\").\n\nThe default value is `'ignore'`.\n\n  - `'allow'` No special treatment for dotfiles.\n  - `'deny'` Deny a request for a dotfile and 403/`next()`.\n  - `'ignore'` Pretend like the dotfile does not exist and 404/`next()`.\n\n##### etag\n\nEnable or disable etag generation, defaults to true.\n\n##### extensions\n\nSet file extension fallbacks. When set, if a file is not found, the given\nextensions will be added to the file name and search for. The first that\nexists will be served. Example: `['html', 'htm']`.\n\nThe default value is `false`.\n\n##### fallthrough\n\nSet the middleware to have client errors fall-through as just unhandled\nrequests, otherwise forward a client error. The difference is that client\nerrors like a bad request or a request to a non-e
 xistent file will cause\nthis middleware to simply `next()` to your next middleware when this value\nis `true`. When this value is `false`, these errors (even 404s), will invoke\n`next(err)`.\n\nTypically `true` is desired such that multiple physical directories can be\nmapped to the same web address or for routes to fill in non-existent files.\n\nThe value `false` can be used if this middleware is mounted at a path that\nis designed to be strictly a single file system directory, which allows for\nshort-circuiting 404s for less overhead. This middleware will also reply to\nall methods.\n\nThe default value is `true`.\n\n##### index\n\nBy default this module will send \"index.html\" files in response to a request\non a directory. To disable this set `false` or to supply a new index pass a\nstring or an array in preferred order.\n\n##### lastModified\n\nEnable or disable `Last-Modified` header, defaults to true. Uses the file\nsystem's last modified value.\n\n##### maxAge\n\nProvide a
  max-age in milliseconds for http caching, defaults to 0. This\ncan also be a string accepted by the [ms](https://www.npmjs.org/package/ms#readme)\nmodule.\n\n##### redirect\n\nRedirect to trailing \"/\" when the pathname is a dir. Defaults to `true`.\n\n##### setHeaders\n\nFunction to set custom headers on response. Alterations to the headers need to\noccur synchronously. The function is called as `fn(res, path, stat)`, where\nthe arguments are:\n\n  - `res` the response object\n  - `path` the file path that is being sent\n  - `stat` the stat object of the file that is being sent\n\n## Examples\n\n### Serve files with vanilla node.js http server\n\n```js\nvar finalhandler = require('finalhandler')\nvar http = require('http')\nvar serveStatic = require('serve-static')\n\n// Serve up public/ftp folder\nvar serve = serveStatic('public/ftp', {'index': ['index.html', 'index.htm']})\n\n// Create server\nvar server = http.createServer(function(req, res){\n  var done = finalhandler(req, re
 s)\n  serve(req, res, done)\n})\n\n// Listen\nserver.listen(3000)\n```\n\n### Serve all files as downloads\n\n```js\nvar contentDisposition = require('content-disposition')\nvar finalhandler = require('finalhandler')\nvar http = require('http')\nvar serveStatic = require('serve-static')\n\n// Serve up public/ftp folder\nvar serve = serveStatic('public/ftp', {\n  'index': false,\n  'setHeaders': setHeaders\n})\n\n// Set header to force download\nfunction setHeaders(res, path) {\n  res.setHeader('Content-Disposition', contentDisposition(path))\n}\n\n// Create server\nvar server = http.createServer(function(req, res){\n  var done = finalhandler(req, res)\n  serve(req, res, done)\n})\n\n// Listen\nserver.listen(3000)\n```\n\n### Serving using express\n\n#### Simple\n\nThis is a simple example of using Express.\n\n```js\nvar express = require('express')\nvar serveStatic = require('serve-static')\n\nvar app = express()\n\napp.use(serveStatic('public/ftp', {'index': ['default.html', 'defau
 lt.htm']}))\napp.listen(3000)\n```\n\n#### Multiple roots\n\nThis example shows a simple way to search through multiple directories.\nFiles are look for in `public-optimized/` first, then `public/` second as\na fallback.\n\n```js\nvar express = require('express')\nvar serveStatic = require('serve-static')\n\nvar app = express()\n\napp.use(serveStatic(__dirname + '/public-optimized'))\napp.use(serveStatic(__dirname + '/public'))\napp.listen(3000)\n```\n\n#### Different settings for paths\n\nThis example shows how to set a different max age depending on the served\nfile type. In this example, HTML files are not cached, while everything else\nis for 1 day.\n\n```js\nvar express = require('express')\nvar serveStatic = require('serve-static')\n\nvar app = express()\n\napp.use(serveStatic(__dirname + '/public', {\n  maxAge: '1d',\n  setHeaders: setCustomCacheControl\n}))\n\napp.listen(3000)\n\nfunction setCustomCacheControl(res, path) {\n  if (serveStatic.mime.lookup(path) === 'text/html'
 ) {\n    // Custom Cache-Control for HTML files\n    res.setHeader('Cache-Control', 'public, max-age=0')\n  }\n}\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/serve-static.svg\n[npm-url]: https://npmjs.org/package/serve-static\n[travis-image]: https://img.shields.io/travis/expressjs/serve-static/master.svg?label=linux\n[travis-url]: https://travis-ci.org/expressjs/serve-static\n[appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/serve-static/master.svg?label=windows\n[appveyor-url]: https://ci.appveyor.com/project/dougwilson/serve-static\n[coveralls-image]: https://img.shields.io/coveralls/expressjs/serve-static/master.svg\n[coveralls-url]: https://coveralls.io/r/expressjs/serve-static\n[downloads-image]: https://img.shields.io/npm/dm/serve-static.svg\n[downloads-url]: https://npmjs.org/package/serve-static\n[gratipay-image]: https://img.shields.io/gratipay/dougwilson.svg\n[gratipay-url]: https://gratipay.com/dougwilson/\n",
-  "readmeFilename": "README.md",
+  "gitHead": "aec36c897a33c6c2421fa41cc4947042d67332f6",
   "bugs": {
     "url": "https://github.com/expressjs/serve-static/issues"
   },
-  "homepage": "https://github.com/expressjs/serve-static#readme",
-  "_id": "serve-static@1.10.0",
-  "_shasum": "be632faa685820e4a43ed3df1379135cc4f370d7",
-  "_resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.0.tgz",
-  "_from": "serve-static@>=1.10.0 <1.11.0"
+  "homepage": "https://github.com/expressjs/serve-static",
+  "_id": "serve-static@1.10.2",
+  "_shasum": "feb800d0e722124dd0b00333160c16e9caa8bcb3",
+  "_from": "serve-static@>=1.10.2 <1.11.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "mscdex",
+      "email": "mscdex@mscdex.net"
+    },
+    {
+      "name": "fishrock123",
+      "email": "fishrock123@rocketmail.com"
+    },
+    {
+      "name": "defunctzombie",
+      "email": "shtylman@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "feb800d0e722124dd0b00333160c16e9caa8bcb3",
+    "tarball": "http://registry.npmjs.org/serve-static/-/serve-static-1.10.2.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.2.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/type-is/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/HISTORY.md b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/HISTORY.md
index fa39ff9..92cff18 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/HISTORY.md
@@ -1,3 +1,23 @@
+1.6.12 / 2016-02-28
+===================
+
+  * deps: mime-types@~2.1.10
+    - Add new mime types
+    - Fix extension of `application/dash+xml`
+    - Update primary extension for `audio/mp4`
+
+1.6.11 / 2016-01-29
+===================
+
+  * deps: mime-types@~2.1.9
+    - Add new mime types
+
+1.6.10 / 2015-12-01
+===================
+
+  * deps: mime-types@~2.1.8
+    - Add new mime types
+
 1.6.9 / 2015-09-27
 ==================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/type-is/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/README.md b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/README.md
index f75f6be..008a7af 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/README.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/README.md
@@ -46,6 +46,10 @@ is(req, ['html']) // false
 Returns a Boolean if the given `request` has a body, regardless of the
 `Content-Type` header.
 
+Having a body has no relation to how large the body is (it may be 0 bytes).
+This is similar to how file existence works. If a body does exist, then this
+indicates that there is data to read from the Node.js request stream.
+
 ```js
 if (is.hasBody(req)) {
   // read the body, since there is one
@@ -123,7 +127,7 @@ function bodyParser(req, res, next) {
 [npm-image]: https://img.shields.io/npm/v/type-is.svg
 [npm-url]: https://npmjs.org/package/type-is
 [node-version-image]: https://img.shields.io/node/v/type-is.svg
-[node-version-url]: http://nodejs.org/download/
+[node-version-url]: https://nodejs.org/en/download/
 [travis-image]: https://img.shields.io/travis/jshttp/type-is/master.svg
 [travis-url]: https://travis-ci.org/jshttp/type-is
 [coveralls-image]: https://img.shields.io/coveralls/jshttp/type-is/master.svg

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/type-is/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/index.js b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/index.js
index 5c11ef1..ca2962e 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/index.js
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/index.js
@@ -182,7 +182,7 @@ function normalize(type) {
 }
 
 /**
- * Check if `exected` mime type
+ * Check if `expected` mime type
  * matches `actual` mime type with
  * wildcard and +suffix support.
  *

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/media-typer/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/media-typer/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/media-typer/package.json
index a9b5b3c..e0f796d 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/media-typer/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/media-typer/package.json
@@ -29,14 +29,30 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
   },
-  "readme": "# media-typer\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nSimple RFC 6838 media type parser\n\n## Installation\n\n```sh\n$ npm install media-typer\n```\n\n## API\n\n```js\nvar typer = require('media-typer')\n```\n\n### typer.parse(string)\n\n```js\nvar obj = typer.parse('image/svg+xml; charset=utf-8')\n```\n\nParse a media type string. This will return an object with the following\nproperties (examples are shown for the string `'image/svg+xml; charset=utf-8'`):\n\n - `type`: The type of the media type (always lower case). Example: `'image'`\n\n - `subtype`: The subtype of the media type (always lower case). Example: `'svg'`\n\n - `suffix`: The suffix of the media type (always lower case). Example: `'xml'`\n\n - `parameters`: An object of the parameters in the media 
 type (name of parameter always lower case). Example: `{charset: 'utf-8'}`\n\n### typer.parse(req)\n\n```js\nvar obj = typer.parse(req)\n```\n\nParse the `content-type` header from the given `req`. Short-cut for\n`typer.parse(req.headers['content-type'])`.\n\n### typer.parse(res)\n\n```js\nvar obj = typer.parse(res)\n```\n\nParse the `content-type` header set on the given `res`. Short-cut for\n`typer.parse(res.getHeader('content-type'))`.\n\n### typer.format(obj)\n\n```js\nvar obj = typer.format({type: 'image', subtype: 'svg', suffix: 'xml'})\n```\n\nFormat an object into a media type string. This will return a string of the\nmime type for the given object. For the properties of the object, see the\ndocumentation for `typer.parse(string)`.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/media-typer.svg?style=flat\n[npm-url]: https://npmjs.org/package/media-typer\n[node-version-image]: https://img.shields.io/badge/node.js-%3E%3D_0.6-brightgreen.svg?style=f
 lat\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/media-typer.svg?style=flat\n[travis-url]: https://travis-ci.org/jshttp/media-typer\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/media-typer.svg?style=flat\n[coveralls-url]: https://coveralls.io/r/jshttp/media-typer\n[downloads-image]: https://img.shields.io/npm/dm/media-typer.svg?style=flat\n[downloads-url]: https://npmjs.org/package/media-typer\n",
-  "readmeFilename": "README.md",
+  "gitHead": "d49d41ffd0bb5a0655fa44a59df2ec0bfc835b16",
   "bugs": {
     "url": "https://github.com/jshttp/media-typer/issues"
   },
-  "homepage": "https://github.com/jshttp/media-typer#readme",
+  "homepage": "https://github.com/jshttp/media-typer",
   "_id": "media-typer@0.3.0",
   "_shasum": "8710d7af0aa626f8fffa1ce00168545263255748",
+  "_from": "media-typer@0.3.0",
+  "_npmVersion": "1.4.21",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "dist": {
+    "shasum": "8710d7af0aa626f8fffa1ce00168545263255748",
+    "tarball": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
-  "_from": "media-typer@0.3.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/HISTORY.md b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/HISTORY.md
index 3057e49..1d86a5c 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/HISTORY.md
@@ -1,3 +1,23 @@
+2.1.10 / 2016-02-15
+===================
+
+  * deps: mime-db@~1.22.0
+    - Add new mime types
+    - Fix extension of `application/dash+xml`
+    - Update primary extension for `audio/mp4`
+
+2.1.9 / 2016-01-06
+==================
+
+  * deps: mime-db@~1.21.0
+    - Add new mime types
+
+2.1.8 / 2015-11-30
+==================
+
+  * deps: mime-db@~1.20.0
+    - Add new mime types
+
 2.1.7 / 2015-09-20
 ==================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/README.md b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/README.md
index e26295d..e77d615 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/README.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/README.md
@@ -94,7 +94,7 @@ A map of extensions by content-type.
 [npm-image]: https://img.shields.io/npm/v/mime-types.svg
 [npm-url]: https://npmjs.org/package/mime-types
 [node-version-image]: https://img.shields.io/node/v/mime-types.svg
-[node-version-url]: http://nodejs.org/download/
+[node-version-url]: https://nodejs.org/en/download/
 [travis-image]: https://img.shields.io/travis/jshttp/mime-types/master.svg
 [travis-url]: https://travis-ci.org/jshttp/mime-types
 [coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-types/master.svg

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/HISTORY.md b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/HISTORY.md
index 3088a72..44f9f64 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/HISTORY.md
@@ -1,3 +1,49 @@
+1.22.0 / 2016-02-15
+===================
+
+  * Add `application/ppsp-tracker+json`
+  * Add `application/problem+json`
+  * Add `application/problem+xml`
+  * Add `application/vnd.hdt`
+  * Add `application/vnd.ms-printschematicket+xml`
+  * Add `model/vnd.rosette.annotated-data-model`
+  * Add `text/slim`
+  * Add extension `.rng` to `application/xml`
+  * Fix extension of `application/dash+xml` to be `.mpd`
+  * Update primary extension to `.m4a` for `audio/mp4`
+
+1.21.0 / 2016-01-06
+===================
+
+  * Add `application/emergencycalldata.comment+xml`
+  * Add `application/emergencycalldata.deviceinfo+xml`
+  * Add `application/emergencycalldata.providerinfo+xml`
+  * Add `application/emergencycalldata.serviceinfo+xml`
+  * Add `application/emergencycalldata.subscriberinfo+xml`
+  * Add `application/vnd.filmit.zfc`
+  * Add `application/vnd.google-apps.document`
+  * Add `application/vnd.google-apps.presentation`
+  * Add `application/vnd.google-apps.spreadsheet`
+  * Add `application/vnd.mapbox-vector-tile`
+  * Add `application/vnd.ms-printdevicecapabilities+xml`
+  * Add `application/vnd.ms-windows.devicepairing`
+  * Add `application/vnd.ms-windows.nwprinting.oob`
+  * Add `application/vnd.tml`
+  * Add `audio/evs`
+
+1.20.0 / 2015-11-10
+===================
+
+  * Add `application/cdni`
+  * Add `application/csvm+json`
+  * Add `application/rfc+xml`
+  * Add `application/vnd.3gpp.access-transfer-events+xml`
+  * Add `application/vnd.3gpp.srvcc-ext+xml`
+  * Add `application/vnd.ms-windows.wsd.oob`
+  * Add `application/vnd.oxli.countgraph`
+  * Add `application/vnd.pagerduty+json`
+  * Add `text/x-suse-ymp`
+
 1.19.0 / 2015-09-17
 ===================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/README.md b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/README.md
index 164cca0..7662440 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/README.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/README.md
@@ -52,7 +52,7 @@ Each mime type has the following properties:
     - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml)
     - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types)
 - `.extensions[]` - known extensions associated with this mime type.
-- `.compressible` - whether a file of this type is can be gzipped.
+- `.compressible` - whether a file of this type can be gzipped.
 - `.charset` - the default charset associated with this type, if any.
 
 If unknown, every property could be `undefined`.

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/db.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/db.json b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/db.json
index f5b1a8c..863deb4 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/db.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/db.json
@@ -158,6 +158,9 @@
     "source": "iana",
     "extensions": ["cdmiq"]
   },
+  "application/cdni": {
+    "source": "iana"
+  },
   "application/cea": {
     "source": "iana"
   },
@@ -198,6 +201,10 @@
   "application/cstadata+xml": {
     "source": "iana"
   },
+  "application/csvm+json": {
+    "source": "iana",
+    "compressible": true
+  },
   "application/cu-seeme": {
     "source": "apache",
     "extensions": ["cu"]
@@ -210,7 +217,7 @@
   },
   "application/dash+xml": {
     "source": "iana",
-    "extensions": ["mdp"]
+    "extensions": ["mpd"]
   },
   "application/dashdelta": {
     "source": "iana"
@@ -277,6 +284,21 @@
     "source": "iana",
     "compressible": false
   },
+  "application/emergencycalldata.comment+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.deviceinfo+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.providerinfo+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.serviceinfo+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.subscriberinfo+xml": {
+    "source": "iana"
+  },
   "application/emma+xml": {
     "source": "iana",
     "extensions": ["emma"]
@@ -815,6 +837,17 @@
     "compressible": true,
     "extensions": ["ai","eps","ps"]
   },
+  "application/ppsp-tracker+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/problem+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/problem+xml": {
+    "source": "iana"
+  },
   "application/provenance+xml": {
     "source": "iana"
   },
@@ -882,6 +915,9 @@
     "source": "iana",
     "extensions": ["rld"]
   },
+  "application/rfc+xml": {
+    "source": "iana"
+  },
   "application/riscos": {
     "source": "iana"
   },
@@ -1157,6 +1193,9 @@
   "application/vnd.3gpp-prose-pc3ch+xml": {
     "source": "iana"
   },
+  "application/vnd.3gpp.access-transfer-events+xml": {
+    "source": "iana"
+  },
   "application/vnd.3gpp.bsf+xml": {
     "source": "iana"
   },
@@ -1178,6 +1217,9 @@
   "application/vnd.3gpp.sms": {
     "source": "iana"
   },
+  "application/vnd.3gpp.srvcc-ext+xml": {
+    "source": "iana"
+  },
   "application/vnd.3gpp.srvcc-info+xml": {
     "source": "iana"
   },
@@ -1842,6 +1884,9 @@
   "application/vnd.ffsns": {
     "source": "iana"
   },
+  "application/vnd.filmit.zfc": {
+    "source": "iana"
+  },
   "application/vnd.fints": {
     "source": "iana"
   },
@@ -1974,6 +2019,18 @@
     "source": "iana",
     "extensions": ["gmx"]
   },
+  "application/vnd.google-apps.document": {
+    "compressible": false,
+    "extensions": ["gdoc"]
+  },
+  "application/vnd.google-apps.presentation": {
+    "compressible": false,
+    "extensions": ["gslides"]
+  },
+  "application/vnd.google-apps.spreadsheet": {
+    "compressible": false,
+    "extensions": ["gsheet"]
+  },
   "application/vnd.google-earth.kml+xml": {
     "source": "iana",
     "compressible": true,
@@ -2047,6 +2104,9 @@
   "application/vnd.hcl-bireports": {
     "source": "iana"
   },
+  "application/vnd.hdt": {
+    "source": "iana"
+  },
   "application/vnd.heroku+json": {
     "source": "iana",
     "compressible": true
@@ -2391,6 +2451,9 @@
     "source": "iana",
     "extensions": ["portpkg"]
   },
+  "application/vnd.mapbox-vector-tile": {
+    "source": "iana"
+  },
   "application/vnd.marlin.drm.actiontoken+xml": {
     "source": "iana"
   },
@@ -2632,9 +2695,15 @@
     "source": "iana",
     "extensions": ["potm"]
   },
+  "application/vnd.ms-printdevicecapabilities+xml": {
+    "source": "iana"
+  },
   "application/vnd.ms-printing.printticket+xml": {
     "source": "apache"
   },
+  "application/vnd.ms-printschematicket+xml": {
+    "source": "iana"
+  },
   "application/vnd.ms-project": {
     "source": "iana",
     "extensions": ["mpp","mpt"]
@@ -2642,9 +2711,18 @@
   "application/vnd.ms-tnef": {
     "source": "iana"
   },
+  "application/vnd.ms-windows.devicepairing": {
+    "source": "iana"
+  },
+  "application/vnd.ms-windows.nwprinting.oob": {
+    "source": "iana"
+  },
   "application/vnd.ms-windows.printerpairing": {
     "source": "iana"
   },
+  "application/vnd.ms-windows.wsd.oob": {
+    "source": "iana"
+  },
   "application/vnd.ms-wmdrm.lic-chlg-req": {
     "source": "iana"
   },
@@ -3343,6 +3421,13 @@
   "application/vnd.otps.ct-kip+xml": {
     "source": "iana"
   },
+  "application/vnd.oxli.countgraph": {
+    "source": "iana"
+  },
+  "application/vnd.pagerduty+json": {
+    "source": "iana",
+    "compressible": true
+  },
   "application/vnd.palm": {
     "source": "iana",
     "extensions": ["pdb","pqa","oprc"]
@@ -3796,6 +3881,9 @@
   "application/vnd.tmd.mediaflex.api+xml": {
     "source": "iana"
   },
+  "application/vnd.tml": {
+    "source": "iana"
+  },
   "application/vnd.tmobile-livetv": {
     "source": "iana",
     "extensions": ["tmo"]
@@ -4678,7 +4766,7 @@
   "application/xml": {
     "source": "iana",
     "compressible": true,
-    "extensions": ["xml","xsl","xsd"]
+    "extensions": ["xml","xsl","xsd","rng"]
   },
   "application/xml-dtd": {
     "source": "iana",
@@ -4860,6 +4948,9 @@
   "audio/evrcwb1": {
     "source": "iana"
   },
+  "audio/evs": {
+    "source": "iana"
+  },
   "audio/fwdred": {
     "source": "iana"
   },
@@ -4949,7 +5040,7 @@
   "audio/mp4": {
     "source": "iana",
     "compressible": false,
-    "extensions": ["mp4a","m4a"]
+    "extensions": ["m4a","mp4a"]
   },
   "audio/mp4a-latm": {
     "source": "iana"
@@ -5700,6 +5791,9 @@
   "model/vnd.parasolid.transmit.text": {
     "source": "iana"
   },
+  "model/vnd.rosette.annotated-data-model": {
+    "source": "iana"
+  },
   "model/vnd.valve.source.compiled-map": {
     "source": "iana"
   },
@@ -5929,6 +6023,9 @@
     "source": "iana",
     "extensions": ["sgml","sgm"]
   },
+  "text/slim": {
+    "extensions": ["slim","slm"]
+  },
   "text/stylus": {
     "extensions": ["stylus","styl"]
   },
@@ -6132,6 +6229,10 @@
     "source": "apache",
     "extensions": ["sfv"]
   },
+  "text/x-suse-ymp": {
+    "compressible": true,
+    "extensions": ["ymp"]
+  },
   "text/x-uuencode": {
     "source": "apache",
     "extensions": ["uu"]

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/package.json
index 573cfa5..5c03deb 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/node_modules/mime-db/package.json
@@ -1,7 +1,7 @@
 {
   "name": "mime-db",
   "description": "Media Type Database",
-  "version": "1.19.0",
+  "version": "1.22.0",
   "contributors": [
     {
       "name": "Douglas Christopher Wilson",
@@ -33,15 +33,15 @@
     "url": "git+https://github.com/jshttp/mime-db.git"
   },
   "devDependencies": {
-    "bluebird": "2.10.0",
+    "bluebird": "3.3.1",
     "co": "4.6.0",
     "cogent": "1.0.1",
-    "csv-parse": "1.0.0",
-    "gnode": "0.1.1",
-    "istanbul": "0.3.20",
+    "csv-parse": "1.0.1",
+    "gnode": "0.1.2",
+    "istanbul": "0.4.2",
     "mocha": "1.21.5",
-    "raw-body": "2.1.3",
-    "stream-to-array": "2"
+    "raw-body": "2.1.5",
+    "stream-to-array": "2.2.1"
   },
   "files": [
     "HISTORY.md",
@@ -61,14 +61,39 @@
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
     "update": "npm run fetch && npm run build"
   },
-  "readme": "# mime-db\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Node.js Version][node-image]][node-url]\n[![Build Status][travis-image]][travis-url]\n[![Coverage Status][coveralls-image]][coveralls-url]\n\nThis is a database of all mime types.\nIt consists of a single, public JSON file and does not include any logic,\nallowing it to remain as un-opinionated as possible with an API.\nIt aggregates data from the following sources:\n\n- http://www.iana.org/assignments/media-types/media-types.xhtml\n- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types\n- http://hg.nginx.org/nginx/raw-file/default/conf/mime.types\n\n## Installation\n\n```bash\nnpm install mime-db\n```\n\n### Database Download\n\nIf you're crazy enough to use this in the browser, you can just grab the\nJSON file using [RawGit](https://rawgit.com/). It is recommended to replace\n`master` with [a release tag](https://github.com/jshttp/mime-db/t
 ags) as the\nJSON format may change in the future.\n\n```\nhttps://cdn.rawgit.com/jshttp/mime-db/master/db.json\n```\n\n## Usage\n\n```js\nvar db = require('mime-db');\n\n// grab data on .js files\nvar data = db['application/javascript'];\n```\n\n## Data Structure\n\nThe JSON file is a map lookup for lowercased mime types.\nEach mime type has the following properties:\n\n- `.source` - where the mime type is defined.\n    If not set, it's probably a custom media type.\n    - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types)\n    - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml)\n    - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types)\n- `.extensions[]` - known extensions associated with this mime type.\n- `.compressible` - whether a file of this type is can be gzipped.\n- `.charset` - the default charset associated with this type, if 
 any.\n\nIf unknown, every property could be `undefined`.\n\n## Contributing\n\nTo edit the database, only make PRs against `src/custom.json` or\n`src/custom-suffix.json`.\n\nTo update the build, run `npm run build`.\n\n## Adding Custom Media Types\n\nThe best way to get new media types included in this library is to register\nthem with the IANA. The community registration procedure is outlined in\n[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types\nregistered with the IANA are automatically pulled into this library.\n\n[npm-version-image]: https://img.shields.io/npm/v/mime-db.svg\n[npm-downloads-image]: https://img.shields.io/npm/dm/mime-db.svg\n[npm-url]: https://npmjs.org/package/mime-db\n[travis-image]: https://img.shields.io/travis/jshttp/mime-db/master.svg\n[travis-url]: https://travis-ci.org/jshttp/mime-db\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-db/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master\n
 [node-image]: https://img.shields.io/node/v/mime-db.svg\n[node-url]: http://nodejs.org/download/\n",
-  "readmeFilename": "README.md",
+  "gitHead": "ed88d32405582a5aaff6225d1210005d6be2623e",
   "bugs": {
     "url": "https://github.com/jshttp/mime-db/issues"
   },
   "homepage": "https://github.com/jshttp/mime-db#readme",
-  "_id": "mime-db@1.19.0",
-  "_shasum": "496a18198a7ce8244534e25bb102b74fb420fd56",
-  "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.19.0.tgz",
-  "_from": "mime-db@>=1.19.0 <1.20.0"
+  "_id": "mime-db@1.22.0",
+  "_shasum": "ab23a6372dc9d86d3dc9121bd0ebd38105a1904a",
+  "_from": "mime-db@>=1.22.0 <1.23.0",
+  "_npmVersion": "2.14.7",
+  "_nodeVersion": "4.2.3",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "dist": {
+    "shasum": "ab23a6372dc9d86d3dc9121bd0ebd38105a1904a",
+    "tarball": "http://registry.npmjs.org/mime-db/-/mime-db-1.22.0.tgz"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    }
+  ],
+  "_npmOperationalInternal": {
+    "host": "packages-9-west.internal.npmjs.com",
+    "tmp": "tmp/mime-db-1.22.0.tgz_1455558813990_0.7830642955377698"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.22.0.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/package.json
index d33ee13..3a00a92 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/node_modules/mime-types/package.json
@@ -1,7 +1,7 @@
 {
   "name": "mime-types",
   "description": "The ultimate javascript content-type utility.",
-  "version": "2.1.7",
+  "version": "2.1.10",
   "contributors": [
     {
       "name": "Douglas Christopher Wilson",
@@ -28,11 +28,11 @@
     "url": "git+https://github.com/jshttp/mime-types.git"
   },
   "dependencies": {
-    "mime-db": "~1.19.0"
+    "mime-db": "~1.22.0"
   },
   "devDependencies": {
-    "istanbul": "0.3.20",
-    "mocha": "~1.21.5"
+    "istanbul": "0.4.2",
+    "mocha": "1.21.5"
   },
   "files": [
     "HISTORY.md",
@@ -47,14 +47,43 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/test.js",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot test/test.js"
   },
-  "readme": "# mime-types\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nThe ultimate javascript content-type utility.\n\nSimilar to [node-mime](https://github.com/broofa/node-mime), except:\n\n- __No fallbacks.__ Instead of naively returning the first available type, `mime-types` simply returns `false`,\n  so do `var type = mime.lookup('unrecognized') || 'application/octet-stream'`.\n- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`.\n- Additional mime types are added such as jade and stylus via [mime-db](https://github.com/jshttp/mime-db)\n- No `.define()` functionality\n\nOtherwise, the API is compatible.\n\n## Install\n\n```sh\n$ npm install mime-types\n```\n\n## Adding Types\n\nAll mime types are based on [mime-db](https://github.com/jshtt
 p/mime-db),\nso open a PR there if you'd like to add mime types.\n\n## API\n\n```js\nvar mime = require('mime-types')\n```\n\nAll functions return `false` if input is invalid or not found.\n\n### mime.lookup(path)\n\nLookup the content-type associated with a file.\n\n```js\nmime.lookup('json')             // 'application/json'\nmime.lookup('.md')              // 'text/x-markdown'\nmime.lookup('file.html')        // 'text/html'\nmime.lookup('folder/file.js')   // 'application/javascript'\nmime.lookup('folder/.htaccess') // false\n\nmime.lookup('cats') // false\n```\n\n### mime.contentType(type)\n\nCreate a full content-type header given a content-type or extension.\n\n```js\nmime.contentType('markdown')  // 'text/x-markdown; charset=utf-8'\nmime.contentType('file.json') // 'application/json; charset=utf-8'\n\n// from a full path\nmime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8'\n```\n\n### mime.extension(type)\n\nGet the default extension for 
 a content-type.\n\n```js\nmime.extension('application/octet-stream') // 'bin'\n```\n\n### mime.charset(type)\n\nLookup the implied default charset of a content-type.\n\n```js\nmime.charset('text/x-markdown') // 'UTF-8'\n```\n\n### var type = mime.types[extension]\n\nA map of content-types by extension.\n\n### [extensions...] = mime.extensions[type]\n\nA map of extensions by content-type.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/mime-types.svg\n[npm-url]: https://npmjs.org/package/mime-types\n[node-version-image]: https://img.shields.io/node/v/mime-types.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/mime-types/master.svg\n[travis-url]: https://travis-ci.org/jshttp/mime-types\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-types/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/mime-types\n[downloads-image]: https://img.shields.io/npm/dm/mime-types.svg\n[downloads
 -url]: https://npmjs.org/package/mime-types\n",
-  "readmeFilename": "README.md",
+  "gitHead": "70785d38e9cc251137b00f73ab3d3257c4aea203",
   "bugs": {
     "url": "https://github.com/jshttp/mime-types/issues"
   },
   "homepage": "https://github.com/jshttp/mime-types#readme",
-  "_id": "mime-types@2.1.7",
-  "_shasum": "ff603970e3c731ef6f7f4df3c9a0f463a13c2755",
-  "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.7.tgz",
-  "_from": "mime-types@>=2.1.6 <2.2.0"
+  "_id": "mime-types@2.1.10",
+  "_shasum": "b93c7cb4362e16d41072a7e54538fb4d43070837",
+  "_from": "mime-types@>=2.1.9 <2.2.0",
+  "_npmVersion": "2.14.7",
+  "_nodeVersion": "4.2.3",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "dist": {
+    "shasum": "b93c7cb4362e16d41072a7e54538fb4d43070837",
+    "tarball": "http://registry.npmjs.org/mime-types/-/mime-types-2.1.10.tgz"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "fishrock123",
+      "email": "fishrock123@rocketmail.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    }
+  ],
+  "_npmOperationalInternal": {
+    "host": "packages-9-west.internal.npmjs.com",
+    "tmp": "tmp/mime-types-2.1.10.tgz_1455575237256_0.9163766100537032"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.10.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/type-is/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/package.json
index cad1a53..43e6e01 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/type-is/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/type-is/package.json
@@ -1,7 +1,7 @@
 {
   "name": "type-is",
   "description": "Infer the content-type of a request.",
-  "version": "1.6.9",
+  "version": "1.6.12",
   "contributors": [
     {
       "name": "Douglas Christopher Wilson",
@@ -20,11 +20,11 @@
   },
   "dependencies": {
     "media-typer": "0.3.0",
-    "mime-types": "~2.1.7"
+    "mime-types": "~2.1.10"
   },
   "devDependencies": {
-    "istanbul": "0.3.21",
-    "mocha": "~1.21.5"
+    "istanbul": "0.4.2",
+    "mocha": "1.21.5"
   },
   "engines": {
     "node": ">= 0.6"
@@ -44,14 +44,38 @@
     "type",
     "checking"
   ],
-  "readme": "# type-is\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nInfer the content-type of a request.\n\n### Install\n\n```sh\n$ npm install type-is\n```\n\n## API\n\n```js\nvar http = require('http')\nvar is   = require('type-is')\n\nhttp.createServer(function (req, res) {\n  var istext = is(req, ['text/*'])\n  res.end('you ' + (istext ? 'sent' : 'did not send') + ' me text')\n})\n```\n\n### type = is(request, types)\n\n`request` is the node HTTP request. `types` is an array of types.\n\n```js\n// req.headers.content-type = 'application/json'\n\nis(req, ['json'])             // 'json'\nis(req, ['html', 'json'])     // 'json'\nis(req, ['application/*'])    // 'application/json'\nis(req, ['application/json']) // 'application/json'\n\nis(req, ['html']) // false\n```\n\n### is.ha
 sBody(request)\n\nReturns a Boolean if the given `request` has a body, regardless of the\n`Content-Type` header.\n\n```js\nif (is.hasBody(req)) {\n  // read the body, since there is one\n\n  req.on('data', function (chunk) {\n    // ...\n  })\n}\n```\n\n### type = is.is(mediaType, types)\n\n`mediaType` is the [media type](https://tools.ietf.org/html/rfc6838) string. `types` is an array of types.\n\n```js\nvar mediaType = 'application/json'\n\nis.is(mediaType, ['json'])             // 'json'\nis.is(mediaType, ['html', 'json'])     // 'json'\nis.is(mediaType, ['application/*'])    // 'application/json'\nis.is(mediaType, ['application/json']) // 'application/json'\n\nis.is(mediaType, ['html']) // false\n```\n\n### Each type can be:\n\n- An extension name such as `json`. This name will be returned if matched.\n- A mime type such as `application/json`.\n- A mime type with a wildcard such as `*/*` or `*/json` or `application/*`. The full mime type will be returned if matched.\n- A suffix 
 such as `+json`. This can be combined with a wildcard such as `*/vnd+json` or `application/*+json`. The full mime type will be returned if matched.\n\n`false` will be returned if no type matches or the content type is invalid.\n\n`null` will be returned if the request does not have a body.\n\n## Examples\n\n#### Example body parser\n\n```js\nvar is = require('type-is');\n\nfunction bodyParser(req, res, next) {\n  if (!is.hasBody(req)) {\n    return next()\n  }\n\n  switch (is(req, ['urlencoded', 'json', 'multipart'])) {\n    case 'urlencoded':\n      // parse urlencoded body\n      throw new Error('implement urlencoded body parsing')\n      break\n    case 'json':\n      // parse json body\n      throw new Error('implement json body parsing')\n      break\n    case 'multipart':\n      // parse multipart body\n      throw new Error('implement multipart body parsing')\n      break\n    default:\n      // 415 error code\n      res.statusCode = 415\n      res.end()\n      return\n  }\n}
 \n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/type-is.svg\n[npm-url]: https://npmjs.org/package/type-is\n[node-version-image]: https://img.shields.io/node/v/type-is.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/type-is/master.svg\n[travis-url]: https://travis-ci.org/jshttp/type-is\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/type-is/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/type-is?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/type-is.svg\n[downloads-url]: https://npmjs.org/package/type-is\n",
-  "readmeFilename": "README.md",
+  "gitHead": "7ba49c0ccc8e34f4321768c0b13c2ebcccaae28c",
   "bugs": {
     "url": "https://github.com/jshttp/type-is/issues"
   },
-  "homepage": "https://github.com/jshttp/type-is#readme",
-  "_id": "type-is@1.6.9",
-  "_shasum": "87f3e88b92ff5ac30fbc1acf9a9d00cbc38b3d7a",
-  "_resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.9.tgz",
-  "_from": "type-is@>=1.6.6 <1.7.0"
+  "homepage": "https://github.com/jshttp/type-is",
+  "_id": "type-is@1.6.12",
+  "_shasum": "0352a9dfbfff040fe668cc153cc95829c354173e",
+  "_from": "type-is@>=1.6.6 <1.7.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "0352a9dfbfff040fe668cc153cc95829c354173e",
+    "tarball": "http://registry.npmjs.org/type-is/-/type-is-1.6.12.tgz"
+  },
+  "_npmOperationalInternal": {
+    "host": "packages-9-west.internal.npmjs.com",
+    "tmp": "tmp/type-is-1.6.12.tgz_1456726142464_0.8247741810046136"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.12.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/utils-merge/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/utils-merge/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/utils-merge/package.json
index 891b24b..2f9660e 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/utils-merge/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/utils-merge/package.json
@@ -35,11 +35,26 @@
   "engines": {
     "node": ">= 0.4.0"
   },
-  "readme": "# utils-merge\n\nMerges the properties from a source object into a destination object.\n\n## Install\n\n    $ npm install utils-merge\n\n## Usage\n\n```javascript\nvar a = { foo: 'bar' }\n  , b = { bar: 'baz' };\n\nmerge(a, b);\n// => { foo: 'bar', bar: 'baz' }\n```\n\n## Tests\n\n    $ npm install\n    $ npm test\n\n[![Build Status](https://secure.travis-ci.org/jaredhanson/utils-merge.png)](http://travis-ci.org/jaredhanson/utils-merge)\n\n## Credits\n\n  - [Jared Hanson](http://github.com/jaredhanson)\n\n## License\n\n[The MIT License](http://opensource.org/licenses/MIT)\n\nCopyright (c) 2013 Jared Hanson <[http://jaredhanson.net/](http://jaredhanson.net/)>\n",
-  "readmeFilename": "README.md",
-  "homepage": "https://github.com/jaredhanson/utils-merge#readme",
   "_id": "utils-merge@1.0.0",
+  "dist": {
+    "shasum": "0294fb922bb9375153541c4f7096231f287c8af8",
+    "tarball": "http://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz"
+  },
+  "_from": "utils-merge@1.0.0",
+  "_npmVersion": "1.2.25",
+  "_npmUser": {
+    "name": "jaredhanson",
+    "email": "jaredhanson@gmail.com"
+  },
+  "maintainers": [
+    {
+      "name": "jaredhanson",
+      "email": "jaredhanson@gmail.com"
+    }
+  ],
+  "directories": {},
   "_shasum": "0294fb922bb9375153541c4f7096231f287c8af8",
   "_resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz",
-  "_from": "utils-merge@1.0.0"
+  "readme": "ERROR: No README data found!",
+  "homepage": "https://github.com/jaredhanson/utils-merge#readme"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/vary/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/vary/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/vary/package.json
index 7bbc9e4..8e1bee4 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/vary/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/vary/package.json
@@ -35,14 +35,38 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
   },
-  "readme": "# vary\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nManipulate the HTTP Vary header\n\n## Installation\n\n```sh\n$ npm install vary\n```\n\n## API\n\n```js\nvar vary = require('vary')\n```\n\n### vary(res, field)\n\nAdds the given header `field` to the `Vary` response header of `res`.\nThis can be a string of a single field, a string of a valid `Vary`\nheader, or an array of multiple fields.\n\nThis will append the header if not already listed, otherwise leaves\nit listed in the current location.\n\n```js\n// Append \"Origin\" to the Vary header of the response\nvary(res, 'Origin')\n```\n\n### vary.append(header, field)\n\nAdds the given header `field` to the `Vary` response header string `header`.\nThis can be a string of a single field, a string of a valid `Vary` h
 eader,\nor an array of multiple fields.\n\nThis will append the header if not already listed, otherwise leaves\nit listed in the current location. The new header string is returned.\n\n```js\n// Get header string appending \"Origin\" to \"Accept, User-Agent\"\nvary.append('Accept, User-Agent', 'Origin')\n```\n\n## Examples\n\n### Updating the Vary header when content is based on it\n\n```js\nvar http = require('http')\nvar vary = require('vary')\n\nhttp.createServer(function onRequest(req, res) {\n  // about to user-agent sniff\n  vary(res, 'User-Agent')\n\n  var ua = req.headers['user-agent'] || ''\n  var isMobile = /mobi|android|touch|mini/i.test(ua)\n\n  // serve site, depending on isMobile\n  res.setHeader('Content-Type', 'text/html')\n  res.end('You are (probably) ' + (isMobile ? '' : 'not ') + 'a mobile user')\n})\n```\n\n## Testing\n\n```sh\n$ npm test\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/vary.svg\n[npm-url]: https://npmjs.org/pack
 age/vary\n[node-version-image]: https://img.shields.io/node/v/vary.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/vary/master.svg\n[travis-url]: https://travis-ci.org/jshttp/vary\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/vary/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/vary\n[downloads-image]: https://img.shields.io/npm/dm/vary.svg\n[downloads-url]: https://npmjs.org/package/vary\n",
-  "readmeFilename": "README.md",
+  "gitHead": "650282ff8e614731837040a23e10f51c20728392",
   "bugs": {
     "url": "https://github.com/jshttp/vary/issues"
   },
-  "homepage": "https://github.com/jshttp/vary#readme",
+  "homepage": "https://github.com/jshttp/vary",
   "_id": "vary@1.0.1",
   "_shasum": "99e4981566a286118dfb2b817357df7993376d10",
+  "_from": "vary@>=1.0.1 <1.1.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "fishrock123",
+      "email": "fishrock123@rocketmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "99e4981566a286118dfb2b817357df7993376d10",
+    "tarball": "http://registry.npmjs.org/vary/-/vary-1.0.1.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz",
-  "_from": "vary@>=1.0.1 <1.1.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/package.json b/node_modules/cordova-serve/node_modules/express/package.json
index 6ba58b5..810e90b 100644
--- a/node_modules/cordova-serve/node_modules/express/package.json
+++ b/node_modules/cordova-serve/node_modules/express/package.json
@@ -1,7 +1,7 @@
 {
   "name": "express",
   "description": "Fast, unopinionated, minimalist web framework",
-  "version": "4.13.3",
+  "version": "4.13.4",
   "author": {
     "name": "TJ Holowaychuk",
     "email": "tj@vision-media.ca"
@@ -39,9 +39,8 @@
   "license": "MIT",
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/strongloop/express.git"
+    "url": "git+https://github.com/expressjs/express.git"
   },
-  "homepage": "http://expressjs.com/",
   "keywords": [
     "express",
     "framework",
@@ -56,43 +55,43 @@
   "dependencies": {
     "accepts": "~1.2.12",
     "array-flatten": "1.1.1",
-    "content-disposition": "0.5.0",
+    "content-disposition": "0.5.1",
     "content-type": "~1.0.1",
-    "cookie": "0.1.3",
+    "cookie": "0.1.5",
     "cookie-signature": "1.0.6",
     "debug": "~2.2.0",
-    "depd": "~1.0.1",
-    "escape-html": "1.0.2",
+    "depd": "~1.1.0",
+    "escape-html": "~1.0.3",
     "etag": "~1.7.0",
-    "finalhandler": "0.4.0",
+    "finalhandler": "0.4.1",
     "fresh": "0.3.0",
-    "merge-descriptors": "1.0.0",
-    "methods": "~1.1.1",
+    "merge-descriptors": "1.0.1",
+    "methods": "~1.1.2",
     "on-finished": "~2.3.0",
-    "parseurl": "~1.3.0",
+    "parseurl": "~1.3.1",
     "path-to-regexp": "0.1.7",
-    "proxy-addr": "~1.0.8",
+    "proxy-addr": "~1.0.10",
     "qs": "4.0.0",
-    "range-parser": "~1.0.2",
-    "send": "0.13.0",
-    "serve-static": "~1.10.0",
+    "range-parser": "~1.0.3",
+    "send": "0.13.1",
+    "serve-static": "~1.10.2",
     "type-is": "~1.6.6",
     "utils-merge": "1.0.0",
     "vary": "~1.0.1"
   },
   "devDependencies": {
     "after": "0.8.1",
-    "ejs": "2.3.3",
-    "istanbul": "0.3.17",
+    "ejs": "2.3.4",
+    "istanbul": "0.4.2",
     "marked": "0.3.5",
-    "mocha": "2.2.5",
-    "should": "7.0.2",
-    "supertest": "1.0.1",
-    "body-parser": "~1.13.3",
+    "mocha": "2.3.4",
+    "should": "7.1.1",
+    "supertest": "1.1.0",
+    "body-parser": "~1.14.2",
     "connect-redis": "~2.4.1",
-    "cookie-parser": "~1.3.5",
+    "cookie-parser": "~1.4.1",
     "cookie-session": "~1.2.0",
-    "express-session": "~1.11.3",
+    "express-session": "~1.13.0",
     "jade": "~1.11.0",
     "method-override": "~2.3.5",
     "morgan": "~1.6.1",
@@ -115,13 +114,30 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
     "test-tap": "mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/"
   },
-  "readme": "[![Express Logo](https://i.cloudup.com/zfY6lL7eFa-3000x3000.png)](http://expressjs.com/)\n\n  Fast, unopinionated, minimalist web framework for [node](http://nodejs.org).\n\n  [![NPM Version][npm-image]][npm-url]\n  [![NPM Downloads][downloads-image]][downloads-url]\n  [![Linux Build][travis-image]][travis-url]\n  [![Windows Build][appveyor-image]][appveyor-url]\n  [![Test Coverage][coveralls-image]][coveralls-url]\n\n```js\nvar express = require('express')\nvar app = express()\n\napp.get('/', function (req, res) {\n  res.send('Hello World')\n})\n\napp.listen(3000)\n```\n\n## Installation\n\n```bash\n$ npm install express\n```\n\n## Features\n\n  * Robust routing\n  * Focus on high performance\n  * Super-high test coverage\n  * HTTP helpers (redirection, caching, etc)\n  * View system supporting 14+ template engines\n  * Content negotiation\n  * Executable for generating applications quickly\n\n## Docs & Community\n\n  * [Website and Documentation](http://expressjs.com/
 ) - [[website repo](https://github.com/strongloop/expressjs.com)]\n  * [#express](https://webchat.freenode.net/?channels=express) on freenode IRC\n  * [Github Organization](https://github.com/expressjs) for Official Middleware & Modules\n  * Visit the [Wiki](https://github.com/strongloop/express/wiki)\n  * [Google Group](https://groups.google.com/group/express-js) for discussion\n  * [Русскоязычная документация](http://jsman.ru/express/)\n  * [한국어 문서](http://expressjs.kr) - [[website repo](https://github.com/Hanul/expressjs.kr)]\n\n**PROTIP** Be sure to read [Migrating from 3.x to 4.x](https://github.com/strongloop/express/wiki/Migrating-from-3.x-to-4.x) as well as [New features in 4.x](https://github.com/strongloop/express/wiki/New-features-in-4.x).\n\n## Quick Start\n\n  The quickest way to get started with express is to utilize the executable [`express(1)`](https://github.com/expressjs/generator) to generate an application as shown below:\n\n  I
 nstall the executable. The executable's major version will match Express's:\n\n```bash\n$ npm install -g express-generator@4\n```\n\n  Create the app:\n\n```bash\n$ express /tmp/foo && cd /tmp/foo\n```\n\n  Install dependencies:\n\n```bash\n$ npm install\n```\n\n  Start the server:\n\n```bash\n$ npm start\n```\n\n## Philosophy\n\n  The Express philosophy is to provide small, robust tooling for HTTP servers, making\n  it a great solution for single page applications, web sites, hybrids, or public\n  HTTP APIs.\n\n  Express does not force you to use any specific ORM or template engine. With support for over\n  14 template engines via [Consolidate.js](https://github.com/tj/consolidate.js),\n  you can quickly craft your perfect framework.\n\n## Examples\n\n  To view the examples, clone the Express repo and install the dependencies:\n\n```bash\n$ git clone git://github.com/strongloop/express.git --depth 1\n$ cd express\n$ npm install\n```\n\n  Then run whichever example you want:\n\n```b
 ash\n$ node examples/content-negotiation\n```\n\n## Tests\n\n  To run the test suite, first install the dependencies, then run `npm test`:\n\n```bash\n$ npm install\n$ npm test\n```\n\n## People\n\nThe original author of Express is [TJ Holowaychuk](https://github.com/tj) [![TJ's Gratipay][gratipay-image-visionmedia]][gratipay-url-visionmedia]\n\nThe current lead maintainer is [Douglas Christopher Wilson](https://github.com/dougwilson) [![Doug's Gratipay][gratipay-image-dougwilson]][gratipay-url-dougwilson]\n\n[List of all contributors](https://github.com/strongloop/express/graphs/contributors)\n\n## License\n\n  [MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/express.svg\n[npm-url]: https://npmjs.org/package/express\n[downloads-image]: https://img.shields.io/npm/dm/express.svg\n[downloads-url]: https://npmjs.org/package/express\n[travis-image]: https://img.shields.io/travis/strongloop/express/master.svg?label=linux\n[travis-url]: https://travis-ci.org/strongloop/express\
 n[appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/express/master.svg?label=windows\n[appveyor-url]: https://ci.appveyor.com/project/dougwilson/express\n[coveralls-image]: https://img.shields.io/coveralls/strongloop/express/master.svg\n[coveralls-url]: https://coveralls.io/r/strongloop/express?branch=master\n[gratipay-image-visionmedia]: https://img.shields.io/gratipay/visionmedia.svg\n[gratipay-url-visionmedia]: https://gratipay.com/visionmedia/\n[gratipay-image-dougwilson]: https://img.shields.io/gratipay/dougwilson.svg\n[gratipay-url-dougwilson]: https://gratipay.com/dougwilson/\n",
-  "readmeFilename": "Readme.md",
+  "gitHead": "193bed2649c55c1fd362e46cd4702c773f3e7434",
   "bugs": {
-    "url": "https://github.com/strongloop/express/issues"
+    "url": "https://github.com/expressjs/express/issues"
   },
-  "_id": "express@4.13.3",
-  "_shasum": "ddb2f1fb4502bf33598d2b032b037960ca6c80a3",
-  "_resolved": "https://registry.npmjs.org/express/-/express-4.13.3.tgz",
-  "_from": "express@>=4.13.3 <5.0.0"
+  "homepage": "https://github.com/expressjs/express",
+  "_id": "express@4.13.4",
+  "_shasum": "3c0b76f3c77590c8345739061ec0bd3ba067ec24",
+  "_from": "express@>=4.13.3 <5.0.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "dist": {
+    "shasum": "3c0b76f3c77590c8345739061ec0bd3ba067ec24",
+    "tarball": "http://registry.npmjs.org/express/-/express-4.13.4.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/express/-/express-4.13.4.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/package.json b/node_modules/cordova-serve/package.json
index 2408589..2a74ce5 100644
--- a/node_modules/cordova-serve/package.json
+++ b/node_modules/cordova-serve/package.json
@@ -36,10 +36,30 @@
     "node": ">= 0.12.0",
     "npm": ">= 2.5.1"
   },
-  "readme": "<!--\n#\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership.  The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License.  You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing,\n# software distributed under the License is distributed on an\n# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n#  KIND, either express or implied.  See the License for the\n# specific language governing permissions and limitations\n# under the License.\n#\n-->\n\n# cordova-serve\nThis module can be used to serve up a Cordova application in the browser. It has no command-line, but rather is intended\nto be called using the
  following API:\n\n``` js\nvar serve = require('cordova-serve');\nserve.launchServer(opts);\nserve.servePlatform(platform, opts);\nserve.launchBrowser(ops);\n```\n\n## launchServer()\n\n``` js\nlaunchServer(opts);\n```\n\nLaunches a server with the specified options. Parameters:\n\n* **opts**: Options, as described below.\n\n## servePlatform()\n\n``` js\nservePlatform(platform, opts);\n```\n\nLaunches a server that serves up any Cordova platform (e.g. `browser`, `android` etc) from the current project.\nParameters:\n\n* **opts**: Options, as described below. Note that for `servePlatform()`, the `root` value should be a Cordova project's\n  root folder, or any folder within it - `servePlatform()` will replace it with the platform's `www_dir` folder. If this\n  value is not specified, the *cwd* will be used.\n\n## launchBrowser()\n\n``` js\nlaunchBrowser(opts);\n```\n\nLaunches a browser window pointing to the specified URL. The single parameter is an options object that supports the\
 nfollowing values (both optional):\n\n* **url**: The URL to open in the browser.\n* **target**: The name of the browser to launch. Can be any of the following: `chrome`, `chromium`, `firefox`, `ie`,\n  `opera`, `safari`. If no browser is specified, \n\n## The *opts* Options Object\nThe opts object passed to `launchServer()` and `servePlatform()` supports the following values (all optional):\n\n* **root**: The file path on the local file system that is used as the root for the server, for default mapping of URL\n  path to local file system path.   \n* **port**: The port for the server. Note that if this port is already in use, it will be incremented until a free port\n  is found.\n* **router**: An `ExpressJS` router. If provided, this will be attached *before* default static handling.\n* **noLogOutput**: If `true`, turns off all log output. \n* **noServerInfo**: If `true`, cordova-serve won't output `Static file server running on...` message.\n* **events**: An `EventEmitter` to use f
 or logging. If provided, logging will be output using `events.emit('log', msg)`.\n  If not provided, `console.log()` will be used. Note that nothing will be output in either case if `noLogOutput` is `true`.\n",
-  "readmeFilename": "README.md",
   "_id": "cordova-serve@1.0.0",
   "_shasum": "7fa1c40183d2b82adb792f9cb9e0d554a23eed85",
   "_resolved": "https://registry.npmjs.org/cordova-serve/-/cordova-serve-1.0.0.tgz",
-  "_from": "cordova-serve@>=1.0.0 <2.0.0"
+  "_from": "cordova-serve@>=1.0.0 <2.0.0",
+  "_npmVersion": "2.10.1",
+  "_nodeVersion": "0.12.4",
+  "_npmUser": {
+    "name": "timbarham",
+    "email": "npmjs@barhams.info"
+  },
+  "dist": {
+    "shasum": "7fa1c40183d2b82adb792f9cb9e0d554a23eed85",
+    "tarball": "http://registry.npmjs.org/cordova-serve/-/cordova-serve-1.0.0.tgz"
+  },
+  "maintainers": [
+    {
+      "name": "timbarham",
+      "email": "npmjs@barhams.info"
+    },
+    {
+      "name": "stevegill",
+      "email": "stevengill97@gmail.com"
+    }
+  ],
+  "directories": {},
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/nopt/.travis.yml
----------------------------------------------------------------------
diff --git a/node_modules/nopt/.travis.yml b/node_modules/nopt/.travis.yml
new file mode 100644
index 0000000..99f2bbf
--- /dev/null
+++ b/node_modules/nopt/.travis.yml
@@ -0,0 +1,9 @@
+language: node_js
+language: node_js
+node_js:
+  - '0.8'
+  - '0.10'
+  - '0.12'
+  - 'iojs'
+before_install:
+  - npm install -g npm@latest

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/nopt/LICENSE
----------------------------------------------------------------------
diff --git a/node_modules/nopt/LICENSE b/node_modules/nopt/LICENSE
index 05a4010..19129e3 100644
--- a/node_modules/nopt/LICENSE
+++ b/node_modules/nopt/LICENSE
@@ -1,23 +1,15 @@
-Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
-All rights reserved.
+The ISC 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:
+Copyright (c) Isaac Z. Schlueter and Contributors
 
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
 
-THE SOFTWARE IS PROVIDED "AS IS", 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.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/nopt/README.md
----------------------------------------------------------------------
diff --git a/node_modules/nopt/README.md b/node_modules/nopt/README.md
index 5aba088..f21a4b3 100644
--- a/node_modules/nopt/README.md
+++ b/node_modules/nopt/README.md
@@ -5,9 +5,10 @@ The Wrong Way is to sit down and write an option parser.  We've all done
 that.
 
 The Right Way is to write some complex configurable program with so many
-options that you go half-insane just trying to manage them all, and put
-it off with duct-tape solutions until you see exactly to the core of the
-problem, and finally snap and write an awesome option parser.
+options that you hit the limit of your frustration just trying to
+manage them all, and defer it with duct-tape solutions until you see
+exactly to the core of the problem, and finally snap and write an
+awesome option parser.
 
 If you want to write an option parser, don't write an option parser.
 Write a package manager, or a source control system, or a service
@@ -28,7 +29,8 @@ nice option parser.
                     , "bloo" : [ "big", "medium", "small" ]
                     , "flag" : Boolean
                     , "pick" : Boolean
-                    , "many" : [String, Array]
+                    , "many1" : [String, Array]
+                    , "many2" : [path]
                     }
       , shortHands = { "foofoo" : ["--foo", "Mr. Foo"]
                      , "b7" : ["--bar", "7"]
@@ -77,11 +79,11 @@ $ node my-program.js --baz b/a/z # known paths are resolved.
 # values, and will always be an array.  The other types provided
 # specify what types are allowed in the list.
 
-$ node my-program.js --many 1 --many null --many foo
-{ many: ["1", "null", "foo"] }
+$ node my-program.js --many1 5 --many1 null --many1 foo
+{ many1: ["5", "null", "foo"] }
 
-$ node my-program.js --many foo
-{ many: ["foo"] }
+$ node my-program.js --many2 foo --many2 bar
+{ many2: ["/path/to/foo", "path/to/bar"] }
 ```
 
 Read the tests at the bottom of `lib/nopt.js` for more examples of
@@ -137,8 +139,8 @@ config object and remove its invalid properties.
 
 ## Error Handling
 
-By default, nopt outputs a warning to standard error when invalid
-options are found.  You can change this behavior by assigning a method
+By default, nopt outputs a warning to standard error when invalid values for
+known options are found.  You can change this behavior by assigning a method
 to `nopt.invalidHandler`.  This method will be called with
 the offending `nopt.invalidHandler(key, val, types)`.
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/nopt/lib/nopt.js
----------------------------------------------------------------------
diff --git a/node_modules/nopt/lib/nopt.js b/node_modules/nopt/lib/nopt.js
index 5309a00..97707e7 100644
--- a/node_modules/nopt/lib/nopt.js
+++ b/node_modules/nopt/lib/nopt.js
@@ -207,7 +207,8 @@ function validate (data, k, val, type, typeDefs) {
   for (var i = 0, l = types.length; i < l; i ++) {
     debug("test type %j %j %j", k, val, types[i])
     var t = typeDefs[types[i]]
-    if (t && type === t.type) {
+    if (t &&
+      ((type && type.name && t.type && t.type.name) ? (type.name === t.type.name) : (type === t.type))) {
       var d = {}
       ok = false !== t.validate(d, k, val)
       val = d[k]

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/nopt/node_modules/abbrev/.npmignore
----------------------------------------------------------------------
diff --git a/node_modules/nopt/node_modules/abbrev/.npmignore b/node_modules/nopt/node_modules/abbrev/.npmignore
new file mode 100644
index 0000000..9d6cd2f
--- /dev/null
+++ b/node_modules/nopt/node_modules/abbrev/.npmignore
@@ -0,0 +1,4 @@
+.nyc_output
+nyc_output
+node_modules
+coverage

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/nopt/node_modules/abbrev/.travis.yml
----------------------------------------------------------------------
diff --git a/node_modules/nopt/node_modules/abbrev/.travis.yml b/node_modules/nopt/node_modules/abbrev/.travis.yml
new file mode 100644
index 0000000..991d04b
--- /dev/null
+++ b/node_modules/nopt/node_modules/abbrev/.travis.yml
@@ -0,0 +1,5 @@
+language: node_js
+node_js:
+  - '0.10'
+  - '0.12'
+  - 'iojs'

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/nopt/node_modules/abbrev/LICENSE
----------------------------------------------------------------------
diff --git a/node_modules/nopt/node_modules/abbrev/LICENSE b/node_modules/nopt/node_modules/abbrev/LICENSE
index 05a4010..19129e3 100644
--- a/node_modules/nopt/node_modules/abbrev/LICENSE
+++ b/node_modules/nopt/node_modules/abbrev/LICENSE
@@ -1,23 +1,15 @@
-Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
-All rights reserved.
+The ISC 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:
+Copyright (c) Isaac Z. Schlueter and Contributors
 
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
 
-THE SOFTWARE IS PROVIDED "AS IS", 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.
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/nopt/node_modules/abbrev/package.json
----------------------------------------------------------------------
diff --git a/node_modules/nopt/node_modules/abbrev/package.json b/node_modules/nopt/node_modules/abbrev/package.json
index a6719dd..c13eef4 100644
--- a/node_modules/nopt/node_modules/abbrev/package.json
+++ b/node_modules/nopt/node_modules/abbrev/package.json
@@ -1,6 +1,6 @@
 {
   "name": "abbrev",
-  "version": "1.0.5",
+  "version": "1.0.7",
   "description": "Like ruby's abbrev module, but in js",
   "author": {
     "name": "Isaac Z. Schlueter",
@@ -8,24 +8,41 @@
   },
   "main": "abbrev.js",
   "scripts": {
-    "test": "node test.js"
+    "test": "tap test.js --cov"
   },
   "repository": {
     "type": "git",
-    "url": "http://github.com/isaacs/abbrev-js"
+    "url": "git+ssh://git@github.com/isaacs/abbrev-js.git"
   },
-  "license": {
-    "type": "MIT",
-    "url": "https://github.com/isaacs/abbrev-js/raw/master/LICENSE"
+  "license": "ISC",
+  "devDependencies": {
+    "tap": "^1.2.0"
   },
-  "readme": "# abbrev-js\n\nJust like [ruby's Abbrev](http://apidock.com/ruby/Abbrev).\n\nUsage:\n\n    var abbrev = require(\"abbrev\");\n    abbrev(\"foo\", \"fool\", \"folding\", \"flop\");\n    \n    // returns:\n    { fl: 'flop'\n    , flo: 'flop'\n    , flop: 'flop'\n    , fol: 'folding'\n    , fold: 'folding'\n    , foldi: 'folding'\n    , foldin: 'folding'\n    , folding: 'folding'\n    , foo: 'foo'\n    , fool: 'fool'\n    }\n\nThis is handy for command-line scripts, or other cases where you want to be able to accept shorthands.\n",
-  "readmeFilename": "README.md",
+  "gitHead": "821d09ce7da33627f91bbd8ed631497ed6f760c2",
   "bugs": {
     "url": "https://github.com/isaacs/abbrev-js/issues"
   },
-  "homepage": "https://github.com/isaacs/abbrev-js",
-  "_id": "abbrev@1.0.5",
-  "_shasum": "5d8257bd9ebe435e698b2fa431afde4fe7b10b03",
-  "_resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz",
-  "_from": "abbrev@>=1.0.0 <2.0.0"
+  "homepage": "https://github.com/isaacs/abbrev-js#readme",
+  "_id": "abbrev@1.0.7",
+  "_shasum": "5b6035b2ee9d4fb5cf859f08a9be81b208491843",
+  "_from": "abbrev@>=1.0.0 <2.0.0",
+  "_npmVersion": "2.10.1",
+  "_nodeVersion": "2.0.1",
+  "_npmUser": {
+    "name": "isaacs",
+    "email": "isaacs@npmjs.com"
+  },
+  "dist": {
+    "shasum": "5b6035b2ee9d4fb5cf859f08a9be81b208491843",
+    "tarball": "http://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz"
+  },
+  "maintainers": [
+    {
+      "name": "isaacs",
+      "email": "i@izs.me"
+    }
+  ],
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/nopt/node_modules/abbrev/test.js
----------------------------------------------------------------------
diff --git a/node_modules/nopt/node_modules/abbrev/test.js b/node_modules/nopt/node_modules/abbrev/test.js
index d5a7303..eb30e42 100644
--- a/node_modules/nopt/node_modules/abbrev/test.js
+++ b/node_modules/nopt/node_modules/abbrev/test.js
@@ -2,7 +2,7 @@ var abbrev = require('./abbrev.js')
 var assert = require("assert")
 var util = require("util")
 
-console.log("TAP Version 13")
+console.log("TAP version 13")
 var count = 0
 
 function test (list, expect) {
@@ -44,4 +44,4 @@ test(["a", "ab", "abc", "abcd", "abcde", "acde"],
 , acde: 'acde'
 })
 
-console.log("0..%d", count)
+console.log("1..%d", count)

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/nopt/package.json
----------------------------------------------------------------------
diff --git a/node_modules/nopt/package.json b/node_modules/nopt/package.json
index 4b1f700..b5d57a0 100644
--- a/node_modules/nopt/package.json
+++ b/node_modules/nopt/package.json
@@ -1,6 +1,6 @@
 {
   "name": "nopt",
-  "version": "3.0.1",
+  "version": "3.0.6",
   "description": "Option parsing for Node, supporting types, shorthands, etc. Used by npm.",
   "author": {
     "name": "Isaac Z. Schlueter",
@@ -13,45 +13,51 @@
   },
   "repository": {
     "type": "git",
-    "url": "http://github.com/isaacs/nopt"
+    "url": "git+https://github.com/npm/nopt.git"
   },
   "bin": {
     "nopt": "./bin/nopt.js"
   },
-  "license": {
-    "type": "MIT",
-    "url": "https://github.com/isaacs/nopt/raw/master/LICENSE"
-  },
+  "license": "ISC",
   "dependencies": {
     "abbrev": "1"
   },
   "devDependencies": {
-    "tap": "~0.4.8"
+    "tap": "^1.2.0"
   },
-  "gitHead": "4296f7aba7847c198fea2da594f9e1bec02817ec",
+  "gitHead": "10a750c9bb99c1950160353459e733ac2aa18cb6",
   "bugs": {
-    "url": "https://github.com/isaacs/nopt/issues"
-  },
-  "homepage": "https://github.com/isaacs/nopt",
-  "_id": "nopt@3.0.1",
-  "_shasum": "bce5c42446a3291f47622a370abbf158fbbacbfd",
-  "_from": "nopt@>=3.0.0 <4.0.0",
-  "_npmVersion": "1.4.18",
+    "url": "https://github.com/npm/nopt/issues"
+  },
+  "homepage": "https://github.com/npm/nopt#readme",
+  "_id": "nopt@3.0.6",
+  "_shasum": "c6465dbf08abcd4db359317f79ac68a646b28ff9",
+  "_from": "nopt@>=3.0.6 <4.0.0",
+  "_npmVersion": "2.14.10",
+  "_nodeVersion": "4.2.1",
   "_npmUser": {
-    "name": "isaacs",
-    "email": "i@izs.me"
+    "name": "othiym23",
+    "email": "ogd@aoaioxxysz.net"
+  },
+  "dist": {
+    "shasum": "c6465dbf08abcd4db359317f79ac68a646b28ff9",
+    "tarball": "http://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz"
   },
   "maintainers": [
     {
       "name": "isaacs",
       "email": "i@izs.me"
+    },
+    {
+      "name": "othiym23",
+      "email": "ogd@aoaioxxysz.net"
+    },
+    {
+      "name": "zkat",
+      "email": "kat@sykosomatic.org"
     }
   ],
-  "dist": {
-    "shasum": "bce5c42446a3291f47622a370abbf158fbbacbfd",
-    "tarball": "http://registry.npmjs.org/nopt/-/nopt-3.0.1.tgz"
-  },
   "directories": {},
-  "_resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.1.tgz",
+  "_resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
   "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/nopt/test/basic.js
----------------------------------------------------------------------
diff --git a/node_modules/nopt/test/basic.js b/node_modules/nopt/test/basic.js
index 2f9088c..d399de9 100644
--- a/node_modules/nopt/test/basic.js
+++ b/node_modules/nopt/test/basic.js
@@ -31,6 +31,28 @@ test("Unknown options are not parsed as numbers", function (t) {
     t.end()
 });
 
+// https://github.com/npm/nopt/issues/48
+test("Check types based on name of type", function (t) {
+  var parsed = nopt({"parse-me": {name: "Number"}}, null, ['--parse-me=1.20'], 0)
+  t.equal(parsed['parse-me'], 1.2)
+  t.end()
+})
+
+
+test("Missing types are not parsed", function (t) {
+  var parsed = nopt({"parse-me": {}}, null, ['--parse-me=1.20'], 0)
+  //should only contain argv
+  t.equal(Object.keys(parsed).length, 1)
+  t.end()
+})
+
+test("Types passed without a name are not parsed", function (t) {
+  var parsed = nopt({"parse-me": {}}, {}, ['--parse-me=1.20'], 0)
+  //should only contain argv
+  t.equal(Object.keys(parsed).length, 1)
+  t.end()
+})
+
 test("other tests", function (t) {
 
   var util = require("util")

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/q/package.json
----------------------------------------------------------------------
diff --git a/node_modules/q/package.json b/node_modules/q/package.json
index d9cf7c1..6dd257b 100644
--- a/node_modules/q/package.json
+++ b/node_modules/q/package.json
@@ -94,7 +94,7 @@
   "gitHead": "d373079d3620152e3d60e82f27265a09ee0e81bd",
   "_id": "q@1.4.1",
   "_shasum": "55705bcd93c5f3673530c2c2cbc0c2b3addc286e",
-  "_from": "q@",
+  "_from": "q@>=1.4.1 <2.0.0",
   "_npmVersion": "2.8.3",
   "_nodeVersion": "1.8.1",
   "_npmUser": {

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/.documentup.json
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/.documentup.json b/node_modules/shelljs/.documentup.json
deleted file mode 100644
index 57fe301..0000000
--- a/node_modules/shelljs/.documentup.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "name": "ShellJS",
-  "twitter": [
-    "r2r"
-  ]
-}

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/.idea/.name
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/.idea/.name b/node_modules/shelljs/.idea/.name
new file mode 100644
index 0000000..68840c9
--- /dev/null
+++ b/node_modules/shelljs/.idea/.name
@@ -0,0 +1 @@
+shelljs
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/.idea/encodings.xml
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/.idea/encodings.xml b/node_modules/shelljs/.idea/encodings.xml
new file mode 100644
index 0000000..97626ba
--- /dev/null
+++ b/node_modules/shelljs/.idea/encodings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding">
+    <file url="PROJECT" charset="UTF-8" />
+  </component>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/.idea/inspectionProfiles/Project_Default.xml
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/.idea/inspectionProfiles/Project_Default.xml b/node_modules/shelljs/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..e6d8387
--- /dev/null
+++ b/node_modules/shelljs/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,7 @@
+<component name="InspectionProjectProfileManager">
+  <profile version="1.0">
+    <option name="myName" value="Project Default" />
+    <inspection_tool class="JSLastCommaInArrayLiteral" enabled="false" level="WARNING" enabled_by_default="false" />
+    <inspection_tool class="JSLastCommaInObjectLiteral" enabled="false" level="WARNING" enabled_by_default="false" />
+  </profile>
+</component>
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[14/14] cordova-browser git commit: CB-10788 Update JS snapshot to version 4.2.0-dev (via coho)

Posted by an...@apache.org.
CB-10788 Update JS snapshot to version 4.2.0-dev (via coho)


Project: http://git-wip-us.apache.org/repos/asf/cordova-browser/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-browser/commit/da6c350e
Tree: http://git-wip-us.apache.org/repos/asf/cordova-browser/tree/da6c350e
Diff: http://git-wip-us.apache.org/repos/asf/cordova-browser/diff/da6c350e

Branch: refs/heads/master
Commit: da6c350e91cb959937f8f45592f05387a2c98321
Parents: 663f862
Author: Vladimir Kotikov <ko...@gmail.com>
Authored: Fri Mar 4 13:55:19 2016 +0300
Committer: Vladimir Kotikov <ko...@gmail.com>
Committed: Fri Mar 4 15:33:21 2016 +0300

----------------------------------------------------------------------
 cordova-lib/cordova.js | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/da6c350e/cordova-lib/cordova.js
----------------------------------------------------------------------
diff --git a/cordova-lib/cordova.js b/cordova-lib/cordova.js
index 9731dbf..d2edd37 100644
--- a/cordova-lib/cordova.js
+++ b/cordova-lib/cordova.js
@@ -1,5 +1,5 @@
 // Platform: browser
-// 1b111058631e118dc37da473e30b60214c211d76
+// c517ca811b4948b630e0b74dbae6c9637939da24
 /*
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
@@ -19,7 +19,7 @@
  under the License.
 */
 ;(function() {
-var PLATFORM_VERSION_BUILD_LABEL = '4.1.0-dev';
+var PLATFORM_VERSION_BUILD_LABEL = '4.2.0-dev';
 // file: src/scripts/require.js
 
 /*jshint -W079 */
@@ -817,7 +817,7 @@ module.exports = channel;
 
 });
 
-// file: f:/coho/cordova-browser/cordova-js-src/confighelper.js
+// file: e:/cordova/cordova-browser/cordova-js-src/confighelper.js
 define("cordova/confighelper", function(require, exports, module) {
 
 var config;
@@ -897,7 +897,7 @@ exports.readConfig = readConfig;
 
 });
 
-// file: f:/coho/cordova-browser/cordova-js-src/exec.js
+// file: e:/cordova/cordova-browser/cordova-js-src/exec.js
 define("cordova/exec", function(require, exports, module) {
 
 /*jslint sloppy:true, plusplus:true*/
@@ -1477,7 +1477,7 @@ exports.reset();
 
 });
 
-// file: f:/coho/cordova-browser/cordova-js-src/platform.js
+// file: e:/cordova/cordova-browser/cordova-js-src/platform.js
 define("cordova/platform", function(require, exports, module) {
 
 module.exports = {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[02/14] cordova-browser git commit: CB-10788 Updated checked in node_modules

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/exec.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/exec.js b/node_modules/shelljs/src/exec.js
new file mode 100644
index 0000000..4174adb
--- /dev/null
+++ b/node_modules/shelljs/src/exec.js
@@ -0,0 +1,249 @@
+var common = require('./common');
+var _tempDir = require('./tempdir');
+var _pwd = require('./pwd');
+var path = require('path');
+var fs = require('fs');
+var child = require('child_process');
+
+var DEFAULT_MAXBUFFER_SIZE = 20*1024*1024;
+
+// Hack to run child_process.exec() synchronously (sync avoids callback hell)
+// Uses a custom wait loop that checks for a flag file, created when the child process is done.
+// (Can't do a wait loop that checks for internal Node variables/messages as
+// Node is single-threaded; callbacks and other internal state changes are done in the
+// event loop).
+function execSync(cmd, opts) {
+  var tempDir = _tempDir();
+  var stdoutFile = path.resolve(tempDir+'/'+common.randomFileName()),
+      stderrFile = path.resolve(tempDir+'/'+common.randomFileName()),
+      codeFile = path.resolve(tempDir+'/'+common.randomFileName()),
+      scriptFile = path.resolve(tempDir+'/'+common.randomFileName()),
+      sleepFile = path.resolve(tempDir+'/'+common.randomFileName());
+
+  opts = common.extend({
+    silent: common.config.silent,
+    cwd: _pwd(),
+    env: process.env,
+    maxBuffer: DEFAULT_MAXBUFFER_SIZE
+  }, opts);
+
+  var previousStdoutContent = '',
+      previousStderrContent = '';
+  // Echoes stdout and stderr changes from running process, if not silent
+  function updateStream(streamFile) {
+    if (opts.silent || !fs.existsSync(streamFile))
+      return;
+
+    var previousStreamContent,
+        proc_stream;
+    if (streamFile === stdoutFile) {
+      previousStreamContent = previousStdoutContent;
+      proc_stream = process.stdout;
+    } else { // assume stderr
+      previousStreamContent = previousStderrContent;
+      proc_stream = process.stderr;
+    }
+
+    var streamContent = fs.readFileSync(streamFile, 'utf8');
+    // No changes since last time?
+    if (streamContent.length <= previousStreamContent.length)
+      return;
+
+    proc_stream.write(streamContent.substr(previousStreamContent.length));
+    previousStreamContent = streamContent;
+  }
+
+  function escape(str) {
+    return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
+  }
+
+  if (fs.existsSync(scriptFile)) common.unlinkSync(scriptFile);
+  if (fs.existsSync(stdoutFile)) common.unlinkSync(stdoutFile);
+  if (fs.existsSync(stderrFile)) common.unlinkSync(stderrFile);
+  if (fs.existsSync(codeFile)) common.unlinkSync(codeFile);
+
+  var execCommand = '"'+process.execPath+'" '+scriptFile;
+  var script;
+
+  if (typeof child.execSync === 'function') {
+    script = [
+      "var child = require('child_process')",
+      "  , fs = require('fs');",
+      "var childProcess = child.exec('"+escape(cmd)+"', {env: process.env, maxBuffer: "+opts.maxBuffer+"}, function(err) {",
+      "  fs.writeFileSync('"+escape(codeFile)+"', err ? err.code.toString() : '0');",
+      "});",
+      "var stdoutStream = fs.createWriteStream('"+escape(stdoutFile)+"');",
+      "var stderrStream = fs.createWriteStream('"+escape(stderrFile)+"');",
+      "childProcess.stdout.pipe(stdoutStream, {end: false});",
+      "childProcess.stderr.pipe(stderrStream, {end: false});",
+      "childProcess.stdout.pipe(process.stdout);",
+      "childProcess.stderr.pipe(process.stderr);",
+      "var stdoutEnded = false, stderrEnded = false;",
+      "function tryClosingStdout(){ if(stdoutEnded){ stdoutStream.end(); } }",
+      "function tryClosingStderr(){ if(stderrEnded){ stderrStream.end(); } }",
+      "childProcess.stdout.on('end', function(){ stdoutEnded = true; tryClosingStdout(); });",
+      "childProcess.stderr.on('end', function(){ stderrEnded = true; tryClosingStderr(); });"
+    ].join('\n');
+
+    fs.writeFileSync(scriptFile, script);
+
+    if (opts.silent) {
+      opts.stdio = 'ignore';
+    } else {
+      opts.stdio = [0, 1, 2];
+    }
+
+    // Welcome to the future
+    child.execSync(execCommand, opts);
+  } else {
+    cmd += ' > '+stdoutFile+' 2> '+stderrFile; // works on both win/unix
+
+    script = [
+      "var child = require('child_process')",
+      "  , fs = require('fs');",
+      "var childProcess = child.exec('"+escape(cmd)+"', {env: process.env, maxBuffer: "+opts.maxBuffer+"}, function(err) {",
+      "  fs.writeFileSync('"+escape(codeFile)+"', err ? err.code.toString() : '0');",
+      "});"
+    ].join('\n');
+
+    fs.writeFileSync(scriptFile, script);
+
+    child.exec(execCommand, opts);
+
+    // The wait loop
+    // sleepFile is used as a dummy I/O op to mitigate unnecessary CPU usage
+    // (tried many I/O sync ops, writeFileSync() seems to be only one that is effective in reducing
+    // CPU usage, though apparently not so much on Windows)
+    while (!fs.existsSync(codeFile)) { updateStream(stdoutFile); fs.writeFileSync(sleepFile, 'a'); }
+    while (!fs.existsSync(stdoutFile)) { updateStream(stdoutFile); fs.writeFileSync(sleepFile, 'a'); }
+    while (!fs.existsSync(stderrFile)) { updateStream(stderrFile); fs.writeFileSync(sleepFile, 'a'); }
+  }
+
+  // At this point codeFile exists, but it's not necessarily flushed yet.
+  // Keep reading it until it is.
+  var code = parseInt('', 10);
+  while (isNaN(code)) {
+    code = parseInt(fs.readFileSync(codeFile, 'utf8'), 10);
+  }
+
+  var stdout = fs.readFileSync(stdoutFile, 'utf8');
+  var stderr = fs.readFileSync(stderrFile, 'utf8');
+
+  // No biggie if we can't erase the files now -- they're in a temp dir anyway
+  try { common.unlinkSync(scriptFile); } catch(e) {}
+  try { common.unlinkSync(stdoutFile); } catch(e) {}
+  try { common.unlinkSync(stderrFile); } catch(e) {}
+  try { common.unlinkSync(codeFile); } catch(e) {}
+  try { common.unlinkSync(sleepFile); } catch(e) {}
+
+  // some shell return codes are defined as errors, per http://tldp.org/LDP/abs/html/exitcodes.html
+  if (code === 1 || code === 2 || code >= 126)  {
+      common.error('', true); // unix/shell doesn't really give an error message after non-zero exit codes
+  }
+  // True if successful, false if not
+  var obj = {
+    code: code,
+    output: stdout, // deprecated
+    stdout: stdout,
+    stderr: stderr
+  };
+  return obj;
+} // execSync()
+
+// Wrapper around exec() to enable echoing output to console in real time
+function execAsync(cmd, opts, callback) {
+  var stdout = '';
+  var stderr = '';
+
+  opts = common.extend({
+    silent: common.config.silent,
+    cwd: _pwd(),
+    env: process.env,
+    maxBuffer: DEFAULT_MAXBUFFER_SIZE
+  }, opts);
+
+  var c = child.exec(cmd, opts, function(err) {
+    if (callback)
+      callback(err ? err.code : 0, stdout, stderr);
+  });
+
+  c.stdout.on('data', function(data) {
+    stdout += data;
+    if (!opts.silent)
+      process.stdout.write(data);
+  });
+
+  c.stderr.on('data', function(data) {
+    stderr += data;
+    if (!opts.silent)
+      process.stderr.write(data);
+  });
+
+  return c;
+}
+
+//@
+//@ ### exec(command [, options] [, callback])
+//@ Available options (all `false` by default):
+//@
+//@ + `async`: Asynchronous execution. If a callback is provided, it will be set to
+//@   `true`, regardless of the passed value.
+//@ + `silent`: Do not echo program output to console.
+//@ + and any option available to NodeJS's
+//@   [child_process.exec()](https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback)
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ var version = exec('node --version', {silent:true}).stdout;
+//@
+//@ var child = exec('some_long_running_process', {async:true});
+//@ child.stdout.on('data', function(data) {
+//@   /* ... do something with data ... */
+//@ });
+//@
+//@ exec('some_long_running_process', function(code, stdout, stderr) {
+//@   console.log('Exit code:', code);
+//@   console.log('Program output:', stdout);
+//@   console.log('Program stderr:', stderr);
+//@ });
+//@ ```
+//@
+//@ Executes the given `command` _synchronously_, unless otherwise specified.  When in synchronous
+//@ mode returns the object `{ code:..., stdout:... , stderr:... }`, containing the program's
+//@ `stdout`, `stderr`, and its exit `code`. Otherwise returns the child process object,
+//@ and the `callback` gets the arguments `(code, stdout, stderr)`.
+//@
+//@ **Note:** For long-lived processes, it's best to run `exec()` asynchronously as
+//@ the current synchronous implementation uses a lot of CPU. This should be getting
+//@ fixed soon.
+function _exec(command, options, callback) {
+  if (!command)
+    common.error('must specify command');
+
+  // Callback is defined instead of options.
+  if (typeof options === 'function') {
+    callback = options;
+    options = { async: true };
+  }
+
+  // Callback is defined with options.
+  if (typeof options === 'object' && typeof callback === 'function') {
+    options.async = true;
+  }
+
+  options = common.extend({
+    silent: common.config.silent,
+    async: false
+  }, options);
+
+  try {
+    if (options.async)
+      return execAsync(command, options, callback);
+    else
+      return execSync(command, options);
+  } catch (e) {
+    common.error('internal error');
+  }
+}
+module.exports = _exec;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/find.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/find.js b/node_modules/shelljs/src/find.js
new file mode 100644
index 0000000..c96fb2f
--- /dev/null
+++ b/node_modules/shelljs/src/find.js
@@ -0,0 +1,51 @@
+var fs = require('fs');
+var common = require('./common');
+var _ls = require('./ls');
+
+//@
+//@ ### find(path [, path ...])
+//@ ### find(path_array)
+//@ Examples:
+//@
+//@ ```javascript
+//@ find('src', 'lib');
+//@ find(['src', 'lib']); // same as above
+//@ find('.').filter(function(file) { return file.match(/\.js$/); });
+//@ ```
+//@
+//@ Returns array of all files (however deep) in the given paths.
+//@
+//@ The main difference from `ls('-R', path)` is that the resulting file names
+//@ include the base directories, e.g. `lib/resources/file1` instead of just `file1`.
+function _find(options, paths) {
+  if (!paths)
+    common.error('no path specified');
+  else if (typeof paths === 'object')
+    paths = paths; // assume array
+  else if (typeof paths === 'string')
+    paths = [].slice.call(arguments, 1);
+
+  var list = [];
+
+  function pushFile(file) {
+    if (common.platform === 'win')
+      file = file.replace(/\\/g, '/');
+    list.push(file);
+  }
+
+  // why not simply do ls('-R', paths)? because the output wouldn't give the base dirs
+  // to get the base dir in the output, we need instead ls('-R', 'dir/*') for every directory
+
+  paths.forEach(function(file) {
+    pushFile(file);
+
+    if (fs.statSync(file).isDirectory()) {
+      _ls('-RA', file+'/*').forEach(function(subfile) {
+        pushFile(subfile);
+      });
+    }
+  });
+
+  return list;
+}
+module.exports = _find;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/grep.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/grep.js b/node_modules/shelljs/src/grep.js
new file mode 100644
index 0000000..78008ce
--- /dev/null
+++ b/node_modules/shelljs/src/grep.js
@@ -0,0 +1,52 @@
+var common = require('./common');
+var fs = require('fs');
+
+//@
+//@ ### grep([options,] regex_filter, file [, file ...])
+//@ ### grep([options,] regex_filter, file_array)
+//@ Available options:
+//@
+//@ + `-v`: Inverse the sense of the regex and print the lines not matching the criteria.
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ grep('-v', 'GLOBAL_VARIABLE', '*.js');
+//@ grep('GLOBAL_VARIABLE', '*.js');
+//@ ```
+//@
+//@ Reads input string from given files and returns a string containing all lines of the
+//@ file that match the given `regex_filter`. Wildcard `*` accepted.
+function _grep(options, regex, files) {
+  options = common.parseOptions(options, {
+    'v': 'inverse'
+  });
+
+  if (!files)
+    common.error('no paths given');
+
+  if (typeof files === 'string')
+    files = [].slice.call(arguments, 2);
+  // if it's array leave it as it is
+
+  files = common.expand(files);
+
+  var grep = '';
+  files.forEach(function(file) {
+    if (!fs.existsSync(file)) {
+      common.error('no such file or directory: ' + file, true);
+      return;
+    }
+
+    var contents = fs.readFileSync(file, 'utf8'),
+        lines = contents.split(/\r*\n/);
+    lines.forEach(function(line) {
+      var matched = line.match(regex);
+      if ((options.inverse && !matched) || (!options.inverse && matched))
+        grep += line + '\n';
+    });
+  });
+
+  return common.ShellString(grep);
+}
+module.exports = _grep;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/ln.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/ln.js b/node_modules/shelljs/src/ln.js
new file mode 100644
index 0000000..878fda1
--- /dev/null
+++ b/node_modules/shelljs/src/ln.js
@@ -0,0 +1,69 @@
+var fs = require('fs');
+var path = require('path');
+var common = require('./common');
+
+//@
+//@ ### ln([options,] source, dest)
+//@ Available options:
+//@
+//@ + `-s`: symlink
+//@ + `-f`: force
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ ln('file', 'newlink');
+//@ ln('-sf', 'file', 'existing');
+//@ ```
+//@
+//@ Links source to dest. Use -f to force the link, should dest already exist.
+function _ln(options, source, dest) {
+  options = common.parseOptions(options, {
+    's': 'symlink',
+    'f': 'force'
+  });
+
+  if (!source || !dest) {
+    common.error('Missing <source> and/or <dest>');
+  }
+
+  source = String(source);
+  var sourcePath = path.normalize(source).replace(RegExp(path.sep + '$'), '');
+  var isAbsolute = (path.resolve(source) === sourcePath);
+  dest = path.resolve(process.cwd(), String(dest));
+
+  if (fs.existsSync(dest)) {
+    if (!options.force) {
+      common.error('Destination file exists', true);
+    }
+
+    fs.unlinkSync(dest);
+  }
+
+  if (options.symlink) {
+    var isWindows = common.platform === 'win';
+    var linkType = isWindows ? 'file' : null;
+    var resolvedSourcePath = isAbsolute ? sourcePath : path.resolve(process.cwd(), path.dirname(dest), source);
+    if (!fs.existsSync(resolvedSourcePath)) {
+      common.error('Source file does not exist', true);
+    } else if (isWindows && fs.statSync(resolvedSourcePath).isDirectory()) {
+      linkType =  'junction';
+    }
+
+    try {
+      fs.symlinkSync(linkType === 'junction' ? resolvedSourcePath: source, dest, linkType);
+    } catch (err) {
+      common.error(err.message);
+    }
+  } else {
+    if (!fs.existsSync(source)) {
+      common.error('Source file does not exist', true);
+    }
+    try {
+      fs.linkSync(source, dest);
+    } catch (err) {
+      common.error(err.message);
+    }
+  }
+}
+module.exports = _ln;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/ls.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/ls.js b/node_modules/shelljs/src/ls.js
new file mode 100644
index 0000000..6a54b3a
--- /dev/null
+++ b/node_modules/shelljs/src/ls.js
@@ -0,0 +1,168 @@
+var path = require('path');
+var fs = require('fs');
+var common = require('./common');
+var _cd = require('./cd');
+var _pwd = require('./pwd');
+
+//@
+//@ ### ls([options,] [path, ...])
+//@ ### ls([options,] path_array)
+//@ Available options:
+//@
+//@ + `-R`: recursive
+//@ + `-A`: all files (include files beginning with `.`, except for `.` and `..`)
+//@ + `-d`: list directories themselves, not their contents
+//@ + `-l`: list objects representing each file, each with fields containing `ls
+//@         -l` output fields. See
+//@         [fs.Stats](https://nodejs.org/api/fs.html#fs_class_fs_stats)
+//@         for more info
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ ls('projs/*.js');
+//@ ls('-R', '/users/me', '/tmp');
+//@ ls('-R', ['/users/me', '/tmp']); // same as above
+//@ ls('-l', 'file.txt'); // { name: 'file.txt', mode: 33188, nlink: 1, ...}
+//@ ```
+//@
+//@ Returns array of files in the given path, or in current directory if no path provided.
+function _ls(options, paths) {
+  options = common.parseOptions(options, {
+    'R': 'recursive',
+    'A': 'all',
+    'a': 'all_deprecated',
+    'd': 'directory',
+    'l': 'long'
+  });
+
+  if (options.all_deprecated) {
+    // We won't support the -a option as it's hard to image why it's useful
+    // (it includes '.' and '..' in addition to '.*' files)
+    // For backwards compatibility we'll dump a deprecated message and proceed as before
+    common.log('ls: Option -a is deprecated. Use -A instead');
+    options.all = true;
+  }
+
+  if (!paths)
+    paths = ['.'];
+  else if (typeof paths === 'object')
+    paths = paths; // assume array
+  else if (typeof paths === 'string')
+    paths = [].slice.call(arguments, 1);
+
+  var list = [];
+
+  // Conditionally pushes file to list - returns true if pushed, false otherwise
+  // (e.g. prevents hidden files to be included unless explicitly told so)
+  function pushFile(file, query) {
+    var name = file.name || file;
+    // hidden file?
+    if (path.basename(name)[0] === '.') {
+      // not explicitly asking for hidden files?
+      if (!options.all && !(path.basename(query)[0] === '.' && path.basename(query).length > 1))
+        return false;
+    }
+
+    if (common.platform === 'win')
+      name = name.replace(/\\/g, '/');
+
+    if (file.name) {
+      file.name = name;
+    } else {
+      file = name;
+    }
+    list.push(file);
+    return true;
+  }
+
+  paths.forEach(function(p) {
+    if (fs.existsSync(p)) {
+      var stats = ls_stat(p);
+      // Simple file?
+      if (stats.isFile()) {
+        if (options.long) {
+          pushFile(stats, p);
+        } else {
+          pushFile(p, p);
+        }
+        return; // continue
+      }
+
+      // Simple dir?
+      if (options.directory) {
+        pushFile(p, p);
+        return;
+      } else if (stats.isDirectory()) {
+        // Iterate over p contents
+        fs.readdirSync(p).forEach(function(file) {
+          var orig_file = file;
+          if (options.long)
+            file = ls_stat(path.join(p, file));
+          if (!pushFile(file, p))
+            return;
+
+          // Recursive?
+          if (options.recursive) {
+            var oldDir = _pwd();
+            _cd('', p);
+            if (fs.statSync(orig_file).isDirectory())
+              list = list.concat(_ls('-R'+(options.all?'A':''), orig_file+'/*'));
+            _cd('', oldDir);
+          }
+        });
+        return; // continue
+      }
+    }
+
+    // p does not exist - possible wildcard present
+
+    var basename = path.basename(p);
+    var dirname = path.dirname(p);
+    // Wildcard present on an existing dir? (e.g. '/tmp/*.js')
+    if (basename.search(/\*/) > -1 && fs.existsSync(dirname) && fs.statSync(dirname).isDirectory) {
+      // Escape special regular expression chars
+      var regexp = basename.replace(/(\^|\$|\(|\)|<|>|\[|\]|\{|\}|\.|\+|\?)/g, '\\$1');
+      // Translates wildcard into regex
+      regexp = '^' + regexp.replace(/\*/g, '.*') + '$';
+      // Iterate over directory contents
+      fs.readdirSync(dirname).forEach(function(file) {
+        if (file.match(new RegExp(regexp))) {
+          var file_path = path.join(dirname,  file);
+          file_path = options.long ? ls_stat(file_path) : file_path;
+          if (file_path.name)
+            file_path.name = path.normalize(file_path.name);
+          else
+            file_path = path.normalize(file_path);
+          if (!pushFile(file_path, basename))
+            return;
+
+          // Recursive?
+          if (options.recursive) {
+            var pp = dirname + '/' + file;
+            if (fs.lstatSync(pp).isDirectory())
+              list = list.concat(_ls('-R'+(options.all?'A':''), pp+'/*'));
+          } // recursive
+        } // if file matches
+      }); // forEach
+      return;
+    }
+
+    common.error('no such file or directory: ' + p, true);
+  });
+
+  return list;
+}
+module.exports = _ls;
+
+
+function ls_stat(path) {
+  var stats = fs.statSync(path);
+  // Note: this object will contain more information than .toString() returns
+  stats.name = path;
+  stats.toString = function() {
+    // Return a string resembling unix's `ls -l` format
+    return [this.mode, this.nlink, this.uid, this.gid, this.size, this.mtime, this.name].join(' ');
+  };
+  return stats;
+}

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/mkdir.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/mkdir.js b/node_modules/shelljs/src/mkdir.js
new file mode 100644
index 0000000..8b4fd99
--- /dev/null
+++ b/node_modules/shelljs/src/mkdir.js
@@ -0,0 +1,68 @@
+var common = require('./common');
+var fs = require('fs');
+var path = require('path');
+
+// Recursively creates 'dir'
+function mkdirSyncRecursive(dir) {
+  var baseDir = path.dirname(dir);
+
+  // Base dir exists, no recursion necessary
+  if (fs.existsSync(baseDir)) {
+    fs.mkdirSync(dir, parseInt('0777', 8));
+    return;
+  }
+
+  // Base dir does not exist, go recursive
+  mkdirSyncRecursive(baseDir);
+
+  // Base dir created, can create dir
+  fs.mkdirSync(dir, parseInt('0777', 8));
+}
+
+//@
+//@ ### mkdir([options,] dir [, dir ...])
+//@ ### mkdir([options,] dir_array)
+//@ Available options:
+//@
+//@ + `-p`: full path (will create intermediate dirs if necessary)
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g');
+//@ mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above
+//@ ```
+//@
+//@ Creates directories.
+function _mkdir(options, dirs) {
+  options = common.parseOptions(options, {
+    'p': 'fullpath'
+  });
+  if (!dirs)
+    common.error('no paths given');
+
+  if (typeof dirs === 'string')
+    dirs = [].slice.call(arguments, 1);
+  // if it's array leave it as it is
+
+  dirs.forEach(function(dir) {
+    if (fs.existsSync(dir)) {
+      if (!options.fullpath)
+          common.error('path already exists: ' + dir, true);
+      return; // skip dir
+    }
+
+    // Base dir does not exist, and no -p option given
+    var baseDir = path.dirname(dir);
+    if (!fs.existsSync(baseDir) && !options.fullpath) {
+      common.error('no such file or directory: ' + baseDir, true);
+      return; // skip dir
+    }
+
+    if (options.fullpath)
+      mkdirSyncRecursive(dir);
+    else
+      fs.mkdirSync(dir, parseInt('0777', 8));
+  });
+} // mkdir
+module.exports = _mkdir;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/mv.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/mv.js b/node_modules/shelljs/src/mv.js
new file mode 100644
index 0000000..69cc03f
--- /dev/null
+++ b/node_modules/shelljs/src/mv.js
@@ -0,0 +1,82 @@
+var fs = require('fs');
+var path = require('path');
+var common = require('./common');
+
+//@
+//@ ### mv([options ,] source [, source ...], dest')
+//@ ### mv([options ,] source_array, dest')
+//@ Available options:
+//@
+//@ + `-f`: force (default behavior)
+//@ + `-n`: no-clobber
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ mv('-n', 'file', 'dir/');
+//@ mv('file1', 'file2', 'dir/');
+//@ mv(['file1', 'file2'], 'dir/'); // same as above
+//@ ```
+//@
+//@ Moves files. The wildcard `*` is accepted.
+function _mv(options, sources, dest) {
+  options = common.parseOptions(options, {
+    'f': '!no_force',
+    'n': 'no_force'
+  });
+
+  // Get sources, dest
+  if (arguments.length < 3) {
+    common.error('missing <source> and/or <dest>');
+  } else if (arguments.length > 3) {
+    sources = [].slice.call(arguments, 1, arguments.length - 1);
+    dest = arguments[arguments.length - 1];
+  } else if (typeof sources === 'string') {
+    sources = [sources];
+  } else if ('length' in sources) {
+    sources = sources; // no-op for array
+  } else {
+    common.error('invalid arguments');
+  }
+
+  sources = common.expand(sources);
+
+  var exists = fs.existsSync(dest),
+      stats = exists && fs.statSync(dest);
+
+  // Dest is not existing dir, but multiple sources given
+  if ((!exists || !stats.isDirectory()) && sources.length > 1)
+    common.error('dest is not a directory (too many sources)');
+
+  // Dest is an existing file, but no -f given
+  if (exists && stats.isFile() && options.no_force)
+    common.error('dest file already exists: ' + dest);
+
+  sources.forEach(function(src) {
+    if (!fs.existsSync(src)) {
+      common.error('no such file or directory: '+src, true);
+      return; // skip file
+    }
+
+    // If here, src exists
+
+    // When copying to '/path/dir':
+    //    thisDest = '/path/dir/file1'
+    var thisDest = dest;
+    if (fs.existsSync(dest) && fs.statSync(dest).isDirectory())
+      thisDest = path.normalize(dest + '/' + path.basename(src));
+
+    if (fs.existsSync(thisDest) && options.no_force) {
+      common.error('dest file already exists: ' + thisDest, true);
+      return; // skip file
+    }
+
+    if (path.resolve(src) === path.dirname(path.resolve(thisDest))) {
+      common.error('cannot move to self: '+src, true);
+      return; // skip file
+    }
+
+    fs.renameSync(src, thisDest);
+  }); // forEach(src)
+} // mv
+module.exports = _mv;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/popd.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/popd.js b/node_modules/shelljs/src/popd.js
new file mode 100644
index 0000000..11ea24f
--- /dev/null
+++ b/node_modules/shelljs/src/popd.js
@@ -0,0 +1 @@
+// see dirs.js
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/pushd.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/pushd.js b/node_modules/shelljs/src/pushd.js
new file mode 100644
index 0000000..11ea24f
--- /dev/null
+++ b/node_modules/shelljs/src/pushd.js
@@ -0,0 +1 @@
+// see dirs.js
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/pwd.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/pwd.js b/node_modules/shelljs/src/pwd.js
new file mode 100644
index 0000000..26cefe0
--- /dev/null
+++ b/node_modules/shelljs/src/pwd.js
@@ -0,0 +1,11 @@
+var path = require('path');
+var common = require('./common');
+
+//@
+//@ ### pwd()
+//@ Returns the current directory.
+function _pwd() {
+  var pwd = path.resolve(process.cwd());
+  return common.ShellString(pwd);
+}
+module.exports = _pwd;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/rm.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/rm.js b/node_modules/shelljs/src/rm.js
new file mode 100644
index 0000000..cf2e95b
--- /dev/null
+++ b/node_modules/shelljs/src/rm.js
@@ -0,0 +1,163 @@
+var common = require('./common');
+var fs = require('fs');
+
+// Recursively removes 'dir'
+// Adapted from https://github.com/ryanmcgrath/wrench-js
+//
+// Copyright (c) 2010 Ryan McGrath
+// Copyright (c) 2012 Artur Adib
+//
+// Licensed under the MIT License
+// http://www.opensource.org/licenses/mit-license.php
+function rmdirSyncRecursive(dir, force) {
+  var files;
+
+  files = fs.readdirSync(dir);
+
+  // Loop through and delete everything in the sub-tree after checking it
+  for(var i = 0; i < files.length; i++) {
+    var file = dir + "/" + files[i],
+        currFile = fs.lstatSync(file);
+
+    if(currFile.isDirectory()) { // Recursive function back to the beginning
+      rmdirSyncRecursive(file, force);
+    }
+
+    else if(currFile.isSymbolicLink()) { // Unlink symlinks
+      if (force || isWriteable(file)) {
+        try {
+          common.unlinkSync(file);
+        } catch (e) {
+          common.error('could not remove file (code '+e.code+'): ' + file, true);
+        }
+      }
+    }
+
+    else // Assume it's a file - perhaps a try/catch belongs here?
+      if (force || isWriteable(file)) {
+        try {
+          common.unlinkSync(file);
+        } catch (e) {
+          common.error('could not remove file (code '+e.code+'): ' + file, true);
+        }
+      }
+  }
+
+  // Now that we know everything in the sub-tree has been deleted, we can delete the main directory.
+  // Huzzah for the shopkeep.
+
+  var result;
+  try {
+    // Retry on windows, sometimes it takes a little time before all the files in the directory are gone
+    var start = Date.now();
+    while (true) {
+      try {
+        result = fs.rmdirSync(dir);
+        if (fs.existsSync(dir)) throw { code: "EAGAIN" };
+        break;
+      } catch(er) {
+        // In addition to error codes, also check if the directory still exists and loop again if true
+        if (process.platform === "win32" && (er.code === "ENOTEMPTY" || er.code === "EBUSY" || er.code === "EPERM" || er.code === "EAGAIN")) {
+          if (Date.now() - start > 1000) throw er;
+        } else if (er.code === "ENOENT") {
+          // Directory did not exist, deletion was successful
+          break;
+        } else {
+          throw er;
+        }
+      }
+    }
+  } catch(e) {
+    common.error('could not remove directory (code '+e.code+'): ' + dir, true);
+  }
+
+  return result;
+} // rmdirSyncRecursive
+
+// Hack to determine if file has write permissions for current user
+// Avoids having to check user, group, etc, but it's probably slow
+function isWriteable(file) {
+  var writePermission = true;
+  try {
+    var __fd = fs.openSync(file, 'a');
+    fs.closeSync(__fd);
+  } catch(e) {
+    writePermission = false;
+  }
+
+  return writePermission;
+}
+
+//@
+//@ ### rm([options,] file [, file ...])
+//@ ### rm([options,] file_array)
+//@ Available options:
+//@
+//@ + `-f`: force
+//@ + `-r, -R`: recursive
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ rm('-rf', '/tmp/*');
+//@ rm('some_file.txt', 'another_file.txt');
+//@ rm(['some_file.txt', 'another_file.txt']); // same as above
+//@ ```
+//@
+//@ Removes files. The wildcard `*` is accepted.
+function _rm(options, files) {
+  options = common.parseOptions(options, {
+    'f': 'force',
+    'r': 'recursive',
+    'R': 'recursive'
+  });
+  if (!files)
+    common.error('no paths given');
+
+  if (typeof files === 'string')
+    files = [].slice.call(arguments, 1);
+  // if it's array leave it as it is
+
+  files = common.expand(files);
+
+  files.forEach(function(file) {
+    if (!fs.existsSync(file)) {
+      // Path does not exist, no force flag given
+      if (!options.force)
+        common.error('no such file or directory: '+file, true);
+
+      return; // skip file
+    }
+
+    // If here, path exists
+
+    var stats = fs.lstatSync(file);
+    if (stats.isFile() || stats.isSymbolicLink()) {
+
+      // Do not check for file writing permissions
+      if (options.force) {
+        common.unlinkSync(file);
+        return;
+      }
+
+      if (isWriteable(file))
+        common.unlinkSync(file);
+      else
+        common.error('permission denied: '+file, true);
+
+      return;
+    } // simple file
+
+    // Path is an existing directory, but no -r flag given
+    if (stats.isDirectory() && !options.recursive) {
+      common.error('path is a directory', true);
+      return; // skip path
+    }
+
+    // Recursively remove existing directory
+    if (stats.isDirectory() && options.recursive) {
+      rmdirSyncRecursive(file, options.force);
+    }
+  }); // forEach(file)
+} // rm
+module.exports = _rm;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/sed.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/sed.js b/node_modules/shelljs/src/sed.js
new file mode 100644
index 0000000..baa385b
--- /dev/null
+++ b/node_modules/shelljs/src/sed.js
@@ -0,0 +1,64 @@
+var common = require('./common');
+var fs = require('fs');
+
+//@
+//@ ### sed([options,] search_regex, replacement, file [, file ...])
+//@ ### sed([options,] search_regex, replacement, file_array)
+//@ Available options:
+//@
+//@ + `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js');
+//@ sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js');
+//@ ```
+//@
+//@ Reads an input string from `files` and performs a JavaScript `replace()` on the input
+//@ using the given search regex and replacement string or function. Returns the new string after replacement.
+function _sed(options, regex, replacement, files) {
+  options = common.parseOptions(options, {
+    'i': 'inplace'
+  });
+
+  if (typeof replacement === 'string' || typeof replacement === 'function')
+    replacement = replacement; // no-op
+  else if (typeof replacement === 'number')
+    replacement = replacement.toString(); // fallback
+  else
+    common.error('invalid replacement string');
+
+  // Convert all search strings to RegExp
+  if (typeof regex === 'string')
+    regex = RegExp(regex);
+
+  if (!files)
+    common.error('no files given');
+
+  if (typeof files === 'string')
+    files = [].slice.call(arguments, 3);
+  // if it's array leave it as it is
+
+  files = common.expand(files);
+
+  var sed = [];
+  files.forEach(function(file) {
+    if (!fs.existsSync(file)) {
+      common.error('no such file or directory: ' + file, true);
+      return;
+    }
+
+    var result = fs.readFileSync(file, 'utf8').split('\n').map(function (line) {
+      return line.replace(regex, replacement);
+    }).join('\n');
+
+    sed.push(result);
+
+    if (options.inplace)
+      fs.writeFileSync(file, result, 'utf8');
+  });
+
+  return common.ShellString(sed.join('\n'));
+}
+module.exports = _sed;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/set.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/set.js b/node_modules/shelljs/src/set.js
new file mode 100644
index 0000000..19e26d9
--- /dev/null
+++ b/node_modules/shelljs/src/set.js
@@ -0,0 +1,49 @@
+var common = require('./common');
+
+//@
+//@ ### set(options)
+//@ Available options:
+//@
+//@ + `+/-e`: exit upon error (`config.fatal`)
+//@ + `+/-v`: verbose: show all commands (`config.verbose`)
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ set('-e'); // exit upon first error
+//@ set('+e'); // this undoes a "set('-e')"
+//@ ```
+//@
+//@ Sets global configuration variables
+function _set(options) {
+  if (!options) {
+    var args = [].slice.call(arguments, 0);
+    if (args.length < 2)
+      common.error('must provide an argument');
+    options = args[1];
+  }
+  var negate = (options[0] === '+');
+  if (negate) {
+    options = '-' + options.slice(1); // parseOptions needs a '-' prefix
+  }
+  options = common.parseOptions(options, {
+    'e': 'fatal',
+    'v': 'verbose'
+  });
+
+  var key;
+  if (negate) {
+    for (key in options)
+      options[key] = !options[key];
+  }
+
+  for (key in options) {
+    // Only change the global config if `negate` is false and the option is true
+    // or if `negate` is true and the option is false (aka negate !== option)
+    if (negate !== options[key]) {
+      common.config[key] = options[key];
+    }
+  }
+  return;
+}
+module.exports = _set;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/tempdir.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/tempdir.js b/node_modules/shelljs/src/tempdir.js
new file mode 100644
index 0000000..79b949f
--- /dev/null
+++ b/node_modules/shelljs/src/tempdir.js
@@ -0,0 +1,57 @@
+var common = require('./common');
+var os = require('os');
+var fs = require('fs');
+
+// Returns false if 'dir' is not a writeable directory, 'dir' otherwise
+function writeableDir(dir) {
+  if (!dir || !fs.existsSync(dir))
+    return false;
+
+  if (!fs.statSync(dir).isDirectory())
+    return false;
+
+  var testFile = dir+'/'+common.randomFileName();
+  try {
+    fs.writeFileSync(testFile, ' ');
+    common.unlinkSync(testFile);
+    return dir;
+  } catch (e) {
+    return false;
+  }
+}
+
+
+//@
+//@ ### tempdir()
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ var tmp = tempdir(); // "/tmp" for most *nix platforms
+//@ ```
+//@
+//@ Searches and returns string containing a writeable, platform-dependent temporary directory.
+//@ Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir).
+function _tempDir() {
+  var state = common.state;
+  if (state.tempDir)
+    return state.tempDir; // from cache
+
+  state.tempDir = writeableDir(os.tmpdir && os.tmpdir()) || // node 0.10+
+                  writeableDir(os.tmpDir && os.tmpDir()) || // node 0.8+
+                  writeableDir(process.env['TMPDIR']) ||
+                  writeableDir(process.env['TEMP']) ||
+                  writeableDir(process.env['TMP']) ||
+                  writeableDir(process.env['Wimp$ScrapDir']) || // RiscOS
+                  writeableDir('C:\\TEMP') || // Windows
+                  writeableDir('C:\\TMP') || // Windows
+                  writeableDir('\\TEMP') || // Windows
+                  writeableDir('\\TMP') || // Windows
+                  writeableDir('/tmp') ||
+                  writeableDir('/var/tmp') ||
+                  writeableDir('/usr/tmp') ||
+                  writeableDir('.'); // last resort
+
+  return state.tempDir;
+}
+module.exports = _tempDir;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/test.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/test.js b/node_modules/shelljs/src/test.js
new file mode 100644
index 0000000..068a1ce
--- /dev/null
+++ b/node_modules/shelljs/src/test.js
@@ -0,0 +1,85 @@
+var common = require('./common');
+var fs = require('fs');
+
+//@
+//@ ### test(expression)
+//@ Available expression primaries:
+//@
+//@ + `'-b', 'path'`: true if path is a block device
+//@ + `'-c', 'path'`: true if path is a character device
+//@ + `'-d', 'path'`: true if path is a directory
+//@ + `'-e', 'path'`: true if path exists
+//@ + `'-f', 'path'`: true if path is a regular file
+//@ + `'-L', 'path'`: true if path is a symbolic link
+//@ + `'-p', 'path'`: true if path is a pipe (FIFO)
+//@ + `'-S', 'path'`: true if path is a socket
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ if (test('-d', path)) { /* do something with dir */ };
+//@ if (!test('-f', path)) continue; // skip if it's a regular file
+//@ ```
+//@
+//@ Evaluates expression using the available primaries and returns corresponding value.
+function _test(options, path) {
+  if (!path)
+    common.error('no path given');
+
+  // hack - only works with unary primaries
+  options = common.parseOptions(options, {
+    'b': 'block',
+    'c': 'character',
+    'd': 'directory',
+    'e': 'exists',
+    'f': 'file',
+    'L': 'link',
+    'p': 'pipe',
+    'S': 'socket'
+  });
+
+  var canInterpret = false;
+  for (var key in options)
+    if (options[key] === true) {
+      canInterpret = true;
+      break;
+    }
+
+  if (!canInterpret)
+    common.error('could not interpret expression');
+
+  if (options.link) {
+    try {
+      return fs.lstatSync(path).isSymbolicLink();
+    } catch(e) {
+      return false;
+    }
+  }
+
+  if (!fs.existsSync(path))
+    return false;
+
+  if (options.exists)
+    return true;
+
+  var stats = fs.statSync(path);
+
+  if (options.block)
+    return stats.isBlockDevice();
+
+  if (options.character)
+    return stats.isCharacterDevice();
+
+  if (options.directory)
+    return stats.isDirectory();
+
+  if (options.file)
+    return stats.isFile();
+
+  if (options.pipe)
+    return stats.isFIFO();
+
+  if (options.socket)
+    return stats.isSocket();
+} // test
+module.exports = _test;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/to.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/to.js b/node_modules/shelljs/src/to.js
new file mode 100644
index 0000000..65d6d54
--- /dev/null
+++ b/node_modules/shelljs/src/to.js
@@ -0,0 +1,30 @@
+var common = require('./common');
+var fs = require('fs');
+var path = require('path');
+
+//@
+//@ ### 'string'.to(file)
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ cat('input.txt').to('output.txt');
+//@ ```
+//@
+//@ Analogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as
+//@ those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_
+function _to(options, file) {
+  if (!file)
+    common.error('wrong arguments');
+
+  if (!fs.existsSync( path.dirname(file) ))
+      common.error('no such file or directory: ' + path.dirname(file));
+
+  try {
+    fs.writeFileSync(file, this.toString(), 'utf8');
+    return this;
+  } catch(e) {
+    common.error('could not write to file (code '+e.code+'): '+file, true);
+  }
+}
+module.exports = _to;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/toEnd.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/toEnd.js b/node_modules/shelljs/src/toEnd.js
new file mode 100644
index 0000000..bf29a65
--- /dev/null
+++ b/node_modules/shelljs/src/toEnd.js
@@ -0,0 +1,30 @@
+var common = require('./common');
+var fs = require('fs');
+var path = require('path');
+
+//@
+//@ ### 'string'.toEnd(file)
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ cat('input.txt').toEnd('output.txt');
+//@ ```
+//@
+//@ Analogous to the redirect-and-append operator `>>` in Unix, but works with JavaScript strings (such as
+//@ those returned by `cat`, `grep`, etc).
+function _toEnd(options, file) {
+  if (!file)
+    common.error('wrong arguments');
+
+  if (!fs.existsSync( path.dirname(file) ))
+      common.error('no such file or directory: ' + path.dirname(file));
+
+  try {
+    fs.appendFileSync(file, this.toString(), 'utf8');
+    return this;
+  } catch(e) {
+    common.error('could not append to file (code '+e.code+'): '+file, true);
+  }
+}
+module.exports = _toEnd;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/touch.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/touch.js b/node_modules/shelljs/src/touch.js
new file mode 100644
index 0000000..bbc2c19
--- /dev/null
+++ b/node_modules/shelljs/src/touch.js
@@ -0,0 +1,109 @@
+var common = require('./common');
+var fs = require('fs');
+
+//@
+//@ ### touch([options,] file)
+//@ Available options:
+//@
+//@ + `-a`: Change only the access time
+//@ + `-c`: Do not create any files
+//@ + `-m`: Change only the modification time
+//@ + `-d DATE`: Parse DATE and use it instead of current time
+//@ + `-r FILE`: Use FILE's times instead of current time
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ touch('source.js');
+//@ touch('-c', '/path/to/some/dir/source.js');
+//@ touch({ '-r': FILE }, '/path/to/some/dir/source.js');
+//@ ```
+//@
+//@ Update the access and modification times of each FILE to the current time.
+//@ A FILE argument that does not exist is created empty, unless -c is supplied.
+//@ This is a partial implementation of *[touch(1)](http://linux.die.net/man/1/touch)*.
+function _touch(opts, files) {
+  opts = common.parseOptions(opts, {
+    'a': 'atime_only',
+    'c': 'no_create',
+    'd': 'date',
+    'm': 'mtime_only',
+    'r': 'reference',
+  });
+
+  if (!files) {
+    common.error('no paths given');
+  }
+
+  if (Array.isArray(files)) {
+    files.forEach(function(f) {
+      touchFile(opts, f);
+    });
+  } else if (typeof files === 'string') {
+    touchFile(opts, files);
+  } else {
+    common.error('file arg should be a string file path or an Array of string file paths');
+  }
+
+}
+
+function touchFile(opts, file) {
+  var stat = tryStatFile(file);
+
+  if (stat && stat.isDirectory()) {
+    // don't error just exit
+    return;
+  }
+
+  // if the file doesn't already exist and the user has specified --no-create then
+  // this script is finished
+  if (!stat && opts.no_create) {
+    return;
+  }
+
+  // open the file and then close it. this will create it if it doesn't exist but will
+  // not truncate the file
+  fs.closeSync(fs.openSync(file, 'a'));
+
+  //
+  // Set timestamps
+  //
+
+  // setup some defaults
+  var now = new Date();
+  var mtime = opts.date || now;
+  var atime = opts.date || now;
+
+  // use reference file
+  if (opts.reference) {
+    var refStat = tryStatFile(opts.reference);
+    if (!refStat) {
+      common.error('failed to get attributess of ' + opts.reference);
+    }
+    mtime = refStat.mtime;
+    atime = refStat.atime;
+  } else if (opts.date) {
+    mtime = opts.date;
+    atime = opts.date;
+  }
+
+  if (opts.atime_only && opts.mtime_only) {
+    // keep the new values of mtime and atime like GNU
+  } else if (opts.atime_only) {
+    mtime = stat.mtime;
+  } else if (opts.mtime_only) {
+    atime = stat.atime;
+  }
+
+  fs.utimesSync(file, atime, mtime);
+}
+
+module.exports = _touch;
+
+function tryStatFile(filePath) {
+  try {
+    return fs.statSync(filePath);
+  } catch (e) {
+    return null;
+  }
+}

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/which.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/which.js b/node_modules/shelljs/src/which.js
new file mode 100644
index 0000000..d17634e
--- /dev/null
+++ b/node_modules/shelljs/src/which.js
@@ -0,0 +1,98 @@
+var common = require('./common');
+var fs = require('fs');
+var path = require('path');
+
+// XP's system default value for PATHEXT system variable, just in case it's not
+// set on Windows.
+var XP_DEFAULT_PATHEXT = '.com;.exe;.bat;.cmd;.vbs;.vbe;.js;.jse;.wsf;.wsh';
+
+// Cross-platform method for splitting environment PATH variables
+function splitPath(p) {
+  if (!p)
+    return [];
+
+  if (common.platform === 'win')
+    return p.split(';');
+  else
+    return p.split(':');
+}
+
+function checkPath(path) {
+  return fs.existsSync(path) && !fs.statSync(path).isDirectory();
+}
+
+//@
+//@ ### which(command)
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ var nodeExec = which('node');
+//@ ```
+//@
+//@ Searches for `command` in the system's PATH. On Windows, this uses the
+//@ `PATHEXT` variable to append the extension if it's not already executable.
+//@ Returns string containing the absolute path to the command.
+function _which(options, cmd) {
+  if (!cmd)
+    common.error('must specify command');
+
+  var pathEnv = process.env.path || process.env.Path || process.env.PATH,
+      pathArray = splitPath(pathEnv),
+      where = null;
+
+  // No relative/absolute paths provided?
+  if (cmd.search(/\//) === -1) {
+    // Search for command in PATH
+    pathArray.forEach(function(dir) {
+      if (where)
+        return; // already found it
+
+      var attempt = path.resolve(dir, cmd);
+
+      if (common.platform === 'win') {
+        attempt = attempt.toUpperCase();
+
+        // In case the PATHEXT variable is somehow not set (e.g.
+        // child_process.spawn with an empty environment), use the XP default.
+        var pathExtEnv = process.env.PATHEXT || XP_DEFAULT_PATHEXT;
+        var pathExtArray = splitPath(pathExtEnv.toUpperCase());
+        var i;
+
+        // If the extension is already in PATHEXT, just return that.
+        for (i = 0; i < pathExtArray.length; i++) {
+          var ext = pathExtArray[i];
+          if (attempt.slice(-ext.length) === ext && checkPath(attempt)) {
+            where = attempt;
+            return;
+          }
+        }
+
+        // Cycle through the PATHEXT variable
+        var baseAttempt = attempt;
+        for (i = 0; i < pathExtArray.length; i++) {
+          attempt = baseAttempt + pathExtArray[i];
+          if (checkPath(attempt)) {
+            where = attempt;
+            return;
+          }
+        }
+      } else {
+        // Assume it's Unix-like
+        if (checkPath(attempt)) {
+          where = attempt;
+          return;
+        }
+      }
+    });
+  }
+
+  // Command not found anywhere?
+  if (!checkPath(cmd) && !where)
+    return null;
+
+  where = where || path.resolve(cmd);
+
+  return common.ShellString(where);
+}
+module.exports = _which;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/.npmignore
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/.npmignore b/node_modules/shelljs/test/.npmignore
deleted file mode 100644
index a1632ab..0000000
--- a/node_modules/shelljs/test/.npmignore
+++ /dev/null
@@ -1,2 +0,0 @@
-tmp/
-

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/cat.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/cat.js b/node_modules/shelljs/test/cat.js
deleted file mode 100644
index d0d9ddb..0000000
--- a/node_modules/shelljs/test/cat.js
+++ /dev/null
@@ -1,57 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-function numLines(str) {
-  return typeof str === 'string' ? str.match(/\n/g).length : 0;
-}
-
-// save current dir
-var cur = shell.pwd();
-
-shell.rm('-rf', 'tmp');
-shell.mkdir('tmp');
-
-//
-// Invalids
-//
-
-shell.cat();
-assert.ok(shell.error());
-
-assert.equal(fs.existsSync('/asdfasdf'), false); // sanity check
-shell.cat('/adsfasdf'); // file does not exist
-assert.ok(shell.error());
-
-//
-// Valids
-//
-
-// simple
-var result = shell.cat('resources/file1');
-assert.equal(shell.error(), null);
-assert.equal(result, 'test1');
-
-// multiple files
-var result = shell.cat('resources/file2', 'resources/file1');
-assert.equal(shell.error(), null);
-assert.equal(result, 'test2\ntest1');
-
-// multiple files, array syntax
-var result = shell.cat(['resources/file2', 'resources/file1']);
-assert.equal(shell.error(), null);
-assert.equal(result, 'test2\ntest1');
-
-var result = shell.cat('resources/file*.txt');
-assert.equal(shell.error(), null);
-assert.ok(result.search('test1') > -1); // file order might be random
-assert.ok(result.search('test2') > -1);
-
-shell.exit(123);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/cd.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/cd.js b/node_modules/shelljs/test/cd.js
deleted file mode 100644
index e6f6c38..0000000
--- a/node_modules/shelljs/test/cd.js
+++ /dev/null
@@ -1,64 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-function numLines(str) {
-  return typeof str === 'string' ? str.match(/\n/g).length : 0;
-}
-
-// save current dir
-var cur = shell.pwd();
-
-shell.rm('-rf', 'tmp');
-shell.mkdir('tmp');
-
-//
-// Invalids
-//
-
-shell.cd();
-assert.ok(shell.error());
-
-assert.equal(fs.existsSync('/asdfasdf'), false); // sanity check
-shell.cd('/adsfasdf'); // dir does not exist
-assert.ok(shell.error());
-
-assert.equal(fs.existsSync('resources/file1'), true); // sanity check
-shell.cd('resources/file1'); // file, not dir
-assert.ok(shell.error());
-
-//
-// Valids
-//
-
-shell.cd(cur);
-shell.cd('tmp');
-assert.equal(shell.error(), null);
-assert.equal(path.basename(process.cwd()), 'tmp');
-
-shell.cd(cur);
-shell.cd('/');
-assert.equal(shell.error(), null);
-assert.equal(process.cwd(), path.resolve('/'));
-
-// cd + other commands
-
-shell.cd(cur);
-shell.rm('-f', 'tmp/*');
-assert.equal(fs.existsSync('tmp/file1'), false);
-shell.cd('resources');
-assert.equal(shell.error(), null);
-shell.cp('file1', '../tmp');
-assert.equal(shell.error(), null);
-shell.cd('../tmp');
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('file1'), true);
-
-shell.exit(123);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/chmod.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/chmod.js b/node_modules/shelljs/test/chmod.js
deleted file mode 100644
index b31e25e..0000000
--- a/node_modules/shelljs/test/chmod.js
+++ /dev/null
@@ -1,81 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-shell.config.silent = true;
-
-//
-// Invalids
-//
-
-shell.chmod('blah');  // missing args
-assert.ok(shell.error());
-shell.chmod('893', 'resources/chmod');  // invalid permissions - mode must be in octal
-assert.ok(shell.error());
-
-//
-// Valids
-//
-
-// Test files - the bitmasking is to ignore the upper bits.
-shell.chmod('755', 'resources/chmod/file1');
-assert.equal(fs.statSync('resources/chmod/file1').mode & parseInt('777', 8), parseInt('755', 8));
-shell.chmod('644', 'resources/chmod/file1');
-assert.equal(fs.statSync('resources/chmod/file1').mode & parseInt('777', 8), parseInt('644', 8));
-
-shell.chmod('o+x', 'resources/chmod/file1');
-assert.equal(fs.statSync('resources/chmod/file1').mode & parseInt('007', 8), parseInt('005', 8));
-shell.chmod('644', 'resources/chmod/file1');
-
-shell.chmod('+x', 'resources/chmod/file1');
-assert.equal(fs.statSync('resources/chmod/file1').mode & parseInt('777', 8), parseInt('755', 8));
-shell.chmod('644', 'resources/chmod/file1');
-
-// Test setuid
-shell.chmod('u+s', 'resources/chmod/file1');
-assert.equal(fs.statSync('resources/chmod/file1').mode & parseInt('4000', 8), parseInt('4000', 8));
-shell.chmod('u-s', 'resources/chmod/file1');
-assert.equal(fs.statSync('resources/chmod/file1').mode & parseInt('777', 8), parseInt('644', 8));
-
-// according to POSIX standards at http://linux.die.net/man/1/chmod,
-// setuid is never cleared from a directory unless explicitly asked for.
-shell.chmod('u+s', 'resources/chmod/c');
-shell.chmod('755', 'resources/chmod/c');
-assert.equal(fs.statSync('resources/chmod/c').mode & parseInt('4000', 8), parseInt('4000', 8));
-shell.chmod('u-s', 'resources/chmod/c');
-
-// Test setgid
-shell.chmod('g+s', 'resources/chmod/file1');
-assert.equal(fs.statSync('resources/chmod/file1').mode & parseInt('2000', 8), parseInt('2000', 8));
-shell.chmod('g-s', 'resources/chmod/file1');
-assert.equal(fs.statSync('resources/chmod/file1').mode & parseInt('777', 8), parseInt('644', 8));
-
-// Test sticky bit
-shell.chmod('+t', 'resources/chmod/file1');
-assert.equal(fs.statSync('resources/chmod/file1').mode & parseInt('1000', 8), parseInt('1000', 8));
-shell.chmod('-t', 'resources/chmod/file1');
-assert.equal(fs.statSync('resources/chmod/file1').mode & parseInt('777', 8), parseInt('644', 8));
-assert.equal(fs.statSync('resources/chmod/file1').mode & parseInt('1000', 8), 0);
-
-// Test directories
-shell.chmod('a-w', 'resources/chmod/b/a/b');
-assert.equal(fs.statSync('resources/chmod/b/a/b').mode & parseInt('777', 8), parseInt('555', 8));
-shell.chmod('755', 'resources/chmod/b/a/b');
-
-// Test recursion
-shell.chmod('-R', 'a+w', 'resources/chmod/b');
-assert.equal(fs.statSync('resources/chmod/b/a/b').mode & parseInt('777', 8), parseInt('777', 8));
-shell.chmod('-R', '755', 'resources/chmod/b');
-assert.equal(fs.statSync('resources/chmod/b/a/b').mode & parseInt('777', 8), parseInt('755', 8));
-
-// Test symbolic links w/ recursion  - WARNING: *nix only
-fs.symlinkSync('resources/chmod/b/a', 'resources/chmod/a/b/c/link', 'dir');
-shell.chmod('-R', 'u-w', 'resources/chmod/a/b');
-assert.equal(fs.statSync('resources/chmod/a/b/c').mode & parseInt('700', 8), parseInt('500', 8));
-assert.equal(fs.statSync('resources/chmod/b/a').mode & parseInt('700', 8), parseInt('700', 8));
-shell.chmod('-R', 'u+w', 'resources/chmod/a/b');
-fs.unlinkSync('resources/chmod/a/b/c/link');
-
-shell.exit(123);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/config.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/config.js b/node_modules/shelljs/test/config.js
deleted file mode 100644
index bd81ec0..0000000
--- a/node_modules/shelljs/test/config.js
+++ /dev/null
@@ -1,50 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    child = require('child_process');
-
-function numLines(str) {
-  return typeof str === 'string' ? str.match(/\n/g).length : 0;
-}
-
-//
-// config.silent
-//
-
-assert.equal(shell.config.silent, false); // default
-
-shell.config.silent = true;
-assert.equal(shell.config.silent, true);
-
-shell.config.silent = false;
-assert.equal(shell.config.silent, false);
-
-//
-// config.fatal
-//
-
-assert.equal(shell.config.fatal, false); // default
-
-//
-// config.fatal = false
-//
-shell.mkdir('-p', 'tmp');
-var file = 'tmp/tempscript'+Math.random()+'.js',
-    script = 'require(\'../../global.js\'); config.silent=true; config.fatal=false; cp("this_file_doesnt_exist", "."); echo("got here");';
-script.to(file);
-child.exec('node '+file, function(err, stdout, stderr) {
-  assert.ok(stdout.match('got here'));
-
-  //
-  // config.fatal = true
-  //
-  shell.mkdir('-p', 'tmp');
-  var file = 'tmp/tempscript'+Math.random()+'.js',
-      script = 'require(\'../../global.js\'); config.silent=true; config.fatal=true; cp("this_file_doesnt_exist", "."); echo("got here");';
-  script.to(file);
-  child.exec('node '+file, function(err, stdout, stderr) {
-    assert.ok(!stdout.match('got here'));
-
-    shell.exit(123);
-  });
-});

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/cp.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/cp.js b/node_modules/shelljs/test/cp.js
deleted file mode 100644
index 39b3ba9..0000000
--- a/node_modules/shelljs/test/cp.js
+++ /dev/null
@@ -1,143 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-function numLines(str) {
-  return typeof str === 'string' ? str.match(/\n/g).length : 0;
-}
-
-shell.rm('-rf', 'tmp');
-shell.mkdir('tmp');
-
-//
-// Invalids
-//
-
-shell.cp();
-assert.ok(shell.error());
-
-shell.cp('file1');
-assert.ok(shell.error());
-
-shell.cp('-f');
-assert.ok(shell.error());
-
-shell.rm('-rf', 'tmp/*');
-shell.cp('-@', 'resources/file1', 'tmp/file1'); // option not supported, files OK
-assert.ok(shell.error());
-assert.equal(fs.existsSync('tmp/file1'), false);
-
-shell.cp('-Z', 'asdfasdf', 'tmp/file2'); // option not supported, files NOT OK
-assert.ok(shell.error());
-assert.equal(fs.existsSync('tmp/file2'), false);
-
-shell.cp('asdfasdf', 'tmp'); // source does not exist
-assert.ok(shell.error());
-assert.equal(numLines(shell.error()), 1);
-assert.equal(fs.existsSync('tmp/asdfasdf'), false);
-
-shell.cp('asdfasdf1', 'asdfasdf2', 'tmp'); // sources do not exist
-assert.ok(shell.error());
-assert.equal(numLines(shell.error()), 2);
-assert.equal(fs.existsSync('tmp/asdfasdf1'), false);
-assert.equal(fs.existsSync('tmp/asdfasdf2'), false);
-
-shell.cp('asdfasdf1', 'asdfasdf2', 'resources/file1'); // too many sources (dest is file)
-assert.ok(shell.error());
-
-shell.cp('resources/file1', 'resources/file2'); // dest already exists
-assert.ok(shell.error());
-
-shell.cp('resources/file1', 'resources/file2', 'tmp/a_file'); // too many sources
-assert.ok(shell.error());
-assert.equal(fs.existsSync('tmp/a_file'), false);
-
-//
-// Valids
-//
-
-// simple - to dir
-shell.cp('resources/file1', 'tmp');
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('tmp/file1'), true);
-
-// simple - to file
-shell.cp('resources/file2', 'tmp/file2');
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('tmp/file2'), true);
-
-// simple - file list
-shell.rm('-rf', 'tmp/*');
-shell.cp('resources/file1', 'resources/file2', 'tmp');
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('tmp/file1'), true);
-assert.equal(fs.existsSync('tmp/file2'), true);
-
-// simple - file list, array syntax
-shell.rm('-rf', 'tmp/*');
-shell.cp(['resources/file1', 'resources/file2'], 'tmp');
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('tmp/file1'), true);
-assert.equal(fs.existsSync('tmp/file2'), true);
-
-shell.cp('resources/file2', 'tmp/file3');
-assert.equal(fs.existsSync('tmp/file3'), true);
-shell.cp('-f', 'resources/file2', 'tmp/file3'); // file exists, but -f specified
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('tmp/file3'), true);
-
-// wildcard
-shell.rm('tmp/file1', 'tmp/file2');
-shell.cp('resources/file*', 'tmp');
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('tmp/file1'), true);
-assert.equal(fs.existsSync('tmp/file2'), true);
-
-//recursive, nothing exists
-shell.rm('-rf', 'tmp/*');
-shell.cp('-R', 'resources/cp', 'tmp');
-assert.equal(shell.error(), null);
-assert.equal(shell.ls('-R', 'resources/cp') + '', shell.ls('-R', 'tmp/cp') + '');
-
-//recursive, nothing exists, source ends in '/' (see Github issue #15)
-shell.rm('-rf', 'tmp/*');
-shell.cp('-R', 'resources/cp/', 'tmp/');
-assert.equal(shell.error(), null);
-assert.equal(shell.ls('-R', 'resources/cp') + '', shell.ls('-R', 'tmp') + '');
-
-//recursive, everything exists, no force flag
-shell.rm('-rf', 'tmp/*');
-shell.cp('-R', 'resources/cp', 'tmp');
-shell.cp('-R', 'resources/cp', 'tmp');
-assert.equal(shell.error(), null); // crash test only
-
-//recursive, everything exists, with force flag
-shell.rm('-rf', 'tmp/*');
-shell.cp('-R', 'resources/cp', 'tmp');
-'changing things around'.to('tmp/cp/dir_a/z');
-assert.notEqual(shell.cat('resources/cp/dir_a/z'), shell.cat('tmp/cp/dir_a/z')); // before cp
-shell.cp('-Rf', 'resources/cp', 'tmp');
-assert.equal(shell.error(), null);
-assert.equal(shell.cat('resources/cp/dir_a/z'), shell.cat('tmp/cp/dir_a/z')); // after cp
-
-//recursive, creates dest dir since it's only one level deep (see Github issue #44)
-shell.rm('-rf', 'tmp/*');
-shell.cp('-r', 'resources/issue44/*', 'tmp/dir2');
-assert.equal(shell.error(), null);
-assert.equal(shell.ls('-R', 'resources/issue44') + '', shell.ls('-R', 'tmp/dir2') + '');
-assert.equal(shell.cat('resources/issue44/main.js'), shell.cat('tmp/dir2/main.js'));
-
-//recursive, does *not* create dest dir since it's too deep (see Github issue #44)
-shell.rm('-rf', 'tmp/*');
-shell.cp('-r', 'resources/issue44/*', 'tmp/dir2/dir3');
-assert.ok(shell.error());
-assert.equal(fs.existsSync('tmp/dir2'), false);
-
-shell.exit(123);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/dirs.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/dirs.js b/node_modules/shelljs/test/dirs.js
deleted file mode 100644
index e9f11e6..0000000
--- a/node_modules/shelljs/test/dirs.js
+++ /dev/null
@@ -1,37 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-var root = path.resolve();
-
-shell.pushd('resources/pushd');
-shell.pushd('a');
-
-var trail = [
-  path.resolve(root, 'resources/pushd/a'),
-  path.resolve(root, 'resources/pushd'),
-  root
-];
-
-assert.deepEqual(shell.dirs(), trail);
-
-// Single items
-assert.equal(shell.dirs('+0'), trail[0]);
-assert.equal(shell.dirs('+1'), trail[1]);
-assert.equal(shell.dirs('+2'), trail[2]);
-assert.equal(shell.dirs('-0'), trail[2]);
-assert.equal(shell.dirs('-1'), trail[1]);
-assert.equal(shell.dirs('-2'), trail[0]);
-
-// Clearing items
-assert.deepEqual(shell.dirs('-c'), []);
-assert(!shell.error());
-
-shell.exit(123);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/echo.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/echo.js b/node_modules/shelljs/test/echo.js
deleted file mode 100644
index 82faa51..0000000
--- a/node_modules/shelljs/test/echo.js
+++ /dev/null
@@ -1,50 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs'),
-    child = require('child_process');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-function numLines(str) {
-  return typeof str === 'string' ? str.match(/\n/g).length : 0;
-}
-
-shell.rm('-rf', 'tmp');
-shell.mkdir('tmp');
-
-//
-// Valids
-//
-
-
-// From here on we use child.exec() to intercept the stdout
-
-
-// simple test with defaults
-shell.mkdir('-p', 'tmp');
-var file = 'tmp/tempscript'+Math.random()+'.js',
-    script = 'require(\'../../global.js\'); echo("-asdf", "111");'; // test '-' bug (see issue #20)
-script.to(file);
-child.exec('node '+file, function(err, stdout, stderr) {
-  assert.ok(stdout === '-asdf 111\n' || stdout === '-asdf 111\nundefined\n'); // 'undefined' for v0.4
-
-  // simple test with silent(true)
-  shell.mkdir('-p', 'tmp');
-  var file = 'tmp/tempscript'+Math.random()+'.js',
-      script = 'require(\'../../global.js\'); config.silent=true; echo(555);';
-  script.to(file);
-  child.exec('node '+file, function(err, stdout, stderr) {
-    assert.ok(stdout === '555\n' || stdout === '555\nundefined\n'); // 'undefined' for v0.4
-
-    theEnd();
-  });
-});
-
-function theEnd() {
-  shell.exit(123);
-}

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/env.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/env.js b/node_modules/shelljs/test/env.js
deleted file mode 100644
index 0e041d6..0000000
--- a/node_modules/shelljs/test/env.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert');
-
-shell.config.silent = true;
-
-shell.rm('-rf', 'tmp');
-shell.mkdir('tmp');
-
-//
-// Valids
-//
-
-assert.equal(shell.env['PATH'], process.env['PATH']);
-
-shell.env['SHELLJS_TEST'] = 'hello world';
-assert.equal(shell.env['SHELLJS_TEST'], process.env['SHELLJS_TEST']);
-
-shell.exit(123);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/exec.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/exec.js b/node_modules/shelljs/test/exec.js
deleted file mode 100644
index e721808..0000000
--- a/node_modules/shelljs/test/exec.js
+++ /dev/null
@@ -1,109 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs'),
-    util = require('util'),
-    child = require('child_process');
-
-shell.config.silent = true;
-
-function numLines(str) {
-  return typeof str === 'string' ? str.match(/\n/g).length : 0;
-}
-
-//
-// Invalids
-//
-
-shell.exec();
-assert.ok(shell.error());
-
-var result = shell.exec('asdfasdf'); // could not find command
-assert.ok(result.code > 0);
-
-
-//
-// Valids
-//
-
-//
-// sync
-//
-
-// check if stdout goes to output
-var result = shell.exec('node -e \"console.log(1234);\"');
-assert.equal(shell.error(), null);
-assert.equal(result.code, 0);
-assert.ok(result.output === '1234\n' || result.output === '1234\nundefined\n'); // 'undefined' for v0.4
-
-// check if stderr goes to output
-var result = shell.exec('node -e \"console.error(1234);\"');
-assert.equal(shell.error(), null);
-assert.equal(result.code, 0);
-assert.ok(result.output === '1234\n' || result.output === '1234\nundefined\n'); // 'undefined' for v0.4
-
-// check if stdout + stderr go to output
-var result = shell.exec('node -e \"console.error(1234); console.log(666);\"');
-assert.equal(shell.error(), null);
-assert.equal(result.code, 0);
-assert.ok(result.output === '1234\n666\n' || result.output === '1234\n666\nundefined\n');  // 'undefined' for v0.4
-
-// check exit code
-var result = shell.exec('node -e \"process.exit(12);\"');
-assert.equal(shell.error(), null);
-assert.equal(result.code, 12);
-
-// interaction with cd
-shell.cd('resources/external');
-var result = shell.exec('node node_script.js');
-assert.equal(shell.error(), null);
-assert.equal(result.code, 0);
-assert.equal(result.output, 'node_script_1234\n');
-shell.cd('../..');
-
-// check quotes escaping
-var result = shell.exec( util.format('node -e "console.log(%s);"', "\\\"\\'+\\'_\\'+\\'\\\"") );
-assert.equal(shell.error(), null);
-assert.equal(result.code, 0);
-assert.equal(result.output, "'+'_'+'\n");
-
-//
-// async
-//
-
-// no callback
-var c = shell.exec('node -e \"console.log(1234)\"', {async:true});
-assert.equal(shell.error(), null);
-assert.ok('stdout' in c, 'async exec returns child process object');
-
-//
-// callback as 2nd argument
-//
-shell.exec('node -e \"console.log(5678);\"', function(code, output) {
-  assert.equal(code, 0);
-  assert.ok(output === '5678\n' || output === '5678\nundefined\n');  // 'undefined' for v0.4
-
-  //
-  // callback as 3rd argument
-  //
-  shell.exec('node -e \"console.log(5566);\"', {async:true}, function(code, output) {
-    assert.equal(code, 0);
-    assert.ok(output === '5566\n' || output === '5566\nundefined\n');  // 'undefined' for v0.4
-
-    //
-    // callback as 3rd argument (slient:true)
-    //
-    shell.exec('node -e \"console.log(5678);\"', {silent:true}, function(code, output) {
-      assert.equal(code, 0);
-      assert.ok(output === '5678\n' || output === '5678\nundefined\n');  // 'undefined' for v0.4
-
-      shell.exit(123);
-
-    });
-
-  });
-
-});
-
-assert.equal(shell.error(), null);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/find.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/find.js b/node_modules/shelljs/test/find.js
deleted file mode 100644
index d375f86..0000000
--- a/node_modules/shelljs/test/find.js
+++ /dev/null
@@ -1,56 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-shell.rm('-rf', 'tmp');
-shell.mkdir('tmp');
-
-//
-// Invalids
-//
-
-var result = shell.find(); // no paths given
-assert.ok(shell.error());
-
-//
-// Valids
-//
-
-// current path
-shell.cd('resources/find');
-var result = shell.find('.');
-assert.equal(shell.error(), null);
-assert.equal(result.indexOf('.hidden') > -1, true);
-assert.equal(result.indexOf('dir1/dir11/a_dir11') > -1, true);
-assert.equal(result.length, 11);
-shell.cd('../..');
-
-// simple path
-var result = shell.find('resources/find');
-assert.equal(shell.error(), null);
-assert.equal(result.indexOf('resources/find/.hidden') > -1, true);
-assert.equal(result.indexOf('resources/find/dir1/dir11/a_dir11') > -1, true);
-assert.equal(result.length, 11);
-
-// multiple paths - comma
-var result = shell.find('resources/find/dir1', 'resources/find/dir2');
-assert.equal(shell.error(), null);
-assert.equal(result.indexOf('resources/find/dir1/dir11/a_dir11') > -1, true);
-assert.equal(result.indexOf('resources/find/dir2/a_dir1') > -1, true);
-assert.equal(result.length, 6);
-
-// multiple paths - array
-var result = shell.find(['resources/find/dir1', 'resources/find/dir2']);
-assert.equal(shell.error(), null);
-assert.equal(result.indexOf('resources/find/dir1/dir11/a_dir11') > -1, true);
-assert.equal(result.indexOf('resources/find/dir2/a_dir1') > -1, true);
-assert.equal(result.length, 6);
-
-shell.exit(123);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/grep.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/grep.js b/node_modules/shelljs/test/grep.js
deleted file mode 100644
index 71db982..0000000
--- a/node_modules/shelljs/test/grep.js
+++ /dev/null
@@ -1,59 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-function numLines(str) {
-  return typeof str === 'string' ? str.match(/\n/g).length : 0;
-}
-
-shell.rm('-rf', 'tmp');
-shell.mkdir('tmp');
-
-//
-// Invalids
-//
-
-shell.grep();
-assert.ok(shell.error());
-
-shell.grep(/asdf/g); // too few args
-assert.ok(shell.error());
-
-assert.equal(fs.existsSync('/asdfasdf'), false); // sanity check
-shell.grep(/asdf/g, '/asdfasdf'); // no such file
-assert.ok(shell.error());
-
-//
-// Valids
-//
-
-var result = shell.grep('line', 'resources/a.txt');
-assert.equal(shell.error(), null);
-assert.equal(result.split('\n').length - 1, 4);
-
-var result = shell.grep('-v', 'line', 'resources/a.txt');
-assert.equal(shell.error(), null);
-assert.equal(result.split('\n').length - 1, 8);
-
-var result = shell.grep('line one', 'resources/a.txt');
-assert.equal(shell.error(), null);
-assert.equal(result, 'This is line one\n');
-
-// multiple files
-var result = shell.grep(/test/, 'resources/file1.txt', 'resources/file2.txt');
-assert.equal(shell.error(), null);
-assert.equal(result, 'test1\ntest2\n');
-
-// multiple files, array syntax
-var result = shell.grep(/test/, ['resources/file1.txt', 'resources/file2.txt']);
-assert.equal(shell.error(), null);
-assert.equal(result, 'test1\ntest2\n');
-
-shell.exit(123);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/ls.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/ls.js b/node_modules/shelljs/test/ls.js
deleted file mode 100644
index 5067b7d..0000000
--- a/node_modules/shelljs/test/ls.js
+++ /dev/null
@@ -1,202 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-function numLines(str) {
-  return typeof str === 'string' ? str.match(/\n/g).length : 0;
-}
-
-shell.rm('-rf', 'tmp');
-shell.mkdir('tmp');
-
-//
-// Invalids
-//
-
-assert.equal(fs.existsSync('/asdfasdf'), false); // sanity check
-var result = shell.ls('/asdfasdf'); // no such file or dir
-assert.ok(shell.error());
-assert.equal(result.length, 0);
-
-//
-// Valids
-//
-
-var result = shell.ls();
-assert.equal(shell.error(), null);
-
-var result = shell.ls('/');
-assert.equal(shell.error(), null);
-
-// no args
-shell.cd('resources/ls');
-var result = shell.ls();
-assert.equal(shell.error(), null);
-assert.equal(result.indexOf('file1') > -1, true);
-assert.equal(result.indexOf('file2') > -1, true);
-assert.equal(result.indexOf('file1.js') > -1, true);
-assert.equal(result.indexOf('file2.js') > -1, true);
-assert.equal(result.indexOf('filename(with)[chars$]^that.must+be-escaped') > -1, true);
-assert.equal(result.indexOf('a_dir') > -1, true);
-assert.equal(result.length, 6);
-shell.cd('../..');
-
-// simple arg
-var result = shell.ls('resources/ls');
-assert.equal(shell.error(), null);
-assert.equal(result.indexOf('file1') > -1, true);
-assert.equal(result.indexOf('file2') > -1, true);
-assert.equal(result.indexOf('file1.js') > -1, true);
-assert.equal(result.indexOf('file2.js') > -1, true);
-assert.equal(result.indexOf('filename(with)[chars$]^that.must+be-escaped') > -1, true);
-assert.equal(result.indexOf('a_dir') > -1, true);
-assert.equal(result.length, 6);
-
-// no args, 'all' option
-shell.cd('resources/ls');
-var result = shell.ls('-A');
-assert.equal(shell.error(), null);
-assert.equal(result.indexOf('file1') > -1, true);
-assert.equal(result.indexOf('file2') > -1, true);
-assert.equal(result.indexOf('file1.js') > -1, true);
-assert.equal(result.indexOf('file2.js') > -1, true);
-assert.equal(result.indexOf('filename(with)[chars$]^that.must+be-escaped') > -1, true);
-assert.equal(result.indexOf('a_dir') > -1, true);
-assert.equal(result.indexOf('.hidden_file') > -1, true);
-assert.equal(result.indexOf('.hidden_dir') > -1, true);
-assert.equal(result.length, 8);
-shell.cd('../..');
-
-// no args, 'all' option
-shell.cd('resources/ls');
-var result = shell.ls('-a'); // (deprecated) backwards compatibility test
-assert.equal(shell.error(), null);
-assert.equal(result.indexOf('file1') > -1, true);
-assert.equal(result.indexOf('file2') > -1, true);
-assert.equal(result.indexOf('file1.js') > -1, true);
-assert.equal(result.indexOf('file2.js') > -1, true);
-assert.equal(result.indexOf('filename(with)[chars$]^that.must+be-escaped') > -1, true);
-assert.equal(result.indexOf('a_dir') > -1, true);
-assert.equal(result.indexOf('.hidden_file') > -1, true);
-assert.equal(result.indexOf('.hidden_dir') > -1, true);
-assert.equal(result.length, 8);
-shell.cd('../..');
-
-// wildcard, simple
-var result = shell.ls('resources/ls/*');
-assert.equal(shell.error(), null);
-assert.equal(result.indexOf('resources/ls/file1') > -1, true);
-assert.equal(result.indexOf('resources/ls/file2') > -1, true);
-assert.equal(result.indexOf('resources/ls/file1.js') > -1, true);
-assert.equal(result.indexOf('resources/ls/file2.js') > -1, true);
-assert.equal(result.indexOf('resources/ls/filename(with)[chars$]^that.must+be-escaped') > -1, true);
-assert.equal(result.indexOf('resources/ls/a_dir') > -1, true);
-assert.equal(result.length, 6);
-
-// wildcard, hidden only
-var result = shell.ls('resources/ls/.*');
-assert.equal(shell.error(), null);
-assert.equal(result.indexOf('resources/ls/.hidden_file') > -1, true);
-assert.equal(result.indexOf('resources/ls/.hidden_dir') > -1, true);
-assert.equal(result.length, 2);
-
-// wildcard, mid-file
-var result = shell.ls('resources/ls/f*le*');
-assert.equal(shell.error(), null);
-assert.equal(result.length, 5);
-assert.equal(result.indexOf('resources/ls/file1') > -1, true);
-assert.equal(result.indexOf('resources/ls/file2') > -1, true);
-assert.equal(result.indexOf('resources/ls/file1.js') > -1, true);
-assert.equal(result.indexOf('resources/ls/file2.js') > -1, true);
-assert.equal(result.indexOf('resources/ls/filename(with)[chars$]^that.must+be-escaped') > -1, true);
-
-// wildcard, mid-file with dot (should escape dot for regex)
-var result = shell.ls('resources/ls/f*le*.js');
-assert.equal(shell.error(), null);
-assert.equal(result.length, 2);
-assert.equal(result.indexOf('resources/ls/file1.js') > -1, true);
-assert.equal(result.indexOf('resources/ls/file2.js') > -1, true);
-
-// wildcard, should not do partial matches
-var result = shell.ls('resources/ls/*.j'); // shouldn't get .js
-assert.equal(shell.error(), null);
-assert.equal(result.length, 0);
-
-// wildcard, all files with extension
-var result = shell.ls('resources/ls/*.*');
-assert.equal(shell.error(), null);
-assert.equal(result.length, 3);
-assert.equal(result.indexOf('resources/ls/file1.js') > -1, true);
-assert.equal(result.indexOf('resources/ls/file2.js') > -1, true);
-assert.equal(result.indexOf('resources/ls/filename(with)[chars$]^that.must+be-escaped') > -1, true);
-
-// wildcard, with additional path
-var result = shell.ls('resources/ls/f*le*.js', 'resources/ls/a_dir');
-assert.equal(shell.error(), null);
-assert.equal(result.length, 4);
-assert.equal(result.indexOf('resources/ls/file1.js') > -1, true);
-assert.equal(result.indexOf('resources/ls/file2.js') > -1, true);
-assert.equal(result.indexOf('b_dir') > -1, true); // no wildcard == no path prefix
-assert.equal(result.indexOf('nada') > -1, true); // no wildcard == no path prefix
-
-// wildcard for both paths
-var result = shell.ls('resources/ls/f*le*.js', 'resources/ls/a_dir/*');
-assert.equal(shell.error(), null);
-assert.equal(result.length, 4);
-assert.equal(result.indexOf('resources/ls/file1.js') > -1, true);
-assert.equal(result.indexOf('resources/ls/file2.js') > -1, true);
-assert.equal(result.indexOf('resources/ls/a_dir/b_dir') > -1, true);
-assert.equal(result.indexOf('resources/ls/a_dir/nada') > -1, true);
-
-// wildcard for both paths, array
-var result = shell.ls(['resources/ls/f*le*.js', 'resources/ls/a_dir/*']);
-assert.equal(shell.error(), null);
-assert.equal(result.length, 4);
-assert.equal(result.indexOf('resources/ls/file1.js') > -1, true);
-assert.equal(result.indexOf('resources/ls/file2.js') > -1, true);
-assert.equal(result.indexOf('resources/ls/a_dir/b_dir') > -1, true);
-assert.equal(result.indexOf('resources/ls/a_dir/nada') > -1, true);
-
-// recursive, no path
-shell.cd('resources/ls');
-var result = shell.ls('-R');
-assert.equal(shell.error(), null);
-assert.equal(result.indexOf('a_dir') > -1, true);
-assert.equal(result.indexOf('a_dir/b_dir') > -1, true);
-assert.equal(result.indexOf('a_dir/b_dir/z') > -1, true);
-assert.equal(result.length, 9);
-shell.cd('../..');
-
-// recusive, path given
-var result = shell.ls('-R', 'resources/ls');
-assert.equal(shell.error(), null);
-assert.equal(result.indexOf('a_dir') > -1, true);
-assert.equal(result.indexOf('a_dir/b_dir') > -1, true);
-assert.equal(result.indexOf('a_dir/b_dir/z') > -1, true);
-assert.equal(result.length, 9);
-
-// recusive, path given - 'all' flag
-var result = shell.ls('-RA', 'resources/ls');
-assert.equal(shell.error(), null);
-assert.equal(result.indexOf('a_dir') > -1, true);
-assert.equal(result.indexOf('a_dir/b_dir') > -1, true);
-assert.equal(result.indexOf('a_dir/b_dir/z') > -1, true);
-assert.equal(result.indexOf('a_dir/.hidden_dir/nada') > -1, true);
-assert.equal(result.length, 14);
-
-// recursive, wildcard
-var result = shell.ls('-R', 'resources/ls/*');
-assert.equal(shell.error(), null);
-assert.equal(result.indexOf('resources/ls/a_dir') > -1, true);
-assert.equal(result.indexOf('resources/ls/a_dir/b_dir') > -1, true);
-assert.equal(result.indexOf('resources/ls/a_dir/b_dir/z') > -1, true);
-assert.equal(result.length, 9);
-
-shell.exit(123);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/make.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/make.js b/node_modules/shelljs/test/make.js
deleted file mode 100644
index 3edbd8c..0000000
--- a/node_modules/shelljs/test/make.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var shell = require('..'),
-    child = require('child_process'),
-    assert = require('assert');
-
-shell.mkdir('-p', 'tmp');
-var file = 'tmp/tempscript'+Math.random()+'.js',
-    script = 'require(\'../../make.js\');' +
-             'target.all=function(){' +
-             '  echo("first"); '+
-             '  cp("this_file_doesnt_exist", ".");' +
-             '  echo("second");' +
-             '}';
-
-script.to(file);
-child.exec('node '+file, function(err, stdout, stderr) {
-  assert.ok(stdout.match('first'));
-  assert.ok(!stdout.match('second')); // Make should die on errors, so this should never get echoed
-
-  shell.exit(123);
-});

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/test/mkdir.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/test/mkdir.js b/node_modules/shelljs/test/mkdir.js
deleted file mode 100644
index 1f93422..0000000
--- a/node_modules/shelljs/test/mkdir.js
+++ /dev/null
@@ -1,79 +0,0 @@
-var shell = require('..');
-
-var assert = require('assert'),
-    path = require('path'),
-    fs = require('fs');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-shell.config.silent = true;
-
-function numLines(str) {
-  return typeof str === 'string' ? str.match(/\n/g).length : 0;
-}
-
-shell.rm('-rf', 'tmp');
-shell.mkdir('tmp');
-
-//
-// Invalids
-//
-
-shell.mkdir();
-assert.ok(shell.error());
-
-var mtime = fs.statSync('tmp').mtime.toString();
-shell.mkdir('tmp'); // dir already exists
-assert.ok(shell.error());
-assert.equal(fs.statSync('tmp').mtime.toString(), mtime); // didn't mess with dir
-
-assert.equal(fs.existsSync('/asdfasdf'), false); // sanity check
-shell.mkdir('/asdfasdf/asdfasdf'); // root path does not exist
-assert.ok(shell.error());
-assert.equal(fs.existsSync('/asdfasdf'), false);
-
-//
-// Valids
-//
-
-assert.equal(fs.existsSync('tmp/t1'), false);
-shell.mkdir('tmp/t1'); // simple dir
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('tmp/t1'), true);
-
-assert.equal(fs.existsSync('tmp/t2'), false);
-assert.equal(fs.existsSync('tmp/t3'), false);
-shell.mkdir('tmp/t2', 'tmp/t3'); // multiple dirs
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('tmp/t2'), true);
-assert.equal(fs.existsSync('tmp/t3'), true);
-
-assert.equal(fs.existsSync('tmp/t1'), true);
-assert.equal(fs.existsSync('tmp/t4'), false);
-shell.mkdir('tmp/t1', 'tmp/t4'); // one dir exists, one doesn't
-assert.equal(numLines(shell.error()), 1);
-assert.equal(fs.existsSync('tmp/t1'), true);
-assert.equal(fs.existsSync('tmp/t4'), true);
-
-assert.equal(fs.existsSync('tmp/a'), false);
-shell.mkdir('-p', 'tmp/a/b/c');
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('tmp/a/b/c'), true);
-shell.rm('-Rf', 'tmp/a'); // revert
-
-// multiple dirs
-shell.mkdir('-p', 'tmp/zzza', 'tmp/zzzb', 'tmp/zzzc');
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('tmp/zzza'), true);
-assert.equal(fs.existsSync('tmp/zzzb'), true);
-assert.equal(fs.existsSync('tmp/zzzc'), true);
-
-// multiple dirs, array syntax
-shell.mkdir('-p', ['tmp/yyya', 'tmp/yyyb', 'tmp/yyyc']);
-assert.equal(shell.error(), null);
-assert.equal(fs.existsSync('tmp/yyya'), true);
-assert.equal(fs.existsSync('tmp/yyyb'), true);
-assert.equal(fs.existsSync('tmp/yyyc'), true);
-
-shell.exit(123);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[04/14] cordova-browser git commit: CB-10788 Updated checked in node_modules

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/build/output.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/build/output.js b/node_modules/shelljs/build/output.js
new file mode 100644
index 0000000..1b778b9
--- /dev/null
+++ b/node_modules/shelljs/build/output.js
@@ -0,0 +1,2411 @@
+var common = require('./common');
+var fs = require('fs');
+
+//@
+//@ ### cat(file [, file ...])
+//@ ### cat(file_array)
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ var str = cat('file*.txt');
+//@ var str = cat('file1', 'file2');
+//@ var str = cat(['file1', 'file2']); // same as above
+//@ ```
+//@
+//@ Returns a string containing the given file, or a concatenated string
+//@ containing the files if more than one file is given (a new line character is
+//@ introduced between each file). Wildcard `*` accepted.
+function _cat(options, files) {
+  var cat = '';
+
+  if (!files)
+    common.error('no paths given');
+
+  if (typeof files === 'string')
+    files = [].slice.call(arguments, 1);
+  // if it's array leave it as it is
+
+  files = common.expand(files);
+
+  files.forEach(function(file) {
+    if (!fs.existsSync(file))
+      common.error('no such file or directory: ' + file);
+
+    cat += fs.readFileSync(file, 'utf8');
+  });
+
+  return common.ShellString(cat);
+}
+module.exports = _cat;
+
+var fs = require('fs');
+var common = require('./common');
+
+//@
+//@ ### cd([dir])
+//@ Changes to directory `dir` for the duration of the script. Changes to home
+//@ directory if no argument is supplied.
+function _cd(options, dir) {
+  if (!dir)
+    dir = common.getUserHome();
+
+  if (dir === '-') {
+    if (!common.state.previousDir)
+      common.error('could not find previous directory');
+    else
+      dir = common.state.previousDir;
+  }
+
+  if (!fs.existsSync(dir))
+    common.error('no such file or directory: ' + dir);
+
+  if (!fs.statSync(dir).isDirectory())
+    common.error('not a directory: ' + dir);
+
+  common.state.previousDir = process.cwd();
+  process.chdir(dir);
+}
+module.exports = _cd;
+
+var common = require('./common');
+var fs = require('fs');
+var path = require('path');
+
+var PERMS = (function (base) {
+  return {
+    OTHER_EXEC  : base.EXEC,
+    OTHER_WRITE : base.WRITE,
+    OTHER_READ  : base.READ,
+
+    GROUP_EXEC  : base.EXEC  << 3,
+    GROUP_WRITE : base.WRITE << 3,
+    GROUP_READ  : base.READ << 3,
+
+    OWNER_EXEC  : base.EXEC << 6,
+    OWNER_WRITE : base.WRITE << 6,
+    OWNER_READ  : base.READ << 6,
+
+    // Literal octal numbers are apparently not allowed in "strict" javascript.  Using parseInt is
+    // the preferred way, else a jshint warning is thrown.
+    STICKY      : parseInt('01000', 8),
+    SETGID      : parseInt('02000', 8),
+    SETUID      : parseInt('04000', 8),
+
+    TYPE_MASK   : parseInt('0770000', 8)
+  };
+})({
+  EXEC  : 1,
+  WRITE : 2,
+  READ  : 4
+});
+
+//@
+//@ ### chmod(octal_mode || octal_string, file)
+//@ ### chmod(symbolic_mode, file)
+//@
+//@ Available options:
+//@
+//@ + `-v`: output a diagnostic for every file processed//@
+//@ + `-c`: like verbose but report only when a change is made//@
+//@ + `-R`: change files and directories recursively//@
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ chmod(755, '/Users/brandon');
+//@ chmod('755', '/Users/brandon'); // same as above
+//@ chmod('u+x', '/Users/brandon');
+//@ ```
+//@
+//@ Alters the permissions of a file or directory by either specifying the
+//@ absolute permissions in octal form or expressing the changes in symbols.
+//@ This command tries to mimic the POSIX behavior as much as possible.
+//@ Notable exceptions:
+//@
+//@ + In symbolic modes, 'a-r' and '-r' are identical.  No consideration is
+//@   given to the umask.
+//@ + There is no "quiet" option since default behavior is to run silent.
+function _chmod(options, mode, filePattern) {
+  if (!filePattern) {
+    if (options.length > 0 && options.charAt(0) === '-') {
+      // Special case where the specified file permissions started with - to subtract perms, which
+      // get picked up by the option parser as command flags.
+      // If we are down by one argument and options starts with -, shift everything over.
+      filePattern = mode;
+      mode = options;
+      options = '';
+    }
+    else {
+      common.error('You must specify a file.');
+    }
+  }
+
+  options = common.parseOptions(options, {
+    'R': 'recursive',
+    'c': 'changes',
+    'v': 'verbose'
+  });
+
+  if (typeof filePattern === 'string') {
+    filePattern = [ filePattern ];
+  }
+
+  var files;
+
+  if (options.recursive) {
+    files = [];
+    common.expand(filePattern).forEach(function addFile(expandedFile) {
+      var stat = fs.lstatSync(expandedFile);
+
+      if (!stat.isSymbolicLink()) {
+        files.push(expandedFile);
+
+        if (stat.isDirectory()) {  // intentionally does not follow symlinks.
+          fs.readdirSync(expandedFile).forEach(function (child) {
+            addFile(expandedFile + '/' + child);
+          });
+        }
+      }
+    });
+  }
+  else {
+    files = common.expand(filePattern);
+  }
+
+  files.forEach(function innerChmod(file) {
+    file = path.resolve(file);
+    if (!fs.existsSync(file)) {
+      common.error('File not found: ' + file);
+    }
+
+    // When recursing, don't follow symlinks.
+    if (options.recursive && fs.lstatSync(file).isSymbolicLink()) {
+      return;
+    }
+
+    var stat = fs.statSync(file);
+    var isDir = stat.isDirectory();
+    var perms = stat.mode;
+    var type = perms & PERMS.TYPE_MASK;
+
+    var newPerms = perms;
+
+    if (isNaN(parseInt(mode, 8))) {
+      // parse options
+      mode.split(',').forEach(function (symbolicMode) {
+        /*jshint regexdash:true */
+        var pattern = /([ugoa]*)([=\+-])([rwxXst]*)/i;
+        var matches = pattern.exec(symbolicMode);
+
+        if (matches) {
+          var applyTo = matches[1];
+          var operator = matches[2];
+          var change = matches[3];
+
+          var changeOwner = applyTo.indexOf('u') != -1 || applyTo === 'a' || applyTo === '';
+          var changeGroup = applyTo.indexOf('g') != -1 || applyTo === 'a' || applyTo === '';
+          var changeOther = applyTo.indexOf('o') != -1 || applyTo === 'a' || applyTo === '';
+
+          var changeRead    = change.indexOf('r') != -1;
+          var changeWrite   = change.indexOf('w') != -1;
+          var changeExec    = change.indexOf('x') != -1;
+          var changeExecDir = change.indexOf('X') != -1;
+          var changeSticky  = change.indexOf('t') != -1;
+          var changeSetuid  = change.indexOf('s') != -1;
+
+          if (changeExecDir && isDir)
+            changeExec = true;
+
+          var mask = 0;
+          if (changeOwner) {
+            mask |= (changeRead ? PERMS.OWNER_READ : 0) + (changeWrite ? PERMS.OWNER_WRITE : 0) + (changeExec ? PERMS.OWNER_EXEC : 0) + (changeSetuid ? PERMS.SETUID : 0);
+          }
+          if (changeGroup) {
+            mask |= (changeRead ? PERMS.GROUP_READ : 0) + (changeWrite ? PERMS.GROUP_WRITE : 0) + (changeExec ? PERMS.GROUP_EXEC : 0) + (changeSetuid ? PERMS.SETGID : 0);
+          }
+          if (changeOther) {
+            mask |= (changeRead ? PERMS.OTHER_READ : 0) + (changeWrite ? PERMS.OTHER_WRITE : 0) + (changeExec ? PERMS.OTHER_EXEC : 0);
+          }
+
+          // Sticky bit is special - it's not tied to user, group or other.
+          if (changeSticky) {
+            mask |= PERMS.STICKY;
+          }
+
+          switch (operator) {
+            case '+':
+              newPerms |= mask;
+              break;
+
+            case '-':
+              newPerms &= ~mask;
+              break;
+
+            case '=':
+              newPerms = type + mask;
+
+              // According to POSIX, when using = to explicitly set the permissions, setuid and setgid can never be cleared.
+              if (fs.statSync(file).isDirectory()) {
+                newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms;
+              }
+              break;
+          }
+
+          if (options.verbose) {
+            console.log(file + ' -> ' + newPerms.toString(8));
+          }
+
+          if (perms != newPerms) {
+            if (!options.verbose && options.changes) {
+              console.log(file + ' -> ' + newPerms.toString(8));
+            }
+            fs.chmodSync(file, newPerms);
+            perms = newPerms; // for the next round of changes!
+          }
+        }
+        else {
+          common.error('Invalid symbolic mode change: ' + symbolicMode);
+        }
+      });
+    }
+    else {
+      // they gave us a full number
+      newPerms = type + parseInt(mode, 8);
+
+      // POSIX rules are that setuid and setgid can only be added using numeric form, but not cleared.
+      if (fs.statSync(file).isDirectory()) {
+        newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms;
+      }
+
+      fs.chmodSync(file, newPerms);
+    }
+  });
+}
+module.exports = _chmod;
+
+var os = require('os');
+var fs = require('fs');
+var _ls = require('./ls');
+
+// Module globals
+var config = {
+  silent: false,
+  fatal: false,
+  verbose: false,
+};
+exports.config = config;
+
+var state = {
+  error: null,
+  currentCmd: 'shell.js',
+  previousDir: null,
+  tempDir: null
+};
+exports.state = state;
+
+var platform = os.type().match(/^Win/) ? 'win' : 'unix';
+exports.platform = platform;
+
+function log() {
+  if (!config.silent)
+    console.error.apply(console, arguments);
+}
+exports.log = log;
+
+// Shows error message. Throws unless _continue or config.fatal are true
+function error(msg, _continue) {
+  if (state.error === null)
+    state.error = '';
+  var log_entry = state.currentCmd + ': ' + msg;
+  if (state.error === '')
+    state.error = log_entry;
+  else
+    state.error += '\n' + log_entry;
+
+  if (msg.length > 0)
+    log(log_entry);
+
+  if (config.fatal)
+    process.exit(1);
+
+  if (!_continue)
+    throw '';
+}
+exports.error = error;
+
+// In the future, when Proxies are default, we can add methods like `.to()` to primitive strings.
+// For now, this is a dummy function to bookmark places we need such strings
+function ShellString(str) {
+  return str;
+}
+exports.ShellString = ShellString;
+
+// Return the home directory in a platform-agnostic way, with consideration for
+// older versions of node
+function getUserHome() {
+  var result;
+  if (os.homedir)
+    result = os.homedir(); // node 3+
+  else
+    result = process.env[(process.platform === 'win32') ? 'USERPROFILE' : 'HOME'];
+  return result;
+}
+exports.getUserHome = getUserHome;
+
+// Returns {'alice': true, 'bob': false} when passed a dictionary, e.g.:
+//   parseOptions('-a', {'a':'alice', 'b':'bob'});
+function parseOptions(str, map) {
+  if (!map)
+    error('parseOptions() internal error: no map given');
+
+  // All options are false by default
+  var options = {};
+  for (var letter in map) {
+    if (!map[letter].match('^!'))
+      options[map[letter]] = false;
+  }
+
+  if (!str)
+    return options; // defaults
+
+  if (typeof str !== 'string')
+    error('parseOptions() internal error: wrong str');
+
+  // e.g. match[1] = 'Rf' for str = '-Rf'
+  var match = str.match(/^\-(.+)/);
+  if (!match)
+    return options;
+
+  // e.g. chars = ['R', 'f']
+  var chars = match[1].split('');
+
+  var opt;
+  chars.forEach(function(c) {
+    if (c in map) {
+      opt = map[c];
+      if (opt.match('^!'))
+        options[opt.slice(1, opt.length-1)] = false;
+      else
+        options[opt] = true;
+    } else {
+      error('option not recognized: '+c);
+    }
+  });
+
+  return options;
+}
+exports.parseOptions = parseOptions;
+
+// Expands wildcards with matching (ie. existing) file names.
+// For example:
+//   expand(['file*.js']) = ['file1.js', 'file2.js', ...]
+//   (if the files 'file1.js', 'file2.js', etc, exist in the current dir)
+function expand(list) {
+  var expanded = [];
+  list.forEach(function(listEl) {
+    // Wildcard present on directory names ?
+    if(listEl.search(/\*[^\/]*\//) > -1 || listEl.search(/\*\*[^\/]*\//) > -1) {
+      var match = listEl.match(/^([^*]+\/|)(.*)/);
+      var root = match[1];
+      var rest = match[2];
+      var restRegex = rest.replace(/\*\*/g, ".*").replace(/\*/g, "[^\\/]*");
+      restRegex = new RegExp(restRegex);
+
+      _ls('-R', root).filter(function (e) {
+        return restRegex.test(e);
+      }).forEach(function(file) {
+        expanded.push(file);
+      });
+    }
+    // Wildcard present on file names ?
+    else if (listEl.search(/\*/) > -1) {
+      _ls('', listEl).forEach(function(file) {
+        expanded.push(file);
+      });
+    } else {
+      expanded.push(listEl);
+    }
+  });
+  return expanded;
+}
+exports.expand = expand;
+
+// Normalizes _unlinkSync() across platforms to match Unix behavior, i.e.
+// file can be unlinked even if it's read-only, see https://github.com/joyent/node/issues/3006
+function unlinkSync(file) {
+  try {
+    fs.unlinkSync(file);
+  } catch(e) {
+    // Try to override file permission
+    if (e.code === 'EPERM') {
+      fs.chmodSync(file, '0666');
+      fs.unlinkSync(file);
+    } else {
+      throw e;
+    }
+  }
+}
+exports.unlinkSync = unlinkSync;
+
+// e.g. 'shelljs_a5f185d0443ca...'
+function randomFileName() {
+  function randomHash(count) {
+    if (count === 1)
+      return parseInt(16*Math.random(), 10).toString(16);
+    else {
+      var hash = '';
+      for (var i=0; i<count; i++)
+        hash += randomHash(1);
+      return hash;
+    }
+  }
+
+  return 'shelljs_'+randomHash(20);
+}
+exports.randomFileName = randomFileName;
+
+// extend(target_obj, source_obj1 [, source_obj2 ...])
+// Shallow extend, e.g.:
+//    extend({A:1}, {b:2}, {c:3}) returns {A:1, b:2, c:3}
+function extend(target) {
+  var sources = [].slice.call(arguments, 1);
+  sources.forEach(function(source) {
+    for (var key in source)
+      target[key] = source[key];
+  });
+
+  return target;
+}
+exports.extend = extend;
+
+// Common wrapper for all Unix-like commands
+function wrap(cmd, fn, options) {
+  return function() {
+    var retValue = null;
+
+    state.currentCmd = cmd;
+    state.error = null;
+
+    try {
+      var args = [].slice.call(arguments, 0);
+
+      if (config.verbose) {
+        args.unshift(cmd);
+        console.log.apply(console, args);
+        args.shift();
+      }
+
+      if (options && options.notUnix) {
+        retValue = fn.apply(this, args);
+      } else {
+        if (args.length === 0 || typeof args[0] !== 'string' || args[0].length <= 1 || args[0][0] !== '-')
+          args.unshift(''); // only add dummy option if '-option' not already present
+        // Expand the '~' if appropriate
+        var homeDir = getUserHome();
+        args = args.map(function(arg) {
+          if (typeof arg === 'string' && arg.slice(0, 2) === '~/' || arg === '~')
+            return arg.replace(/^~/, homeDir);
+          else
+            return arg;
+        });
+        retValue = fn.apply(this, args);
+      }
+    } catch (e) {
+      if (!state.error) {
+        // If state.error hasn't been set it's an error thrown by Node, not us - probably a bug...
+        console.log('shell.js: internal error');
+        console.log(e.stack || e);
+        process.exit(1);
+      }
+      if (config.fatal)
+        throw e;
+    }
+
+    state.currentCmd = 'shell.js';
+    return retValue;
+  };
+} // wrap
+exports.wrap = wrap;
+
+var fs = require('fs');
+var path = require('path');
+var common = require('./common');
+var os = require('os');
+
+// Buffered file copy, synchronous
+// (Using readFileSync() + writeFileSync() could easily cause a memory overflow
+//  with large files)
+function copyFileSync(srcFile, destFile) {
+  if (!fs.existsSync(srcFile))
+    common.error('copyFileSync: no such file or directory: ' + srcFile);
+
+  var BUF_LENGTH = 64*1024,
+      buf = new Buffer(BUF_LENGTH),
+      bytesRead = BUF_LENGTH,
+      pos = 0,
+      fdr = null,
+      fdw = null;
+
+  try {
+    fdr = fs.openSync(srcFile, 'r');
+  } catch(e) {
+    common.error('copyFileSync: could not read src file ('+srcFile+')');
+  }
+
+  try {
+    fdw = fs.openSync(destFile, 'w');
+  } catch(e) {
+    common.error('copyFileSync: could not write to dest file (code='+e.code+'):'+destFile);
+  }
+
+  while (bytesRead === BUF_LENGTH) {
+    bytesRead = fs.readSync(fdr, buf, 0, BUF_LENGTH, pos);
+    fs.writeSync(fdw, buf, 0, bytesRead);
+    pos += bytesRead;
+  }
+
+  fs.closeSync(fdr);
+  fs.closeSync(fdw);
+
+  fs.chmodSync(destFile, fs.statSync(srcFile).mode);
+}
+
+// Recursively copies 'sourceDir' into 'destDir'
+// Adapted from https://github.com/ryanmcgrath/wrench-js
+//
+// Copyright (c) 2010 Ryan McGrath
+// Copyright (c) 2012 Artur Adib
+//
+// Licensed under the MIT License
+// http://www.opensource.org/licenses/mit-license.php
+function cpdirSyncRecursive(sourceDir, destDir, opts) {
+  if (!opts) opts = {};
+
+  /* Create the directory where all our junk is moving to; read the mode of the source directory and mirror it */
+  var checkDir = fs.statSync(sourceDir);
+  try {
+    fs.mkdirSync(destDir, checkDir.mode);
+  } catch (e) {
+    //if the directory already exists, that's okay
+    if (e.code !== 'EEXIST') throw e;
+  }
+
+  var files = fs.readdirSync(sourceDir);
+
+  for (var i = 0; i < files.length; i++) {
+    var srcFile = sourceDir + "/" + files[i];
+    var destFile = destDir + "/" + files[i];
+    var srcFileStat = fs.lstatSync(srcFile);
+
+    if (srcFileStat.isDirectory()) {
+      /* recursion this thing right on back. */
+      cpdirSyncRecursive(srcFile, destFile, opts);
+    } else if (srcFileStat.isSymbolicLink()) {
+      var symlinkFull = fs.readlinkSync(srcFile);
+      fs.symlinkSync(symlinkFull, destFile, os.platform() === "win32" ? "junction" : null);
+    } else {
+      /* At this point, we've hit a file actually worth copying... so copy it on over. */
+      if (fs.existsSync(destFile) && opts.no_force) {
+        common.log('skipping existing file: ' + files[i]);
+      } else {
+        copyFileSync(srcFile, destFile);
+      }
+    }
+
+  } // for files
+} // cpdirSyncRecursive
+
+
+//@
+//@ ### cp([options,] source [, source ...], dest)
+//@ ### cp([options,] source_array, dest)
+//@ Available options:
+//@
+//@ + `-f`: force (default behavior)
+//@ + `-n`: no-clobber
+//@ + `-r, -R`: recursive
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ cp('file1', 'dir1');
+//@ cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp');
+//@ cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above
+//@ ```
+//@
+//@ Copies files. The wildcard `*` is accepted.
+function _cp(options, sources, dest) {
+  options = common.parseOptions(options, {
+    'f': '!no_force',
+    'n': 'no_force',
+    'R': 'recursive',
+    'r': 'recursive'
+  });
+
+  // Get sources, dest
+  if (arguments.length < 3) {
+    common.error('missing <source> and/or <dest>');
+  } else if (arguments.length > 3) {
+    sources = [].slice.call(arguments, 1, arguments.length - 1);
+    dest = arguments[arguments.length - 1];
+  } else if (typeof sources === 'string') {
+    sources = [sources];
+  } else if ('length' in sources) {
+    sources = sources; // no-op for array
+  } else {
+    common.error('invalid arguments');
+  }
+
+  var exists = fs.existsSync(dest),
+      stats = exists && fs.statSync(dest);
+
+  // Dest is not existing dir, but multiple sources given
+  if ((!exists || !stats.isDirectory()) && sources.length > 1)
+    common.error('dest is not a directory (too many sources)');
+
+  // Dest is an existing file, but no -f given
+  if (exists && stats.isFile() && options.no_force)
+    common.error('dest file already exists: ' + dest);
+
+  if (options.recursive) {
+    // Recursive allows the shortcut syntax "sourcedir/" for "sourcedir/*"
+    // (see Github issue #15)
+    sources.forEach(function(src, i) {
+      if (src[src.length - 1] === '/') {
+        sources[i] += '*';
+      // If src is a directory and dest doesn't exist, 'cp -r src dest' should copy src/* into dest
+      } else if (fs.statSync(src).isDirectory() && !exists) {
+        sources[i] += '/*';
+      }
+    });
+
+    // Create dest
+    try {
+      fs.mkdirSync(dest, parseInt('0777', 8));
+    } catch (e) {
+      // like Unix's cp, keep going even if we can't create dest dir
+    }
+  }
+
+  sources = common.expand(sources);
+
+  sources.forEach(function(src) {
+    if (!fs.existsSync(src)) {
+      common.error('no such file or directory: '+src, true);
+      return; // skip file
+    }
+
+    // If here, src exists
+    if (fs.statSync(src).isDirectory()) {
+      if (!options.recursive) {
+        // Non-Recursive
+        common.log(src + ' is a directory (not copied)');
+      } else {
+        // Recursive
+        // 'cp /a/source dest' should create 'source' in 'dest'
+        var newDest = path.join(dest, path.basename(src)),
+            checkDir = fs.statSync(src);
+        try {
+          fs.mkdirSync(newDest, checkDir.mode);
+        } catch (e) {
+          //if the directory already exists, that's okay
+          if (e.code !== 'EEXIST') {
+            common.error('dest file no such file or directory: ' + newDest, true);
+            throw e;
+          }
+        }
+
+        cpdirSyncRecursive(src, newDest, {no_force: options.no_force});
+      }
+      return; // done with dir
+    }
+
+    // If here, src is a file
+
+    // When copying to '/path/dir':
+    //    thisDest = '/path/dir/file1'
+    var thisDest = dest;
+    if (fs.existsSync(dest) && fs.statSync(dest).isDirectory())
+      thisDest = path.normalize(dest + '/' + path.basename(src));
+
+    if (fs.existsSync(thisDest) && options.no_force) {
+      common.error('dest file already exists: ' + thisDest, true);
+      return; // skip file
+    }
+
+    copyFileSync(src, thisDest);
+  }); // forEach(src)
+}
+module.exports = _cp;
+
+var common = require('./common');
+var _cd = require('./cd');
+var path = require('path');
+
+// Pushd/popd/dirs internals
+var _dirStack = [];
+
+function _isStackIndex(index) {
+  return (/^[\-+]\d+$/).test(index);
+}
+
+function _parseStackIndex(index) {
+  if (_isStackIndex(index)) {
+    if (Math.abs(index) < _dirStack.length + 1) { // +1 for pwd
+      return (/^-/).test(index) ? Number(index) - 1 : Number(index);
+    } else {
+      common.error(index + ': directory stack index out of range');
+    }
+  } else {
+    common.error(index + ': invalid number');
+  }
+}
+
+function _actualDirStack() {
+  return [process.cwd()].concat(_dirStack);
+}
+
+//@
+//@ ### pushd([options,] [dir | '-N' | '+N'])
+//@
+//@ Available options:
+//@
+//@ + `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated.
+//@
+//@ Arguments:
+//@
+//@ + `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`.
+//@ + `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
+//@ + `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ // process.cwd() === '/usr'
+//@ pushd('/etc'); // Returns /etc /usr
+//@ pushd('+1');   // Returns /usr /etc
+//@ ```
+//@
+//@ Save the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack.
+function _pushd(options, dir) {
+  if (_isStackIndex(options)) {
+    dir = options;
+    options = '';
+  }
+
+  options = common.parseOptions(options, {
+    'n' : 'no-cd'
+  });
+
+  var dirs = _actualDirStack();
+
+  if (dir === '+0') {
+    return dirs; // +0 is a noop
+  } else if (!dir) {
+    if (dirs.length > 1) {
+      dirs = dirs.splice(1, 1).concat(dirs);
+    } else {
+      return common.error('no other directory');
+    }
+  } else if (_isStackIndex(dir)) {
+    var n = _parseStackIndex(dir);
+    dirs = dirs.slice(n).concat(dirs.slice(0, n));
+  } else {
+    if (options['no-cd']) {
+      dirs.splice(1, 0, dir);
+    } else {
+      dirs.unshift(dir);
+    }
+  }
+
+  if (options['no-cd']) {
+    dirs = dirs.slice(1);
+  } else {
+    dir = path.resolve(dirs.shift());
+    _cd('', dir);
+  }
+
+  _dirStack = dirs;
+  return _dirs('');
+}
+exports.pushd = _pushd;
+
+//@
+//@ ### popd([options,] ['-N' | '+N'])
+//@
+//@ Available options:
+//@
+//@ + `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated.
+//@
+//@ Arguments:
+//@
+//@ + `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero.
+//@ + `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero.
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ echo(process.cwd()); // '/usr'
+//@ pushd('/etc');       // '/etc /usr'
+//@ echo(process.cwd()); // '/etc'
+//@ popd();              // '/usr'
+//@ echo(process.cwd()); // '/usr'
+//@ ```
+//@
+//@ When no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack.
+function _popd(options, index) {
+  if (_isStackIndex(options)) {
+    index = options;
+    options = '';
+  }
+
+  options = common.parseOptions(options, {
+    'n' : 'no-cd'
+  });
+
+  if (!_dirStack.length) {
+    return common.error('directory stack empty');
+  }
+
+  index = _parseStackIndex(index || '+0');
+
+  if (options['no-cd'] || index > 0 || _dirStack.length + index === 0) {
+    index = index > 0 ? index - 1 : index;
+    _dirStack.splice(index, 1);
+  } else {
+    var dir = path.resolve(_dirStack.shift());
+    _cd('', dir);
+  }
+
+  return _dirs('');
+}
+exports.popd = _popd;
+
+//@
+//@ ### dirs([options | '+N' | '-N'])
+//@
+//@ Available options:
+//@
+//@ + `-c`: Clears the directory stack by deleting all of the elements.
+//@
+//@ Arguments:
+//@
+//@ + `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.
+//@ + `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero.
+//@
+//@ Display the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified.
+//@
+//@ See also: pushd, popd
+function _dirs(options, index) {
+  if (_isStackIndex(options)) {
+    index = options;
+    options = '';
+  }
+
+  options = common.parseOptions(options, {
+    'c' : 'clear'
+  });
+
+  if (options['clear']) {
+    _dirStack = [];
+    return _dirStack;
+  }
+
+  var stack = _actualDirStack();
+
+  if (index) {
+    index = _parseStackIndex(index);
+
+    if (index < 0) {
+      index = stack.length + index;
+    }
+
+    common.log(stack[index]);
+    return stack[index];
+  }
+
+  common.log(stack.join(' '));
+
+  return stack;
+}
+exports.dirs = _dirs;
+
+var common = require('./common');
+
+//@
+//@ ### echo(string [, string ...])
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ echo('hello world');
+//@ var str = echo('hello world');
+//@ ```
+//@
+//@ Prints string to stdout, and returns string with additional utility methods
+//@ like `.to()`.
+function _echo() {
+  var messages = [].slice.call(arguments, 0);
+  console.log.apply(console, messages);
+  return common.ShellString(messages.join(' '));
+}
+module.exports = _echo;
+
+var common = require('./common');
+
+//@
+//@ ### error()
+//@ Tests if error occurred in the last command. Returns `null` if no error occurred,
+//@ otherwise returns string explaining the error
+function error() {
+  return common.state.error;
+}
+module.exports = error;
+
+var common = require('./common');
+var _tempDir = require('./tempdir');
+var _pwd = require('./pwd');
+var path = require('path');
+var fs = require('fs');
+var child = require('child_process');
+
+// Hack to run child_process.exec() synchronously (sync avoids callback hell)
+// Uses a custom wait loop that checks for a flag file, created when the child process is done.
+// (Can't do a wait loop that checks for internal Node variables/messages as
+// Node is single-threaded; callbacks and other internal state changes are done in the
+// event loop).
+function execSync(cmd, opts) {
+  var tempDir = _tempDir();
+  var stdoutFile = path.resolve(tempDir+'/'+common.randomFileName()),
+      stderrFile = path.resolve(tempDir+'/'+common.randomFileName()),
+      codeFile = path.resolve(tempDir+'/'+common.randomFileName()),
+      scriptFile = path.resolve(tempDir+'/'+common.randomFileName()),
+      sleepFile = path.resolve(tempDir+'/'+common.randomFileName());
+
+  var options = common.extend({
+    silent: common.config.silent
+  }, opts);
+
+  var previousStdoutContent = '',
+      previousStderrContent = '';
+  // Echoes stdout and stderr changes from running process, if not silent
+  function updateStream(streamFile) {
+    if (options.silent || !fs.existsSync(streamFile))
+      return;
+
+    var previousStreamContent,
+        proc_stream;
+    if (streamFile === stdoutFile) {
+      previousStreamContent = previousStdoutContent;
+      proc_stream = process.stdout;
+    } else { // assume stderr
+      previousStreamContent = previousStderrContent;
+      proc_stream = process.stderr;
+    }
+
+    var streamContent = fs.readFileSync(streamFile, 'utf8');
+    // No changes since last time?
+    if (streamContent.length <= previousStreamContent.length)
+      return;
+
+    proc_stream.write(streamContent.substr(previousStreamContent.length));
+    previousStreamContent = streamContent;
+  }
+
+  function escape(str) {
+    return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
+  }
+
+  if (fs.existsSync(scriptFile)) common.unlinkSync(scriptFile);
+  if (fs.existsSync(stdoutFile)) common.unlinkSync(stdoutFile);
+  if (fs.existsSync(stderrFile)) common.unlinkSync(stderrFile);
+  if (fs.existsSync(codeFile)) common.unlinkSync(codeFile);
+
+  var execCommand = '"'+process.execPath+'" '+scriptFile;
+  var execOptions = {
+    env: process.env,
+    cwd: _pwd(),
+    maxBuffer: 20*1024*1024
+  };
+
+  var script;
+
+  if (typeof child.execSync === 'function') {
+    script = [
+      "var child = require('child_process')",
+      "  , fs = require('fs');",
+      "var childProcess = child.exec('"+escape(cmd)+"', {env: process.env, maxBuffer: 20*1024*1024}, function(err) {",
+      "  fs.writeFileSync('"+escape(codeFile)+"', err ? err.code.toString() : '0');",
+      "});",
+      "var stdoutStream = fs.createWriteStream('"+escape(stdoutFile)+"');",
+      "var stderrStream = fs.createWriteStream('"+escape(stderrFile)+"');",
+      "childProcess.stdout.pipe(stdoutStream, {end: false});",
+      "childProcess.stderr.pipe(stderrStream, {end: false});",
+      "childProcess.stdout.pipe(process.stdout);",
+      "childProcess.stderr.pipe(process.stderr);",
+      "var stdoutEnded = false, stderrEnded = false;",
+      "function tryClosingStdout(){ if(stdoutEnded){ stdoutStream.end(); } }",
+      "function tryClosingStderr(){ if(stderrEnded){ stderrStream.end(); } }",
+      "childProcess.stdout.on('end', function(){ stdoutEnded = true; tryClosingStdout(); });",
+      "childProcess.stderr.on('end', function(){ stderrEnded = true; tryClosingStderr(); });"
+    ].join('\n');
+
+    fs.writeFileSync(scriptFile, script);
+
+    if (options.silent) {
+      execOptions.stdio = 'ignore';
+    } else {
+      execOptions.stdio = [0, 1, 2];
+    }
+
+    // Welcome to the future
+    child.execSync(execCommand, execOptions);
+  } else {
+    cmd += ' > '+stdoutFile+' 2> '+stderrFile; // works on both win/unix
+
+    script = [
+      "var child = require('child_process')",
+      "  , fs = require('fs');",
+      "var childProcess = child.exec('"+escape(cmd)+"', {env: process.env, maxBuffer: 20*1024*1024}, function(err) {",
+      "  fs.writeFileSync('"+escape(codeFile)+"', err ? err.code.toString() : '0');",
+      "});"
+    ].join('\n');
+
+    fs.writeFileSync(scriptFile, script);
+
+    child.exec(execCommand, execOptions);
+
+    // The wait loop
+    // sleepFile is used as a dummy I/O op to mitigate unnecessary CPU usage
+    // (tried many I/O sync ops, writeFileSync() seems to be only one that is effective in reducing
+    // CPU usage, though apparently not so much on Windows)
+    while (!fs.existsSync(codeFile)) { updateStream(stdoutFile); fs.writeFileSync(sleepFile, 'a'); }
+    while (!fs.existsSync(stdoutFile)) { updateStream(stdoutFile); fs.writeFileSync(sleepFile, 'a'); }
+    while (!fs.existsSync(stderrFile)) { updateStream(stderrFile); fs.writeFileSync(sleepFile, 'a'); }
+  }
+
+  // At this point codeFile exists, but it's not necessarily flushed yet.
+  // Keep reading it until it is.
+  var code = parseInt('', 10);
+  while (isNaN(code)) {
+    code = parseInt(fs.readFileSync(codeFile, 'utf8'), 10);
+  }
+
+  var stdout = fs.readFileSync(stdoutFile, 'utf8');
+  var stderr = fs.readFileSync(stderrFile, 'utf8');
+
+  // No biggie if we can't erase the files now -- they're in a temp dir anyway
+  try { common.unlinkSync(scriptFile); } catch(e) {}
+  try { common.unlinkSync(stdoutFile); } catch(e) {}
+  try { common.unlinkSync(stderrFile); } catch(e) {}
+  try { common.unlinkSync(codeFile); } catch(e) {}
+  try { common.unlinkSync(sleepFile); } catch(e) {}
+
+  // some shell return codes are defined as errors, per http://tldp.org/LDP/abs/html/exitcodes.html
+  if (code === 1 || code === 2 || code >= 126)  {
+      common.error('', true); // unix/shell doesn't really give an error message after non-zero exit codes
+  }
+  // True if successful, false if not
+  var obj = {
+    code: code,
+    output: stdout, // deprecated
+    stdout: stdout,
+    stderr: stderr
+  };
+  return obj;
+} // execSync()
+
+// Wrapper around exec() to enable echoing output to console in real time
+function execAsync(cmd, opts, callback) {
+  var stdout = '';
+  var stderr = '';
+
+  var options = common.extend({
+    silent: common.config.silent
+  }, opts);
+
+  var c = child.exec(cmd, {env: process.env, maxBuffer: 20*1024*1024}, function(err) {
+    if (callback)
+      callback(err ? err.code : 0, stdout, stderr);
+  });
+
+  c.stdout.on('data', function(data) {
+    stdout += data;
+    if (!options.silent)
+      process.stdout.write(data);
+  });
+
+  c.stderr.on('data', function(data) {
+    stderr += data;
+    if (!options.silent)
+      process.stderr.write(data);
+  });
+
+  return c;
+}
+
+//@
+//@ ### exec(command [, options] [, callback])
+//@ Available options (all `false` by default):
+//@
+//@ + `async`: Asynchronous execution. If a callback is provided, it will be set to
+//@   `true`, regardless of the passed value.
+//@ + `silent`: Do not echo program output to console.
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ var version = exec('node --version', {silent:true}).stdout;
+//@
+//@ var child = exec('some_long_running_process', {async:true});
+//@ child.stdout.on('data', function(data) {
+//@   /* ... do something with data ... */
+//@ });
+//@
+//@ exec('some_long_running_process', function(code, stdout, stderr) {
+//@   console.log('Exit code:', code);
+//@   console.log('Program output:', stdout);
+//@   console.log('Program stderr:', stderr);
+//@ });
+//@ ```
+//@
+//@ Executes the given `command` _synchronously_, unless otherwise specified.  When in synchronous
+//@ mode returns the object `{ code:..., stdout:... , stderr:... }`, containing the program's
+//@ `stdout`, `stderr`, and its exit `code`. Otherwise returns the child process object,
+//@ and the `callback` gets the arguments `(code, stdout, stderr)`.
+//@
+//@ **Note:** For long-lived processes, it's best to run `exec()` asynchronously as
+//@ the current synchronous implementation uses a lot of CPU. This should be getting
+//@ fixed soon.
+function _exec(command, options, callback) {
+  if (!command)
+    common.error('must specify command');
+
+  // Callback is defined instead of options.
+  if (typeof options === 'function') {
+    callback = options;
+    options = { async: true };
+  }
+
+  // Callback is defined with options.
+  if (typeof options === 'object' && typeof callback === 'function') {
+    options.async = true;
+  }
+
+  options = common.extend({
+    silent: common.config.silent,
+    async: false
+  }, options);
+
+  if (options.async)
+    return execAsync(command, options, callback);
+  else
+    return execSync(command, options);
+}
+module.exports = _exec;
+
+var fs = require('fs');
+var common = require('./common');
+var _ls = require('./ls');
+
+//@
+//@ ### find(path [, path ...])
+//@ ### find(path_array)
+//@ Examples:
+//@
+//@ ```javascript
+//@ find('src', 'lib');
+//@ find(['src', 'lib']); // same as above
+//@ find('.').filter(function(file) { return file.match(/\.js$/); });
+//@ ```
+//@
+//@ Returns array of all files (however deep) in the given paths.
+//@
+//@ The main difference from `ls('-R', path)` is that the resulting file names
+//@ include the base directories, e.g. `lib/resources/file1` instead of just `file1`.
+function _find(options, paths) {
+  if (!paths)
+    common.error('no path specified');
+  else if (typeof paths === 'object')
+    paths = paths; // assume array
+  else if (typeof paths === 'string')
+    paths = [].slice.call(arguments, 1);
+
+  var list = [];
+
+  function pushFile(file) {
+    if (common.platform === 'win')
+      file = file.replace(/\\/g, '/');
+    list.push(file);
+  }
+
+  // why not simply do ls('-R', paths)? because the output wouldn't give the base dirs
+  // to get the base dir in the output, we need instead ls('-R', 'dir/*') for every directory
+
+  paths.forEach(function(file) {
+    pushFile(file);
+
+    if (fs.statSync(file).isDirectory()) {
+      _ls('-RA', file+'/*').forEach(function(subfile) {
+        pushFile(subfile);
+      });
+    }
+  });
+
+  return list;
+}
+module.exports = _find;
+
+var common = require('./common');
+var fs = require('fs');
+
+//@
+//@ ### grep([options,] regex_filter, file [, file ...])
+//@ ### grep([options,] regex_filter, file_array)
+//@ Available options:
+//@
+//@ + `-v`: Inverse the sense of the regex and print the lines not matching the criteria.
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ grep('-v', 'GLOBAL_VARIABLE', '*.js');
+//@ grep('GLOBAL_VARIABLE', '*.js');
+//@ ```
+//@
+//@ Reads input string from given files and returns a string containing all lines of the
+//@ file that match the given `regex_filter`. Wildcard `*` accepted.
+function _grep(options, regex, files) {
+  options = common.parseOptions(options, {
+    'v': 'inverse'
+  });
+
+  if (!files)
+    common.error('no paths given');
+
+  if (typeof files === 'string')
+    files = [].slice.call(arguments, 2);
+  // if it's array leave it as it is
+
+  files = common.expand(files);
+
+  var grep = '';
+  files.forEach(function(file) {
+    if (!fs.existsSync(file)) {
+      common.error('no such file or directory: ' + file, true);
+      return;
+    }
+
+    var contents = fs.readFileSync(file, 'utf8'),
+        lines = contents.split(/\r*\n/);
+    lines.forEach(function(line) {
+      var matched = line.match(regex);
+      if ((options.inverse && !matched) || (!options.inverse && matched))
+        grep += line + '\n';
+    });
+  });
+
+  return common.ShellString(grep);
+}
+module.exports = _grep;
+
+var fs = require('fs');
+var path = require('path');
+var common = require('./common');
+
+//@
+//@ ### ln([options,] source, dest)
+//@ Available options:
+//@
+//@ + `-s`: symlink
+//@ + `-f`: force
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ ln('file', 'newlink');
+//@ ln('-sf', 'file', 'existing');
+//@ ```
+//@
+//@ Links source to dest. Use -f to force the link, should dest already exist.
+function _ln(options, source, dest) {
+  options = common.parseOptions(options, {
+    's': 'symlink',
+    'f': 'force'
+  });
+
+  if (!source || !dest) {
+    common.error('Missing <source> and/or <dest>');
+  }
+
+  source = String(source);
+  var sourcePath = path.normalize(source).replace(RegExp(path.sep + '$'), '');
+  var isAbsolute = (path.resolve(source) === sourcePath);
+  dest = path.resolve(process.cwd(), String(dest));
+
+  if (fs.existsSync(dest)) {
+    if (!options.force) {
+      common.error('Destination file exists', true);
+    }
+
+    fs.unlinkSync(dest);
+  }
+
+  if (options.symlink) {
+    var isWindows = common.platform === 'win';
+    var linkType = isWindows ? 'file' : null;
+    var resolvedSourcePath = isAbsolute ? sourcePath : path.resolve(process.cwd(), path.dirname(dest), source);
+    if (!fs.existsSync(resolvedSourcePath)) {
+      common.error('Source file does not exist', true);
+    } else if (isWindows && fs.statSync(resolvedSourcePath).isDirectory()) {
+      linkType =  'junction';
+    }
+
+    try {
+      fs.symlinkSync(linkType === 'junction' ? resolvedSourcePath: source, dest, linkType);
+    } catch (err) {
+      common.error(err.message);
+    }
+  } else {
+    if (!fs.existsSync(source)) {
+      common.error('Source file does not exist', true);
+    }
+    try {
+      fs.linkSync(source, dest);
+    } catch (err) {
+      common.error(err.message);
+    }
+  }
+}
+module.exports = _ln;
+
+var path = require('path');
+var fs = require('fs');
+var common = require('./common');
+var _cd = require('./cd');
+var _pwd = require('./pwd');
+
+//@
+//@ ### ls([options,] [path, ...])
+//@ ### ls([options,] path_array)
+//@ Available options:
+//@
+//@ + `-R`: recursive
+//@ + `-A`: all files (include files beginning with `.`, except for `.` and `..`)
+//@ + `-d`: list directories themselves, not their contents
+//@ + `-l`: list objects representing each file, each with fields containing `ls
+//@         -l` output fields. See
+//@         [fs.Stats](https://nodejs.org/api/fs.html#fs_class_fs_stats)
+//@         for more info
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ ls('projs/*.js');
+//@ ls('-R', '/users/me', '/tmp');
+//@ ls('-R', ['/users/me', '/tmp']); // same as above
+//@ ls('-l', 'file.txt'); // { name: 'file.txt', mode: 33188, nlink: 1, ...}
+//@ ```
+//@
+//@ Returns array of files in the given path, or in current directory if no path provided.
+function _ls(options, paths) {
+  options = common.parseOptions(options, {
+    'R': 'recursive',
+    'A': 'all',
+    'a': 'all_deprecated',
+    'd': 'directory',
+    'l': 'long'
+  });
+
+  if (options.all_deprecated) {
+    // We won't support the -a option as it's hard to image why it's useful
+    // (it includes '.' and '..' in addition to '.*' files)
+    // For backwards compatibility we'll dump a deprecated message and proceed as before
+    common.log('ls: Option -a is deprecated. Use -A instead');
+    options.all = true;
+  }
+
+  if (!paths)
+    paths = ['.'];
+  else if (typeof paths === 'object')
+    paths = paths; // assume array
+  else if (typeof paths === 'string')
+    paths = [].slice.call(arguments, 1);
+
+  var list = [];
+
+  // Conditionally pushes file to list - returns true if pushed, false otherwise
+  // (e.g. prevents hidden files to be included unless explicitly told so)
+  function pushFile(file, query) {
+    var name = file.name || file;
+    // hidden file?
+    if (path.basename(name)[0] === '.') {
+      // not explicitly asking for hidden files?
+      if (!options.all && !(path.basename(query)[0] === '.' && path.basename(query).length > 1))
+        return false;
+    }
+
+    if (common.platform === 'win')
+      name = name.replace(/\\/g, '/');
+
+    if (file.name) {
+      file.name = name;
+    } else {
+      file = name;
+    }
+    list.push(file);
+    return true;
+  }
+
+  paths.forEach(function(p) {
+    if (fs.existsSync(p)) {
+      var stats = ls_stat(p);
+      // Simple file?
+      if (stats.isFile()) {
+        if (options.long) {
+          pushFile(stats, p);
+        } else {
+          pushFile(p, p);
+        }
+        return; // continue
+      }
+
+      // Simple dir?
+      if (options.directory) {
+        pushFile(p, p);
+        return;
+      } else if (stats.isDirectory()) {
+        // Iterate over p contents
+        fs.readdirSync(p).forEach(function(file) {
+          var orig_file = file;
+          if (options.long)
+            file = ls_stat(path.join(p, file));
+          if (!pushFile(file, p))
+            return;
+
+          // Recursive?
+          if (options.recursive) {
+            var oldDir = _pwd();
+            _cd('', p);
+            if (fs.statSync(orig_file).isDirectory())
+              list = list.concat(_ls('-R'+(options.all?'A':''), orig_file+'/*'));
+            _cd('', oldDir);
+          }
+        });
+        return; // continue
+      }
+    }
+
+    // p does not exist - possible wildcard present
+
+    var basename = path.basename(p);
+    var dirname = path.dirname(p);
+    // Wildcard present on an existing dir? (e.g. '/tmp/*.js')
+    if (basename.search(/\*/) > -1 && fs.existsSync(dirname) && fs.statSync(dirname).isDirectory) {
+      // Escape special regular expression chars
+      var regexp = basename.replace(/(\^|\$|\(|\)|<|>|\[|\]|\{|\}|\.|\+|\?)/g, '\\$1');
+      // Translates wildcard into regex
+      regexp = '^' + regexp.replace(/\*/g, '.*') + '$';
+      // Iterate over directory contents
+      fs.readdirSync(dirname).forEach(function(file) {
+        if (file.match(new RegExp(regexp))) {
+          var file_path = path.join(dirname,  file);
+          file_path = options.long ? ls_stat(file_path) : file_path;
+          if (file_path.name)
+            file_path.name = path.normalize(file_path.name);
+          else
+            file_path = path.normalize(file_path);
+          if (!pushFile(file_path, basename))
+            return;
+
+          // Recursive?
+          if (options.recursive) {
+            var pp = dirname + '/' + file;
+            if (fs.lstatSync(pp).isDirectory())
+              list = list.concat(_ls('-R'+(options.all?'A':''), pp+'/*'));
+          } // recursive
+        } // if file matches
+      }); // forEach
+      return;
+    }
+
+    common.error('no such file or directory: ' + p, true);
+  });
+
+  return list;
+}
+module.exports = _ls;
+
+
+function ls_stat(path) {
+  var stats = fs.statSync(path);
+  // Note: this object will contain more information than .toString() returns
+  stats.name = path;
+  stats.toString = function() {
+    // Return a string resembling unix's `ls -l` format
+    return [this.mode, this.nlink, this.uid, this.gid, this.size, this.mtime, this.name].join(' ');
+  };
+  return stats;
+}
+
+var common = require('./common');
+var fs = require('fs');
+var path = require('path');
+
+// Recursively creates 'dir'
+function mkdirSyncRecursive(dir) {
+  var baseDir = path.dirname(dir);
+
+  // Base dir exists, no recursion necessary
+  if (fs.existsSync(baseDir)) {
+    fs.mkdirSync(dir, parseInt('0777', 8));
+    return;
+  }
+
+  // Base dir does not exist, go recursive
+  mkdirSyncRecursive(baseDir);
+
+  // Base dir created, can create dir
+  fs.mkdirSync(dir, parseInt('0777', 8));
+}
+
+//@
+//@ ### mkdir([options,] dir [, dir ...])
+//@ ### mkdir([options,] dir_array)
+//@ Available options:
+//@
+//@ + `-p`: full path (will create intermediate dirs if necessary)
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g');
+//@ mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above
+//@ ```
+//@
+//@ Creates directories.
+function _mkdir(options, dirs) {
+  options = common.parseOptions(options, {
+    'p': 'fullpath'
+  });
+  if (!dirs)
+    common.error('no paths given');
+
+  if (typeof dirs === 'string')
+    dirs = [].slice.call(arguments, 1);
+  // if it's array leave it as it is
+
+  dirs.forEach(function(dir) {
+    if (fs.existsSync(dir)) {
+      if (!options.fullpath)
+          common.error('path already exists: ' + dir, true);
+      return; // skip dir
+    }
+
+    // Base dir does not exist, and no -p option given
+    var baseDir = path.dirname(dir);
+    if (!fs.existsSync(baseDir) && !options.fullpath) {
+      common.error('no such file or directory: ' + baseDir, true);
+      return; // skip dir
+    }
+
+    if (options.fullpath)
+      mkdirSyncRecursive(dir);
+    else
+      fs.mkdirSync(dir, parseInt('0777', 8));
+  });
+} // mkdir
+module.exports = _mkdir;
+
+var fs = require('fs');
+var path = require('path');
+var common = require('./common');
+
+//@
+//@ ### mv([options ,] source [, source ...], dest')
+//@ ### mv([options ,] source_array, dest')
+//@ Available options:
+//@
+//@ + `-f`: force (default behavior)
+//@ + `-n`: no-clobber
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ mv('-n', 'file', 'dir/');
+//@ mv('file1', 'file2', 'dir/');
+//@ mv(['file1', 'file2'], 'dir/'); // same as above
+//@ ```
+//@
+//@ Moves files. The wildcard `*` is accepted.
+function _mv(options, sources, dest) {
+  options = common.parseOptions(options, {
+    'f': '!no_force',
+    'n': 'no_force'
+  });
+
+  // Get sources, dest
+  if (arguments.length < 3) {
+    common.error('missing <source> and/or <dest>');
+  } else if (arguments.length > 3) {
+    sources = [].slice.call(arguments, 1, arguments.length - 1);
+    dest = arguments[arguments.length - 1];
+  } else if (typeof sources === 'string') {
+    sources = [sources];
+  } else if ('length' in sources) {
+    sources = sources; // no-op for array
+  } else {
+    common.error('invalid arguments');
+  }
+
+  sources = common.expand(sources);
+
+  var exists = fs.existsSync(dest),
+      stats = exists && fs.statSync(dest);
+
+  // Dest is not existing dir, but multiple sources given
+  if ((!exists || !stats.isDirectory()) && sources.length > 1)
+    common.error('dest is not a directory (too many sources)');
+
+  // Dest is an existing file, but no -f given
+  if (exists && stats.isFile() && options.no_force)
+    common.error('dest file already exists: ' + dest);
+
+  sources.forEach(function(src) {
+    if (!fs.existsSync(src)) {
+      common.error('no such file or directory: '+src, true);
+      return; // skip file
+    }
+
+    // If here, src exists
+
+    // When copying to '/path/dir':
+    //    thisDest = '/path/dir/file1'
+    var thisDest = dest;
+    if (fs.existsSync(dest) && fs.statSync(dest).isDirectory())
+      thisDest = path.normalize(dest + '/' + path.basename(src));
+
+    if (fs.existsSync(thisDest) && options.no_force) {
+      common.error('dest file already exists: ' + thisDest, true);
+      return; // skip file
+    }
+
+    if (path.resolve(src) === path.dirname(path.resolve(thisDest))) {
+      common.error('cannot move to self: '+src, true);
+      return; // skip file
+    }
+
+    fs.renameSync(src, thisDest);
+  }); // forEach(src)
+} // mv
+module.exports = _mv;
+
+// see dirs.js
+// see dirs.js
+var path = require('path');
+var common = require('./common');
+
+//@
+//@ ### pwd()
+//@ Returns the current directory.
+function _pwd() {
+  var pwd = path.resolve(process.cwd());
+  return common.ShellString(pwd);
+}
+module.exports = _pwd;
+
+var common = require('./common');
+var fs = require('fs');
+
+// Recursively removes 'dir'
+// Adapted from https://github.com/ryanmcgrath/wrench-js
+//
+// Copyright (c) 2010 Ryan McGrath
+// Copyright (c) 2012 Artur Adib
+//
+// Licensed under the MIT License
+// http://www.opensource.org/licenses/mit-license.php
+function rmdirSyncRecursive(dir, force) {
+  var files;
+
+  files = fs.readdirSync(dir);
+
+  // Loop through and delete everything in the sub-tree after checking it
+  for(var i = 0; i < files.length; i++) {
+    var file = dir + "/" + files[i],
+        currFile = fs.lstatSync(file);
+
+    if(currFile.isDirectory()) { // Recursive function back to the beginning
+      rmdirSyncRecursive(file, force);
+    }
+
+    else if(currFile.isSymbolicLink()) { // Unlink symlinks
+      if (force || isWriteable(file)) {
+        try {
+          common.unlinkSync(file);
+        } catch (e) {
+          common.error('could not remove file (code '+e.code+'): ' + file, true);
+        }
+      }
+    }
+
+    else // Assume it's a file - perhaps a try/catch belongs here?
+      if (force || isWriteable(file)) {
+        try {
+          common.unlinkSync(file);
+        } catch (e) {
+          common.error('could not remove file (code '+e.code+'): ' + file, true);
+        }
+      }
+  }
+
+  // Now that we know everything in the sub-tree has been deleted, we can delete the main directory.
+  // Huzzah for the shopkeep.
+
+  var result;
+  try {
+    // Retry on windows, sometimes it takes a little time before all the files in the directory are gone
+    var start = Date.now();
+    while (true) {
+      try {
+        result = fs.rmdirSync(dir);
+        if (fs.existsSync(dir)) throw { code: "EAGAIN" };
+        break;
+      } catch(er) {
+        // In addition to error codes, also check if the directory still exists and loop again if true
+        if (process.platform === "win32" && (er.code === "ENOTEMPTY" || er.code === "EBUSY" || er.code === "EPERM" || er.code === "EAGAIN")) {
+          if (Date.now() - start > 1000) throw er;
+        } else if (er.code === "ENOENT") {
+          // Directory did not exist, deletion was successful
+          break;
+        } else {
+          throw er;
+        }
+      }
+    }
+  } catch(e) {
+    common.error('could not remove directory (code '+e.code+'): ' + dir, true);
+  }
+
+  return result;
+} // rmdirSyncRecursive
+
+// Hack to determine if file has write permissions for current user
+// Avoids having to check user, group, etc, but it's probably slow
+function isWriteable(file) {
+  var writePermission = true;
+  try {
+    var __fd = fs.openSync(file, 'a');
+    fs.closeSync(__fd);
+  } catch(e) {
+    writePermission = false;
+  }
+
+  return writePermission;
+}
+
+//@
+//@ ### rm([options,] file [, file ...])
+//@ ### rm([options,] file_array)
+//@ Available options:
+//@
+//@ + `-f`: force
+//@ + `-r, -R`: recursive
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ rm('-rf', '/tmp/*');
+//@ rm('some_file.txt', 'another_file.txt');
+//@ rm(['some_file.txt', 'another_file.txt']); // same as above
+//@ ```
+//@
+//@ Removes files. The wildcard `*` is accepted.
+function _rm(options, files) {
+  options = common.parseOptions(options, {
+    'f': 'force',
+    'r': 'recursive',
+    'R': 'recursive'
+  });
+  if (!files)
+    common.error('no paths given');
+
+  if (typeof files === 'string')
+    files = [].slice.call(arguments, 1);
+  // if it's array leave it as it is
+
+  files = common.expand(files);
+
+  files.forEach(function(file) {
+    if (!fs.existsSync(file)) {
+      // Path does not exist, no force flag given
+      if (!options.force)
+        common.error('no such file or directory: '+file, true);
+
+      return; // skip file
+    }
+
+    // If here, path exists
+
+    var stats = fs.lstatSync(file);
+    if (stats.isFile() || stats.isSymbolicLink()) {
+
+      // Do not check for file writing permissions
+      if (options.force) {
+        common.unlinkSync(file);
+        return;
+      }
+
+      if (isWriteable(file))
+        common.unlinkSync(file);
+      else
+        common.error('permission denied: '+file, true);
+
+      return;
+    } // simple file
+
+    // Path is an existing directory, but no -r flag given
+    if (stats.isDirectory() && !options.recursive) {
+      common.error('path is a directory', true);
+      return; // skip path
+    }
+
+    // Recursively remove existing directory
+    if (stats.isDirectory() && options.recursive) {
+      rmdirSyncRecursive(file, options.force);
+    }
+  }); // forEach(file)
+} // rm
+module.exports = _rm;
+
+var common = require('./common');
+var fs = require('fs');
+
+//@
+//@ ### sed([options,] search_regex, replacement, file [, file ...])
+//@ ### sed([options,] search_regex, replacement, file_array)
+//@ Available options:
+//@
+//@ + `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js');
+//@ sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js');
+//@ ```
+//@
+//@ Reads an input string from `files` and performs a JavaScript `replace()` on the input
+//@ using the given search regex and replacement string or function. Returns the new string after replacement.
+function _sed(options, regex, replacement, files) {
+  options = common.parseOptions(options, {
+    'i': 'inplace'
+  });
+
+  if (typeof replacement === 'string' || typeof replacement === 'function')
+    replacement = replacement; // no-op
+  else if (typeof replacement === 'number')
+    replacement = replacement.toString(); // fallback
+  else
+    common.error('invalid replacement string');
+
+  // Convert all search strings to RegExp
+  if (typeof regex === 'string')
+    regex = RegExp(regex);
+
+  if (!files)
+    common.error('no files given');
+
+  if (typeof files === 'string')
+    files = [].slice.call(arguments, 3);
+  // if it's array leave it as it is
+
+  files = common.expand(files);
+
+  var sed = [];
+  files.forEach(function(file) {
+    if (!fs.existsSync(file)) {
+      common.error('no such file or directory: ' + file, true);
+      return;
+    }
+
+    var result = fs.readFileSync(file, 'utf8').split('\n').map(function (line) {
+      return line.replace(regex, replacement);
+    }).join('\n');
+
+    sed.push(result);
+
+    if (options.inplace)
+      fs.writeFileSync(file, result, 'utf8');
+  });
+
+  return common.ShellString(sed.join('\n'));
+}
+module.exports = _sed;
+
+var common = require('./common');
+
+//@
+//@ ### set(options)
+//@ Available options:
+//@
+//@ + `+/-e`: exit upon error (`config.fatal`)
+//@ + `+/-v`: verbose: show all commands (`config.verbose`)
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ set('-e'); // exit upon first error
+//@ set('+e'); // this undoes a "set('-e')"
+//@ ```
+//@
+//@ Sets global configuration variables
+function _set(options) {
+  if (!options) {
+    var args = [].slice.call(arguments, 0);
+    if (args.length < 2)
+      common.error('must provide an argument');
+    options = args[1];
+  }
+  var negate = (options[0] === '+');
+  if (negate) {
+    options = '-' + options.slice(1); // parseOptions needs a '-' prefix
+  }
+  options = common.parseOptions(options, {
+    'e': 'fatal',
+    'v': 'verbose'
+  });
+
+  var key;
+  if (negate) {
+    for (key in options)
+      options[key] = !options[key];
+  }
+
+  for (key in options) {
+    // Only change the global config if `negate` is false and the option is true
+    // or if `negate` is true and the option is false (aka negate !== option)
+    if (negate !== options[key]) {
+      common.config[key] = options[key];
+    }
+  }
+  return;
+}
+module.exports = _set;
+
+var common = require('./common');
+var os = require('os');
+var fs = require('fs');
+
+// Returns false if 'dir' is not a writeable directory, 'dir' otherwise
+function writeableDir(dir) {
+  if (!dir || !fs.existsSync(dir))
+    return false;
+
+  if (!fs.statSync(dir).isDirectory())
+    return false;
+
+  var testFile = dir+'/'+common.randomFileName();
+  try {
+    fs.writeFileSync(testFile, ' ');
+    common.unlinkSync(testFile);
+    return dir;
+  } catch (e) {
+    return false;
+  }
+}
+
+
+//@
+//@ ### tempdir()
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ var tmp = tempdir(); // "/tmp" for most *nix platforms
+//@ ```
+//@
+//@ Searches and returns string containing a writeable, platform-dependent temporary directory.
+//@ Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir).
+function _tempDir() {
+  var state = common.state;
+  if (state.tempDir)
+    return state.tempDir; // from cache
+
+  state.tempDir = writeableDir(os.tmpdir && os.tmpdir()) || // node 0.10+
+                  writeableDir(os.tmpDir && os.tmpDir()) || // node 0.8+
+                  writeableDir(process.env['TMPDIR']) ||
+                  writeableDir(process.env['TEMP']) ||
+                  writeableDir(process.env['TMP']) ||
+                  writeableDir(process.env['Wimp$ScrapDir']) || // RiscOS
+                  writeableDir('C:\\TEMP') || // Windows
+                  writeableDir('C:\\TMP') || // Windows
+                  writeableDir('\\TEMP') || // Windows
+                  writeableDir('\\TMP') || // Windows
+                  writeableDir('/tmp') ||
+                  writeableDir('/var/tmp') ||
+                  writeableDir('/usr/tmp') ||
+                  writeableDir('.'); // last resort
+
+  return state.tempDir;
+}
+module.exports = _tempDir;
+
+var common = require('./common');
+var fs = require('fs');
+
+//@
+//@ ### test(expression)
+//@ Available expression primaries:
+//@
+//@ + `'-b', 'path'`: true if path is a block device
+//@ + `'-c', 'path'`: true if path is a character device
+//@ + `'-d', 'path'`: true if path is a directory
+//@ + `'-e', 'path'`: true if path exists
+//@ + `'-f', 'path'`: true if path is a regular file
+//@ + `'-L', 'path'`: true if path is a symbolic link
+//@ + `'-p', 'path'`: true if path is a pipe (FIFO)
+//@ + `'-S', 'path'`: true if path is a socket
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ if (test('-d', path)) { /* do something with dir */ };
+//@ if (!test('-f', path)) continue; // skip if it's a regular file
+//@ ```
+//@
+//@ Evaluates expression using the available primaries and returns corresponding value.
+function _test(options, path) {
+  if (!path)
+    common.error('no path given');
+
+  // hack - only works with unary primaries
+  options = common.parseOptions(options, {
+    'b': 'block',
+    'c': 'character',
+    'd': 'directory',
+    'e': 'exists',
+    'f': 'file',
+    'L': 'link',
+    'p': 'pipe',
+    'S': 'socket'
+  });
+
+  var canInterpret = false;
+  for (var key in options)
+    if (options[key] === true) {
+      canInterpret = true;
+      break;
+    }
+
+  if (!canInterpret)
+    common.error('could not interpret expression');
+
+  if (options.link) {
+    try {
+      return fs.lstatSync(path).isSymbolicLink();
+    } catch(e) {
+      return false;
+    }
+  }
+
+  if (!fs.existsSync(path))
+    return false;
+
+  if (options.exists)
+    return true;
+
+  var stats = fs.statSync(path);
+
+  if (options.block)
+    return stats.isBlockDevice();
+
+  if (options.character)
+    return stats.isCharacterDevice();
+
+  if (options.directory)
+    return stats.isDirectory();
+
+  if (options.file)
+    return stats.isFile();
+
+  if (options.pipe)
+    return stats.isFIFO();
+
+  if (options.socket)
+    return stats.isSocket();
+} // test
+module.exports = _test;
+
+var common = require('./common');
+var fs = require('fs');
+var path = require('path');
+
+//@
+//@ ### 'string'.to(file)
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ cat('input.txt').to('output.txt');
+//@ ```
+//@
+//@ Analogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as
+//@ those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_
+function _to(options, file) {
+  if (!file)
+    common.error('wrong arguments');
+
+  if (!fs.existsSync( path.dirname(file) ))
+      common.error('no such file or directory: ' + path.dirname(file));
+
+  try {
+    fs.writeFileSync(file, this.toString(), 'utf8');
+    return this;
+  } catch(e) {
+    common.error('could not write to file (code '+e.code+'): '+file, true);
+  }
+}
+module.exports = _to;
+
+var common = require('./common');
+var fs = require('fs');
+var path = require('path');
+
+//@
+//@ ### 'string'.toEnd(file)
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ cat('input.txt').toEnd('output.txt');
+//@ ```
+//@
+//@ Analogous to the redirect-and-append operator `>>` in Unix, but works with JavaScript strings (such as
+//@ those returned by `cat`, `grep`, etc).
+function _toEnd(options, file) {
+  if (!file)
+    common.error('wrong arguments');
+
+  if (!fs.existsSync( path.dirname(file) ))
+      common.error('no such file or directory: ' + path.dirname(file));
+
+  try {
+    fs.appendFileSync(file, this.toString(), 'utf8');
+    return this;
+  } catch(e) {
+    common.error('could not append to file (code '+e.code+'): '+file, true);
+  }
+}
+module.exports = _toEnd;
+
+var common = require('./common');
+var fs = require('fs');
+
+//@
+//@ ### touch([options,] file)
+//@ Available options:
+//@
+//@ + `-a`: Change only the access time
+//@ + `-c`: Do not create any files
+//@ + `-m`: Change only the modification time
+//@ + `-d DATE`: Parse DATE and use it instead of current time
+//@ + `-r FILE`: Use FILE's times instead of current time
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ touch('source.js');
+//@ touch('-c', '/path/to/some/dir/source.js');
+//@ touch({ '-r': FILE }, '/path/to/some/dir/source.js');
+//@ ```
+//@
+//@ Update the access and modification times of each FILE to the current time.
+//@ A FILE argument that does not exist is created empty, unless -c is supplied.
+//@ This is a partial implementation of *[touch(1)](http://linux.die.net/man/1/touch)*.
+function _touch(opts, files) {
+  opts = common.parseOptions(opts, {
+    'a': 'atime_only',
+    'c': 'no_create',
+    'd': 'date',
+    'm': 'mtime_only',
+    'r': 'reference',
+  });
+
+  if (!files) {
+    common.error('no paths given');
+  }
+
+
+  if (Array.isArray(files)) {
+    files.forEach(function(f) {
+      touchFile(opts, f);
+    });
+  } else if (typeof files === 'string') {
+    touchFile(opts, files);
+  } else {
+    common.error('file arg should be a string file path or an Array of string file paths');
+  }
+
+}
+
+function touchFile(opts, file) {
+  var stat = tryStatFile(file);
+
+  if (stat && stat.isDirectory()) {
+    // don't error just exit
+    return;
+  }
+
+  // if the file doesn't already exist and the user has specified --no-create then
+  // this script is finished
+  if (!stat && opts.no_create) {
+    return;
+  }
+
+  // open the file and then close it. this will create it if it doesn't exist but will
+  // not truncate the file
+  fs.closeSync(fs.openSync(file, 'a'));
+
+  //
+  // Set timestamps
+  //
+
+  // setup some defaults
+  var now = new Date();
+  var mtime = opts.date || now;
+  var atime = opts.date || now;
+
+  // use reference file
+  if (opts.reference) {
+    var refStat = tryStatFile(opts.reference);
+    if (!refStat) {
+      common.error('failed to get attributess of ' + opts.reference);
+    }
+    mtime = refStat.mtime;
+    atime = refStat.atime;
+  } else if (opts.date) {
+    mtime = opts.date;
+    atime = opts.date;
+  }
+
+  if (opts.atime_only && opts.mtime_only) {
+    // keep the new values of mtime and atime like GNU
+  } else if (opts.atime_only) {
+    mtime = stat.mtime;
+  } else if (opts.mtime_only) {
+    atime = stat.atime;
+  }
+
+  fs.utimesSync(file, atime, mtime);
+}
+
+module.exports = _touch;
+
+function tryStatFile(filePath) {
+  try {
+    return fs.statSync(filePath);
+  } catch (e) {
+    return null;
+  }
+}
+
+var common = require('./common');
+var fs = require('fs');
+var path = require('path');
+
+// XP's system default value for PATHEXT system variable, just in case it's not
+// set on Windows.
+var XP_DEFAULT_PATHEXT = '.com;.exe;.bat;.cmd;.vbs;.vbe;.js;.jse;.wsf;.wsh';
+
+// Cross-platform method for splitting environment PATH variables
+function splitPath(p) {
+  if (!p)
+    return [];
+
+  if (common.platform === 'win')
+    return p.split(';');
+  else
+    return p.split(':');
+}
+
+function checkPath(path) {
+  return fs.existsSync(path) && !fs.statSync(path).isDirectory();
+}
+
+//@
+//@ ### which(command)
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ var nodeExec = which('node');
+//@ ```
+//@
+//@ Searches for `command` in the system's PATH. On Windows, this uses the
+//@ `PATHEXT` variable to append the extension if it's not already executable.
+//@ Returns string containing the absolute path to the command.
+function _which(options, cmd) {
+  if (!cmd)
+    common.error('must specify command');
+
+  var pathEnv = process.env.path || process.env.Path || process.env.PATH,
+      pathArray = splitPath(pathEnv),
+      where = null;
+
+  // No relative/absolute paths provided?
+  if (cmd.search(/\//) === -1) {
+    // Search for command in PATH
+    pathArray.forEach(function(dir) {
+      if (where)
+        return; // already found it
+
+      var attempt = path.resolve(dir, cmd);
+
+      if (common.platform === 'win') {
+        attempt = attempt.toUpperCase();
+
+        // In case the PATHEXT variable is somehow not set (e.g.
+        // child_process.spawn with an empty environment), use the XP default.
+        var pathExtEnv = process.env.PATHEXT || XP_DEFAULT_PATHEXT;
+        var pathExtArray = splitPath(pathExtEnv.toUpperCase());
+        var i;
+
+        // If the extension is already in PATHEXT, just return that.
+        for (i = 0; i < pathExtArray.length; i++) {
+          var ext = pathExtArray[i];
+          if (attempt.slice(-ext.length) === ext && checkPath(attempt)) {
+            where = attempt;
+            return;
+          }
+        }
+
+        // Cycle through the PATHEXT variable
+        var baseAttempt = attempt;
+        for (i = 0; i < pathExtArray.length; i++) {
+          attempt = baseAttempt + pathExtArray[i];
+          if (checkPath(attempt)) {
+            where = attempt;
+            return;
+          }
+        }
+      } else {
+        // Assume it's Unix-like
+        if (checkPath(attempt)) {
+          where = attempt;
+          return;
+        }
+      }
+    });
+  }
+
+  // Command not found anywhere?
+  if (!checkPath(cmd) && !where)
+    return null;
+
+  where = where || path.resolve(cmd);
+
+  return common.ShellString(where);
+}
+module.exports = _which;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/jshint.json
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/jshint.json b/node_modules/shelljs/jshint.json
deleted file mode 100644
index 205ed9c..0000000
--- a/node_modules/shelljs/jshint.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "loopfunc": true,
-  "sub": true
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/make.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/make.js b/node_modules/shelljs/make.js
index b636447..a8438c8 100644
--- a/node_modules/shelljs/make.js
+++ b/node_modules/shelljs/make.js
@@ -1,48 +1,57 @@
 require('./global');
-config.fatal = true;
 
+global.config.fatal = true;
 global.target = {};
 
+var args = process.argv.slice(2),
+  targetArgs,
+  dashesLoc = args.indexOf('--');
+
+// split args, everything after -- if only for targets
+if (dashesLoc > -1) {
+  targetArgs = args.slice(dashesLoc + 1, args.length);
+  args = args.slice(0, dashesLoc);
+}
+
 // This ensures we only execute the script targets after the entire script has
 // been evaluated
-var args = process.argv.slice(2);
 setTimeout(function() {
   var t;
 
   if (args.length === 1 && args[0] === '--help') {
     console.log('Available targets:');
-    for (t in target)
+    for (t in global.target)
       console.log('  ' + t);
     return;
   }
 
   // Wrap targets to prevent duplicate execution
-  for (t in target) {
+  for (t in global.target) {
     (function(t, oldTarget){
 
       // Wrap it
-      target[t] = function(force) {
-        if (oldTarget.done && !force)
-          return;
-        oldTarget.done = true;
-        return oldTarget.apply(oldTarget, arguments);
+      global.target[t] = function() {
+        if (!oldTarget.done){
+          oldTarget.done = true;
+          oldTarget.result = oldTarget.apply(oldTarget, arguments);
+        }
+        return oldTarget.result;
       };
 
-    })(t, target[t]);
+    })(t, global.target[t]);
   }
 
   // Execute desired targets
   if (args.length > 0) {
     args.forEach(function(arg) {
-      if (arg in target)
-        target[arg]();
+      if (arg in global.target)
+        global.target[arg](targetArgs);
       else {
         console.log('no such target: ' + arg);
-        exit(1);
       }
     });
-  } else if ('all' in target) {
-    target.all();
+  } else if ('all' in global.target) {
+    global.target.all(targetArgs);
   }
 
 }, 0);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/package.json
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/package.json b/node_modules/shelljs/package.json
index 5e65061..44cb880 100644
--- a/node_modules/shelljs/package.json
+++ b/node_modules/shelljs/package.json
@@ -1,9 +1,9 @@
 {
   "name": "shelljs",
-  "version": "0.1.4",
+  "version": "0.6.0",
   "author": {
     "name": "Artur Adib",
-    "email": "aadib@mozilla.com"
+    "email": "arturadib@gmail.com"
   },
   "description": "Portable Unix shell commands for Node.js",
   "keywords": [
@@ -14,11 +14,23 @@
     "jake",
     "synchronous"
   ],
+  "contributors": [
+    {
+      "name": "Ari Porad",
+      "email": "ari@ariporad.com",
+      "url": "http://ariporad.com/"
+    },
+    {
+      "name": "Nate Fischer",
+      "email": "ntfschr@gmail.com"
+    }
+  ],
   "repository": {
     "type": "git",
-    "url": "git://github.com/arturadib/shelljs.git"
+    "url": "git://github.com/shelljs/shelljs.git"
   },
-  "homepage": "http://github.com/arturadib/shelljs",
+  "license": "BSD-3-Clause",
+  "homepage": "http://github.com/shelljs/shelljs",
   "main": "./shell.js",
   "scripts": {
     "test": "node scripts/run-tests"
@@ -28,34 +40,49 @@
   },
   "dependencies": {},
   "devDependencies": {
-    "jshint": "~1.1.0"
+    "coffee-script": "^1.10.0",
+    "jshint": "~2.1.11"
   },
   "optionalDependencies": {},
   "engines": {
-    "node": "*"
+    "node": ">=0.10.0"
   },
-  "_id": "shelljs@0.1.4",
-  "dist": {
-    "shasum": "dfbbe78d56c3c0168d2fb79e10ecd1dbcb07ec0e",
-    "tarball": "http://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz"
+  "gitHead": "fe06baf1173ec6f0a70cd58ddb7d373f4c6446f5",
+  "bugs": {
+    "url": "https://github.com/shelljs/shelljs/issues"
   },
-  "_from": "shelljs@>=0.1.4 <0.2.0",
-  "_npmVersion": "1.2.14",
+  "_id": "shelljs@0.6.0",
+  "_shasum": "ce1ed837b4b0e55b5ec3dab84251ab9dbdc0c7ec",
+  "_from": "shelljs@>=0.6.0 <0.7.0",
+  "_npmVersion": "3.6.0",
+  "_nodeVersion": "5.4.0",
   "_npmUser": {
-    "name": "artur",
-    "email": "arturadib@gmail.com"
+    "name": "ariporad",
+    "email": "ari@ariporad.com"
+  },
+  "dist": {
+    "shasum": "ce1ed837b4b0e55b5ec3dab84251ab9dbdc0c7ec",
+    "tarball": "http://registry.npmjs.org/shelljs/-/shelljs-0.6.0.tgz"
   },
   "maintainers": [
     {
+      "name": "ariporad",
+      "email": "ari@ariporad.com"
+    },
+    {
       "name": "artur",
       "email": "arturadib@gmail.com"
+    },
+    {
+      "name": "nfischer",
+      "email": "ntfschr@gmail.com"
     }
   ],
-  "directories": {},
-  "_shasum": "dfbbe78d56c3c0168d2fb79e10ecd1dbcb07ec0e",
-  "_resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz",
-  "bugs": {
-    "url": "https://github.com/arturadib/shelljs/issues"
+  "_npmOperationalInternal": {
+    "host": "packages-6-west.internal.npmjs.com",
+    "tmp": "tmp/shelljs-0.6.0.tgz_1454632811074_0.5800695188809186"
   },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.0.tgz",
   "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/scripts/docs.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/scripts/docs.js b/node_modules/shelljs/scripts/docs.js
deleted file mode 100755
index 68a2138..0000000
--- a/node_modules/shelljs/scripts/docs.js
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/env node
-require('../global');
-
-echo('Appending docs to README.md');
-
-cd(__dirname + '/..');
-
-// Extract docs from shell.js
-var docs = grep('//@', 'shell.js');
-// Remove '//@'
-docs = docs.replace(/\/\/\@ ?/g, '');
-// Append docs to README
-sed('-i', /## Command reference(.|\n)*/, '## Command reference\n\n' + docs, 'README.md');
-
-echo('All done.');

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/scripts/generate-docs.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/scripts/generate-docs.js b/node_modules/shelljs/scripts/generate-docs.js
new file mode 100644
index 0000000..3a31a91
--- /dev/null
+++ b/node_modules/shelljs/scripts/generate-docs.js
@@ -0,0 +1,26 @@
+#!/usr/bin/env node
+/* globals cat, cd, echo, grep, sed */
+require('../global');
+
+echo('Appending docs to README.md');
+
+cd(__dirname + '/..');
+
+// Extract docs from shell.js
+var docs = grep('//@', 'shell.js');
+
+docs = docs.replace(/\/\/\@include (.+)/g, function(match, path) {
+  var file = path.match('.js$') ? path : path+'.js';
+  return grep('//@', file);
+});
+
+// Remove '//@'
+docs = docs.replace(/\/\/\@ ?/g, '');
+
+// Wipe out the old docs
+cat('README.md').replace(/## Command reference(.|\n)*/, '## Command reference').to('README.md');
+
+// Append new docs to README
+sed('-i', /## Command reference/, '## Command reference\n\n' + docs, 'README.md');
+
+echo('All done.');

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/scripts/run-tests.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/scripts/run-tests.js b/node_modules/shelljs/scripts/run-tests.js
index a9d32fc..e8e7ff2 100755
--- a/node_modules/shelljs/scripts/run-tests.js
+++ b/node_modules/shelljs/scripts/run-tests.js
@@ -1,14 +1,14 @@
 #!/usr/bin/env node
+/* globals cd, echo, exec, exit, ls, pwd, test */
 require('../global');
-
-var path = require('path');
+var common = require('../src/common');
 
 var failed = false;
 
 //
 // Lint
 //
-JSHINT_BIN = './node_modules/jshint/bin/jshint';
+var JSHINT_BIN = 'node_modules/jshint/bin/jshint';
 cd(__dirname + '/..');
 
 if (!test('-f', JSHINT_BIN)) {
@@ -16,7 +16,12 @@ if (!test('-f', JSHINT_BIN)) {
   exit(1);
 }
 
-if (exec(JSHINT_BIN + ' --config jshint.json *.js test/*.js').code !== 0) {
+var jsfiles = common.expand([pwd() + '/*.js',
+                             pwd() + '/scripts/*.js',
+                             pwd() + '/src/*.js',
+                             pwd() + '/test/*.js'
+                            ]).join(' ');
+if (exec('node ' + pwd() + '/' + JSHINT_BIN + ' ' + jsfiles).code !== 0) {
   failed = true;
   echo('*** JSHINT FAILED! (return code != 0)');
   echo();


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[05/14] cordova-browser git commit: CB-10788 Updated checked in node_modules

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/.idea/inspectionProfiles/profiles_settings.xml
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/.idea/inspectionProfiles/profiles_settings.xml b/node_modules/shelljs/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..3b31283
--- /dev/null
+++ b/node_modules/shelljs/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,7 @@
+<component name="InspectionProjectProfileManager">
+  <settings>
+    <option name="PROJECT_PROFILE" value="Project Default" />
+    <option name="USE_PROJECT_PROFILE" value="true" />
+    <version value="1.0" />
+  </settings>
+</component>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/.idea/jsLibraryMappings.xml
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/.idea/jsLibraryMappings.xml b/node_modules/shelljs/.idea/jsLibraryMappings.xml
new file mode 100644
index 0000000..40bdc77
--- /dev/null
+++ b/node_modules/shelljs/.idea/jsLibraryMappings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="JavaScriptLibraryMappings">
+    <file url="file://$PROJECT_DIR$" libraries="{shelljs node_modules}" />
+  </component>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/.idea/libraries/shelljs_node_modules.xml
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/.idea/libraries/shelljs_node_modules.xml b/node_modules/shelljs/.idea/libraries/shelljs_node_modules.xml
new file mode 100644
index 0000000..b1e5dce
--- /dev/null
+++ b/node_modules/shelljs/.idea/libraries/shelljs_node_modules.xml
@@ -0,0 +1,14 @@
+<component name="libraryTable">
+  <library name="shelljs node_modules" type="javaScript">
+    <properties>
+      <option name="frameworkName" value="node_modules" />
+      <sourceFilesUrls>
+        <item url="file://$PROJECT_DIR$/node_modules" />
+      </sourceFilesUrls>
+    </properties>
+    <CLASSES>
+      <root url="file://$PROJECT_DIR$/node_modules" />
+    </CLASSES>
+    <SOURCES />
+  </library>
+</component>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/.idea/misc.xml
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/.idea/misc.xml b/node_modules/shelljs/.idea/misc.xml
new file mode 100644
index 0000000..f524616
--- /dev/null
+++ b/node_modules/shelljs/.idea/misc.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectLevelVcsManager" settingsEditedManually="false">
+    <OptionsSetting value="true" id="Add" />
+    <OptionsSetting value="true" id="Remove" />
+    <OptionsSetting value="true" id="Checkout" />
+    <OptionsSetting value="true" id="Update" />
+    <OptionsSetting value="true" id="Status" />
+    <OptionsSetting value="true" id="Edit" />
+    <ConfirmationsSetting value="0" id="Add" />
+    <ConfirmationsSetting value="0" id="Remove" />
+  </component>
+  <component name="masterDetails">
+    <states>
+      <state key="ScopeChooserConfigurable.UI">
+        <settings>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+    </states>
+  </component>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/.idea/modules.xml
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/.idea/modules.xml b/node_modules/shelljs/.idea/modules.xml
new file mode 100644
index 0000000..26f2275
--- /dev/null
+++ b/node_modules/shelljs/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/shelljs.iml" filepath="$PROJECT_DIR$/.idea/shelljs.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/.idea/shelljs.iml
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/.idea/shelljs.iml b/node_modules/shelljs/.idea/shelljs.iml
new file mode 100644
index 0000000..89f6e57
--- /dev/null
+++ b/node_modules/shelljs/.idea/shelljs.iml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="shelljs node_modules" level="project" />
+  </component>
+</module>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/.idea/vcs.xml
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/.idea/vcs.xml b/node_modules/shelljs/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/node_modules/shelljs/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/.idea/workspace.xml
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/.idea/workspace.xml b/node_modules/shelljs/.idea/workspace.xml
new file mode 100644
index 0000000..9247ca4
--- /dev/null
+++ b/node_modules/shelljs/.idea/workspace.xml
@@ -0,0 +1,764 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="45933638-88e3-4f2a-b91c-9922c650f3b5" name="Default" comment="" />
+    <ignored path="shelljs.iws" />
+    <ignored path=".idea/workspace.xml" />
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="TRACKING_ENABLED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
+  <component name="CreatePatchCommitExecutor">
+    <option name="PATCH_PATH" value="" />
+  </component>
+  <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
+  <component name="FavoritesManager">
+    <favorites_list name="shelljs" />
+  </component>
+  <component name="FileEditorManager">
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
+      <file leaf-file-name="common.js" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/common.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state vertical-scroll-proportion="0.0">
+              <caret line="104" column="7" selection-start-line="104" selection-start-column="7" selection-end-line="104" selection-end-column="7" />
+              <folding>
+                <marker date="1454630861000" expanded="true" signature="1550:1605" placeholder="//..." />
+                <marker date="1454630861000" expanded="true" signature="6173:6214" placeholder="//..." />
+                <marker date="1454630861000" expanded="true" signature="6173:6520" placeholder="{...}" />
+                <marker date="1454630861000" expanded="true" signature="6173:6891" placeholder="{...}" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="RELEASE.md" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/RELEASE.md">
+          <provider editor-type-id="MarkdownPreviewEditor">
+            <state />
+          </provider>
+          <provider selected="true" editor-type-id="text-editor">
+            <state vertical-scroll-proportion="-0.0">
+              <caret line="0" column="15" selection-start-line="0" selection-start-column="15" selection-end-line="0" selection-end-column="15" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="package.json" pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/package.json">
+          <provider selected="true" editor-type-id="text-editor">
+            <state vertical-scroll-proportion="0.7058824">
+              <caret line="40" column="0" selection-start-line="40" selection-start-column="0" selection-end-line="40" selection-end-column="0" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name=".npmignore" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/.npmignore">
+          <provider selected="true" editor-type-id="text-editor">
+            <state vertical-scroll-proportion="0.0">
+              <caret line="9" column="0" selection-start-line="9" selection-start-column="0" selection-end-line="9" selection-end-column="0" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="README.md" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/README.md">
+          <provider editor-type-id="MarkdownPreviewEditor">
+            <state />
+          </provider>
+          <provider selected="true" editor-type-id="text-editor">
+            <state vertical-scroll-proportion="-10.928572">
+              <caret line="72" column="15" selection-start-line="72" selection-start-column="15" selection-end-line="72" selection-end-column="15" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="shjs" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/bin/shjs">
+          <provider selected="true" editor-type-id="text-editor">
+            <state vertical-scroll-proportion="0.0">
+              <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="output.js" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/build/output.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state vertical-scroll-proportion="0.0">
+              <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="cat.js" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/cat.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state vertical-scroll-proportion="0.0">
+              <caret line="38" column="0" selection-start-line="38" selection-start-column="0" selection-end-line="38" selection-end-column="0" />
+              <folding>
+                <marker date="1454628318000" expanded="true" signature="59:506" placeholder="//..." />
+                <marker date="1454628318000" expanded="true" signature="537:958" placeholder="{...}" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="CHANGED_PATHS">
+      <list>
+        <option value="$PROJECT_DIR$/.eslintrc" />
+        <option value="$PROJECT_DIR$/CONTRIBUTING.md" />
+        <option value="$PROJECT_DIR$/scripts/run-tests.js" />
+        <option value="$PROJECT_DIR$/src/rm.js" />
+        <option value="$PROJECT_DIR$/test/resources/issue44/main.js" />
+        <option value="$PROJECT_DIR$/test/ln.js" />
+        <option value="$PROJECT_DIR$/test/common.js" />
+        <option value="$PROJECT_DIR$/src/ln.js" />
+        <option value="$PROJECT_DIR$/src/ls.js" />
+        <option value="$PROJECT_DIR$/test/which.js" />
+        <option value="$PROJECT_DIR$/.eslintrc.json" />
+        <option value="$PROJECT_DIR$/src/cat.js" />
+        <option value="$PROJECT_DIR$/src/common.js" />
+        <option value="$PROJECT_DIR$/test/TODO" />
+        <option value="$PROJECT_DIR$/CHANGELOG.md" />
+        <option value="$PROJECT_DIR$/maked.js" />
+        <option value="$PROJECT_DIR$/docs/my_docs.md" />
+        <option value="$PROJECT_DIR$/.npmignore" />
+        <option value="$PROJECT_DIR$/m.js" />
+        <option value="$PROJECT_DIR$/README.md" />
+        <option value="$PROJECT_DIR$/package.json" />
+      </list>
+    </option>
+  </component>
+  <component name="JsBuildToolGruntFileManager" detection-done="true" />
+  <component name="JsBuildToolPackageJson" detection-done="true">
+    <package-json value="$PROJECT_DIR$/package.json" />
+  </component>
+  <component name="JsGulpfileManager">
+    <detection-done>true</detection-done>
+  </component>
+  <component name="ProjectFrameBounds">
+    <option name="width" value="1920" />
+    <option name="height" value="1200" />
+  </component>
+  <component name="ProjectLevelVcsManager" settingsEditedManually="true">
+    <OptionsSetting value="true" id="Add" />
+    <OptionsSetting value="true" id="Remove" />
+    <OptionsSetting value="true" id="Checkout" />
+    <OptionsSetting value="true" id="Update" />
+    <OptionsSetting value="true" id="Status" />
+    <OptionsSetting value="true" id="Edit" />
+    <ConfirmationsSetting value="0" id="Add" />
+    <ConfirmationsSetting value="0" id="Remove" />
+  </component>
+  <component name="ProjectView">
+    <navigator currentView="ProjectPane" proportions="" version="1">
+      <flattenPackages />
+      <showMembers />
+      <showModules />
+      <showLibraryContents />
+      <hideEmptyPackages />
+      <abbreviatePackageNames />
+      <autoscrollToSource />
+      <autoscrollFromSource />
+      <sortByType />
+      <manualOrder />
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="ProjectPane">
+        <subPane>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="shelljs" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="shelljs" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="shelljs" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="shelljs" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="shelljs" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="build" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="shelljs" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="shelljs" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="bin" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+        </subPane>
+      </pane>
+      <pane id="Scratches" />
+      <pane id="Scope" />
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="settings.editor.selected.configurable" value="Markdown" />
+    <property name="settings.editor.splitter.proportion" value="0.2" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="js-jscs-nodeInterpreter" value="$USER_HOME$/n/bin/node" />
+    <property name="HbShouldOpenHtmlAsHb" value="" />
+    <property name="jsx.switch.disabled" value="true" />
+    <property name="FullScreen" value="true" />
+  </component>
+  <component name="RunManager">
+    <configuration default="true" type="BashConfigurationType" factoryName="Bash">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="INTERPRETER_PATH" value="/bin/bash" />
+      <option name="WORKING_DIRECTORY" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <option name="SCRIPT_NAME" value="" />
+      <option name="PARAMETERS" value="" />
+      <module name="" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="DartCommandLineRunConfigurationType" factoryName="Dart Command Line Application">
+      <method />
+    </configuration>
+    <configuration default="true" type="DartTestRunConfigurationType" factoryName="Dart Test">
+      <method />
+    </configuration>
+    <configuration default="true" type="JavaScriptTestRunnerKarma" factoryName="Karma" config-file="">
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
+      <method />
+    </configuration>
+    <configuration default="true" type="NodeJSConfigurationType" factoryName="Node.js" working-dir="">
+      <method />
+    </configuration>
+    <configuration default="true" type="cucumber.js" factoryName="Cucumber.js">
+      <option name="cucumberJsArguments" value="" />
+      <option name="executablePath" />
+      <option name="filePath" />
+      <method />
+    </configuration>
+    <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
+      <node-options />
+      <gulpfile />
+      <tasks />
+      <arguments />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="js.build_tools.npm" factoryName="npm">
+      <command value="run-script" />
+      <scripts />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="mocha-javascript-test-runner" factoryName="Mocha">
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>DIRECTORY</test-kind>
+      <test-directory />
+      <recursive>false</recursive>
+      <method />
+    </configuration>
+  </component>
+  <component name="ShelveChangesManager" show_recycled="false" />
+  <component name="SvnConfiguration">
+    <configuration />
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="45933638-88e3-4f2a-b91c-9922c650f3b5" name="Default" comment="" />
+      <created>1453951651105</created>
+      <option name="number" value="Default" />
+      <updated>1453951651105</updated>
+    </task>
+    <servers />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="0" y="0" width="1920" height="1200" extended-state="6" />
+    <editor active="false" />
+    <layout>
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.15745129" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
+      <window_info id="npm" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Terminal" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.20318021" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+    </layout>
+  </component>
+  <component name="Vcs.Log.UiProperties">
+    <option name="RECENTLY_FILTERED_USER_GROUPS">
+      <collection />
+    </option>
+    <option name="RECENTLY_FILTERED_BRANCH_GROUPS">
+      <collection />
+    </option>
+  </component>
+  <component name="VcsContentAnnotationSettings">
+    <option name="myLimit" value="2678400000" />
+  </component>
+  <component name="XDebuggerManager">
+    <breakpoint-manager />
+    <watches-manager />
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/src/common.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding>
+            <marker date="1454630861000" expanded="true" signature="1550:1605" placeholder="//..." />
+            <marker date="1454630861000" expanded="true" signature="6173:6214" placeholder="//..." />
+            <marker date="1454630861000" expanded="true" signature="6173:6520" placeholder="{...}" />
+            <marker date="1454630861000" expanded="true" signature="6173:6891" placeholder="{...}" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/shell.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/global.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/.gitignore">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="2" column="0" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/which.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/RELEASE.md">
+      <provider editor-type-id="MarkdownPreviewEditor">
+        <state />
+      </provider>
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/package.json">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="29" column="23" selection-start-line="29" selection-start-column="23" selection-end-line="29" selection-end-column="23" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/README.md">
+      <provider editor-type-id="MarkdownPreviewEditor">
+        <state />
+      </provider>
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="43" column="0" selection-start-line="43" selection-start-column="0" selection-end-line="43" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/scripts/generate-docs.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/scripts/run-tests.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="26" column="50" selection-start-line="26" selection-start-column="50" selection-end-line="26" selection-end-column="50" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/shell.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/global.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/.gitignore">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="2" column="0" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/which.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/RELEASE.md">
+      <provider editor-type-id="MarkdownPreviewEditor">
+        <state />
+      </provider>
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/package.json">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="29" column="23" selection-start-line="29" selection-start-column="23" selection-end-line="29" selection-end-column="23" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/README.md">
+      <provider editor-type-id="MarkdownPreviewEditor">
+        <state />
+      </provider>
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="43" column="0" selection-start-line="43" selection-start-column="0" selection-end-line="43" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/scripts/generate-docs.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/scripts/run-tests.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="26" column="50" selection-start-line="26" selection-start-column="50" selection-end-line="26" selection-end-column="50" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/shell.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/global.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/.gitignore">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/.gitignore">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="2" column="0" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/scripts/generate-docs.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/sed.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="1" column="0" selection-start-line="1" selection-start-column="0" selection-end-line="1" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/grep.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/shell.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/global.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/sed.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="1" column="0" selection-start-line="1" selection-start-column="0" selection-end-line="1" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/pwd.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/scripts/run-tests.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="-0.17814727">
+          <caret line="24" column="16" selection-start-line="24" selection-start-column="16" selection-end-line="24" selection-end-column="16" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/rm.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="189" column="0" selection-start-line="189" selection-start-column="0" selection-end-line="189" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/node_modules/glob/README.md">
+      <provider editor-type-id="MarkdownPreviewEditor">
+        <state />
+      </provider>
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="30.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/rm.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="137" column="25" selection-start-line="137" selection-start-column="25" selection-end-line="137" selection-end-column="25" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/resources/issue44/main.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="1" column="0" selection-start-line="1" selection-start-column="0" selection-end-line="1" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/ln.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="20" column="1" selection-start-line="20" selection-start-column="1" selection-end-line="20" selection-end-column="1" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/common.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="46" column="10" selection-start-line="46" selection-start-column="10" selection-end-line="46" selection-end-column="10" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/ls.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="15" column="18" selection-start-line="15" selection-start-column="18" selection-end-line="15" selection-end-column="18" />
+          <folding>
+            <marker date="1454625654000" expanded="true" signature="11066:11146" placeholder="{...}" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ln.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="48" column="9" selection-start-line="48" selection-start-column="9" selection-end-line="48" selection-end-column="9" />
+          <folding>
+            <marker date="1454625654000" expanded="true" signature="1476:1565" placeholder="{...}" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/ls.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="168" column="0" selection-start-line="168" selection-start-column="0" selection-end-line="168" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/which.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="19" column="0" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="0" />
+          <folding>
+            <marker date="1454625654000" expanded="true" signature="711:743" placeholder="{...}" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/cat.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="38" column="0" selection-start-line="38" selection-start-column="0" selection-end-line="38" selection-end-column="0" />
+          <folding>
+            <marker date="1454628318000" expanded="true" signature="59:506" placeholder="//..." />
+            <marker date="1454628318000" expanded="true" signature="537:958" placeholder="{...}" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/common.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="104" column="7" selection-start-line="104" selection-start-column="7" selection-end-line="104" selection-end-column="7" />
+          <folding>
+            <marker date="1454630861000" expanded="true" signature="1550:1605" placeholder="//..." />
+            <marker date="1454630861000" expanded="true" signature="6173:6214" placeholder="//..." />
+            <marker date="1454630861000" expanded="true" signature="6173:6520" placeholder="{...}" />
+            <marker date="1454630861000" expanded="true" signature="6173:6891" placeholder="{...}" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/.npmignore">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="9" column="0" selection-start-line="9" selection-start-column="0" selection-end-line="9" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/RELEASE.md">
+      <provider editor-type-id="MarkdownPreviewEditor">
+        <state />
+      </provider>
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="-0.0">
+          <caret line="0" column="15" selection-start-line="0" selection-start-column="15" selection-end-line="0" selection-end-column="15" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/bin/shjs">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/build/output.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/README.md">
+      <provider editor-type-id="MarkdownPreviewEditor">
+        <state />
+      </provider>
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="-10.928572">
+          <caret line="72" column="15" selection-start-line="72" selection-start-column="15" selection-end-line="72" selection-end-column="15" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/package.json">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.7058824">
+          <caret line="40" column="0" selection-start-line="40" selection-start-column="0" selection-end-line="40" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+  </component>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/.npmignore
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/.npmignore b/node_modules/shelljs/.npmignore
index c2658d7..8b693ff 100644
--- a/node_modules/shelljs/.npmignore
+++ b/node_modules/shelljs/.npmignore
@@ -1 +1,9 @@
-node_modules/
+test/
+tmp/
+.documentup.json
+.gitignore
+.jshintrc
+.lgtm
+.travis.yml
+appveyor.yml
+RELEASE.md

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/.travis.yml
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/.travis.yml b/node_modules/shelljs/.travis.yml
deleted file mode 100644
index 5caf599..0000000
--- a/node_modules/shelljs/.travis.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-language: node_js
-node_js:
-  - 0.6
-  - 0.8
-

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/LICENSE
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/LICENSE b/node_modules/shelljs/LICENSE
index 1b35ee9..0f0f119 100644
--- a/node_modules/shelljs/LICENSE
+++ b/node_modules/shelljs/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2012, Artur Adib <aa...@mozilla.com>
+Copyright (c) 2012, Artur Adib <ar...@gmail.com>
 All rights reserved.
 
 You may use this project under the terms of the New BSD license as follows:

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/MAINTAINERS
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/MAINTAINERS b/node_modules/shelljs/MAINTAINERS
new file mode 100644
index 0000000..3f94761
--- /dev/null
+++ b/node_modules/shelljs/MAINTAINERS
@@ -0,0 +1,3 @@
+Ari Porad <ar...@ariporad.com> (@ariporad)
+Nate Fischer <nt...@gmail.com> (@nfischer)
+Artur Adib <ar...@gmail.com> (@arturadib)

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/README.md
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/README.md b/node_modules/shelljs/README.md
index 8b45592..d6dcb63 100644
--- a/node_modules/shelljs/README.md
+++ b/node_modules/shelljs/README.md
@@ -1,8 +1,12 @@
-# ShellJS - Unix shell commands for Node.js [![Build Status](https://secure.travis-ci.org/arturadib/shelljs.png)](http://travis-ci.org/arturadib/shelljs)
+# ShellJS - Unix shell commands for Node.js
+
+[![Join the chat at https://gitter.im/shelljs/shelljs](https://badges.gitter.im/shelljs/shelljs.svg)](https://gitter.im/shelljs/shelljs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+[![Build Status](https://travis-ci.org/shelljs/shelljs.svg?branch=master)](http://travis-ci.org/shelljs/shelljs)
+[![Build status](https://ci.appveyor.com/api/projects/status/42txr0s3ux5wbumv/branch/master?svg=true)](https://ci.appveyor.com/project/shelljs/shelljs)
 
 ShellJS is a portable **(Windows/Linux/OS X)** implementation of Unix shell commands on top of the Node.js API. You can use it to eliminate your shell script's dependency on Unix while still keeping its familiar and powerful commands. You can also install it globally so you can run it from outside Node projects - say goodbye to those gnarly Bash scripts!
 
-The project is [unit-tested](http://travis-ci.org/arturadib/shelljs) and battled-tested in projects like:
+The project is [unit-tested](http://travis-ci.org/shelljs/shelljs) and battled-tested in projects like:
 
 + [PDF.js](http://github.com/mozilla/pdf.js) - Firefox's next-gen PDF reader
 + [Firebug](http://getfirebug.com/) - Firefox's infamous debugger
@@ -13,6 +17,8 @@ The project is [unit-tested](http://travis-ci.org/arturadib/shelljs) and battled
 
 and [many more](https://npmjs.org/browse/depended/shelljs).
 
+If you have feedback, suggestions, or need help, feel free to post in our [issue tracker](https://github.com/shelljs/shelljs/issues).
+
 ## Installing
 
 Via npm:
@@ -28,9 +34,6 @@ run ShellJS scripts much like any shell script from the command line, i.e. witho
 $ shjs my_script
 ```
 
-You can also just copy `shell.js` into your project's directory, and `require()` accordingly.
-
-
 ## Examples
 
 ### JavaScript
@@ -65,6 +68,8 @@ if (exec('git commit -am "Auto-commit"').code !== 0) {
 
 ### CoffeeScript
 
+CoffeeScript is also supported automatically:
+
 ```coffeescript
 require 'shelljs/global'
 
@@ -81,7 +86,7 @@ cd 'lib'
 for file in ls '*.js'
   sed '-i', 'BUILD_VERSION', 'v0.1.2', file
   sed '-i', /.*REMOVE_THIS_LINE.*\n/, '', file
-  sed '-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat 'macro.js', file
+  sed '-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat('macro.js'), file
 cd '..'
 
 # Run external tool synchronously
@@ -103,42 +108,55 @@ shell.echo('hello world');
 
 ## Make tool
 
-A convenience script `shelljs/make` is also provided to mimic the behavior of a Unix Makefile. In this case all shell objects are global, and command line arguments will cause the script to execute only the corresponding function in the global `target` object. To avoid redundant calls, target functions are executed only once per script.
-
-Example (CoffeeScript):
-
-```coffeescript
-require 'shelljs/make'
-
-target.all = ->
-  target.bundle()
-  target.docs()
+A convenience script `shelljs/make` is also provided to mimic the behavior of a Unix Makefile.
+In this case all shell objects are global, and command line arguments will cause the script to
+execute only the corresponding function in the global `target` object. To avoid redundant calls,
+target functions are executed only once per script.
 
-target.bundle = ->
-  cd __dirname
-  mkdir 'build'
-  cd 'lib'
-  (cat '*.js').to '../build/output.js'
+Example:
 
-target.docs = ->
-  cd __dirname
-  mkdir 'docs'
-  cd 'lib'
-  for file in ls '*.js'
-    text = grep '//@', file     # extract special comments
-    text.replace '//@', ''      # remove comment tags
-    text.to 'docs/my_docs.md'
+```javascript
+require('shelljs/make');
+
+target.all = function() {
+  target.bundle();
+  target.docs();
+};
+
+target.bundle = function() {
+  cd(__dirname);
+  mkdir('-p', 'build');
+  cd('src');
+  cat('*.js').to('../build/output.js');
+};
+
+target.docs = function() {
+  cd(__dirname);
+  mkdir('-p', 'docs');
+  var files = ls('src/*.js');
+  for(var i = 0; i < files.length; i++) {
+    var text = grep('//@', files[i]);     // extract special comments
+    text = text.replace(/\/\/@/g, '');    // remove comment tags
+    text.toEnd('docs/my_docs.md');
+  }
+};
 ```
 
-To run the target `all`, call the above script without arguments: `$ node make`. To run the target `docs`: `$ node make docs`, and so on.
+To run the target `all`, call the above script without arguments: `$ node make`. To run the target `docs`: `$ node make docs`.
 
+You can also pass arguments to your targets by using the `--` separator. For example, to pass `arg1` and `arg2` to a target `bundle`, do `$ node make bundle -- arg1 arg2`:
 
+```javascript
+require('shelljs/make');
 
-<!-- 
+target.bundle = function(argsArray) {
+  // argsArray = ['arg1', 'arg2']
+  /* ... */
+}
+```
 
-  DO NOT MODIFY BEYOND THIS POINT - IT'S AUTOMATICALLY GENERATED
 
--->
+<!-- DO NOT MODIFY BEYOND THIS POINT - IT'S AUTOMATICALLY GENERATED -->
 
 
 ## Command reference
@@ -147,18 +165,26 @@ To run the target `all`, call the above script without arguments: `$ node make`.
 All commands run synchronously, unless otherwise stated.
 
 
-### cd('dir')
-Changes to directory `dir` for the duration of the script
+### cd([dir])
+Changes to directory `dir` for the duration of the script. Changes to home
+directory if no argument is supplied.
+
 
 ### pwd()
 Returns the current directory.
 
-### ls([options ,] path [,path ...])
-### ls([options ,] path_array)
+
+### ls([options,] [path, ...])
+### ls([options,] path_array)
 Available options:
 
 + `-R`: recursive
 + `-A`: all files (include files beginning with `.`, except for `.` and `..`)
++ `-d`: list directories themselves, not their contents
++ `-l`: list objects representing each file, each with fields containing `ls
+        -l` output fields. See
+        [fs.Stats](https://nodejs.org/api/fs.html#fs_class_fs_stats)
+        for more info
 
 Examples:
 
@@ -166,11 +192,13 @@ Examples:
 ls('projs/*.js');
 ls('-R', '/users/me', '/tmp');
 ls('-R', ['/users/me', '/tmp']); // same as above
+ls('-l', 'file.txt'); // { name: 'file.txt', mode: 33188, nlink: 1, ...}
 ```
 
 Returns array of files in the given path, or in current directory if no path provided.
 
-### find(path [,path ...])
+
+### find(path [, path ...])
 ### find(path_array)
 Examples:
 
@@ -185,11 +213,13 @@ Returns array of all files (however deep) in the given paths.
 The main difference from `ls('-R', path)` is that the resulting file names
 include the base directories, e.g. `lib/resources/file1` instead of just `file1`.
 
-### cp([options ,] source [,source ...], dest)
-### cp([options ,] source_array, dest)
+
+### cp([options,] source [, source ...], dest)
+### cp([options,] source_array, dest)
 Available options:
 
-+ `-f`: force
++ `-f`: force (default behavior)
++ `-n`: no-clobber
 + `-r, -R`: recursive
 
 Examples:
@@ -202,8 +232,9 @@ cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above
 
 Copies files. The wildcard `*` is accepted.
 
-### rm([options ,] file [, file ...])
-### rm([options ,] file_array)
+
+### rm([options,] file [, file ...])
+### rm([options,] file_array)
 Available options:
 
 + `-f`: force
@@ -219,27 +250,30 @@ rm(['some_file.txt', 'another_file.txt']); // same as above
 
 Removes files. The wildcard `*` is accepted.
 
-### mv(source [, source ...], dest')
-### mv(source_array, dest')
+
+### mv([options ,] source [, source ...], dest')
+### mv([options ,] source_array, dest')
 Available options:
 
-+ `f`: force
++ `-f`: force (default behavior)
++ `-n`: no-clobber
 
 Examples:
 
 ```javascript
-mv('-f', 'file', 'dir/');
+mv('-n', 'file', 'dir/');
 mv('file1', 'file2', 'dir/');
 mv(['file1', 'file2'], 'dir/'); // same as above
 ```
 
 Moves files. The wildcard `*` is accepted.
 
-### mkdir([options ,] dir [, dir ...])
-### mkdir([options ,] dir_array)
+
+### mkdir([options,] dir [, dir ...])
+### mkdir([options,] dir_array)
 Available options:
 
-+ `p`: full path (will create intermediate dirs if necessary)
++ `-p`: full path (will create intermediate dirs if necessary)
 
 Examples:
 
@@ -250,6 +284,7 @@ mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above
 
 Creates directories.
 
+
 ### test(expression)
 Available expression primaries:
 
@@ -258,7 +293,7 @@ Available expression primaries:
 + `'-d', 'path'`: true if path is a directory
 + `'-e', 'path'`: true if path exists
 + `'-f', 'path'`: true if path is a regular file
-+ `'-L', 'path'`: true if path is a symboilc link
++ `'-L', 'path'`: true if path is a symbolic link
 + `'-p', 'path'`: true if path is a pipe (FIFO)
 + `'-S', 'path'`: true if path is a socket
 
@@ -271,6 +306,7 @@ if (!test('-f', path)) continue; // skip if it's a regular file
 
 Evaluates expression using the available primaries and returns corresponding value.
 
+
 ### cat(file [, file ...])
 ### cat(file_array)
 
@@ -286,6 +322,7 @@ Returns a string containing the given file, or a concatenated string
 containing the files if more than one file is given (a new line character is
 introduced between each file). Wildcard `*` accepted.
 
+
 ### 'string'.to(file)
 
 Examples:
@@ -297,7 +334,21 @@ cat('input.txt').to('output.txt');
 Analogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as
 those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_
 
-### sed([options ,] search_regex, replace_str, file)
+
+### 'string'.toEnd(file)
+
+Examples:
+
+```javascript
+cat('input.txt').toEnd('output.txt');
+```
+
+Analogous to the redirect-and-append operator `>>` in Unix, but works with JavaScript strings (such as
+those returned by `cat`, `grep`, etc).
+
+
+### sed([options,] search_regex, replacement, file [, file ...])
+### sed([options,] search_regex, replacement, file_array)
 Available options:
 
 + `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_
@@ -309,11 +360,12 @@ sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js');
 sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js');
 ```
 
-Reads an input string from `file` and performs a JavaScript `replace()` on the input
-using the given search regex and replacement string. Returns the new string after replacement.
+Reads an input string from `files` and performs a JavaScript `replace()` on the input
+using the given search regex and replacement string or function. Returns the new string after replacement.
+
 
-### grep([options ,] regex_filter, file [, file ...])
-### grep([options ,] regex_filter, file_array)
+### grep([options,] regex_filter, file [, file ...])
+### grep([options,] regex_filter, file_array)
 Available options:
 
 + `-v`: Inverse the sense of the regex and print the lines not matching the criteria.
@@ -328,6 +380,7 @@ grep('GLOBAL_VARIABLE', '*.js');
 Reads input string from given files and returns a string containing all lines of the
 file that match the given `regex_filter`. Wildcard `*` accepted.
 
+
 ### which(command)
 
 Examples:
@@ -336,10 +389,12 @@ Examples:
 var nodeExec = which('node');
 ```
 
-Searches for `command` in the system's PATH. On Windows looks for `.exe`, `.cmd`, and `.bat` extensions.
+Searches for `command` in the system's PATH. On Windows, this uses the
+`PATHEXT` variable to append the extension if it's not already executable.
 Returns string containing the absolute path to the command.
 
-### echo(string [,string ...])
+
+### echo(string [, string ...])
 
 Examples:
 
@@ -351,20 +406,6 @@ var str = echo('hello world');
 Prints string to stdout, and returns string with additional utility methods
 like `.to()`.
 
-### dirs([options | '+N' | '-N'])
-
-Available options:
-
-+ `-c`: Clears the directory stack by deleting all of the elements.
-
-Arguments:
-
-+ `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.
-+ `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero.
-
-Display the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified.
-
-See also: pushd, popd
 
 ### pushd([options,] [dir | '-N' | '+N'])
 
@@ -411,6 +452,38 @@ echo(process.cwd()); // '/usr'
 
 When no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack.
 
+### dirs([options | '+N' | '-N'])
+
+Available options:
+
++ `-c`: Clears the directory stack by deleting all of the elements.
+
+Arguments:
+
++ `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.
++ `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero.
+
+Display the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified.
+
+See also: pushd, popd
+
+
+### ln([options,] source, dest)
+Available options:
+
++ `-s`: symlink
++ `-f`: force
+
+Examples:
+
+```javascript
+ln('file', 'newlink');
+ln('-sf', 'file', 'existing');
+```
+
+Links source to dest. Use -f to force the link, should dest already exist.
+
+
 ### exit(code)
 Exits the current process with the given exit code.
 
@@ -420,34 +493,39 @@ Object containing environment variables (both getter and setter). Shortcut to pr
 ### exec(command [, options] [, callback])
 Available options (all `false` by default):
 
-+ `async`: Asynchronous execution. Defaults to true if a callback is provided.
++ `async`: Asynchronous execution. If a callback is provided, it will be set to
+  `true`, regardless of the passed value.
 + `silent`: Do not echo program output to console.
++ and any option available to NodeJS's
+  [child_process.exec()](https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback)
 
 Examples:
 
 ```javascript
-var version = exec('node --version', {silent:true}).output;
+var version = exec('node --version', {silent:true}).stdout;
 
 var child = exec('some_long_running_process', {async:true});
 child.stdout.on('data', function(data) {
   /* ... do something with data ... */
 });
 
-exec('some_long_running_process', function(code, output) {
+exec('some_long_running_process', function(code, stdout, stderr) {
   console.log('Exit code:', code);
-  console.log('Program output:', output);
+  console.log('Program output:', stdout);
+  console.log('Program stderr:', stderr);
 });
 ```
 
-Executes the given `command` _synchronously_, unless otherwise specified.
-When in synchronous mode returns the object `{ code:..., output:... }`, containing the program's
-`output` (stdout + stderr)  and its exit `code`. Otherwise returns the child process object, and
-the `callback` gets the arguments `(code, output)`.
+Executes the given `command` _synchronously_, unless otherwise specified.  When in synchronous
+mode returns the object `{ code:..., stdout:... , stderr:... }`, containing the program's
+`stdout`, `stderr`, and its exit `code`. Otherwise returns the child process object,
+and the `callback` gets the arguments `(code, stdout, stderr)`.
 
 **Note:** For long-lived processes, it's best to run `exec()` asynchronously as
 the current synchronous implementation uses a lot of CPU. This should be getting
 fixed soon.
 
+
 ### chmod(octal_mode || octal_string, file)
 ### chmod(symbolic_mode, file)
 
@@ -461,7 +539,7 @@ Examples:
 
 ```javascript
 chmod(755, '/Users/brandon');
-chmod('755', '/Users/brandon'); // same as above 
+chmod('755', '/Users/brandon'); // same as above
 chmod('u+x', '/Users/brandon');
 ```
 
@@ -474,6 +552,65 @@ Notable exceptions:
   given to the umask.
 + There is no "quiet" option since default behavior is to run silent.
 
+
+### touch([options,] file)
+Available options:
+
++ `-a`: Change only the access time
++ `-c`: Do not create any files
++ `-m`: Change only the modification time
++ `-d DATE`: Parse DATE and use it instead of current time
++ `-r FILE`: Use FILE's times instead of current time
+
+Examples:
+
+```javascript
+touch('source.js');
+touch('-c', '/path/to/some/dir/source.js');
+touch({ '-r': FILE }, '/path/to/some/dir/source.js');
+```
+
+Update the access and modification times of each FILE to the current time.
+A FILE argument that does not exist is created empty, unless -c is supplied.
+This is a partial implementation of *[touch(1)](http://linux.die.net/man/1/touch)*.
+
+
+### set(options)
+Available options:
+
++ `+/-e`: exit upon error (`config.fatal`)
++ `+/-v`: verbose: show all commands (`config.verbose`)
+
+Examples:
+
+```javascript
+set('-e'); // exit upon first error
+set('+e'); // this undoes a "set('-e')"
+```
+
+Sets global configuration variables
+
+
+## Non-Unix commands
+
+
+### tempdir()
+
+Examples:
+
+```javascript
+var tmp = tempdir(); // "/tmp" for most *nix platforms
+```
+
+Searches and returns string containing a writeable, platform-dependent temporary directory.
+Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir).
+
+
+### error()
+Tests if error occurred in the last command. Returns `null` if no error occurred,
+otherwise returns string explaining the error
+
+
 ## Configuration
 
 
@@ -481,10 +618,11 @@ Notable exceptions:
 Example:
 
 ```javascript
-var silentState = config.silent; // save old silent state
-config.silent = true;
+var sh = require('shelljs');
+var silentState = sh.config.silent; // save old silent state
+sh.config.silent = true;
 /* ... */
-config.silent = silentState; // restore old silent state
+sh.config.silent = silentState; // restore old silent state
 ```
 
 Suppresses all command output if `true`, except for `echo()` calls.
@@ -494,20 +632,27 @@ Default is `false`.
 Example:
 
 ```javascript
-config.fatal = true;
+require('shelljs/global');
+config.fatal = true; // or set('-e');
 cp('this_file_does_not_exist', '/dev/null'); // dies here
 /* more commands... */
 ```
 
-If `true` the script will die on errors. Default is `false`.
+If `true` the script will die on errors. Default is `false`. This is
+analogous to Bash's `set -e`
 
-## Non-Unix commands
+### config.verbose
+Example:
 
+```javascript
+config.verbose = true; // or set('-v');
+cd('dir/');
+ls('subdir/');
+```
 
-### tempdir()
-Searches and returns string containing a writeable, platform-dependent temporary directory.
-Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir).
+Will print each command as follows:
 
-### error()
-Tests if error occurred in the last command. Returns `null` if no error occurred,
-otherwise returns string explaining the error
+```
+cd dir/
+ls subdir/
+```

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/bin/shjs
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/bin/shjs b/node_modules/shelljs/bin/shjs
index d239a7a..aae3bc6 100755
--- a/node_modules/shelljs/bin/shjs
+++ b/node_modules/shelljs/bin/shjs
@@ -37,7 +37,9 @@ if (scriptName.match(/\.coffee$/)) {
   // CoffeeScript
   //
   if (which('coffee')) {
-    exec('coffee ' + scriptName + ' ' + args.join(' '), { async: true });
+    exec('coffee "' + scriptName + '" ' + args.join(' '), function(code) {
+      process.exit(code);
+    });
   } else {
     console.log('ShellJS: CoffeeScript interpreter not found');
     console.log();
@@ -47,5 +49,7 @@ if (scriptName.match(/\.coffee$/)) {
   //
   // JavaScript
   //
-  exec('node ' + scriptName + ' ' + args.join(' '), { async: true });
+  exec('node "' + scriptName + '" ' + args.join(' '), function(code) {
+    process.exit(code);
+  });
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[09/14] cordova-browser git commit: CB-10788 Updated checked in node_modules

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/package.json
index d33ee13..3a00a92 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/package.json
@@ -1,7 +1,7 @@
 {
   "name": "mime-types",
   "description": "The ultimate javascript content-type utility.",
-  "version": "2.1.7",
+  "version": "2.1.10",
   "contributors": [
     {
       "name": "Douglas Christopher Wilson",
@@ -28,11 +28,11 @@
     "url": "git+https://github.com/jshttp/mime-types.git"
   },
   "dependencies": {
-    "mime-db": "~1.19.0"
+    "mime-db": "~1.22.0"
   },
   "devDependencies": {
-    "istanbul": "0.3.20",
-    "mocha": "~1.21.5"
+    "istanbul": "0.4.2",
+    "mocha": "1.21.5"
   },
   "files": [
     "HISTORY.md",
@@ -47,14 +47,43 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/test.js",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot test/test.js"
   },
-  "readme": "# mime-types\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nThe ultimate javascript content-type utility.\n\nSimilar to [node-mime](https://github.com/broofa/node-mime), except:\n\n- __No fallbacks.__ Instead of naively returning the first available type, `mime-types` simply returns `false`,\n  so do `var type = mime.lookup('unrecognized') || 'application/octet-stream'`.\n- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`.\n- Additional mime types are added such as jade and stylus via [mime-db](https://github.com/jshttp/mime-db)\n- No `.define()` functionality\n\nOtherwise, the API is compatible.\n\n## Install\n\n```sh\n$ npm install mime-types\n```\n\n## Adding Types\n\nAll mime types are based on [mime-db](https://github.com/jshtt
 p/mime-db),\nso open a PR there if you'd like to add mime types.\n\n## API\n\n```js\nvar mime = require('mime-types')\n```\n\nAll functions return `false` if input is invalid or not found.\n\n### mime.lookup(path)\n\nLookup the content-type associated with a file.\n\n```js\nmime.lookup('json')             // 'application/json'\nmime.lookup('.md')              // 'text/x-markdown'\nmime.lookup('file.html')        // 'text/html'\nmime.lookup('folder/file.js')   // 'application/javascript'\nmime.lookup('folder/.htaccess') // false\n\nmime.lookup('cats') // false\n```\n\n### mime.contentType(type)\n\nCreate a full content-type header given a content-type or extension.\n\n```js\nmime.contentType('markdown')  // 'text/x-markdown; charset=utf-8'\nmime.contentType('file.json') // 'application/json; charset=utf-8'\n\n// from a full path\nmime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8'\n```\n\n### mime.extension(type)\n\nGet the default extension for 
 a content-type.\n\n```js\nmime.extension('application/octet-stream') // 'bin'\n```\n\n### mime.charset(type)\n\nLookup the implied default charset of a content-type.\n\n```js\nmime.charset('text/x-markdown') // 'UTF-8'\n```\n\n### var type = mime.types[extension]\n\nA map of content-types by extension.\n\n### [extensions...] = mime.extensions[type]\n\nA map of extensions by content-type.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/mime-types.svg\n[npm-url]: https://npmjs.org/package/mime-types\n[node-version-image]: https://img.shields.io/node/v/mime-types.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/mime-types/master.svg\n[travis-url]: https://travis-ci.org/jshttp/mime-types\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-types/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/mime-types\n[downloads-image]: https://img.shields.io/npm/dm/mime-types.svg\n[downloads
 -url]: https://npmjs.org/package/mime-types\n",
-  "readmeFilename": "README.md",
+  "gitHead": "70785d38e9cc251137b00f73ab3d3257c4aea203",
   "bugs": {
     "url": "https://github.com/jshttp/mime-types/issues"
   },
   "homepage": "https://github.com/jshttp/mime-types#readme",
-  "_id": "mime-types@2.1.7",
-  "_shasum": "ff603970e3c731ef6f7f4df3c9a0f463a13c2755",
-  "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.7.tgz",
-  "_from": "mime-types@>=2.1.6 <2.2.0"
+  "_id": "mime-types@2.1.10",
+  "_shasum": "b93c7cb4362e16d41072a7e54538fb4d43070837",
+  "_from": "mime-types@>=2.1.9 <2.2.0",
+  "_npmVersion": "2.14.7",
+  "_nodeVersion": "4.2.3",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "dist": {
+    "shasum": "b93c7cb4362e16d41072a7e54538fb4d43070837",
+    "tarball": "http://registry.npmjs.org/mime-types/-/mime-types-2.1.10.tgz"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "fishrock123",
+      "email": "fishrock123@rocketmail.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    }
+  ],
+  "_npmOperationalInternal": {
+    "host": "packages-9-west.internal.npmjs.com",
+    "tmp": "tmp/mime-types-2.1.10.tgz_1455575237256_0.9163766100537032"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.10.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/negotiator/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/negotiator/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/negotiator/package.json
index ceeb6ab..66d2824 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/negotiator/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/negotiator/package.json
@@ -49,14 +49,38 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
   },
-  "readme": "# negotiator\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nAn HTTP content negotiator for Node.js\n\n## Installation\n\n```sh\n$ npm install negotiator\n```\n\n## API\n\n```js\nvar Negotiator = require('negotiator')\n```\n\n### Accept Negotiation\n\n```js\navailableMediaTypes = ['text/html', 'text/plain', 'application/json']\n\n// The negotiator constructor receives a request object\nnegotiator = new Negotiator(request)\n\n// Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8'\n\nnegotiator.mediaTypes()\n// -> ['text/html', 'image/jpeg', 'application/*']\n\nnegotiator.mediaTypes(availableMediaTypes)\n// -> ['text/html', 'application/json']\n\nnegotiator.mediaType(availableMediaTypes)\n// -> 'text/html'\n```\n\nYou can check a working example 
 at `examples/accept.js`.\n\n#### Methods\n\n##### mediaType()\n\nReturns the most preferred media type from the client.\n\n##### mediaType(availableMediaType)\n\nReturns the most preferred media type from a list of available media types.\n\n##### mediaTypes()\n\nReturns an array of preferred media types ordered by the client preference.\n\n##### mediaTypes(availableMediaTypes)\n\nReturns an array of preferred media types ordered by priority from a list of\navailable media types.\n\n### Accept-Language Negotiation\n\n```js\nnegotiator = new Negotiator(request)\n\navailableLanguages = 'en', 'es', 'fr'\n\n// Let's say Accept-Language header is 'en;q=0.8, es, pt'\n\nnegotiator.languages()\n// -> ['es', 'pt', 'en']\n\nnegotiator.languages(availableLanguages)\n// -> ['es', 'en']\n\nlanguage = negotiator.language(availableLanguages)\n// -> 'es'\n```\n\nYou can check a working example at `examples/language.js`.\n\n#### Methods\n\n##### language()\n\nReturns the most preferred language from 
 the client.\n\n##### language(availableLanguages)\n\nReturns the most preferred language from a list of available languages.\n\n##### languages()\n\nReturns an array of preferred languages ordered by the client preference.\n\n##### languages(availableLanguages)\n\nReturns an array of preferred languages ordered by priority from a list of\navailable languages.\n\n### Accept-Charset Negotiation\n\n```js\navailableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5']\n\nnegotiator = new Negotiator(request)\n\n// Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2'\n\nnegotiator.charsets()\n// -> ['utf-8', 'iso-8859-1', 'utf-7']\n\nnegotiator.charsets(availableCharsets)\n// -> ['utf-8', 'iso-8859-1']\n\nnegotiator.charset(availableCharsets)\n// -> 'utf-8'\n```\n\nYou can check a working example at `examples/charset.js`.\n\n#### Methods\n\n##### charset()\n\nReturns the most preferred charset from the client.\n\n##### charset(availableCharsets)\n\nReturns the most preferr
 ed charset from a list of available charsets.\n\n##### charsets()\n\nReturns an array of preferred charsets ordered by the client preference.\n\n##### charsets(availableCharsets)\n\nReturns an array of preferred charsets ordered by priority from a list of\navailable charsets.\n\n### Accept-Encoding Negotiation\n\n```js\navailableEncodings = ['identity', 'gzip']\n\nnegotiator = new Negotiator(request)\n\n// Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5'\n\nnegotiator.encodings()\n// -> ['gzip', 'identity', 'compress']\n\nnegotiator.encodings(availableEncodings)\n// -> ['gzip', 'identity']\n\nnegotiator.encoding(availableEncodings)\n// -> 'gzip'\n```\n\nYou can check a working example at `examples/encoding.js`.\n\n#### Methods\n\n##### encoding()\n\nReturns the most preferred encoding from the client.\n\n##### encoding(availableEncodings)\n\nReturns the most preferred encoding from a list of available encodings.\n\n##### encodings()\n\nReturns an array of p
 referred encodings ordered by the client preference.\n\n##### encodings(availableEncodings)\n\nReturns an array of preferred encodings ordered by priority from a list of\navailable encodings.\n\n## See Also\n\nThe [accepts](https://npmjs.org/package/accepts#readme) module builds on\nthis module and provides an alternative interface, mime type validation,\nand more.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/negotiator.svg\n[npm-url]: https://npmjs.org/package/negotiator\n[node-version-image]: https://img.shields.io/node/v/negotiator.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/negotiator/master.svg\n[travis-url]: https://travis-ci.org/jshttp/negotiator\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/negotiator/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/negotiator?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/negotiator.svg\n[downloads-url]: ht
 tps://npmjs.org/package/negotiator\n",
-  "readmeFilename": "README.md",
+  "gitHead": "cbb717b3f164f25820f90b160cda6d0166b9d922",
   "bugs": {
     "url": "https://github.com/jshttp/negotiator/issues"
   },
-  "homepage": "https://github.com/jshttp/negotiator#readme",
+  "homepage": "https://github.com/jshttp/negotiator",
   "_id": "negotiator@0.5.3",
   "_shasum": "269d5c476810ec92edbe7b6c2f28316384f9a7e8",
+  "_from": "negotiator@0.5.3",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "federomero",
+      "email": "federomero@gmail.com"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "269d5c476810ec92edbe7b6c2f28316384f9a7e8",
+    "tarball": "http://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz",
-  "_from": "negotiator@0.5.3"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/accepts/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/package.json
index ac515e0..6455e64 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/package.json
@@ -45,14 +45,54 @@
     "accept",
     "accepts"
   ],
-  "readme": "# accepts\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nHigher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator). Extracted from [koa](https://www.npmjs.com/package/koa) for general use.\n\nIn addition to negotiator, it allows:\n\n- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])` as well as `('text/html', 'application/json')`.\n- Allows type shorthands such as `json`.\n- Returns `false` when no types match\n- Treats non-existent headers as `*`\n\n## Installation\n\n```sh\nnpm install accepts\n```\n\n## API\n\n```js\nvar accepts = require('accepts')\n```\n\n### accepts(req)\n\nCreate a new `Accepts` object for the given `req`.\n\n#### .charset(charsets)\n\nReturn the first accepted charset. If
  nothing in `charsets` is accepted,\nthen `false` is returned.\n\n#### .charsets()\n\nReturn the charsets that the request accepts, in the order of the client's\npreference (most preferred first).\n\n#### .encoding(encodings)\n\nReturn the first accepted encoding. If nothing in `encodings` is accepted,\nthen `false` is returned.\n\n#### .encodings()\n\nReturn the encodings that the request accepts, in the order of the client's\npreference (most preferred first).\n\n#### .language(languages)\n\nReturn the first accepted language. If nothing in `languages` is accepted,\nthen `false` is returned.\n\n#### .languages()\n\nReturn the languages that the request accepts, in the order of the client's\npreference (most preferred first).\n\n#### .type(types)\n\nReturn the first accepted type (and it is returned as the same text as what\nappears in the `types` array). If nothing in `types` is accepted, then `false`\nis returned.\n\nThe `types` array can contain full MIME types or file extension
 s. Any value\nthat is not a full MIME types is passed to `require('mime-types').lookup`.\n\n#### .types()\n\nReturn the types that the request accepts, in the order of the client's\npreference (most preferred first).\n\n## Examples\n\n### Simple type negotiation\n\nThis simple example shows how to use `accepts` to return a different typed\nrespond body based on what the client wants to accept. The server lists it's\npreferences in order and will get back the best match between the client and\nserver.\n\n```js\nvar accepts = require('accepts')\nvar http = require('http')\n\nfunction app(req, res) {\n  var accept = accepts(req)\n\n  // the order of this list is significant; should be server preferred order\n  switch(accept.type(['json', 'html'])) {\n    case 'json':\n      res.setHeader('Content-Type', 'application/json')\n      res.write('{\"hello\":\"world!\"}')\n      break\n    case 'html':\n      res.setHeader('Content-Type', 'text/html')\n      res.write('<b>hello, world!</b>')\
 n      break\n    default:\n      // the fallback is text/plain, so no need to specify it above\n      res.setHeader('Content-Type', 'text/plain')\n      res.write('hello, world!')\n      break\n  }\n\n  res.end()\n}\n\nhttp.createServer(app).listen(3000)\n```\n\nYou can test this out with the cURL program:\n```sh\ncurl -I -H'Accept: text/html' http://localhost:3000/\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/accepts.svg\n[npm-url]: https://npmjs.org/package/accepts\n[node-version-image]: https://img.shields.io/node/v/accepts.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/accepts/master.svg\n[travis-url]: https://travis-ci.org/jshttp/accepts\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/accepts/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/accepts\n[downloads-image]: https://img.shields.io/npm/dm/accepts.svg\n[downloads-url]: https://npmjs.org/package/accepts
 \n",
-  "readmeFilename": "README.md",
+  "gitHead": "b7e15ecb25dacc0b2133ed0553d64f8a79537e01",
   "bugs": {
     "url": "https://github.com/jshttp/accepts/issues"
   },
-  "homepage": "https://github.com/jshttp/accepts#readme",
+  "homepage": "https://github.com/jshttp/accepts",
   "_id": "accepts@1.2.13",
   "_shasum": "e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea",
+  "_from": "accepts@>=1.2.12 <1.3.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "federomero",
+      "email": "federomero@gmail.com"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "fishrock123",
+      "email": "fishrock123@rocketmail.com"
+    },
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "mscdex",
+      "email": "mscdex@mscdex.net"
+    },
+    {
+      "name": "defunctzombie",
+      "email": "shtylman@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea",
+    "tarball": "http://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz",
-  "_from": "accepts@>=1.2.12 <1.3.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/array-flatten/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/array-flatten/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/array-flatten/package.json
index 8ebee4e..f80f937 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/array-flatten/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/array-flatten/package.json
@@ -36,10 +36,27 @@
     "pre-commit": "^1.0.7",
     "standard": "^3.7.3"
   },
-  "readme": "# Array Flatten\n\n[![NPM version][npm-image]][npm-url]\n[![NPM downloads][downloads-image]][downloads-url]\n[![Build status][travis-image]][travis-url]\n[![Test coverage][coveralls-image]][coveralls-url]\n\n> Flatten an array of nested arrays into a single flat array. Accepts an optional depth.\n\n## Installation\n\n```\nnpm install array-flatten --save\n```\n\n## Usage\n\n```javascript\nvar flatten = require('array-flatten')\n\nflatten([1, [2, [3, [4, [5], 6], 7], 8], 9])\n//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]\n\nflatten([1, [2, [3, [4, [5], 6], 7], 8], 9], 2)\n//=> [1, 2, 3, [4, [5], 6], 7, 8, 9]\n\n(function () {\n  flatten(arguments) //=> [1, 2, 3]\n})(1, [2, 3])\n```\n\n## License\n\nMIT\n\n[npm-image]: https://img.shields.io/npm/v/array-flatten.svg?style=flat\n[npm-url]: https://npmjs.org/package/array-flatten\n[downloads-image]: https://img.shields.io/npm/dm/array-flatten.svg?style=flat\n[downloads-url]: https://npmjs.org/package/array-flatten\n[travis-image]: https:
 //img.shields.io/travis/blakeembrey/array-flatten.svg?style=flat\n[travis-url]: https://travis-ci.org/blakeembrey/array-flatten\n[coveralls-image]: https://img.shields.io/coveralls/blakeembrey/array-flatten.svg?style=flat\n[coveralls-url]: https://coveralls.io/r/blakeembrey/array-flatten?branch=master\n",
-  "readmeFilename": "README.md",
+  "gitHead": "1963a9189229d408e1e8f585a00c8be9edbd1803",
   "_id": "array-flatten@1.1.1",
   "_shasum": "9a5f699051b1e7073328f2a008968b64ea2955d2",
+  "_from": "array-flatten@1.1.1",
+  "_npmVersion": "2.11.3",
+  "_nodeVersion": "2.3.3",
+  "_npmUser": {
+    "name": "blakeembrey",
+    "email": "hello@blakeembrey.com"
+  },
+  "maintainers": [
+    {
+      "name": "blakeembrey",
+      "email": "hello@blakeembrey.com"
+    }
+  ],
+  "dist": {
+    "shasum": "9a5f699051b1e7073328f2a008968b64ea2955d2",
+    "tarball": "http://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
-  "_from": "array-flatten@1.1.1"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/HISTORY.md b/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/HISTORY.md
index 1192551..76d494c 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/HISTORY.md
@@ -1,3 +1,8 @@
+0.5.1 / 2016-01-17
+==================
+
+  * perf: enable strict mode
+
 0.5.0 / 2014-10-11
 ==================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/README.md b/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/README.md
index d265431..5cebce4 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/README.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/README.md
@@ -67,7 +67,7 @@ it). The type is normalized to lower-case.
 ### contentDisposition.parse(string)
 
 ```js
-var disposition = contentDisposition.parse('attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt"');
+var disposition = contentDisposition.parse('attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt');
 ```
 
 Parse a `Content-Disposition` header string. This automatically handles extended

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/index.js b/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/index.js
index fa3bc74..4a352dc 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/index.js
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/index.js
@@ -4,6 +4,8 @@
  * MIT Licensed
  */
 
+'use strict'
+
 /**
  * Module exports.
  */

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/package.json
index 963b54a..1b22eb9 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/content-disposition/package.json
@@ -1,7 +1,7 @@
 {
   "name": "content-disposition",
   "description": "Create and parse Content-Disposition header",
-  "version": "0.5.0",
+  "version": "0.5.1",
   "contributors": [
     {
       "name": "Douglas Christopher Wilson",
@@ -20,8 +20,8 @@
     "url": "git+https://github.com/jshttp/content-disposition.git"
   },
   "devDependencies": {
-    "istanbul": "0.3.2",
-    "mocha": "~1.21.4"
+    "istanbul": "0.4.2",
+    "mocha": "1.21.5"
   },
   "files": [
     "LICENSE",
@@ -37,14 +37,30 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
   },
-  "readme": "# content-disposition\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nCreate and parse HTTP `Content-Disposition` header\n\n## Installation\n\n```sh\n$ npm install content-disposition\n```\n\n## API\n\n```js\nvar contentDisposition = require('content-disposition')\n```\n\n### contentDisposition(filename, options)\n\nCreate an attachment `Content-Disposition` header value using the given file name,\nif supplied. The `filename` is optional and if no file name is desired, but you\nwant to specify `options`, set `filename` to `undefined`.\n\n```js\nres.setHeader('Content-Disposition', contentDisposition('∫ maths.pdf'))\n```\n\n**note** HTTP headers are of the ISO-8859-1 character set. If you are writing this\nheader through a means different from `setHeader` in Node.js, y
 ou'll want to specify\nthe `'binary'` encoding in Node.js.\n\n#### Options\n\n`contentDisposition` accepts these properties in the options object.\n\n##### fallback\n\nIf the `filename` option is outside ISO-8859-1, then the file name is actually\nstored in a supplemental field for clients that support Unicode file names and\na ISO-8859-1 version of the file name is automatically generated.\n\nThis specifies the ISO-8859-1 file name to override the automatic generation or\ndisables the generation all together, defaults to `true`.\n\n  - A string will specify the ISO-8859-1 file name to use in place of automatic\n    generation.\n  - `false` will disable including a ISO-8859-1 file name and only include the\n    Unicode version (unless the file name is already ISO-8859-1).\n  - `true` will enable automatic generation if the file name is outside ISO-8859-1.\n\nIf the `filename` option is ISO-8859-1 and this option is specified and has a\ndifferent value, then the `filename` option is 
 encoded in the extended field\nand this set as the fallback field, even though they are both ISO-8859-1.\n\n##### type\n\nSpecifies the disposition type, defaults to `\"attachment\"`. This can also be\n`\"inline\"`, or any other value (all values except inline are treated like\n`attachment`, but can convey additional information if both parties agree to\nit). The type is normalized to lower-case.\n\n### contentDisposition.parse(string)\n\n```js\nvar disposition = contentDisposition.parse('attachment; filename=\"EURO rates.txt\"; filename*=UTF-8\\'\\'%e2%82%ac%20rates.txt\"');\n```\n\nParse a `Content-Disposition` header string. This automatically handles extended\n(\"Unicode\") parameters by decoding them and providing them under the standard\nparameter name. This will return an object with the following properties (examples\nare shown for the string `'attachment; filename=\"EURO rates.txt\"; filename*=UTF-8\\'\\'%e2%82%ac%20rates.txt'`):\n\n - `type`: The disposition type (always l
 ower case). Example: `'attachment'`\n\n - `parameters`: An object of the parameters in the disposition (name of parameter\n   always lower case and extended versions replace non-extended versions). Example:\n   `{filename: \"€ rates.txt\"}`\n\n## Examples\n\n### Send a file for download\n\n```js\nvar contentDisposition = require('content-disposition')\nvar destroy = require('destroy')\nvar http = require('http')\nvar onFinished = require('on-finished')\n\nvar filePath = '/path/to/public/plans.pdf'\n\nhttp.createServer(function onRequest(req, res) {\n  // set headers\n  res.setHeader('Content-Type', 'application/pdf')\n  res.setHeader('Content-Disposition', contentDisposition(filePath))\n\n  // send file\n  var stream = fs.createReadStream(filePath)\n  stream.pipe(res)\n  onFinished(res, function (err) {\n    destroy(stream)\n  })\n})\n```\n\n## Testing\n\n```sh\n$ npm test\n```\n\n## References\n\n- [RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1][rfc-2616]\n- [RFC 5987: Charac
 ter Set and Language Encoding for Hypertext Transfer Protocol (HTTP) Header Field Parameters][rfc-5987]\n- [RFC 6266: Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)][rfc-6266]\n- [Test Cases for HTTP Content-Disposition header field (RFC 6266) and the Encodings defined in RFCs 2047, 2231 and 5987][tc-2231]\n\n[rfc-2616]: https://tools.ietf.org/html/rfc2616\n[rfc-5987]: https://tools.ietf.org/html/rfc5987\n[rfc-6266]: https://tools.ietf.org/html/rfc6266\n[tc-2231]: http://greenbytes.de/tech/tc2231/\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/content-disposition.svg?style=flat\n[npm-url]: https://npmjs.org/package/content-disposition\n[node-version-image]: https://img.shields.io/node/v/content-disposition.svg?style=flat\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/content-disposition.svg?style=flat\n[travis-url]: https://travis-ci.org/jshttp/content-disposi
 tion\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-disposition.svg?style=flat\n[coveralls-url]: https://coveralls.io/r/jshttp/content-disposition?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/content-disposition.svg?style=flat\n[downloads-url]: https://npmjs.org/package/content-disposition\n",
-  "readmeFilename": "README.md",
+  "gitHead": "7b391db3af5629d4c698f1de21802940bb9f22a5",
   "bugs": {
     "url": "https://github.com/jshttp/content-disposition/issues"
   },
-  "homepage": "https://github.com/jshttp/content-disposition#readme",
-  "_id": "content-disposition@0.5.0",
-  "_shasum": "4284fe6ae0630874639e44e80a418c2934135e9e",
-  "_resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.0.tgz",
-  "_from": "content-disposition@0.5.0"
+  "homepage": "https://github.com/jshttp/content-disposition",
+  "_id": "content-disposition@0.5.1",
+  "_shasum": "87476c6a67c8daa87e32e87616df883ba7fb071b",
+  "_from": "content-disposition@0.5.1",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "dist": {
+    "shasum": "87476c6a67c8daa87e32e87616df883ba7fb071b",
+    "tarball": "http://registry.npmjs.org/content-disposition/-/content-disposition-0.5.1.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.1.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/content-type/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/content-type/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/content-type/package.json
index 83bc87a..e23403c 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/content-type/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/content-type/package.json
@@ -36,14 +36,30 @@
     "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/"
   },
-  "readme": "# content-type\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nCreate and parse HTTP Content-Type header according to RFC 7231\n\n## Installation\n\n```sh\n$ npm install content-type\n```\n\n## API\n\n```js\nvar contentType = require('content-type')\n```\n\n### contentType.parse(string)\n\n```js\nvar obj = contentType.parse('image/svg+xml; charset=utf-8')\n```\n\nParse a content type string. This will return an object with the following\nproperties (examples are shown for the string `'image/svg+xml; charset=utf-8'`):\n\n - `type`: The media type (the type and subtype, always lower case).\n   Example: `'image/svg+xml'`\n\n - `parameters`: An object of the parameters in the media type (name of parameter\n   always lower case). Example: `{charset: 'utf-8'}`\n\nThrows a `Ty
 peError` if the string is missing or invalid.\n\n### contentType.parse(req)\n\n```js\nvar obj = contentType.parse(req)\n```\n\nParse the `content-type` header from the given `req`. Short-cut for\n`contentType.parse(req.headers['content-type'])`.\n\nThrows a `TypeError` if the `Content-Type` header is missing or invalid.\n\n### contentType.parse(res)\n\n```js\nvar obj = contentType.parse(res)\n```\n\nParse the `content-type` header set on the given `res`. Short-cut for\n`contentType.parse(res.getHeader('content-type'))`.\n\nThrows a `TypeError` if the `Content-Type` header is missing or invalid.\n\n### contentType.format(obj)\n\n```js\nvar str = contentType.format({type: 'image/svg+xml'})\n```\n\nFormat an object into a content type string. This will return a string of the\ncontent type for the given object with the following properties (examples are\nshown that produce the string `'image/svg+xml; charset=utf-8'`):\n\n - `type`: The media type (will be lower-cased). Example: `'image/
 svg+xml'`\n\n - `parameters`: An object of the parameters in the media type (name of the\n   parameter will be lower-cased). Example: `{charset: 'utf-8'}`\n\nThrows a `TypeError` if the object contains an invalid type or parameter names.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/content-type.svg\n[npm-url]: https://npmjs.org/package/content-type\n[node-version-image]: https://img.shields.io/node/v/content-type.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/content-type/master.svg\n[travis-url]: https://travis-ci.org/jshttp/content-type\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-type/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/content-type\n[downloads-image]: https://img.shields.io/npm/dm/content-type.svg\n[downloads-url]: https://npmjs.org/package/content-type\n",
-  "readmeFilename": "README.md",
+  "gitHead": "3aa58f9c5a358a3634b8601602177888b4a477d8",
   "bugs": {
     "url": "https://github.com/jshttp/content-type/issues"
   },
-  "homepage": "https://github.com/jshttp/content-type#readme",
+  "homepage": "https://github.com/jshttp/content-type",
   "_id": "content-type@1.0.1",
   "_shasum": "a19d2247327dc038050ce622b7a154ec59c5e600",
+  "_from": "content-type@>=1.0.1 <1.1.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "dist": {
+    "shasum": "a19d2247327dc038050ce622b7a154ec59c5e600",
+    "tarball": "http://registry.npmjs.org/content-type/-/content-type-1.0.1.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.1.tgz",
-  "_from": "content-type@>=1.0.1 <1.1.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/cookie-signature/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/cookie-signature/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/cookie-signature/package.json
index de31271..28f87d0 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/cookie-signature/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/cookie-signature/package.json
@@ -25,14 +25,35 @@
     "test": "mocha --require should --reporter spec"
   },
   "main": "index",
-  "readme": "\n# cookie-signature\n\n  Sign and unsign cookies.\n\n## Example\n\n```js\nvar cookie = require('cookie-signature');\n\nvar val = cookie.sign('hello', 'tobiiscool');\nval.should.equal('hello.DGDUkGlIkCzPz+C0B064FNgHdEjox7ch8tOBGslZ5QI');\n\nvar val = cookie.sign('hello', 'tobiiscool');\ncookie.unsign(val, 'tobiiscool').should.equal('hello');\ncookie.unsign(val, 'luna').should.be.false;\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 LearnBoost &lt;tj@learnboost.com&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission not
 ice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",
-  "readmeFilename": "Readme.md",
+  "gitHead": "391b56cf44d88c493491b7e3fc53208cfb976d2a",
   "bugs": {
     "url": "https://github.com/visionmedia/node-cookie-signature/issues"
   },
-  "homepage": "https://github.com/visionmedia/node-cookie-signature#readme",
+  "homepage": "https://github.com/visionmedia/node-cookie-signature",
   "_id": "cookie-signature@1.0.6",
   "_shasum": "e303a882b342cc3ee8ca513a79999734dab3ae2c",
+  "_from": "cookie-signature@1.0.6",
+  "_npmVersion": "2.3.0",
+  "_nodeVersion": "0.10.36",
+  "_npmUser": {
+    "name": "natevw",
+    "email": "natevw@yahoo.com"
+  },
+  "maintainers": [
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "natevw",
+      "email": "natevw@yahoo.com"
+    }
+  ],
+  "dist": {
+    "shasum": "e303a882b342cc3ee8ca513a79999734dab3ae2c",
+    "tarball": "http://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
-  "_from": "cookie-signature@1.0.6"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/cookie/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/cookie/HISTORY.md b/node_modules/cordova-serve/node_modules/express/node_modules/cookie/HISTORY.md
new file mode 100644
index 0000000..ad8f1ff
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/cookie/HISTORY.md
@@ -0,0 +1,72 @@
+0.1.5 / 2015-09-17
+==================
+
+  * Fix regression when setting empty cookie value
+    - Ease the new restriction, which is just basic header-level validation
+  * Fix typo in invalid value errors
+
+0.1.4 / 2015-09-17
+==================
+
+  * Throw better error for invalid argument to parse
+  * Throw on invalid values provided to `serialize`
+    - Ensures the resulting string is a valid HTTP header value
+
+0.1.3 / 2015-05-19
+==================
+
+  * Reduce the scope of try-catch deopt
+  * Remove argument reassignments
+
+0.1.2 / 2014-04-16
+==================
+
+  * Remove unnecessary files from npm package
+
+0.1.1 / 2014-02-23
+==================
+
+  * Fix bad parse when cookie value contained a comma
+  * Fix support for `maxAge` of `0`
+
+0.1.0 / 2013-05-01
+==================
+
+  * Add `decode` option
+  * Add `encode` option
+
+0.0.6 / 2013-04-08
+==================
+
+  * Ignore cookie parts missing `=`
+
+0.0.5 / 2012-10-29
+==================
+
+  * Return raw cookie value if value unescape errors
+
+0.0.4 / 2012-06-21
+==================
+
+  * Use encode/decodeURIComponent for cookie encoding/decoding
+    - Improve server/client interoperability
+
+0.0.3 / 2012-06-06
+==================
+
+  * Only escape special characters per the cookie RFC
+
+0.0.2 / 2012-06-01
+==================
+
+  * Fix `maxAge` option to not throw error
+
+0.0.1 / 2012-05-28
+==================
+
+  * Add more tests
+
+0.0.0 / 2012-05-28
+==================
+
+  * Initial release

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/cookie/LICENSE
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/cookie/LICENSE b/node_modules/cordova-serve/node_modules/express/node_modules/cookie/LICENSE
index 84c7c53..058b6b4 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/cookie/LICENSE
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/cookie/LICENSE
@@ -1,6 +1,7 @@
 (The MIT License)
 
 Copyright (c) 2012-2014 Roman Shtylman <sh...@gmail.com>
+Copyright (c) 2015 Douglas Christopher Wilson <do...@somethingdoug.com>
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/cookie/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/cookie/index.js b/node_modules/cordova-serve/node_modules/express/node_modules/cookie/index.js
index 46ff287..b705b2c 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/cookie/index.js
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/cookie/index.js
@@ -1,6 +1,7 @@
 /*!
  * cookie
  * Copyright(c) 2012-2014 Roman Shtylman
+ * Copyright(c) 2015 Douglas Christopher Wilson
  * MIT Licensed
  */
 
@@ -21,6 +22,16 @@ var decode = decodeURIComponent;
 var encode = encodeURIComponent;
 
 /**
+ * RegExp to match field-content in RFC 7230 sec 3.2
+ *
+ * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
+ * field-vchar   = VCHAR / obs-text
+ * obs-text      = %x80-FF
+ */
+
+var fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;
+
+/**
  * Parse a cookie header.
  *
  * Parse the given cookie header string into an object
@@ -28,11 +39,15 @@ var encode = encodeURIComponent;
  *
  * @param {string} str
  * @param {object} [options]
- * @return {string}
+ * @return {object}
  * @public
  */
 
 function parse(str, options) {
+  if (typeof str !== 'string') {
+    throw new TypeError('argument str must be a string');
+  }
+
   var obj = {}
   var opt = options || {};
   var pairs = str.split(/; */);
@@ -82,7 +97,18 @@ function parse(str, options) {
 function serialize(name, val, options) {
   var opt = options || {};
   var enc = opt.encode || encode;
-  var pairs = [name + '=' + enc(val)];
+
+  if (!fieldContentRegExp.test(name)) {
+    throw new TypeError('argument name is invalid');
+  }
+
+  var value = enc(val);
+
+  if (value && !fieldContentRegExp.test(value)) {
+    throw new TypeError('argument val is invalid');
+  }
+
+  var pairs = [name + '=' + value];
 
   if (null != opt.maxAge) {
     var maxAge = opt.maxAge - 0;
@@ -90,8 +116,22 @@ function serialize(name, val, options) {
     pairs.push('Max-Age=' + maxAge);
   }
 
-  if (opt.domain) pairs.push('Domain=' + opt.domain);
-  if (opt.path) pairs.push('Path=' + opt.path);
+  if (opt.domain) {
+    if (!fieldContentRegExp.test(opt.domain)) {
+      throw new TypeError('option domain is invalid');
+    }
+
+    pairs.push('Domain=' + opt.domain);
+  }
+
+  if (opt.path) {
+    if (!fieldContentRegExp.test(opt.path)) {
+      throw new TypeError('option path is invalid');
+    }
+
+    pairs.push('Path=' + opt.path);
+  }
+
   if (opt.expires) pairs.push('Expires=' + opt.expires.toUTCString());
   if (opt.httpOnly) pairs.push('HttpOnly');
   if (opt.secure) pairs.push('Secure');

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/cookie/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/cookie/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/cookie/package.json
index f7a0181..01399d0 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/cookie/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/cookie/package.json
@@ -1,11 +1,17 @@
 {
   "name": "cookie",
   "description": "cookie parsing and serialization",
-  "version": "0.1.3",
+  "version": "0.1.5",
   "author": {
     "name": "Roman Shtylman",
     "email": "shtylman@gmail.com"
   },
+  "contributors": [
+    {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
   "license": "MIT",
   "keywords": [
     "cookie",
@@ -16,30 +22,55 @@
     "url": "git+https://github.com/jshttp/cookie.git"
   },
   "devDependencies": {
-    "istanbul": "0.3.9",
-    "mocha": "1.x.x"
+    "istanbul": "0.3.20",
+    "mocha": "1.21.5"
   },
   "files": [
+    "HISTORY.md",
     "LICENSE",
     "README.md",
     "index.js"
   ],
   "engines": {
-    "node": "*"
+    "node": ">= 0.6"
   },
   "scripts": {
     "test": "mocha --reporter spec --bail --check-leaks test/",
     "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/"
   },
-  "readme": "# cookie\r\n\r\n[![NPM Version][npm-image]][npm-url]\r\n[![NPM Downloads][downloads-image]][downloads-url]\r\n[![Node.js Version][node-version-image]][node-version-url]\r\n[![Build Status][travis-image]][travis-url]\r\n[![Test Coverage][coveralls-image]][coveralls-url]\r\n\r\ncookie is a basic cookie parser and serializer. It doesn't make assumptions about how you are going to deal with your cookies. It basically just provides a way to read and write the HTTP cookie headers.\r\n\r\nSee [RFC6265](http://tools.ietf.org/html/rfc6265) for details about the http header for cookies.\r\n\r\n## how?\r\n\r\n```\r\nnpm install cookie\r\n```\r\n\r\n```javascript\r\nvar cookie = require('cookie');\r\n\r\nvar hdr = cookie.serialize('foo', 'bar');\r\n// hdr = 'foo=bar';\r\n\r\nvar cookies = cookie.parse('foo=bar; cat=meow; dog=ruff');\r\n// cookies = { foo: 'bar', cat: 'meow', dog: 'ruff' };\r\n```\r\n\r\n## more\r\n\r\nThe serialize function takes a third parameter, an object, to se
 t cookie options. See the RFC for valid values.\r\n\r\n### path\r\n> cookie path\r\n\r\n### expires\r\n> absolute expiration date for the cookie (Date object)\r\n\r\n### maxAge\r\n> relative max age of the cookie from when the client receives it (seconds)\r\n\r\n### domain\r\n> domain for the cookie\r\n\r\n### secure\r\n> true or false\r\n\r\n### httpOnly\r\n> true or false\r\n\r\n## License\r\n\r\n[MIT](LICENSE)\r\n\r\n[npm-image]: https://img.shields.io/npm/v/cookie.svg\r\n[npm-url]: https://npmjs.org/package/cookie\r\n[node-version-image]: https://img.shields.io/node/v/cookie.svg\r\n[node-version-url]: http://nodejs.org/download/\r\n[travis-image]: https://img.shields.io/travis/jshttp/cookie/master.svg\r\n[travis-url]: https://travis-ci.org/jshttp/cookie\r\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/cookie/master.svg\r\n[coveralls-url]: https://coveralls.io/r/jshttp/cookie?branch=master\r\n[downloads-image]: https://img.shields.io/npm/dm/cookie.svg\r\n[downloads-u
 rl]: https://npmjs.org/package/cookie\r\n",
-  "readmeFilename": "README.md",
+  "gitHead": "0dfc4876575cef2609cdc1082fccf832743822c2",
   "bugs": {
     "url": "https://github.com/jshttp/cookie/issues"
   },
-  "homepage": "https://github.com/jshttp/cookie#readme",
-  "_id": "cookie@0.1.3",
-  "_shasum": "e734a5c1417fce472d5aef82c381cabb64d1a435",
-  "_resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz",
-  "_from": "cookie@0.1.3"
+  "homepage": "https://github.com/jshttp/cookie",
+  "_id": "cookie@0.1.5",
+  "_shasum": "6ab9948a4b1ae21952cd2588530a4722d4044d7c",
+  "_from": "cookie@0.1.5",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "defunctzombie",
+      "email": "shtylman@gmail.com"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "6ab9948a4b1ae21952cd2588530a4722d4044d7c",
+    "tarball": "http://registry.npmjs.org/cookie/-/cookie-0.1.5.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.5.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/debug/node_modules/ms/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/debug/node_modules/ms/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/debug/node_modules/ms/package.json
index 7b5d86d..253335e 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/debug/node_modules/ms/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/debug/node_modules/ms/package.json
@@ -17,14 +17,32 @@
       "ms/index.js": "index.js"
     }
   },
-  "readme": "# ms.js: miliseconds conversion utility\n\n```js\nms('2 days')  // 172800000\nms('1d')      // 86400000\nms('10h')     // 36000000\nms('2.5 hrs') // 9000000\nms('2h')      // 7200000\nms('1m')      // 60000\nms('5s')      // 5000\nms('100')     // 100\n```\n\n```js\nms(60000)             // \"1m\"\nms(2 * 60000)         // \"2m\"\nms(ms('10 hours'))    // \"10h\"\n```\n\n```js\nms(60000, { long: true })             // \"1 minute\"\nms(2 * 60000, { long: true })         // \"2 minutes\"\nms(ms('10 hours'), { long: true })    // \"10 hours\"\n```\n\n- Node/Browser compatible. Published as [`ms`](https://www.npmjs.org/package/ms) in [NPM](http://nodejs.org/download).\n- If a number is supplied to `ms`, a string with a unit is returned.\n- If a string that contains the number is supplied, it returns it as\na number (e.g: it returns `100` for `'100'`).\n- If you pass a string with a number and a valid unit, the number of\nequivalent ms is returned.\n\n## License\n\nMIT\n",
-  "readmeFilename": "README.md",
+  "gitHead": "713dcf26d9e6fd9dbc95affe7eff9783b7f1b909",
   "bugs": {
     "url": "https://github.com/guille/ms.js/issues"
   },
-  "homepage": "https://github.com/guille/ms.js#readme",
+  "homepage": "https://github.com/guille/ms.js",
   "_id": "ms@0.7.1",
+  "scripts": {},
   "_shasum": "9cd13c03adbff25b65effde7ce864ee952017098",
+  "_from": "ms@0.7.1",
+  "_npmVersion": "2.7.5",
+  "_nodeVersion": "0.12.2",
+  "_npmUser": {
+    "name": "rauchg",
+    "email": "rauchg@gmail.com"
+  },
+  "maintainers": [
+    {
+      "name": "rauchg",
+      "email": "rauchg@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "9cd13c03adbff25b65effde7ce864ee952017098",
+    "tarball": "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
-  "_from": "ms@0.7.1"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/debug/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/debug/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/debug/package.json
index 2b0fa73..24bb9c9 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/debug/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/debug/package.json
@@ -38,15 +38,36 @@
       "debug/debug.js": "debug.js"
     }
   },
-  "readme": "# debug\n\n  tiny node.js debugging utility modelled after node core's debugging technique.\n\n## Installation\n\n```bash\n$ npm install debug\n```\n\n## Usage\n\n With `debug` you simply invoke the exported function to generate your debug function, passing it a name which will determine if a noop function is returned, or a decorated `console.error`, so all of the `console` format string goodies you're used to work fine. A unique color is selected per-function for visibility.\n\nExample _app.js_:\n\n```js\nvar debug = require('debug')('http')\n  , http = require('http')\n  , name = 'My App';\n\n// fake app\n\ndebug('booting %s', name);\n\nhttp.createServer(function(req, res){\n  debug(req.method + ' ' + req.url);\n  res.end('hello\\n');\n}).listen(3000, function(){\n  debug('listening');\n});\n\n// fake worker of some kind\n\nrequire('./worker');\n```\n\nExample _worker.js_:\n\n```js\nvar debug = require('debug')('worker');\n\nsetInterval(function(){\n  debug('doing som
 e work');\n}, 1000);\n```\n\n The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples:\n\n  ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png)\n\n  ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png)\n\n#### Windows note\n\n On Windows the environment variable is set using the `set` command.\n\n ```cmd\n set DEBUG=*,-not_this\n ```\n\nThen, run the program to be debugged as usual.\n\n## Millisecond diff\n\n  When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the \"+NNNms\" will show you how much time was spent between calls.\n\n  ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png)\n\n  When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug info
 rmation as shown below:\n\n  ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png)\n\n## Conventions\n\n If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use \":\" to separate features. For example \"bodyParser\" from Connect would then be \"connect:bodyParser\".\n\n## Wildcards\n\n  The `*` character may be used as a wildcard. Suppose for example your library has debuggers named \"connect:bodyParser\", \"connect:compress\", \"connect:session\", instead of listing all three with `DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.\n\n  You can also exclude specific debuggers by prefixing them with a \"-\" character.  For example, `DEBUG=*,-connect:*` would include
  all debuggers except those starting with \"connect:\".\n\n## Browser support\n\n  Debug works in the browser as well, currently persisted by `localStorage`. Consider the situation shown below where you have `worker:a` and `worker:b`, and wish to debug both. Somewhere in the code on your page, include:\n\n```js\nwindow.myDebug = require(\"debug\");\n```\n\n  (\"debug\" is a global object in the browser so we give this object a different name.) When your page is open in the browser, type the following in the console:\n\n```js\nmyDebug.enable(\"worker:*\")\n```\n\n  Refresh the page. Debug output will continue to be sent to the console until it is disabled by typing `myDebug.disable()` in the console.\n\n```js\na = debug('worker:a');\nb = debug('worker:b');\n\nsetInterval(function(){\n  a('doing some work');\n}, 1000);\n\nsetInterval(function(){\n  b('doing some work');\n}, 1200);\n```\n\n#### Web Inspector Colors\n\n  Colors are also enabled on \"Web Inspectors\" that understand the 
 `%c` formatting\n  option. These are WebKit web inspectors, Firefox ([since version\n  31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/))\n  and the Firebug plugin for Firefox (any version).\n\n  Colored output looks something like:\n\n  ![](https://cloud.githubusercontent.com/assets/71256/3139768/b98c5fd8-e8ef-11e3-862a-f7253b6f47c6.png)\n\n### stderr vs stdout\n\nYou can set an alternative logging method per-namespace by overriding the `log` method on a per-namespace or globally:\n\nExample _stdout.js_:\n\n```js\nvar debug = require('debug');\nvar error = debug('app:error');\n\n// by default stderr is used\nerror('goes to stderr!');\n\nvar log = debug('app:log');\n// set this namespace to log via console.log\nlog.log = console.log.bind(console); // don't forget to bind to console!\nlog('goes to stdout');\nerror('still goes to stderr!');\n\n// set all output to go via console.info\n// overrid
 es all per-namespace log settings\ndebug.log = console.info.bind(console);\nerror('now goes to stdout via console.info');\nlog('still goes to stdout, but via console.info now');\n```\n\n### Save debug output to a file\n\nYou can save all debug statements to a file by piping them.\n\nExample:\n\n```bash\n$ DEBUG_FD=3 node your-app.js 3> whatever.log\n```\n\n## Authors\n\n - TJ Holowaychuk\n - Nathan Rajlich\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2014 TJ Holowaychuk &lt;tj@vision-media.ca&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permiss
 ion notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n",
-  "readmeFilename": "Readme.md",
+  "gitHead": "b38458422b5aa8aa6d286b10dfe427e8a67e2b35",
   "bugs": {
     "url": "https://github.com/visionmedia/debug/issues"
   },
-  "homepage": "https://github.com/visionmedia/debug#readme",
+  "homepage": "https://github.com/visionmedia/debug",
   "_id": "debug@2.2.0",
+  "scripts": {},
   "_shasum": "f87057e995b1a1f6ae6a4960664137bc56f039da",
-  "_resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
   "_from": "debug@>=2.2.0 <2.3.0",
-  "scripts": {}
+  "_npmVersion": "2.7.4",
+  "_nodeVersion": "0.12.2",
+  "_npmUser": {
+    "name": "tootallnate",
+    "email": "nathan@tootallnate.net"
+  },
+  "maintainers": [
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "tootallnate",
+      "email": "nathan@tootallnate.net"
+    }
+  ],
+  "dist": {
+    "shasum": "f87057e995b1a1f6ae6a4960664137bc56f039da",
+    "tarball": "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/depd/History.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/depd/History.md b/node_modules/cordova-serve/node_modules/express/node_modules/depd/History.md
index 4a36a6c..ace1171 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/depd/History.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/depd/History.md
@@ -1,3 +1,12 @@
+1.1.0 / 2015-09-14
+==================
+
+  * Enable strict mode in more places
+  * Support io.js 3.x
+  * Support io.js 2.x
+  * Support web browser loading
+    - Requires bundler like Browserify or webpack
+
 1.0.1 / 2015-04-07
 ==================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/depd/LICENSE
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/depd/LICENSE b/node_modules/cordova-serve/node_modules/express/node_modules/depd/LICENSE
index b7dce6c..142ede3 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/depd/LICENSE
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/depd/LICENSE
@@ -1,6 +1,6 @@
 (The MIT License)
 
-Copyright (c) 2014 Douglas Christopher Wilson
+Copyright (c) 2014-2015 Douglas Christopher Wilson
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/depd/Readme.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/depd/Readme.md b/node_modules/cordova-serve/node_modules/express/node_modules/depd/Readme.md
index 5ead5da..09bb979 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/depd/Readme.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/depd/Readme.md
@@ -14,10 +14,17 @@ Deprecate all the things
 
 ## Install
 
+This module is installed directly using `npm`:
+
 ```sh
 $ npm install depd
 ```
 
+This module can also be bundled with systems like
+[Browserify](http://browserify.org/) or [webpack](https://webpack.github.io/),
+though by default this module will alter it's API to no longer display or
+track deprecations.
+
 ## API
 
 ```js

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/depd/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/depd/index.js b/node_modules/cordova-serve/node_modules/express/node_modules/depd/index.js
index d183b0a..fddcae8 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/depd/index.js
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/depd/index.js
@@ -1,6 +1,6 @@
 /*!
  * depd
- * Copyright(c) 2014 Douglas Christopher Wilson
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
  * MIT Licensed
  */
 
@@ -9,7 +9,7 @@
  */
 
 var callSiteToString = require('./lib/compat').callSiteToString
-var EventEmitter = require('events').EventEmitter
+var eventListenerCount = require('./lib/compat').eventListenerCount
 var relative = require('path').relative
 
 /**
@@ -25,14 +25,6 @@ module.exports = depd
 var basePath = process.cwd()
 
 /**
- * Get listener count on event emitter.
- */
-
-/*istanbul ignore next*/
-var eventListenerCount = EventEmitter.listenerCount
-  || function (emitter, type) { return emitter.listeners(type).length }
-
-/**
  * Determine if namespace is contained in the string.
  */
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/browser/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/browser/index.js b/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/browser/index.js
new file mode 100644
index 0000000..f464e05
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/browser/index.js
@@ -0,0 +1,79 @@
+/*!
+ * depd
+ * Copyright(c) 2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = depd
+
+/**
+ * Create deprecate for namespace in caller.
+ */
+
+function depd(namespace) {
+  if (!namespace) {
+    throw new TypeError('argument namespace is required')
+  }
+
+  function deprecate(message) {
+    // no-op in browser
+  }
+
+  deprecate._file = undefined
+  deprecate._ignored = true
+  deprecate._namespace = namespace
+  deprecate._traced = false
+  deprecate._warned = Object.create(null)
+
+  deprecate.function = wrapfunction
+  deprecate.property = wrapproperty
+
+  return deprecate
+}
+
+/**
+ * Return a wrapped function in a deprecation message.
+ *
+ * This is a no-op version of the wrapper, which does nothing but call
+ * validation.
+ */
+
+function wrapfunction(fn, message) {
+  if (typeof fn !== 'function') {
+    throw new TypeError('argument fn must be a function')
+  }
+
+  return fn
+}
+
+/**
+ * Wrap property in a deprecation message.
+ *
+ * This is a no-op version of the wrapper, which does nothing but call
+ * validation.
+ */
+
+function wrapproperty(obj, prop, message) {
+  if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {
+    throw new TypeError('argument obj must be object')
+  }
+
+  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)
+
+  if (!descriptor) {
+    throw new TypeError('must call property on owner object')
+  }
+
+  if (!descriptor.configurable) {
+    throw new TypeError('property must be configurable')
+  }
+
+  return
+}

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/buffer-concat.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/buffer-concat.js b/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/buffer-concat.js
index 09d9721..4b73381 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/buffer-concat.js
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/buffer-concat.js
@@ -4,6 +4,8 @@
  * MIT Licensed
  */
 
+'use strict'
+
 /**
  * Module exports.
  */

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/callsite-tostring.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/callsite-tostring.js b/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/callsite-tostring.js
index 17cf7ed..9ecef34 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/callsite-tostring.js
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/callsite-tostring.js
@@ -4,6 +4,8 @@
  * MIT Licensed
  */
 
+'use strict'
+
 /**
  * Module exports.
  */

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/event-listener-count.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/event-listener-count.js b/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/event-listener-count.js
new file mode 100644
index 0000000..a05fceb
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/event-listener-count.js
@@ -0,0 +1,22 @@
+/*!
+ * depd
+ * Copyright(c) 2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = eventListenerCount
+
+/**
+ * Get the count of listeners on an event emitter of a specific type.
+ */
+
+function eventListenerCount(emitter, type) {
+  return emitter.listeners(type).length
+}

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/index.js b/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/index.js
index 7fee026..aa3c1de 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/index.js
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/depd/lib/compat/index.js
@@ -1,11 +1,22 @@
 /*!
  * depd
- * Copyright(c) 2014 Douglas Christopher Wilson
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
  * MIT Licensed
  */
 
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var Buffer = require('buffer')
+var EventEmitter = require('events').EventEmitter
+
 /**
  * Module exports.
+ * @public
  */
 
 lazyProperty(module.exports, 'bufferConcat', function bufferConcat() {
@@ -36,6 +47,10 @@ lazyProperty(module.exports, 'callSiteToString', function callSiteToString() {
   return stack[0].toString ? toString : require('./callsite-tostring')
 })
 
+lazyProperty(module.exports, 'eventListenerCount', function eventListenerCount() {
+  return EventEmitter.listenerCount || require('./event-listener-count')
+})
+
 /**
  * Define a lazy property.
  */

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/depd/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/depd/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/depd/package.json
index 8159ba2..9da460a 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/depd/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/depd/package.json
@@ -1,7 +1,7 @@
 {
   "name": "depd",
   "description": "Deprecate all the things",
-  "version": "1.0.1",
+  "version": "1.1.0",
   "author": {
     "name": "Douglas Christopher Wilson",
     "email": "doug@somethingdoug.com"
@@ -15,6 +15,7 @@
     "type": "git",
     "url": "git+https://github.com/dougwilson/nodejs-depd.git"
   },
+  "browser": "lib/browser/index.js",
   "devDependencies": {
     "benchmark": "1.0.0",
     "beautify-benchmark": "0.2.4",
@@ -37,14 +38,30 @@
     "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --no-exit test/",
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/"
   },
-  "readme": "# depd\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Node.js Version][node-image]][node-url]\n[![Linux Build][travis-image]][travis-url]\n[![Windows Build][appveyor-image]][appveyor-url]\n[![Coverage Status][coveralls-image]][coveralls-url]\n[![Gratipay][gratipay-image]][gratipay-url]\n\nDeprecate all the things\n\n> With great modules comes great responsibility; mark things deprecated!\n\n## Install\n\n```sh\n$ npm install depd\n```\n\n## API\n\n```js\nvar deprecate = require('depd')('my-module')\n```\n\nThis library allows you to display deprecation messages to your users.\nThis library goes above and beyond with deprecation warnings by\nintrospection of the call stack (but only the bits that it is interested\nin).\n\nInstead of just warning on the first invocation of a deprecated\nfunction and never again, this module will warn on the first invocation\nof a deprecated function per unique call site, making it ide
 al to alert\nusers of all deprecated uses across the code base, rather than just\nwhatever happens to execute first.\n\nThe deprecation warnings from this module also include the file and line\ninformation for the call into the module that the deprecated function was\nin.\n\n**NOTE** this library has a similar interface to the `debug` module, and\nthis module uses the calling file to get the boundary for the call stacks,\nso you should always create a new `deprecate` object in each file and not\nwithin some central file.\n\n### depd(namespace)\n\nCreate a new deprecate function that uses the given namespace name in the\nmessages and will display the call site prior to the stack entering the\nfile this function was called from. It is highly suggested you use the\nname of your module as the namespace.\n\n### deprecate(message)\n\nCall this function from deprecated code to display a deprecation message.\nThis message will appear once per unique caller site. Caller site is the\nfirst ca
 ll site in the stack in a different file from the caller of this\nfunction.\n\nIf the message is omitted, a message is generated for you based on the site\nof the `deprecate()` call and will display the name of the function called,\nsimilar to the name displayed in a stack trace.\n\n### deprecate.function(fn, message)\n\nCall this function to wrap a given function in a deprecation message on any\ncall to the function. An optional message can be supplied to provide a custom\nmessage.\n\n### deprecate.property(obj, prop, message)\n\nCall this function to wrap a given property on object in a deprecation message\non any accessing or setting of the property. An optional message can be supplied\nto provide a custom message.\n\nThe method must be called on the object where the property belongs (not\ninherited from the prototype).\n\nIf the property is a data descriptor, it will be converted to an accessor\ndescriptor in order to display the deprecation message.\n\n### process.on('deprecati
 on', fn)\n\nThis module will allow easy capturing of deprecation errors by emitting the\nerrors as the type \"deprecation\" on the global `process`. If there are no\nlisteners for this type, the errors are written to STDERR as normal, but if\nthere are any listeners, nothing will be written to STDERR and instead only\nemitted. From there, you can write the errors in a different format or to a\nlogging source.\n\nThe error represents the deprecation and is emitted only once with the same\nrules as writing to STDERR. The error has the following properties:\n\n  - `message` - This is the message given by the library\n  - `name` - This is always `'DeprecationError'`\n  - `namespace` - This is the namespace the deprecation came from\n  - `stack` - This is the stack of the call to the deprecated thing\n\nExample `error.stack` output:\n\n```\nDeprecationError: my-cool-module deprecated oldfunction\n    at Object.<anonymous> ([eval]-wrapper:6:22)\n    at Module._compile (module.js:456:26)\n
     at evalScript (node.js:532:25)\n    at startup (node.js:80:7)\n    at node.js:902:3\n```\n\n### process.env.NO_DEPRECATION\n\nAs a user of modules that are deprecated, the environment variable `NO_DEPRECATION`\nis provided as a quick solution to silencing deprecation warnings from being\noutput. The format of this is similar to that of `DEBUG`:\n\n```sh\n$ NO_DEPRECATION=my-module,othermod node app.js\n```\n\nThis will suppress deprecations from being output for \"my-module\" and \"othermod\".\nThe value is a list of comma-separated namespaces. To suppress every warning\nacross all namespaces, use the value `*` for a namespace.\n\nProviding the argument `--no-deprecation` to the `node` executable will suppress\nall deprecations (only available in Node.js 0.8 or higher).\n\n**NOTE** This will not suppress the deperecations given to any \"deprecation\"\nevent listeners, just the output to STDERR.\n\n### process.env.TRACE_DEPRECATION\n\nAs a user of modules that are deprecated, the
  environment variable `TRACE_DEPRECATION`\nis provided as a solution to getting more detailed location information in deprecation\nwarnings by including the entire stack trace. The format of this is the same as\n`NO_DEPRECATION`:\n\n```sh\n$ TRACE_DEPRECATION=my-module,othermod node app.js\n```\n\nThis will include stack traces for deprecations being output for \"my-module\" and\n\"othermod\". The value is a list of comma-separated namespaces. To trace every\nwarning across all namespaces, use the value `*` for a namespace.\n\nProviding the argument `--trace-deprecation` to the `node` executable will trace\nall deprecations (only available in Node.js 0.8 or higher).\n\n**NOTE** This will not trace the deperecations silenced by `NO_DEPRECATION`.\n\n## Display\n\n![message](files/message.png)\n\nWhen a user calls a function in your library that you mark deprecated, they\nwill see the following written to STDERR (in the given colors, similar colors\nand layout to the `debug` module):\n
 \n```\nbright cyan    bright yellow\n|              |          reset       cyan\n|              |          |           |\n▼              ▼          ▼           ▼\nmy-cool-module deprecated oldfunction [eval]-wrapper:6:22\n▲              ▲          ▲           ▲\n|              |          |           |\nnamespace      |          |           location of mycoolmod.oldfunction() call\n               |          deprecation message\n               the word \"deprecated\"\n```\n\nIf the user redirects their STDERR to a file or somewhere that does not support\ncolors, they see (similar layout to the `debug` module):\n\n```\nSun, 15 Jun 2014 05:21:37 GMT my-cool-module deprecated oldfunction at [eval]-wrapper:6:22\n▲                             ▲              ▲          ▲              ▲\n|                             |              |          |              |\ntimestamp of message          namespace      |          |             location of mycoolmod.oldfunction() c
 all\n                                             |          deprecation message\n                                             the word \"deprecated\"\n```\n\n## Examples\n\n### Deprecating all calls to a function\n\nThis will display a deprecated message about \"oldfunction\" being deprecated\nfrom \"my-module\" on STDERR.\n\n```js\nvar deprecate = require('depd')('my-cool-module')\n\n// message automatically derived from function name\n// Object.oldfunction\nexports.oldfunction = deprecate.function(function oldfunction() {\n  // all calls to function are deprecated\n})\n\n// specific message\nexports.oldfunction = deprecate.function(function () {\n  // all calls to function are deprecated\n}, 'oldfunction')\n```\n\n### Conditionally deprecating a function call\n\nThis will display a deprecated message about \"weirdfunction\" being deprecated\nfrom \"my-module\" on STDERR when called with less than 2 arguments.\n\n```js\nvar deprecate = require('depd')('my-cool-module')\n\nexports.
 weirdfunction = function () {\n  if (arguments.length < 2) {\n    // calls with 0 or 1 args are deprecated\n    deprecate('weirdfunction args < 2')\n  }\n}\n```\n\nWhen calling `deprecate` as a function, the warning is counted per call site\nwithin your own module, so you can display different deprecations depending\non different situations and the users will still get all the warnings:\n\n```js\nvar deprecate = require('depd')('my-cool-module')\n\nexports.weirdfunction = function () {\n  if (arguments.length < 2) {\n    // calls with 0 or 1 args are deprecated\n    deprecate('weirdfunction args < 2')\n  } else if (typeof arguments[0] !== 'string') {\n    // calls with non-string first argument are deprecated\n    deprecate('weirdfunction non-string first arg')\n  }\n}\n```\n\n### Deprecating property access\n\nThis will display a deprecated message about \"oldprop\" being deprecated\nfrom \"my-module\" on STDERR when accessed. A deprecation will be displayed\nwhen setting the value
  and when getting the value.\n\n```js\nvar deprecate = require('depd')('my-cool-module')\n\nexports.oldprop = 'something'\n\n// message automatically derives from property name\ndeprecate.property(exports, 'oldprop')\n\n// explicit message\ndeprecate.property(exports, 'oldprop', 'oldprop >= 0.10')\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-version-image]: https://img.shields.io/npm/v/depd.svg\n[npm-downloads-image]: https://img.shields.io/npm/dm/depd.svg\n[npm-url]: https://npmjs.org/package/depd\n[travis-image]: https://img.shields.io/travis/dougwilson/nodejs-depd/master.svg?label=linux\n[travis-url]: https://travis-ci.org/dougwilson/nodejs-depd\n[appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/nodejs-depd/master.svg?label=windows\n[appveyor-url]: https://ci.appveyor.com/project/dougwilson/nodejs-depd\n[coveralls-image]: https://img.shields.io/coveralls/dougwilson/nodejs-depd/master.svg\n[coveralls-url]: https://coveralls.io/r/dougwilson/nodejs-depd?branch=master\n
 [node-image]: https://img.shields.io/node/v/depd.svg\n[node-url]: http://nodejs.org/download/\n[gratipay-image]: https://img.shields.io/gratipay/dougwilson.svg\n[gratipay-url]: https://www.gratipay.com/dougwilson/\n",
-  "readmeFilename": "Readme.md",
+  "gitHead": "78c659de20283e3a6bee92bda455e6daff01686a",
   "bugs": {
     "url": "https://github.com/dougwilson/nodejs-depd/issues"
   },
-  "homepage": "https://github.com/dougwilson/nodejs-depd#readme",
-  "_id": "depd@1.0.1",
-  "_shasum": "80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa",
-  "_resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz",
-  "_from": "depd@>=1.0.1 <1.1.0"
+  "homepage": "https://github.com/dougwilson/nodejs-depd",
+  "_id": "depd@1.1.0",
+  "_shasum": "e1bd82c6aab6ced965b97b88b17ed3e528ca18c3",
+  "_from": "depd@>=1.1.0 <1.2.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "dist": {
+    "shasum": "e1bd82c6aab6ced965b97b88b17ed3e528ca18c3",
+    "tarball": "http://registry.npmjs.org/depd/-/depd-1.1.0.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/LICENSE
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/LICENSE b/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/LICENSE
index a3f0274..2e70de9 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/LICENSE
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/LICENSE
@@ -1,6 +1,8 @@
 (The MIT License)
 
 Copyright (c) 2012-2013 TJ Holowaychuk
+Copyright (c) 2015 Andreas Lubbe
+Copyright (c) 2015 Tiancheng "Timothy" Gu
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/Readme.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/Readme.md b/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/Readme.md
index 2cfcc99..653d9ea 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/Readme.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/Readme.md
@@ -1,13 +1,41 @@
 
 # escape-html
 
-  Escape HTML entities
+  Escape string for use in HTML
 
 ## Example
 
 ```js
 var escape = require('escape-html');
-escape(str);
+var html = escape('foo & bar');
+// -> foo &amp; bar
+```
+
+## Benchmark
+
+```
+$ npm run-script bench
+
+> escape-html@1.0.3 bench nodejs-escape-html
+> node benchmark/index.js
+
+
+  http_parser@1.0
+  node@0.10.33
+  v8@3.14.5.9
+  ares@1.9.0-DEV
+  uv@0.10.29
+  zlib@1.2.3
+  modules@11
+  openssl@1.0.1j
+
+  1 test completed.
+  2 tests completed.
+  3 tests completed.
+
+  no special characters    x 19,435,271 ops/sec ±0.85% (187 runs sampled)
+  single special character x  6,132,421 ops/sec ±0.67% (194 runs sampled)
+  many special characters  x  3,175,826 ops/sec ±0.65% (193 runs sampled)
 ```
 
 ## License


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[03/14] cordova-browser git commit: CB-10788 Updated checked in node_modules

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/shell.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/shell.js b/node_modules/shelljs/shell.js
index 7a4f4c8..93aff70 100644
--- a/node_modules/shelljs/shell.js
+++ b/node_modules/shelljs/shell.js
@@ -6,1062 +6,88 @@
 // http://github.com/arturadib/shelljs
 //
 
-var fs = require('fs'),
-    path = require('path'),
-    util = require('util'),
-    vm = require('vm'),
-    child = require('child_process'),
-    os = require('os');
-
-// Node shims for < v0.7
-fs.existsSync = fs.existsSync || path.existsSync;
-
-var config = {
-  silent: false,
-  fatal: false
-};
-
-var state = {
-      error: null,
-      currentCmd: 'shell.js',
-      tempDir: null
-    },
-    platform = os.type().match(/^Win/) ? 'win' : 'unix';
+var common = require('./src/common');
 
 
 //@
 //@ All commands run synchronously, unless otherwise stated.
 //@
 
+//@include ./src/cd
+var _cd = require('./src/cd');
+exports.cd = common.wrap('cd', _cd);
 
-//@
-//@ ### cd('dir')
-//@ Changes to directory `dir` for the duration of the script
-function _cd(options, dir) {
-  if (!dir)
-    error('directory not specified');
-
-  if (!fs.existsSync(dir))
-    error('no such file or directory: ' + dir);
-
-  if (!fs.statSync(dir).isDirectory())
-    error('not a directory: ' + dir);
-
-  process.chdir(dir);
-}
-exports.cd = wrap('cd', _cd);
-
-//@
-//@ ### pwd()
-//@ Returns the current directory.
-function _pwd(options) {
-  var pwd = path.resolve(process.cwd());
-  return ShellString(pwd);
-}
-exports.pwd = wrap('pwd', _pwd);
-
-
-//@
-//@ ### ls([options ,] path [,path ...])
-//@ ### ls([options ,] path_array)
-//@ Available options:
-//@
-//@ + `-R`: recursive
-//@ + `-A`: all files (include files beginning with `.`, except for `.` and `..`)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ ls('projs/*.js');
-//@ ls('-R', '/users/me', '/tmp');
-//@ ls('-R', ['/users/me', '/tmp']); // same as above
-//@ ```
-//@
-//@ Returns array of files in the given path, or in current directory if no path provided.
-function _ls(options, paths) {
-  options = parseOptions(options, {
-    'R': 'recursive',
-    'A': 'all',
-    'a': 'all_deprecated'
-  });
-
-  if (options.all_deprecated) {
-    // We won't support the -a option as it's hard to image why it's useful
-    // (it includes '.' and '..' in addition to '.*' files)
-    // For backwards compatibility we'll dump a deprecated message and proceed as before
-    log('ls: Option -a is deprecated. Use -A instead');
-    options.all = true;
-  }
-
-  if (!paths)
-    paths = ['.'];
-  else if (typeof paths === 'object')
-    paths = paths; // assume array
-  else if (typeof paths === 'string')
-    paths = [].slice.call(arguments, 1);
-
-  var list = [];
-
-  // Conditionally pushes file to list - returns true if pushed, false otherwise
-  // (e.g. prevents hidden files to be included unless explicitly told so)
-  function pushFile(file, query) {
-    // hidden file?
-    if (path.basename(file)[0] === '.') {
-      // not explicitly asking for hidden files?
-      if (!options.all && !(path.basename(query)[0] === '.' && path.basename(query).length > 1))
-        return false;
-    }
-
-    if (platform === 'win')
-      file = file.replace(/\\/g, '/');
-
-    list.push(file);
-    return true;
-  }
-
-  paths.forEach(function(p) {
-    if (fs.existsSync(p)) {
-      var stats = fs.statSync(p);
-      // Simple file?
-      if (stats.isFile()) {
-        pushFile(p, p);
-        return; // continue
-      }
-
-      // Simple dir?
-      if (stats.isDirectory()) {
-        // Iterate over p contents
-        fs.readdirSync(p).forEach(function(file) {
-          if (!pushFile(file, p))
-            return;
-
-          // Recursive?
-          if (options.recursive) {
-            var oldDir = _pwd();
-            _cd('', p);
-            if (fs.statSync(file).isDirectory())
-              list = list.concat(_ls('-R'+(options.all?'A':''), file+'/*'));
-            _cd('', oldDir);
-          }
-        });
-        return; // continue
-      }
-    }
-
-    // p does not exist - possible wildcard present
-
-    var basename = path.basename(p);
-    var dirname = path.dirname(p);
-    // Wildcard present on an existing dir? (e.g. '/tmp/*.js')
-    if (basename.search(/\*/) > -1 && fs.existsSync(dirname) && fs.statSync(dirname).isDirectory) {
-      // Escape special regular expression chars
-      var regexp = basename.replace(/(\^|\$|\(|\)|<|>|\[|\]|\{|\}|\.|\+|\?)/g, '\\$1');
-      // Translates wildcard into regex
-      regexp = '^' + regexp.replace(/\*/g, '.*') + '$';
-      // Iterate over directory contents
-      fs.readdirSync(dirname).forEach(function(file) {
-        if (file.match(new RegExp(regexp))) {
-          if (!pushFile(path.normalize(dirname+'/'+file), basename))
-            return;
-
-          // Recursive?
-          if (options.recursive) {
-            var pp = dirname + '/' + file;
-            if (fs.lstatSync(pp).isDirectory())
-              list = list.concat(_ls('-R'+(options.all?'A':''), pp+'/*'));
-          } // recursive
-        } // if file matches
-      }); // forEach
-      return;
-    }
-
-    error('no such file or directory: ' + p, true);
-  });
-
-  return list;
-}
-exports.ls = wrap('ls', _ls);
-
-
-//@
-//@ ### find(path [,path ...])
-//@ ### find(path_array)
-//@ Examples:
-//@
-//@ ```javascript
-//@ find('src', 'lib');
-//@ find(['src', 'lib']); // same as above
-//@ find('.').filter(function(file) { return file.match(/\.js$/); });
-//@ ```
-//@
-//@ Returns array of all files (however deep) in the given paths.
-//@
-//@ The main difference from `ls('-R', path)` is that the resulting file names
-//@ include the base directories, e.g. `lib/resources/file1` instead of just `file1`.
-function _find(options, paths) {
-  if (!paths)
-    error('no path specified');
-  else if (typeof paths === 'object')
-    paths = paths; // assume array
-  else if (typeof paths === 'string')
-    paths = [].slice.call(arguments, 1);
-
-  var list = [];
-
-  function pushFile(file) {
-    if (platform === 'win')
-      file = file.replace(/\\/g, '/');
-    list.push(file);
-  }
-
-  // why not simply do ls('-R', paths)? because the output wouldn't give the base dirs
-  // to get the base dir in the output, we need instead ls('-R', 'dir/*') for every directory
-
-  paths.forEach(function(file) {
-    pushFile(file);
-
-    if (fs.statSync(file).isDirectory()) {
-      _ls('-RA', file+'/*').forEach(function(subfile) {
-        pushFile(subfile);
-      });
-    }
-  });
-
-  return list;
-}
-exports.find = wrap('find', _find);
-
-
-//@
-//@ ### cp([options ,] source [,source ...], dest)
-//@ ### cp([options ,] source_array, dest)
-//@ Available options:
-//@
-//@ + `-f`: force
-//@ + `-r, -R`: recursive
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ cp('file1', 'dir1');
-//@ cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp');
-//@ cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above
-//@ ```
-//@
-//@ Copies files. The wildcard `*` is accepted.
-function _cp(options, sources, dest) {
-  options = parseOptions(options, {
-    'f': 'force',
-    'R': 'recursive',
-    'r': 'recursive'
-  });
-
-  // Get sources, dest
-  if (arguments.length < 3) {
-    error('missing <source> and/or <dest>');
-  } else if (arguments.length > 3) {
-    sources = [].slice.call(arguments, 1, arguments.length - 1);
-    dest = arguments[arguments.length - 1];
-  } else if (typeof sources === 'string') {
-    sources = [sources];
-  } else if ('length' in sources) {
-    sources = sources; // no-op for array
-  } else {
-    error('invalid arguments');
-  }
-
-  var exists = fs.existsSync(dest),
-      stats = exists && fs.statSync(dest);
-
-  // Dest is not existing dir, but multiple sources given
-  if ((!exists || !stats.isDirectory()) && sources.length > 1)
-    error('dest is not a directory (too many sources)');
-
-  // Dest is an existing file, but no -f given
-  if (exists && stats.isFile() && !options.force)
-    error('dest file already exists: ' + dest);
-
-  if (options.recursive) {
-    // Recursive allows the shortcut syntax "sourcedir/" for "sourcedir/*"
-    // (see Github issue #15)
-    sources.forEach(function(src, i) {
-      if (src[src.length - 1] === '/')
-        sources[i] += '*';
-    });
-
-    // Create dest
-    try {
-      fs.mkdirSync(dest, parseInt('0777', 8));
-    } catch (e) {
-      // like Unix's cp, keep going even if we can't create dest dir
-    }
-  }
-
-  sources = expand(sources);
-
-  sources.forEach(function(src) {
-    if (!fs.existsSync(src)) {
-      error('no such file or directory: '+src, true);
-      return; // skip file
-    }
-
-    // If here, src exists
-    if (fs.statSync(src).isDirectory()) {
-      if (!options.recursive) {
-        // Non-Recursive
-        log(src + ' is a directory (not copied)');
-      } else {
-        // Recursive
-        // 'cp /a/source dest' should create 'source' in 'dest'
-        var newDest = path.join(dest, path.basename(src)),
-            checkDir = fs.statSync(src);
-        try {
-          fs.mkdirSync(newDest, checkDir.mode);
-        } catch (e) {
-          //if the directory already exists, that's okay
-          if (e.code !== 'EEXIST') throw e;
-        }
-
-        cpdirSyncRecursive(src, newDest, {force: options.force});
-      }
-      return; // done with dir
-    }
-
-    // If here, src is a file
-
-    // When copying to '/path/dir':
-    //    thisDest = '/path/dir/file1'
-    var thisDest = dest;
-    if (fs.existsSync(dest) && fs.statSync(dest).isDirectory())
-      thisDest = path.normalize(dest + '/' + path.basename(src));
-
-    if (fs.existsSync(thisDest) && !options.force) {
-      error('dest file already exists: ' + thisDest, true);
-      return; // skip file
-    }
-
-    copyFileSync(src, thisDest);
-  }); // forEach(src)
-}
-exports.cp = wrap('cp', _cp);
-
-//@
-//@ ### rm([options ,] file [, file ...])
-//@ ### rm([options ,] file_array)
-//@ Available options:
-//@
-//@ + `-f`: force
-//@ + `-r, -R`: recursive
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ rm('-rf', '/tmp/*');
-//@ rm('some_file.txt', 'another_file.txt');
-//@ rm(['some_file.txt', 'another_file.txt']); // same as above
-//@ ```
-//@
-//@ Removes files. The wildcard `*` is accepted.
-function _rm(options, files) {
-  options = parseOptions(options, {
-    'f': 'force',
-    'r': 'recursive',
-    'R': 'recursive'
-  });
-  if (!files)
-    error('no paths given');
-
-  if (typeof files === 'string')
-    files = [].slice.call(arguments, 1);
-  // if it's array leave it as it is
-
-  files = expand(files);
-
-  files.forEach(function(file) {
-    if (!fs.existsSync(file)) {
-      // Path does not exist, no force flag given
-      if (!options.force)
-        error('no such file or directory: '+file, true);
-
-      return; // skip file
-    }
-
-    // If here, path exists
-
-    var stats = fs.statSync(file);
-    // Remove simple file
-    if (stats.isFile()) {
-
-      // Do not check for file writing permissions
-      if (options.force) {
-        _unlinkSync(file);
-        return;
-      }
-
-      if (isWriteable(file))
-        _unlinkSync(file);
-      else
-        error('permission denied: '+file, true);
-
-      return;
-    } // simple file
-
-    // Path is an existing directory, but no -r flag given
-    if (stats.isDirectory() && !options.recursive) {
-      error('path is a directory', true);
-      return; // skip path
-    }
-
-    // Recursively remove existing directory
-    if (stats.isDirectory() && options.recursive) {
-      rmdirSyncRecursive(file, options.force);
-    }
-  }); // forEach(file)
-} // rm
-exports.rm = wrap('rm', _rm);
-
-//@
-//@ ### mv(source [, source ...], dest')
-//@ ### mv(source_array, dest')
-//@ Available options:
-//@
-//@ + `f`: force
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ mv('-f', 'file', 'dir/');
-//@ mv('file1', 'file2', 'dir/');
-//@ mv(['file1', 'file2'], 'dir/'); // same as above
-//@ ```
-//@
-//@ Moves files. The wildcard `*` is accepted.
-function _mv(options, sources, dest) {
-  options = parseOptions(options, {
-    'f': 'force'
-  });
-
-  // Get sources, dest
-  if (arguments.length < 3) {
-    error('missing <source> and/or <dest>');
-  } else if (arguments.length > 3) {
-    sources = [].slice.call(arguments, 1, arguments.length - 1);
-    dest = arguments[arguments.length - 1];
-  } else if (typeof sources === 'string') {
-    sources = [sources];
-  } else if ('length' in sources) {
-    sources = sources; // no-op for array
-  } else {
-    error('invalid arguments');
-  }
-
-  sources = expand(sources);
-
-  var exists = fs.existsSync(dest),
-      stats = exists && fs.statSync(dest);
-
-  // Dest is not existing dir, but multiple sources given
-  if ((!exists || !stats.isDirectory()) && sources.length > 1)
-    error('dest is not a directory (too many sources)');
-
-  // Dest is an existing file, but no -f given
-  if (exists && stats.isFile() && !options.force)
-    error('dest file already exists: ' + dest);
-
-  sources.forEach(function(src) {
-    if (!fs.existsSync(src)) {
-      error('no such file or directory: '+src, true);
-      return; // skip file
-    }
-
-    // If here, src exists
-
-    // When copying to '/path/dir':
-    //    thisDest = '/path/dir/file1'
-    var thisDest = dest;
-    if (fs.existsSync(dest) && fs.statSync(dest).isDirectory())
-      thisDest = path.normalize(dest + '/' + path.basename(src));
-
-    if (fs.existsSync(thisDest) && !options.force) {
-      error('dest file already exists: ' + thisDest, true);
-      return; // skip file
-    }
-
-    if (path.resolve(src) === path.dirname(path.resolve(thisDest))) {
-      error('cannot move to self: '+src, true);
-      return; // skip file
-    }
-
-    fs.renameSync(src, thisDest);
-  }); // forEach(src)
-} // mv
-exports.mv = wrap('mv', _mv);
-
-//@
-//@ ### mkdir([options ,] dir [, dir ...])
-//@ ### mkdir([options ,] dir_array)
-//@ Available options:
-//@
-//@ + `p`: full path (will create intermediate dirs if necessary)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g');
-//@ mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above
-//@ ```
-//@
-//@ Creates directories.
-function _mkdir(options, dirs) {
-  options = parseOptions(options, {
-    'p': 'fullpath'
-  });
-  if (!dirs)
-    error('no paths given');
-
-  if (typeof dirs === 'string')
-    dirs = [].slice.call(arguments, 1);
-  // if it's array leave it as it is
-
-  dirs.forEach(function(dir) {
-    if (fs.existsSync(dir)) {
-      if (!options.fullpath)
-          error('path already exists: ' + dir, true);
-      return; // skip dir
-    }
-
-    // Base dir does not exist, and no -p option given
-    var baseDir = path.dirname(dir);
-    if (!fs.existsSync(baseDir) && !options.fullpath) {
-      error('no such file or directory: ' + baseDir, true);
-      return; // skip dir
-    }
-
-    if (options.fullpath)
-      mkdirSyncRecursive(dir);
-    else
-      fs.mkdirSync(dir, parseInt('0777', 8));
-  });
-} // mkdir
-exports.mkdir = wrap('mkdir', _mkdir);
-
-//@
-//@ ### test(expression)
-//@ Available expression primaries:
-//@
-//@ + `'-b', 'path'`: true if path is a block device
-//@ + `'-c', 'path'`: true if path is a character device
-//@ + `'-d', 'path'`: true if path is a directory
-//@ + `'-e', 'path'`: true if path exists
-//@ + `'-f', 'path'`: true if path is a regular file
-//@ + `'-L', 'path'`: true if path is a symboilc link
-//@ + `'-p', 'path'`: true if path is a pipe (FIFO)
-//@ + `'-S', 'path'`: true if path is a socket
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ if (test('-d', path)) { /* do something with dir */ };
-//@ if (!test('-f', path)) continue; // skip if it's a regular file
-//@ ```
-//@
-//@ Evaluates expression using the available primaries and returns corresponding value.
-function _test(options, path) {
-  if (!path)
-    error('no path given');
-
-  // hack - only works with unary primaries
-  options = parseOptions(options, {
-    'b': 'block',
-    'c': 'character',
-    'd': 'directory',
-    'e': 'exists',
-    'f': 'file',
-    'L': 'link',
-    'p': 'pipe',
-    'S': 'socket'
-  });
-
-  var canInterpret = false;
-  for (var key in options)
-    if (options[key] === true) {
-      canInterpret = true;
-      break;
-    }
-
-  if (!canInterpret)
-    error('could not interpret expression');
-
-  if (options.link) {
-    try {
-      return fs.lstatSync(path).isSymbolicLink();
-    } catch(e) {
-      return false;
-    }
-  }
-
-  if (!fs.existsSync(path))
-    return false;
-
-  if (options.exists)
-    return true;
-
-  var stats = fs.statSync(path);
-
-  if (options.block)
-    return stats.isBlockDevice();
-
-  if (options.character)
-    return stats.isCharacterDevice();
-
-  if (options.directory)
-    return stats.isDirectory();
-
-  if (options.file)
-    return stats.isFile();
-
-  if (options.pipe)
-    return stats.isFIFO();
-
-  if (options.socket)
-    return stats.isSocket();
-} // test
-exports.test = wrap('test', _test);
-
-
-//@
-//@ ### cat(file [, file ...])
-//@ ### cat(file_array)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ var str = cat('file*.txt');
-//@ var str = cat('file1', 'file2');
-//@ var str = cat(['file1', 'file2']); // same as above
-//@ ```
-//@
-//@ Returns a string containing the given file, or a concatenated string
-//@ containing the files if more than one file is given (a new line character is
-//@ introduced between each file). Wildcard `*` accepted.
-function _cat(options, files) {
-  var cat = '';
-
-  if (!files)
-    error('no paths given');
-
-  if (typeof files === 'string')
-    files = [].slice.call(arguments, 1);
-  // if it's array leave it as it is
-
-  files = expand(files);
-
-  files.forEach(function(file) {
-    if (!fs.existsSync(file))
-      error('no such file or directory: ' + file);
-
-    cat += fs.readFileSync(file, 'utf8') + '\n';
-  });
-
-  if (cat[cat.length-1] === '\n')
-    cat = cat.substring(0, cat.length-1);
-
-  return ShellString(cat);
-}
-exports.cat = wrap('cat', _cat);
-
-//@
-//@ ### 'string'.to(file)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ cat('input.txt').to('output.txt');
-//@ ```
-//@
-//@ Analogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as
-//@ those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_
-function _to(options, file) {
-  if (!file)
-    error('wrong arguments');
-
-  if (!fs.existsSync( path.dirname(file) ))
-      error('no such file or directory: ' + path.dirname(file));
-
-  try {
-    fs.writeFileSync(file, this.toString(), 'utf8');
-  } catch(e) {
-    error('could not write to file (code '+e.code+'): '+file, true);
-  }
-}
-// In the future, when Proxies are default, we can add methods like `.to()` to primitive strings.
-// For now, this is a dummy function to bookmark places we need such strings
-function ShellString(str) {
-  return str;
-}
-String.prototype.to = wrap('to', _to);
+//@include ./src/pwd
+var _pwd = require('./src/pwd');
+exports.pwd = common.wrap('pwd', _pwd);
 
-//@
-//@ ### sed([options ,] search_regex, replace_str, file)
-//@ Available options:
-//@
-//@ + `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js');
-//@ sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js');
-//@ ```
-//@
-//@ Reads an input string from `file` and performs a JavaScript `replace()` on the input
-//@ using the given search regex and replacement string. Returns the new string after replacement.
-function _sed(options, regex, replacement, file) {
-  options = parseOptions(options, {
-    'i': 'inplace'
-  });
+//@include ./src/ls
+var _ls = require('./src/ls');
+exports.ls = common.wrap('ls', _ls);
 
-  if (typeof replacement === 'string')
-    replacement = replacement; // no-op
-  else if (typeof replacement === 'number')
-    replacement = replacement.toString(); // fallback
-  else
-    error('invalid replacement string');
+//@include ./src/find
+var _find = require('./src/find');
+exports.find = common.wrap('find', _find);
 
-  if (!file)
-    error('no file given');
+//@include ./src/cp
+var _cp = require('./src/cp');
+exports.cp = common.wrap('cp', _cp);
 
-  if (!fs.existsSync(file))
-    error('no such file or directory: ' + file);
+//@include ./src/rm
+var _rm = require('./src/rm');
+exports.rm = common.wrap('rm', _rm);
 
-  var result = fs.readFileSync(file, 'utf8').replace(regex, replacement);
-  if (options.inplace)
-    fs.writeFileSync(file, result, 'utf8');
+//@include ./src/mv
+var _mv = require('./src/mv');
+exports.mv = common.wrap('mv', _mv);
 
-  return ShellString(result);
-}
-exports.sed = wrap('sed', _sed);
+//@include ./src/mkdir
+var _mkdir = require('./src/mkdir');
+exports.mkdir = common.wrap('mkdir', _mkdir);
 
-//@
-//@ ### grep([options ,] regex_filter, file [, file ...])
-//@ ### grep([options ,] regex_filter, file_array)
-//@ Available options:
-//@
-//@ + `-v`: Inverse the sense of the regex and print the lines not matching the criteria.
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ grep('-v', 'GLOBAL_VARIABLE', '*.js');
-//@ grep('GLOBAL_VARIABLE', '*.js');
-//@ ```
-//@
-//@ Reads input string from given files and returns a string containing all lines of the
-//@ file that match the given `regex_filter`. Wildcard `*` accepted.
-function _grep(options, regex, files) {
-  options = parseOptions(options, {
-    'v': 'inverse'
-  });
+//@include ./src/test
+var _test = require('./src/test');
+exports.test = common.wrap('test', _test);
 
-  if (!files)
-    error('no paths given');
+//@include ./src/cat
+var _cat = require('./src/cat');
+exports.cat = common.wrap('cat', _cat);
 
-  if (typeof files === 'string')
-    files = [].slice.call(arguments, 2);
-  // if it's array leave it as it is
+//@include ./src/to
+var _to = require('./src/to');
+String.prototype.to = common.wrap('to', _to);
 
-  files = expand(files);
+//@include ./src/toEnd
+var _toEnd = require('./src/toEnd');
+String.prototype.toEnd = common.wrap('toEnd', _toEnd);
 
-  var grep = '';
-  files.forEach(function(file) {
-    if (!fs.existsSync(file)) {
-      error('no such file or directory: ' + file, true);
-      return;
-    }
+//@include ./src/sed
+var _sed = require('./src/sed');
+exports.sed = common.wrap('sed', _sed);
 
-    var contents = fs.readFileSync(file, 'utf8'),
-        lines = contents.split(/\r*\n/);
-    lines.forEach(function(line) {
-      var matched = line.match(regex);
-      if ((options.inverse && !matched) || (!options.inverse && matched))
-        grep += line + '\n';
-    });
-  });
+//@include ./src/grep
+var _grep = require('./src/grep');
+exports.grep = common.wrap('grep', _grep);
 
-  return ShellString(grep);
-}
-exports.grep = wrap('grep', _grep);
+//@include ./src/which
+var _which = require('./src/which');
+exports.which = common.wrap('which', _which);
 
+//@include ./src/echo
+var _echo = require('./src/echo');
+exports.echo = _echo; // don't common.wrap() as it could parse '-options'
 
-//@
-//@ ### which(command)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ var nodeExec = which('node');
-//@ ```
-//@
-//@ Searches for `command` in the system's PATH. On Windows looks for `.exe`, `.cmd`, and `.bat` extensions.
-//@ Returns string containing the absolute path to the command.
-function _which(options, cmd) {
-  if (!cmd)
-    error('must specify command');
-
-  var pathEnv = process.env.path || process.env.Path || process.env.PATH,
-      pathArray = splitPath(pathEnv),
-      where = null;
-
-  // No relative/absolute paths provided?
-  if (cmd.search(/\//) === -1) {
-    // Search for command in PATH
-    pathArray.forEach(function(dir) {
-      if (where)
-        return; // already found it
+//@include ./src/dirs
+var _dirs = require('./src/dirs').dirs;
+exports.dirs = common.wrap("dirs", _dirs);
+var _pushd = require('./src/dirs').pushd;
+exports.pushd = common.wrap('pushd', _pushd);
+var _popd = require('./src/dirs').popd;
+exports.popd = common.wrap("popd", _popd);
 
-      var attempt = path.resolve(dir + '/' + cmd);
-      if (fs.existsSync(attempt)) {
-        where = attempt;
-        return;
-      }
-
-      if (platform === 'win') {
-        var baseAttempt = attempt;
-        attempt = baseAttempt + '.exe';
-        if (fs.existsSync(attempt)) {
-          where = attempt;
-          return;
-        }
-        attempt = baseAttempt + '.cmd';
-        if (fs.existsSync(attempt)) {
-          where = attempt;
-          return;
-        }
-        attempt = baseAttempt + '.bat';
-        if (fs.existsSync(attempt)) {
-          where = attempt;
-          return;
-        }
-      } // if 'win'
-    });
-  }
-
-  // Command not found anywhere?
-  if (!fs.existsSync(cmd) && !where)
-    return null;
-
-  where = where || path.resolve(cmd);
-
-  return ShellString(where);
-}
-exports.which = wrap('which', _which);
-
-//@
-//@ ### echo(string [,string ...])
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ echo('hello world');
-//@ var str = echo('hello world');
-//@ ```
-//@
-//@ Prints string to stdout, and returns string with additional utility methods
-//@ like `.to()`.
-function _echo() {
-  var messages = [].slice.call(arguments, 0);
-  console.log.apply(this, messages);
-  return ShellString(messages.join(' '));
-}
-exports.echo = _echo; // don't wrap() as it could parse '-options'
-
-// Pushd/popd/dirs internals
-var _dirStack = [];
-
-function _isStackIndex(index) {
-  return (/^[\-+]\d+$/).test(index);
-}
-
-function _parseStackIndex(index) {
-  if (_isStackIndex(index)) {
-    if (Math.abs(index) < _dirStack.length + 1) { // +1 for pwd
-      return (/^-/).test(index) ? Number(index) - 1 : Number(index);
-    } else {
-      error(index + ': directory stack index out of range');
-    }
-  } else {
-    error(index + ': invalid number');
-  }
-}
-
-function _actualDirStack() {
-  return [process.cwd()].concat(_dirStack);
-}
-
-//@
-//@ ### dirs([options | '+N' | '-N'])
-//@
-//@ Available options:
-//@
-//@ + `-c`: Clears the directory stack by deleting all of the elements.
-//@
-//@ Arguments:
-//@
-//@ + `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.
-//@ + `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero.
-//@
-//@ Display the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified.
-//@
-//@ See also: pushd, popd
-function _dirs(options, index) {
-  if (_isStackIndex(options)) {
-    index = options;
-    options = '';
-  }
-
-  options = parseOptions(options, {
-    'c' : 'clear'
-  });
-
-  if (options['clear']) {
-    _dirStack = [];
-    return _dirStack;
-  }
-
-  var stack = _actualDirStack();
-
-  if (index) {
-    index = _parseStackIndex(index);
-
-    if (index < 0) {
-      index = stack.length + index;
-    }
-
-    log(stack[index]);
-    return stack[index];
-  }
-
-  log(stack.join(' '));
-
-  return stack;
-}
-exports.dirs = wrap("dirs", _dirs);
-
-//@
-//@ ### pushd([options,] [dir | '-N' | '+N'])
-//@
-//@ Available options:
-//@
-//@ + `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated.
-//@
-//@ Arguments:
-//@
-//@ + `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`.
-//@ + `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
-//@ + `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ // process.cwd() === '/usr'
-//@ pushd('/etc'); // Returns /etc /usr
-//@ pushd('+1');   // Returns /usr /etc
-//@ ```
-//@
-//@ Save the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack.
-function _pushd(options, dir) {
-  if (_isStackIndex(options)) {
-    dir = options;
-    options = '';
-  }
-
-  options = parseOptions(options, {
-    'n' : 'no-cd'
-  });
-
-  var dirs = _actualDirStack();
-
-  if (dir === '+0') {
-    return dirs; // +0 is a noop
-  } else if (!dir) {
-    if (dirs.length > 1) {
-      dirs = dirs.splice(1, 1).concat(dirs);
-    } else {
-      return error('no other directory');
-    }
-  } else if (_isStackIndex(dir)) {
-    var n = _parseStackIndex(dir);
-    dirs = dirs.slice(n).concat(dirs.slice(0, n));
-  } else {
-    if (options['no-cd']) {
-      dirs.splice(1, 0, dir);
-    } else {
-      dirs.unshift(dir);
-    }
-  }
-
-  if (options['no-cd']) {
-    dirs = dirs.slice(1);
-  } else {
-    dir = path.resolve(dirs.shift());
-    _cd('', dir);
-  }
-
-  _dirStack = dirs;
-  return _dirs('');
-}
-exports.pushd = wrap('pushd', _pushd);
-
-//@
-//@ ### popd([options,] ['-N' | '+N'])
-//@
-//@ Available options:
-//@
-//@ + `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated.
-//@
-//@ Arguments:
-//@
-//@ + `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero.
-//@ + `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero.
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ echo(process.cwd()); // '/usr'
-//@ pushd('/etc');       // '/etc /usr'
-//@ echo(process.cwd()); // '/etc'
-//@ popd();              // '/usr'
-//@ echo(process.cwd()); // '/usr'
-//@ ```
-//@
-//@ When no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack.
-function _popd(options, index) {
-  if (_isStackIndex(options)) {
-    index = options;
-    options = '';
-  }
-
-  options = parseOptions(options, {
-    'n' : 'no-cd'
-  });
-
-  if (!_dirStack.length) {
-    return error('directory stack empty');
-  }
-
-  index = _parseStackIndex(index || '+0');
-
-  if (options['no-cd'] || index > 0 || _dirStack.length + index === 0) {
-    index = index > 0 ? index - 1 : index;
-    _dirStack.splice(index, 1);
-  } else {
-    var dir = path.resolve(_dirStack.shift());
-    _cd('', dir);
-  }
-
-  return _dirs('');
-}
-exports.popd = wrap("popd", _popd);
+//@include ./src/ln
+var _ln = require('./src/ln');
+exports.ln = common.wrap('ln', _ln);
 
 //@
 //@ ### exit(code)
@@ -1073,288 +99,54 @@ exports.exit = process.exit;
 //@ Object containing environment variables (both getter and setter). Shortcut to process.env.
 exports.env = process.env;
 
-//@
-//@ ### exec(command [, options] [, callback])
-//@ Available options (all `false` by default):
-//@
-//@ + `async`: Asynchronous execution. Defaults to true if a callback is provided.
-//@ + `silent`: Do not echo program output to console.
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ var version = exec('node --version', {silent:true}).output;
-//@
-//@ var child = exec('some_long_running_process', {async:true});
-//@ child.stdout.on('data', function(data) {
-//@   /* ... do something with data ... */
-//@ });
-//@
-//@ exec('some_long_running_process', function(code, output) {
-//@   console.log('Exit code:', code);
-//@   console.log('Program output:', output);
-//@ });
-//@ ```
-//@
-//@ Executes the given `command` _synchronously_, unless otherwise specified.
-//@ When in synchronous mode returns the object `{ code:..., output:... }`, containing the program's
-//@ `output` (stdout + stderr)  and its exit `code`. Otherwise returns the child process object, and
-//@ the `callback` gets the arguments `(code, output)`.
-//@
-//@ **Note:** For long-lived processes, it's best to run `exec()` asynchronously as
-//@ the current synchronous implementation uses a lot of CPU. This should be getting
-//@ fixed soon.
-function _exec(command, options, callback) {
-  if (!command)
-    error('must specify command');
-
-  // Callback is defined instead of options.
-  if (typeof options === 'function') {
-    callback = options;
-    options = { async: true };
-  }
-
-  // Callback is defined with options.
-  if (typeof options === 'object' && typeof callback === 'function') {
-    options.async = true;
-  }
-
-  options = extend({
-    silent: config.silent,
-    async: false
-  }, options);
+//@include ./src/exec
+var _exec = require('./src/exec');
+exports.exec = common.wrap('exec', _exec, {notUnix:true});
 
-  if (options.async)
-    return execAsync(command, options, callback);
-  else
-    return execSync(command, options);
-}
-exports.exec = wrap('exec', _exec, {notUnix:true});
+//@include ./src/chmod
+var _chmod = require('./src/chmod');
+exports.chmod = common.wrap('chmod', _chmod);
 
-var PERMS = (function (base) {
-  return {
-    OTHER_EXEC  : base.EXEC,
-    OTHER_WRITE : base.WRITE,
-    OTHER_READ  : base.READ,
+//@include ./src/touch
+var _touch = require('./src/touch');
+exports.touch = common.wrap('touch', _touch);
 
-    GROUP_EXEC  : base.EXEC  << 3,
-    GROUP_WRITE : base.WRITE << 3,
-    GROUP_READ  : base.READ << 3,
+//@include ./src/set
+var _set = require('./src/set');
+exports.set = common.wrap('set', _set);
 
-    OWNER_EXEC  : base.EXEC << 6,
-    OWNER_WRITE : base.WRITE << 6,
-    OWNER_READ  : base.READ << 6,
 
-    // Literal octal numbers are apparently not allowed in "strict" javascript.  Using parseInt is
-    // the preferred way, else a jshint warning is thrown.
-    STICKY      : parseInt('01000', 8),
-    SETGID      : parseInt('02000', 8),
-    SETUID      : parseInt('04000', 8),
-
-    TYPE_MASK   : parseInt('0770000', 8)
-  };
-})({
-  EXEC  : 1,
-  WRITE : 2,
-  READ  : 4
-});
-
-
-//@
-//@ ### chmod(octal_mode || octal_string, file)
-//@ ### chmod(symbolic_mode, file)
-//@
-//@ Available options:
-//@
-//@ + `-v`: output a diagnostic for every file processed//@
-//@ + `-c`: like verbose but report only when a change is made//@
-//@ + `-R`: change files and directories recursively//@
 //@
-//@ Examples:
-//@
-//@ ```javascript
-//@ chmod(755, '/Users/brandon');
-//@ chmod('755', '/Users/brandon'); // same as above
-//@ chmod('u+x', '/Users/brandon');
-//@ ```
-//@
-//@ Alters the permissions of a file or directory by either specifying the
-//@ absolute permissions in octal form or expressing the changes in symbols.
-//@ This command tries to mimic the POSIX behavior as much as possible.
-//@ Notable exceptions:
+//@ ## Non-Unix commands
 //@
-//@ + In symbolic modes, 'a-r' and '-r' are identical.  No consideration is
-//@   given to the umask.
-//@ + There is no "quiet" option since default behavior is to run silent.
-function _chmod(options, mode, filePattern) {
-  if (!filePattern) {
-    if (options.length > 0 && options.charAt(0) === '-') {
-      // Special case where the specified file permissions started with - to subtract perms, which
-      // get picked up by the option parser as command flags.
-      // If we are down by one argument and options starts with -, shift everything over.
-      filePattern = mode;
-      mode = options;
-      options = '';
-    }
-    else {
-      error('You must specify a file.');
-    }
-  }
-
-  options = parseOptions(options, {
-    'R': 'recursive',
-    'c': 'changes',
-    'v': 'verbose'
-  });
-
-  if (typeof filePattern === 'string') {
-    filePattern = [ filePattern ];
-  }
-
-  var files;
-
-  if (options.recursive) {
-    files = [];
-    expand(filePattern).forEach(function addFile(expandedFile) {
-      var stat = fs.lstatSync(expandedFile);
-
-      if (!stat.isSymbolicLink()) {
-        files.push(expandedFile);
-
-        if (stat.isDirectory()) {  // intentionally does not follow symlinks.
-          fs.readdirSync(expandedFile).forEach(function (child) {
-            addFile(expandedFile + '/' + child);
-          });
-        }
-      }
-    });
-  }
-  else {
-    files = expand(filePattern);
-  }
-
-  files.forEach(function innerChmod(file) {
-    file = path.resolve(file);
-    if (!fs.existsSync(file)) {
-      error('File not found: ' + file);
-    }
-
-    // When recursing, don't follow symlinks.
-    if (options.recursive && fs.lstatSync(file).isSymbolicLink()) {
-      return;
-    }
 
-    var perms = fs.statSync(file).mode;
-    var type = perms & PERMS.TYPE_MASK;
+//@include ./src/tempdir
+var _tempDir = require('./src/tempdir');
+exports.tempdir = common.wrap('tempdir', _tempDir);
 
-    var newPerms = perms;
 
-    if (isNaN(parseInt(mode, 8))) {
-      // parse options
-      mode.split(',').forEach(function (symbolicMode) {
-        /*jshint regexdash:true */
-        var pattern = /([ugoa]*)([=\+-])([rwxXst]*)/i;
-        var matches = pattern.exec(symbolicMode);
+//@include ./src/error
+var _error = require('./src/error');
+exports.error = _error;
 
-        if (matches) {
-          var applyTo = matches[1];
-          var operator = matches[2];
-          var change = matches[3];
-
-          var changeOwner = applyTo.indexOf('u') != -1 || applyTo === 'a' || applyTo === '';
-          var changeGroup = applyTo.indexOf('g') != -1 || applyTo === 'a' || applyTo === '';
-          var changeOther = applyTo.indexOf('o') != -1 || applyTo === 'a' || applyTo === '';
-
-          var changeRead   = change.indexOf('r') != -1;
-          var changeWrite  = change.indexOf('w') != -1;
-          var changeExec   = change.indexOf('x') != -1;
-          var changeSticky = change.indexOf('t') != -1;
-          var changeSetuid = change.indexOf('s') != -1;
-
-          var mask = 0;
-          if (changeOwner) {
-            mask |= (changeRead ? PERMS.OWNER_READ : 0) + (changeWrite ? PERMS.OWNER_WRITE : 0) + (changeExec ? PERMS.OWNER_EXEC : 0) + (changeSetuid ? PERMS.SETUID : 0);
-          }
-          if (changeGroup) {
-            mask |= (changeRead ? PERMS.GROUP_READ : 0) + (changeWrite ? PERMS.GROUP_WRITE : 0) + (changeExec ? PERMS.GROUP_EXEC : 0) + (changeSetuid ? PERMS.SETGID : 0);
-          }
-          if (changeOther) {
-            mask |= (changeRead ? PERMS.OTHER_READ : 0) + (changeWrite ? PERMS.OTHER_WRITE : 0) + (changeExec ? PERMS.OTHER_EXEC : 0);
-          }
-
-          // Sticky bit is special - it's not tied to user, group or other.
-          if (changeSticky) {
-            mask |= PERMS.STICKY;
-          }
-
-          switch (operator) {
-            case '+':
-              newPerms |= mask;
-              break;
-
-            case '-':
-              newPerms &= ~mask;
-              break;
-
-            case '=':
-              newPerms = type + mask;
-
-              // According to POSIX, when using = to explicitly set the permissions, setuid and setgid can never be cleared.
-              if (fs.statSync(file).isDirectory()) {
-                newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms;
-              }
-              break;
-          }
-
-          if (options.verbose) {
-            log(file + ' -> ' + newPerms.toString(8));
-          }
-
-          if (perms != newPerms) {
-            if (!options.verbose && options.changes) {
-              log(file + ' -> ' + newPerms.toString(8));
-            }
-            fs.chmodSync(file, newPerms);
-          }
-        }
-        else {
-          error('Invalid symbolic mode change: ' + symbolicMode);
-        }
-      });
-    }
-    else {
-      // they gave us a full number
-      newPerms = type + parseInt(mode, 8);
-
-      // POSIX rules are that setuid and setgid can only be added using numeric form, but not cleared.
-      if (fs.statSync(file).isDirectory()) {
-        newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms;
-      }
-
-      fs.chmodSync(file, newPerms);
-    }
-  });
-}
-exports.chmod = wrap('chmod', _chmod);
 
 
 //@
 //@ ## Configuration
 //@
 
-
-
-exports.config = config;
+exports.config = common.config;
 
 //@
 //@ ### config.silent
 //@ Example:
 //@
 //@ ```javascript
-//@ var silentState = config.silent; // save old silent state
-//@ config.silent = true;
+//@ var sh = require('shelljs');
+//@ var silentState = sh.config.silent; // save old silent state
+//@ sh.config.silent = true;
 //@ /* ... */
-//@ config.silent = silentState; // restore old silent state
+//@ sh.config.silent = silentState; // restore old silent state
 //@ ```
 //@
 //@ Suppresses all command output if `true`, except for `echo()` calls.
@@ -1365,537 +157,28 @@ exports.config = config;
 //@ Example:
 //@
 //@ ```javascript
-//@ config.fatal = true;
+//@ require('shelljs/global');
+//@ config.fatal = true; // or set('-e');
 //@ cp('this_file_does_not_exist', '/dev/null'); // dies here
 //@ /* more commands... */
 //@ ```
 //@
-//@ If `true` the script will die on errors. Default is `false`.
-
-
-
+//@ If `true` the script will die on errors. Default is `false`. This is
+//@ analogous to Bash's `set -e`
 
 //@
-//@ ## Non-Unix commands
+//@ ### config.verbose
+//@ Example:
 //@
-
-
-
-
-
-
+//@ ```javascript
+//@ config.verbose = true; // or set('-v');
+//@ cd('dir/');
+//@ ls('subdir/');
+//@ ```
 //@
-//@ ### tempdir()
-//@ Searches and returns string containing a writeable, platform-dependent temporary directory.
-//@ Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir).
-exports.tempdir = wrap('tempdir', tempDir);
-
-
+//@ Will print each command as follows:
 //@
-//@ ### error()
-//@ Tests if error occurred in the last command. Returns `null` if no error occurred,
-//@ otherwise returns string explaining the error
-exports.error = function() {
-  return state.error;
-};
-
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Auxiliary functions (internal use only)
-//
-
-function log() {
-  if (!config.silent)
-    console.log.apply(this, arguments);
-}
-
-function deprecate(what, msg) {
-  console.log('*** ShellJS.'+what+': This function is deprecated.', msg);
-}
-
-function write(msg) {
-  if (!config.silent)
-    process.stdout.write(msg);
-}
-
-// Shows error message. Throws unless _continue or config.fatal are true
-function error(msg, _continue) {
-  if (state.error === null)
-    state.error = '';
-  state.error += state.currentCmd + ': ' + msg + '\n';
-
-  log(state.error);
-
-  if (config.fatal)
-    process.exit(1);
-
-  if (!_continue)
-    throw '';
-}
-
-// Returns {'alice': true, 'bob': false} when passed:
-//   parseOptions('-a', {'a':'alice', 'b':'bob'});
-function parseOptions(str, map) {
-  if (!map)
-    error('parseOptions() internal error: no map given');
-
-  // All options are false by default
-  var options = {};
-  for (var letter in map)
-    options[map[letter]] = false;
-
-  if (!str)
-    return options; // defaults
-
-  if (typeof str !== 'string')
-    error('parseOptions() internal error: wrong str');
-
-  // e.g. match[1] = 'Rf' for str = '-Rf'
-  var match = str.match(/^\-(.+)/);
-  if (!match)
-    return options;
-
-  // e.g. chars = ['R', 'f']
-  var chars = match[1].split('');
-
-  chars.forEach(function(c) {
-    if (c in map)
-      options[map[c]] = true;
-    else
-      error('option not recognized: '+c);
-  });
-
-  return options;
-}
-
-// Common wrapper for all Unix-like commands
-function wrap(cmd, fn, options) {
-  return function() {
-    var retValue = null;
-
-    state.currentCmd = cmd;
-    state.error = null;
-
-    try {
-      var args = [].slice.call(arguments, 0);
-
-      if (options && options.notUnix) {
-        retValue = fn.apply(this, args);
-      } else {
-        if (args.length === 0 || typeof args[0] !== 'string' || args[0][0] !== '-')
-          args.unshift(''); // only add dummy option if '-option' not already present
-        retValue = fn.apply(this, args);
-      }
-    } catch (e) {
-      if (!state.error) {
-        // If state.error hasn't been set it's an error thrown by Node, not us - probably a bug...
-        console.log('shell.js: internal error');
-        console.log(e.stack || e);
-        process.exit(1);
-      }
-      if (config.fatal)
-        throw e;
-    }
-
-    state.currentCmd = 'shell.js';
-    return retValue;
-  };
-} // wrap
-
-// Buffered file copy, synchronous
-// (Using readFileSync() + writeFileSync() could easily cause a memory overflow
-//  with large files)
-function copyFileSync(srcFile, destFile) {
-  if (!fs.existsSync(srcFile))
-    error('copyFileSync: no such file or directory: ' + srcFile);
-
-  var BUF_LENGTH = 64*1024,
-      buf = new Buffer(BUF_LENGTH),
-      bytesRead = BUF_LENGTH,
-      pos = 0,
-      fdr = null,
-      fdw = null;
-
-  try {
-    fdr = fs.openSync(srcFile, 'r');
-  } catch(e) {
-    error('copyFileSync: could not read src file ('+srcFile+')');
-  }
-
-  try {
-    fdw = fs.openSync(destFile, 'w');
-  } catch(e) {
-    error('copyFileSync: could not write to dest file (code='+e.code+'):'+destFile);
-  }
-
-  while (bytesRead === BUF_LENGTH) {
-    bytesRead = fs.readSync(fdr, buf, 0, BUF_LENGTH, pos);
-    fs.writeSync(fdw, buf, 0, bytesRead);
-    pos += bytesRead;
-  }
-
-  fs.closeSync(fdr);
-  fs.closeSync(fdw);
-}
-
-// Recursively copies 'sourceDir' into 'destDir'
-// Adapted from https://github.com/ryanmcgrath/wrench-js
-//
-// Copyright (c) 2010 Ryan McGrath
-// Copyright (c) 2012 Artur Adib
-//
-// Licensed under the MIT License
-// http://www.opensource.org/licenses/mit-license.php
-function cpdirSyncRecursive(sourceDir, destDir, opts) {
-  if (!opts) opts = {};
-
-  /* Create the directory where all our junk is moving to; read the mode of the source directory and mirror it */
-  var checkDir = fs.statSync(sourceDir);
-  try {
-    fs.mkdirSync(destDir, checkDir.mode);
-  } catch (e) {
-    //if the directory already exists, that's okay
-    if (e.code !== 'EEXIST') throw e;
-  }
-
-  var files = fs.readdirSync(sourceDir);
-
-  for(var i = 0; i < files.length; i++) {
-    var currFile = fs.lstatSync(sourceDir + "/" + files[i]);
-
-    if (currFile.isDirectory()) {
-      /* recursion this thing right on back. */
-      cpdirSyncRecursive(sourceDir + "/" + files[i], destDir + "/" + files[i], opts);
-    } else if (currFile.isSymbolicLink()) {
-      var symlinkFull = fs.readlinkSync(sourceDir + "/" + files[i]);
-      fs.symlinkSync(symlinkFull, destDir + "/" + files[i]);
-    } else {
-      /* At this point, we've hit a file actually worth copying... so copy it on over. */
-      if (fs.existsSync(destDir + "/" + files[i]) && !opts.force) {
-        log('skipping existing file: ' + files[i]);
-      } else {
-        copyFileSync(sourceDir + "/" + files[i], destDir + "/" + files[i]);
-      }
-    }
-
-  } // for files
-} // cpdirSyncRecursive
-
-// Recursively removes 'dir'
-// Adapted from https://github.com/ryanmcgrath/wrench-js
-//
-// Copyright (c) 2010 Ryan McGrath
-// Copyright (c) 2012 Artur Adib
-//
-// Licensed under the MIT License
-// http://www.opensource.org/licenses/mit-license.php
-function rmdirSyncRecursive(dir, force) {
-  var files;
-
-  files = fs.readdirSync(dir);
-
-  // Loop through and delete everything in the sub-tree after checking it
-  for(var i = 0; i < files.length; i++) {
-    var file = dir + "/" + files[i],
-        currFile = fs.lstatSync(file);
-
-    if(currFile.isDirectory()) { // Recursive function back to the beginning
-      rmdirSyncRecursive(file, force);
-    }
-
-    else if(currFile.isSymbolicLink()) { // Unlink symlinks
-      if (force || isWriteable(file)) {
-        try {
-          _unlinkSync(file);
-        } catch (e) {
-          error('could not remove file (code '+e.code+'): ' + file, true);
-        }
-      }
-    }
-
-    else // Assume it's a file - perhaps a try/catch belongs here?
-      if (force || isWriteable(file)) {
-        try {
-          _unlinkSync(file);
-        } catch (e) {
-          error('could not remove file (code '+e.code+'): ' + file, true);
-        }
-      }
-  }
-
-  // Now that we know everything in the sub-tree has been deleted, we can delete the main directory.
-  // Huzzah for the shopkeep.
-
-  var result;
-  try {
-    result = fs.rmdirSync(dir);
-  } catch(e) {
-    error('could not remove directory (code '+e.code+'): ' + dir, true);
-  }
-
-  return result;
-} // rmdirSyncRecursive
-
-// Recursively creates 'dir'
-function mkdirSyncRecursive(dir) {
-  var baseDir = path.dirname(dir);
-
-  // Base dir exists, no recursion necessary
-  if (fs.existsSync(baseDir)) {
-    fs.mkdirSync(dir, parseInt('0777', 8));
-    return;
-  }
-
-  // Base dir does not exist, go recursive
-  mkdirSyncRecursive(baseDir);
-
-  // Base dir created, can create dir
-  fs.mkdirSync(dir, parseInt('0777', 8));
-}
-
-// e.g. 'shelljs_a5f185d0443ca...'
-function randomFileName() {
-  function randomHash(count) {
-    if (count === 1)
-      return parseInt(16*Math.random(), 10).toString(16);
-    else {
-      var hash = '';
-      for (var i=0; i<count; i++)
-        hash += randomHash(1);
-      return hash;
-    }
-  }
-
-  return 'shelljs_'+randomHash(20);
-}
-
-// Returns false if 'dir' is not a writeable directory, 'dir' otherwise
-function writeableDir(dir) {
-  if (!dir || !fs.existsSync(dir))
-    return false;
-
-  if (!fs.statSync(dir).isDirectory())
-    return false;
-
-  var testFile = dir+'/'+randomFileName();
-  try {
-    fs.writeFileSync(testFile, ' ');
-    _unlinkSync(testFile);
-    return dir;
-  } catch (e) {
-    return false;
-  }
-}
-
-// Cross-platform method for getting an available temporary directory.
-// Follows the algorithm of Python's tempfile.tempdir
-// http://docs.python.org/library/tempfile.html#tempfile.tempdir
-function tempDir() {
-  if (state.tempDir)
-    return state.tempDir; // from cache
-
-  state.tempDir = writeableDir(process.env['TMPDIR']) ||
-                  writeableDir(process.env['TEMP']) ||
-                  writeableDir(process.env['TMP']) ||
-                  writeableDir(process.env['Wimp$ScrapDir']) || // RiscOS
-                  writeableDir('C:\\TEMP') || // Windows
-                  writeableDir('C:\\TMP') || // Windows
-                  writeableDir('\\TEMP') || // Windows
-                  writeableDir('\\TMP') || // Windows
-                  writeableDir('/tmp') ||
-                  writeableDir('/var/tmp') ||
-                  writeableDir('/usr/tmp') ||
-                  writeableDir('.'); // last resort
-
-  return state.tempDir;
-}
-
-// Wrapper around exec() to enable echoing output to console in real time
-function execAsync(cmd, opts, callback) {
-  var output = '';
-
-  var options = extend({
-    silent: config.silent
-  }, opts);
-
-  var c = child.exec(cmd, {env: process.env, maxBuffer: 20*1024*1024}, function(err) {
-    if (callback)
-      callback(err ? err.code : 0, output);
-  });
-
-  c.stdout.on('data', function(data) {
-    output += data;
-    if (!options.silent)
-      process.stdout.write(data);
-  });
-
-  c.stderr.on('data', function(data) {
-    output += data;
-    if (!options.silent)
-      process.stdout.write(data);
-  });
-
-  return c;
-}
-
-// Hack to run child_process.exec() synchronously (sync avoids callback hell)
-// Uses a custom wait loop that checks for a flag file, created when the child process is done.
-// (Can't do a wait loop that checks for internal Node variables/messages as
-// Node is single-threaded; callbacks and other internal state changes are done in the
-// event loop).
-function execSync(cmd, opts) {
-  var stdoutFile = path.resolve(tempDir()+'/'+randomFileName()),
-      codeFile = path.resolve(tempDir()+'/'+randomFileName()),
-      scriptFile = path.resolve(tempDir()+'/'+randomFileName()),
-      sleepFile = path.resolve(tempDir()+'/'+randomFileName());
-
-  var options = extend({
-    silent: config.silent
-  }, opts);
-
-  var previousStdoutContent = '';
-  // Echoes stdout changes from running process, if not silent
-  function updateStdout() {
-    if (options.silent || !fs.existsSync(stdoutFile))
-      return;
-
-    var stdoutContent = fs.readFileSync(stdoutFile, 'utf8');
-    // No changes since last time?
-    if (stdoutContent.length <= previousStdoutContent.length)
-      return;
-
-    process.stdout.write(stdoutContent.substr(previousStdoutContent.length));
-    previousStdoutContent = stdoutContent;
-  }
-
-  function escape(str) {
-    return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
-  }
-
-  cmd += ' > '+stdoutFile+' 2>&1'; // works on both win/unix
-
-  var script =
-   "var child = require('child_process')," +
-   "     fs = require('fs');" +
-   "child.exec('"+escape(cmd)+"', {env: process.env, maxBuffer: 20*1024*1024}, function(err) {" +
-   "  fs.writeFileSync('"+escape(codeFile)+"', err ? err.code.toString() : '0');" +
-   "});";
-
-  if (fs.existsSync(scriptFile)) _unlinkSync(scriptFile);
-  if (fs.existsSync(stdoutFile)) _unlinkSync(stdoutFile);
-  if (fs.existsSync(codeFile)) _unlinkSync(codeFile);
-
-  fs.writeFileSync(scriptFile, script);
-  child.exec('"'+process.execPath+'" '+scriptFile, {
-    env: process.env,
-    cwd: exports.pwd(),
-    maxBuffer: 20*1024*1024
-  });
-
-  // The wait loop
-  // sleepFile is used as a dummy I/O op to mitigate unnecessary CPU usage
-  // (tried many I/O sync ops, writeFileSync() seems to be only one that is effective in reducing
-  // CPU usage, though apparently not so much on Windows)
-  while (!fs.existsSync(codeFile)) { updateStdout(); fs.writeFileSync(sleepFile, 'a'); }
-  while (!fs.existsSync(stdoutFile)) { updateStdout(); fs.writeFileSync(sleepFile, 'a'); }
-
-  // At this point codeFile exists, but it's not necessarily flushed yet.
-  // Keep reading it until it is.
-  var code = parseInt('', 10);
-  while (isNaN(code)) {
-    code = parseInt(fs.readFileSync(codeFile, 'utf8'), 10);
-  }
-
-  var stdout = fs.readFileSync(stdoutFile, 'utf8');
-
-  // No biggie if we can't erase the files now -- they're in a temp dir anyway
-  try { _unlinkSync(scriptFile); } catch(e) {}
-  try { _unlinkSync(stdoutFile); } catch(e) {}
-  try { _unlinkSync(codeFile); } catch(e) {}
-  try { _unlinkSync(sleepFile); } catch(e) {}
-
-  // True if successful, false if not
-  var obj = {
-    code: code,
-    output: stdout
-  };
-  return obj;
-} // execSync()
-
-// Expands wildcards with matching file names. For a given array of file names 'list', returns
-// another array containing all file names as per ls(list[i]).
-// For example:
-//   expand(['file*.js']) = ['file1.js', 'file2.js', ...]
-//   (if the files 'file1.js', 'file2.js', etc, exist in the current dir)
-function expand(list) {
-  var expanded = [];
-  list.forEach(function(listEl) {
-    // Wildcard present?
-    if (listEl.search(/\*/) > -1) {
-      _ls('', listEl).forEach(function(file) {
-        expanded.push(file);
-      });
-    } else {
-      expanded.push(listEl);
-    }
-  });
-  return expanded;
-}
-
-// Cross-platform method for splitting environment PATH variables
-function splitPath(p) {
-  if (!p)
-    return [];
-
-  if (platform === 'win')
-    return p.split(';');
-  else
-    return p.split(':');
-}
-
-// extend(target_obj, source_obj1 [, source_obj2 ...])
-// Shallow extend, e.g.:
-//    extend({A:1}, {b:2}, {c:3}) returns {A:1, b:2, c:3}
-function extend(target) {
-  var sources = [].slice.call(arguments, 1);
-  sources.forEach(function(source) {
-    for (var key in source)
-      target[key] = source[key];
-  });
-
-  return target;
-}
-
-// Normalizes _unlinkSync() across platforms to match Unix behavior, i.e.
-// file can be unlinked even if it's read-only, see joyent/node#3006
-function _unlinkSync(file) {
-  try {
-    fs.unlinkSync(file);
-  } catch(e) {
-    // Try to override file permission
-    if (e.code === 'EPERM') {
-      fs.chmodSync(file, '0666');
-      fs.unlinkSync(file);
-    } else {
-      throw e;
-    }
-  }
-}
-
-// Hack to determine if file has write permissions for current user
-// Avoids having to check user, group, etc, but it's probably slow
-function isWriteable(file) {
-  var writePermission = true;
-  try {
-    var __fd = fs.openSync(file, 'a');
-    fs.closeSync(__fd);
-  } catch(e) {
-    writePermission = false;
-  }
-
-  return writePermission;
-}
+//@ ```
+//@ cd dir/
+//@ ls subdir/
+//@ ```

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/cat.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/cat.js b/node_modules/shelljs/src/cat.js
new file mode 100644
index 0000000..5840b4e
--- /dev/null
+++ b/node_modules/shelljs/src/cat.js
@@ -0,0 +1,40 @@
+var common = require('./common');
+var fs = require('fs');
+
+//@
+//@ ### cat(file [, file ...])
+//@ ### cat(file_array)
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ var str = cat('file*.txt');
+//@ var str = cat('file1', 'file2');
+//@ var str = cat(['file1', 'file2']); // same as above
+//@ ```
+//@
+//@ Returns a string containing the given file, or a concatenated string
+//@ containing the files if more than one file is given (a new line character is
+//@ introduced between each file). Wildcard `*` accepted.
+function _cat(options, files) {
+  var cat = '';
+
+  if (!files)
+    common.error('no paths given');
+
+  if (typeof files === 'string')
+    files = [].slice.call(arguments, 1);
+  // if it's array leave it as it is
+
+  files = common.expand(files);
+
+  files.forEach(function(file) {
+    if (!fs.existsSync(file))
+      common.error('no such file or directory: ' + file);
+
+    cat += fs.readFileSync(file, 'utf8');
+  });
+
+  return common.ShellString(cat);
+}
+module.exports = _cat;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/cd.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/cd.js b/node_modules/shelljs/src/cd.js
new file mode 100644
index 0000000..b7b9931
--- /dev/null
+++ b/node_modules/shelljs/src/cd.js
@@ -0,0 +1,28 @@
+var fs = require('fs');
+var common = require('./common');
+
+//@
+//@ ### cd([dir])
+//@ Changes to directory `dir` for the duration of the script. Changes to home
+//@ directory if no argument is supplied.
+function _cd(options, dir) {
+  if (!dir)
+    dir = common.getUserHome();
+
+  if (dir === '-') {
+    if (!common.state.previousDir)
+      common.error('could not find previous directory');
+    else
+      dir = common.state.previousDir;
+  }
+
+  if (!fs.existsSync(dir))
+    common.error('no such file or directory: ' + dir);
+
+  if (!fs.statSync(dir).isDirectory())
+    common.error('not a directory: ' + dir);
+
+  common.state.previousDir = process.cwd();
+  process.chdir(dir);
+}
+module.exports = _cd;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/chmod.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/chmod.js b/node_modules/shelljs/src/chmod.js
new file mode 100644
index 0000000..6c6de10
--- /dev/null
+++ b/node_modules/shelljs/src/chmod.js
@@ -0,0 +1,215 @@
+var common = require('./common');
+var fs = require('fs');
+var path = require('path');
+
+var PERMS = (function (base) {
+  return {
+    OTHER_EXEC  : base.EXEC,
+    OTHER_WRITE : base.WRITE,
+    OTHER_READ  : base.READ,
+
+    GROUP_EXEC  : base.EXEC  << 3,
+    GROUP_WRITE : base.WRITE << 3,
+    GROUP_READ  : base.READ << 3,
+
+    OWNER_EXEC  : base.EXEC << 6,
+    OWNER_WRITE : base.WRITE << 6,
+    OWNER_READ  : base.READ << 6,
+
+    // Literal octal numbers are apparently not allowed in "strict" javascript.  Using parseInt is
+    // the preferred way, else a jshint warning is thrown.
+    STICKY      : parseInt('01000', 8),
+    SETGID      : parseInt('02000', 8),
+    SETUID      : parseInt('04000', 8),
+
+    TYPE_MASK   : parseInt('0770000', 8)
+  };
+})({
+  EXEC  : 1,
+  WRITE : 2,
+  READ  : 4
+});
+
+//@
+//@ ### chmod(octal_mode || octal_string, file)
+//@ ### chmod(symbolic_mode, file)
+//@
+//@ Available options:
+//@
+//@ + `-v`: output a diagnostic for every file processed//@
+//@ + `-c`: like verbose but report only when a change is made//@
+//@ + `-R`: change files and directories recursively//@
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ chmod(755, '/Users/brandon');
+//@ chmod('755', '/Users/brandon'); // same as above
+//@ chmod('u+x', '/Users/brandon');
+//@ ```
+//@
+//@ Alters the permissions of a file or directory by either specifying the
+//@ absolute permissions in octal form or expressing the changes in symbols.
+//@ This command tries to mimic the POSIX behavior as much as possible.
+//@ Notable exceptions:
+//@
+//@ + In symbolic modes, 'a-r' and '-r' are identical.  No consideration is
+//@   given to the umask.
+//@ + There is no "quiet" option since default behavior is to run silent.
+function _chmod(options, mode, filePattern) {
+  if (!filePattern) {
+    if (options.length > 0 && options.charAt(0) === '-') {
+      // Special case where the specified file permissions started with - to subtract perms, which
+      // get picked up by the option parser as command flags.
+      // If we are down by one argument and options starts with -, shift everything over.
+      filePattern = mode;
+      mode = options;
+      options = '';
+    }
+    else {
+      common.error('You must specify a file.');
+    }
+  }
+
+  options = common.parseOptions(options, {
+    'R': 'recursive',
+    'c': 'changes',
+    'v': 'verbose'
+  });
+
+  if (typeof filePattern === 'string') {
+    filePattern = [ filePattern ];
+  }
+
+  var files;
+
+  if (options.recursive) {
+    files = [];
+    common.expand(filePattern).forEach(function addFile(expandedFile) {
+      var stat = fs.lstatSync(expandedFile);
+
+      if (!stat.isSymbolicLink()) {
+        files.push(expandedFile);
+
+        if (stat.isDirectory()) {  // intentionally does not follow symlinks.
+          fs.readdirSync(expandedFile).forEach(function (child) {
+            addFile(expandedFile + '/' + child);
+          });
+        }
+      }
+    });
+  }
+  else {
+    files = common.expand(filePattern);
+  }
+
+  files.forEach(function innerChmod(file) {
+    file = path.resolve(file);
+    if (!fs.existsSync(file)) {
+      common.error('File not found: ' + file);
+    }
+
+    // When recursing, don't follow symlinks.
+    if (options.recursive && fs.lstatSync(file).isSymbolicLink()) {
+      return;
+    }
+
+    var stat = fs.statSync(file);
+    var isDir = stat.isDirectory();
+    var perms = stat.mode;
+    var type = perms & PERMS.TYPE_MASK;
+
+    var newPerms = perms;
+
+    if (isNaN(parseInt(mode, 8))) {
+      // parse options
+      mode.split(',').forEach(function (symbolicMode) {
+        /*jshint regexdash:true */
+        var pattern = /([ugoa]*)([=\+-])([rwxXst]*)/i;
+        var matches = pattern.exec(symbolicMode);
+
+        if (matches) {
+          var applyTo = matches[1];
+          var operator = matches[2];
+          var change = matches[3];
+
+          var changeOwner = applyTo.indexOf('u') != -1 || applyTo === 'a' || applyTo === '';
+          var changeGroup = applyTo.indexOf('g') != -1 || applyTo === 'a' || applyTo === '';
+          var changeOther = applyTo.indexOf('o') != -1 || applyTo === 'a' || applyTo === '';
+
+          var changeRead    = change.indexOf('r') != -1;
+          var changeWrite   = change.indexOf('w') != -1;
+          var changeExec    = change.indexOf('x') != -1;
+          var changeExecDir = change.indexOf('X') != -1;
+          var changeSticky  = change.indexOf('t') != -1;
+          var changeSetuid  = change.indexOf('s') != -1;
+
+          if (changeExecDir && isDir)
+            changeExec = true;
+
+          var mask = 0;
+          if (changeOwner) {
+            mask |= (changeRead ? PERMS.OWNER_READ : 0) + (changeWrite ? PERMS.OWNER_WRITE : 0) + (changeExec ? PERMS.OWNER_EXEC : 0) + (changeSetuid ? PERMS.SETUID : 0);
+          }
+          if (changeGroup) {
+            mask |= (changeRead ? PERMS.GROUP_READ : 0) + (changeWrite ? PERMS.GROUP_WRITE : 0) + (changeExec ? PERMS.GROUP_EXEC : 0) + (changeSetuid ? PERMS.SETGID : 0);
+          }
+          if (changeOther) {
+            mask |= (changeRead ? PERMS.OTHER_READ : 0) + (changeWrite ? PERMS.OTHER_WRITE : 0) + (changeExec ? PERMS.OTHER_EXEC : 0);
+          }
+
+          // Sticky bit is special - it's not tied to user, group or other.
+          if (changeSticky) {
+            mask |= PERMS.STICKY;
+          }
+
+          switch (operator) {
+            case '+':
+              newPerms |= mask;
+              break;
+
+            case '-':
+              newPerms &= ~mask;
+              break;
+
+            case '=':
+              newPerms = type + mask;
+
+              // According to POSIX, when using = to explicitly set the permissions, setuid and setgid can never be cleared.
+              if (fs.statSync(file).isDirectory()) {
+                newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms;
+              }
+              break;
+          }
+
+          if (options.verbose) {
+            console.log(file + ' -> ' + newPerms.toString(8));
+          }
+
+          if (perms != newPerms) {
+            if (!options.verbose && options.changes) {
+              console.log(file + ' -> ' + newPerms.toString(8));
+            }
+            fs.chmodSync(file, newPerms);
+            perms = newPerms; // for the next round of changes!
+          }
+        }
+        else {
+          common.error('Invalid symbolic mode change: ' + symbolicMode);
+        }
+      });
+    }
+    else {
+      // they gave us a full number
+      newPerms = type + parseInt(mode, 8);
+
+      // POSIX rules are that setuid and setgid can only be added using numeric form, but not cleared.
+      if (fs.statSync(file).isDirectory()) {
+        newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms;
+      }
+
+      fs.chmodSync(file, newPerms);
+    }
+  });
+}
+module.exports = _chmod;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/common.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/common.js b/node_modules/shelljs/src/common.js
new file mode 100644
index 0000000..33198bd
--- /dev/null
+++ b/node_modules/shelljs/src/common.js
@@ -0,0 +1,257 @@
+var os = require('os');
+var fs = require('fs');
+var _ls = require('./ls');
+
+// Module globals
+var config = {
+  silent: false,
+  fatal: false,
+  verbose: false,
+};
+exports.config = config;
+
+var state = {
+  error: null,
+  currentCmd: 'shell.js',
+  previousDir: null,
+  tempDir: null
+};
+exports.state = state;
+
+var platform = os.type().match(/^Win/) ? 'win' : 'unix';
+exports.platform = platform;
+
+function log() {
+  if (!config.silent)
+    console.error.apply(console, arguments);
+}
+exports.log = log;
+
+// Shows error message. Throws unless _continue or config.fatal are true
+function error(msg, _continue) {
+  if (state.error === null)
+    state.error = '';
+  var log_entry = state.currentCmd + ': ' + msg;
+  if (state.error === '')
+    state.error = log_entry;
+  else
+    state.error += '\n' + log_entry;
+
+  if (msg.length > 0)
+    log(log_entry);
+
+  if (config.fatal)
+    process.exit(1);
+
+  if (!_continue)
+    throw '';
+}
+exports.error = error;
+
+// In the future, when Proxies are default, we can add methods like `.to()` to primitive strings.
+// For now, this is a dummy function to bookmark places we need such strings
+function ShellString(str) {
+  return str;
+}
+exports.ShellString = ShellString;
+
+// Return the home directory in a platform-agnostic way, with consideration for
+// older versions of node
+function getUserHome() {
+  var result;
+  if (os.homedir)
+    result = os.homedir(); // node 3+
+  else
+    result = process.env[(process.platform === 'win32') ? 'USERPROFILE' : 'HOME'];
+  return result;
+}
+exports.getUserHome = getUserHome;
+
+// Returns {'alice': true, 'bob': false} when passed a string and dictionary as follows:
+//   parseOptions('-a', {'a':'alice', 'b':'bob'});
+// Returns {'reference': 'string-value', 'bob': false} when passed two dictionaries of the form:
+//   parseOptions({'-r': 'string-value'}, {'r':'reference', 'b':'bob'});
+function parseOptions(opt, map) {
+  if (!map)
+    error('parseOptions() internal error: no map given');
+
+  // All options are false by default
+  var options = {};
+  for (var letter in map) {
+    if (map[letter][0] !== '!')
+      options[map[letter]] = false;
+  }
+
+  if (!opt)
+    return options; // defaults
+
+  var optionName;
+  if (typeof opt === 'string') {
+    if (opt[0] !== '-')
+      return options;
+
+    // e.g. chars = ['R', 'f']
+    var chars = opt.slice(1).split('');
+
+    chars.forEach(function(c) {
+      if (c in map) {
+        optionName = map[c];
+        if (optionName[0] === '!')
+          options[optionName.slice(1, optionName.length-1)] = false;
+        else
+          options[optionName] = true;
+      } else {
+        error('option not recognized: '+c);
+      }
+    });
+  } else if (typeof opt === 'object') {
+    for (var key in opt) {
+      // key is a string of the form '-r', '-d', etc.
+      var c = key[1];
+      if (c in map) {
+        optionName = map[c];
+        options[optionName] = opt[key]; // assign the given value
+      } else {
+        error('option not recognized: '+c);
+      }
+    }
+  } else {
+    error('options must be strings or key-value pairs');
+  }
+  return options;
+}
+exports.parseOptions = parseOptions;
+
+// Expands wildcards with matching (ie. existing) file names.
+// For example:
+//   expand(['file*.js']) = ['file1.js', 'file2.js', ...]
+//   (if the files 'file1.js', 'file2.js', etc, exist in the current dir)
+function expand(list) {
+  var expanded = [];
+  list.forEach(function(listEl) {
+    // Wildcard present on directory names ?
+    if(listEl.search(/\*[^\/]*\//) > -1 || listEl.search(/\*\*[^\/]*\//) > -1) {
+      var match = listEl.match(/^([^*]+\/|)(.*)/);
+      var root = match[1];
+      var rest = match[2];
+      var restRegex = rest.replace(/\*\*/g, ".*").replace(/\*/g, "[^\\/]*");
+      restRegex = new RegExp(restRegex);
+
+      _ls('-R', root).filter(function (e) {
+        return restRegex.test(e);
+      }).forEach(function(file) {
+        expanded.push(file);
+      });
+    }
+    // Wildcard present on file names ?
+    else if (listEl.search(/\*/) > -1) {
+      _ls('', listEl).forEach(function(file) {
+        expanded.push(file);
+      });
+    } else {
+      expanded.push(listEl);
+    }
+  });
+  return expanded;
+}
+exports.expand = expand;
+
+// Normalizes _unlinkSync() across platforms to match Unix behavior, i.e.
+// file can be unlinked even if it's read-only, see https://github.com/joyent/node/issues/3006
+function unlinkSync(file) {
+  try {
+    fs.unlinkSync(file);
+  } catch(e) {
+    // Try to override file permission
+    if (e.code === 'EPERM') {
+      fs.chmodSync(file, '0666');
+      fs.unlinkSync(file);
+    } else {
+      throw e;
+    }
+  }
+}
+exports.unlinkSync = unlinkSync;
+
+// e.g. 'shelljs_a5f185d0443ca...'
+function randomFileName() {
+  function randomHash(count) {
+    if (count === 1)
+      return parseInt(16*Math.random(), 10).toString(16);
+    else {
+      var hash = '';
+      for (var i=0; i<count; i++)
+        hash += randomHash(1);
+      return hash;
+    }
+  }
+
+  return 'shelljs_'+randomHash(20);
+}
+exports.randomFileName = randomFileName;
+
+// extend(target_obj, source_obj1 [, source_obj2 ...])
+// Shallow extend, e.g.:
+//    extend({A:1}, {b:2}, {c:3}) returns {A:1, b:2, c:3}
+function extend(target) {
+  var sources = [].slice.call(arguments, 1);
+  sources.forEach(function(source) {
+    for (var key in source)
+      target[key] = source[key];
+  });
+
+  return target;
+}
+exports.extend = extend;
+
+// Common wrapper for all Unix-like commands
+function wrap(cmd, fn, options) {
+  return function() {
+    var retValue = null;
+
+    state.currentCmd = cmd;
+    state.error = null;
+
+    try {
+      var args = [].slice.call(arguments, 0);
+
+      if (config.verbose) {
+        args.unshift(cmd);
+        console.log.apply(console, args);
+        args.shift();
+      }
+
+      if (options && options.notUnix) {
+        retValue = fn.apply(this, args);
+      } else {
+        if (typeof args[0] === 'object' && args[0].constructor.name === 'Object') {
+          args = args; // object count as options
+        } else if (args.length === 0 || typeof args[0] !== 'string' || args[0].length <= 1 || args[0][0] !== '-') {
+          args.unshift(''); // only add dummy option if '-option' not already present
+        }
+        // Expand the '~' if appropriate
+        var homeDir = getUserHome();
+        args = args.map(function(arg) {
+          if (typeof arg === 'string' && arg.slice(0, 2) === '~/' || arg === '~')
+            return arg.replace(/^~/, homeDir);
+          else
+            return arg;
+        });
+        retValue = fn.apply(this, args);
+      }
+    } catch (e) {
+      if (!state.error) {
+        // If state.error hasn't been set it's an error thrown by Node, not us - probably a bug...
+        console.log('shell.js: internal error');
+        console.log(e.stack || e);
+        process.exit(1);
+      }
+      if (config.fatal)
+        throw e;
+    }
+
+    state.currentCmd = 'shell.js';
+    return retValue;
+  };
+} // wrap
+exports.wrap = wrap;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/cp.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/cp.js b/node_modules/shelljs/src/cp.js
new file mode 100644
index 0000000..54404ef
--- /dev/null
+++ b/node_modules/shelljs/src/cp.js
@@ -0,0 +1,210 @@
+var fs = require('fs');
+var path = require('path');
+var common = require('./common');
+var os = require('os');
+
+// Buffered file copy, synchronous
+// (Using readFileSync() + writeFileSync() could easily cause a memory overflow
+//  with large files)
+function copyFileSync(srcFile, destFile) {
+  if (!fs.existsSync(srcFile))
+    common.error('copyFileSync: no such file or directory: ' + srcFile);
+
+  var BUF_LENGTH = 64*1024,
+      buf = new Buffer(BUF_LENGTH),
+      bytesRead = BUF_LENGTH,
+      pos = 0,
+      fdr = null,
+      fdw = null;
+
+  try {
+    fdr = fs.openSync(srcFile, 'r');
+  } catch(e) {
+    common.error('copyFileSync: could not read src file ('+srcFile+')');
+  }
+
+  try {
+    fdw = fs.openSync(destFile, 'w');
+  } catch(e) {
+    common.error('copyFileSync: could not write to dest file (code='+e.code+'):'+destFile);
+  }
+
+  while (bytesRead === BUF_LENGTH) {
+    bytesRead = fs.readSync(fdr, buf, 0, BUF_LENGTH, pos);
+    fs.writeSync(fdw, buf, 0, bytesRead);
+    pos += bytesRead;
+  }
+
+  fs.closeSync(fdr);
+  fs.closeSync(fdw);
+
+  fs.chmodSync(destFile, fs.statSync(srcFile).mode);
+}
+
+// Recursively copies 'sourceDir' into 'destDir'
+// Adapted from https://github.com/ryanmcgrath/wrench-js
+//
+// Copyright (c) 2010 Ryan McGrath
+// Copyright (c) 2012 Artur Adib
+//
+// Licensed under the MIT License
+// http://www.opensource.org/licenses/mit-license.php
+function cpdirSyncRecursive(sourceDir, destDir, opts) {
+  if (!opts) opts = {};
+
+  /* Create the directory where all our junk is moving to; read the mode of the source directory and mirror it */
+  var checkDir = fs.statSync(sourceDir);
+  try {
+    fs.mkdirSync(destDir, checkDir.mode);
+  } catch (e) {
+    //if the directory already exists, that's okay
+    if (e.code !== 'EEXIST') throw e;
+  }
+
+  var files = fs.readdirSync(sourceDir);
+
+  for (var i = 0; i < files.length; i++) {
+    var srcFile = sourceDir + "/" + files[i];
+    var destFile = destDir + "/" + files[i];
+    var srcFileStat = fs.lstatSync(srcFile);
+
+    if (srcFileStat.isDirectory()) {
+      /* recursion this thing right on back. */
+      cpdirSyncRecursive(srcFile, destFile, opts);
+    } else if (srcFileStat.isSymbolicLink()) {
+      var symlinkFull = fs.readlinkSync(srcFile);
+      fs.symlinkSync(symlinkFull, destFile, os.platform() === "win32" ? "junction" : null);
+    } else {
+      /* At this point, we've hit a file actually worth copying... so copy it on over. */
+      if (fs.existsSync(destFile) && opts.no_force) {
+        common.log('skipping existing file: ' + files[i]);
+      } else {
+        copyFileSync(srcFile, destFile);
+      }
+    }
+
+  } // for files
+} // cpdirSyncRecursive
+
+
+//@
+//@ ### cp([options,] source [, source ...], dest)
+//@ ### cp([options,] source_array, dest)
+//@ Available options:
+//@
+//@ + `-f`: force (default behavior)
+//@ + `-n`: no-clobber
+//@ + `-r, -R`: recursive
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ cp('file1', 'dir1');
+//@ cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp');
+//@ cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above
+//@ ```
+//@
+//@ Copies files. The wildcard `*` is accepted.
+function _cp(options, sources, dest) {
+  options = common.parseOptions(options, {
+    'f': '!no_force',
+    'n': 'no_force',
+    'R': 'recursive',
+    'r': 'recursive'
+  });
+
+  // Get sources, dest
+  if (arguments.length < 3) {
+    common.error('missing <source> and/or <dest>');
+  } else if (arguments.length > 3) {
+    sources = [].slice.call(arguments, 1, arguments.length - 1);
+    dest = arguments[arguments.length - 1];
+  } else if (typeof sources === 'string') {
+    sources = [sources];
+  } else if ('length' in sources) {
+    sources = sources; // no-op for array
+  } else {
+    common.error('invalid arguments');
+  }
+
+  var exists = fs.existsSync(dest),
+      stats = exists && fs.statSync(dest);
+
+  // Dest is not existing dir, but multiple sources given
+  if ((!exists || !stats.isDirectory()) && sources.length > 1)
+    common.error('dest is not a directory (too many sources)');
+
+  // Dest is an existing file, but no -f given
+  if (exists && stats.isFile() && options.no_force)
+    common.error('dest file already exists: ' + dest);
+
+  if (options.recursive) {
+    // Recursive allows the shortcut syntax "sourcedir/" for "sourcedir/*"
+    // (see Github issue #15)
+    sources.forEach(function(src, i) {
+      if (src[src.length - 1] === '/') {
+        sources[i] += '*';
+      // If src is a directory and dest doesn't exist, 'cp -r src dest' should copy src/* into dest
+      } else if (fs.statSync(src).isDirectory() && !exists) {
+        sources[i] += '/*';
+      }
+    });
+
+    // Create dest
+    try {
+      fs.mkdirSync(dest, parseInt('0777', 8));
+    } catch (e) {
+      // like Unix's cp, keep going even if we can't create dest dir
+    }
+  }
+
+  sources = common.expand(sources);
+
+  sources.forEach(function(src) {
+    if (!fs.existsSync(src)) {
+      common.error('no such file or directory: '+src, true);
+      return; // skip file
+    }
+
+    // If here, src exists
+    if (fs.statSync(src).isDirectory()) {
+      if (!options.recursive) {
+        // Non-Recursive
+        common.log(src + ' is a directory (not copied)');
+      } else {
+        // Recursive
+        // 'cp /a/source dest' should create 'source' in 'dest'
+        var newDest = path.join(dest, path.basename(src)),
+            checkDir = fs.statSync(src);
+        try {
+          fs.mkdirSync(newDest, checkDir.mode);
+        } catch (e) {
+          //if the directory already exists, that's okay
+          if (e.code !== 'EEXIST') {
+            common.error('dest file no such file or directory: ' + newDest, true);
+            throw e;
+          }
+        }
+
+        cpdirSyncRecursive(src, newDest, {no_force: options.no_force});
+      }
+      return; // done with dir
+    }
+
+    // If here, src is a file
+
+    // When copying to '/path/dir':
+    //    thisDest = '/path/dir/file1'
+    var thisDest = dest;
+    if (fs.existsSync(dest) && fs.statSync(dest).isDirectory())
+      thisDest = path.normalize(dest + '/' + path.basename(src));
+
+    if (fs.existsSync(thisDest) && options.no_force) {
+      common.error('dest file already exists: ' + thisDest, true);
+      return; // skip file
+    }
+
+    copyFileSync(src, thisDest);
+  }); // forEach(src)
+}
+module.exports = _cp;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/dirs.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/dirs.js b/node_modules/shelljs/src/dirs.js
new file mode 100644
index 0000000..58fae8b
--- /dev/null
+++ b/node_modules/shelljs/src/dirs.js
@@ -0,0 +1,191 @@
+var common = require('./common');
+var _cd = require('./cd');
+var path = require('path');
+
+// Pushd/popd/dirs internals
+var _dirStack = [];
+
+function _isStackIndex(index) {
+  return (/^[\-+]\d+$/).test(index);
+}
+
+function _parseStackIndex(index) {
+  if (_isStackIndex(index)) {
+    if (Math.abs(index) < _dirStack.length + 1) { // +1 for pwd
+      return (/^-/).test(index) ? Number(index) - 1 : Number(index);
+    } else {
+      common.error(index + ': directory stack index out of range');
+    }
+  } else {
+    common.error(index + ': invalid number');
+  }
+}
+
+function _actualDirStack() {
+  return [process.cwd()].concat(_dirStack);
+}
+
+//@
+//@ ### pushd([options,] [dir | '-N' | '+N'])
+//@
+//@ Available options:
+//@
+//@ + `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated.
+//@
+//@ Arguments:
+//@
+//@ + `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`.
+//@ + `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
+//@ + `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ // process.cwd() === '/usr'
+//@ pushd('/etc'); // Returns /etc /usr
+//@ pushd('+1');   // Returns /usr /etc
+//@ ```
+//@
+//@ Save the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack.
+function _pushd(options, dir) {
+  if (_isStackIndex(options)) {
+    dir = options;
+    options = '';
+  }
+
+  options = common.parseOptions(options, {
+    'n' : 'no-cd'
+  });
+
+  var dirs = _actualDirStack();
+
+  if (dir === '+0') {
+    return dirs; // +0 is a noop
+  } else if (!dir) {
+    if (dirs.length > 1) {
+      dirs = dirs.splice(1, 1).concat(dirs);
+    } else {
+      return common.error('no other directory');
+    }
+  } else if (_isStackIndex(dir)) {
+    var n = _parseStackIndex(dir);
+    dirs = dirs.slice(n).concat(dirs.slice(0, n));
+  } else {
+    if (options['no-cd']) {
+      dirs.splice(1, 0, dir);
+    } else {
+      dirs.unshift(dir);
+    }
+  }
+
+  if (options['no-cd']) {
+    dirs = dirs.slice(1);
+  } else {
+    dir = path.resolve(dirs.shift());
+    _cd('', dir);
+  }
+
+  _dirStack = dirs;
+  return _dirs('');
+}
+exports.pushd = _pushd;
+
+//@
+//@ ### popd([options,] ['-N' | '+N'])
+//@
+//@ Available options:
+//@
+//@ + `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated.
+//@
+//@ Arguments:
+//@
+//@ + `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero.
+//@ + `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero.
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ echo(process.cwd()); // '/usr'
+//@ pushd('/etc');       // '/etc /usr'
+//@ echo(process.cwd()); // '/etc'
+//@ popd();              // '/usr'
+//@ echo(process.cwd()); // '/usr'
+//@ ```
+//@
+//@ When no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack.
+function _popd(options, index) {
+  if (_isStackIndex(options)) {
+    index = options;
+    options = '';
+  }
+
+  options = common.parseOptions(options, {
+    'n' : 'no-cd'
+  });
+
+  if (!_dirStack.length) {
+    return common.error('directory stack empty');
+  }
+
+  index = _parseStackIndex(index || '+0');
+
+  if (options['no-cd'] || index > 0 || _dirStack.length + index === 0) {
+    index = index > 0 ? index - 1 : index;
+    _dirStack.splice(index, 1);
+  } else {
+    var dir = path.resolve(_dirStack.shift());
+    _cd('', dir);
+  }
+
+  return _dirs('');
+}
+exports.popd = _popd;
+
+//@
+//@ ### dirs([options | '+N' | '-N'])
+//@
+//@ Available options:
+//@
+//@ + `-c`: Clears the directory stack by deleting all of the elements.
+//@
+//@ Arguments:
+//@
+//@ + `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.
+//@ + `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero.
+//@
+//@ Display the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified.
+//@
+//@ See also: pushd, popd
+function _dirs(options, index) {
+  if (_isStackIndex(options)) {
+    index = options;
+    options = '';
+  }
+
+  options = common.parseOptions(options, {
+    'c' : 'clear'
+  });
+
+  if (options['clear']) {
+    _dirStack = [];
+    return _dirStack;
+  }
+
+  var stack = _actualDirStack();
+
+  if (index) {
+    index = _parseStackIndex(index);
+
+    if (index < 0) {
+      index = stack.length + index;
+    }
+
+    common.log(stack[index]);
+    return stack[index];
+  }
+
+  common.log(stack.join(' '));
+
+  return stack;
+}
+exports.dirs = _dirs;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/echo.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/echo.js b/node_modules/shelljs/src/echo.js
new file mode 100644
index 0000000..b574adc
--- /dev/null
+++ b/node_modules/shelljs/src/echo.js
@@ -0,0 +1,20 @@
+var common = require('./common');
+
+//@
+//@ ### echo(string [, string ...])
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ echo('hello world');
+//@ var str = echo('hello world');
+//@ ```
+//@
+//@ Prints string to stdout, and returns string with additional utility methods
+//@ like `.to()`.
+function _echo() {
+  var messages = [].slice.call(arguments, 0);
+  console.log.apply(console, messages);
+  return common.ShellString(messages.join(' '));
+}
+module.exports = _echo;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/shelljs/src/error.js
----------------------------------------------------------------------
diff --git a/node_modules/shelljs/src/error.js b/node_modules/shelljs/src/error.js
new file mode 100644
index 0000000..112563d
--- /dev/null
+++ b/node_modules/shelljs/src/error.js
@@ -0,0 +1,10 @@
+var common = require('./common');
+
+//@
+//@ ### error()
+//@ Tests if error occurred in the last command. Returns `null` if no error occurred,
+//@ otherwise returns string explaining the error
+function error() {
+  return common.state.error;
+}
+module.exports = error;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[07/14] cordova-browser git commit: CB-10788 Updated checked in node_modules

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/ipaddr.min.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/ipaddr.min.js b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/ipaddr.min.js
index 9e2800d..ee5179d 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/ipaddr.min.js
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/ipaddr.min.js
@@ -1 +1 @@
-(function(){var r,t,e,n,i,o,a,s;t={},s=this,"undefined"!=typeof module&&null!==module&&module.exports?module.exports=t:s.ipaddr=t,a=function(r,t,e,n){var i,o;if(r.length!==t.length)throw new Error("ipaddr: cannot match CIDR for objects with different lengths");for(i=0;n>0;){if(o=e-n,0>o&&(o=0),r[i]>>o!==t[i]>>o)return!1;n-=e,i+=1}return!0},t.subnetMatch=function(r,t,e){var n,i,o,a,s;null==e&&(e="unicast");for(n in t)for(i=t[n],"[object Array]"!==toString.call(i[0])&&(i=[i]),a=0,s=i.length;s>a;a++)if(o=i[a],r.match.apply(r,o))return n;return e},t.IPv4=function(){function r(r){var t,e,n;if(4!==r.length)throw new Error("ipaddr: ipv4 octet count should be 4");for(e=0,n=r.length;n>e;e++)if(t=r[e],!(t>=0&&255>=t))throw new Error("ipaddr: ipv4 octet is a byte");this.octets=r}return r.prototype.kind=function(){return"ipv4"},r.prototype.toString=function(){return this.octets.join(".")},r.prototype.toByteArray=function(){return this.octets.slice(0)},r.prototype.match=function(r,t){var e;if(vo
 id 0===t&&(e=r,r=e[0],t=e[1]),"ipv4"!==r.kind())throw new Error("ipaddr: cannot match ipv4 address with non-ipv4 one");return a(this.octets,r.octets,8,t)},r.prototype.SpecialRanges={unspecified:[[new r([0,0,0,0]),8]],broadcast:[[new r([255,255,255,255]),32]],multicast:[[new r([224,0,0,0]),4]],linkLocal:[[new r([169,254,0,0]),16]],loopback:[[new r([127,0,0,0]),8]],"private":[[new r([10,0,0,0]),8],[new r([172,16,0,0]),12],[new r([192,168,0,0]),16]],reserved:[[new r([192,0,0,0]),24],[new r([192,0,2,0]),24],[new r([192,88,99,0]),24],[new r([198,51,100,0]),24],[new r([203,0,113,0]),24],[new r([240,0,0,0]),4]]},r.prototype.range=function(){return t.subnetMatch(this,this.SpecialRanges)},r.prototype.toIPv4MappedAddress=function(){return t.IPv6.parse("::ffff:"+this.toString())},r}(),e="(0?\\d+|0x[a-f0-9]+)",n={fourOctet:new RegExp("^"+e+"\\."+e+"\\."+e+"\\."+e+"$","i"),longValue:new RegExp("^"+e+"$","i")},t.IPv4.parser=function(r){var t,e,i,o,a;if(e=function(r){return"0"===r[0]&&"x"!==r[1]?p
 arseInt(r,8):parseInt(r)},t=r.match(n.fourOctet))return function(){var r,n,o,a;for(o=t.slice(1,6),a=[],r=0,n=o.length;n>r;r++)i=o[r],a.push(e(i));return a}();if(t=r.match(n.longValue)){if(a=e(t[1]),a>4294967295||0>a)throw new Error("ipaddr: address outside defined range");return function(){var r,t;for(t=[],o=r=0;24>=r;o=r+=8)t.push(a>>o&255);return t}().reverse()}return null},t.IPv6=function(){function r(r){var t,e,n;if(8!==r.length)throw new Error("ipaddr: ipv6 part count should be 8");for(e=0,n=r.length;n>e;e++)if(t=r[e],!(t>=0&&65535>=t))throw new Error("ipaddr: ipv6 part should fit to two octets");this.parts=r}return r.prototype.kind=function(){return"ipv6"},r.prototype.toString=function(){var r,t,e,n,i,o,a;for(i=function(){var r,e,n,i;for(n=this.parts,i=[],r=0,e=n.length;e>r;r++)t=n[r],i.push(t.toString(16));return i}.call(this),r=[],e=function(t){return r.push(t)},n=0,o=0,a=i.length;a>o;o++)switch(t=i[o],n){case 0:e("0"===t?"":t),n=1;break;case 1:"0"===t?n=2:e(t);break;case 2:
 "0"!==t&&(e(""),e(t),n=3);break;case 3:e(t)}return 2===n&&(e(""),e("")),r.join(":")},r.prototype.toByteArray=function(){var r,t,e,n,i;for(r=[],i=this.parts,e=0,n=i.length;n>e;e++)t=i[e],r.push(t>>8),r.push(255&t);return r},r.prototype.toNormalizedString=function(){var r;return function(){var t,e,n,i;for(n=this.parts,i=[],t=0,e=n.length;e>t;t++)r=n[t],i.push(r.toString(16));return i}.call(this).join(":")},r.prototype.match=function(r,t){var e;if(void 0===t&&(e=r,r=e[0],t=e[1]),"ipv6"!==r.kind())throw new Error("ipaddr: cannot match ipv6 address with non-ipv6 one");return a(this.parts,r.parts,16,t)},r.prototype.SpecialRanges={unspecified:[new r([0,0,0,0,0,0,0,0]),128],linkLocal:[new r([65152,0,0,0,0,0,0,0]),10],multicast:[new r([65280,0,0,0,0,0,0,0]),8],loopback:[new r([0,0,0,0,0,0,0,1]),128],uniqueLocal:[new r([64512,0,0,0,0,0,0,0]),7],ipv4Mapped:[new r([0,0,0,0,0,65535,0,0]),96],rfc6145:[new r([0,0,0,0,65535,0,0,0]),96],rfc6052:[new r([100,65435,0,0,0,0,0,0]),96],"6to4":[new r([8194
 ,0,0,0,0,0,0,0]),16],teredo:[new r([8193,0,0,0,0,0,0,0]),32],reserved:[[new r([8193,3512,0,0,0,0,0,0]),32]]},r.prototype.range=function(){return t.subnetMatch(this,this.SpecialRanges)},r.prototype.isIPv4MappedAddress=function(){return"ipv4Mapped"===this.range()},r.prototype.toIPv4Address=function(){var r,e,n;if(!this.isIPv4MappedAddress())throw new Error("ipaddr: trying to convert a generic ipv6 address to ipv4");return n=this.parts.slice(-2),r=n[0],e=n[1],new t.IPv4([r>>8,255&r,e>>8,255&e])},r}(),i="(?:[0-9a-f]+::?)+",o={"native":new RegExp("^(::)?("+i+")?([0-9a-f]+)?(::)?$","i"),transitional:new RegExp("^((?:"+i+")|(?:::)(?:"+i+")?)"+(""+e+"\\."+e+"\\."+e+"\\."+e+"$"),"i")},r=function(r,t){var e,n,i,o,a;if(r.indexOf("::")!==r.lastIndexOf("::"))return null;for(e=0,n=-1;(n=r.indexOf(":",n+1))>=0;)e++;if(":"===r[0]&&e--,":"===r[r.length-1]&&e--,e>t)return null;for(a=t-e,o=":";a--;)o+="0:";return r=r.replace("::",o),":"===r[0]&&(r=r.slice(1)),":"===r[r.length-1]&&(r=r.slice(0,-1)),fun
 ction(){var t,e,n,o;for(n=r.split(":"),o=[],t=0,e=n.length;e>t;t++)i=n[t],o.push(parseInt(i,16));return o}()},t.IPv6.parser=function(t){var e,n;return t.match(o["native"])?r(t,8):(e=t.match(o.transitional))&&(n=r(e[1].slice(0,-1),6))?(n.push(parseInt(e[2])<<8|parseInt(e[3])),n.push(parseInt(e[4])<<8|parseInt(e[5])),n):null},t.IPv4.isIPv4=t.IPv6.isIPv6=function(r){return null!==this.parser(r)},t.IPv4.isValid=t.IPv6.isValid=function(r){var t;try{return new this(this.parser(r)),!0}catch(e){return t=e,!1}},t.IPv4.parse=t.IPv6.parse=function(r){var t;if(t=this.parser(r),null===t)throw new Error("ipaddr: string is not formatted like ip address");return new this(t)},t.IPv4.parseCIDR=t.IPv6.parseCIDR=function(r){var t;if(t=r.match(/^(.+)\/(\d+)$/))return[this.parse(t[1]),parseInt(t[2])];throw new Error("ipaddr: string is not formatted like a CIDR range")},t.isValid=function(r){return t.IPv6.isValid(r)||t.IPv4.isValid(r)},t.parse=function(r){if(t.IPv6.isValid(r))return t.IPv6.parse(r);if(t.I
 Pv4.isValid(r))return t.IPv4.parse(r);throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format")},t.parseCIDR=function(r){var e;try{return t.IPv6.parseCIDR(r)}catch(n){e=n;try{return t.IPv4.parseCIDR(r)}catch(n){throw e=n,new Error("ipaddr: the address has neither IPv6 nor IPv4 CIDR format")}}},t.process=function(r){var t;return t=this.parse(r),"ipv6"===t.kind()&&t.isIPv4MappedAddress()?t.toIPv4Address():t}}).call(this);
\ No newline at end of file
+(function(){var r,t,n,e,i,o,a,s;t={},s=this,"undefined"!=typeof module&&null!==module&&module.exports?module.exports=t:s.ipaddr=t,a=function(r,t,n,e){var i,o;if(r.length!==t.length)throw new Error("ipaddr: cannot match CIDR for objects with different lengths");for(i=0;e>0;){if(o=n-e,0>o&&(o=0),r[i]>>o!==t[i]>>o)return!1;e-=n,i+=1}return!0},t.subnetMatch=function(r,t,n){var e,i,o,a,s;null==n&&(n="unicast");for(e in t)for(i=t[e],!i[0]||i[0]instanceof Array||(i=[i]),a=0,s=i.length;s>a;a++)if(o=i[a],r.match.apply(r,o))return e;return n},t.IPv4=function(){function r(r){var t,n,e;if(4!==r.length)throw new Error("ipaddr: ipv4 octet count should be 4");for(n=0,e=r.length;e>n;n++)if(t=r[n],!(t>=0&&255>=t))throw new Error("ipaddr: ipv4 octet is a byte");this.octets=r}return r.prototype.kind=function(){return"ipv4"},r.prototype.toString=function(){return this.octets.join(".")},r.prototype.toByteArray=function(){return this.octets.slice(0)},r.prototype.match=function(r,t){var n;if(void 0===t&&(
 n=r,r=n[0],t=n[1]),"ipv4"!==r.kind())throw new Error("ipaddr: cannot match ipv4 address with non-ipv4 one");return a(this.octets,r.octets,8,t)},r.prototype.SpecialRanges={unspecified:[[new r([0,0,0,0]),8]],broadcast:[[new r([255,255,255,255]),32]],multicast:[[new r([224,0,0,0]),4]],linkLocal:[[new r([169,254,0,0]),16]],loopback:[[new r([127,0,0,0]),8]],"private":[[new r([10,0,0,0]),8],[new r([172,16,0,0]),12],[new r([192,168,0,0]),16]],reserved:[[new r([192,0,0,0]),24],[new r([192,0,2,0]),24],[new r([192,88,99,0]),24],[new r([198,51,100,0]),24],[new r([203,0,113,0]),24],[new r([240,0,0,0]),4]]},r.prototype.range=function(){return t.subnetMatch(this,this.SpecialRanges)},r.prototype.toIPv4MappedAddress=function(){return t.IPv6.parse("::ffff:"+this.toString())},r}(),n="(0?\\d+|0x[a-f0-9]+)",e={fourOctet:new RegExp("^"+n+"\\."+n+"\\."+n+"\\."+n+"$","i"),longValue:new RegExp("^"+n+"$","i")},t.IPv4.parser=function(r){var t,n,i,o,a;if(n=function(r){return"0"===r[0]&&"x"!==r[1]?parseInt(r,8
 ):parseInt(r)},t=r.match(e.fourOctet))return function(){var r,e,o,a;for(o=t.slice(1,6),a=[],r=0,e=o.length;e>r;r++)i=o[r],a.push(n(i));return a}();if(t=r.match(e.longValue)){if(a=n(t[1]),a>4294967295||0>a)throw new Error("ipaddr: address outside defined range");return function(){var r,t;for(t=[],o=r=0;24>=r;o=r+=8)t.push(a>>o&255);return t}().reverse()}return null},t.IPv6=function(){function r(r){var t,n,e;if(8!==r.length)throw new Error("ipaddr: ipv6 part count should be 8");for(n=0,e=r.length;e>n;n++)if(t=r[n],!(t>=0&&65535>=t))throw new Error("ipaddr: ipv6 part should fit to two octets");this.parts=r}return r.prototype.kind=function(){return"ipv6"},r.prototype.toString=function(){var r,t,n,e,i,o,a;for(i=function(){var r,n,e,i;for(e=this.parts,i=[],r=0,n=e.length;n>r;r++)t=e[r],i.push(t.toString(16));return i}.call(this),r=[],n=function(t){return r.push(t)},e=0,o=0,a=i.length;a>o;o++)switch(t=i[o],e){case 0:n("0"===t?"":t),e=1;break;case 1:"0"===t?e=2:n(t);break;case 2:"0"!==t&&(n
 (""),n(t),e=3);break;case 3:n(t)}return 2===e&&(n(""),n("")),r.join(":")},r.prototype.toByteArray=function(){var r,t,n,e,i;for(r=[],i=this.parts,n=0,e=i.length;e>n;n++)t=i[n],r.push(t>>8),r.push(255&t);return r},r.prototype.toNormalizedString=function(){var r;return function(){var t,n,e,i;for(e=this.parts,i=[],t=0,n=e.length;n>t;t++)r=e[t],i.push(r.toString(16));return i}.call(this).join(":")},r.prototype.match=function(r,t){var n;if(void 0===t&&(n=r,r=n[0],t=n[1]),"ipv6"!==r.kind())throw new Error("ipaddr: cannot match ipv6 address with non-ipv6 one");return a(this.parts,r.parts,16,t)},r.prototype.SpecialRanges={unspecified:[new r([0,0,0,0,0,0,0,0]),128],linkLocal:[new r([65152,0,0,0,0,0,0,0]),10],multicast:[new r([65280,0,0,0,0,0,0,0]),8],loopback:[new r([0,0,0,0,0,0,0,1]),128],uniqueLocal:[new r([64512,0,0,0,0,0,0,0]),7],ipv4Mapped:[new r([0,0,0,0,0,65535,0,0]),96],rfc6145:[new r([0,0,0,0,65535,0,0,0]),96],rfc6052:[new r([100,65435,0,0,0,0,0,0]),96],"6to4":[new r([8194,0,0,0,0,0,
 0,0]),16],teredo:[new r([8193,0,0,0,0,0,0,0]),32],reserved:[[new r([8193,3512,0,0,0,0,0,0]),32]]},r.prototype.range=function(){return t.subnetMatch(this,this.SpecialRanges)},r.prototype.isIPv4MappedAddress=function(){return"ipv4Mapped"===this.range()},r.prototype.toIPv4Address=function(){var r,n,e;if(!this.isIPv4MappedAddress())throw new Error("ipaddr: trying to convert a generic ipv6 address to ipv4");return e=this.parts.slice(-2),r=e[0],n=e[1],new t.IPv4([r>>8,255&r,n>>8,255&n])},r}(),i="(?:[0-9a-f]+::?)+",o={"native":new RegExp("^(::)?("+i+")?([0-9a-f]+)?(::)?$","i"),transitional:new RegExp("^((?:"+i+")|(?:::)(?:"+i+")?)"+(""+n+"\\."+n+"\\."+n+"\\."+n+"$"),"i")},r=function(r,t){var n,e,i,o,a;if(r.indexOf("::")!==r.lastIndexOf("::"))return null;for(n=0,e=-1;(e=r.indexOf(":",e+1))>=0;)n++;if("::"===r.substr(0,2)&&n--,"::"===r.substr(-2,2)&&n--,n>t)return null;for(a=t-n,o=":";a--;)o+="0:";return r=r.replace("::",o),":"===r[0]&&(r=r.slice(1)),":"===r[r.length-1]&&(r=r.slice(0,-1)),fu
 nction(){var t,n,e,o;for(e=r.split(":"),o=[],t=0,n=e.length;n>t;t++)i=e[t],o.push(parseInt(i,16));return o}()},t.IPv6.parser=function(t){var n,e;return t.match(o["native"])?r(t,8):(n=t.match(o.transitional))&&(e=r(n[1].slice(0,-1),6))?(e.push(parseInt(n[2])<<8|parseInt(n[3])),e.push(parseInt(n[4])<<8|parseInt(n[5])),e):null},t.IPv4.isIPv4=t.IPv6.isIPv6=function(r){return null!==this.parser(r)},t.IPv4.isValid=function(r){var t;try{return new this(this.parser(r)),!0}catch(n){return t=n,!1}},t.IPv6.isValid=function(r){var t;if("string"==typeof r&&-1===r.indexOf(":"))return!1;try{return new this(this.parser(r)),!0}catch(n){return t=n,!1}},t.IPv4.parse=t.IPv6.parse=function(r){var t;if(t=this.parser(r),null===t)throw new Error("ipaddr: string is not formatted like ip address");return new this(t)},t.IPv4.parseCIDR=function(r){var t,n;if((n=r.match(/^(.+)\/(\d+)$/))&&(t=parseInt(n[2]),t>=0&&32>=t))return[this.parse(n[1]),t];throw new Error("ipaddr: string is not formatted like an IPv4 CIDR
  range")},t.IPv6.parseCIDR=function(r){var t,n;if((n=r.match(/^(.+)\/(\d+)$/))&&(t=parseInt(n[2]),t>=0&&128>=t))return[this.parse(n[1]),t];throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range")},t.isValid=function(r){return t.IPv6.isValid(r)||t.IPv4.isValid(r)},t.parse=function(r){if(t.IPv6.isValid(r))return t.IPv6.parse(r);if(t.IPv4.isValid(r))return t.IPv4.parse(r);throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format")},t.parseCIDR=function(r){var n;try{return t.IPv6.parseCIDR(r)}catch(e){n=e;try{return t.IPv4.parseCIDR(r)}catch(e){throw n=e,new Error("ipaddr: the address has neither IPv6 nor IPv4 CIDR format")}}},t.process=function(r){var t;return t=this.parse(r),"ipv6"===t.kind()&&t.isIPv4MappedAddress()?t.toIPv4Address():t}}).call(this);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/lib/ipaddr.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/lib/ipaddr.js b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/lib/ipaddr.js
index 5d99e08..ef179b4 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/lib/ipaddr.js
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/lib/ipaddr.js
@@ -38,7 +38,7 @@
     }
     for (rangeName in rangeList) {
       rangeSubnets = rangeList[rangeName];
-      if (toString.call(rangeSubnets[0]) !== '[object Array]') {
+      if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) {
         rangeSubnets = [rangeSubnets];
       }
       for (_i = 0, _len = rangeSubnets.length; _i < _len; _i++) {
@@ -317,10 +317,10 @@
     while ((lastColon = string.indexOf(':', lastColon + 1)) >= 0) {
       colonCount++;
     }
-    if (string[0] === ':') {
+    if (string.substr(0, 2) === '::') {
       colonCount--;
     }
-    if (string[string.length - 1] === ':') {
+    if (string.substr(-2, 2) === '::') {
       colonCount--;
     }
     if (colonCount > parts) {
@@ -369,8 +369,22 @@
     return this.parser(string) !== null;
   };
 
-  ipaddr.IPv4.isValid = ipaddr.IPv6.isValid = function(string) {
+  ipaddr.IPv4.isValid = function(string) {
+    var e;
+    try {
+      new this(this.parser(string));
+      return true;
+    } catch (_error) {
+      e = _error;
+      return false;
+    }
+  };
+
+  ipaddr.IPv6.isValid = function(string) {
     var e;
+    if (typeof string === "string" && string.indexOf(":") === -1) {
+      return false;
+    }
     try {
       new this(this.parser(string));
       return true;
@@ -389,12 +403,26 @@
     return new this(parts);
   };
 
-  ipaddr.IPv4.parseCIDR = ipaddr.IPv6.parseCIDR = function(string) {
-    var match;
+  ipaddr.IPv4.parseCIDR = function(string) {
+    var maskLength, match;
+    if (match = string.match(/^(.+)\/(\d+)$/)) {
+      maskLength = parseInt(match[2]);
+      if (maskLength >= 0 && maskLength <= 32) {
+        return [this.parse(match[1]), maskLength];
+      }
+    }
+    throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range");
+  };
+
+  ipaddr.IPv6.parseCIDR = function(string) {
+    var maskLength, match;
     if (match = string.match(/^(.+)\/(\d+)$/)) {
-      return [this.parse(match[1]), parseInt(match[2])];
+      maskLength = parseInt(match[2]);
+      if (maskLength >= 0 && maskLength <= 128) {
+        return [this.parse(match[1]), maskLength];
+      }
     }
-    throw new Error("ipaddr: string is not formatted like a CIDR range");
+    throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range");
   };
 
   ipaddr.isValid = function(string) {

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/package.json
index 1bacc3e..6b61f32 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/package.json
@@ -1,9 +1,9 @@
 {
   "name": "ipaddr.js",
   "description": "A library for manipulating IPv4 and IPv6 addresses in JavaScript.",
-  "version": "1.0.1",
+  "version": "1.0.5",
   "author": {
-    "name": "Peter Zotov",
+    "name": "whitequark",
     "email": "whitequark@whitequark.org"
   },
   "directories": {
@@ -12,7 +12,7 @@
   "dependencies": {},
   "devDependencies": {
     "coffee-script": "~1.6",
-    "nodeunit": "~0.5.3",
+    "nodeunit": ">=0.8.2 <0.8.7",
     "uglify-js": "latest"
   },
   "scripts": {
@@ -29,17 +29,32 @@
   },
   "main": "./lib/ipaddr",
   "engines": {
-    "node": ">= 0.2.5"
+    "node": ">= 0.10"
   },
   "license": "MIT",
-  "readme": "# ipaddr.js — an IPv6 and IPv4 address manipulation library\n\nipaddr.js is a small (1.9K minified and gzipped) library for manipulating\nIP addresses in JavaScript environments. It runs on both CommonJS runtimes\n(e.g. [nodejs]) and in a web browser.\n\nipaddr.js allows you to verify and parse string representation of an IP\naddress, match it against a CIDR range or range list, determine if it falls\ninto some reserved ranges (examples include loopback and private ranges),\nand convert between IPv4 and IPv4-mapped IPv6 addresses.\n\n[nodejs]: http://nodejs.org\n\n## Installation\n\n`npm install ipaddr.js`\n\n## API\n\nipaddr.js defines one object in the global scope: `ipaddr`. In CommonJS,\nit is exported from the module:\n\n```js\nvar ipaddr = require('ipaddr.js');\n```\n\nThe API consists of several global methods and two classes: ipaddr.IPv6 and ipaddr.IPv4.\n\n### Global methods\n\nThere are three global methods defined: `ipaddr.isValid`, `ipaddr.parse` and\n`ipa
 ddr.process`. All of them receive a string as a single parameter.\n\nThe `ipaddr.isValid` method returns `true` if the address is a valid IPv4 or\nIPv6 address, and `false` otherwise. It does not throw any exceptions.\n\nThe `ipaddr.parse` method returns an object representing the IP address,\nor throws an `Error` if the passed string is not a valid representation of an\nIP address.\n\nThe `ipaddr.process` method works just like the `ipaddr.parse` one, but it\nautomatically converts IPv4-mapped IPv6 addresses to their IPv4 couterparts\nbefore returning. It is useful when you have a Node.js instance listening\non an IPv6 socket, and the `net.ivp6.bindv6only` sysctl parameter (or its\nequivalent on non-Linux OS) is set to 0. In this case, you can accept IPv4\nconnections on your IPv6-only socket, but the remote address will be mangled.\nUse `ipaddr.process` method to automatically demangle it.\n\n### Object representation\n\nParsing methods return an object which descends from `ipaddr
 .IPv6` or\n`ipaddr.IPv4`. These objects share some properties, but most of them differ.\n\n#### Shared properties\n\nOne can determine the type of address by calling `addr.kind()`. It will return\neither `\"ipv6\"` or `\"ipv4\"`.\n\nAn address can be converted back to its string representation with `addr.toString()`.\nNote that this method:\n * does not return the original string used to create the object (in fact, there is\n   no way of getting that string)\n * returns a compact representation (when it is applicable)\n\nA `match(range, bits)` method can be used to check if the address falls into a\ncertain CIDR range.\nNote that an address can be (obviously) matched only against an address of the same type.\n\nFor example:\n\n```js\nvar addr = ipaddr.parse(\"2001:db8:1234::1\");\nvar range = ipaddr.parse(\"2001:db8::\");\n\naddr.match(range, 32); // => true\n```\n\nAlternatively, `match` can also be called as `match([range, bits])`. In this way,\nit can be used together with the `p
 arseCIDR(string)` method, which parses an IP\naddress together with a CIDR range.\n\nFor example:\n\n```js\nvar addr = ipaddr.parse(\"2001:db8:1234::1\");\n\naddr.match(ipaddr.parseCIDR(\"2001:db8::/32\")); // => true\n```\n\nA `range()` method returns one of predefined names for several special ranges defined\nby IP protocols. The exact names (and their respective CIDR ranges) can be looked up\nin the source: [IPv6 ranges] and [IPv4 ranges]. Some common ones include `\"unicast\"`\n(the default one) and `\"reserved\"`.\n\nYou can match against your own range list by using\n`ipaddr.subnetMatch(address, rangeList, defaultName)` method. It can work with both\nIPv6 and IPv4 addresses, and accepts a name-to-subnet map as the range list. For example:\n\n```js\nvar rangeList = {\n  documentationOnly: [ ipaddr.parse('2001:db8::'), 32 ],\n  tunnelProviders: [\n    [ ipaddr.parse('2001:470::'), 32 ], // he.net\n    [ ipaddr.parse('2001:5c0::'), 32 ]  // freenet6\n  ]\n};\nipaddr.subnetMatch(i
 paddr.parse('2001:470:8:66::1'), rangeList, 'unknown'); // => \"he.net\"\n```\n\nThe addresses can be converted to their byte representation with `toByteArray()`.\n(Actually, JavaScript mostly does not know about byte buffers. They are emulated with\narrays of numbers, each in range of 0..255.)\n\n```js\nvar bytes = ipaddr.parse('2a00:1450:8007::68').toByteArray(); // ipv6.google.com\nbytes // => [42, 0x00, 0x14, 0x50, 0x80, 0x07, 0x00, <zeroes...>, 0x00, 0x68 ]\n```\n\nThe `ipaddr.IPv4` and `ipaddr.IPv6` objects have some methods defined, too. All of them\nhave the same interface for both protocols, and are similar to global methods.\n\n`ipaddr.IPvX.isValid(string)` can be used to check if the string is a valid address\nfor particular protocol, and `ipaddr.IPvX.parse(string)` is the error-throwing parser.\n\n[IPv6 ranges]: https://github.com/whitequark/ipaddr.js/blob/master/src/ipaddr.coffee#L186\n[IPv4 ranges]: https://github.com/whitequark/ipaddr.js/blob/master/src/ipaddr.coffee#
 L71\n\n#### IPv6 properties\n\nSometimes you will want to convert IPv6 not to a compact string representation (with\nthe `::` substitution); the `toNormalizedString()` method will return an address where\nall zeroes are explicit.\n\nFor example:\n\n```js\nvar addr = ipaddr.parse(\"2001:0db8::0001\");\naddr.toString(); // => \"2001:db8::1\"\naddr.toNormalizedString(); // => \"2001:db8:0:0:0:0:0:1\"\n```\n\nThe `isIPv4MappedAddress()` method will return `true` if this address is an IPv4-mapped\none, and `toIPv4Address()` will return an IPv4 object address.\n\nTo access the underlying binary representation of the address, use `addr.parts`.\n\n```js\nvar addr = ipaddr.parse(\"2001:db8:10::1234:DEAD\");\naddr.parts // => [0x2001, 0xdb8, 0x10, 0, 0, 0, 0x1234, 0xdead]\n```\n\n#### IPv4 properties\n\n`toIPv4MappedAddress()` will return a corresponding IPv4-mapped IPv6 address.\n\nTo access the underlying representation of the address, use `addr.octets`.\n\n```js\nvar addr = ipaddr.parse(\"
 192.168.1.1\");\naddr.octets // => [192, 168, 1, 1]\n```\n",
-  "readmeFilename": "README.md",
+  "gitHead": "46438c8bfa187505b7007a277f09a4a9e73d5686",
   "bugs": {
     "url": "https://github.com/whitequark/ipaddr.js/issues"
   },
-  "homepage": "https://github.com/whitequark/ipaddr.js#readme",
-  "_id": "ipaddr.js@1.0.1",
-  "_shasum": "5f38801dc73e0400fc7076386f6ed5215fbd8f95",
-  "_resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.1.tgz",
-  "_from": "ipaddr.js@1.0.1"
+  "_id": "ipaddr.js@1.0.5",
+  "_shasum": "5fa78cf301b825c78abc3042d812723049ea23c7",
+  "_from": "ipaddr.js@1.0.5",
+  "_npmVersion": "1.4.21",
+  "_npmUser": {
+    "name": "whitequark",
+    "email": "whitequark@whitequark.org"
+  },
+  "maintainers": [
+    {
+      "name": "whitequark",
+      "email": "whitequark@whitequark.org"
+    }
+  ],
+  "dist": {
+    "shasum": "5fa78cf301b825c78abc3042d812723049ea23c7",
+    "tarball": "http://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.5.tgz"
+  },
+  "_resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.5.tgz",
+  "readme": "ERROR: No README data found!",
+  "homepage": "https://github.com/whitequark/ipaddr.js#readme"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/src/ipaddr.coffee
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/src/ipaddr.coffee b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/src/ipaddr.coffee
index 0a48080..550174f 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/src/ipaddr.coffee
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/src/ipaddr.coffee
@@ -31,7 +31,7 @@ matchCIDR = (first, second, partSize, cidrBits) ->
 ipaddr.subnetMatch = (address, rangeList, defaultName='unicast') ->
   for rangeName, rangeSubnets of rangeList
     # ECMA5 Array.isArray isn't available everywhere
-    if toString.call(rangeSubnets[0]) != '[object Array]'
+    if rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)
       rangeSubnets = [ rangeSubnets ]
 
     for subnet in rangeSubnets
@@ -279,8 +279,8 @@ expandIPv6 = (string, parts) ->
     colonCount++
 
   # 0::0 is two parts more than ::
-  colonCount-- if string[0] == ':'
-  colonCount-- if string[string.length-1] == ':'
+  colonCount-- if string.substr(0, 2) == '::'
+  colonCount-- if string.substr(-2, 2) == '::'
 
   # The following loop would hang if colonCount > parts
   if colonCount > parts
@@ -321,7 +321,19 @@ ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = (string) ->
   return @parser(string) != null
 
 # Checks if a given string is a valid IPv4/IPv6 address.
-ipaddr.IPv4.isValid = ipaddr.IPv6.isValid = (string) ->
+ipaddr.IPv4.isValid = (string) ->
+  try
+    new this(@parser(string))
+    return true
+  catch e
+    return false
+
+ipaddr.IPv6.isValid = (string) ->
+  # Since IPv6.isValid is always called first, this shortcut
+  # provides a substantial performance gain.
+  if typeof string == "string" and string.indexOf(":") == -1
+    return false
+
   try
     new this(@parser(string))
     return true
@@ -337,11 +349,21 @@ ipaddr.IPv4.parse = ipaddr.IPv6.parse = (string) ->
 
   return new this(parts)
 
-ipaddr.IPv4.parseCIDR = ipaddr.IPv6.parseCIDR = (string) ->
+ipaddr.IPv4.parseCIDR = (string) ->
+  if match = string.match(/^(.+)\/(\d+)$/)
+    maskLength = parseInt(match[2])
+    if maskLength >= 0 and maskLength <= 32
+      return [@parse(match[1]), maskLength]
+
+  throw new Error "ipaddr: string is not formatted like an IPv4 CIDR range"
+
+ipaddr.IPv6.parseCIDR = (string) ->
   if match = string.match(/^(.+)\/(\d+)$/)
-    return [@parse(match[1]), parseInt(match[2])]
+    maskLength = parseInt(match[2])
+    if maskLength >= 0 and maskLength <= 128
+      return [@parse(match[1]), maskLength]
 
-  throw new Error "ipaddr: string is not formatted like a CIDR range"
+  throw new Error "ipaddr: string is not formatted like an IPv6 CIDR range"
 
 # Checks if the address is valid IP address
 ipaddr.isValid = (string) ->

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/test/ipaddr.test.coffee
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/test/ipaddr.test.coffee b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/test/ipaddr.test.coffee
index 361561e..17739e2 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/test/ipaddr.test.coffee
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/test/ipaddr.test.coffee
@@ -87,6 +87,10 @@ module.exports =
     test.equal(addr.match(ipaddr.IPv4.parseCIDR('10.5.0.1/32')), true)
     test.throws ->
       ipaddr.IPv4.parseCIDR('10.5.0.1')
+    test.throws ->
+      ipaddr.IPv4.parseCIDR('0.0.0.0/-1')
+    test.throws ->
+      ipaddr.IPv4.parseCIDR('0.0.0.0/33')
     test.done()
 
   'detects reserved IPv4 networks': (test) ->
@@ -142,13 +146,15 @@ module.exports =
     test.done()
 
   'validates IPv6 addresses': (test) ->
-    test.equal(ipaddr.IPv6.isValid('2001:db8:F53A::1'),    true)
-    test.equal(ipaddr.IPv6.isValid('200001::1'),           false)
+    test.equal(ipaddr.IPv6.isValid('2001:db8:F53A::1'),     true)
+    test.equal(ipaddr.IPv6.isValid('200001::1'),            false)
     test.equal(ipaddr.IPv6.isValid('::ffff:192.168.1.1'),   true)
     test.equal(ipaddr.IPv6.isValid('::ffff:300.168.1.1'),   false)
     test.equal(ipaddr.IPv6.isValid('::ffff:300.168.1.1:0'), false)
-    test.equal(ipaddr.IPv6.isValid('2001:db8::F53A::1'),   false)
-    test.equal(ipaddr.IPv6.isValid('fe80::wtf'),           false)
+    test.equal(ipaddr.IPv6.isValid('2001:db8::F53A::1'),    false)
+    test.equal(ipaddr.IPv6.isValid('fe80::wtf'),            false)
+    test.equal(ipaddr.IPv6.isValid('2002::2:'),             false)
+    test.equal(ipaddr.IPv6.isValid(undefined),              false)
     test.done()
 
   'parses IPv6 in different formats': (test) ->
@@ -186,6 +192,10 @@ module.exports =
     test.equal(addr.match(ipaddr.IPv6.parseCIDR('2001:db8:f53a::1/128')),  true)
     test.throws ->
       ipaddr.IPv6.parseCIDR('2001:db8:f53a::1')
+    test.throws ->
+      ipaddr.IPv6.parseCIDR('2001:db8:f53a::1/-1')
+    test.throws ->
+      ipaddr.IPv6.parseCIDR('2001:db8:f53a::1/129')
     test.done()
 
   'converts between IPv4-mapped IPv6 addresses and IPv4 addresses': (test) ->
@@ -260,3 +270,13 @@ module.exports =
   'does not hang on ::8:8:8:8:8:8:8:8:8': (test) ->
     test.equal(ipaddr.IPv6.isValid('::8:8:8:8:8:8:8:8:8'), false)
     test.done()
+
+  'subnetMatch does not fail on empty range': (test) ->
+    ipaddr.subnetMatch(new ipaddr.IPv4([1,2,3,4]), {}, false)
+    ipaddr.subnetMatch(new ipaddr.IPv4([1,2,3,4]), {subnet: []}, false)
+    test.done()
+
+  'subnetMatch returns default subnet on empty range': (test) ->
+    test.equal(ipaddr.subnetMatch(new ipaddr.IPv4([1,2,3,4]), {}, false), false)
+    test.equal(ipaddr.subnetMatch(new ipaddr.IPv4([1,2,3,4]), {subnet: []}, false), false)
+    test.done()

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/package.json
index 5c9c054..04af756 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/package.json
@@ -1,7 +1,7 @@
 {
   "name": "proxy-addr",
   "description": "Determine address of proxied request",
-  "version": "1.0.8",
+  "version": "1.0.10",
   "author": {
     "name": "Douglas Christopher Wilson",
     "email": "doug@somethingdoug.com"
@@ -18,12 +18,12 @@
   },
   "dependencies": {
     "forwarded": "~0.1.0",
-    "ipaddr.js": "1.0.1"
+    "ipaddr.js": "1.0.5"
   },
   "devDependencies": {
     "benchmark": "1.0.0",
     "beautify-benchmark": "0.2.4",
-    "istanbul": "0.3.9",
+    "istanbul": "0.4.1",
     "mocha": "~1.21.5"
   },
   "files": [
@@ -41,14 +41,50 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
   },
-  "readme": "# proxy-addr\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nDetermine address of proxied request\n\n## Install\n\n```sh\n$ npm install proxy-addr\n```\n\n## API\n\n```js\nvar proxyaddr = require('proxy-addr')\n```\n\n### proxyaddr(req, trust)\n\nReturn the address of the request, using the given `trust` parameter.\n\nThe `trust` argument is a function that returns `true` if you trust\nthe address, `false` if you don't. The closest untrusted address is\nreturned.\n\n```js\nproxyaddr(req, function(addr){ return addr === '127.0.0.1' })\nproxyaddr(req, function(addr, i){ return i < 1 })\n```\n\nThe `trust` arugment may also be a single IP address string or an\narray of trusted addresses, as plain IP addresses, CIDR-formatted\nstrings, or IP/netmask strings.\n\n```js\nproxy
 addr(req, '127.0.0.1')\nproxyaddr(req, ['127.0.0.0/8', '10.0.0.0/8'])\nproxyaddr(req, ['127.0.0.0/255.0.0.0', '192.168.0.0/255.255.0.0'])\n```\n\nThis module also supports IPv6. Your IPv6 addresses will be normalized\nautomatically (i.e. `fe80::00ed:1` equals `fe80:0:0:0:0:0:ed:1`).\n\n```js\nproxyaddr(req, '::1')\nproxyaddr(req, ['::1/128', 'fe80::/10'])\nproxyaddr(req, ['fe80::/ffc0::'])\n```\n\nThis module will automatically work with IPv4-mapped IPv6 addresses\nas well to support node.js in IPv6-only mode. This means that you do\nnot have to specify both `::ffff:a00:1` and `10.0.0.1`.\n\nAs a convenience, this module also takes certain pre-defined names\nin addition to IP addresses, which expand into IP addresses:\n\n```js\nproxyaddr(req, 'loopback')\nproxyaddr(req, ['loopback', 'fc00:ac:1ab5:fff::1/64'])\n```\n\n  * `loopback`: IPv4 and IPv6 loopback addresses (like `::1` and\n    `127.0.0.1`).\n  * `linklocal`: IPv4 and IPv6 link-local addresses (like\n    `fe80::1:1:1:1` and 
 `169.254.0.1`).\n  * `uniquelocal`: IPv4 private addresses and IPv6 unique-local\n    addresses (like `fc00:ac:1ab5:fff::1` and `192.168.0.1`).\n\nWhen `trust` is specified as a function, it will be called for each\naddress to determine if it is a trusted address. The function is\ngiven two arguments: `addr` and `i`, where `addr` is a string of\nthe address to check and `i` is a number that represents the distance\nfrom the socket address.\n\n### proxyaddr.all(req, [trust])\n\nReturn all the addresses of the request, optionally stopping at the\nfirst untrusted. This array is ordered from closest to furthest\n(i.e. `arr[0] === req.connection.remoteAddress`).\n\n```js\nproxyaddr.all(req)\n```\n\nThe optional `trust` argument takes the same arguments as `trust`\ndoes in `proxyaddr(req, trust)`.\n\n```js\nproxyaddr.all(req, 'loopback')\n```\n\n### proxyaddr.compile(val)\n\nCompiles argument `val` into a `trust` function. This function takes\nthe same arguments as `trust` does in `proxya
 ddr(req, trust)` and\nreturns a function suitable for `proxyaddr(req, trust)`.\n\n```js\nvar trust = proxyaddr.compile('localhost')\nvar addr  = proxyaddr(req, trust)\n```\n\nThis function is meant to be optimized for use against every request.\nIt is recommend to compile a trust function up-front for the trusted\nconfiguration and pass that to `proxyaddr(req, trust)` for each request.\n\n## Testing\n\n```sh\n$ npm test\n```\n\n## Benchmarks\n\n```sh\n$ npm run-script bench\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/proxy-addr.svg\n[npm-url]: https://npmjs.org/package/proxy-addr\n[node-version-image]: https://img.shields.io/node/v/proxy-addr.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/proxy-addr/master.svg\n[travis-url]: https://travis-ci.org/jshttp/proxy-addr\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/proxy-addr/master.svg\n[coveralls-url]: https://coveralls.io/r/j
 shttp/proxy-addr?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/proxy-addr.svg\n[downloads-url]: https://npmjs.org/package/proxy-addr\n",
-  "readmeFilename": "README.md",
+  "gitHead": "0cdb6444100a7930285ed2555d0c3c687690a7a5",
   "bugs": {
     "url": "https://github.com/jshttp/proxy-addr/issues"
   },
-  "homepage": "https://github.com/jshttp/proxy-addr#readme",
-  "_id": "proxy-addr@1.0.8",
-  "_shasum": "db54ec878bcc1053d57646609219b3715678bafe",
-  "_resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.8.tgz",
-  "_from": "proxy-addr@>=1.0.8 <1.1.0"
+  "homepage": "https://github.com/jshttp/proxy-addr",
+  "_id": "proxy-addr@1.0.10",
+  "_shasum": "0d40a82f801fc355567d2ecb65efe3f077f121c5",
+  "_from": "proxy-addr@>=1.0.10 <1.1.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "mscdex",
+      "email": "mscdex@mscdex.net"
+    },
+    {
+      "name": "fishrock123",
+      "email": "fishrock123@rocketmail.com"
+    },
+    {
+      "name": "defunctzombie",
+      "email": "shtylman@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "0d40a82f801fc355567d2ecb65efe3f077f121c5",
+    "tarball": "http://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.10.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.10.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/HISTORY.md b/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/HISTORY.md
index 1bb53bd..f640bea 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/HISTORY.md
@@ -1,3 +1,8 @@
+unreleased
+==========
+
+  * perf: enable strict mode
+
 1.0.2 / 2014-09-08
 ==================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/README.md b/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/README.md
index 6a2682f..32f58f6 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/README.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/README.md
@@ -14,35 +14,44 @@ Range header field parser.
 $ npm install range-parser
 ```
 
-## Examples
+## API
 
 ```js
-assert(-1 == parse(200, 'bytes=500-20'));
-assert(-2 == parse(200, 'bytes=malformed'));
-parse(200, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 199 }]));
-parse(1000, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 499 }]));
-parse(1000, 'bytes=40-80').should.eql(arr('bytes', [{ start: 40, end: 80 }]));
-parse(1000, 'bytes=-500').should.eql(arr('bytes', [{ start: 500, end: 999 }]));
-parse(1000, 'bytes=-400').should.eql(arr('bytes', [{ start: 600, end: 999 }]));
-parse(1000, 'bytes=500-').should.eql(arr('bytes', [{ start: 500, end: 999 }]));
-parse(1000, 'bytes=400-').should.eql(arr('bytes', [{ start: 400, end: 999 }]));
-parse(1000, 'bytes=0-0').should.eql(arr('bytes', [{ start: 0, end: 0 }]));
-parse(1000, 'bytes=-1').should.eql(arr('bytes', [{ start: 999, end: 999 }]));
-parse(1000, 'items=0-5').should.eql(arr('items', [{ start: 0, end: 5 }]));
-parse(1000, 'bytes=40-80,-1').should.eql(arr('bytes', [{ start: 40, end: 80 }, { start: 999, end: 999 }]));
+var parseRange = require('range-parser')
+```
+
+### parseRange(size, header)
+
+Parse the given `header` string where `size` is the maximum size of the resource.
+An array of ranges will be returned or negative numbers indicating an error parsing.
+
+  * `-2` signals a malformed header string
+  * `-1` signals an invalid range
+
+```js
+// parse header from request
+var range = parseRange(req.headers.range)
+
+// the type of the range
+if (range.type === 'bytes') {
+  // the ranges
+  range.forEach(function (r) {
+    // do something with r.start and r.end
+  })
+}
 ```
 
 ## License
 
 [MIT](LICENSE)
 
-[npm-image]: https://img.shields.io/npm/v/range-parser.svg?style=flat
+[npm-image]: https://img.shields.io/npm/v/range-parser.svg
 [npm-url]: https://npmjs.org/package/range-parser
-[node-version-image]: https://img.shields.io/badge/node.js-%3E%3D_0.6-brightgreen.svg?style=flat
+[node-version-image]: https://img.shields.io/node/v/range-parser.svg
 [node-version-url]: http://nodejs.org/download/
-[travis-image]: https://img.shields.io/travis/jshttp/range-parser.svg?style=flat
+[travis-image]: https://img.shields.io/travis/jshttp/range-parser.svg
 [travis-url]: https://travis-ci.org/jshttp/range-parser
-[coveralls-image]: https://img.shields.io/coveralls/jshttp/range-parser.svg?style=flat
+[coveralls-image]: https://img.shields.io/coveralls/jshttp/range-parser.svg
 [coveralls-url]: https://coveralls.io/r/jshttp/range-parser
-[downloads-image]: https://img.shields.io/npm/dm/range-parser.svg?style=flat
+[downloads-image]: https://img.shields.io/npm/dm/range-parser.svg
 [downloads-url]: https://npmjs.org/package/range-parser

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/index.js b/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/index.js
index 09a6c40..814e533 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/index.js
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/index.js
@@ -1,3 +1,17 @@
+/*!
+ * range-parser
+ * Copyright(c) 2012-2014 TJ Holowaychuk
+ * MIT Licensed
+ */
+
+'use strict';
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = rangeParser;
 
 /**
  * Parse "Range" header `str` relative to the given file `size`.
@@ -5,10 +19,10 @@
  * @param {Number} size
  * @param {String} str
  * @return {Array}
- * @api public
+ * @public
  */
 
-module.exports = function(size, str){
+function rangeParser(size, str) {
   var valid = true;
   var i = str.indexOf('=');
 
@@ -46,4 +60,4 @@ module.exports = function(size, str){
   arr.type = str.slice(0, i);
 
   return valid ? arr : -1;
-};
+}

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/package.json
index e9a4d9a..5d4411b 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/range-parser/package.json
@@ -6,7 +6,7 @@
     "url": "http://tjholowaychuk.com"
   },
   "description": "Range header field string parser",
-  "version": "1.0.2",
+  "version": "1.0.3",
   "license": "MIT",
   "keywords": [
     "range",
@@ -18,9 +18,8 @@
     "url": "git+https://github.com/jshttp/range-parser.git"
   },
   "devDependencies": {
-    "istanbul": "0",
-    "mocha": "1",
-    "should": "2"
+    "istanbul": "0.4.0",
+    "mocha": "1.21.5"
   },
   "files": [
     "HISTORY.md",
@@ -31,18 +30,46 @@
     "node": ">= 0.6"
   },
   "scripts": {
-    "test": "mocha --reporter spec --require should",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --require should",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot --require should"
+    "test": "mocha --reporter spec",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot"
   },
-  "readme": "# range-parser\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nRange header field parser.\n\n## Installation\n\n```\n$ npm install range-parser\n```\n\n## Examples\n\n```js\nassert(-1 == parse(200, 'bytes=500-20'));\nassert(-2 == parse(200, 'bytes=malformed'));\nparse(200, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 199 }]));\nparse(1000, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 499 }]));\nparse(1000, 'bytes=40-80').should.eql(arr('bytes', [{ start: 40, end: 80 }]));\nparse(1000, 'bytes=-500').should.eql(arr('bytes', [{ start: 500, end: 999 }]));\nparse(1000, 'bytes=-400').should.eql(arr('bytes', [{ start: 600, end: 999 }]));\nparse(1000, 'bytes=500-').should.eql(arr('bytes', [{ start: 500, end: 999 }]));\nparse(1000, 'bytes=400-').should.eq
 l(arr('bytes', [{ start: 400, end: 999 }]));\nparse(1000, 'bytes=0-0').should.eql(arr('bytes', [{ start: 0, end: 0 }]));\nparse(1000, 'bytes=-1').should.eql(arr('bytes', [{ start: 999, end: 999 }]));\nparse(1000, 'items=0-5').should.eql(arr('items', [{ start: 0, end: 5 }]));\nparse(1000, 'bytes=40-80,-1').should.eql(arr('bytes', [{ start: 40, end: 80 }, { start: 999, end: 999 }]));\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/range-parser.svg?style=flat\n[npm-url]: https://npmjs.org/package/range-parser\n[node-version-image]: https://img.shields.io/badge/node.js-%3E%3D_0.6-brightgreen.svg?style=flat\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/range-parser.svg?style=flat\n[travis-url]: https://travis-ci.org/jshttp/range-parser\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/range-parser.svg?style=flat\n[coveralls-url]: https://coveralls.io/r/jshttp/range-parser\n[downloads-imag
 e]: https://img.shields.io/npm/dm/range-parser.svg?style=flat\n[downloads-url]: https://npmjs.org/package/range-parser\n",
-  "readmeFilename": "README.md",
+  "gitHead": "18e46a3de74afff9f4e22717f11ddd6e9aa6d845",
   "bugs": {
     "url": "https://github.com/jshttp/range-parser/issues"
   },
-  "homepage": "https://github.com/jshttp/range-parser#readme",
-  "_id": "range-parser@1.0.2",
-  "_shasum": "06a12a42e5131ba8e457cd892044867f2344e549",
-  "_resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.2.tgz",
-  "_from": "range-parser@>=1.0.2 <1.1.0"
+  "homepage": "https://github.com/jshttp/range-parser",
+  "_id": "range-parser@1.0.3",
+  "_shasum": "6872823535c692e2c2a0103826afd82c2e0ff175",
+  "_from": "range-parser@>=1.0.3 <1.1.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "jonathanong",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "6872823535c692e2c2a0103826afd82c2e0ff175",
+    "tarball": "http://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/send/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/send/HISTORY.md b/node_modules/cordova-serve/node_modules/express/node_modules/send/HISTORY.md
index 1fa40b5..d3dca9c 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/send/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/send/HISTORY.md
@@ -1,3 +1,18 @@
+0.13.1 / 2016-01-16
+===================
+
+  * deps: depd@~1.1.0
+    - Support web browser loading
+    - perf: enable strict mode
+  * deps: destroy@~1.0.4
+    - perf: enable strict mode
+  * deps: escape-html@~1.0.3
+    - perf: enable strict mode
+    - perf: optimize string replacement
+    - perf: use faster string coercion
+  * deps: range-parser@~1.0.3
+    - perf: enable strict mode
+
 0.13.0 / 2015-06-16
 ===================
 

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

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/destroy/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/destroy/README.md b/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/destroy/README.md
index 665acb7..6474bc3 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/destroy/README.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/destroy/README.md
@@ -3,20 +3,44 @@
 [![NPM version][npm-image]][npm-url]
 [![Build status][travis-image]][travis-url]
 [![Test coverage][coveralls-image]][coveralls-url]
-[![Dependency Status][david-image]][david-url]
 [![License][license-image]][license-url]
 [![Downloads][downloads-image]][downloads-url]
 [![Gittip][gittip-image]][gittip-url]
 
 Destroy a stream.
 
+This module is meant to ensure a stream gets destroyed, handling different APIs
+and Node.js bugs.
+
 ## API
 
 ```js
 var destroy = require('destroy')
+```
+
+### destroy(stream)
+
+Destroy the given stream. In most cases, this is identical to a simple
+`stream.destroy()` call. The rules are as follows for a given stream:
+
+  1. If the `stream` is an instance of `ReadStream`, then call `stream.destroy()`
+     and add a listener to the `open` event to call `stream.close()` if it is
+     fired. This is for a Node.js bug that will leak a file descriptor if
+     `.destroy()` is called before `open`.
+  2. If the `stream` is not an instance of `Stream`, then nothing happens.
+  3. If the `stream` has a `.destroy()` method, then call it.
+
+The function returns the `stream` passed in as the argument.
+
+## Example
+
+```js
+var destroy = require('destroy')
 
 var fs = require('fs')
 var stream = fs.createReadStream('package.json')
+
+// ... and later
 destroy(stream)
 ```
 
@@ -28,8 +52,6 @@ destroy(stream)
 [travis-url]: https://travis-ci.org/stream-utils/destroy
 [coveralls-image]: https://img.shields.io/coveralls/stream-utils/destroy.svg?style=flat-square
 [coveralls-url]: https://coveralls.io/r/stream-utils/destroy?branch=master
-[david-image]: http://img.shields.io/david/stream-utils/destroy.svg?style=flat-square
-[david-url]: https://david-dm.org/stream-utils/destroy
 [license-image]: http://img.shields.io/npm/l/destroy.svg?style=flat-square
 [license-url]: LICENSE.md
 [downloads-image]: http://img.shields.io/npm/dm/destroy.svg?style=flat-square

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/destroy/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/destroy/index.js b/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/destroy/index.js
index b455217..6da2d26 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/destroy/index.js
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/destroy/index.js
@@ -1,7 +1,34 @@
+/*!
+ * destroy
+ * Copyright(c) 2014 Jonathan Ong
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
 var ReadStream = require('fs').ReadStream
 var Stream = require('stream')
 
-module.exports = function destroy(stream) {
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = destroy
+
+/**
+ * Destroy a stream.
+ *
+ * @param {object} stream
+ * @public
+ */
+
+function destroy(stream) {
   if (stream instanceof ReadStream) {
     return destroyReadStream(stream)
   }
@@ -17,18 +44,30 @@ module.exports = function destroy(stream) {
   return stream
 }
 
+/**
+ * Destroy a ReadStream.
+ *
+ * @param {object} stream
+ * @private
+ */
+
 function destroyReadStream(stream) {
   stream.destroy()
 
   if (typeof stream.close === 'function') {
     // node.js core bug work-around
-    stream.on('open', onopenClose)
+    stream.on('open', onOpenClose)
   }
 
   return stream
 }
 
-function onopenClose() {
+/**
+ * On open handler to close stream.
+ * @private
+ */
+
+function onOpenClose() {
   if (typeof this.fd === 'number') {
     // actually close down the fd
     this.close()

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/destroy/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/destroy/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/destroy/package.json
index b0c16a2..f7f3f16 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/destroy/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/destroy/package.json
@@ -1,7 +1,7 @@
 {
   "name": "destroy",
   "description": "destroy a stream if possible",
-  "version": "1.0.3",
+  "version": "1.0.4",
   "author": {
     "name": "Jonathan Ong",
     "email": "me@jongleberry.com",
@@ -19,8 +19,8 @@
     "url": "git+https://github.com/stream-utils/destroy.git"
   },
   "devDependencies": {
-    "istanbul": "0",
-    "mocha": "1"
+    "istanbul": "0.4.2",
+    "mocha": "2.3.4"
   },
   "scripts": {
     "test": "mocha --reporter spec",
@@ -28,7 +28,8 @@
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot"
   },
   "files": [
-    "index.js"
+    "index.js",
+    "LICENSE"
   ],
   "keywords": [
     "stream",
@@ -38,14 +39,34 @@
     "leak",
     "fd"
   ],
-  "readme": "# Destroy\n\n[![NPM version][npm-image]][npm-url]\n[![Build status][travis-image]][travis-url]\n[![Test coverage][coveralls-image]][coveralls-url]\n[![Dependency Status][david-image]][david-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n[![Gittip][gittip-image]][gittip-url]\n\nDestroy a stream.\n\n## API\n\n```js\nvar destroy = require('destroy')\n\nvar fs = require('fs')\nvar stream = fs.createReadStream('package.json')\ndestroy(stream)\n```\n\n[npm-image]: https://img.shields.io/npm/v/destroy.svg?style=flat-square\n[npm-url]: https://npmjs.org/package/destroy\n[github-tag]: http://img.shields.io/github/tag/stream-utils/destroy.svg?style=flat-square\n[github-url]: https://github.com/stream-utils/destroy/tags\n[travis-image]: https://img.shields.io/travis/stream-utils/destroy.svg?style=flat-square\n[travis-url]: https://travis-ci.org/stream-utils/destroy\n[coveralls-image]: https://img.shields.io/coveralls/stream-utils/de
 stroy.svg?style=flat-square\n[coveralls-url]: https://coveralls.io/r/stream-utils/destroy?branch=master\n[david-image]: http://img.shields.io/david/stream-utils/destroy.svg?style=flat-square\n[david-url]: https://david-dm.org/stream-utils/destroy\n[license-image]: http://img.shields.io/npm/l/destroy.svg?style=flat-square\n[license-url]: LICENSE.md\n[downloads-image]: http://img.shields.io/npm/dm/destroy.svg?style=flat-square\n[downloads-url]: https://npmjs.org/package/destroy\n[gittip-image]: https://img.shields.io/gittip/jonathanong.svg?style=flat-square\n[gittip-url]: https://www.gittip.com/jonathanong/\n",
-  "readmeFilename": "README.md",
+  "gitHead": "86edea01456f5fa1027f6a47250c34c713cbcc3b",
   "bugs": {
     "url": "https://github.com/stream-utils/destroy/issues"
   },
-  "homepage": "https://github.com/stream-utils/destroy#readme",
-  "_id": "destroy@1.0.3",
-  "_shasum": "b433b4724e71fd8551d9885174851c5fc377e2c9",
-  "_resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz",
-  "_from": "destroy@1.0.3"
+  "homepage": "https://github.com/stream-utils/destroy",
+  "_id": "destroy@1.0.4",
+  "_shasum": "978857442c44749e4206613e37946205826abd80",
+  "_from": "destroy@>=1.0.4 <1.1.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "dist": {
+    "shasum": "978857442c44749e4206613e37946205826abd80",
+    "tarball": "http://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/http-errors/node_modules/inherits/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/http-errors/node_modules/inherits/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/http-errors/node_modules/inherits/package.json
index 933382a..93d5078 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/http-errors/node_modules/inherits/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/http-errors/node_modules/inherits/package.json
@@ -22,14 +22,29 @@
   "scripts": {
     "test": "node test"
   },
-  "readme": "Browser-friendly inheritance fully compatible with standard node.js\n[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).\n\nThis package exports standard `inherits` from node.js `util` module in\nnode environment, but also provides alternative browser-friendly\nimplementation through [browser\nfield](https://gist.github.com/shtylman/4339901). Alternative\nimplementation is a literal copy of standard one located in standalone\nmodule to avoid requiring of `util`. It also has a shim for old\nbrowsers with no `Object.create` support.\n\nWhile keeping you sure you are using standard `inherits`\nimplementation in node.js environment, it allows bundlers such as\n[browserify](https://github.com/substack/node-browserify) to not\ninclude full `util` package to your client code if all you need is\njust `inherits` function. It worth, because browser shim for `util`\npackage is large and `inherits` is often the single function you need\nfrom
  it.\n\nIt's recommended to use this package instead of\n`require('util').inherits` for any code that has chances to be used\nnot only in node.js but in browser too.\n\n## usage\n\n```js\nvar inherits = require('inherits');\n// then use exactly as the standard one\n```\n\n## note on version ~1.0\n\nVersion ~1.0 had completely different motivation and is not compatible\nneither with 2.0 nor with standard node.js `inherits`.\n\nIf you are using version ~1.0 and planning to switch to ~2.0, be\ncareful:\n\n* new version uses `super_` instead of `super` for referencing\n  superclass\n* new version overwrites current prototype while old one preserves any\n  existing fields on it\n",
-  "readmeFilename": "README.md",
   "bugs": {
     "url": "https://github.com/isaacs/inherits/issues"
   },
-  "homepage": "https://github.com/isaacs/inherits#readme",
   "_id": "inherits@2.0.1",
+  "dist": {
+    "shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1",
+    "tarball": "http://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+  },
+  "_from": "inherits@>=2.0.1 <2.1.0",
+  "_npmVersion": "1.3.8",
+  "_npmUser": {
+    "name": "isaacs",
+    "email": "i@izs.me"
+  },
+  "maintainers": [
+    {
+      "name": "isaacs",
+      "email": "i@izs.me"
+    }
+  ],
+  "directories": {},
   "_shasum": "b17d08d326b4423e568eff719f91b0b1cbdf69f1",
   "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
-  "_from": "inherits@>=2.0.1 <2.1.0"
+  "readme": "ERROR: No README data found!",
+  "homepage": "https://github.com/isaacs/inherits#readme"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/http-errors/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/http-errors/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/http-errors/package.json
index d26894c..41f845d 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/http-errors/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/http-errors/package.json
@@ -48,14 +48,38 @@
     "LICENSE",
     "README.md"
   ],
-  "readme": "# http-errors\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nCreate HTTP errors for Express, Koa, Connect, etc. with ease.\n\n## Example\n\n```js\nvar createError = require('http-errors');\n\napp.use(function (req, res, next) {\n  if (!req.user) return next(createError(401, 'Please login to view this page.'));\n  next();\n})\n```\n\n## API\n\nThis is the current API, currently extracted from Koa and subject to change.\n\n### Error Properties\n\n- `message`\n- `status` and `statusCode` - the status code of the error, defaulting to `500`\n\n### createError([status], [message], [properties])\n\n```js\nvar err = createError(404, 'This video does not exist!');\n```\n\n- `status: 500` - the status code as a number\n- `message` - the message of the error, defaulting to node's
  text for that status code.\n- `properties` - custom properties to attach to the object\n\n### new createError\\[code || name\\](\\[msg]\\))\n\n```js\nvar err = new createError.NotFound();\n```\n\n- `code` - the status code as a number\n- `name` - the name of the error as a \"bumpy case\", i.e. `NotFound` or `InternalServerError`.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/http-errors.svg?style=flat\n[npm-url]: https://npmjs.org/package/http-errors\n[node-version-image]: https://img.shields.io/node/v/http-errors.svg?style=flat\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/http-errors.svg?style=flat\n[travis-url]: https://travis-ci.org/jshttp/http-errors\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/http-errors.svg?style=flat\n[coveralls-url]: https://coveralls.io/r/jshttp/http-errors\n[downloads-image]: https://img.shields.io/npm/dm/http-errors.svg?style=flat\n[downloads-url]: ht
 tps://npmjs.org/package/http-errors\n",
-  "readmeFilename": "README.md",
+  "gitHead": "89a8502b40d5dd42da2908f265275e2eeb8d0699",
   "bugs": {
     "url": "https://github.com/jshttp/http-errors/issues"
   },
-  "homepage": "https://github.com/jshttp/http-errors#readme",
+  "homepage": "https://github.com/jshttp/http-errors",
   "_id": "http-errors@1.3.1",
   "_shasum": "197e22cdebd4198585e8694ef6786197b91ed942",
+  "_from": "http-errors@>=1.3.1 <1.4.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "egeste",
+      "email": "npm@egeste.net"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "dist": {
+    "shasum": "197e22cdebd4198585e8694ef6786197b91ed942",
+    "tarball": "http://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz",
-  "_from": "http-errors@>=1.3.1 <1.4.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/mime/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/mime/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/mime/package.json
index 3a4a61e..31e7669 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/mime/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/mime/package.json
@@ -40,14 +40,34 @@
     "type": "git"
   },
   "version": "1.3.4",
-  "readme": "# mime\n\nComprehensive MIME type mapping API based on mime-db module.\n\n## Install\n\nInstall with [npm](http://github.com/isaacs/npm):\n\n    npm install mime\n\n## Contributing / Testing\n\n    npm run test\n\n## Command Line\n\n    mime [path_string]\n\nE.g.\n\n    > mime scripts/jquery.js\n    application/javascript\n\n## API - Queries\n\n### mime.lookup(path)\nGet the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.').  E.g.\n\n```js\nvar mime = require('mime');\n\nmime.lookup('/path/to/file.txt');         // => 'text/plain'\nmime.lookup('file.txt');                  // => 'text/plain'\nmime.lookup('.TXT');                      // => 'text/plain'\nmime.lookup('htm');                       // => 'text/html'\n```\n\n### mime.default_type\nSets the mime type returned when `mime.lookup` fails to find the extension 
 searched for. (Default is `application/octet-stream`.)\n\n### mime.extension(type)\nGet the default extension for `type`\n\n```js\nmime.extension('text/html');                 // => 'html'\nmime.extension('application/octet-stream');  // => 'bin'\n```\n\n### mime.charsets.lookup()\n\nMap mime-type to charset\n\n```js\nmime.charsets.lookup('text/plain');        // => 'UTF-8'\n```\n\n(The logic for charset lookups is pretty rudimentary.  Feel free to suggest improvements.)\n\n## API - Defining Custom Types\n\nCustom type mappings can be added on a per-project basis via the following APIs.\n\n### mime.define()\n\nAdd custom mime/extension mappings\n\n```js\nmime.define({\n    'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],\n    'application/x-my-type': ['x-mt', 'x-mtt'],\n    // etc ...\n});\n\nmime.lookup('x-sft');                 // => 'text/x-some-format'\n```\n\nThe first entry in the extensions array is returned by `mime.extension()`. E.g.\n\n```js\nmime.extension('text/x-some-
 format'); // => 'x-sf'\n```\n\n### mime.load(filepath)\n\nLoad mappings from an Apache \".types\" format file\n\n```js\nmime.load('./my_project.types');\n```\nThe .types file format is simple -  See the `types` dir for examples.\n",
-  "readmeFilename": "README.md",
+  "gitHead": "1628f6e0187095009dcef4805c3a49706f137974",
   "bugs": {
     "url": "https://github.com/broofa/node-mime/issues"
   },
-  "homepage": "https://github.com/broofa/node-mime#readme",
+  "homepage": "https://github.com/broofa/node-mime",
   "_id": "mime@1.3.4",
   "_shasum": "115f9e3b6b3daf2959983cb38f149a2d40eb5d53",
+  "_from": "mime@1.3.4",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "broofa",
+    "email": "robert@broofa.com"
+  },
+  "maintainers": [
+    {
+      "name": "broofa",
+      "email": "robert@broofa.com"
+    },
+    {
+      "name": "bentomas",
+      "email": "benjamin@benjaminthomas.org"
+    }
+  ],
+  "dist": {
+    "shasum": "115f9e3b6b3daf2959983cb38f149a2d40eb5d53",
+    "tarball": "http://registry.npmjs.org/mime/-/mime-1.3.4.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
-  "_from": "mime@1.3.4"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/ms/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/ms/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/ms/package.json
index 7b5d86d..253335e 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/ms/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/ms/package.json
@@ -17,14 +17,32 @@
       "ms/index.js": "index.js"
     }
   },
-  "readme": "# ms.js: miliseconds conversion utility\n\n```js\nms('2 days')  // 172800000\nms('1d')      // 86400000\nms('10h')     // 36000000\nms('2.5 hrs') // 9000000\nms('2h')      // 7200000\nms('1m')      // 60000\nms('5s')      // 5000\nms('100')     // 100\n```\n\n```js\nms(60000)             // \"1m\"\nms(2 * 60000)         // \"2m\"\nms(ms('10 hours'))    // \"10h\"\n```\n\n```js\nms(60000, { long: true })             // \"1 minute\"\nms(2 * 60000, { long: true })         // \"2 minutes\"\nms(ms('10 hours'), { long: true })    // \"10 hours\"\n```\n\n- Node/Browser compatible. Published as [`ms`](https://www.npmjs.org/package/ms) in [NPM](http://nodejs.org/download).\n- If a number is supplied to `ms`, a string with a unit is returned.\n- If a string that contains the number is supplied, it returns it as\na number (e.g: it returns `100` for `'100'`).\n- If you pass a string with a number and a valid unit, the number of\nequivalent ms is returned.\n\n## License\n\nMIT\n",
-  "readmeFilename": "README.md",
+  "gitHead": "713dcf26d9e6fd9dbc95affe7eff9783b7f1b909",
   "bugs": {
     "url": "https://github.com/guille/ms.js/issues"
   },
-  "homepage": "https://github.com/guille/ms.js#readme",
+  "homepage": "https://github.com/guille/ms.js",
   "_id": "ms@0.7.1",
+  "scripts": {},
   "_shasum": "9cd13c03adbff25b65effde7ce864ee952017098",
+  "_from": "ms@0.7.1",
+  "_npmVersion": "2.7.5",
+  "_nodeVersion": "0.12.2",
+  "_npmUser": {
+    "name": "rauchg",
+    "email": "rauchg@gmail.com"
+  },
+  "maintainers": [
+    {
+      "name": "rauchg",
+      "email": "rauchg@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "9cd13c03adbff25b65effde7ce864ee952017098",
+    "tarball": "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
-  "_from": "ms@0.7.1"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/statuses/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/statuses/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/statuses/package.json
index 4ebd7ee..81aba72 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/statuses/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/send/node_modules/statuses/package.json
@@ -35,14 +35,50 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks"
   },
-  "readme": "# Statuses\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nHTTP status utility for node.\n\n## API\n\n```js\nvar status = require('statuses');\n```\n\n### var code = status(Integer || String)\n\nIf `Integer` or `String` is a valid HTTP code or status message, then the appropriate `code` will be returned. Otherwise, an error will be thrown.\n\n```js\nstatus(403) // => 'Forbidden'\nstatus('403') // => 'Forbidden'\nstatus('forbidden') // => 403\nstatus('Forbidden') // => 403\nstatus(306) // throws, as it's not supported by node.js\n```\n\n### status.codes\n\nReturns an array of all the status codes as `Integer`s.\n\n### var msg = status[code]\n\nMap of `code` to `status message`. `undefined` for invalid `code`s.\n\n```js\nstatus[404] // => 'Not Found'\n```\n\n### var code 
 = status[msg]\n\nMap of `status message` to `code`. `msg` can either be title-cased or lower-cased. `undefined` for invalid `status message`s.\n\n```js\nstatus['not found'] // => 404\nstatus['Not Found'] // => 404\n```\n\n### status.redirect[code]\n\nReturns `true` if a status code is a valid redirect status.\n\n```js\nstatus.redirect[200] // => undefined\nstatus.redirect[301] // => true\n```\n\n### status.empty[code]\n\nReturns `true` if a status code expects an empty body.\n\n```js\nstatus.empty[200] // => undefined\nstatus.empty[204] // => true\nstatus.empty[304] // => true\n```\n\n### status.retry[code]\n\nReturns `true` if you should retry the rest.\n\n```js\nstatus.retry[501] // => undefined\nstatus.retry[503] // => true\n```\n\n### statuses/codes.json\n\n```js\nvar codes = require('statuses/codes.json');\n```\n\nThis is a JSON file of the status codes\ntaken from `require('http').STATUS_CODES`.\nThis is saved so that codes are consistent even in older node.js versions.\nFor e
 xample, `308` will be added in v0.12.\n\n## Adding Status Codes\n\nThe status codes are primarily sourced from http://www.iana.org/assignments/http-status-codes/http-status-codes-1.csv.\nAdditionally, custom codes are added from http://en.wikipedia.org/wiki/List_of_HTTP_status_codes.\nThese are added manually in the `lib/*.json` files.\nIf you would like to add a status code, add it to the appropriate JSON file.\n\nTo rebuild `codes.json`, run the following:\n\n```bash\n# update src/iana.json\nnpm run update\n# build codes.json\nnpm run build\n```\n\n[npm-image]: https://img.shields.io/npm/v/statuses.svg?style=flat\n[npm-url]: https://npmjs.org/package/statuses\n[node-version-image]: http://img.shields.io/badge/node.js-%3E%3D_0.6-brightgreen.svg?style=flat\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/statuses.svg?style=flat\n[travis-url]: https://travis-ci.org/jshttp/statuses\n[coveralls-image]: https://img.shields.io/coveral
 ls/jshttp/statuses.svg?style=flat\n[coveralls-url]: https://coveralls.io/r/jshttp/statuses?branch=master\n[downloads-image]: http://img.shields.io/npm/dm/statuses.svg?style=flat\n[downloads-url]: https://npmjs.org/package/statuses\n",
-  "readmeFilename": "README.md",
+  "gitHead": "49e6ac7ae4c63ee8186f56cb52112a7eeda28ed7",
   "bugs": {
     "url": "https://github.com/jshttp/statuses/issues"
   },
-  "homepage": "https://github.com/jshttp/statuses#readme",
+  "homepage": "https://github.com/jshttp/statuses",
   "_id": "statuses@1.2.1",
   "_shasum": "dded45cc18256d51ed40aec142489d5c61026d28",
+  "_from": "statuses@>=1.2.1 <1.3.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "shtylman",
+      "email": "shtylman@gmail.com"
+    },
+    {
+      "name": "mscdex",
+      "email": "mscdex@mscdex.net"
+    },
+    {
+      "name": "fishrock123",
+      "email": "fishrock123@rocketmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "dded45cc18256d51ed40aec142489d5c61026d28",
+    "tarball": "http://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz",
-  "_from": "statuses@>=1.2.1 <1.3.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/send/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/send/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/send/package.json
index bfe7697..38fcf6f 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/send/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/send/package.json
@@ -1,7 +1,7 @@
 {
   "name": "send",
   "description": "Better streaming static file server with Range and conditional-GET support",
-  "version": "0.13.0",
+  "version": "0.13.1",
   "author": {
     "name": "TJ Holowaychuk",
     "email": "tj@vision-media.ca"
@@ -15,7 +15,7 @@
   "license": "MIT",
   "repository": {
     "type": "git",
-    "url": "https://github.com/pillarjs/send"
+    "url": "git+https://github.com/pillarjs/send.git"
   },
   "keywords": [
     "static",
@@ -24,23 +24,23 @@
   ],
   "dependencies": {
     "debug": "~2.2.0",
-    "depd": "~1.0.1",
-    "destroy": "1.0.3",
-    "escape-html": "1.0.2",
+    "depd": "~1.1.0",
+    "destroy": "~1.0.4",
+    "escape-html": "~1.0.3",
     "etag": "~1.7.0",
     "fresh": "0.3.0",
     "http-errors": "~1.3.1",
     "mime": "1.3.4",
     "ms": "0.7.1",
     "on-finished": "~2.3.0",
-    "range-parser": "~1.0.2",
+    "range-parser": "~1.0.3",
     "statuses": "~1.2.1"
   },
   "devDependencies": {
     "after": "0.8.1",
-    "istanbul": "0.3.9",
-    "mocha": "2.2.5",
-    "supertest": "1.0.1"
+    "istanbul": "0.4.2",
+    "mocha": "2.3.4",
+    "supertest": "1.1.0"
   },
   "files": [
     "HISTORY.md",
@@ -56,14 +56,14 @@
     "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --check-leaks --reporter spec",
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --check-leaks --reporter dot"
   },
-  "gitHead": "80cfa7f54ce87c75e92619d5bc510406bd69133a",
+  "gitHead": "dbce43fc7102c14b475c25cde918b726063cc991",
   "bugs": {
     "url": "https://github.com/pillarjs/send/issues"
   },
   "homepage": "https://github.com/pillarjs/send",
-  "_id": "send@0.13.0",
-  "_shasum": "518f921aeb0560aec7dcab2990b14cf6f3cce5de",
-  "_from": "send@0.13.0",
+  "_id": "send@0.13.1",
+  "_shasum": "a30d5f4c82c8a9bae9ad00a1d9b1bdbe6f199ed7",
+  "_from": "send@0.13.1",
   "_npmVersion": "1.4.28",
   "_npmUser": {
     "name": "dougwilson",
@@ -80,9 +80,10 @@
     }
   ],
   "dist": {
-    "shasum": "518f921aeb0560aec7dcab2990b14cf6f3cce5de",
-    "tarball": "http://registry.npmjs.org/send/-/send-0.13.0.tgz"
+    "shasum": "a30d5f4c82c8a9bae9ad00a1d9b1bdbe6f199ed7",
+    "tarball": "http://registry.npmjs.org/send/-/send-0.13.1.tgz"
   },
   "directories": {},
-  "_resolved": "https://registry.npmjs.org/send/-/send-0.13.0.tgz"
+  "_resolved": "https://registry.npmjs.org/send/-/send-0.13.1.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/serve-static/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/serve-static/HISTORY.md b/node_modules/cordova-serve/node_modules/express/node_modules/serve-static/HISTORY.md
index 744b6f1..da30741 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/serve-static/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/serve-static/HISTORY.md
@@ -1,3 +1,22 @@
+1.10.2 / 2016-01-19
+===================
+
+  * deps: parseurl@~1.3.1
+    - perf: enable strict mode
+
+1.10.1 / 2016-01-16
+===================
+
+  * deps: escape-html@~1.0.3
+    - perf: enable strict mode
+    - perf: optimize string replacement
+    - perf: use faster string coercion
+  * deps: send@0.13.1
+    - deps: depd@~1.1.0
+    - deps: destroy@~1.0.4
+    - deps: escape-html@~1.0.3
+    - deps: range-parser@~1.0.3
+
 1.10.0 / 2015-06-17
 ===================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/serve-static/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/serve-static/README.md b/node_modules/cordova-serve/node_modules/express/node_modules/serve-static/README.md
index 1a7b054..62104b1 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/serve-static/README.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/serve-static/README.md
@@ -38,12 +38,13 @@ disk. If `root` is specified, only the dotfiles above the root are
 checked (i.e. the root itself can be within a dotfile when set
 to "deny").
 
-The default value is `'ignore'`.
-
   - `'allow'` No special treatment for dotfiles.
   - `'deny'` Deny a request for a dotfile and 403/`next()`.
   - `'ignore'` Pretend like the dotfile does not exist and 404/`next()`.
 
+The default value is similar to `'ignore'`, with the exception that this
+default will not ignore the files within a directory that begins with a dot.
+
 ##### etag
 
 Enable or disable etag generation, defaults to true.


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[12/14] cordova-browser git commit: CB-10788 Updated checked in node_modules

Posted by an...@apache.org.
CB-10788 Updated checked in node_modules


Project: http://git-wip-us.apache.org/repos/asf/cordova-browser/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-browser/commit/55abeab9
Tree: http://git-wip-us.apache.org/repos/asf/cordova-browser/tree/55abeab9
Diff: http://git-wip-us.apache.org/repos/asf/cordova-browser/diff/55abeab9

Branch: refs/heads/master
Commit: 55abeab9ad00e0fdf1df724f1990103c70fca001
Parents: b54c7e0
Author: Vladimir Kotikov <ko...@gmail.com>
Authored: Fri Mar 4 13:52:56 2016 +0300
Committer: Vladimir Kotikov <ko...@gmail.com>
Committed: Fri Mar 4 15:32:55 2016 +0300

----------------------------------------------------------------------
 node_modules/.bin/nopt                          |   16 +-
 node_modules/.bin/nopt.cmd                      |    7 +
 node_modules/.bin/shjs                          |   16 +-
 node_modules/.bin/shjs.cmd                      |    7 +
 .../adm-zip/.idea/scopes/scope_settings.xml     |    5 -
 node_modules/adm-zip/MIT-LICENSE.txt            |   21 -
 node_modules/adm-zip/adm-zip.js                 |   93 +-
 node_modules/adm-zip/package.json               |   35 +-
 .../adm-zip/test/assets/attributes_test.zip     |  Bin 4189 -> 0 bytes
 .../attributes_test/New folder/hidden.txt       |   17 -
 .../New folder/hidden_readonly.txt              |   17 -
 .../attributes_test/New folder/readonly.txt     |   17 -
 .../attributes_test/New folder/somefile.txt     |   17 -
 .../attributes_test/asd/New Text Document.txt   |    0
 .../test/assets/attributes_test/blank file.txt  |    0
 node_modules/adm-zip/test/assets/fast.zip       |  Bin 4194 -> 0 bytes
 node_modules/adm-zip/test/assets/fastest.zip    |  Bin 4194 -> 0 bytes
 node_modules/adm-zip/test/assets/linux_arc.zip  |  Bin 415 -> 0 bytes
 node_modules/adm-zip/test/assets/maximum.zip    |  Bin 4086 -> 0 bytes
 node_modules/adm-zip/test/assets/normal.zip     |  Bin 4170 -> 0 bytes
 node_modules/adm-zip/test/assets/store.zip      |  Bin 5878 -> 0 bytes
 node_modules/adm-zip/test/assets/ultra.zip      |  Bin 4086 -> 0 bytes
 node_modules/adm-zip/test/index.js              |    5 -
 node_modules/adm-zip/util/constants.js          |   33 +-
 node_modules/adm-zip/util/utils.js              |   58 +-
 node_modules/adm-zip/zipEntry.js                |   72 +-
 node_modules/adm-zip/zipFile.js                 |    4 +-
 .../chalk/node_modules/ansi-styles/index.js     |   78 +-
 .../node_modules/color-convert/CHANGELOG.md     |   54 +
 .../node_modules/color-convert/LICENSE          |   21 +
 .../node_modules/color-convert/README.md        |   62 +
 .../node_modules/color-convert/conversions.js   |  594 +++++
 .../node_modules/color-convert/css-keywords.js  |  151 ++
 .../node_modules/color-convert/index.js         |   75 +
 .../node_modules/color-convert/package.json     |   84 +
 .../node_modules/color-convert/route.js         |   98 +
 .../chalk/node_modules/ansi-styles/package.json |   49 +-
 .../chalk/node_modules/ansi-styles/readme.md    |   44 +-
 .../node_modules/escape-string-regexp/index.js  |    2 +-
 .../escape-string-regexp/package.json           |   50 +-
 .../node_modules/escape-string-regexp/readme.md |    8 +-
 .../node_modules/ansi-regex/package.json        |   29 +-
 .../chalk/node_modules/has-ansi/package.json    |   29 +-
 .../node_modules/ansi-regex/package.json        |   29 +-
 .../chalk/node_modules/strip-ansi/package.json  |   50 +-
 .../chalk/node_modules/strip-ansi/readme.md     |   10 +-
 .../node_modules/supports-color/package.json    |   29 +-
 .../node_modules/chalk/package.json             |   32 +-
 .../node_modules/compression/HISTORY.md         |    9 +
 .../node_modules/compression/index.js           |    2 +-
 .../compression/node_modules/accepts/HISTORY.md |    6 +
 .../accepts/node_modules/mime-types/HISTORY.md  |   20 +
 .../accepts/node_modules/mime-types/README.md   |    2 +-
 .../mime-types/node_modules/mime-db/HISTORY.md  |   46 +
 .../mime-types/node_modules/mime-db/README.md   |    2 +-
 .../mime-types/node_modules/mime-db/db.json     |  107 +-
 .../node_modules/mime-db/package.json           |   51 +-
 .../node_modules/mime-types/package.json        |   49 +-
 .../node_modules/negotiator/package.json        |   32 +-
 .../node_modules/accepts/package.json           |   60 +-
 .../compression/node_modules/bytes/History.md   |    6 +
 .../compression/node_modules/bytes/LICENSE      |   23 +
 .../compression/node_modules/bytes/Readme.md    |   16 +
 .../compression/node_modules/bytes/index.js     |   28 +-
 .../compression/node_modules/bytes/package.json |   42 +-
 .../node_modules/compressible/HISTORY.md        |    5 +
 .../node_modules/compressible/README.md         |   17 +-
 .../node_modules/compressible/index.js          |    2 +-
 .../node_modules/mime-db/HISTORY.md             |   46 +
 .../compressible/node_modules/mime-db/README.md |    2 +-
 .../compressible/node_modules/mime-db/db.json   |  107 +-
 .../node_modules/mime-db/package.json           |   51 +-
 .../node_modules/compressible/package.json      |   64 +-
 .../debug/node_modules/ms/package.json          |   26 +-
 .../compression/node_modules/debug/package.json |   30 +-
 .../node_modules/on-headers/package.json        |   28 +-
 .../compression/node_modules/vary/package.json  |   32 +-
 .../node_modules/compression/package.json       |   66 +-
 .../node_modules/express/History.md             |   37 +
 .../node_modules/express/Readme.md              |   20 +-
 .../node_modules/express/lib/application.js     |    2 +-
 .../accepts/node_modules/mime-types/HISTORY.md  |   20 +
 .../accepts/node_modules/mime-types/README.md   |    2 +-
 .../mime-types/node_modules/mime-db/HISTORY.md  |   46 +
 .../mime-types/node_modules/mime-db/README.md   |    2 +-
 .../mime-types/node_modules/mime-db/db.json     |  107 +-
 .../node_modules/mime-db/package.json           |   51 +-
 .../node_modules/mime-types/package.json        |   49 +-
 .../node_modules/negotiator/package.json        |   32 +-
 .../express/node_modules/accepts/package.json   |   48 +-
 .../node_modules/array-flatten/package.json     |   23 +-
 .../node_modules/content-disposition/HISTORY.md |    5 +
 .../node_modules/content-disposition/README.md  |    2 +-
 .../node_modules/content-disposition/index.js   |    2 +
 .../content-disposition/package.json            |   36 +-
 .../node_modules/content-type/package.json      |   24 +-
 .../node_modules/cookie-signature/package.json  |   29 +-
 .../express/node_modules/cookie/HISTORY.md      |   72 +
 .../express/node_modules/cookie/LICENSE         |    1 +
 .../express/node_modules/cookie/index.js        |   48 +-
 .../express/node_modules/cookie/package.json    |   53 +-
 .../debug/node_modules/ms/package.json          |   26 +-
 .../express/node_modules/debug/package.json     |   31 +-
 .../express/node_modules/depd/History.md        |    9 +
 .../express/node_modules/depd/LICENSE           |    2 +-
 .../express/node_modules/depd/Readme.md         |    7 +
 .../express/node_modules/depd/index.js          |   12 +-
 .../node_modules/depd/lib/browser/index.js      |   79 +
 .../depd/lib/compat/buffer-concat.js            |    2 +
 .../depd/lib/compat/callsite-tostring.js        |    2 +
 .../depd/lib/compat/event-listener-count.js     |   22 +
 .../node_modules/depd/lib/compat/index.js       |   17 +-
 .../express/node_modules/depd/package.json      |   33 +-
 .../express/node_modules/escape-html/LICENSE    |    2 +
 .../express/node_modules/escape-html/Readme.md  |   32 +-
 .../express/node_modules/escape-html/index.js   |   65 +-
 .../node_modules/escape-html/package.json       |   45 +-
 .../express/node_modules/etag/package.json      |   24 +-
 .../node_modules/finalhandler/HISTORY.md        |    8 +
 .../node_modules/unpipe/package.json            |   24 +-
 .../node_modules/finalhandler/package.json      |   58 +-
 .../express/node_modules/fresh/package.json     |   36 +-
 .../node_modules/merge-descriptors/HISTORY.md   |   21 +
 .../node_modules/merge-descriptors/LICENSE      |    1 +
 .../node_modules/merge-descriptors/README.md    |   14 +
 .../node_modules/merge-descriptors/index.js     |    3 +
 .../node_modules/merge-descriptors/package.json |  122 +-
 .../express/node_modules/methods/HISTORY.md     |    5 +
 .../express/node_modules/methods/LICENSE        |    1 +
 .../express/node_modules/methods/README.md      |   16 +-
 .../express/node_modules/methods/index.js       |   39 +-
 .../express/node_modules/methods/package.json   |   54 +-
 .../node_modules/ee-first/package.json          |   28 +-
 .../node_modules/on-finished/package.json       |   28 +-
 .../express/node_modules/parseurl/.npmignore    |    4 -
 .../express/node_modules/parseurl/HISTORY.md    |    5 +
 .../express/node_modules/parseurl/README.md     |   21 +-
 .../express/node_modules/parseurl/index.js      |    2 +
 .../express/node_modules/parseurl/package.json  |   73 +-
 .../node_modules/path-to-regexp/package.json    |  151 +-
 .../express/node_modules/proxy-addr/HISTORY.md  |   14 +
 .../express/node_modules/proxy-addr/index.js    |    2 +
 .../node_modules/forwarded/package.json         |   24 +-
 .../node_modules/ipaddr.js/.travis.yml          |   10 +
 .../proxy-addr/node_modules/ipaddr.js/README.md |    2 +-
 .../node_modules/ipaddr.js/bower.json           |   29 +
 .../node_modules/ipaddr.js/ipaddr.min.js        |    2 +-
 .../node_modules/ipaddr.js/lib/ipaddr.js        |   44 +-
 .../node_modules/ipaddr.js/package.json         |   37 +-
 .../node_modules/ipaddr.js/src/ipaddr.coffee    |   36 +-
 .../ipaddr.js/test/ipaddr.test.coffee           |   28 +-
 .../node_modules/proxy-addr/package.json        |   56 +-
 .../node_modules/range-parser/HISTORY.md        |    5 +
 .../express/node_modules/range-parser/README.md |   47 +-
 .../express/node_modules/range-parser/index.js  |   20 +-
 .../node_modules/range-parser/package.json      |   55 +-
 .../express/node_modules/send/HISTORY.md        |   15 +
 .../send/node_modules/destroy/LICENSE           |   22 +
 .../send/node_modules/destroy/README.md         |   28 +-
 .../send/node_modules/destroy/index.js          |   45 +-
 .../send/node_modules/destroy/package.json      |   43 +-
 .../node_modules/inherits/package.json          |   23 +-
 .../send/node_modules/http-errors/package.json  |   32 +-
 .../send/node_modules/mime/package.json         |   28 +-
 .../send/node_modules/ms/package.json           |   26 +-
 .../send/node_modules/statuses/package.json     |   44 +-
 .../express/node_modules/send/package.json      |   33 +-
 .../node_modules/serve-static/HISTORY.md        |   19 +
 .../express/node_modules/serve-static/README.md |    5 +-
 .../node_modules/serve-static/package.json      |   64 +-
 .../express/node_modules/type-is/HISTORY.md     |   20 +
 .../express/node_modules/type-is/README.md      |    6 +-
 .../express/node_modules/type-is/index.js       |    2 +-
 .../node_modules/media-typer/package.json       |   24 +-
 .../type-is/node_modules/mime-types/HISTORY.md  |   20 +
 .../type-is/node_modules/mime-types/README.md   |    2 +-
 .../mime-types/node_modules/mime-db/HISTORY.md  |   46 +
 .../mime-types/node_modules/mime-db/README.md   |    2 +-
 .../mime-types/node_modules/mime-db/db.json     |  107 +-
 .../node_modules/mime-db/package.json           |   51 +-
 .../node_modules/mime-types/package.json        |   49 +-
 .../express/node_modules/type-is/package.json   |   46 +-
 .../node_modules/utils-merge/package.json       |   23 +-
 .../express/node_modules/vary/package.json      |   32 +-
 .../node_modules/express/package.json           |   76 +-
 node_modules/cordova-serve/package.json         |   26 +-
 node_modules/nopt/.travis.yml                   |    9 +
 node_modules/nopt/LICENSE                       |   32 +-
 node_modules/nopt/README.md                     |   22 +-
 node_modules/nopt/lib/nopt.js                   |    3 +-
 .../nopt/node_modules/abbrev/.npmignore         |    4 +
 .../nopt/node_modules/abbrev/.travis.yml        |    5 +
 node_modules/nopt/node_modules/abbrev/LICENSE   |   32 +-
 .../nopt/node_modules/abbrev/package.json       |   43 +-
 node_modules/nopt/node_modules/abbrev/test.js   |    4 +-
 node_modules/nopt/package.json                  |   50 +-
 node_modules/nopt/test/basic.js                 |   22 +
 node_modules/q/package.json                     |    2 +-
 node_modules/shelljs/.documentup.json           |    6 -
 node_modules/shelljs/.idea/.name                |    1 +
 node_modules/shelljs/.idea/encodings.xml        |    6 +
 .../inspectionProfiles/Project_Default.xml      |    7 +
 .../inspectionProfiles/profiles_settings.xml    |    7 +
 .../shelljs/.idea/jsLibraryMappings.xml         |    6 +
 .../.idea/libraries/shelljs_node_modules.xml    |   14 +
 node_modules/shelljs/.idea/misc.xml             |   28 +
 node_modules/shelljs/.idea/modules.xml          |    8 +
 node_modules/shelljs/.idea/shelljs.iml          |    9 +
 node_modules/shelljs/.idea/vcs.xml              |    6 +
 node_modules/shelljs/.idea/workspace.xml        |  764 ++++++
 node_modules/shelljs/.npmignore                 |   10 +-
 node_modules/shelljs/.travis.yml                |    5 -
 node_modules/shelljs/LICENSE                    |    2 +-
 node_modules/shelljs/MAINTAINERS                |    3 +
 node_modules/shelljs/README.md                  |  331 ++-
 node_modules/shelljs/bin/shjs                   |    8 +-
 node_modules/shelljs/build/output.js            | 2411 ++++++++++++++++++
 node_modules/shelljs/jshint.json                |    4 -
 node_modules/shelljs/make.js                    |   39 +-
 node_modules/shelljs/package.json               |   65 +-
 node_modules/shelljs/scripts/docs.js            |   15 -
 node_modules/shelljs/scripts/generate-docs.js   |   26 +
 node_modules/shelljs/scripts/run-tests.js       |   13 +-
 node_modules/shelljs/shell.js                   | 1915 +-------------
 node_modules/shelljs/src/cat.js                 |   40 +
 node_modules/shelljs/src/cd.js                  |   28 +
 node_modules/shelljs/src/chmod.js               |  215 ++
 node_modules/shelljs/src/common.js              |  257 ++
 node_modules/shelljs/src/cp.js                  |  210 ++
 node_modules/shelljs/src/dirs.js                |  191 ++
 node_modules/shelljs/src/echo.js                |   20 +
 node_modules/shelljs/src/error.js               |   10 +
 node_modules/shelljs/src/exec.js                |  249 ++
 node_modules/shelljs/src/find.js                |   51 +
 node_modules/shelljs/src/grep.js                |   52 +
 node_modules/shelljs/src/ln.js                  |   69 +
 node_modules/shelljs/src/ls.js                  |  168 ++
 node_modules/shelljs/src/mkdir.js               |   68 +
 node_modules/shelljs/src/mv.js                  |   82 +
 node_modules/shelljs/src/popd.js                |    1 +
 node_modules/shelljs/src/pushd.js               |    1 +
 node_modules/shelljs/src/pwd.js                 |   11 +
 node_modules/shelljs/src/rm.js                  |  163 ++
 node_modules/shelljs/src/sed.js                 |   64 +
 node_modules/shelljs/src/set.js                 |   49 +
 node_modules/shelljs/src/tempdir.js             |   57 +
 node_modules/shelljs/src/test.js                |   85 +
 node_modules/shelljs/src/to.js                  |   30 +
 node_modules/shelljs/src/toEnd.js               |   30 +
 node_modules/shelljs/src/touch.js               |  109 +
 node_modules/shelljs/src/which.js               |   98 +
 node_modules/shelljs/test/.npmignore            |    2 -
 node_modules/shelljs/test/cat.js                |   57 -
 node_modules/shelljs/test/cd.js                 |   64 -
 node_modules/shelljs/test/chmod.js              |   81 -
 node_modules/shelljs/test/config.js             |   50 -
 node_modules/shelljs/test/cp.js                 |  143 --
 node_modules/shelljs/test/dirs.js               |   37 -
 node_modules/shelljs/test/echo.js               |   50 -
 node_modules/shelljs/test/env.js                |   19 -
 node_modules/shelljs/test/exec.js               |  109 -
 node_modules/shelljs/test/find.js               |   56 -
 node_modules/shelljs/test/grep.js               |   59 -
 node_modules/shelljs/test/ls.js                 |  202 --
 node_modules/shelljs/test/make.js               |   20 -
 node_modules/shelljs/test/mkdir.js              |   79 -
 node_modules/shelljs/test/mv.js                 |  130 -
 node_modules/shelljs/test/popd.js               |  118 -
 node_modules/shelljs/test/pushd.js              |  228 --
 node_modules/shelljs/test/pwd.js                |   28 -
 node_modules/shelljs/test/resources/a.txt       |   11 -
 .../test/resources/chmod/a/b/c/.npmignore       |    0
 .../test/resources/chmod/b/a/b/.npmignore       |    0
 .../test/resources/chmod/c/a/b/.npmignore       |    0
 node_modules/shelljs/test/resources/chmod/file1 |    2 -
 node_modules/shelljs/test/resources/cp/a        |    1 -
 node_modules/shelljs/test/resources/cp/b        |    1 -
 node_modules/shelljs/test/resources/cp/dir_a/z  |    1 -
 .../test/resources/cp/dir_b/dir_b_a/dir_b_a_a/z |    1 -
 .../test/resources/external/node_script.js      |    2 -
 node_modules/shelljs/test/resources/file1       |    1 -
 node_modules/shelljs/test/resources/file1.js    |    1 -
 node_modules/shelljs/test/resources/file1.txt   |    1 -
 node_modules/shelljs/test/resources/file2       |    1 -
 node_modules/shelljs/test/resources/file2.js    |    1 -
 node_modules/shelljs/test/resources/file2.txt   |    1 -
 .../shelljs/test/resources/find/.hidden         |    1 -
 node_modules/shelljs/test/resources/find/a      |    1 -
 node_modules/shelljs/test/resources/find/b      |    1 -
 .../shelljs/test/resources/find/dir1/a_dir1     |    1 -
 .../test/resources/find/dir1/dir11/a_dir11      |    1 -
 .../shelljs/test/resources/find/dir2/a_dir1     |    1 -
 .../shelljs/test/resources/issue44/main.js      |    1 -
 .../shelljs/test/resources/ls/.hidden_dir/nada  |    1 -
 .../shelljs/test/resources/ls/.hidden_file      |    1 -
 .../test/resources/ls/a_dir/.hidden_dir/nada    |    1 -
 .../shelljs/test/resources/ls/a_dir/b_dir/z     |    1 -
 .../shelljs/test/resources/ls/a_dir/nada        |    1 -
 node_modules/shelljs/test/resources/ls/file1    |    1 -
 node_modules/shelljs/test/resources/ls/file1.js |    1 -
 node_modules/shelljs/test/resources/ls/file2    |    1 -
 node_modules/shelljs/test/resources/ls/file2.js |    1 -
 .../filename(with)[chars$]^that.must+be-escaped |    1 -
 .../shelljs/test/resources/pushd/a/dummy        |    1 -
 .../shelljs/test/resources/pushd/b/c/dummy      |    1 -
 node_modules/shelljs/test/rm.js                 |  183 --
 node_modules/shelljs/test/sed.js                |   58 -
 node_modules/shelljs/test/tempdir.js            |   27 -
 node_modules/shelljs/test/test.js               |   91 -
 node_modules/shelljs/test/to.js                 |   39 -
 node_modules/shelljs/test/which.js              |   38 -
 package.json                                    |    6 +-
 312 files changed, 11631 insertions(+), 4932 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/.bin/nopt
----------------------------------------------------------------------
diff --git a/node_modules/.bin/nopt b/node_modules/.bin/nopt
index 6b6566e..25995f3 120000
--- a/node_modules/.bin/nopt
+++ b/node_modules/.bin/nopt
@@ -1 +1,15 @@
-../nopt/bin/nopt.js
\ No newline at end of file
+#!/bin/sh
+basedir=`dirname "$0"`
+
+case `uname` in
+    *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../nopt/bin/nopt.js" "$@"
+  ret=$?
+else 
+  node  "$basedir/../nopt/bin/nopt.js" "$@"
+  ret=$?
+fi
+exit $ret

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/.bin/nopt.cmd
----------------------------------------------------------------------
diff --git a/node_modules/.bin/nopt.cmd b/node_modules/.bin/nopt.cmd
new file mode 100644
index 0000000..1626454
--- /dev/null
+++ b/node_modules/.bin/nopt.cmd
@@ -0,0 +1,7 @@
+@IF EXIST "%~dp0\node.exe" (
+  "%~dp0\node.exe"  "%~dp0\..\nopt\bin\nopt.js" %*
+) ELSE (
+  @SETLOCAL
+  @SET PATHEXT=%PATHEXT:;.JS;=;%
+  node  "%~dp0\..\nopt\bin\nopt.js" %*
+)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/.bin/shjs
----------------------------------------------------------------------
diff --git a/node_modules/.bin/shjs b/node_modules/.bin/shjs
index a044997..9908675 120000
--- a/node_modules/.bin/shjs
+++ b/node_modules/.bin/shjs
@@ -1 +1,15 @@
-../shelljs/bin/shjs
\ No newline at end of file
+#!/bin/sh
+basedir=`dirname "$0"`
+
+case `uname` in
+    *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  "$basedir/node"  "$basedir/../shelljs/bin/shjs" "$@"
+  ret=$?
+else 
+  node  "$basedir/../shelljs/bin/shjs" "$@"
+  ret=$?
+fi
+exit $ret

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/.bin/shjs.cmd
----------------------------------------------------------------------
diff --git a/node_modules/.bin/shjs.cmd b/node_modules/.bin/shjs.cmd
new file mode 100644
index 0000000..3d98b0b
--- /dev/null
+++ b/node_modules/.bin/shjs.cmd
@@ -0,0 +1,7 @@
+@IF EXIST "%~dp0\node.exe" (
+  "%~dp0\node.exe"  "%~dp0\..\shelljs\bin\shjs" %*
+) ELSE (
+  @SETLOCAL
+  @SET PATHEXT=%PATHEXT:;.JS;=;%
+  node  "%~dp0\..\shelljs\bin\shjs" %*
+)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/.idea/scopes/scope_settings.xml
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/.idea/scopes/scope_settings.xml b/node_modules/adm-zip/.idea/scopes/scope_settings.xml
deleted file mode 100644
index 922003b..0000000
--- a/node_modules/adm-zip/.idea/scopes/scope_settings.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<component name="DependencyValidationManager">
-  <state>
-    <option name="SKIP_IMPORT_STATEMENTS" value="false" />
-  </state>
-</component>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/MIT-LICENSE.txt
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/MIT-LICENSE.txt b/node_modules/adm-zip/MIT-LICENSE.txt
deleted file mode 100644
index 0124c8a..0000000
--- a/node_modules/adm-zip/MIT-LICENSE.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-Copyright (c) 2012 Another-D-Mention Software and other contributors, 
-http://www.another-d-mention.ro/
-
-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.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/adm-zip.js
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/adm-zip.js b/node_modules/adm-zip/adm-zip.js
index 0a0c518..9ba4bd0 100644
--- a/node_modules/adm-zip/adm-zip.js
+++ b/node_modules/adm-zip/adm-zip.js
@@ -186,7 +186,7 @@ module.exports = function(/*String*/input) {
          *
          * @param localPath
          */
-        addLocalFile : function(/*String*/localPath, /*String*/zipPath) {
+        addLocalFile : function(/*String*/localPath, /*String*/zipPath, /*String*/zipName) {
              if (fs.existsSync(localPath)) {
                 if(zipPath){
                     zipPath=zipPath.split("\\").join("/");
@@ -197,8 +197,12 @@ module.exports = function(/*String*/input) {
                     zipPath="";
                 }
                  var p = localPath.split("\\").join("/").split("/").pop();
-
-                 this.addFile(zipPath+p, fs.readFileSync(localPath), "", 0)
+                
+                 if(zipName){
+                    this.addFile(zipPath+zipName, fs.readFileSync(localPath), "", 0)
+                 }else{
+                    this.addFile(zipPath+p, fs.readFileSync(localPath), "", 0)
+                 }
              } else {
                  throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath);
              }
@@ -208,8 +212,21 @@ module.exports = function(/*String*/input) {
          * Adds a local directory and all its nested files and directories to the archive
          *
          * @param localPath
+         * @param zipPath optional path inside zip
+         * @param filter optional RegExp or Function if files match will
+         *               be included.
          */
-        addLocalFolder : function(/*String*/localPath, /*String*/zipPath) {
+        addLocalFolder : function(/*String*/localPath, /*String*/zipPath, /*RegExp|Function*/filter) {
+            if (filter === undefined) {
+              filter = function() { return true; };
+            } else if (filter instanceof RegExp) {
+              filter = function(filter) {
+                return function(filename) {
+                  return filter.test(filename);
+                }
+              }(filter);
+            }
+
             if(zipPath){
                 zipPath=zipPath.split("\\").join("/");
                 if(zipPath.charAt(zipPath.length - 1) != "/"){
@@ -219,6 +236,7 @@ module.exports = function(/*String*/input) {
                 zipPath="";
             }
 			localPath = localPath.split("\\").join("/"); //windows fix
+            localPath = pth.normalize(localPath);
             if (localPath.charAt(localPath.length - 1) != "/")
                 localPath += "/";
 
@@ -229,11 +247,13 @@ module.exports = function(/*String*/input) {
 
                 if (items.length) {
                     items.forEach(function(path) {
-						var p = path.split("\\").join("/").replace(localPath, ""); //windows fix
-                        if (p.charAt(p.length - 1) !== "/") {
-                            self.addFile(zipPath+p, fs.readFileSync(path), "", 0)
-                        } else {
-                            self.addFile(zipPath+p, new Buffer(0), "", 0)
+						var p = path.split("\\").join("/").replace( new RegExp(localPath, 'i'), ""); //windows fix
+                        if (filter(p)) {
+                            if (p.charAt(p.length - 1) !== "/") {
+                                self.addFile(zipPath+p, fs.readFileSync(path), "", 0)
+                            } else {
+                                self.addFile(zipPath+p, new Buffer(0), "", 0)
+                            }
                         }
                     });
                 }
@@ -328,7 +348,7 @@ module.exports = function(/*String*/input) {
             var content = item.getData();
             if (!content) throw Utils.Errors.CANT_EXTRACT_FILE;
 
-            if (fs.existsSync(targetPath) && !overwrite) {
+            if (fs.existsSync(target) && !overwrite) {
                 throw Utils.Errors.CANT_OVERRIDE;
             }
             Utils.writeFileTo(target, content, overwrite);
@@ -363,6 +383,56 @@ module.exports = function(/*String*/input) {
         },
 
         /**
+         * Asynchronous extractAllTo
+         *
+         * @param targetPath Target location
+         * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
+         *                  Default is FALSE
+         * @param callback
+         */
+        extractAllToAsync : function(/*String*/targetPath, /*Boolean*/overwrite, /*Function*/callback) {
+            overwrite = overwrite || false;
+            if (!_zip) {
+                callback(new Error(Utils.Errors.NO_ZIP));
+                return;
+            }
+
+            var entries = _zip.entries;
+            var i = entries.length; 
+            entries.forEach(function(entry) {
+                if(i <= 0) return; // Had an error already
+
+                if (entry.isDirectory) {
+                    Utils.makeDir(pth.resolve(targetPath, entry.entryName.toString()));
+                    if(--i == 0)
+                        callback(undefined);
+                    return;
+                }
+                entry.getDataAsync(function(content) {
+                    if(i <= 0) return;
+                    if (!content) {
+                        i = 0;
+                        callback(new Error(Utils.Errors.CANT_EXTRACT_FILE + "2"));
+                        return;
+                    }
+                    Utils.writeFileToAsync(pth.resolve(targetPath, entry.entryName.toString()), content, overwrite, function(succ) {
+                        if(i <= 0) return;
+
+                        if(!succ) {
+                            i = 0;
+                            callback(new Error('Unable to write'));
+                            return;
+                        }
+
+                        if(--i == 0)
+                            callback(undefined);
+                    });
+                    
+                });
+            })
+        },
+
+        /**
          * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip
          *
          * @param targetFileName
@@ -383,7 +453,8 @@ module.exports = function(/*String*/input) {
 
             var zipData = _zip.compressToBuffer();
             if (zipData) {
-                Utils.writeFileTo(targetFileName, zipData, true);
+                var ok = Utils.writeFileTo(targetFileName, zipData, true);
+                if (typeof callback == 'function') callback(!ok? new Error("failed"): null, "");
             }
         },
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/package.json
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/package.json b/node_modules/adm-zip/package.json
index 35c8b7c..a5d8c91 100644
--- a/node_modules/adm-zip/package.json
+++ b/node_modules/adm-zip/package.json
@@ -1,6 +1,6 @@
 {
   "name": "adm-zip",
-  "version": "0.4.4",
+  "version": "0.4.7",
   "description": "A Javascript implementation of zip for nodejs. Allows user to create or extract zip files both in memory or to/from disk",
   "keywords": [
     "zip",
@@ -24,6 +24,14 @@
       "url": "https://raw.github.com/cthackers/adm-zip/master/MIT-LICENSE.txt"
     }
   ],
+  "files": [
+    "adm-zip.js",
+    "headers",
+    "methods",
+    "util",
+    "zipEntry.js",
+    "zipFile.js"
+  ],
   "main": "adm-zip.js",
   "repository": {
     "type": "git",
@@ -32,13 +40,14 @@
   "engines": {
     "node": ">=0.3.0"
   },
-  "_id": "adm-zip@0.4.4",
-  "dist": {
-    "shasum": "a61ed5ae6905c3aea58b3a657d25033091052736",
-    "tarball": "http://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz"
-  },
-  "_from": "adm-zip@0.4.4",
-  "_npmVersion": "1.3.24",
+  "gitHead": "6708a3e5788ff9e67ddba288397f7788a5c02855",
+  "_id": "adm-zip@0.4.7",
+  "scripts": {},
+  "_shasum": "8606c2cbf1c426ce8c8ec00174447fd49b6eafc1",
+  "_from": "adm-zip@>=0.4.7 <0.5.0",
+  "_resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz",
+  "_npmVersion": "2.5.1",
+  "_nodeVersion": "0.12.0",
   "_npmUser": {
     "name": "cthackers",
     "email": "iacob.campia@gmail.com"
@@ -46,10 +55,12 @@
   "maintainers": [
     {
       "name": "cthackers",
-      "email": "iacob.campia@gmail.com"
+      "email": "sy@another-d-mention.ro"
     }
   ],
-  "directories": {},
-  "_shasum": "a61ed5ae6905c3aea58b3a657d25033091052736",
-  "_resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz"
+  "dist": {
+    "shasum": "8606c2cbf1c426ce8c8ec00174447fd49b6eafc1",
+    "tarball": "http://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz"
+  },
+  "directories": {}
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/test/assets/attributes_test.zip
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/test/assets/attributes_test.zip b/node_modules/adm-zip/test/assets/attributes_test.zip
deleted file mode 100644
index d57bfc0..0000000
Binary files a/node_modules/adm-zip/test/assets/attributes_test.zip and /dev/null differ

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt b/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt
deleted file mode 100644
index e14c371..0000000
--- a/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden.txt	
+++ /dev/null
@@ -1,17 +0,0 @@
-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.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt b/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt
deleted file mode 100644
index e14c371..0000000
--- a/node_modules/adm-zip/test/assets/attributes_test/New folder/hidden_readonly.txt	
+++ /dev/null
@@ -1,17 +0,0 @@
-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.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt b/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt
deleted file mode 100644
index e14c371..0000000
--- a/node_modules/adm-zip/test/assets/attributes_test/New folder/readonly.txt	
+++ /dev/null
@@ -1,17 +0,0 @@
-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.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt b/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt
deleted file mode 100644
index e14c371..0000000
--- a/node_modules/adm-zip/test/assets/attributes_test/New folder/somefile.txt	
+++ /dev/null
@@ -1,17 +0,0 @@
-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.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/test/assets/attributes_test/asd/New Text Document.txt
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/test/assets/attributes_test/asd/New Text Document.txt b/node_modules/adm-zip/test/assets/attributes_test/asd/New Text Document.txt
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/test/assets/attributes_test/blank file.txt
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/test/assets/attributes_test/blank file.txt b/node_modules/adm-zip/test/assets/attributes_test/blank file.txt
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/test/assets/fast.zip
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/test/assets/fast.zip b/node_modules/adm-zip/test/assets/fast.zip
deleted file mode 100644
index f4ed17b..0000000
Binary files a/node_modules/adm-zip/test/assets/fast.zip and /dev/null differ

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/test/assets/fastest.zip
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/test/assets/fastest.zip b/node_modules/adm-zip/test/assets/fastest.zip
deleted file mode 100644
index f4ed17b..0000000
Binary files a/node_modules/adm-zip/test/assets/fastest.zip and /dev/null differ

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/test/assets/linux_arc.zip
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/test/assets/linux_arc.zip b/node_modules/adm-zip/test/assets/linux_arc.zip
deleted file mode 100644
index 188eccb..0000000
Binary files a/node_modules/adm-zip/test/assets/linux_arc.zip and /dev/null differ

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/test/assets/maximum.zip
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/test/assets/maximum.zip b/node_modules/adm-zip/test/assets/maximum.zip
deleted file mode 100644
index 86a8ec7..0000000
Binary files a/node_modules/adm-zip/test/assets/maximum.zip and /dev/null differ

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/test/assets/normal.zip
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/test/assets/normal.zip b/node_modules/adm-zip/test/assets/normal.zip
deleted file mode 100644
index b4602c9..0000000
Binary files a/node_modules/adm-zip/test/assets/normal.zip and /dev/null differ

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/test/assets/store.zip
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/test/assets/store.zip b/node_modules/adm-zip/test/assets/store.zip
deleted file mode 100644
index e2add30..0000000
Binary files a/node_modules/adm-zip/test/assets/store.zip and /dev/null differ

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/test/assets/ultra.zip
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/test/assets/ultra.zip b/node_modules/adm-zip/test/assets/ultra.zip
deleted file mode 100644
index 86a8ec7..0000000
Binary files a/node_modules/adm-zip/test/assets/ultra.zip and /dev/null differ

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/test/index.js
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/test/index.js b/node_modules/adm-zip/test/index.js
deleted file mode 100644
index c0d7822..0000000
--- a/node_modules/adm-zip/test/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-var Attr = require("../util").FileAttr,
-    Zip = require("../adm-zip"),
-    fs = require("fs");
-
-//zip.addLocalFile("./test/readonly.txt");

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/util/constants.js
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/util/constants.js b/node_modules/adm-zip/util/constants.js
index 61a96af..02de1e9 100644
--- a/node_modules/adm-zip/util/constants.js
+++ b/node_modules/adm-zip/util/constants.js
@@ -80,5 +80,36 @@ module.exports = {
     /* Load type */
     FILE             : 0,
     BUFFER           : 1,
-    NONE             : 2
+    NONE             : 2,
+
+    /* 4.5 Extensible data fields */
+    EF_ID            : 0,
+    EF_SIZE          : 2,
+
+    /* Header IDs */
+    ID_ZIP64         : 0x0001,
+    ID_AVINFO        : 0x0007,
+    ID_PFS           : 0x0008,
+    ID_OS2           : 0x0009,
+    ID_NTFS          : 0x000a,
+    ID_OPENVMS       : 0x000c,
+    ID_UNIX          : 0x000d,
+    ID_FORK          : 0x000e,
+    ID_PATCH         : 0x000f,
+    ID_X509_PKCS7    : 0x0014,
+    ID_X509_CERTID_F : 0x0015,
+    ID_X509_CERTID_C : 0x0016,
+    ID_STRONGENC     : 0x0017,
+    ID_RECORD_MGT    : 0x0018,
+    ID_X509_PKCS7_RL : 0x0019,
+    ID_IBM1          : 0x0065,
+    ID_IBM2          : 0x0066,
+    ID_POSZIP        : 0x4690,
+
+    EF_ZIP64_OR_32   : 0xffffffff,
+    EF_ZIP64_OR_16   : 0xffff,
+    EF_ZIP64_SUNCOMP : 0,
+    EF_ZIP64_SCOMP   : 8,
+    EF_ZIP64_RHO     : 16,
+    EF_ZIP64_DSN     : 24
 };

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/util/utils.js
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/util/utils.js b/node_modules/adm-zip/util/utils.js
index ef42999..52a8ed9 100644
--- a/node_modules/adm-zip/util/utils.js
+++ b/node_modules/adm-zip/util/utils.js
@@ -2,7 +2,7 @@ var fs = require("fs"),
     pth = require('path');
 
 fs.existsSync = fs.existsSync || pth.existsSync;
-	
+
 module.exports = (function() {
 
     var crcTable = [],
@@ -81,7 +81,7 @@ module.exports = (function() {
                 case Constants.DEFLATED:
                     return 'DEFLATED (' + method + ')';
                 default:
-                    return 'UNSUPPORTED (' + method + ')'
+                    return 'UNSUPPORTED (' + method + ')';
             }
 
         },
@@ -116,6 +116,60 @@ module.exports = (function() {
             return true;
         },
 
+        writeFileToAsync : function(/*String*/path, /*Buffer*/content, /*Boolean*/overwrite, /*Number*/attr, /*Function*/callback) {
+            if(typeof attr === 'function') {
+                callback = attr;
+                attr = undefined;
+            }
+
+            fs.exists(path, function(exists) {
+                if(exists && !overwrite)
+                    return callback(false);
+
+                fs.stat(path, function(err, stat) {
+                    if(exists &&stat.isDirectory()) {
+                        return callback(false);
+                    }
+
+                    var folder = pth.dirname(path);
+                    fs.exists(folder, function(exists) {
+                        if(!exists)
+                            mkdirSync(folder);
+                        
+                        fs.open(path, 'w', 438, function(err, fd) {
+                            if(err) {
+                                fs.chmod(path, 438, function(err) {
+                                    fs.open(path, 'w', 438, function(err, fd) {
+                                        fs.write(fd, content, 0, content.length, 0, function(err, written, buffer) {
+                                            fs.close(fd, function(err) {
+                                                fs.chmod(path, attr || 438, function() {
+                                                    callback(true);
+                                                })
+                                            });
+                                        });
+                                    });
+                                })
+                            } else {
+                                if(fd) {
+                                    fs.write(fd, content, 0, content.length, 0, function(err, written, buffer) {
+                                        fs.close(fd, function(err) {
+                                            fs.chmod(path, attr || 438, function() {
+                                                callback(true);
+                                            })
+                                        });
+                                    });
+                                } else {
+                                    fs.chmod(path, attr || 438, function() {
+                                        callback(true);
+                                    })
+                                }
+                            }
+                        });
+                    })
+                })
+            })
+        },
+
         findFiles : function(/*String*/path) {
             return findSync(path, true);
         },

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/zipEntry.js
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/zipEntry.js b/node_modules/adm-zip/zipEntry.js
index 3da38f1..6b1309b 100644
--- a/node_modules/adm-zip/zipEntry.js
+++ b/node_modules/adm-zip/zipEntry.js
@@ -34,7 +34,11 @@ module.exports = function (/*Buffer*/input) {
         return true;
     }
 
-    function decompress(/*Boolean*/async, /*Function*/callback) {
+    function decompress(/*Boolean*/async, /*Function*/callback, /*String*/pass) {
+        if(typeof callback === 'undefined' && typeof async === 'string') {
+            pass=async;
+            async=void 0;
+        }
         if (_isDirectory) {
             if (async && callback) {
                 callback(new Buffer(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error.
@@ -43,6 +47,7 @@ module.exports = function (/*Buffer*/input) {
         }
 
         var compressedData = getCompressedDataFromZip();
+       
         if (compressedData.length == 0) {
             if (async && callback) callback(compressedData, Utils.Errors.NO_DATA);//si added error.
             return compressedData;
@@ -73,7 +78,7 @@ module.exports = function (/*Buffer*/input) {
                 } else {
                     inflater.inflateAsync(function(result) {
                         result.copy(data, 0);
-                        if (crc32OK(data)) {
+                        if (!crc32OK(data)) {
                             if (callback) callback(data, Utils.Errors.BAD_CRC); //si added error
                         } else { //si added otherwise did not seem to return data.
                             if (callback) callback(data);
@@ -136,6 +141,57 @@ module.exports = function (/*Buffer*/input) {
         }
     }
 
+    function readUInt64LE(buffer, offset) {
+        return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);
+    }
+
+    function parseExtra(data) {
+        var offset = 0;
+        var signature, size, part;
+        while(offset<data.length) {
+            signature = data.readUInt16LE(offset);
+            offset += 2;
+            size = data.readUInt16LE(offset);
+            offset += 2;
+            part = data.slice(offset, offset+size);
+            offset += size;
+            if(Constants.ID_ZIP64 === signature) {
+                parseZip64ExtendedInformation(part);
+            }
+        }
+    }
+
+    //Override header field values with values from the ZIP64 extra field
+    function parseZip64ExtendedInformation(data) {
+        var size, compressedSize, offset, diskNumStart;
+
+        if(data.length >= Constants.EF_ZIP64_SCOMP) {
+            size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);
+            if(_entryHeader.size === Constants.EF_ZIP64_OR_32) {
+                _entryHeader.size = size;
+            }
+        }
+        if(data.length >= Constants.EF_ZIP64_RHO) {
+            compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);
+            if(_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {
+                _entryHeader.compressedSize = compressedSize;
+            }
+        }
+        if(data.length >= Constants.EF_ZIP64_DSN) {
+            offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);
+            if(_entryHeader.offset === Constants.EF_ZIP64_OR_32) {
+                _entryHeader.offset = offset;
+            }
+        }
+        if(data.length >= Constants.EF_ZIP64_DSN+4) {
+            diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);
+            if(_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {
+                _entryHeader.diskNumStart = diskNumStart;
+            }
+        }
+    }
+
+
     return {
         get entryName () { return _entryName.toString(); },
         get rawEntryName() { return _entryName; },
@@ -150,6 +206,7 @@ module.exports = function (/*Buffer*/input) {
         set extra (val) {
             _extra = val;
             _entryHeader.extraLength = val.length;
+            parseExtra(val);
         },
 
         get comment () { return _comment.toString(); },
@@ -180,14 +237,17 @@ module.exports = function (/*Buffer*/input) {
             }
         },
 
-        getData : function() {
-            return decompress(false, null);
+        getData : function(pass) {
+            return decompress(false, null, pass);
         },
 
-        getDataAsync : function(/*Function*/callback) {
-            decompress(true, callback)
+        getDataAsync : function(/*Function*/callback, pass) {
+            decompress(true, callback, pass)
         },
 
+        set attr(attr) { _entryHeader.attr = attr; },
+        get attr() { return _entryHeader.attr; },
+
         set header(/*Buffer*/data) {
             _entryHeader.loadFromBinary(data);
         },

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/adm-zip/zipFile.js
----------------------------------------------------------------------
diff --git a/node_modules/adm-zip/zipFile.js b/node_modules/adm-zip/zipFile.js
index d7433b0..794afdb 100644
--- a/node_modules/adm-zip/zipFile.js
+++ b/node_modules/adm-zip/zipFile.js
@@ -53,7 +53,7 @@ module.exports = function(/*String|Buffer*/input, /*Number*/inputType) {
     function readMainHeader() {
         var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size
             n = Math.max(0, i - 0xFFFF), // 0xFFFF is the max zip file comment length
-            endOffset = 0; // Start offset of the END header
+            endOffset = -1; // Start offset of the END header
 
         for (i; i >= n; i--) {
             if (inBuffer[i] != 0x50) continue; // quick check that the byte is 'P'
@@ -62,7 +62,7 @@ module.exports = function(/*String|Buffer*/input, /*Number*/inputType) {
                 break;
             }
         }
-        if (!endOffset)
+        if (!~endOffset)
             throw Utils.Errors.INVALID_FORMAT;
 
         mainHeader.loadFromBinary(inBuffer.slice(endOffset, endOffset + Utils.Constants.ENDHDR));

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/index.js b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/index.js
index 7894527..e917d61 100644
--- a/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/index.js
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/index.js
@@ -1,10 +1,34 @@
 'use strict';
+var colorConvert = require('color-convert');
 
-function assembleStyles () {
+function wrapAnsi16(fn, offset) {
+	return function () {
+		var code = fn.apply(colorConvert, arguments);
+		return '\u001b[' + (code + offset) + 'm';
+	};
+}
+
+function wrapAnsi256(fn, offset) {
+	return function () {
+		var code = fn.apply(colorConvert, arguments);
+		return '\u001b[' + (38 + offset) + ';5;' + code + 'm';
+	};
+}
+
+function wrapAnsi16m(fn, offset) {
+	return function () {
+		var rgb = fn.apply(colorConvert, arguments);
+		return '\u001b[' + (38 + offset) + ';2;' +
+			rgb[0] + ';' + rgb[1] + ';' + rgb[2] + 'm';
+	};
+}
+
+function assembleStyles() {
 	var styles = {
-		modifiers: {
+		modifier: {
 			reset: [0, 0],
-			bold: [1, 22], // 21 isn't widely supported and 22 does the same thing
+			// 21 isn't widely supported and 22 does the same thing
+			bold: [1, 22],
 			dim: [2, 22],
 			italic: [3, 23],
 			underline: [4, 24],
@@ -12,7 +36,7 @@ function assembleStyles () {
 			hidden: [8, 28],
 			strikethrough: [9, 29]
 		},
-		colors: {
+		color: {
 			black: [30, 39],
 			red: [31, 39],
 			green: [32, 39],
@@ -23,7 +47,7 @@ function assembleStyles () {
 			white: [37, 39],
 			gray: [90, 39]
 		},
-		bgColors: {
+		bgColor: {
 			bgBlack: [40, 49],
 			bgRed: [41, 49],
 			bgGreen: [42, 49],
@@ -36,7 +60,7 @@ function assembleStyles () {
 	};
 
 	// fix humans
-	styles.colors.grey = styles.colors.gray;
+	styles.color.grey = styles.color.gray;
 
 	Object.keys(styles).forEach(function (groupName) {
 		var group = styles[groupName];
@@ -56,6 +80,48 @@ function assembleStyles () {
 		});
 	});
 
+	function rgb2rgb(r, g, b) {
+		return [r, g, b];
+	}
+
+	styles.color.close = '\u001b[39m';
+	styles.bgColor.close = '\u001b[49m';
+
+	styles.color.ansi = {};
+	styles.color.ansi256 = {};
+	styles.color.ansi16m = {
+		rgb: wrapAnsi16m(rgb2rgb, 0)
+	};
+
+	styles.bgColor.ansi = {};
+	styles.bgColor.ansi256 = {};
+	styles.bgColor.ansi16m = {
+		rgb: wrapAnsi16m(rgb2rgb, 10)
+	};
+
+	for (var key in colorConvert) {
+		if (!colorConvert.hasOwnProperty(key) || typeof colorConvert[key] !== 'object') {
+			continue;
+		}
+
+		var suite = colorConvert[key];
+
+		if ('ansi16' in suite) {
+			styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0);
+			styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10);
+		}
+
+		if ('ansi256' in suite) {
+			styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0);
+			styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10);
+		}
+
+		if ('rgb' in suite) {
+			styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0);
+			styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10);
+		}
+	}
+
 	return styles;
 }
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/CHANGELOG.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/CHANGELOG.md b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/CHANGELOG.md
new file mode 100644
index 0000000..0a7bce4
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/CHANGELOG.md
@@ -0,0 +1,54 @@
+# 1.0.0 - 2016-01-07
+
+- Removed: unused speed test
+- Added: Automatic routing between previously unsupported conversions
+([#27](https://github.com/Qix-/color-convert/pull/27))
+- Removed: `xxx2xxx()` and `xxx2xxxRaw()` functions
+([#27](https://github.com/Qix-/color-convert/pull/27))
+- Removed: `convert()` class
+([#27](https://github.com/Qix-/color-convert/pull/27))
+- Changed: all functions to lookup dictionary
+([#27](https://github.com/Qix-/color-convert/pull/27))
+- Changed: `ansi` to `ansi256`
+([#27](https://github.com/Qix-/color-convert/pull/27))
+- Fixed: argument grouping for functions requiring only one argument
+([#27](https://github.com/Qix-/color-convert/pull/27))
+
+# 0.6.0 - 2015-07-23
+
+- Added: methods to handle
+[ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) 16/256 colors:
+  - rgb2ansi16
+  - rgb2ansi
+  - hsl2ansi16
+  - hsl2ansi
+  - hsv2ansi16
+  - hsv2ansi
+  - hwb2ansi16
+  - hwb2ansi
+  - cmyk2ansi16
+  - cmyk2ansi
+  - keyword2ansi16
+  - keyword2ansi
+  - ansi162rgb
+  - ansi162hsl
+  - ansi162hsv
+  - ansi162hwb
+  - ansi162cmyk
+  - ansi162keyword
+  - ansi2rgb
+  - ansi2hsl
+  - ansi2hsv
+  - ansi2hwb
+  - ansi2cmyk
+  - ansi2keyword
+([#18](https://github.com/harthur/color-convert/pull/18))
+
+# 0.5.3 - 2015-06-02
+
+- Fixed: hsl2hsv does not return `NaN` anymore when using `[0,0,0]`
+([#15](https://github.com/harthur/color-convert/issues/15))
+
+---
+
+Check out commit logs for older releases

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/LICENSE
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/LICENSE b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/LICENSE
new file mode 100644
index 0000000..a8b08d4
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/LICENSE
@@ -0,0 +1,21 @@
+Copyright (c) 2011 Heather Arthur <fa...@gmail.com>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/README.md b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/README.md
new file mode 100644
index 0000000..effe3f0
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/README.md
@@ -0,0 +1,62 @@
+# color-convert
+
+[![Build Status](https://travis-ci.org/MoOx/color-convert.svg?branch=master)](https://travis-ci.org/MoOx/color-convert)
+
+Color-convert is a color conversion library for JavaScript and node.
+It converts all ways between `rgb`, `hsl`, `hsv`, `hwb`, `cmyk`, `ansi`, `ansi16`, `hex` strings, and CSS `keyword`s:
+
+```js
+var convert = require('color-convert');
+
+convert.rgb.hsl(140, 200, 100);   // [96, 48, 59]
+convert.keyword.rgb('blue');      // [0, 0, 255]
+```
+
+# Install
+
+```console
+$ npm install color-convert
+```
+
+# API
+
+Simply get the property of the _from_ and _to_ conversion that you're looking for.
+
+All functions have a rounded and unrounded variant. By default, return values are rounded. To get the unrounded (raw) results, simply tack on `.raw` to the function.
+
+```js
+var convert = require('color-convert');
+
+// Hex to LAB
+convert.hex.lab('DEADBF');         // [ 76, 21, -2 ]
+convert.hex.lab.raw('DEADBF');     // [ 75.56213190997677, 20.653827952644754, -2.290532499330533 ]
+
+// RGB to CMYK
+convert.rgb.cmyk(167, 255, 4);     // [ 35, 0, 98, 0 ]
+convert.rgb.cmyk.raw(167, 255, 4); // [ 34.509803921568626, 0, 98.43137254901961, 0 ]
+```
+
+### Arrays
+All functions that accept multiple arguments also support passing an array.
+
+Not that this does **not** apply to functions that convert from a color that only requires one value (e.g. `keyword`, `ansi256`, `hex`, etc.)
+
+```js
+var convert = require('color-convert');
+
+convert.rgb.hex(123, 45, 67);      // '7B2D43'
+convert.rgb.hex([123, 45, 67]);    // '7B2D43'
+```
+
+## Routing
+
+Conversions that don't have an _explicitly_ defined conversion (in [conversions.js](conversions.js)), but can be converted by means of sub-conversions (e.g. XYZ -> **RGB** -> CMYK), are automatically routed together. This allows just about any color model supported by `color-convert` to be converted to any other model, so long as a sub-conversion path exists. This is also true for conversions requiring more than one step in between (e.g. LCH -> **LAB** -> **XYZ** -> **RGB** -> Hex).
+
+Keep in mind that extensive conversions _may_ result in a loss of precision, and exist only to be complete. For a list of "direct" (single-step) conversions, see [conversions.js](conversions.js).
+
+# Contribute
+
+If there is a new model you would like to support, or want to add a direct conversion between two existing models, please send us a pull request.
+
+# License
+Copyright &copy; 2011-2016, Heather Arthur and Josh Junon. Licensed under the [MIT License](LICENSE).

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/conversions.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/conversions.js b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/conversions.js
new file mode 100644
index 0000000..d0aa959
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/conversions.js
@@ -0,0 +1,594 @@
+/* MIT license */
+var cssKeywords = require('./css-keywords');
+
+// NOTE: conversions should only return primitive values (i.e. arrays, or
+//       values that give correct `typeof` results).
+//       do not use box values types (i.e. Number(), String(), etc.)
+
+var reverseKeywords = {};
+for (var key in cssKeywords) {
+	if (cssKeywords.hasOwnProperty(key)) {
+		reverseKeywords[cssKeywords[key].join()] = key;
+	}
+}
+
+var convert = module.exports = {
+	rgb: {},
+	hsl: {},
+	hsv: {},
+	hwb: {},
+	cmyk: {},
+	xyz: {},
+	lab: {},
+	lch: {},
+	hex: {},
+	keyword: {},
+	ansi16: {},
+	ansi256: {}
+};
+
+convert.rgb.hsl = function (rgb) {
+	var r = rgb[0] / 255;
+	var g = rgb[1] / 255;
+	var b = rgb[2] / 255;
+	var min = Math.min(r, g, b);
+	var max = Math.max(r, g, b);
+	var delta = max - min;
+	var h;
+	var s;
+	var l;
+
+	if (max === min) {
+		h = 0;
+	} else if (r === max) {
+		h = (g - b) / delta;
+	} else if (g === max) {
+		h = 2 + (b - r) / delta;
+	} else if (b === max) {
+		h = 4 + (r - g) / delta;
+	}
+
+	h = Math.min(h * 60, 360);
+
+	if (h < 0) {
+		h += 360;
+	}
+
+	l = (min + max) / 2;
+
+	if (max === min) {
+		s = 0;
+	} else if (l <= 0.5) {
+		s = delta / (max + min);
+	} else {
+		s = delta / (2 - max - min);
+	}
+
+	return [h, s * 100, l * 100];
+};
+
+convert.rgb.hsv = function (rgb) {
+	var r = rgb[0];
+	var g = rgb[1];
+	var b = rgb[2];
+	var min = Math.min(r, g, b);
+	var max = Math.max(r, g, b);
+	var delta = max - min;
+	var h;
+	var s;
+	var v;
+
+	if (max === 0) {
+		s = 0;
+	} else {
+		s = (delta / max * 1000) / 10;
+	}
+
+	if (max === min) {
+		h = 0;
+	} else if (r === max) {
+		h = (g - b) / delta;
+	} else if (g === max) {
+		h = 2 + (b - r) / delta;
+	} else if (b === max) {
+		h = 4 + (r - g) / delta;
+	}
+
+	h = Math.min(h * 60, 360);
+
+	if (h < 0) {
+		h += 360;
+	}
+
+	v = ((max / 255) * 1000) / 10;
+
+	return [h, s, v];
+};
+
+convert.rgb.hwb = function (rgb) {
+	var r = rgb[0];
+	var g = rgb[1];
+	var b = rgb[2];
+	var h = convert.rgb.hsl(rgb)[0];
+	var w = 1 / 255 * Math.min(r, Math.min(g, b));
+
+	b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));
+
+	return [h, w * 100, b * 100];
+};
+
+convert.rgb.cmyk = function (rgb) {
+	var r = rgb[0] / 255;
+	var g = rgb[1] / 255;
+	var b = rgb[2] / 255;
+	var c;
+	var m;
+	var y;
+	var k;
+
+	k = Math.min(1 - r, 1 - g, 1 - b);
+	c = (1 - r - k) / (1 - k) || 0;
+	m = (1 - g - k) / (1 - k) || 0;
+	y = (1 - b - k) / (1 - k) || 0;
+
+	return [c * 100, m * 100, y * 100, k * 100];
+};
+
+convert.rgb.keyword = function (rgb) {
+	return reverseKeywords[rgb.join()];
+};
+
+convert.keyword.rgb = function (keyword) {
+	return cssKeywords[keyword];
+};
+
+convert.rgb.xyz = function (rgb) {
+	var r = rgb[0] / 255;
+	var g = rgb[1] / 255;
+	var b = rgb[2] / 255;
+
+	// assume sRGB
+	r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);
+	g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);
+	b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);
+
+	var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
+	var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
+	var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
+
+	return [x * 100, y * 100, z * 100];
+};
+
+convert.rgb.lab = function (rgb) {
+	var xyz = convert.rgb.xyz(rgb);
+	var x = xyz[0];
+	var y = xyz[1];
+	var z = xyz[2];
+	var l;
+	var a;
+	var b;
+
+	x /= 95.047;
+	y /= 100;
+	z /= 108.883;
+
+	x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);
+	y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);
+	z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);
+
+	l = (116 * y) - 16;
+	a = 500 * (x - y);
+	b = 200 * (y - z);
+
+	return [l, a, b];
+};
+
+convert.hsl.rgb = function (hsl) {
+	var h = hsl[0] / 360;
+	var s = hsl[1] / 100;
+	var l = hsl[2] / 100;
+	var t1;
+	var t2;
+	var t3;
+	var rgb;
+	var val;
+
+	if (s === 0) {
+		val = l * 255;
+		return [val, val, val];
+	}
+
+	if (l < 0.5) {
+		t2 = l * (1 + s);
+	} else {
+		t2 = l + s - l * s;
+	}
+
+	t1 = 2 * l - t2;
+
+	rgb = [0, 0, 0];
+	for (var i = 0; i < 3; i++) {
+		t3 = h + 1 / 3 * -(i - 1);
+		if (t3 < 0) {
+			t3++;
+		}
+		if (t3 > 1) {
+			t3--;
+		}
+
+		if (6 * t3 < 1) {
+			val = t1 + (t2 - t1) * 6 * t3;
+		} else if (2 * t3 < 1) {
+			val = t2;
+		} else if (3 * t3 < 2) {
+			val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
+		} else {
+			val = t1;
+		}
+
+		rgb[i] = val * 255;
+	}
+
+	return rgb;
+};
+
+convert.hsl.hsv = function (hsl) {
+	var h = hsl[0];
+	var s = hsl[1] / 100;
+	var l = hsl[2] / 100;
+	var sv;
+	var v;
+
+	if (l === 0) {
+		// no need to do calc on black
+		// also avoids divide by 0 error
+		return [0, 0, 0];
+	}
+
+	l *= 2;
+	s *= (l <= 1) ? l : 2 - l;
+	v = (l + s) / 2;
+	sv = (2 * s) / (l + s);
+
+	return [h, sv * 100, v * 100];
+};
+
+convert.hsv.rgb = function (hsv) {
+	var h = hsv[0] / 60;
+	var s = hsv[1] / 100;
+	var v = hsv[2] / 100;
+	var hi = Math.floor(h) % 6;
+
+	var f = h - Math.floor(h);
+	var p = 255 * v * (1 - s);
+	var q = 255 * v * (1 - (s * f));
+	var t = 255 * v * (1 - (s * (1 - f)));
+	v *= 255;
+
+	switch (hi) {
+		case 0:
+			return [v, t, p];
+		case 1:
+			return [q, v, p];
+		case 2:
+			return [p, v, t];
+		case 3:
+			return [p, q, v];
+		case 4:
+			return [t, p, v];
+		case 5:
+			return [v, p, q];
+	}
+};
+
+convert.hsv.hsl = function (hsv) {
+	var h = hsv[0];
+	var s = hsv[1] / 100;
+	var v = hsv[2] / 100;
+	var sl;
+	var l;
+
+	l = (2 - s) * v;
+	sl = s * v;
+	sl /= (l <= 1) ? l : 2 - l;
+	sl = sl || 0;
+	l /= 2;
+
+	return [h, sl * 100, l * 100];
+};
+
+// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
+convert.hwb.rgb = function (hwb) {
+	var h = hwb[0] / 360;
+	var wh = hwb[1] / 100;
+	var bl = hwb[2] / 100;
+	var ratio = wh + bl;
+	var i;
+	var v;
+	var f;
+	var n;
+
+	// wh + bl cant be > 1
+	if (ratio > 1) {
+		wh /= ratio;
+		bl /= ratio;
+	}
+
+	i = Math.floor(6 * h);
+	v = 1 - bl;
+	f = 6 * h - i;
+
+	if ((i & 0x01) !== 0) {
+		f = 1 - f;
+	}
+
+	n = wh + f * (v - wh); // linear interpolation
+
+	var r;
+	var g;
+	var b;
+	switch (i) {
+		default:
+		case 6:
+		case 0: r = v; g = n; b = wh; break;
+		case 1: r = n; g = v; b = wh; break;
+		case 2: r = wh; g = v; b = n; break;
+		case 3: r = wh; g = n; b = v; break;
+		case 4: r = n; g = wh; b = v; break;
+		case 5: r = v; g = wh; b = n; break;
+	}
+
+	return [r * 255, g * 255, b * 255];
+};
+
+convert.cmyk.rgb = function (cmyk) {
+	var c = cmyk[0] / 100;
+	var m = cmyk[1] / 100;
+	var y = cmyk[2] / 100;
+	var k = cmyk[3] / 100;
+	var r;
+	var g;
+	var b;
+
+	r = 1 - Math.min(1, c * (1 - k) + k);
+	g = 1 - Math.min(1, m * (1 - k) + k);
+	b = 1 - Math.min(1, y * (1 - k) + k);
+
+	return [r * 255, g * 255, b * 255];
+};
+
+convert.xyz.rgb = function (xyz) {
+	var x = xyz[0] / 100;
+	var y = xyz[1] / 100;
+	var z = xyz[2] / 100;
+	var r;
+	var g;
+	var b;
+
+	r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);
+	g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);
+	b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);
+
+	// assume sRGB
+	r = r > 0.0031308
+		? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)
+		: r *= 12.92;
+
+	g = g > 0.0031308
+		? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)
+		: g *= 12.92;
+
+	b = b > 0.0031308
+		? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)
+		: b *= 12.92;
+
+	r = Math.min(Math.max(0, r), 1);
+	g = Math.min(Math.max(0, g), 1);
+	b = Math.min(Math.max(0, b), 1);
+
+	return [r * 255, g * 255, b * 255];
+};
+
+convert.xyz.lab = function (xyz) {
+	var x = xyz[0];
+	var y = xyz[1];
+	var z = xyz[2];
+	var l;
+	var a;
+	var b;
+
+	x /= 95.047;
+	y /= 100;
+	z /= 108.883;
+
+	x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);
+	y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);
+	z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);
+
+	l = (116 * y) - 16;
+	a = 500 * (x - y);
+	b = 200 * (y - z);
+
+	return [l, a, b];
+};
+
+convert.lab.xyz = function (lab) {
+	var l = lab[0];
+	var a = lab[1];
+	var b = lab[2];
+	var x;
+	var y;
+	var z;
+	var y2;
+
+	if (l <= 8) {
+		y = (l * 100) / 903.3;
+		y2 = (7.787 * (y / 100)) + (16 / 116);
+	} else {
+		y = 100 * Math.pow((l + 16) / 116, 3);
+		y2 = Math.pow(y / 100, 1 / 3);
+	}
+
+	x = x / 95.047 <= 0.008856
+		? x = (95.047 * ((a / 500) + y2 - (16 / 116))) / 7.787
+		: 95.047 * Math.pow((a / 500) + y2, 3);
+	z = z / 108.883 <= 0.008859
+		? z = (108.883 * (y2 - (b / 200) - (16 / 116))) / 7.787
+		: 108.883 * Math.pow(y2 - (b / 200), 3);
+
+	return [x, y, z];
+};
+
+convert.lab.lch = function (lab) {
+	var l = lab[0];
+	var a = lab[1];
+	var b = lab[2];
+	var hr;
+	var h;
+	var c;
+
+	hr = Math.atan2(b, a);
+	h = hr * 360 / 2 / Math.PI;
+
+	if (h < 0) {
+		h += 360;
+	}
+
+	c = Math.sqrt(a * a + b * b);
+
+	return [l, c, h];
+};
+
+convert.lch.lab = function (lch) {
+	var l = lch[0];
+	var c = lch[1];
+	var h = lch[2];
+	var a;
+	var b;
+	var hr;
+
+	hr = h / 360 * 2 * Math.PI;
+	a = c * Math.cos(hr);
+	b = c * Math.sin(hr);
+
+	return [l, a, b];
+};
+
+convert.rgb.ansi16 = function (args) {
+	var r = args[0];
+	var g = args[1];
+	var b = args[2];
+	var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization
+
+	value = Math.round(value / 50);
+
+	if (value === 0) {
+		return 30;
+	}
+
+	var ansi = 30
+		+ ((Math.round(b / 255) << 2)
+		| (Math.round(g / 255) << 1)
+		| Math.round(r / 255));
+
+	if (value === 2) {
+		ansi += 60;
+	}
+
+	return ansi;
+};
+
+convert.hsv.ansi16 = function (args) {
+	// optimization here; we already know the value and don't need to get
+	// it converted for us.
+	return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);
+};
+
+convert.rgb.ansi256 = function (args) {
+	var r = args[0];
+	var g = args[1];
+	var b = args[2];
+
+	// we use the extended greyscale palette here, with the exception of
+	// black and white. normal palette only has 4 greyscale shades.
+	if (r === g && g === b) {
+		if (r < 8) {
+			return 16;
+		}
+
+		if (r > 248) {
+			return 231;
+		}
+
+		return Math.round(((r - 8) / 247) * 24) + 232;
+	}
+
+	var ansi = 16
+		+ (36 * Math.round(r / 255 * 5))
+		+ (6 * Math.round(g / 255 * 5))
+		+ Math.round(b / 255 * 5);
+
+	return ansi;
+};
+
+convert.ansi16.rgb = function (args) {
+	var color = args % 10;
+
+	// handle greyscale
+	if (color === 0 || color === 7) {
+		if (args > 50) {
+			color += 3.5;
+		}
+
+		color = color / 10.5 * 255;
+
+		return [color, color, color];
+	}
+
+	var mult = (~~(args > 50) + 1) * 0.5;
+	var r = ((color & 1) * mult) * 255;
+	var g = (((color >> 1) & 1) * mult) * 255;
+	var b = (((color >> 2) & 1) * mult) * 255;
+
+	return [r, g, b];
+};
+
+convert.ansi256.rgb = function (args) {
+	// handle greyscale
+	if (args >= 232) {
+		var c = (args - 232) * 10 + 8;
+		return [c, c, c];
+	}
+
+	args -= 16;
+
+	var rem;
+	var r = Math.floor(args / 36) / 5 * 255;
+	var g = Math.floor((rem = args % 36) / 6) / 5 * 255;
+	var b = (rem % 6) / 5 * 255;
+
+	return [r, g, b];
+};
+
+convert.rgb.hex = function (args) {
+	var integer = ((Math.round(args[0]) & 0xFF) << 16)
+		+ ((Math.round(args[1]) & 0xFF) << 8)
+		+ (Math.round(args[2]) & 0xFF);
+
+	var string = integer.toString(16).toUpperCase();
+	return '000000'.substring(string.length) + string;
+};
+
+convert.hex.rgb = function (args) {
+	var match = args.toString(16).match(/[a-f0-9]{6}/i);
+	if (!match) {
+		return [0, 0, 0];
+	}
+
+	var integer = parseInt(match[0], 16);
+	var r = (integer >> 16) & 0xFF;
+	var g = (integer >> 8) & 0xFF;
+	var b = integer & 0xFF;
+
+	return [r, g, b];
+};

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/css-keywords.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/css-keywords.js b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/css-keywords.js
new file mode 100644
index 0000000..495ca56
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/css-keywords.js
@@ -0,0 +1,151 @@
+module.exports = {
+	aliceblue: [240, 248, 255],
+	antiquewhite: [250, 235, 215],
+	aqua: [0, 255, 255],
+	aquamarine: [127, 255, 212],
+	azure: [240, 255, 255],
+	beige: [245, 245, 220],
+	bisque: [255, 228, 196],
+	black: [0, 0, 0],
+	blanchedalmond: [255, 235, 205],
+	blue: [0, 0, 255],
+	blueviolet: [138, 43, 226],
+	brown: [165, 42, 42],
+	burlywood: [222, 184, 135],
+	cadetblue: [95, 158, 160],
+	chartreuse: [127, 255, 0],
+	chocolate: [210, 105, 30],
+	coral: [255, 127, 80],
+	cornflowerblue: [100, 149, 237],
+	cornsilk: [255, 248, 220],
+	crimson: [220, 20, 60],
+	cyan: [0, 255, 255],
+	darkblue: [0, 0, 139],
+	darkcyan: [0, 139, 139],
+	darkgoldenrod: [184, 134, 11],
+	darkgray: [169, 169, 169],
+	darkgreen: [0, 100, 0],
+	darkgrey: [169, 169, 169],
+	darkkhaki: [189, 183, 107],
+	darkmagenta: [139, 0, 139],
+	darkolivegreen: [85, 107, 47],
+	darkorange: [255, 140, 0],
+	darkorchid: [153, 50, 204],
+	darkred: [139, 0, 0],
+	darksalmon: [233, 150, 122],
+	darkseagreen: [143, 188, 143],
+	darkslateblue: [72, 61, 139],
+	darkslategray: [47, 79, 79],
+	darkslategrey: [47, 79, 79],
+	darkturquoise: [0, 206, 209],
+	darkviolet: [148, 0, 211],
+	deeppink: [255, 20, 147],
+	deepskyblue: [0, 191, 255],
+	dimgray: [105, 105, 105],
+	dimgrey: [105, 105, 105],
+	dodgerblue: [30, 144, 255],
+	firebrick: [178, 34, 34],
+	floralwhite: [255, 250, 240],
+	forestgreen: [34, 139, 34],
+	fuchsia: [255, 0, 255],
+	gainsboro: [220, 220, 220],
+	ghostwhite: [248, 248, 255],
+	gold: [255, 215, 0],
+	goldenrod: [218, 165, 32],
+	gray: [128, 128, 128],
+	green: [0, 128, 0],
+	greenyellow: [173, 255, 47],
+	grey: [128, 128, 128],
+	honeydew: [240, 255, 240],
+	hotpink: [255, 105, 180],
+	indianred: [205, 92, 92],
+	indigo: [75, 0, 130],
+	ivory: [255, 255, 240],
+	khaki: [240, 230, 140],
+	lavender: [230, 230, 250],
+	lavenderblush: [255, 240, 245],
+	lawngreen: [124, 252, 0],
+	lemonchiffon: [255, 250, 205],
+	lightblue: [173, 216, 230],
+	lightcoral: [240, 128, 128],
+	lightcyan: [224, 255, 255],
+	lightgoldenrodyellow: [250, 250, 210],
+	lightgray: [211, 211, 211],
+	lightgreen: [144, 238, 144],
+	lightgrey: [211, 211, 211],
+	lightpink: [255, 182, 193],
+	lightsalmon: [255, 160, 122],
+	lightseagreen: [32, 178, 170],
+	lightskyblue: [135, 206, 250],
+	lightslategray: [119, 136, 153],
+	lightslategrey: [119, 136, 153],
+	lightsteelblue: [176, 196, 222],
+	lightyellow: [255, 255, 224],
+	lime: [0, 255, 0],
+	limegreen: [50, 205, 50],
+	linen: [250, 240, 230],
+	magenta: [255, 0, 255],
+	maroon: [128, 0, 0],
+	mediumaquamarine: [102, 205, 170],
+	mediumblue: [0, 0, 205],
+	mediumorchid: [186, 85, 211],
+	mediumpurple: [147, 112, 219],
+	mediumseagreen: [60, 179, 113],
+	mediumslateblue: [123, 104, 238],
+	mediumspringgreen: [0, 250, 154],
+	mediumturquoise: [72, 209, 204],
+	mediumvioletred: [199, 21, 133],
+	midnightblue: [25, 25, 112],
+	mintcream: [245, 255, 250],
+	mistyrose: [255, 228, 225],
+	moccasin: [255, 228, 181],
+	navajowhite: [255, 222, 173],
+	navy: [0, 0, 128],
+	oldlace: [253, 245, 230],
+	olive: [128, 128, 0],
+	olivedrab: [107, 142, 35],
+	orange: [255, 165, 0],
+	orangered: [255, 69, 0],
+	orchid: [218, 112, 214],
+	palegoldenrod: [238, 232, 170],
+	palegreen: [152, 251, 152],
+	paleturquoise: [175, 238, 238],
+	palevioletred: [219, 112, 147],
+	papayawhip: [255, 239, 213],
+	peachpuff: [255, 218, 185],
+	peru: [205, 133, 63],
+	pink: [255, 192, 203],
+	plum: [221, 160, 221],
+	powderblue: [176, 224, 230],
+	purple: [128, 0, 128],
+	rebeccapurple: [102, 51, 153],
+	red: [255, 0, 0],
+	rosybrown: [188, 143, 143],
+	royalblue: [65, 105, 225],
+	saddlebrown: [139, 69, 19],
+	salmon: [250, 128, 114],
+	sandybrown: [244, 164, 96],
+	seagreen: [46, 139, 87],
+	seashell: [255, 245, 238],
+	sienna: [160, 82, 45],
+	silver: [192, 192, 192],
+	skyblue: [135, 206, 235],
+	slateblue: [106, 90, 205],
+	slategray: [112, 128, 144],
+	slategrey: [112, 128, 144],
+	snow: [255, 250, 250],
+	springgreen: [0, 255, 127],
+	steelblue: [70, 130, 180],
+	tan: [210, 180, 140],
+	teal: [0, 128, 128],
+	thistle: [216, 191, 216],
+	tomato: [255, 99, 71],
+	turquoise: [64, 224, 208],
+	violet: [238, 130, 238],
+	wheat: [245, 222, 179],
+	white: [255, 255, 255],
+	whitesmoke: [245, 245, 245],
+	yellow: [255, 255, 0],
+	yellowgreen: [154, 205, 50]
+};
+

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/index.js b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/index.js
new file mode 100644
index 0000000..b3418f6
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/index.js
@@ -0,0 +1,75 @@
+var conversions = require('./conversions');
+var route = require('./route');
+
+var convert = {};
+
+var models = Object.keys(conversions);
+
+function wrapRaw(fn) {
+	var wrappedFn = function (args) {
+		if (args === undefined || args === null) {
+			return args;
+		}
+
+		if (arguments.length > 1) {
+			args = Array.prototype.slice.call(arguments);
+		}
+
+		return fn(args);
+	};
+
+	// preserve .conversion property if there is one
+	if ('conversion' in fn) {
+		wrappedFn.conversion = fn.conversion;
+	}
+
+	return wrappedFn;
+}
+
+function wrapRounded(fn) {
+	var wrappedFn = function (args) {
+		if (args === undefined || args === null) {
+			return args;
+		}
+
+		if (arguments.length > 1) {
+			args = Array.prototype.slice.call(arguments);
+		}
+
+		var result = fn(args);
+
+		// we're assuming the result is an array here.
+		// see notice in conversions.js; don't use box types
+		// in conversion functions.
+		if (typeof result === 'object') {
+			for (var len = result.length, i = 0; i < len; i++) {
+				result[i] = Math.round(result[i]);
+			}
+		}
+
+		return result;
+	};
+
+	// preserve .conversion property if there is one
+	if ('conversion' in fn) {
+		wrappedFn.conversion = fn.conversion;
+	}
+
+	return wrappedFn;
+}
+
+models.forEach(function (fromModel) {
+	convert[fromModel] = {};
+
+	var routes = route(fromModel);
+	var routeModels = Object.keys(routes);
+
+	routeModels.forEach(function (toModel) {
+		var fn = routes[toModel];
+
+		convert[fromModel][toModel] = wrapRounded(fn);
+		convert[fromModel][toModel].raw = wrapRaw(fn);
+	});
+});
+
+module.exports = convert;

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/package.json b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/package.json
new file mode 100644
index 0000000..fab11d7
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/package.json
@@ -0,0 +1,84 @@
+{
+  "name": "color-convert",
+  "description": "Plain color conversion functions",
+  "version": "1.0.0",
+  "author": {
+    "name": "Heather Arthur",
+    "email": "fayearthur@gmail.com"
+  },
+  "license": "MIT",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/qix-/color-convert.git"
+  },
+  "scripts": {
+    "pretest": "xo",
+    "test": "node test/basic.js"
+  },
+  "keywords": [
+    "color",
+    "colour",
+    "convert",
+    "converter",
+    "conversion",
+    "rgb",
+    "hsl",
+    "hsv",
+    "hwb",
+    "cmyk",
+    "ansi",
+    "ansi16"
+  ],
+  "files": [
+    "index.js",
+    "conversions.js",
+    "css-keywords.js",
+    "route.js"
+  ],
+  "xo": {
+    "rules": {
+      "default-case": 0,
+      "no-inline-comments": 0,
+      "operator-linebreak": 0
+    }
+  },
+  "devDependencies": {
+    "chalk": "^1.1.1",
+    "xo": "^0.11.2"
+  },
+  "gitHead": "31cd56dc3d34ae332cc83d90bd4f925baf5bd982",
+  "bugs": {
+    "url": "https://github.com/qix-/color-convert/issues"
+  },
+  "homepage": "https://github.com/qix-/color-convert#readme",
+  "_id": "color-convert@1.0.0",
+  "_shasum": "3c26fcd885d272d45beacf6e41baba75c89a8579",
+  "_from": "color-convert@>=1.0.0 <2.0.0",
+  "_npmVersion": "3.3.6",
+  "_nodeVersion": "4.1.1",
+  "_npmUser": {
+    "name": "qix",
+    "email": "i.am.qix@gmail.com"
+  },
+  "dist": {
+    "shasum": "3c26fcd885d272d45beacf6e41baba75c89a8579",
+    "tarball": "http://registry.npmjs.org/color-convert/-/color-convert-1.0.0.tgz"
+  },
+  "maintainers": [
+    {
+      "name": "harth",
+      "email": "fayearthur@gmail.com"
+    },
+    {
+      "name": "moox",
+      "email": "m@moox.io"
+    },
+    {
+      "name": "qix",
+      "email": "i.am.qix@gmail.com"
+    }
+  ],
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.0.0.tgz",
+  "readme": "ERROR: No README data found!"
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[13/14] cordova-browser git commit: CB-10788 Set VERSION to 4.2.0-dev (via coho)

Posted by an...@apache.org.
CB-10788 Set VERSION to 4.2.0-dev (via coho)


Project: http://git-wip-us.apache.org/repos/asf/cordova-browser/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-browser/commit/663f862d
Tree: http://git-wip-us.apache.org/repos/asf/cordova-browser/tree/663f862d
Diff: http://git-wip-us.apache.org/repos/asf/cordova-browser/diff/663f862d

Branch: refs/heads/master
Commit: 663f862d4debe49cc5c46710892a11c9d6198fbf
Parents: 55abeab
Author: Vladimir Kotikov <ko...@gmail.com>
Authored: Fri Mar 4 13:55:15 2016 +0300
Committer: Vladimir Kotikov <ko...@gmail.com>
Committed: Fri Mar 4 15:33:09 2016 +0300

----------------------------------------------------------------------
 VERSION                               |  2 +-
 bin/templates/project/cordova/version |  2 +-
 package.json                          | 98 +++++++++++++++---------------
 3 files changed, 51 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/663f862d/VERSION
----------------------------------------------------------------------
diff --git a/VERSION b/VERSION
index 4aa925d..5fb11aa 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-4.1.0-dev
+4.2.0-dev

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/663f862d/bin/templates/project/cordova/version
----------------------------------------------------------------------
diff --git a/bin/templates/project/cordova/version b/bin/templates/project/cordova/version
index 7039287..8acf18f 100755
--- a/bin/templates/project/cordova/version
+++ b/bin/templates/project/cordova/version
@@ -20,6 +20,6 @@
 */
 
 // Coho updates this line:
-var VERSION = "4.1.0-dev";
+var VERSION = "4.2.0-dev";
 
 console.log(VERSION);

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/663f862d/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 3751b1b..3daf7d4 100644
--- a/package.json
+++ b/package.json
@@ -1,51 +1,51 @@
 {
-  "name": "cordova-browser",
-  "version": "4.1.0-dev",
-  "description": "cordova-browser release",
-  "main": "bin/create",
-  "repository": {
-    "type": "git",
-    "url": "https://git-wip-us.apache.org/repos/asf/cordova-browser.git"
-  },
-  "keywords": [
-    "cordova",
-    "browser",
-    "apache"
-  ],
-  "scripts": {
-    "test": "npm run jshint && npm run test-unit",
-    "test-unit": "node node_modules/jasmine-node/lib/jasmine-node/cli.js --captureExceptions tests/spec/",
-    "jshint": "node node_modules/jshint/bin/jshint bin && node node_modules/jshint/bin/jshint tests"
-  },
-  "dependencies": {
-    "adm-zip": "^0.4.7",
-    "cordova-serve": "^1.0.0",
-    "nopt": "^3.0.6",
-    "q": "^1.4.1",
-    "shelljs": "^0.6.0"
-  },
-  "devDependencies": {
-    "jasmine-node": "~1",
-    "jshint": "^2.6.0",
-    "tmp": "^0.0.26"
-  },
-  "bundledDependencies": [
-    "adm-zip",
-    "cordova-serve",
-    "nopt",
-    "q",
-    "shelljs"
-  ],
-  "author": "Apache Software Foundation",
-  "contributors": [
-    {
-      "name": "Steve Gill",
-      "email": "steveng@adobe.com"
+    "name": "cordova-browser",
+    "version": "4.2.0-dev",
+    "description": "cordova-browser release",
+    "main": "bin/create",
+    "repository": {
+        "type": "git",
+        "url": "https://git-wip-us.apache.org/repos/asf/cordova-browser.git"
     },
-    {
-        "name": "Suraj Pindoria",
-        "email": "spindori@adobe.com"
-    }
-  ],
-  "license": "Apache-2.0"
-}
+    "keywords": [
+        "cordova",
+        "browser",
+        "apache"
+    ],
+    "scripts": {
+        "test": "npm run jshint && npm run test-unit",
+        "test-unit": "node node_modules/jasmine-node/lib/jasmine-node/cli.js --captureExceptions tests/spec/",
+        "jshint": "node node_modules/jshint/bin/jshint bin && node node_modules/jshint/bin/jshint tests"
+    },
+    "dependencies": {
+        "adm-zip": "^0.4.7",
+        "cordova-serve": "^1.0.0",
+        "nopt": "^3.0.6",
+        "q": "^1.4.1",
+        "shelljs": "^0.6.0"
+    },
+    "devDependencies": {
+        "jasmine-node": "~1",
+        "jshint": "^2.6.0",
+        "tmp": "^0.0.26"
+    },
+    "bundledDependencies": [
+        "adm-zip",
+        "cordova-serve",
+        "nopt",
+        "q",
+        "shelljs"
+    ],
+    "author": "Apache Software Foundation",
+    "contributors": [
+        {
+            "name": "Steve Gill",
+            "email": "steveng@adobe.com"
+        },
+        {
+            "name": "Suraj Pindoria",
+            "email": "spindori@adobe.com"
+        }
+    ],
+    "license": "Apache-2.0"
+}
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[08/14] cordova-browser git commit: CB-10788 Updated checked in node_modules

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/index.js b/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/index.js
index d0f9256..bf9e226 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/index.js
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/index.js
@@ -1,9 +1,20 @@
 /*!
  * escape-html
  * Copyright(c) 2012-2013 TJ Holowaychuk
+ * Copyright(c) 2015 Andreas Lubbe
+ * Copyright(c) 2015 Tiancheng "Timothy" Gu
  * MIT Licensed
  */
 
+'use strict';
+
+/**
+ * Module variables.
+ * @private
+ */
+
+var matchHtmlRegExp = /["'&<>]/;
+
 /**
  * Module exports.
  * @public
@@ -14,16 +25,54 @@ module.exports = escapeHtml;
 /**
  * Escape special characters in the given string of html.
  *
- * @param  {string} str The string to escape for inserting into HTML
+ * @param  {string} string The string to escape for inserting into HTML
  * @return {string}
  * @public
  */
 
-function escapeHtml(html) {
-  return String(html)
-    .replace(/&/g, '&amp;')
-    .replace(/"/g, '&quot;')
-    .replace(/'/g, '&#39;')
-    .replace(/</g, '&lt;')
-    .replace(/>/g, '&gt;');
+function escapeHtml(string) {
+  var str = '' + string;
+  var match = matchHtmlRegExp.exec(str);
+
+  if (!match) {
+    return str;
+  }
+
+  var escape;
+  var html = '';
+  var index = 0;
+  var lastIndex = 0;
+
+  for (index = match.index; index < str.length; index++) {
+    switch (str.charCodeAt(index)) {
+      case 34: // "
+        escape = '&quot;';
+        break;
+      case 38: // &
+        escape = '&amp;';
+        break;
+      case 39: // '
+        escape = '&#39;';
+        break;
+      case 60: // <
+        escape = '&lt;';
+        break;
+      case 62: // >
+        escape = '&gt;';
+        break;
+      default:
+        continue;
+    }
+
+    if (lastIndex !== index) {
+      html += str.substring(lastIndex, index);
+    }
+
+    lastIndex = index + 1;
+    html += escape;
+  }
+
+  return lastIndex !== index
+    ? html + str.substring(lastIndex, index)
+    : html;
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/package.json
index 13e0efc..eb73427 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/escape-html/package.json
@@ -1,7 +1,7 @@
 {
   "name": "escape-html",
-  "description": "Escape HTML entities",
-  "version": "1.0.2",
+  "description": "Escape string for use in HTML",
+  "version": "1.0.3",
   "license": "MIT",
   "keywords": [
     "escape",
@@ -12,19 +12,46 @@
     "type": "git",
     "url": "git+https://github.com/component/escape-html.git"
   },
+  "devDependencies": {
+    "benchmark": "1.0.0",
+    "beautify-benchmark": "0.2.4"
+  },
   "files": [
     "LICENSE",
     "Readme.md",
     "index.js"
   ],
-  "readme": "\n# escape-html\n\n  Escape HTML entities\n\n## Example\n\n```js\nvar escape = require('escape-html');\nescape(str);\n```\n\n## License\n\n  MIT",
-  "readmeFilename": "Readme.md",
+  "scripts": {
+    "bench": "node benchmark/index.js"
+  },
+  "gitHead": "7ac2ea3977fcac3d4c5be8d2a037812820c65f28",
   "bugs": {
     "url": "https://github.com/component/escape-html/issues"
   },
-  "homepage": "https://github.com/component/escape-html#readme",
-  "_id": "escape-html@1.0.2",
-  "_shasum": "d77d32fa98e38c2f41ae85e9278e0e0e6ba1022c",
-  "_resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.2.tgz",
-  "_from": "escape-html@1.0.2"
+  "homepage": "https://github.com/component/escape-html",
+  "_id": "escape-html@1.0.3",
+  "_shasum": "0258eae4d3d0c0974de1c169188ef0051d1d1988",
+  "_from": "escape-html@>=1.0.3 <1.1.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "dist": {
+    "shasum": "0258eae4d3d0c0974de1c169188ef0051d1d1988",
+    "tarball": "http://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/etag/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/etag/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/etag/package.json
index 179c6a8..8dc110c 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/etag/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/etag/package.json
@@ -44,14 +44,30 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
   },
-  "readme": "# etag\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nCreate simple ETags\n\n## Installation\n\n```sh\n$ npm install etag\n```\n\n## API\n\n```js\nvar etag = require('etag')\n```\n\n### etag(entity, [options])\n\nGenerate a strong ETag for the given entity. This should be the complete\nbody of the entity. Strings, `Buffer`s, and `fs.Stats` are accepted. By\ndefault, a strong ETag is generated except for `fs.Stats`, which will\ngenerate a weak ETag (this can be overwritten by `options.weak`).\n\n```js\nres.setHeader('ETag', etag(body))\n```\n\n#### Options\n\n`etag` accepts these properties in the options object.\n\n##### weak\n\nSpecifies if the generated ETag will include the weak validator mark (that\nis, the leading `W/`). The actual entity tag is the same. The defa
 ult value\nis `false`, unless the `entity` is `fs.Stats`, in which case it is `true`.\n\n## Testing\n\n```sh\n$ npm test\n```\n\n## Benchmark\n\n```bash\n$ npm run-script bench\n\n> etag@1.6.0 bench nodejs-etag\n> node benchmark/index.js\n\n  http_parser@1.0\n  node@0.10.33\n  v8@3.14.5.9\n  ares@1.9.0-DEV\n  uv@0.10.29\n  zlib@1.2.3\n  modules@11\n  openssl@1.0.1j\n\n> node benchmark/body0-100b.js\n\n  100B body\n\n  1 test completed.\n  2 tests completed.\n  3 tests completed.\n  4 tests completed.\n\n* buffer - strong x 289,198 ops/sec ±1.09% (190 runs sampled)\n* buffer - weak   x 287,838 ops/sec ±0.91% (189 runs sampled)\n* string - strong x 284,586 ops/sec ±1.05% (192 runs sampled)\n* string - weak   x 287,439 ops/sec ±0.82% (192 runs sampled)\n\n> node benchmark/body1-1kb.js\n\n  1KB body\n\n  1 test completed.\n  2 tests completed.\n  3 tests completed.\n  4 tests completed.\n\n* buffer - strong x 212,423 ops/sec ±0.75% (193 runs sampled)\n* buffer - weak   x 211,871 op
 s/sec ±0.74% (194 runs sampled)\n  string - strong x 205,291 ops/sec ±0.86% (194 runs sampled)\n  string - weak   x 208,463 ops/sec ±0.79% (192 runs sampled)\n\n> node benchmark/body2-5kb.js\n\n  5KB body\n\n  1 test completed.\n  2 tests completed.\n  3 tests completed.\n  4 tests completed.\n\n* buffer - strong x 92,901 ops/sec ±0.58% (195 runs sampled)\n* buffer - weak   x 93,045 ops/sec ±0.65% (192 runs sampled)\n  string - strong x 89,621 ops/sec ±0.68% (194 runs sampled)\n  string - weak   x 90,070 ops/sec ±0.70% (196 runs sampled)\n\n> node benchmark/body3-10kb.js\n\n  10KB body\n\n  1 test completed.\n  2 tests completed.\n  3 tests completed.\n  4 tests completed.\n\n* buffer - strong x 54,220 ops/sec ±0.85% (192 runs sampled)\n* buffer - weak   x 54,069 ops/sec ±0.83% (191 runs sampled)\n  string - strong x 53,078 ops/sec ±0.53% (194 runs sampled)\n  string - weak   x 53,849 ops/sec ±0.47% (197 runs sampled)\n\n> node benchmark/body4-100kb.js\n\n  100KB body\n\n
   1 test completed.\n  2 tests completed.\n  3 tests completed.\n  4 tests completed.\n\n* buffer - strong x 6,673 ops/sec ±0.15% (197 runs sampled)\n* buffer - weak   x 6,716 ops/sec ±0.12% (198 runs sampled)\n  string - strong x 6,357 ops/sec ±0.14% (197 runs sampled)\n  string - weak   x 6,344 ops/sec ±0.21% (197 runs sampled)\n\n> node benchmark/stats.js\n\n  stats\n\n  1 test completed.\n  2 tests completed.\n  3 tests completed.\n  4 tests completed.\n\n* real - strong x 1,671,989 ops/sec ±0.13% (197 runs sampled)\n* real - weak   x 1,681,297 ops/sec ±0.12% (198 runs sampled)\n  fake - strong x   927,063 ops/sec ±0.14% (198 runs sampled)\n  fake - weak   x   914,461 ops/sec ±0.41% (191 runs sampled)\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/etag.svg\n[npm-url]: https://npmjs.org/package/etag\n[node-version-image]: https://img.shields.io/node/v/etag.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.
 shields.io/travis/jshttp/etag/master.svg\n[travis-url]: https://travis-ci.org/jshttp/etag\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/etag/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/etag?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/etag.svg\n[downloads-url]: https://npmjs.org/package/etag\n",
-  "readmeFilename": "README.md",
+  "gitHead": "a511f5c8c930fd9546dbd88acb080f96bc788cfc",
   "bugs": {
     "url": "https://github.com/jshttp/etag/issues"
   },
-  "homepage": "https://github.com/jshttp/etag#readme",
+  "homepage": "https://github.com/jshttp/etag",
   "_id": "etag@1.7.0",
   "_shasum": "03d30b5f67dd6e632d2945d30d6652731a34d5d8",
+  "_from": "etag@>=1.7.0 <1.8.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "dist": {
+    "shasum": "03d30b5f67dd6e632d2945d30d6652731a34d5d8",
+    "tarball": "http://registry.npmjs.org/etag/-/etag-1.7.0.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz",
-  "_from": "etag@>=1.7.0 <1.8.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/finalhandler/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/finalhandler/HISTORY.md b/node_modules/cordova-serve/node_modules/express/node_modules/finalhandler/HISTORY.md
index 26a9435..78dddc0 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/finalhandler/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/finalhandler/HISTORY.md
@@ -1,3 +1,11 @@
+0.4.1 / 2015-12-02
+==================
+
+  * deps: escape-html@~1.0.3
+    - perf: enable strict mode
+    - perf: optimize string replacement
+    - perf: use faster string coercion
+
 0.4.0 / 2015-06-14
 ==================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/finalhandler/node_modules/unpipe/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/finalhandler/node_modules/unpipe/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/finalhandler/node_modules/unpipe/package.json
index 25fbed7..4af1b49 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/finalhandler/node_modules/unpipe/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/finalhandler/node_modules/unpipe/package.json
@@ -30,14 +30,30 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
   },
-  "readme": "# unpipe\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-image]][node-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nUnpipe a stream from all destinations.\n\n## Installation\n\n```sh\n$ npm install unpipe\n```\n\n## API\n\n```js\nvar unpipe = require('unpipe')\n```\n\n### unpipe(stream)\n\nUnpipes all destinations from a given stream. With stream 2+, this is\nequivalent to `stream.unpipe()`. When used with streams 1 style streams\n(typically Node.js 0.8 and below), this module attempts to undo the\nactions done in `stream.pipe(dest)`.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/unpipe.svg\n[npm-url]: https://npmjs.org/package/unpipe\n[node-image]: https://img.shields.io/node/v/unpipe.svg\n[node-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/stream-utils/unpipe.svg\n[travis-url]
 : https://travis-ci.org/stream-utils/unpipe\n[coveralls-image]: https://img.shields.io/coveralls/stream-utils/unpipe.svg\n[coveralls-url]: https://coveralls.io/r/stream-utils/unpipe?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/unpipe.svg\n[downloads-url]: https://npmjs.org/package/unpipe\n",
-  "readmeFilename": "README.md",
+  "gitHead": "d2df901c06487430e78dca62b6edb8bb2fc5e99d",
   "bugs": {
     "url": "https://github.com/stream-utils/unpipe/issues"
   },
-  "homepage": "https://github.com/stream-utils/unpipe#readme",
+  "homepage": "https://github.com/stream-utils/unpipe",
   "_id": "unpipe@1.0.0",
   "_shasum": "b2bf4ee8514aae6165b4817829d21b2ef49904ec",
+  "_from": "unpipe@>=1.0.0 <1.1.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "dist": {
+    "shasum": "b2bf4ee8514aae6165b4817829d21b2ef49904ec",
+    "tarball": "http://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
-  "_from": "unpipe@>=1.0.0 <1.1.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/finalhandler/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/finalhandler/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/finalhandler/package.json
index 0a13bbc..0afe7fc 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/finalhandler/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/finalhandler/package.json
@@ -1,7 +1,7 @@
 {
   "name": "finalhandler",
   "description": "Node.js final http responder",
-  "version": "0.4.0",
+  "version": "0.4.1",
   "author": {
     "name": "Douglas Christopher Wilson",
     "email": "doug@somethingdoug.com"
@@ -13,15 +13,15 @@
   },
   "dependencies": {
     "debug": "~2.2.0",
-    "escape-html": "1.0.2",
+    "escape-html": "~1.0.3",
     "on-finished": "~2.3.0",
     "unpipe": "~1.0.0"
   },
   "devDependencies": {
-    "istanbul": "0.3.15",
-    "mocha": "2.2.5",
-    "readable-stream": "2.0.0",
-    "supertest": "1.0.1"
+    "istanbul": "0.4.1",
+    "mocha": "2.3.4",
+    "readable-stream": "2.0.4",
+    "supertest": "1.1.0"
   },
   "files": [
     "LICENSE",
@@ -36,14 +36,46 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
   },
-  "readme": "# finalhandler\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-image]][node-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nNode.js function to invoke as the final step to respond to HTTP request.\n\n## Installation\n\n```sh\n$ npm install finalhandler\n```\n\n## API\n\n```js\nvar finalhandler = require('finalhandler')\n```\n\n### finalhandler(req, res, [options])\n\nReturns function to be invoked as the final step for the given `req` and `res`.\nThis function is to be invoked as `fn(err)`. If `err` is falsy, the handler will\nwrite out a 404 response to the `res`. If it is truthy, an error response will\nbe written out to the `res`, and `res.statusCode` is set from `err.status`.\n\nThe final handler will also unpipe anything from `req` when it is invoked.\n\n#### options.env\n\nBy default, the environment is determined by `NODE_ENV` variable, b
 ut it can be\noverridden by this option.\n\n#### options.onerror\n\nProvide a function to be called with the `err` when it exists. Can be used for\nwriting errors to a central location without excessive function generation. Called\nas `onerror(err, req, res)`.\n\n## Examples\n\n### always 404\n\n```js\nvar finalhandler = require('finalhandler')\nvar http = require('http')\n\nvar server = http.createServer(function (req, res) {\n  var done = finalhandler(req, res)\n  done()\n})\n\nserver.listen(3000)\n```\n\n### perform simple action\n\n```js\nvar finalhandler = require('finalhandler')\nvar fs = require('fs')\nvar http = require('http')\n\nvar server = http.createServer(function (req, res) {\n  var done = finalhandler(req, res)\n\n  fs.readFile('index.html', function (err, buf) {\n    if (err) return done(err)\n    res.setHeader('Content-Type', 'text/html')\n    res.end(buf)\n  })\n})\n\nserver.listen(3000)\n```\n\n### use with middleware-style functions\n\n```js\nvar finalhandler = 
 require('finalhandler')\nvar http = require('http')\nvar serveStatic = require('serve-static')\n\nvar serve = serveStatic('public')\n\nvar server = http.createServer(function (req, res) {\n  var done = finalhandler(req, res)\n  serve(req, res, done)\n})\n\nserver.listen(3000)\n```\n\n### keep log of all errors\n\n```js\nvar finalhandler = require('finalhandler')\nvar fs = require('fs')\nvar http = require('http')\n\nvar server = http.createServer(function (req, res) {\n  var done = finalhandler(req, res, {onerror: logerror})\n\n  fs.readFile('index.html', function (err, buf) {\n    if (err) return done(err)\n    res.setHeader('Content-Type', 'text/html')\n    res.end(buf)\n  })\n})\n\nserver.listen(3000)\n\nfunction logerror(err) {\n  console.error(err.stack || err.toString())\n}\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/finalhandler.svg\n[npm-url]: https://npmjs.org/package/finalhandler\n[node-image]: https://img.shields.io/node/v/finalhandle
 r.svg\n[node-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/pillarjs/finalhandler.svg\n[travis-url]: https://travis-ci.org/pillarjs/finalhandler\n[coveralls-image]: https://img.shields.io/coveralls/pillarjs/finalhandler.svg\n[coveralls-url]: https://coveralls.io/r/pillarjs/finalhandler?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/finalhandler.svg\n[downloads-url]: https://npmjs.org/package/finalhandler\n",
-  "readmeFilename": "README.md",
+  "gitHead": "ac2036774059eb93dbac8475580e52433204d4d4",
   "bugs": {
     "url": "https://github.com/pillarjs/finalhandler/issues"
   },
-  "homepage": "https://github.com/pillarjs/finalhandler#readme",
-  "_id": "finalhandler@0.4.0",
-  "_shasum": "965a52d9e8d05d2b857548541fb89b53a2497d9b",
-  "_resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.0.tgz",
-  "_from": "finalhandler@0.4.0"
+  "homepage": "https://github.com/pillarjs/finalhandler",
+  "_id": "finalhandler@0.4.1",
+  "_shasum": "85a17c6c59a94717d262d61230d4b0ebe3d4a14d",
+  "_from": "finalhandler@0.4.1",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "fishrock123",
+      "email": "fishrock123@rocketmail.com"
+    },
+    {
+      "name": "defunctzombie",
+      "email": "shtylman@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "85a17c6c59a94717d262d61230d4b0ebe3d4a14d",
+    "tarball": "http://registry.npmjs.org/finalhandler/-/finalhandler-0.4.1.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.1.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/fresh/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/fresh/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/fresh/package.json
index 8707a83..74332c4 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/fresh/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/fresh/package.json
@@ -46,14 +46,42 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
   },
-  "readme": "# fresh\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nHTTP response freshness testing\n\n## Installation\n\n```\n$ npm install fresh\n```\n\n## API\n\n```js\nvar fresh = require('fresh')\n```\n\n### fresh(req, res)\n\n Check freshness of `req` and `res` headers.\n\n When the cache is \"fresh\" __true__ is returned,\n otherwise __false__ is returned to indicate that\n the cache is now stale.\n\n## Example\n\n```js\nvar req = { 'if-none-match': 'tobi' };\nvar res = { 'etag': 'luna' };\nfresh(req, res);\n// => false\n\nvar req = { 'if-none-match': 'tobi' };\nvar res = { 'etag': 'tobi' };\nfresh(req, res);\n// => true\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/fresh.svg\n[npm-url]: https://npmjs.org/package/fresh\n[node-version-image
 ]: https://img.shields.io/node/v/fresh.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/fresh/master.svg\n[travis-url]: https://travis-ci.org/jshttp/fresh\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/fresh/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/fresh?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/fresh.svg\n[downloads-url]: https://npmjs.org/package/fresh\n",
-  "readmeFilename": "README.md",
+  "gitHead": "14616c9748368ca08cd6a955dd88ab659b778634",
   "bugs": {
     "url": "https://github.com/jshttp/fresh/issues"
   },
-  "homepage": "https://github.com/jshttp/fresh#readme",
+  "homepage": "https://github.com/jshttp/fresh",
   "_id": "fresh@0.3.0",
   "_shasum": "651f838e22424e7566de161d8358caa199f83d4f",
+  "_from": "fresh@0.3.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "jonathanong",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "651f838e22424e7566de161d8358caa199f83d4f",
+    "tarball": "http://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz",
-  "_from": "fresh@0.3.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/HISTORY.md b/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/HISTORY.md
new file mode 100644
index 0000000..486771f
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/HISTORY.md
@@ -0,0 +1,21 @@
+1.0.1 / 2016-01-17
+==================
+
+  * perf: enable strict mode
+
+1.0.0 / 2015-03-01
+==================
+
+  * Add option to only add new descriptors
+  * Add simple argument validation
+  * Add jsdoc to source file
+
+0.0.2 / 2013-12-14
+==================
+
+  * Move repository to `component` organization
+
+0.0.1 / 2013-10-29
+==================
+
+  * Initial release

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/LICENSE
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/LICENSE b/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/LICENSE
index a53a533..274bfd8 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/LICENSE
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/LICENSE
@@ -1,6 +1,7 @@
 (The MIT License)
 
 Copyright (c) 2013 Jonathan Ong <me...@jongleberry.com>
+Copyright (c) 2015 Douglas Christopher Wilson <do...@somethingdoug.com>
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/README.md b/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/README.md
index ca4cf24..d593c0e 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/README.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/README.md
@@ -1,5 +1,10 @@
 # Merge Descriptors
 
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Build Status][travis-image]][travis-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
 Merge objects using descriptors.
 
 ```js
@@ -32,3 +37,12 @@ a descriptor by the same name.
 ## License
 
 [MIT](LICENSE)
+
+[npm-image]: https://img.shields.io/npm/v/merge-descriptors.svg
+[npm-url]: https://npmjs.org/package/merge-descriptors
+[travis-image]: https://img.shields.io/travis/component/merge-descriptors/master.svg
+[travis-url]: https://travis-ci.org/component/merge-descriptors
+[coveralls-image]: https://img.shields.io/coveralls/component/merge-descriptors/master.svg
+[coveralls-url]: https://coveralls.io/r/component/merge-descriptors?branch=master
+[downloads-image]: https://img.shields.io/npm/dm/merge-descriptors.svg
+[downloads-url]: https://npmjs.org/package/merge-descriptors

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/index.js b/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/index.js
index 5d0af3a..573b132 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/index.js
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/index.js
@@ -1,9 +1,12 @@
 /*!
  * merge-descriptors
  * Copyright(c) 2014 Jonathan Ong
+ * Copyright(c) 2015 Douglas Christopher Wilson
  * MIT Licensed
  */
 
+'use strict'
+
 /**
  * Module exports.
  * @public

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/package.json
index ce8d4b9..a65d2e8 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/merge-descriptors/package.json
@@ -1,7 +1,7 @@
 {
   "name": "merge-descriptors",
   "description": "Merge objects using descriptors",
-  "version": "1.0.0",
+  "version": "1.0.1",
   "author": {
     "name": "Jonathan Ong",
     "email": "me@jongleberry.com",
@@ -11,6 +11,10 @@
     {
       "name": "Douglas Christopher Wilson",
       "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "Mike Grabowski",
+      "email": "grabbou@gmail.com"
     }
   ],
   "license": "MIT",
@@ -18,19 +22,117 @@
     "type": "git",
     "url": "git+https://github.com/component/merge-descriptors.git"
   },
-  "bugs": {
-    "url": "https://github.com/component/merge-descriptors/issues"
+  "devDependencies": {
+    "istanbul": "0.4.1",
+    "mocha": "1.21.5"
   },
   "files": [
+    "HISTORY.md",
     "LICENSE",
     "README.md",
     "index.js"
   ],
-  "readme": "# Merge Descriptors\n\nMerge objects using descriptors.\n\n```js\nvar thing = {\n  get name() {\n    return 'jon'\n  }\n}\n\nvar animal = {\n\n}\n\nmerge(animal, thing)\n\nanimal.name === 'jon'\n```\n\n## API\n\n### merge(destination, source)\n\nRedefines `destination`'s descriptors with `source`'s.\n\n### merge(destination, source, false)\n\nDefines `source`'s descriptors on `destination` if `destination` does not have\na descriptor by the same name.\n\n## License\n\n[MIT](LICENSE)\n",
-  "readmeFilename": "README.md",
-  "homepage": "https://github.com/component/merge-descriptors#readme",
-  "_id": "merge-descriptors@1.0.0",
-  "_shasum": "2169cf7538e1b0cc87fb88e1502d8474bbf79864",
-  "_resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.0.tgz",
-  "_from": "merge-descriptors@1.0.0"
+  "scripts": {
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/"
+  },
+  "gitHead": "f26c49c3b423b0b2ac31f6e32a84e1632f2d7ac2",
+  "bugs": {
+    "url": "https://github.com/component/merge-descriptors/issues"
+  },
+  "homepage": "https://github.com/component/merge-descriptors",
+  "_id": "merge-descriptors@1.0.1",
+  "_shasum": "b00aaa556dd8b44568150ec9d1b953f3f90cbb61",
+  "_from": "merge-descriptors@1.0.1",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "anthonyshort",
+      "email": "antshort@gmail.com"
+    },
+    {
+      "name": "clintwood",
+      "email": "clint@anotherway.co.za"
+    },
+    {
+      "name": "dfcreative",
+      "email": "df.creative@gmail.com"
+    },
+    {
+      "name": "dominicbarnes",
+      "email": "dominic@dbarnes.info"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "ianstormtaylor",
+      "email": "ian@ianstormtaylor.com"
+    },
+    {
+      "name": "jonathanong",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "juliangruber",
+      "email": "julian@juliangruber.com"
+    },
+    {
+      "name": "mattmueller",
+      "email": "mattmuelle@gmail.com"
+    },
+    {
+      "name": "queckezz",
+      "email": "fabian.eichenberger@gmail.com"
+    },
+    {
+      "name": "stephenmathieson",
+      "email": "me@stephenmathieson.com"
+    },
+    {
+      "name": "thehydroimpulse",
+      "email": "dnfagnan@gmail.com"
+    },
+    {
+      "name": "timaschew",
+      "email": "timaschew@gmail.com"
+    },
+    {
+      "name": "timoxley",
+      "email": "secoif@gmail.com"
+    },
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "tootallnate",
+      "email": "nathan@tootallnate.net"
+    },
+    {
+      "name": "trevorgerhardt",
+      "email": "trevorgerhardt@gmail.com"
+    },
+    {
+      "name": "yields",
+      "email": "yields@icloud.com"
+    }
+  ],
+  "dist": {
+    "shasum": "b00aaa556dd8b44568150ec9d1b953f3f90cbb61",
+    "tarball": "http://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/methods/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/methods/HISTORY.md b/node_modules/cordova-serve/node_modules/express/node_modules/methods/HISTORY.md
index c9e302c..c0ecf07 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/methods/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/methods/HISTORY.md
@@ -1,3 +1,8 @@
+1.1.2 / 2016-01-17
+==================
+
+  * perf: enable strict mode
+
 1.1.1 / 2014-12-30
 ==================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/methods/LICENSE
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/methods/LICENSE b/node_modules/cordova-serve/node_modules/express/node_modules/methods/LICENSE
index 8bce401..220dc1a 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/methods/LICENSE
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/methods/LICENSE
@@ -1,6 +1,7 @@
 (The MIT License)
 
 Copyright (c) 2013-2014 TJ Holowaychuk <tj...@vision-media.ca>
+Copyright (c) 2015-2016 Douglas Christopher Wilson <do...@somethingdoug.com>
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/methods/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/methods/README.md b/node_modules/cordova-serve/node_modules/express/node_modules/methods/README.md
index dccc473..672a32b 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/methods/README.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/methods/README.md
@@ -6,8 +6,16 @@
 [![Build Status][travis-image]][travis-url]
 [![Test Coverage][coveralls-image]][coveralls-url]
 
-  HTTP verbs that node core's parser supports.
+HTTP verbs that Node.js core's HTTP parser supports.
 
+This module provides an export that is just like `http.METHODS` from Node.js core,
+with the following differences:
+
+  * All method names are lower-cased.
+  * Contains a fallback list of methods for Node.js versions that do not have a
+    `http.METHODS` export (0.10 and lower).
+  * Provides the fallback list when using tools like `browserify` without pulling
+    in the `http` shim module.
 
 ## Install
 
@@ -23,7 +31,9 @@ var methods = require('methods')
 
 ### methods
 
-This is an array of lower-case method names that Node.js supports.
+This is an array of lower-cased method names that Node.js supports. If Node.js
+provides the `http.METHODS` export, then this is the same array lower-cased,
+otherwise it is a snapshot of the verbs from Node.js 0.10.
 
 ## License
 
@@ -32,7 +42,7 @@ This is an array of lower-case method names that Node.js supports.
 [npm-image]: https://img.shields.io/npm/v/methods.svg?style=flat
 [npm-url]: https://npmjs.org/package/methods
 [node-version-image]: https://img.shields.io/node/v/methods.svg?style=flat
-[node-version-url]: http://nodejs.org/download/
+[node-version-url]: https://nodejs.org/en/download/
 [travis-image]: https://img.shields.io/travis/jshttp/methods.svg?style=flat
 [travis-url]: https://travis-ci.org/jshttp/methods
 [coveralls-image]: https://img.shields.io/coveralls/jshttp/methods.svg?style=flat

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/methods/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/methods/index.js b/node_modules/cordova-serve/node_modules/express/node_modules/methods/index.js
index e89c7fd..667a50b 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/methods/index.js
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/methods/index.js
@@ -1,16 +1,44 @@
+/*!
+ * methods
+ * Copyright(c) 2013-2014 TJ Holowaychuk
+ * Copyright(c) 2015-2016 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict';
+
+/**
+ * Module dependencies.
+ * @private
+ */
 
 var http = require('http');
 
-/* istanbul ignore next: implementation differs on version */
-if (http.METHODS) {
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = getCurrentNodeMethods() || getBasicNodeMethods();
 
-  module.exports = http.METHODS.map(function(method){
+/**
+ * Get the current Node.js methods.
+ * @private
+ */
+
+function getCurrentNodeMethods() {
+  return http.METHODS && http.METHODS.map(function lowerCaseMethod(method) {
     return method.toLowerCase();
   });
+}
 
-} else {
+/**
+ * Get the "basic" Node.js methods, a snapshot from Node.js 0.10.
+ * @private
+ */
 
-  module.exports = [
+function getBasicNodeMethods() {
+  return [
     'get',
     'post',
     'put',
@@ -38,5 +66,4 @@ if (http.METHODS) {
     'search',
     'connect'
   ];
-
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/methods/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/methods/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/methods/package.json
index 9e2ef4d..fd072fc 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/methods/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/methods/package.json
@@ -1,7 +1,7 @@
 {
   "name": "methods",
   "description": "HTTP methods that node supports",
-  "version": "1.1.1",
+  "version": "1.1.2",
   "contributors": [
     {
       "name": "Douglas Christopher Wilson",
@@ -24,8 +24,8 @@
     "url": "git+https://github.com/jshttp/methods.git"
   },
   "devDependencies": {
-    "istanbul": "0.3",
-    "mocha": "1"
+    "istanbul": "0.4.1",
+    "mocha": "1.21.5"
   },
   "files": [
     "index.js",
@@ -36,9 +36,9 @@
     "node": ">= 0.6"
   },
   "scripts": {
-    "test": "mocha --reporter spec",
-    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot",
-    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot"
+    "test": "mocha --reporter spec --bail --check-leaks test/",
+    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
   },
   "browser": {
     "http": false
@@ -47,14 +47,42 @@
     "http",
     "methods"
   ],
-  "readme": "# Methods\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\n  HTTP verbs that node core's parser supports.\n\n\n## Install\n\n```bash\n$ npm install methods\n```\n\n## API\n\n```js\nvar methods = require('methods')\n```\n\n### methods\n\nThis is an array of lower-case method names that Node.js supports.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/methods.svg?style=flat\n[npm-url]: https://npmjs.org/package/methods\n[node-version-image]: https://img.shields.io/node/v/methods.svg?style=flat\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/methods.svg?style=flat\n[travis-url]: https://travis-ci.org/jshttp/methods\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/methods.svg?style
 =flat\n[coveralls-url]: https://coveralls.io/r/jshttp/methods?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/methods.svg?style=flat\n[downloads-url]: https://npmjs.org/package/methods\n",
-  "readmeFilename": "README.md",
+  "gitHead": "25d257d913f1b94bd2d73581521ff72c81469140",
   "bugs": {
     "url": "https://github.com/jshttp/methods/issues"
   },
-  "homepage": "https://github.com/jshttp/methods#readme",
-  "_id": "methods@1.1.1",
-  "_shasum": "17ea6366066d00c58e375b8ec7dfd0453c89822a",
-  "_resolved": "https://registry.npmjs.org/methods/-/methods-1.1.1.tgz",
-  "_from": "methods@>=1.1.1 <1.2.0"
+  "homepage": "https://github.com/jshttp/methods",
+  "_id": "methods@1.1.2",
+  "_shasum": "5529a4d67654134edcc5266656835b0f851afcee",
+  "_from": "methods@>=1.1.2 <1.2.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "jonathanong",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "dist": {
+    "shasum": "5529a4d67654134edcc5266656835b0f851afcee",
+    "tarball": "http://registry.npmjs.org/methods/-/methods-1.1.2.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/on-finished/node_modules/ee-first/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/on-finished/node_modules/ee-first/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/on-finished/node_modules/ee-first/package.json
index 238e73f..1d223fb 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/on-finished/node_modules/ee-first/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/on-finished/node_modules/ee-first/package.json
@@ -31,14 +31,34 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
   },
-  "readme": "# EE First\n\n[![NPM version][npm-image]][npm-url]\n[![Build status][travis-image]][travis-url]\n[![Test coverage][coveralls-image]][coveralls-url]\n[![License][license-image]][license-url]\n[![Downloads][downloads-image]][downloads-url]\n[![Gittip][gittip-image]][gittip-url]\n\nGet the first event in a set of event emitters and event pairs,\nthen clean up after itself.\n\n## Install\n\n```sh\n$ npm install ee-first\n```\n\n## API\n\n```js\nvar first = require('ee-first')\n```\n\n### first(arr, listener)\n\nInvoke `listener` on the first event from the list specified in `arr`. `arr` is\nan array of arrays, with each array in the format `[ee, ...event]`. `listener`\nwill be called only once, the first time any of the given events are emitted. If\n`error` is one of the listened events, then if that fires first, the `listener`\nwill be given the `err` argument.\n\nThe `listener` is invoked as `listener(err, ee, event, args)`, where `err` is the\nfirst argument emitted from
  an `error` event, if applicable; `ee` is the event\nemitter that fired; `event` is the string event name that fired; and `args` is an\narray of the arguments that were emitted on the event.\n\n```js\nvar ee1 = new EventEmitter()\nvar ee2 = new EventEmitter()\n\nfirst([\n  [ee1, 'close', 'end', 'error'],\n  [ee2, 'error']\n], function (err, ee, event, args) {\n  // listener invoked\n})\n```\n\n#### .cancel()\n\nThe group of listeners can be cancelled before being invoked and have all the event\nlisteners removed from the underlying event emitters.\n\n```js\nvar thunk = first([\n  [ee1, 'close', 'end', 'error'],\n  [ee2, 'error']\n], function (err, ee, event, args) {\n  // listener invoked\n})\n\n// cancel and clean up\nthunk.cancel()\n```\n\n[npm-image]: https://img.shields.io/npm/v/ee-first.svg?style=flat-square\n[npm-url]: https://npmjs.org/package/ee-first\n[github-tag]: http://img.shields.io/github/tag/jonathanong/ee-first.svg?style=flat-square\n[github-url]: https://github.com/
 jonathanong/ee-first/tags\n[travis-image]: https://img.shields.io/travis/jonathanong/ee-first.svg?style=flat-square\n[travis-url]: https://travis-ci.org/jonathanong/ee-first\n[coveralls-image]: https://img.shields.io/coveralls/jonathanong/ee-first.svg?style=flat-square\n[coveralls-url]: https://coveralls.io/r/jonathanong/ee-first?branch=master\n[license-image]: http://img.shields.io/npm/l/ee-first.svg?style=flat-square\n[license-url]: LICENSE.md\n[downloads-image]: http://img.shields.io/npm/dm/ee-first.svg?style=flat-square\n[downloads-url]: https://npmjs.org/package/ee-first\n[gittip-image]: https://img.shields.io/gittip/jonathanong.svg?style=flat-square\n[gittip-url]: https://www.gittip.com/jonathanong/\n",
-  "readmeFilename": "README.md",
+  "gitHead": "512e0ce4cc3643f603708f965a97b61b1a9c0441",
   "bugs": {
     "url": "https://github.com/jonathanong/ee-first/issues"
   },
-  "homepage": "https://github.com/jonathanong/ee-first#readme",
+  "homepage": "https://github.com/jonathanong/ee-first",
   "_id": "ee-first@1.1.1",
   "_shasum": "590c61156b0ae2f4f0255732a158b266bc56b21d",
+  "_from": "ee-first@1.1.1",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "dist": {
+    "shasum": "590c61156b0ae2f4f0255732a158b266bc56b21d",
+    "tarball": "http://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
-  "_from": "ee-first@1.1.1"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/on-finished/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/on-finished/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/on-finished/package.json
index b93ff65..7b2ebdd 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/on-finished/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/on-finished/package.json
@@ -38,14 +38,34 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
   },
-  "readme": "# on-finished\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nExecute a callback when a HTTP request closes, finishes, or errors.\n\n## Install\n\n```sh\n$ npm install on-finished\n```\n\n## API\n\n```js\nvar onFinished = require('on-finished')\n```\n\n### onFinished(res, listener)\n\nAttach a listener to listen for the response to finish. The listener will\nbe invoked only once when the response finished. If the response finished\nto an error, the first argument will contain the error. If the response\nhas already finished, the listener will be invoked.\n\nListening to the end of a response would be used to close things associated\nwith the response, like open files.\n\nListener is invoked as `listener(err, res)`.\n\n```js\nonFinished(res, function (err, res) {\n  // c
 lean up open fds, etc.\n  // err contains the error is request error'd\n})\n```\n\n### onFinished(req, listener)\n\nAttach a listener to listen for the request to finish. The listener will\nbe invoked only once when the request finished. If the request finished\nto an error, the first argument will contain the error. If the request\nhas already finished, the listener will be invoked.\n\nListening to the end of a request would be used to know when to continue\nafter reading the data.\n\nListener is invoked as `listener(err, req)`.\n\n```js\nvar data = ''\n\nreq.setEncoding('utf8')\nres.on('data', function (str) {\n  data += str\n})\n\nonFinished(req, function (err, req) {\n  // data is read unless there is err\n})\n```\n\n### onFinished.isFinished(res)\n\nDetermine if `res` is already finished. This would be useful to check and\nnot even start certain operations if the response has already finished.\n\n### onFinished.isFinished(req)\n\nDetermine if `req` is already finished. This wou
 ld be useful to check and\nnot even start certain operations if the request has already finished.\n\n## Special Node.js requests\n\n### HTTP CONNECT method\n\nThe meaning of the `CONNECT` method from RFC 7231, section 4.3.6:\n\n> The CONNECT method requests that the recipient establish a tunnel to\n> the destination origin server identified by the request-target and,\n> if successful, thereafter restrict its behavior to blind forwarding\n> of packets, in both directions, until the tunnel is closed.  Tunnels\n> are commonly used to create an end-to-end virtual connection, through\n> one or more proxies, which can then be secured using TLS (Transport\n> Layer Security, [RFC5246]).\n\nIn Node.js, these request objects come from the `'connect'` event on\nthe HTTP server.\n\nWhen this module is used on a HTTP `CONNECT` request, the request is\nconsidered \"finished\" immediately, **due to limitations in the Node.js\ninterface**. This means if the `CONNECT` request contains a request enti
 ty,\nthe request will be considered \"finished\" even before it has been read.\n\nThere is no such thing as a response object to a `CONNECT` request in\nNode.js, so there is no support for for one.\n\n### HTTP Upgrade request\n\nThe meaning of the `Upgrade` header from RFC 7230, section 6.1:\n\n> The \"Upgrade\" header field is intended to provide a simple mechanism\n> for transitioning from HTTP/1.1 to some other protocol on the same\n> connection.\n\nIn Node.js, these request objects come from the `'upgrade'` event on\nthe HTTP server.\n\nWhen this module is used on a HTTP request with an `Upgrade` header, the\nrequest is considered \"finished\" immediately, **due to limitations in the\nNode.js interface**. This means if the `Upgrade` request contains a request\nentity, the request will be considered \"finished\" even before it has been\nread.\n\nThere is no such thing as a response object to a `Upgrade` request in\nNode.js, so there is no support for for one.\n\n## Example\n\nThe
  following code ensures that file descriptors are always closed\nonce the response finishes.\n\n```js\nvar destroy = require('destroy')\nvar http = require('http')\nvar onFinished = require('on-finished')\n\nhttp.createServer(function onRequest(req, res) {\n  var stream = fs.createReadStream('package.json')\n  stream.pipe(res)\n  onFinished(res, function (err) {\n    destroy(stream)\n  })\n})\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/on-finished.svg\n[npm-url]: https://npmjs.org/package/on-finished\n[node-version-image]: https://img.shields.io/node/v/on-finished.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/on-finished/master.svg\n[travis-url]: https://travis-ci.org/jshttp/on-finished\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/on-finished/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/on-finished?branch=master\n[downloads-image]: https://img.shields.io/np
 m/dm/on-finished.svg\n[downloads-url]: https://npmjs.org/package/on-finished\n",
-  "readmeFilename": "README.md",
+  "gitHead": "34babcb58126a416fcf5205768204f2e12699dda",
   "bugs": {
     "url": "https://github.com/jshttp/on-finished/issues"
   },
-  "homepage": "https://github.com/jshttp/on-finished#readme",
+  "homepage": "https://github.com/jshttp/on-finished",
   "_id": "on-finished@2.3.0",
   "_shasum": "20f1336481b083cd75337992a16971aa2d906947",
+  "_from": "on-finished@>=2.3.0 <2.4.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "20f1336481b083cd75337992a16971aa2d906947",
+    "tarball": "http://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
-  "_from": "on-finished@>=2.3.0 <2.4.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/.npmignore
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/.npmignore b/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/.npmignore
deleted file mode 100644
index 85c82a5..0000000
--- a/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/.npmignore
+++ /dev/null
@@ -1,4 +0,0 @@
-benchmark/
-coverage/
-test/
-.travis.yml

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/HISTORY.md b/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/HISTORY.md
index 65a0860..395041e 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/HISTORY.md
@@ -1,3 +1,8 @@
+1.3.1 / 2016-01-17
+==================
+
+  * perf: enable strict mode
+
 1.3.0 / 2014-08-09
 ==================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/README.md b/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/README.md
index 0db1d02..f4796eb 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/README.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/README.md
@@ -1,8 +1,10 @@
 # parseurl
 
-[![NPM version](https://badge.fury.io/js/parseurl.svg)](http://badge.fury.io/js/parseurl)
-[![Build Status](https://travis-ci.org/expressjs/parseurl.svg?branch=master)](https://travis-ci.org/expressjs/parseurl)
-[![Coverage Status](https://img.shields.io/coveralls/expressjs/parseurl.svg?branch=master)](https://coveralls.io/r/expressjs/parseurl)
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Node.js Version][node-version-image]][node-version-url]
+[![Build Status][travis-image]][travis-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
 
 Parse a URL with memoization.
 
@@ -38,7 +40,7 @@ does not change will return a cached parsed object, rather than parsing again.
 ```bash
 $ npm run-script bench
 
-> parseurl@1.3.0 bench nodejs-parseurl
+> parseurl@1.3.1 bench nodejs-parseurl
 > node benchmark/index.js
 
 > node benchmark/fullurl.js
@@ -105,3 +107,14 @@ $ npm run-script bench
 ## License
 
   [MIT](LICENSE)
+
+[npm-image]: https://img.shields.io/npm/v/parseurl.svg
+[npm-url]: https://npmjs.org/package/parseurl
+[node-version-image]: https://img.shields.io/node/v/parseurl.svg
+[node-version-url]: http://nodejs.org/download/
+[travis-image]: https://img.shields.io/travis/pillarjs/parseurl/master.svg
+[travis-url]: https://travis-ci.org/pillarjs/parseurl
+[coveralls-image]: https://img.shields.io/coveralls/pillarjs/parseurl/master.svg
+[coveralls-url]: https://coveralls.io/r/pillarjs/parseurl?branch=master
+[downloads-image]: https://img.shields.io/npm/dm/parseurl.svg
+[downloads-url]: https://npmjs.org/package/parseurl

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/index.js b/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/index.js
index 8632347..56cc6ec 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/index.js
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/index.js
@@ -5,6 +5,8 @@
  * MIT Licensed
  */
 
+'use strict'
+
 /**
  * Module dependencies.
  */

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/package.json
index 7684cc6..7ba6287 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/parseurl/package.json
@@ -1,7 +1,7 @@
 {
   "name": "parseurl",
   "description": "parse a url with memoization",
-  "version": "1.3.0",
+  "version": "1.3.1",
   "author": {
     "name": "Jonathan Ong",
     "email": "me@jongleberry.com",
@@ -15,15 +15,24 @@
   ],
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/expressjs/parseurl.git"
+    "url": "git+https://github.com/pillarjs/parseurl.git"
   },
   "license": "MIT",
   "devDependencies": {
-    "benchmark": "1.0.0",
+    "benchmark": "2.0.0",
     "beautify-benchmark": "0.2.4",
-    "fast-url-parser": "~1.0.0",
-    "istanbul": "0.3.0",
-    "mocha": "~1.21.4"
+    "fast-url-parser": "1.1.3",
+    "istanbul": "0.4.2",
+    "mocha": "~1.21.5"
+  },
+  "files": [
+    "LICENSE",
+    "HISTORY.md",
+    "README.md",
+    "index.js"
+  ],
+  "engines": {
+    "node": ">= 0.8"
   },
   "scripts": {
     "bench": "node benchmark/index.js",
@@ -31,14 +40,50 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --check-leaks --reporter dot test/",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --check-leaks --reporter spec test/"
   },
-  "readme": "# parseurl\n\n[![NPM version](https://badge.fury.io/js/parseurl.svg)](http://badge.fury.io/js/parseurl)\n[![Build Status](https://travis-ci.org/expressjs/parseurl.svg?branch=master)](https://travis-ci.org/expressjs/parseurl)\n[![Coverage Status](https://img.shields.io/coveralls/expressjs/parseurl.svg?branch=master)](https://coveralls.io/r/expressjs/parseurl)\n\nParse a URL with memoization.\n\n## Install\n\n```bash\n$ npm install parseurl\n```\n\n## API\n\n```js\nvar parseurl = require('parseurl')\n```\n\n### parseurl(req)\n\nParse the URL of the given request object (looks at the `req.url` property)\nand return the result. The result is the same as `url.parse` in Node.js core.\nCalling this function multiple times on the same `req` where `req.url` does\nnot change will return a cached parsed object, rather than parsing again.\n\n### parseurl.original(req)\n\nParse the original URL of the given request object and return the result.\nThis works by trying to parse `req.or
 iginalUrl` if it is a string, otherwise\nparses `req.url`. The result is the same as `url.parse` in Node.js core.\nCalling this function multiple times on the same `req` where `req.originalUrl`\ndoes not change will return a cached parsed object, rather than parsing again.\n\n## Benchmark\n\n```bash\n$ npm run-script bench\n\n> parseurl@1.3.0 bench nodejs-parseurl\n> node benchmark/index.js\n\n> node benchmark/fullurl.js\n\n  Parsing URL \"http://localhost:8888/foo/bar?user=tj&pet=fluffy\"\n\n  1 test completed.\n  2 tests completed.\n  3 tests completed.\n\n  fasturl   x 1,290,780 ops/sec ±0.46% (195 runs sampled)\n  nativeurl x    56,401 ops/sec ±0.22% (196 runs sampled)\n  parseurl  x    55,231 ops/sec ±0.22% (194 runs sampled)\n\n> node benchmark/pathquery.js\n\n  Parsing URL \"/foo/bar?user=tj&pet=fluffy\"\n\n  1 test completed.\n  2 tests completed.\n  3 tests completed.\n\n  fasturl   x 1,986,668 ops/sec ±0.27% (190 runs sampled)\n  nativeurl x    98,740 ops/sec ±0.21% (
 195 runs sampled)\n  parseurl  x 2,628,171 ops/sec ±0.36% (195 runs sampled)\n\n> node benchmark/samerequest.js\n\n  Parsing URL \"/foo/bar?user=tj&pet=fluffy\" on same request object\n\n  1 test completed.\n  2 tests completed.\n  3 tests completed.\n\n  fasturl   x  2,184,468 ops/sec ±0.40% (194 runs sampled)\n  nativeurl x     99,437 ops/sec ±0.71% (194 runs sampled)\n  parseurl  x 10,498,005 ops/sec ±0.61% (186 runs sampled)\n\n> node benchmark/simplepath.js\n\n  Parsing URL \"/foo/bar\"\n\n  1 test completed.\n  2 tests completed.\n  3 tests completed.\n\n  fasturl   x 4,535,825 ops/sec ±0.27% (191 runs sampled)\n  nativeurl x    98,769 ops/sec ±0.54% (191 runs sampled)\n  parseurl  x 4,164,865 ops/sec ±0.34% (192 runs sampled)\n\n> node benchmark/slash.js\n\n  Parsing URL \"/\"\n\n  1 test completed.\n  2 tests completed.\n  3 tests completed.\n\n  fasturl   x 4,908,405 ops/sec ±0.42% (191 runs sampled)\n  nativeurl x   100,945 ops/sec ±0.59% (188 runs sampled)\n  par
 seurl  x 4,333,208 ops/sec ±0.27% (194 runs sampled)\n```\n\n## License\n\n  [MIT](LICENSE)\n",
-  "readmeFilename": "README.md",
+  "gitHead": "6d22d376d75b927ab2b5347ce3a1d6735133dd43",
   "bugs": {
-    "url": "https://github.com/expressjs/parseurl/issues"
+    "url": "https://github.com/pillarjs/parseurl/issues"
+  },
+  "homepage": "https://github.com/pillarjs/parseurl",
+  "_id": "parseurl@1.3.1",
+  "_shasum": "c8ab8c9223ba34888aa64a297b28853bec18da56",
+  "_from": "parseurl@>=1.3.1 <1.4.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "mscdex",
+      "email": "mscdex@mscdex.net"
+    },
+    {
+      "name": "fishrock123",
+      "email": "fishrock123@rocketmail.com"
+    },
+    {
+      "name": "defunctzombie",
+      "email": "shtylman@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "c8ab8c9223ba34888aa64a297b28853bec18da56",
+    "tarball": "http://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz"
   },
-  "homepage": "https://github.com/expressjs/parseurl#readme",
-  "_id": "parseurl@1.3.0",
-  "_shasum": "b58046db4223e145afa76009e61bac87cc2281b3",
-  "_resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.0.tgz",
-  "_from": "parseurl@>=1.3.0 <1.4.0"
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/path-to-regexp/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/path-to-regexp/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/path-to-regexp/package.json
index 25ab61b..118b1e6 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/path-to-regexp/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/path-to-regexp/package.json
@@ -27,14 +27,159 @@
     "mocha": "^1.17.1",
     "istanbul": "^0.2.6"
   },
-  "readme": "# Path-to-RegExp\n\nTurn an Express-style path string such as `/user/:name` into a regular expression.\n\n**Note:** This is a legacy branch. You should upgrade to `1.x`.\n\n## Usage\n\n```javascript\nvar pathToRegexp = require('path-to-regexp');\n```\n\n### pathToRegexp(path, keys, options)\n\n - **path** A string in the express format, an array of such strings, or a regular expression\n - **keys** An array to be populated with the keys present in the url.  Once the function completes, this will be an array of strings.\n - **options**\n   - **options.sensitive** Defaults to false, set this to true to make routes case sensitive\n   - **options.strict** Defaults to false, set this to true to make the trailing slash matter.\n   - **options.end** Defaults to true, set this to false to only match the prefix of the URL.\n\n```javascript\nvar keys = [];\nvar exp = pathToRegexp('/foo/:bar', keys);\n//keys = ['bar']\n//exp = /^\\/foo\\/(?:([^\\/]+?))\\/?$/i\n```\n\n## Live Demo\
 n\nYou can see a live demo of this library in use at [express-route-tester](http://forbeslindesay.github.com/express-route-tester/).\n\n## License\n\n  MIT\n",
-  "readmeFilename": "Readme.md",
+  "gitHead": "039118d6c3c186d3f176c73935ca887a32a33d93",
   "bugs": {
     "url": "https://github.com/component/path-to-regexp/issues"
   },
   "homepage": "https://github.com/component/path-to-regexp#readme",
   "_id": "path-to-regexp@0.1.7",
   "_shasum": "df604178005f522f15eb4490e7247a1bfaa67f8c",
+  "_from": "path-to-regexp@0.1.7",
+  "_npmVersion": "2.13.2",
+  "_nodeVersion": "2.3.3",
+  "_npmUser": {
+    "name": "blakeembrey",
+    "email": "hello@blakeembrey.com"
+  },
+  "maintainers": [
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "hughsk",
+      "email": "hughskennedy@gmail.com"
+    },
+    {
+      "name": "timaschew",
+      "email": "timaschew@gmail.com"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "dominicbarnes",
+      "email": "dominic@dbarnes.info"
+    },
+    {
+      "name": "tootallnate",
+      "email": "nathan@tootallnate.net"
+    },
+    {
+      "name": "rauchg",
+      "email": "rauchg@gmail.com"
+    },
+    {
+      "name": "retrofox",
+      "email": "rdsuarez@gmail.com"
+    },
+    {
+      "name": "coreh",
+      "email": "thecoreh@gmail.com"
+    },
+    {
+      "name": "forbeslindesay",
+      "email": "forbes@lindesay.co.uk"
+    },
+    {
+      "name": "kelonye",
+      "email": "kelonyemitchel@gmail.com"
+    },
+    {
+      "name": "mattmueller",
+      "email": "mattmuelle@gmail.com"
+    },
+    {
+      "name": "yields",
+      "email": "yields@icloud.com"
+    },
+    {
+      "name": "anthonyshort",
+      "email": "antshort@gmail.com"
+    },
+    {
+      "name": "ianstormtaylor",
+      "email": "ian@ianstormtaylor.com"
+    },
+    {
+      "name": "cristiandouce",
+      "email": "cristian@gravityonmars.com"
+    },
+    {
+      "name": "swatinem",
+      "email": "arpad.borsos@googlemail.com"
+    },
+    {
+      "name": "stagas",
+      "email": "gstagas@gmail.com"
+    },
+    {
+      "name": "amasad",
+      "email": "amjad.masad@gmail.com"
+    },
+    {
+      "name": "juliangruber",
+      "email": "julian@juliangruber.com"
+    },
+    {
+      "name": "calvinfo",
+      "email": "calvin@calv.info"
+    },
+    {
+      "name": "blakeembrey",
+      "email": "hello@blakeembrey.com"
+    },
+    {
+      "name": "timoxley",
+      "email": "secoif@gmail.com"
+    },
+    {
+      "name": "jonathanong",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "queckezz",
+      "email": "fabian.eichenberger@gmail.com"
+    },
+    {
+      "name": "nami-doc",
+      "email": "vendethiel@hotmail.fr"
+    },
+    {
+      "name": "clintwood",
+      "email": "clint@anotherway.co.za"
+    },
+    {
+      "name": "thehydroimpulse",
+      "email": "dnfagnan@gmail.com"
+    },
+    {
+      "name": "stephenmathieson",
+      "email": "me@stephenmathieson.com"
+    },
+    {
+      "name": "trevorgerhardt",
+      "email": "trevorgerhardt@gmail.com"
+    },
+    {
+      "name": "dfcreative",
+      "email": "df.creative@gmail.com"
+    },
+    {
+      "name": "defunctzombie",
+      "email": "shtylman@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "df604178005f522f15eb4490e7247a1bfaa67f8c",
+    "tarball": "http://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
-  "_from": "path-to-regexp@0.1.7"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/HISTORY.md b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/HISTORY.md
index 7248dbb..84f11aa 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/HISTORY.md
@@ -1,3 +1,17 @@
+1.0.10 / 2015-12-09
+===================
+
+  * deps: ipaddr.js@1.0.5
+    - Fix regression in `isValid` with non-string arguments
+
+1.0.9 / 2015-12-01
+==================
+
+  * deps: ipaddr.js@1.0.4
+    - Fix accepting some invalid IPv6 addresses
+    - Reject CIDRs with negative or overlong masks
+  * perf: enable strict mode
+
 1.0.8 / 2015-05-10
 ==================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/index.js b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/index.js
index d739513..3200efb 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/index.js
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/index.js
@@ -4,6 +4,8 @@
  * MIT Licensed
  */
 
+'use strict'
+
 /**
  * Module exports.
  */

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/forwarded/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/forwarded/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/forwarded/package.json
index ecd8668..7d24004 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/forwarded/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/forwarded/package.json
@@ -36,14 +36,30 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
   },
-  "readme": "# forwarded\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nParse HTTP X-Forwarded-For header\n\n## Installation\n\n```sh\n$ npm install forwarded\n```\n\n## API\n\n```js\nvar forwarded = require('forwarded')\n```\n\n### forwarded(req)\n\n```js\nvar addresses = forwarded(req)\n```\n\nParse the `X-Forwarded-For` header from the request. Returns an array\nof the addresses, including the socket address for the `req`. In reverse\norder (i.e. index `0` is the socket address and the last index is the\nfurthest address, typically the end-user).\n\n## Testing\n\n```sh\n$ npm test\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/forwarded.svg?style=flat\n[npm-url]: https://npmjs.org/package/forwarded\n[node-version-image]: https://img.shields.io/
 node/v/forwarded.svg?style=flat\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/forwarded.svg?style=flat\n[travis-url]: https://travis-ci.org/jshttp/forwarded\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/forwarded.svg?style=flat\n[coveralls-url]: https://coveralls.io/r/jshttp/forwarded?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/forwarded.svg?style=flat\n[downloads-url]: https://npmjs.org/package/forwarded\n",
-  "readmeFilename": "README.md",
+  "gitHead": "e9a9faeb3cfaadf40eb57d144fff26bca9b818e8",
   "bugs": {
     "url": "https://github.com/jshttp/forwarded/issues"
   },
-  "homepage": "https://github.com/jshttp/forwarded#readme",
+  "homepage": "https://github.com/jshttp/forwarded",
   "_id": "forwarded@0.1.0",
   "_shasum": "19ef9874c4ae1c297bcf078fde63a09b66a84363",
+  "_from": "forwarded@>=0.1.0 <0.2.0",
+  "_npmVersion": "1.4.21",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "dist": {
+    "shasum": "19ef9874c4ae1c297bcf078fde63a09b66a84363",
+    "tarball": "http://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz",
-  "_from": "forwarded@>=0.1.0 <0.2.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/.travis.yml
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/.travis.yml b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/.travis.yml
new file mode 100644
index 0000000..aa3d14a
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/.travis.yml
@@ -0,0 +1,10 @@
+language: node_js
+
+node_js:
+  - "0.10"
+  - "0.11"
+  - "0.12"
+  - "4.0"
+  - "4.1"
+  - "4.2"
+  - "5"

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/README.md b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/README.md
index c596e7e..f4f8776 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/README.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/README.md
@@ -1,4 +1,4 @@
-# ipaddr.js — an IPv6 and IPv4 address manipulation library
+# ipaddr.js — an IPv6 and IPv4 address manipulation library [![Build Status](https://travis-ci.org/whitequark/ipaddr.js.svg)](https://travis-ci.org/whitequark/ipaddr.js)
 
 ipaddr.js is a small (1.9K minified and gzipped) library for manipulating
 IP addresses in JavaScript environments. It runs on both CommonJS runtimes

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/bower.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/bower.json b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/bower.json
new file mode 100644
index 0000000..bc04ffe
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/proxy-addr/node_modules/ipaddr.js/bower.json
@@ -0,0 +1,29 @@
+{
+  "name": "ipaddr.js",
+  "version": "1.0.5",
+  "homepage": "https://github.com/whitequark/ipaddr.js",
+  "authors": [
+    "whitequark <wh...@whitequark.org>"
+  ],
+  "description": "IP address manipulation library in JavaScript (CoffeeScript, actually)",
+  "main": "lib/ipaddr.js",
+  "moduleType": [
+    "globals",
+    "node"
+  ],
+  "keywords": [
+    "javscript",
+    "ip",
+    "address",
+    "ipv4",
+    "ipv6"
+  ],
+  "license": "MIT",
+  "ignore": [
+    "**/.*",
+    "node_modules",
+    "bower_components",
+    "test",
+    "tests"
+  ]
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[11/14] cordova-browser git commit: CB-10788 Updated checked in node_modules

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/route.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/route.js b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/route.js
new file mode 100644
index 0000000..c365e1e
--- /dev/null
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/route.js
@@ -0,0 +1,98 @@
+var conversions = require('./conversions');
+
+/*
+	this function routes a model to all other models.
+
+	all functions that are routed have a property `.conversion` attached
+	to the returned synthetic function. This property is an array
+	of strings, each with the steps in between the 'from' and 'to'
+	color models (inclusive).
+
+	conversions that are not possible simply are not included.
+*/
+
+// https://jsperf.com/object-keys-vs-for-in-with-closure/3
+var models = Object.keys(conversions);
+
+function buildGraph() {
+	var graph = {};
+
+	for (var len = models.length, i = 0; i < len; i++) {
+		graph[models[i]] = {
+			// http://jsperf.com/1-vs-infinity
+			// micro-opt, but this is simple.
+			distance: -1,
+			parent: null
+		};
+	}
+
+	return graph;
+}
+
+// https://en.wikipedia.org/wiki/Breadth-first_search
+function deriveBFS(fromModel) {
+	var graph = buildGraph();
+	var queue = [fromModel]; // unshift -> queue -> pop
+
+	graph[fromModel].distance = 0;
+
+	while (queue.length) {
+		var current = queue.pop();
+		var adjacents = Object.keys(conversions[current]);
+
+		for (var len = adjacents.length, i = 0; i < len; i++) {
+			var adjacent = adjacents[i];
+			var node = graph[adjacent];
+
+			if (node.distance === -1) {
+				node.distance = graph[current].distance + 1;
+				node.parent = current;
+				queue.unshift(adjacent);
+			}
+		}
+	}
+
+	return graph;
+}
+
+function link(from, to) {
+	return function (args) {
+		return to(from(args));
+	};
+}
+
+function wrapConversion(toModel, graph) {
+	var path = [graph[toModel].parent, toModel];
+	var fn = conversions[graph[toModel].parent][toModel];
+
+	var cur = graph[toModel].parent;
+	while (graph[cur].parent) {
+		path.unshift(graph[cur].parent);
+		fn = link(conversions[graph[cur].parent][cur], fn);
+		cur = graph[cur].parent;
+	}
+
+	fn.conversion = path;
+	return fn;
+}
+
+module.exports = function (fromModel) {
+	var graph = deriveBFS(fromModel);
+	var conversion = {};
+
+	var models = Object.keys(graph);
+	for (var len = models.length, i = 0; i < len; i++) {
+		var toModel = models[i];
+		var node = graph[toModel];
+
+		if (node.parent === null) {
+			// no possible conversion, or this node is the source model.
+			continue;
+		}
+
+		conversion[toModel] = wrapConversion(toModel, graph);
+	}
+
+	return conversion;
+};
+

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/package.json b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/package.json
index f2e9595..3367a23 100644
--- a/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/package.json
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/package.json
@@ -1,6 +1,6 @@
 {
   "name": "ansi-styles",
-  "version": "2.1.0",
+  "version": "2.2.0",
   "description": "ANSI escape codes for styling strings in the terminal",
   "license": "MIT",
   "repository": {
@@ -14,21 +14,19 @@
   },
   "maintainers": [
     {
-      "name": "Sindre Sorhus",
-      "email": "sindresorhus@gmail.com",
-      "url": "sindresorhus.com"
+      "name": "sindresorhus",
+      "email": "sindresorhus@gmail.com"
     },
     {
-      "name": "Joshua Appelman",
-      "email": "jappelman@xebia.com",
-      "url": "jbnicolai.com"
+      "name": "jbnicolai",
+      "email": "jappelman@xebia.com"
     }
   ],
   "engines": {
     "node": ">=0.10.0"
   },
   "scripts": {
-    "test": "mocha"
+    "test": "xo && ava"
   },
   "files": [
     "index.js"
@@ -55,17 +53,36 @@
     "command-line",
     "text"
   ],
+  "dependencies": {
+    "color-convert": "^1.0.0"
+  },
   "devDependencies": {
-    "mocha": "*"
+    "ava": "*",
+    "xo": "*"
   },
-  "readme": "# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles)\n\n> [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal\n\nYou probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings.\n\n![](screenshot.png)\n\n\n## Install\n\n```\n$ npm install --save ansi-styles\n```\n\n\n## Usage\n\n```js\nvar ansi = require('ansi-styles');\n\nconsole.log(ansi.green.open + 'Hello world!' + ansi.green.close);\n```\n\n\n## API\n\nEach style has an `open` and `close` property.\n\n\n## Styles\n\n### Modifiers\n\n- `reset`\n- `bold`\n- `dim`\n- `italic` *(not widely supported)*\n- `underline`\n- `inverse`\n- `hidden`\n- `strikethrough` *(not widely supported)*\n\n### Colors\n\n- `black`\n- `red`\n- `green`\n- `yellow`\n- `blue`\n- `magenta`\n- `cyan`\n- `white`\n- `gray`\n\n### Background colors\n\n- `bgBlac
 k`\n- `bgRed`\n- `bgGreen`\n- `bgYellow`\n- `bgBlue`\n- `bgMagenta`\n- `bgCyan`\n- `bgWhite`\n\n\n## Advanced usage\n\nBy default you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module.\n\n- `ansi.modifiers`\n- `ansi.colors`\n- `ansi.bgColors`\n\n\n###### Example\n\n```js\nconsole.log(ansi.colors.green.open);\n```\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n",
-  "readmeFilename": "readme.md",
+  "gitHead": "74502955deaf0eb977507757e33c52cad5a9aefa",
   "bugs": {
     "url": "https://github.com/chalk/ansi-styles/issues"
   },
-  "homepage": "https://github.com/chalk/ansi-styles#readme",
-  "_id": "ansi-styles@2.1.0",
-  "_shasum": "990f747146927b559a932bf92959163d60c0d0e2",
-  "_resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.1.0.tgz",
-  "_from": "ansi-styles@>=2.1.0 <3.0.0"
+  "homepage": "https://github.com/chalk/ansi-styles",
+  "_id": "ansi-styles@2.2.0",
+  "_shasum": "c59191936e6ed1c1315a4b6b6b97f3acfbfa68b0",
+  "_from": "ansi-styles@>=2.1.0 <3.0.0",
+  "_npmVersion": "2.14.12",
+  "_nodeVersion": "4.2.6",
+  "_npmUser": {
+    "name": "jbnicolai",
+    "email": "jappelman@xebia.com"
+  },
+  "dist": {
+    "shasum": "c59191936e6ed1c1315a4b6b6b97f3acfbfa68b0",
+    "tarball": "http://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.0.tgz"
+  },
+  "_npmOperationalInternal": {
+    "host": "packages-5-east.internal.npmjs.com",
+    "tmp": "tmp/ansi-styles-2.2.0.tgz_1456057673117_0.8365559694357216"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.0.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/readme.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/readme.md b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/readme.md
index 3f933f6..b87b124 100644
--- a/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/readme.md
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/ansi-styles/readme.md
@@ -17,12 +17,20 @@ $ npm install --save ansi-styles
 ## Usage
 
 ```js
-var ansi = require('ansi-styles');
-
-console.log(ansi.green.open + 'Hello world!' + ansi.green.close);
+const style = require('ansi-styles');
+
+console.log(style.green.open + 'Hello world!' + style.green.close);
+
+// color conversion between 16/256/truecolor
+// NOTE: if conversion goes to 16 colors or 256 colors, the original color
+//       may be degraded to fit that color palette. This means terminals
+//       that do not support 16 million colors will best-match the
+//       original color.
+console.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close);
+console.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close);
+console.log(style.color.ansi16m.hex('#ABCDEF') + 'Hello world!' + style.color.close);
 ```
 
-
 ## API
 
 Each style has an `open` and `close` property.
@@ -69,17 +77,37 @@ Each style has an `open` and `close` property.
 
 By default you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module.
 
-- `ansi.modifiers`
-- `ansi.colors`
-- `ansi.bgColors`
+- `style.modifier`
+- `style.color`
+- `style.bgColor`
 
 
 ###### Example
 
 ```js
-console.log(ansi.colors.green.open);
+console.log(style.color.green.open);
 ```
 
+## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728)
+`ansi-styles` uses the [`color-convert`](https://github.com/MoOx/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors.
+
+To use these, call the associated conversion function with the intended output, e.g.:
+
+```js
+style.color.ansi.rgb(100, 200, 15); // RGB to 16 color ansi foreground code
+style.bgColor.ansi.rgb(100, 200, 15); // RGB to 16 color ansi background code
+
+style.color.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code
+style.bgColor.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code
+
+style.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground code
+style.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code
+```
+
+## Related
+
+- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal
+
 
 ## License
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/escape-string-regexp/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/escape-string-regexp/index.js b/node_modules/cordova-serve/node_modules/chalk/node_modules/escape-string-regexp/index.js
index ac6572c..7834bf9 100644
--- a/node_modules/cordova-serve/node_modules/chalk/node_modules/escape-string-regexp/index.js
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/escape-string-regexp/index.js
@@ -7,5 +7,5 @@ module.exports = function (str) {
 		throw new TypeError('Expected a string');
 	}
 
-	return str.replace(matchOperatorsRe,  '\\$&');
+	return str.replace(matchOperatorsRe, '\\$&');
 };

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/escape-string-regexp/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/escape-string-regexp/package.json b/node_modules/cordova-serve/node_modules/chalk/node_modules/escape-string-regexp/package.json
index b2bafb2..7a8a3f7 100644
--- a/node_modules/cordova-serve/node_modules/chalk/node_modules/escape-string-regexp/package.json
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/escape-string-regexp/package.json
@@ -1,6 +1,6 @@
 {
   "name": "escape-string-regexp",
-  "version": "1.0.3",
+  "version": "1.0.5",
   "description": "Escape RegExp special characters",
   "license": "MIT",
   "repository": {
@@ -10,52 +10,66 @@
   "author": {
     "name": "Sindre Sorhus",
     "email": "sindresorhus@gmail.com",
-    "url": "http://sindresorhus.com"
+    "url": "sindresorhus.com"
   },
   "maintainers": [
     {
-      "name": "Sindre Sorhus",
-      "email": "sindresorhus@gmail.com",
-      "url": "http://sindresorhus.com"
+      "name": "sindresorhus",
+      "email": "sindresorhus@gmail.com"
     },
     {
-      "name": "Joshua Appelman",
-      "email": "jappelman@xebia.com",
-      "url": "http://jbnicolai.com"
+      "name": "jbnicolai",
+      "email": "jappelman@xebia.com"
     }
   ],
   "engines": {
     "node": ">=0.8.0"
   },
   "scripts": {
-    "test": "mocha"
+    "test": "xo && ava"
   },
   "files": [
     "index.js"
   ],
   "keywords": [
+    "escape",
     "regex",
     "regexp",
     "re",
     "regular",
     "expression",
-    "escape",
     "string",
     "str",
     "special",
     "characters"
   ],
   "devDependencies": {
-    "mocha": "*"
+    "ava": "*",
+    "xo": "*"
   },
-  "readme": "# escape-string-regexp [![Build Status](https://travis-ci.org/sindresorhus/escape-string-regexp.svg?branch=master)](https://travis-ci.org/sindresorhus/escape-string-regexp)\n\n> Escape RegExp special characters\n\n\n## Install\n\n```sh\n$ npm install --save escape-string-regexp\n```\n\n\n## Usage\n\n```js\nvar escapeStringRegexp = require('escape-string-regexp');\n\nvar escapedString = escapeStringRegexp('how much $ for a unicorn?');\n//=> how much \\$ for a unicorn\\?\n\nnew RegExp(escapedString);\n```\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n",
-  "readmeFilename": "readme.md",
+  "gitHead": "db124a3e1aae9d692c4899e42a5c6c3e329eaa20",
   "bugs": {
     "url": "https://github.com/sindresorhus/escape-string-regexp/issues"
   },
-  "homepage": "https://github.com/sindresorhus/escape-string-regexp#readme",
-  "_id": "escape-string-regexp@1.0.3",
-  "_shasum": "9e2d8b25bc2555c3336723750e03f099c2735bb5",
-  "_resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz",
-  "_from": "escape-string-regexp@>=1.0.2 <2.0.0"
+  "homepage": "https://github.com/sindresorhus/escape-string-regexp",
+  "_id": "escape-string-regexp@1.0.5",
+  "_shasum": "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4",
+  "_from": "escape-string-regexp@>=1.0.2 <2.0.0",
+  "_npmVersion": "2.14.12",
+  "_nodeVersion": "4.2.6",
+  "_npmUser": {
+    "name": "jbnicolai",
+    "email": "jappelman@xebia.com"
+  },
+  "dist": {
+    "shasum": "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4",
+    "tarball": "http://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
+  },
+  "_npmOperationalInternal": {
+    "host": "packages-9-west.internal.npmjs.com",
+    "tmp": "tmp/escape-string-regexp-1.0.5.tgz_1456059312074_0.7245344955008477"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/escape-string-regexp/readme.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/escape-string-regexp/readme.md b/node_modules/cordova-serve/node_modules/chalk/node_modules/escape-string-regexp/readme.md
index 808a963..87ac82d 100644
--- a/node_modules/cordova-serve/node_modules/chalk/node_modules/escape-string-regexp/readme.md
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/escape-string-regexp/readme.md
@@ -5,7 +5,7 @@
 
 ## Install
 
-```sh
+```
 $ npm install --save escape-string-regexp
 ```
 
@@ -13,10 +13,10 @@ $ npm install --save escape-string-regexp
 ## Usage
 
 ```js
-var escapeStringRegexp = require('escape-string-regexp');
+const escapeStringRegexp = require('escape-string-regexp');
 
-var escapedString = escapeStringRegexp('how much $ for a unicorn?');
-//=> how much \$ for a unicorn\?
+const escapedString = escapeStringRegexp('how much $ for a unicorn?');
+//=> 'how much \$ for a unicorn\?'
 
 new RegExp(escapedString);
 ```

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/package.json b/node_modules/cordova-serve/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/package.json
index e076e46..7fc0767 100644
--- a/node_modules/cordova-serve/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/package.json
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/has-ansi/node_modules/ansi-regex/package.json
@@ -14,14 +14,12 @@
   },
   "maintainers": [
     {
-      "name": "Sindre Sorhus",
-      "email": "sindresorhus@gmail.com",
-      "url": "sindresorhus.com"
+      "name": "sindresorhus",
+      "email": "sindresorhus@gmail.com"
     },
     {
-      "name": "Joshua Appelman",
-      "email": "jappelman@xebia.com",
-      "url": "jbnicolai.com"
+      "name": "jbnicolai",
+      "email": "jappelman@xebia.com"
     }
   ],
   "engines": {
@@ -64,14 +62,25 @@
   "devDependencies": {
     "mocha": "*"
   },
-  "readme": "# ansi-regex [![Build Status](https://travis-ci.org/sindresorhus/ansi-regex.svg?branch=master)](https://travis-ci.org/sindresorhus/ansi-regex)\n\n> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)\n\n\n## Install\n\n```\n$ npm install --save ansi-regex\n```\n\n\n## Usage\n\n```js\nvar ansiRegex = require('ansi-regex');\n\nansiRegex().test('\\u001b[4mcake\\u001b[0m');\n//=> true\n\nansiRegex().test('cake');\n//=> false\n\n'\\u001b[4mcake\\u001b[0m'.match(ansiRegex());\n//=> ['\\u001b[4m', '\\u001b[0m']\n```\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n",
-  "readmeFilename": "readme.md",
+  "gitHead": "57c3f2941a73079fa8b081e02a522e3d29913e2f",
   "bugs": {
     "url": "https://github.com/sindresorhus/ansi-regex/issues"
   },
-  "homepage": "https://github.com/sindresorhus/ansi-regex#readme",
+  "homepage": "https://github.com/sindresorhus/ansi-regex",
   "_id": "ansi-regex@2.0.0",
   "_shasum": "c5061b6e0ef8a81775e50f5d66151bf6bf371107",
+  "_from": "ansi-regex@>=2.0.0 <3.0.0",
+  "_npmVersion": "2.11.2",
+  "_nodeVersion": "0.12.5",
+  "_npmUser": {
+    "name": "sindresorhus",
+    "email": "sindresorhus@gmail.com"
+  },
+  "dist": {
+    "shasum": "c5061b6e0ef8a81775e50f5d66151bf6bf371107",
+    "tarball": "http://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz",
-  "_from": "ansi-regex@>=2.0.0 <3.0.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/has-ansi/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/has-ansi/package.json b/node_modules/cordova-serve/node_modules/chalk/node_modules/has-ansi/package.json
index 15f6237..d39a62e 100644
--- a/node_modules/cordova-serve/node_modules/chalk/node_modules/has-ansi/package.json
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/has-ansi/package.json
@@ -14,14 +14,12 @@
   },
   "maintainers": [
     {
-      "name": "Sindre Sorhus",
-      "email": "sindresorhus@gmail.com",
-      "url": "sindresorhus.com"
+      "name": "sindresorhus",
+      "email": "sindresorhus@gmail.com"
     },
     {
-      "name": "Joshua Appelman",
-      "email": "jappelman@xebia.com",
-      "url": "jbnicolai.com"
+      "name": "jbnicolai",
+      "email": "jappelman@xebia.com"
     }
   ],
   "engines": {
@@ -63,14 +61,25 @@
   "devDependencies": {
     "ava": "0.0.4"
   },
-  "readme": "# has-ansi [![Build Status](https://travis-ci.org/sindresorhus/has-ansi.svg?branch=master)](https://travis-ci.org/sindresorhus/has-ansi)\n\n> Check if a string has [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)\n\n\n## Install\n\n```\n$ npm install --save has-ansi\n```\n\n\n## Usage\n\n```js\nvar hasAnsi = require('has-ansi');\n\nhasAnsi('\\u001b[4mcake\\u001b[0m');\n//=> true\n\nhasAnsi('cake');\n//=> false\n```\n\n\n## Related\n\n- [has-ansi-cli](https://github.com/sindresorhus/has-ansi-cli) - CLI for this module\n- [strip-ansi](https://github.com/sindresorhus/strip-ansi) - Strip ANSI escape codes\n- [ansi-regex](https://github.com/sindresorhus/ansi-regex) - Regular expression for matching ANSI escape codes\n- [chalk](https://github.com/sindresorhus/chalk) - Terminal string styling done right\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n",
-  "readmeFilename": "readme.md",
+  "gitHead": "0722275e1bef139fcd09137da6e5550c3cd368b9",
   "bugs": {
     "url": "https://github.com/sindresorhus/has-ansi/issues"
   },
-  "homepage": "https://github.com/sindresorhus/has-ansi#readme",
+  "homepage": "https://github.com/sindresorhus/has-ansi",
   "_id": "has-ansi@2.0.0",
   "_shasum": "34f5049ce1ecdf2b0649af3ef24e45ed35416d91",
+  "_from": "has-ansi@>=2.0.0 <3.0.0",
+  "_npmVersion": "2.11.2",
+  "_nodeVersion": "0.12.5",
+  "_npmUser": {
+    "name": "sindresorhus",
+    "email": "sindresorhus@gmail.com"
+  },
+  "dist": {
+    "shasum": "34f5049ce1ecdf2b0649af3ef24e45ed35416d91",
+    "tarball": "http://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
-  "_from": "has-ansi@>=2.0.0 <3.0.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/package.json b/node_modules/cordova-serve/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/package.json
index e076e46..7fc0767 100644
--- a/node_modules/cordova-serve/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/package.json
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/strip-ansi/node_modules/ansi-regex/package.json
@@ -14,14 +14,12 @@
   },
   "maintainers": [
     {
-      "name": "Sindre Sorhus",
-      "email": "sindresorhus@gmail.com",
-      "url": "sindresorhus.com"
+      "name": "sindresorhus",
+      "email": "sindresorhus@gmail.com"
     },
     {
-      "name": "Joshua Appelman",
-      "email": "jappelman@xebia.com",
-      "url": "jbnicolai.com"
+      "name": "jbnicolai",
+      "email": "jappelman@xebia.com"
     }
   ],
   "engines": {
@@ -64,14 +62,25 @@
   "devDependencies": {
     "mocha": "*"
   },
-  "readme": "# ansi-regex [![Build Status](https://travis-ci.org/sindresorhus/ansi-regex.svg?branch=master)](https://travis-ci.org/sindresorhus/ansi-regex)\n\n> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)\n\n\n## Install\n\n```\n$ npm install --save ansi-regex\n```\n\n\n## Usage\n\n```js\nvar ansiRegex = require('ansi-regex');\n\nansiRegex().test('\\u001b[4mcake\\u001b[0m');\n//=> true\n\nansiRegex().test('cake');\n//=> false\n\n'\\u001b[4mcake\\u001b[0m'.match(ansiRegex());\n//=> ['\\u001b[4m', '\\u001b[0m']\n```\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n",
-  "readmeFilename": "readme.md",
+  "gitHead": "57c3f2941a73079fa8b081e02a522e3d29913e2f",
   "bugs": {
     "url": "https://github.com/sindresorhus/ansi-regex/issues"
   },
-  "homepage": "https://github.com/sindresorhus/ansi-regex#readme",
+  "homepage": "https://github.com/sindresorhus/ansi-regex",
   "_id": "ansi-regex@2.0.0",
   "_shasum": "c5061b6e0ef8a81775e50f5d66151bf6bf371107",
+  "_from": "ansi-regex@>=2.0.0 <3.0.0",
+  "_npmVersion": "2.11.2",
+  "_nodeVersion": "0.12.5",
+  "_npmUser": {
+    "name": "sindresorhus",
+    "email": "sindresorhus@gmail.com"
+  },
+  "dist": {
+    "shasum": "c5061b6e0ef8a81775e50f5d66151bf6bf371107",
+    "tarball": "http://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz",
-  "_from": "ansi-regex@>=2.0.0 <3.0.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/strip-ansi/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/strip-ansi/package.json b/node_modules/cordova-serve/node_modules/chalk/node_modules/strip-ansi/package.json
index 9aa433e..a6bde1e 100644
--- a/node_modules/cordova-serve/node_modules/chalk/node_modules/strip-ansi/package.json
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/strip-ansi/package.json
@@ -1,11 +1,11 @@
 {
   "name": "strip-ansi",
-  "version": "3.0.0",
+  "version": "3.0.1",
   "description": "Strip ANSI escape codes",
   "license": "MIT",
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/sindresorhus/strip-ansi.git"
+    "url": "git+https://github.com/chalk/strip-ansi.git"
   },
   "author": {
     "name": "Sindre Sorhus",
@@ -14,21 +14,19 @@
   },
   "maintainers": [
     {
-      "name": "Sindre Sorhus",
-      "email": "sindresorhus@gmail.com",
-      "url": "sindresorhus.com"
+      "name": "sindresorhus",
+      "email": "sindresorhus@gmail.com"
     },
     {
-      "name": "Joshua Appelman",
-      "email": "jappelman@xebia.com",
-      "url": "jbnicolai.com"
+      "name": "jbnicolai",
+      "email": "jappelman@xebia.com"
     }
   ],
   "engines": {
     "node": ">=0.10.0"
   },
   "scripts": {
-    "test": "node test.js"
+    "test": "xo && ava"
   },
   "files": [
     "index.js"
@@ -61,16 +59,32 @@
     "ansi-regex": "^2.0.0"
   },
   "devDependencies": {
-    "ava": "0.0.4"
+    "ava": "*",
+    "xo": "*"
   },
-  "readme": "# strip-ansi [![Build Status](https://travis-ci.org/sindresorhus/strip-ansi.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-ansi)\n\n> Strip [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)\n\n\n## Install\n\n```\n$ npm install --save strip-ansi\n```\n\n\n## Usage\n\n```js\nvar stripAnsi = require('strip-ansi');\n\nstripAnsi('\\u001b[4mcake\\u001b[0m');\n//=> 'cake'\n```\n\n\n## Related\n\n- [strip-ansi-cli](https://github.com/sindresorhus/strip-ansi-cli) - CLI for this module\n- [has-ansi](https://github.com/sindresorhus/has-ansi) - Check if a string has ANSI escape codes\n- [ansi-regex](https://github.com/sindresorhus/ansi-regex) - Regular expression for matching ANSI escape codes\n- [chalk](https://github.com/sindresorhus/chalk) - Terminal string styling done right\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n",
-  "readmeFilename": "readme.md",
+  "gitHead": "8270705c704956da865623e564eba4875c3ea17f",
   "bugs": {
-    "url": "https://github.com/sindresorhus/strip-ansi/issues"
+    "url": "https://github.com/chalk/strip-ansi/issues"
   },
-  "homepage": "https://github.com/sindresorhus/strip-ansi#readme",
-  "_id": "strip-ansi@3.0.0",
-  "_shasum": "7510b665567ca914ccb5d7e072763ac968be3724",
-  "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.0.tgz",
-  "_from": "strip-ansi@>=3.0.0 <4.0.0"
+  "homepage": "https://github.com/chalk/strip-ansi",
+  "_id": "strip-ansi@3.0.1",
+  "_shasum": "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf",
+  "_from": "strip-ansi@>=3.0.0 <4.0.0",
+  "_npmVersion": "2.11.3",
+  "_nodeVersion": "0.12.7",
+  "_npmUser": {
+    "name": "jbnicolai",
+    "email": "jappelman@xebia.com"
+  },
+  "dist": {
+    "shasum": "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf",
+    "tarball": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz"
+  },
+  "_npmOperationalInternal": {
+    "host": "packages-9-west.internal.npmjs.com",
+    "tmp": "tmp/strip-ansi-3.0.1.tgz_1456057278183_0.28958667791448534"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/strip-ansi/readme.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/strip-ansi/readme.md b/node_modules/cordova-serve/node_modules/chalk/node_modules/strip-ansi/readme.md
index 7609151..cb7d9ff 100644
--- a/node_modules/cordova-serve/node_modules/chalk/node_modules/strip-ansi/readme.md
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/strip-ansi/readme.md
@@ -1,4 +1,4 @@
-# strip-ansi [![Build Status](https://travis-ci.org/sindresorhus/strip-ansi.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-ansi)
+# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi)
 
 > Strip [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
 
@@ -22,10 +22,10 @@ stripAnsi('\u001b[4mcake\u001b[0m');
 
 ## Related
 
-- [strip-ansi-cli](https://github.com/sindresorhus/strip-ansi-cli) - CLI for this module
-- [has-ansi](https://github.com/sindresorhus/has-ansi) - Check if a string has ANSI escape codes
-- [ansi-regex](https://github.com/sindresorhus/ansi-regex) - Regular expression for matching ANSI escape codes
-- [chalk](https://github.com/sindresorhus/chalk) - Terminal string styling done right
+- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module
+- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes
+- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes
+- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right
 
 
 ## License

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/node_modules/supports-color/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/node_modules/supports-color/package.json b/node_modules/cordova-serve/node_modules/chalk/node_modules/supports-color/package.json
index c43b7aa..38a1ecb 100644
--- a/node_modules/cordova-serve/node_modules/chalk/node_modules/supports-color/package.json
+++ b/node_modules/cordova-serve/node_modules/chalk/node_modules/supports-color/package.json
@@ -14,14 +14,12 @@
   },
   "maintainers": [
     {
-      "name": "Sindre Sorhus",
-      "email": "sindresorhus@gmail.com",
-      "url": "sindresorhus.com"
+      "name": "sindresorhus",
+      "email": "sindresorhus@gmail.com"
     },
     {
-      "name": "Joshua Appelman",
-      "email": "jappelman@xebia.com",
-      "url": "jbnicolai.com"
+      "name": "jbnicolai",
+      "email": "jappelman@xebia.com"
     }
   ],
   "engines": {
@@ -57,14 +55,25 @@
     "mocha": "*",
     "require-uncached": "^1.0.2"
   },
-  "readme": "# supports-color [![Build Status](https://travis-ci.org/chalk/supports-color.svg?branch=master)](https://travis-ci.org/chalk/supports-color)\n\n> Detect whether a terminal supports color\n\n\n## Install\n\n```\n$ npm install --save supports-color\n```\n\n\n## Usage\n\n```js\nvar supportsColor = require('supports-color');\n\nif (supportsColor) {\n\tconsole.log('Terminal supports color');\n}\n```\n\nIt obeys the `--color` and `--no-color` CLI flags.\n\nFor situations where using `--color` is not possible, add an environment variable `FORCE_COLOR` with any value to force color. Trumps `--no-color`.\n\n\n## Related\n\n- [supports-color-cli](https://github.com/chalk/supports-color-cli) - CLI for this module\n- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n",
-  "readmeFilename": "readme.md",
+  "gitHead": "8400d98ade32b2adffd50902c06d9e725a5c6588",
   "bugs": {
     "url": "https://github.com/chalk/supports-color/issues"
   },
-  "homepage": "https://github.com/chalk/supports-color#readme",
+  "homepage": "https://github.com/chalk/supports-color",
   "_id": "supports-color@2.0.0",
   "_shasum": "535d045ce6b6363fa40117084629995e9df324c7",
+  "_from": "supports-color@>=2.0.0 <3.0.0",
+  "_npmVersion": "2.11.2",
+  "_nodeVersion": "0.12.5",
+  "_npmUser": {
+    "name": "sindresorhus",
+    "email": "sindresorhus@gmail.com"
+  },
+  "dist": {
+    "shasum": "535d045ce6b6363fa40117084629995e9df324c7",
+    "tarball": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
-  "_from": "supports-color@>=2.0.0 <3.0.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/chalk/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/chalk/package.json b/node_modules/cordova-serve/node_modules/chalk/package.json
index 2ad36d4..dc5e754 100644
--- a/node_modules/cordova-serve/node_modules/chalk/package.json
+++ b/node_modules/cordova-serve/node_modules/chalk/package.json
@@ -9,19 +9,16 @@
   },
   "maintainers": [
     {
-      "name": "Sindre Sorhus",
-      "email": "sindresorhus@gmail.com",
-      "url": "sindresorhus.com"
+      "name": "sindresorhus",
+      "email": "sindresorhus@gmail.com"
     },
     {
-      "name": "Joshua Appelman",
-      "email": "jappelman@xebia.com",
-      "url": "jbnicolai.com"
+      "name": "jbnicolai",
+      "email": "jappelman@xebia.com"
     },
     {
-      "name": "JD Ballard",
-      "email": "i.am.qix@gmail.com",
-      "url": "github.com/qix-"
+      "name": "unicorn",
+      "email": "sindresorhus+unicorn@gmail.com"
     }
   ],
   "engines": {
@@ -82,14 +79,25 @@
       "mocha"
     ]
   },
-  "readme": "<h1 align=\"center\">\n\t<br>\n\t<br>\n\t<img width=\"360\" src=\"https://cdn.rawgit.com/chalk/chalk/19935d6484811c5e468817f846b7b3d417d7bf4a/logo.svg\" alt=\"chalk\">\n\t<br>\n\t<br>\n\t<br>\n</h1>\n\n> Terminal string styling done right\n\n[![Build Status](https://travis-ci.org/chalk/chalk.svg?branch=master)](https://travis-ci.org/chalk/chalk)\n[![Coverage Status](https://coveralls.io/repos/chalk/chalk/badge.svg?branch=master)](https://coveralls.io/r/chalk/chalk?branch=master)\n[![](http://img.shields.io/badge/unicorn-approved-ff69b4.svg)](https://www.youtube.com/watch?v=9auOCbH5Ns4)\n\n\n[colors.js](https://github.com/Marak/colors.js) used to be the most popular string styling module, but it has serious deficiencies like extending `String.prototype` which causes all kinds of [problems](https://github.com/yeoman/yo/issues/68). Although there are other ones, they either do too much or not enough.\n\n**Chalk is a clean and focused alternative.**\n\n![](https://github.co
 m/chalk/ansi-styles/raw/master/screenshot.png)\n\n\n## Why\n\n- Highly performant\n- Doesn't extend `String.prototype`\n- Expressive API\n- Ability to nest styles\n- Clean and focused\n- Auto-detects color support\n- Actively maintained\n- [Used by ~4500 modules](https://www.npmjs.com/browse/depended/chalk) as of July 15, 2015\n\n\n## Install\n\n```\n$ npm install --save chalk\n```\n\n\n## Usage\n\nChalk comes with an easy to use composable API where you just chain and nest the styles you want.\n\n```js\nvar chalk = require('chalk');\n\n// style a string\nchalk.blue('Hello world!');\n\n// combine styled and normal strings\nchalk.blue('Hello') + 'World' + chalk.red('!');\n\n// compose multiple styles using the chainable API\nchalk.blue.bgRed.bold('Hello world!');\n\n// pass in multiple arguments\nchalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz');\n\n// nest styles\nchalk.red('Hello', chalk.underline.bgBlue('world') + '!');\n\n// nest styles of the same type even (color, under
 line, background)\nchalk.green(\n\t'I am a green line ' +\n\tchalk.blue.underline.bold('with a blue substring') +\n\t' that becomes green again!'\n);\n```\n\nEasily define your own themes.\n\n```js\nvar chalk = require('chalk');\nvar error = chalk.bold.red;\nconsole.log(error('Error!'));\n```\n\nTake advantage of console.log [string substitution](http://nodejs.org/docs/latest/api/console.html#console_console_log_data).\n\n```js\nvar name = 'Sindre';\nconsole.log(chalk.green('Hello %s'), name);\n//=> Hello Sindre\n```\n\n\n## API\n\n### chalk.`<style>[.<style>...](string, [string...])`\n\nExample: `chalk.red.bold.underline('Hello', 'world');`\n\nChain [styles](#styles) and call the last one as a method with a string argument. Order doesn't matter, and later styles take precedent in case of a conflict. This simply means that `Chalk.red.yellow.green` is equivalent to `Chalk.green`.\n\nMultiple arguments will be separated by space.\n\n### chalk.enabled\n\nColor support is automatically 
 detected, but you can override it by setting the `enabled` property. You should however only do this in your own code as it applies globally to all chalk consumers.\n\nIf you need to change this in a reusable module create a new instance:\n\n```js\nvar ctx = new chalk.constructor({enabled: false});\n```\n\n### chalk.supportsColor\n\nDetect whether the terminal [supports color](https://github.com/chalk/supports-color). Used internally and handled for you, but exposed for convenience.\n\nCan be overridden by the user with the flags `--color` and `--no-color`. For situations where using `--color` is not possible, add an environment variable `FORCE_COLOR` with any value to force color. Trumps `--no-color`.\n\n### chalk.styles\n\nExposes the styles as [ANSI escape codes](https://github.com/chalk/ansi-styles).\n\nGenerally not useful, but you might need just the `.open` or `.close` escape code if you're mixing externally styled strings with your own.\n\n```js\nvar chalk = require('chalk')
 ;\n\nconsole.log(chalk.styles.red);\n//=> {open: '\\u001b[31m', close: '\\u001b[39m'}\n\nconsole.log(chalk.styles.red.open + 'Hello' + chalk.styles.red.close);\n```\n\n### chalk.hasColor(string)\n\nCheck whether a string [has color](https://github.com/chalk/has-ansi).\n\n### chalk.stripColor(string)\n\n[Strip color](https://github.com/chalk/strip-ansi) from a string.\n\nCan be useful in combination with `.supportsColor` to strip color on externally styled text when it's not supported.\n\nExample:\n\n```js\nvar chalk = require('chalk');\nvar styledString = getText();\n\nif (!chalk.supportsColor) {\n\tstyledString = chalk.stripColor(styledString);\n}\n```\n\n\n## Styles\n\n### Modifiers\n\n- `reset`\n- `bold`\n- `dim`\n- `italic` *(not widely supported)*\n- `underline`\n- `inverse`\n- `hidden`\n- `strikethrough` *(not widely supported)*\n\n### Colors\n\n- `black`\n- `red`\n- `green`\n- `yellow`\n- `blue` *(on Windows the bright version is used as normal blue is illegible)*\n- `magenta
 `\n- `cyan`\n- `white`\n- `gray`\n\n### Background colors\n\n- `bgBlack`\n- `bgRed`\n- `bgGreen`\n- `bgYellow`\n- `bgBlue`\n- `bgMagenta`\n- `bgCyan`\n- `bgWhite`\n\n\n## 256-colors\n\nChalk does not support anything other than the base eight colors, which guarantees it will work on all terminals and systems. Some terminals, specifically `xterm` compliant ones, will support the full range of 8-bit colors. For this the lower level [ansi-256-colors](https://github.com/jbnicolai/ansi-256-colors) package can be used.\n\n\n## Windows\n\nIf you're on Windows, do yourself a favor and use [`cmder`](http://bliker.github.io/cmder/) instead of `cmd.exe`.\n\n\n## Related\n\n- [chalk-cli](https://github.com/chalk/chalk-cli) - CLI for this module\n- [ansi-styles](https://github.com/chalk/ansi-styles/) - ANSI escape codes for styling strings in the terminal\n- [supports-color](https://github.com/chalk/supports-color/) - Detect whether a terminal supports color\n- [strip-ansi](https://github.com/ch
 alk/strip-ansi) - Strip ANSI escape codes\n- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes\n- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes\n- [wrap-ansi](https://github.com/chalk/wrap-ansi) - Wordwrap a string with ANSI escape codes\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n",
-  "readmeFilename": "readme.md",
+  "gitHead": "8b554e254e89c85c1fd04dcc444beeb15824e1a5",
   "bugs": {
     "url": "https://github.com/chalk/chalk/issues"
   },
   "homepage": "https://github.com/chalk/chalk#readme",
   "_id": "chalk@1.1.1",
   "_shasum": "509afb67066e7499f7eb3535c77445772ae2d019",
+  "_from": "chalk@>=1.1.1 <2.0.0",
+  "_npmVersion": "2.13.5",
+  "_nodeVersion": "0.12.7",
+  "_npmUser": {
+    "name": "sindresorhus",
+    "email": "sindresorhus@gmail.com"
+  },
+  "dist": {
+    "shasum": "509afb67066e7499f7eb3535c77445772ae2d019",
+    "tarball": "http://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz",
-  "_from": "chalk@>=1.1.1 <2.0.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/HISTORY.md b/node_modules/cordova-serve/node_modules/compression/HISTORY.md
index 7bf3720..4f68cf9 100644
--- a/node_modules/cordova-serve/node_modules/compression/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/compression/HISTORY.md
@@ -1,3 +1,12 @@
+1.6.1 / 2016-01-19
+==================
+
+  * deps: bytes@2.2.0
+  * deps: compressible@~2.0.7
+    - deps: mime-db@'>= 1.21.0 < 2'
+  * deps: accepts@~1.3.1
+    - deps: mime-types@~2.1.9
+
 1.6.0 / 2015-09-29
 ==================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/index.js b/node_modules/cordova-serve/node_modules/compression/index.js
index acfc2a2..05deb30 100644
--- a/node_modules/cordova-serve/node_modules/compression/index.js
+++ b/node_modules/cordova-serve/node_modules/compression/index.js
@@ -192,7 +192,7 @@ function compression(options) {
         ? zlib.createGzip(opts)
         : zlib.createDeflate(opts)
 
-      // add bufferred listeners to stream
+      // add buffered listeners to stream
       addListeners(stream, stream.on, listeners)
 
       // header fields

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/HISTORY.md b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/HISTORY.md
index d32842d..53703d3 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/HISTORY.md
@@ -1,3 +1,9 @@
+1.3.1 / 2016-01-19
+==================
+
+  * deps: mime-types@~2.1.9
+    - deps: mime-db@~1.21.0
+
 1.3.0 / 2015-09-29
 ==================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/HISTORY.md b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/HISTORY.md
index 3057e49..1d86a5c 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/HISTORY.md
@@ -1,3 +1,23 @@
+2.1.10 / 2016-02-15
+===================
+
+  * deps: mime-db@~1.22.0
+    - Add new mime types
+    - Fix extension of `application/dash+xml`
+    - Update primary extension for `audio/mp4`
+
+2.1.9 / 2016-01-06
+==================
+
+  * deps: mime-db@~1.21.0
+    - Add new mime types
+
+2.1.8 / 2015-11-30
+==================
+
+  * deps: mime-db@~1.20.0
+    - Add new mime types
+
 2.1.7 / 2015-09-20
 ==================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/README.md b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/README.md
index e26295d..e77d615 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/README.md
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/README.md
@@ -94,7 +94,7 @@ A map of extensions by content-type.
 [npm-image]: https://img.shields.io/npm/v/mime-types.svg
 [npm-url]: https://npmjs.org/package/mime-types
 [node-version-image]: https://img.shields.io/node/v/mime-types.svg
-[node-version-url]: http://nodejs.org/download/
+[node-version-url]: https://nodejs.org/en/download/
 [travis-image]: https://img.shields.io/travis/jshttp/mime-types/master.svg
 [travis-url]: https://travis-ci.org/jshttp/mime-types
 [coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-types/master.svg

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/HISTORY.md b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/HISTORY.md
index 3088a72..44f9f64 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/HISTORY.md
@@ -1,3 +1,49 @@
+1.22.0 / 2016-02-15
+===================
+
+  * Add `application/ppsp-tracker+json`
+  * Add `application/problem+json`
+  * Add `application/problem+xml`
+  * Add `application/vnd.hdt`
+  * Add `application/vnd.ms-printschematicket+xml`
+  * Add `model/vnd.rosette.annotated-data-model`
+  * Add `text/slim`
+  * Add extension `.rng` to `application/xml`
+  * Fix extension of `application/dash+xml` to be `.mpd`
+  * Update primary extension to `.m4a` for `audio/mp4`
+
+1.21.0 / 2016-01-06
+===================
+
+  * Add `application/emergencycalldata.comment+xml`
+  * Add `application/emergencycalldata.deviceinfo+xml`
+  * Add `application/emergencycalldata.providerinfo+xml`
+  * Add `application/emergencycalldata.serviceinfo+xml`
+  * Add `application/emergencycalldata.subscriberinfo+xml`
+  * Add `application/vnd.filmit.zfc`
+  * Add `application/vnd.google-apps.document`
+  * Add `application/vnd.google-apps.presentation`
+  * Add `application/vnd.google-apps.spreadsheet`
+  * Add `application/vnd.mapbox-vector-tile`
+  * Add `application/vnd.ms-printdevicecapabilities+xml`
+  * Add `application/vnd.ms-windows.devicepairing`
+  * Add `application/vnd.ms-windows.nwprinting.oob`
+  * Add `application/vnd.tml`
+  * Add `audio/evs`
+
+1.20.0 / 2015-11-10
+===================
+
+  * Add `application/cdni`
+  * Add `application/csvm+json`
+  * Add `application/rfc+xml`
+  * Add `application/vnd.3gpp.access-transfer-events+xml`
+  * Add `application/vnd.3gpp.srvcc-ext+xml`
+  * Add `application/vnd.ms-windows.wsd.oob`
+  * Add `application/vnd.oxli.countgraph`
+  * Add `application/vnd.pagerduty+json`
+  * Add `text/x-suse-ymp`
+
 1.19.0 / 2015-09-17
 ===================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/README.md b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/README.md
index 164cca0..7662440 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/README.md
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/README.md
@@ -52,7 +52,7 @@ Each mime type has the following properties:
     - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml)
     - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types)
 - `.extensions[]` - known extensions associated with this mime type.
-- `.compressible` - whether a file of this type is can be gzipped.
+- `.compressible` - whether a file of this type can be gzipped.
 - `.charset` - the default charset associated with this type, if any.
 
 If unknown, every property could be `undefined`.

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/db.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/db.json b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/db.json
index f5b1a8c..863deb4 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/db.json
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/db.json
@@ -158,6 +158,9 @@
     "source": "iana",
     "extensions": ["cdmiq"]
   },
+  "application/cdni": {
+    "source": "iana"
+  },
   "application/cea": {
     "source": "iana"
   },
@@ -198,6 +201,10 @@
   "application/cstadata+xml": {
     "source": "iana"
   },
+  "application/csvm+json": {
+    "source": "iana",
+    "compressible": true
+  },
   "application/cu-seeme": {
     "source": "apache",
     "extensions": ["cu"]
@@ -210,7 +217,7 @@
   },
   "application/dash+xml": {
     "source": "iana",
-    "extensions": ["mdp"]
+    "extensions": ["mpd"]
   },
   "application/dashdelta": {
     "source": "iana"
@@ -277,6 +284,21 @@
     "source": "iana",
     "compressible": false
   },
+  "application/emergencycalldata.comment+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.deviceinfo+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.providerinfo+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.serviceinfo+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.subscriberinfo+xml": {
+    "source": "iana"
+  },
   "application/emma+xml": {
     "source": "iana",
     "extensions": ["emma"]
@@ -815,6 +837,17 @@
     "compressible": true,
     "extensions": ["ai","eps","ps"]
   },
+  "application/ppsp-tracker+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/problem+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/problem+xml": {
+    "source": "iana"
+  },
   "application/provenance+xml": {
     "source": "iana"
   },
@@ -882,6 +915,9 @@
     "source": "iana",
     "extensions": ["rld"]
   },
+  "application/rfc+xml": {
+    "source": "iana"
+  },
   "application/riscos": {
     "source": "iana"
   },
@@ -1157,6 +1193,9 @@
   "application/vnd.3gpp-prose-pc3ch+xml": {
     "source": "iana"
   },
+  "application/vnd.3gpp.access-transfer-events+xml": {
+    "source": "iana"
+  },
   "application/vnd.3gpp.bsf+xml": {
     "source": "iana"
   },
@@ -1178,6 +1217,9 @@
   "application/vnd.3gpp.sms": {
     "source": "iana"
   },
+  "application/vnd.3gpp.srvcc-ext+xml": {
+    "source": "iana"
+  },
   "application/vnd.3gpp.srvcc-info+xml": {
     "source": "iana"
   },
@@ -1842,6 +1884,9 @@
   "application/vnd.ffsns": {
     "source": "iana"
   },
+  "application/vnd.filmit.zfc": {
+    "source": "iana"
+  },
   "application/vnd.fints": {
     "source": "iana"
   },
@@ -1974,6 +2019,18 @@
     "source": "iana",
     "extensions": ["gmx"]
   },
+  "application/vnd.google-apps.document": {
+    "compressible": false,
+    "extensions": ["gdoc"]
+  },
+  "application/vnd.google-apps.presentation": {
+    "compressible": false,
+    "extensions": ["gslides"]
+  },
+  "application/vnd.google-apps.spreadsheet": {
+    "compressible": false,
+    "extensions": ["gsheet"]
+  },
   "application/vnd.google-earth.kml+xml": {
     "source": "iana",
     "compressible": true,
@@ -2047,6 +2104,9 @@
   "application/vnd.hcl-bireports": {
     "source": "iana"
   },
+  "application/vnd.hdt": {
+    "source": "iana"
+  },
   "application/vnd.heroku+json": {
     "source": "iana",
     "compressible": true
@@ -2391,6 +2451,9 @@
     "source": "iana",
     "extensions": ["portpkg"]
   },
+  "application/vnd.mapbox-vector-tile": {
+    "source": "iana"
+  },
   "application/vnd.marlin.drm.actiontoken+xml": {
     "source": "iana"
   },
@@ -2632,9 +2695,15 @@
     "source": "iana",
     "extensions": ["potm"]
   },
+  "application/vnd.ms-printdevicecapabilities+xml": {
+    "source": "iana"
+  },
   "application/vnd.ms-printing.printticket+xml": {
     "source": "apache"
   },
+  "application/vnd.ms-printschematicket+xml": {
+    "source": "iana"
+  },
   "application/vnd.ms-project": {
     "source": "iana",
     "extensions": ["mpp","mpt"]
@@ -2642,9 +2711,18 @@
   "application/vnd.ms-tnef": {
     "source": "iana"
   },
+  "application/vnd.ms-windows.devicepairing": {
+    "source": "iana"
+  },
+  "application/vnd.ms-windows.nwprinting.oob": {
+    "source": "iana"
+  },
   "application/vnd.ms-windows.printerpairing": {
     "source": "iana"
   },
+  "application/vnd.ms-windows.wsd.oob": {
+    "source": "iana"
+  },
   "application/vnd.ms-wmdrm.lic-chlg-req": {
     "source": "iana"
   },
@@ -3343,6 +3421,13 @@
   "application/vnd.otps.ct-kip+xml": {
     "source": "iana"
   },
+  "application/vnd.oxli.countgraph": {
+    "source": "iana"
+  },
+  "application/vnd.pagerduty+json": {
+    "source": "iana",
+    "compressible": true
+  },
   "application/vnd.palm": {
     "source": "iana",
     "extensions": ["pdb","pqa","oprc"]
@@ -3796,6 +3881,9 @@
   "application/vnd.tmd.mediaflex.api+xml": {
     "source": "iana"
   },
+  "application/vnd.tml": {
+    "source": "iana"
+  },
   "application/vnd.tmobile-livetv": {
     "source": "iana",
     "extensions": ["tmo"]
@@ -4678,7 +4766,7 @@
   "application/xml": {
     "source": "iana",
     "compressible": true,
-    "extensions": ["xml","xsl","xsd"]
+    "extensions": ["xml","xsl","xsd","rng"]
   },
   "application/xml-dtd": {
     "source": "iana",
@@ -4860,6 +4948,9 @@
   "audio/evrcwb1": {
     "source": "iana"
   },
+  "audio/evs": {
+    "source": "iana"
+  },
   "audio/fwdred": {
     "source": "iana"
   },
@@ -4949,7 +5040,7 @@
   "audio/mp4": {
     "source": "iana",
     "compressible": false,
-    "extensions": ["mp4a","m4a"]
+    "extensions": ["m4a","mp4a"]
   },
   "audio/mp4a-latm": {
     "source": "iana"
@@ -5700,6 +5791,9 @@
   "model/vnd.parasolid.transmit.text": {
     "source": "iana"
   },
+  "model/vnd.rosette.annotated-data-model": {
+    "source": "iana"
+  },
   "model/vnd.valve.source.compiled-map": {
     "source": "iana"
   },
@@ -5929,6 +6023,9 @@
     "source": "iana",
     "extensions": ["sgml","sgm"]
   },
+  "text/slim": {
+    "extensions": ["slim","slm"]
+  },
   "text/stylus": {
     "extensions": ["stylus","styl"]
   },
@@ -6132,6 +6229,10 @@
     "source": "apache",
     "extensions": ["sfv"]
   },
+  "text/x-suse-ymp": {
+    "compressible": true,
+    "extensions": ["ymp"]
+  },
   "text/x-uuencode": {
     "source": "apache",
     "extensions": ["uu"]

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/package.json b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/package.json
index 573cfa5..5c03deb 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/package.json
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/package.json
@@ -1,7 +1,7 @@
 {
   "name": "mime-db",
   "description": "Media Type Database",
-  "version": "1.19.0",
+  "version": "1.22.0",
   "contributors": [
     {
       "name": "Douglas Christopher Wilson",
@@ -33,15 +33,15 @@
     "url": "git+https://github.com/jshttp/mime-db.git"
   },
   "devDependencies": {
-    "bluebird": "2.10.0",
+    "bluebird": "3.3.1",
     "co": "4.6.0",
     "cogent": "1.0.1",
-    "csv-parse": "1.0.0",
-    "gnode": "0.1.1",
-    "istanbul": "0.3.20",
+    "csv-parse": "1.0.1",
+    "gnode": "0.1.2",
+    "istanbul": "0.4.2",
     "mocha": "1.21.5",
-    "raw-body": "2.1.3",
-    "stream-to-array": "2"
+    "raw-body": "2.1.5",
+    "stream-to-array": "2.2.1"
   },
   "files": [
     "HISTORY.md",
@@ -61,14 +61,39 @@
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
     "update": "npm run fetch && npm run build"
   },
-  "readme": "# mime-db\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Node.js Version][node-image]][node-url]\n[![Build Status][travis-image]][travis-url]\n[![Coverage Status][coveralls-image]][coveralls-url]\n\nThis is a database of all mime types.\nIt consists of a single, public JSON file and does not include any logic,\nallowing it to remain as un-opinionated as possible with an API.\nIt aggregates data from the following sources:\n\n- http://www.iana.org/assignments/media-types/media-types.xhtml\n- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types\n- http://hg.nginx.org/nginx/raw-file/default/conf/mime.types\n\n## Installation\n\n```bash\nnpm install mime-db\n```\n\n### Database Download\n\nIf you're crazy enough to use this in the browser, you can just grab the\nJSON file using [RawGit](https://rawgit.com/). It is recommended to replace\n`master` with [a release tag](https://github.com/jshttp/mime-db/t
 ags) as the\nJSON format may change in the future.\n\n```\nhttps://cdn.rawgit.com/jshttp/mime-db/master/db.json\n```\n\n## Usage\n\n```js\nvar db = require('mime-db');\n\n// grab data on .js files\nvar data = db['application/javascript'];\n```\n\n## Data Structure\n\nThe JSON file is a map lookup for lowercased mime types.\nEach mime type has the following properties:\n\n- `.source` - where the mime type is defined.\n    If not set, it's probably a custom media type.\n    - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types)\n    - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml)\n    - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types)\n- `.extensions[]` - known extensions associated with this mime type.\n- `.compressible` - whether a file of this type is can be gzipped.\n- `.charset` - the default charset associated with this type, if 
 any.\n\nIf unknown, every property could be `undefined`.\n\n## Contributing\n\nTo edit the database, only make PRs against `src/custom.json` or\n`src/custom-suffix.json`.\n\nTo update the build, run `npm run build`.\n\n## Adding Custom Media Types\n\nThe best way to get new media types included in this library is to register\nthem with the IANA. The community registration procedure is outlined in\n[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types\nregistered with the IANA are automatically pulled into this library.\n\n[npm-version-image]: https://img.shields.io/npm/v/mime-db.svg\n[npm-downloads-image]: https://img.shields.io/npm/dm/mime-db.svg\n[npm-url]: https://npmjs.org/package/mime-db\n[travis-image]: https://img.shields.io/travis/jshttp/mime-db/master.svg\n[travis-url]: https://travis-ci.org/jshttp/mime-db\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-db/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master\n
 [node-image]: https://img.shields.io/node/v/mime-db.svg\n[node-url]: http://nodejs.org/download/\n",
-  "readmeFilename": "README.md",
+  "gitHead": "ed88d32405582a5aaff6225d1210005d6be2623e",
   "bugs": {
     "url": "https://github.com/jshttp/mime-db/issues"
   },
   "homepage": "https://github.com/jshttp/mime-db#readme",
-  "_id": "mime-db@1.19.0",
-  "_shasum": "496a18198a7ce8244534e25bb102b74fb420fd56",
-  "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.19.0.tgz",
-  "_from": "mime-db@>=1.19.0 <1.20.0"
+  "_id": "mime-db@1.22.0",
+  "_shasum": "ab23a6372dc9d86d3dc9121bd0ebd38105a1904a",
+  "_from": "mime-db@>=1.22.0 <1.23.0",
+  "_npmVersion": "2.14.7",
+  "_nodeVersion": "4.2.3",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "dist": {
+    "shasum": "ab23a6372dc9d86d3dc9121bd0ebd38105a1904a",
+    "tarball": "http://registry.npmjs.org/mime-db/-/mime-db-1.22.0.tgz"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    }
+  ],
+  "_npmOperationalInternal": {
+    "host": "packages-9-west.internal.npmjs.com",
+    "tmp": "tmp/mime-db-1.22.0.tgz_1455558813990_0.7830642955377698"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.22.0.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/package.json b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/package.json
index 3292c71..3a00a92 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/package.json
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/mime-types/package.json
@@ -1,7 +1,7 @@
 {
   "name": "mime-types",
   "description": "The ultimate javascript content-type utility.",
-  "version": "2.1.7",
+  "version": "2.1.10",
   "contributors": [
     {
       "name": "Douglas Christopher Wilson",
@@ -28,11 +28,11 @@
     "url": "git+https://github.com/jshttp/mime-types.git"
   },
   "dependencies": {
-    "mime-db": "~1.19.0"
+    "mime-db": "~1.22.0"
   },
   "devDependencies": {
-    "istanbul": "0.3.20",
-    "mocha": "~1.21.5"
+    "istanbul": "0.4.2",
+    "mocha": "1.21.5"
   },
   "files": [
     "HISTORY.md",
@@ -47,14 +47,43 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/test.js",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot test/test.js"
   },
-  "readme": "# mime-types\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nThe ultimate javascript content-type utility.\n\nSimilar to [node-mime](https://github.com/broofa/node-mime), except:\n\n- __No fallbacks.__ Instead of naively returning the first available type, `mime-types` simply returns `false`,\n  so do `var type = mime.lookup('unrecognized') || 'application/octet-stream'`.\n- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`.\n- Additional mime types are added such as jade and stylus via [mime-db](https://github.com/jshttp/mime-db)\n- No `.define()` functionality\n\nOtherwise, the API is compatible.\n\n## Install\n\n```sh\n$ npm install mime-types\n```\n\n## Adding Types\n\nAll mime types are based on [mime-db](https://github.com/jshtt
 p/mime-db),\nso open a PR there if you'd like to add mime types.\n\n## API\n\n```js\nvar mime = require('mime-types')\n```\n\nAll functions return `false` if input is invalid or not found.\n\n### mime.lookup(path)\n\nLookup the content-type associated with a file.\n\n```js\nmime.lookup('json')             // 'application/json'\nmime.lookup('.md')              // 'text/x-markdown'\nmime.lookup('file.html')        // 'text/html'\nmime.lookup('folder/file.js')   // 'application/javascript'\nmime.lookup('folder/.htaccess') // false\n\nmime.lookup('cats') // false\n```\n\n### mime.contentType(type)\n\nCreate a full content-type header given a content-type or extension.\n\n```js\nmime.contentType('markdown')  // 'text/x-markdown; charset=utf-8'\nmime.contentType('file.json') // 'application/json; charset=utf-8'\n\n// from a full path\nmime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8'\n```\n\n### mime.extension(type)\n\nGet the default extension for 
 a content-type.\n\n```js\nmime.extension('application/octet-stream') // 'bin'\n```\n\n### mime.charset(type)\n\nLookup the implied default charset of a content-type.\n\n```js\nmime.charset('text/x-markdown') // 'UTF-8'\n```\n\n### var type = mime.types[extension]\n\nA map of content-types by extension.\n\n### [extensions...] = mime.extensions[type]\n\nA map of extensions by content-type.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/mime-types.svg\n[npm-url]: https://npmjs.org/package/mime-types\n[node-version-image]: https://img.shields.io/node/v/mime-types.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/mime-types/master.svg\n[travis-url]: https://travis-ci.org/jshttp/mime-types\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-types/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/mime-types\n[downloads-image]: https://img.shields.io/npm/dm/mime-types.svg\n[downloads
 -url]: https://npmjs.org/package/mime-types\n",
-  "readmeFilename": "README.md",
+  "gitHead": "70785d38e9cc251137b00f73ab3d3257c4aea203",
   "bugs": {
     "url": "https://github.com/jshttp/mime-types/issues"
   },
   "homepage": "https://github.com/jshttp/mime-types#readme",
-  "_id": "mime-types@2.1.7",
-  "_shasum": "ff603970e3c731ef6f7f4df3c9a0f463a13c2755",
-  "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.7.tgz",
-  "_from": "mime-types@>=2.1.7 <2.2.0"
+  "_id": "mime-types@2.1.10",
+  "_shasum": "b93c7cb4362e16d41072a7e54538fb4d43070837",
+  "_from": "mime-types@>=2.1.9 <2.2.0",
+  "_npmVersion": "2.14.7",
+  "_nodeVersion": "4.2.3",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "dist": {
+    "shasum": "b93c7cb4362e16d41072a7e54538fb4d43070837",
+    "tarball": "http://registry.npmjs.org/mime-types/-/mime-types-2.1.10.tgz"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "fishrock123",
+      "email": "fishrock123@rocketmail.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    }
+  ],
+  "_npmOperationalInternal": {
+    "host": "packages-9-west.internal.npmjs.com",
+    "tmp": "tmp/mime-types-2.1.10.tgz_1455575237256_0.9163766100537032"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.10.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/negotiator/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/negotiator/package.json b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/negotiator/package.json
index be2a3f4..9134192 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/negotiator/package.json
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/node_modules/negotiator/package.json
@@ -49,14 +49,38 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
   },
-  "readme": "# negotiator\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nAn HTTP content negotiator for Node.js\n\n## Installation\n\n```sh\n$ npm install negotiator\n```\n\n## API\n\n```js\nvar Negotiator = require('negotiator')\n```\n\n### Accept Negotiation\n\n```js\navailableMediaTypes = ['text/html', 'text/plain', 'application/json']\n\n// The negotiator constructor receives a request object\nnegotiator = new Negotiator(request)\n\n// Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8'\n\nnegotiator.mediaTypes()\n// -> ['text/html', 'image/jpeg', 'application/*']\n\nnegotiator.mediaTypes(availableMediaTypes)\n// -> ['text/html', 'application/json']\n\nnegotiator.mediaType(availableMediaTypes)\n// -> 'text/html'\n```\n\nYou can check a working example 
 at `examples/accept.js`.\n\n#### Methods\n\n##### mediaType()\n\nReturns the most preferred media type from the client.\n\n##### mediaType(availableMediaType)\n\nReturns the most preferred media type from a list of available media types.\n\n##### mediaTypes()\n\nReturns an array of preferred media types ordered by the client preference.\n\n##### mediaTypes(availableMediaTypes)\n\nReturns an array of preferred media types ordered by priority from a list of\navailable media types.\n\n### Accept-Language Negotiation\n\n```js\nnegotiator = new Negotiator(request)\n\navailableLanguages = ['en', 'es', 'fr']\n\n// Let's say Accept-Language header is 'en;q=0.8, es, pt'\n\nnegotiator.languages()\n// -> ['es', 'pt', 'en']\n\nnegotiator.languages(availableLanguages)\n// -> ['es', 'en']\n\nlanguage = negotiator.language(availableLanguages)\n// -> 'es'\n```\n\nYou can check a working example at `examples/language.js`.\n\n#### Methods\n\n##### language()\n\nReturns the most preferred language fro
 m the client.\n\n##### language(availableLanguages)\n\nReturns the most preferred language from a list of available languages.\n\n##### languages()\n\nReturns an array of preferred languages ordered by the client preference.\n\n##### languages(availableLanguages)\n\nReturns an array of preferred languages ordered by priority from a list of\navailable languages.\n\n### Accept-Charset Negotiation\n\n```js\navailableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5']\n\nnegotiator = new Negotiator(request)\n\n// Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2'\n\nnegotiator.charsets()\n// -> ['utf-8', 'iso-8859-1', 'utf-7']\n\nnegotiator.charsets(availableCharsets)\n// -> ['utf-8', 'iso-8859-1']\n\nnegotiator.charset(availableCharsets)\n// -> 'utf-8'\n```\n\nYou can check a working example at `examples/charset.js`.\n\n#### Methods\n\n##### charset()\n\nReturns the most preferred charset from the client.\n\n##### charset(availableCharsets)\n\nReturns the most prefe
 rred charset from a list of available charsets.\n\n##### charsets()\n\nReturns an array of preferred charsets ordered by the client preference.\n\n##### charsets(availableCharsets)\n\nReturns an array of preferred charsets ordered by priority from a list of\navailable charsets.\n\n### Accept-Encoding Negotiation\n\n```js\navailableEncodings = ['identity', 'gzip']\n\nnegotiator = new Negotiator(request)\n\n// Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5'\n\nnegotiator.encodings()\n// -> ['gzip', 'identity', 'compress']\n\nnegotiator.encodings(availableEncodings)\n// -> ['gzip', 'identity']\n\nnegotiator.encoding(availableEncodings)\n// -> 'gzip'\n```\n\nYou can check a working example at `examples/encoding.js`.\n\n#### Methods\n\n##### encoding()\n\nReturns the most preferred encoding from the client.\n\n##### encoding(availableEncodings)\n\nReturns the most preferred encoding from a list of available encodings.\n\n##### encodings()\n\nReturns an array of
  preferred encodings ordered by the client preference.\n\n##### encodings(availableEncodings)\n\nReturns an array of preferred encodings ordered by priority from a list of\navailable encodings.\n\n## See Also\n\nThe [accepts](https://npmjs.org/package/accepts#readme) module builds on\nthis module and provides an alternative interface, mime type validation,\nand more.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/negotiator.svg\n[npm-url]: https://npmjs.org/package/negotiator\n[node-version-image]: https://img.shields.io/node/v/negotiator.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/negotiator/master.svg\n[travis-url]: https://travis-ci.org/jshttp/negotiator\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/negotiator/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/negotiator?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/negotiator.svg\n[downloads-url]: 
 https://npmjs.org/package/negotiator\n",
-  "readmeFilename": "README.md",
+  "gitHead": "d904ca6a639487b4e27c009e33183570aae4e789",
   "bugs": {
     "url": "https://github.com/jshttp/negotiator/issues"
   },
-  "homepage": "https://github.com/jshttp/negotiator#readme",
+  "homepage": "https://github.com/jshttp/negotiator",
   "_id": "negotiator@0.6.0",
   "_shasum": "33593a5a2b0ce30c985840c6f56b6fb1ea9e3a55",
+  "_from": "negotiator@0.6.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "federomero",
+      "email": "federomero@gmail.com"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "33593a5a2b0ce30c985840c6f56b6fb1ea9e3a55",
+    "tarball": "http://registry.npmjs.org/negotiator/-/negotiator-0.6.0.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.0.tgz",
-  "_from": "negotiator@0.6.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/package.json b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/package.json
index 43608bf..71f4f92 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/package.json
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/accepts/package.json
@@ -1,7 +1,7 @@
 {
   "name": "accepts",
   "description": "Higher-level content negotiation",
-  "version": "1.3.0",
+  "version": "1.3.1",
   "contributors": [
     {
       "name": "Douglas Christopher Wilson",
@@ -19,11 +19,11 @@
     "url": "git+https://github.com/jshttp/accepts.git"
   },
   "dependencies": {
-    "mime-types": "~2.1.7",
+    "mime-types": "~2.1.9",
     "negotiator": "0.6.0"
   },
   "devDependencies": {
-    "istanbul": "0.3.21",
+    "istanbul": "0.4.2",
     "mocha": "~1.21.5"
   },
   "files": [
@@ -45,14 +45,54 @@
     "accept",
     "accepts"
   ],
-  "readme": "# accepts\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nHigher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator). Extracted from [koa](https://www.npmjs.com/package/koa) for general use.\n\nIn addition to negotiator, it allows:\n\n- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])` as well as `('text/html', 'application/json')`.\n- Allows type shorthands such as `json`.\n- Returns `false` when no types match\n- Treats non-existent headers as `*`\n\n## Installation\n\n```sh\nnpm install accepts\n```\n\n## API\n\n```js\nvar accepts = require('accepts')\n```\n\n### accepts(req)\n\nCreate a new `Accepts` object for the given `req`.\n\n#### .charset(charsets)\n\nReturn the first accepted charset. If
  nothing in `charsets` is accepted,\nthen `false` is returned.\n\n#### .charsets()\n\nReturn the charsets that the request accepts, in the order of the client's\npreference (most preferred first).\n\n#### .encoding(encodings)\n\nReturn the first accepted encoding. If nothing in `encodings` is accepted,\nthen `false` is returned.\n\n#### .encodings()\n\nReturn the encodings that the request accepts, in the order of the client's\npreference (most preferred first).\n\n#### .language(languages)\n\nReturn the first accepted language. If nothing in `languages` is accepted,\nthen `false` is returned.\n\n#### .languages()\n\nReturn the languages that the request accepts, in the order of the client's\npreference (most preferred first).\n\n#### .type(types)\n\nReturn the first accepted type (and it is returned as the same text as what\nappears in the `types` array). If nothing in `types` is accepted, then `false`\nis returned.\n\nThe `types` array can contain full MIME types or file extension
 s. Any value\nthat is not a full MIME types is passed to `require('mime-types').lookup`.\n\n#### .types()\n\nReturn the types that the request accepts, in the order of the client's\npreference (most preferred first).\n\n## Examples\n\n### Simple type negotiation\n\nThis simple example shows how to use `accepts` to return a different typed\nrespond body based on what the client wants to accept. The server lists it's\npreferences in order and will get back the best match between the client and\nserver.\n\n```js\nvar accepts = require('accepts')\nvar http = require('http')\n\nfunction app(req, res) {\n  var accept = accepts(req)\n\n  // the order of this list is significant; should be server preferred order\n  switch(accept.type(['json', 'html'])) {\n    case 'json':\n      res.setHeader('Content-Type', 'application/json')\n      res.write('{\"hello\":\"world!\"}')\n      break\n    case 'html':\n      res.setHeader('Content-Type', 'text/html')\n      res.write('<b>hello, world!</b>')\
 n      break\n    default:\n      // the fallback is text/plain, so no need to specify it above\n      res.setHeader('Content-Type', 'text/plain')\n      res.write('hello, world!')\n      break\n  }\n\n  res.end()\n}\n\nhttp.createServer(app).listen(3000)\n```\n\nYou can test this out with the cURL program:\n```sh\ncurl -I -H'Accept: text/html' http://localhost:3000/\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/accepts.svg\n[npm-url]: https://npmjs.org/package/accepts\n[node-version-image]: https://img.shields.io/node/v/accepts.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/accepts/master.svg\n[travis-url]: https://travis-ci.org/jshttp/accepts\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/accepts/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/accepts\n[downloads-image]: https://img.shields.io/npm/dm/accepts.svg\n[downloads-url]: https://npmjs.org/package/accepts
 \n",
-  "readmeFilename": "README.md",
+  "gitHead": "6551051596cfcbd7aaaf9f02af8f487ce83cbf00",
   "bugs": {
     "url": "https://github.com/jshttp/accepts/issues"
   },
-  "homepage": "https://github.com/jshttp/accepts#readme",
-  "_id": "accepts@1.3.0",
-  "_shasum": "2341420f16d0b2d538a5898416ab0faa28912622",
-  "_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.0.tgz",
-  "_from": "accepts@>=1.3.0 <1.4.0"
+  "homepage": "https://github.com/jshttp/accepts",
+  "_id": "accepts@1.3.1",
+  "_shasum": "dc295faf85024e05b04f5a6faf5eec1d1fd077e5",
+  "_from": "accepts@>=1.3.1 <1.4.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "federomero",
+      "email": "federomero@gmail.com"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "fishrock123",
+      "email": "fishrock123@rocketmail.com"
+    },
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "mscdex",
+      "email": "mscdex@mscdex.net"
+    },
+    {
+      "name": "defunctzombie",
+      "email": "shtylman@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "dc295faf85024e05b04f5a6faf5eec1d1fd077e5",
+    "tarball": "http://registry.npmjs.org/accepts/-/accepts-1.3.1.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.1.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/History.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/History.md b/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/History.md
index 578d84f..5bd5136 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/History.md
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/History.md
@@ -1,3 +1,9 @@
+2.2.0 / 2015-11-13
+==================
+
+  * add option "decimalPlaces"
+  * add option "fixedDecimals"
+
 2.1.0 / 2015-05-21
 ==================
 

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

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/Readme.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/Readme.md b/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/Readme.md
index 8f15dec..fb4b3ea 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/Readme.md
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/Readme.md
@@ -1,5 +1,9 @@
 # Bytes utility
 
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Build Status][travis-image]][travis-url]
+
 Utility to parse a string bytes (ex: `1TB`) to bytes (`1099511627776`) and vice-versa.
 
 ## Usage
@@ -24,6 +28,8 @@ Format the given value in bytes into a string. If the value is negative, it is k
 
 | Property          | Type   | Description                                                                             |
 |-------------------|--------|-----------------------------------------------------------------------------------------|
+| decimalPlaces | `number`&#124;`null` | Maximum number of decimal places to include in output. Default value to `2`. |
+| fixedDecimals | `boolean`&#124;`null` | Whether to always display the maximum number of decimal places. Default value to `false` |
 | thousandsSeparator | `string`&#124;`null` | Example of values: `' '`, `','` and `.`... Default value to `' '`. |
 
 **Returns**
@@ -43,6 +49,9 @@ bytes(1000);
 
 bytes(1000, {thousandsSeparator: ' '});
 // output: '1 000B'
+
+bytes(1024 * 1.7, {decimalPlaces: 0});
+// output: '2kB'
 ```
 
 #### bytes.parse(string value): number|null
@@ -81,3 +90,10 @@ component install visionmedia/bytes.js
 ## License 
 
 [![npm](https://img.shields.io/npm/l/express.svg)](https://github.com/visionmedia/bytes.js/blob/master/LICENSE)
+
+[downloads-image]: https://img.shields.io/npm/dm/bytes.svg
+[downloads-url]: https://npmjs.org/package/bytes
+[npm-image]: https://img.shields.io/npm/v/bytes.svg
+[npm-url]: https://npmjs.org/package/bytes
+[travis-image]: https://img.shields.io/travis/visionmedia/bytes.js/master.svg
+[travis-url]: https://travis-ci.org/visionmedia/bytes.js


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


[10/14] cordova-browser git commit: CB-10788 Updated checked in node_modules

Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/index.js b/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/index.js
index dc4df2e..02d5bee 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/index.js
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/index.js
@@ -35,6 +35,8 @@ var map = {
  * @param {string|number} value
  * @param {{
  *  case: [string],
+ *  decimalPlaces: [number]
+ *  fixedDecimals: [boolean]
  *  thousandsSeparator: [string]
  *  }} [options] bytes options.
  *
@@ -61,39 +63,45 @@ function bytes(value, options) {
  *
  * @param {number} value
  * @param {object} [options]
+ * @param {number} [options.decimalPlaces=2]
+ * @param {number} [options.fixedDecimals=false]
  * @param {string} [options.thousandsSeparator=]
  * @public
  */
 
-function format(val, options) {
-  if (typeof val !== 'number') {
+function format(value, options) {
+  if (typeof value !== 'number') {
     return null;
   }
 
-  var mag = Math.abs(val);
+  var mag = Math.abs(value);
   var thousandsSeparator = (options && options.thousandsSeparator) || '';
+  var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;
+  var fixedDecimals = Boolean(options && options.fixedDecimals);
   var unit = 'B';
-  var value = val;
 
   if (mag >= map.tb) {
-    value = Math.round(value / map.tb * 100) / 100;
     unit = 'TB';
   } else if (mag >= map.gb) {
-    value = Math.round(value / map.gb * 100) / 100;
     unit = 'GB';
   } else if (mag >= map.mb) {
-    value = Math.round(value / map.mb * 100) / 100;
     unit = 'MB';
   } else if (mag >= map.kb) {
-    value = Math.round(value / map.kb * 100) / 100;
     unit = 'kB';
   }
 
+  var val = value / map[unit.toLowerCase()];
+  var str = val.toFixed(decimalPlaces);
+
+  if (!fixedDecimals) {
+    str = str.replace(/(?:\.0*|(\.[^0]+)0+)$/, '$1');
+  }
+
   if (thousandsSeparator) {
-    value = value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, thousandsSeparator);
+    str = str.replace(/\B(?=(\d{3})+(?!\d))/g, thousandsSeparator);
   }
 
-  return value + unit;
+  return str + unit;
 }
 
 /**

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/package.json b/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/package.json
index abc8c55..bc37c97 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/package.json
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/bytes/package.json
@@ -1,7 +1,7 @@
 {
   "name": "bytes",
   "description": "Utility to parse a string bytes to bytes and vice-versa",
-  "version": "2.1.0",
+  "version": "2.2.0",
   "author": {
     "name": "TJ Holowaychuk",
     "email": "tj@vision-media.ca",
@@ -11,6 +11,10 @@
     {
       "name": "Jed Watson",
       "email": "jed.watson@me.com"
+    },
+    {
+      "name": "Théo FIDRY",
+      "email": "theo.fidry@gmail.com"
     }
   ],
   "license": "MIT",
@@ -33,7 +37,7 @@
     }
   },
   "devDependencies": {
-    "mocha": "*"
+    "mocha": "1.21.5"
   },
   "files": [
     "History.md",
@@ -44,14 +48,34 @@
   "scripts": {
     "test": "mocha --check-leaks --reporter spec"
   },
-  "readme": "# Bytes utility\n\nUtility to parse a string bytes (ex: `1TB`) to bytes (`1099511627776`) and vice-versa.\n\n## Usage\n\n```js\nvar bytes = require('bytes');\n```\n\n#### bytes.format(number value, [options]): string|null\n\nFormat the given value in bytes into a string. If the value is negative, it is kept as such. If it is a float, it is\n rounded.\n\n**Arguments**\n\n| Name    | Type   | Description        |\n|---------|--------|--------------------|\n| value   | `number` | Value in bytes     |\n| options | `Object` | Conversion options |\n\n**Options**\n\n| Property          | Type   | Description                                                                             |\n|-------------------|--------|-----------------------------------------------------------------------------------------|\n| thousandsSeparator | `string`&#124;`null` | Example of values: `' '`, `','` and `.`... Default value to `' '`. |\n\n**Returns**\n\n| Name    | Type        | Description    
          |\n|---------|-------------|-------------------------|\n| results | `string`&#124;`null` | Return null upon error. String value otherwise. |\n\n**Example**\n\n```js\nbytes(1024);\n// output: '1kB'\n\nbytes(1000);\n// output: '1000B'\n\nbytes(1000, {thousandsSeparator: ' '});\n// output: '1 000B'\n```\n\n#### bytes.parse(string value): number|null\n\nParse the string value into an integer in bytes. If no unit is given, it is assumed the value is in bytes.\n\n**Arguments**\n\n| Name          | Type   | Description        |\n|---------------|--------|--------------------|\n| value   | `string` | String to parse.   |\n\n**Returns**\n\n| Name    | Type        | Description             |\n|---------|-------------|-------------------------|\n| results | `number`&#124;`null` | Return null upon error. Value in bytes otherwise. |\n\n**Example**\n\n```js\nbytes('1kB');\n// output: 1024\n\nbytes('1024');\n// output: 1024\n```\n\n## Installation\n\n```bash\nnpm install bytes --save\ncom
 ponent install visionmedia/bytes.js\n```\n\n## License \n\n[![npm](https://img.shields.io/npm/l/express.svg)](https://github.com/visionmedia/bytes.js/blob/master/LICENSE)\n",
-  "readmeFilename": "Readme.md",
+  "gitHead": "509a01a5472b9163ae5a7db41e2d6bd986fdf595",
   "bugs": {
     "url": "https://github.com/visionmedia/bytes.js/issues"
   },
-  "homepage": "https://github.com/visionmedia/bytes.js#readme",
-  "_id": "bytes@2.1.0",
-  "_shasum": "ac93c410e2ffc9cc7cf4b464b38289067f5e47b4",
-  "_resolved": "https://registry.npmjs.org/bytes/-/bytes-2.1.0.tgz",
-  "_from": "bytes@2.1.0"
+  "homepage": "https://github.com/visionmedia/bytes.js",
+  "_id": "bytes@2.2.0",
+  "_shasum": "fd35464a403f6f9117c2de3609ecff9cae000588",
+  "_from": "bytes@2.2.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    }
+  ],
+  "dist": {
+    "shasum": "fd35464a403f6f9117c2de3609ecff9cae000588",
+    "tarball": "http://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/HISTORY.md b/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/HISTORY.md
index 9c83342..a218593 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/HISTORY.md
@@ -1,3 +1,8 @@
+2.0.7 / 2016-01-18
+==================
+
+  * deps: mime-db@'>= 1.21.0 < 2'
+
 2.0.6 / 2015-09-29
 ==================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/README.md b/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/README.md
index 8edf7bc..1082f1e 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/README.md
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/README.md
@@ -8,7 +8,7 @@
 
 Compressible `Content-Type` / `mime` checking.
 
-### Installation
+## Installation
 
 ```bash
 $ npm install compressible
@@ -16,23 +16,28 @@ $ npm install compressible
 
 ## API
 
+```js
+var compressible = require('compressible')
+```
+
 ### compressible(type)
 
-Checks if the given content-type is compressible.
+Checks if the given `Content-Type` is compressible. The `type` argument is expected
+to be a value MIME type or `Content-Type` string, though no validation is performed.
 
 ```js
-var compressible = require('compressible')
-
 compressible('text/html') // => true
 compressible('image/png') // => false
 ```
 
-## [MIT Licensed](LICENSE)
+## License
+
+[MIT](LICENSE)
 
 [npm-image]: https://img.shields.io/npm/v/compressible.svg
 [npm-url]: https://npmjs.org/package/compressible
 [node-version-image]: https://img.shields.io/node/v/compressible.svg
-[node-version-url]: http://nodejs.org/download/
+[node-version-url]: https://nodejs.org/en/download/
 [travis-image]: https://img.shields.io/travis/jshttp/compressible/master.svg
 [travis-url]: https://travis-ci.org/jshttp/compressible
 [coveralls-image]: https://img.shields.io/coveralls/jshttp/compressible/master.svg

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/index.js b/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/index.js
index f0e1e22..2984e40 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/index.js
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/index.js
@@ -35,7 +35,7 @@ module.exports = compressible
  *
  * @param {string} type
  * @return {Boolean} compressible
- & @public
+ * @public
  */
 
 function compressible(type) {

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/HISTORY.md b/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/HISTORY.md
index 3088a72..44f9f64 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/HISTORY.md
@@ -1,3 +1,49 @@
+1.22.0 / 2016-02-15
+===================
+
+  * Add `application/ppsp-tracker+json`
+  * Add `application/problem+json`
+  * Add `application/problem+xml`
+  * Add `application/vnd.hdt`
+  * Add `application/vnd.ms-printschematicket+xml`
+  * Add `model/vnd.rosette.annotated-data-model`
+  * Add `text/slim`
+  * Add extension `.rng` to `application/xml`
+  * Fix extension of `application/dash+xml` to be `.mpd`
+  * Update primary extension to `.m4a` for `audio/mp4`
+
+1.21.0 / 2016-01-06
+===================
+
+  * Add `application/emergencycalldata.comment+xml`
+  * Add `application/emergencycalldata.deviceinfo+xml`
+  * Add `application/emergencycalldata.providerinfo+xml`
+  * Add `application/emergencycalldata.serviceinfo+xml`
+  * Add `application/emergencycalldata.subscriberinfo+xml`
+  * Add `application/vnd.filmit.zfc`
+  * Add `application/vnd.google-apps.document`
+  * Add `application/vnd.google-apps.presentation`
+  * Add `application/vnd.google-apps.spreadsheet`
+  * Add `application/vnd.mapbox-vector-tile`
+  * Add `application/vnd.ms-printdevicecapabilities+xml`
+  * Add `application/vnd.ms-windows.devicepairing`
+  * Add `application/vnd.ms-windows.nwprinting.oob`
+  * Add `application/vnd.tml`
+  * Add `audio/evs`
+
+1.20.0 / 2015-11-10
+===================
+
+  * Add `application/cdni`
+  * Add `application/csvm+json`
+  * Add `application/rfc+xml`
+  * Add `application/vnd.3gpp.access-transfer-events+xml`
+  * Add `application/vnd.3gpp.srvcc-ext+xml`
+  * Add `application/vnd.ms-windows.wsd.oob`
+  * Add `application/vnd.oxli.countgraph`
+  * Add `application/vnd.pagerduty+json`
+  * Add `text/x-suse-ymp`
+
 1.19.0 / 2015-09-17
 ===================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/README.md b/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/README.md
index 164cca0..7662440 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/README.md
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/README.md
@@ -52,7 +52,7 @@ Each mime type has the following properties:
     - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml)
     - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types)
 - `.extensions[]` - known extensions associated with this mime type.
-- `.compressible` - whether a file of this type is can be gzipped.
+- `.compressible` - whether a file of this type can be gzipped.
 - `.charset` - the default charset associated with this type, if any.
 
 If unknown, every property could be `undefined`.

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/db.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/db.json b/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/db.json
index f5b1a8c..863deb4 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/db.json
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/db.json
@@ -158,6 +158,9 @@
     "source": "iana",
     "extensions": ["cdmiq"]
   },
+  "application/cdni": {
+    "source": "iana"
+  },
   "application/cea": {
     "source": "iana"
   },
@@ -198,6 +201,10 @@
   "application/cstadata+xml": {
     "source": "iana"
   },
+  "application/csvm+json": {
+    "source": "iana",
+    "compressible": true
+  },
   "application/cu-seeme": {
     "source": "apache",
     "extensions": ["cu"]
@@ -210,7 +217,7 @@
   },
   "application/dash+xml": {
     "source": "iana",
-    "extensions": ["mdp"]
+    "extensions": ["mpd"]
   },
   "application/dashdelta": {
     "source": "iana"
@@ -277,6 +284,21 @@
     "source": "iana",
     "compressible": false
   },
+  "application/emergencycalldata.comment+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.deviceinfo+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.providerinfo+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.serviceinfo+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.subscriberinfo+xml": {
+    "source": "iana"
+  },
   "application/emma+xml": {
     "source": "iana",
     "extensions": ["emma"]
@@ -815,6 +837,17 @@
     "compressible": true,
     "extensions": ["ai","eps","ps"]
   },
+  "application/ppsp-tracker+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/problem+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/problem+xml": {
+    "source": "iana"
+  },
   "application/provenance+xml": {
     "source": "iana"
   },
@@ -882,6 +915,9 @@
     "source": "iana",
     "extensions": ["rld"]
   },
+  "application/rfc+xml": {
+    "source": "iana"
+  },
   "application/riscos": {
     "source": "iana"
   },
@@ -1157,6 +1193,9 @@
   "application/vnd.3gpp-prose-pc3ch+xml": {
     "source": "iana"
   },
+  "application/vnd.3gpp.access-transfer-events+xml": {
+    "source": "iana"
+  },
   "application/vnd.3gpp.bsf+xml": {
     "source": "iana"
   },
@@ -1178,6 +1217,9 @@
   "application/vnd.3gpp.sms": {
     "source": "iana"
   },
+  "application/vnd.3gpp.srvcc-ext+xml": {
+    "source": "iana"
+  },
   "application/vnd.3gpp.srvcc-info+xml": {
     "source": "iana"
   },
@@ -1842,6 +1884,9 @@
   "application/vnd.ffsns": {
     "source": "iana"
   },
+  "application/vnd.filmit.zfc": {
+    "source": "iana"
+  },
   "application/vnd.fints": {
     "source": "iana"
   },
@@ -1974,6 +2019,18 @@
     "source": "iana",
     "extensions": ["gmx"]
   },
+  "application/vnd.google-apps.document": {
+    "compressible": false,
+    "extensions": ["gdoc"]
+  },
+  "application/vnd.google-apps.presentation": {
+    "compressible": false,
+    "extensions": ["gslides"]
+  },
+  "application/vnd.google-apps.spreadsheet": {
+    "compressible": false,
+    "extensions": ["gsheet"]
+  },
   "application/vnd.google-earth.kml+xml": {
     "source": "iana",
     "compressible": true,
@@ -2047,6 +2104,9 @@
   "application/vnd.hcl-bireports": {
     "source": "iana"
   },
+  "application/vnd.hdt": {
+    "source": "iana"
+  },
   "application/vnd.heroku+json": {
     "source": "iana",
     "compressible": true
@@ -2391,6 +2451,9 @@
     "source": "iana",
     "extensions": ["portpkg"]
   },
+  "application/vnd.mapbox-vector-tile": {
+    "source": "iana"
+  },
   "application/vnd.marlin.drm.actiontoken+xml": {
     "source": "iana"
   },
@@ -2632,9 +2695,15 @@
     "source": "iana",
     "extensions": ["potm"]
   },
+  "application/vnd.ms-printdevicecapabilities+xml": {
+    "source": "iana"
+  },
   "application/vnd.ms-printing.printticket+xml": {
     "source": "apache"
   },
+  "application/vnd.ms-printschematicket+xml": {
+    "source": "iana"
+  },
   "application/vnd.ms-project": {
     "source": "iana",
     "extensions": ["mpp","mpt"]
@@ -2642,9 +2711,18 @@
   "application/vnd.ms-tnef": {
     "source": "iana"
   },
+  "application/vnd.ms-windows.devicepairing": {
+    "source": "iana"
+  },
+  "application/vnd.ms-windows.nwprinting.oob": {
+    "source": "iana"
+  },
   "application/vnd.ms-windows.printerpairing": {
     "source": "iana"
   },
+  "application/vnd.ms-windows.wsd.oob": {
+    "source": "iana"
+  },
   "application/vnd.ms-wmdrm.lic-chlg-req": {
     "source": "iana"
   },
@@ -3343,6 +3421,13 @@
   "application/vnd.otps.ct-kip+xml": {
     "source": "iana"
   },
+  "application/vnd.oxli.countgraph": {
+    "source": "iana"
+  },
+  "application/vnd.pagerduty+json": {
+    "source": "iana",
+    "compressible": true
+  },
   "application/vnd.palm": {
     "source": "iana",
     "extensions": ["pdb","pqa","oprc"]
@@ -3796,6 +3881,9 @@
   "application/vnd.tmd.mediaflex.api+xml": {
     "source": "iana"
   },
+  "application/vnd.tml": {
+    "source": "iana"
+  },
   "application/vnd.tmobile-livetv": {
     "source": "iana",
     "extensions": ["tmo"]
@@ -4678,7 +4766,7 @@
   "application/xml": {
     "source": "iana",
     "compressible": true,
-    "extensions": ["xml","xsl","xsd"]
+    "extensions": ["xml","xsl","xsd","rng"]
   },
   "application/xml-dtd": {
     "source": "iana",
@@ -4860,6 +4948,9 @@
   "audio/evrcwb1": {
     "source": "iana"
   },
+  "audio/evs": {
+    "source": "iana"
+  },
   "audio/fwdred": {
     "source": "iana"
   },
@@ -4949,7 +5040,7 @@
   "audio/mp4": {
     "source": "iana",
     "compressible": false,
-    "extensions": ["mp4a","m4a"]
+    "extensions": ["m4a","mp4a"]
   },
   "audio/mp4a-latm": {
     "source": "iana"
@@ -5700,6 +5791,9 @@
   "model/vnd.parasolid.transmit.text": {
     "source": "iana"
   },
+  "model/vnd.rosette.annotated-data-model": {
+    "source": "iana"
+  },
   "model/vnd.valve.source.compiled-map": {
     "source": "iana"
   },
@@ -5929,6 +6023,9 @@
     "source": "iana",
     "extensions": ["sgml","sgm"]
   },
+  "text/slim": {
+    "extensions": ["slim","slm"]
+  },
   "text/stylus": {
     "extensions": ["stylus","styl"]
   },
@@ -6132,6 +6229,10 @@
     "source": "apache",
     "extensions": ["sfv"]
   },
+  "text/x-suse-ymp": {
+    "compressible": true,
+    "extensions": ["ymp"]
+  },
   "text/x-uuencode": {
     "source": "apache",
     "extensions": ["uu"]

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/package.json b/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/package.json
index 9e10cd5..59c219e 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/package.json
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/node_modules/mime-db/package.json
@@ -1,7 +1,7 @@
 {
   "name": "mime-db",
   "description": "Media Type Database",
-  "version": "1.19.0",
+  "version": "1.22.0",
   "contributors": [
     {
       "name": "Douglas Christopher Wilson",
@@ -33,15 +33,15 @@
     "url": "git+https://github.com/jshttp/mime-db.git"
   },
   "devDependencies": {
-    "bluebird": "2.10.0",
+    "bluebird": "3.3.1",
     "co": "4.6.0",
     "cogent": "1.0.1",
-    "csv-parse": "1.0.0",
-    "gnode": "0.1.1",
-    "istanbul": "0.3.20",
+    "csv-parse": "1.0.1",
+    "gnode": "0.1.2",
+    "istanbul": "0.4.2",
     "mocha": "1.21.5",
-    "raw-body": "2.1.3",
-    "stream-to-array": "2"
+    "raw-body": "2.1.5",
+    "stream-to-array": "2.2.1"
   },
   "files": [
     "HISTORY.md",
@@ -61,14 +61,39 @@
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
     "update": "npm run fetch && npm run build"
   },
-  "readme": "# mime-db\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Node.js Version][node-image]][node-url]\n[![Build Status][travis-image]][travis-url]\n[![Coverage Status][coveralls-image]][coveralls-url]\n\nThis is a database of all mime types.\nIt consists of a single, public JSON file and does not include any logic,\nallowing it to remain as un-opinionated as possible with an API.\nIt aggregates data from the following sources:\n\n- http://www.iana.org/assignments/media-types/media-types.xhtml\n- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types\n- http://hg.nginx.org/nginx/raw-file/default/conf/mime.types\n\n## Installation\n\n```bash\nnpm install mime-db\n```\n\n### Database Download\n\nIf you're crazy enough to use this in the browser, you can just grab the\nJSON file using [RawGit](https://rawgit.com/). It is recommended to replace\n`master` with [a release tag](https://github.com/jshttp/mime-db/t
 ags) as the\nJSON format may change in the future.\n\n```\nhttps://cdn.rawgit.com/jshttp/mime-db/master/db.json\n```\n\n## Usage\n\n```js\nvar db = require('mime-db');\n\n// grab data on .js files\nvar data = db['application/javascript'];\n```\n\n## Data Structure\n\nThe JSON file is a map lookup for lowercased mime types.\nEach mime type has the following properties:\n\n- `.source` - where the mime type is defined.\n    If not set, it's probably a custom media type.\n    - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types)\n    - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml)\n    - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types)\n- `.extensions[]` - known extensions associated with this mime type.\n- `.compressible` - whether a file of this type is can be gzipped.\n- `.charset` - the default charset associated with this type, if 
 any.\n\nIf unknown, every property could be `undefined`.\n\n## Contributing\n\nTo edit the database, only make PRs against `src/custom.json` or\n`src/custom-suffix.json`.\n\nTo update the build, run `npm run build`.\n\n## Adding Custom Media Types\n\nThe best way to get new media types included in this library is to register\nthem with the IANA. The community registration procedure is outlined in\n[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types\nregistered with the IANA are automatically pulled into this library.\n\n[npm-version-image]: https://img.shields.io/npm/v/mime-db.svg\n[npm-downloads-image]: https://img.shields.io/npm/dm/mime-db.svg\n[npm-url]: https://npmjs.org/package/mime-db\n[travis-image]: https://img.shields.io/travis/jshttp/mime-db/master.svg\n[travis-url]: https://travis-ci.org/jshttp/mime-db\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-db/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master\n
 [node-image]: https://img.shields.io/node/v/mime-db.svg\n[node-url]: http://nodejs.org/download/\n",
-  "readmeFilename": "README.md",
+  "gitHead": "ed88d32405582a5aaff6225d1210005d6be2623e",
   "bugs": {
     "url": "https://github.com/jshttp/mime-db/issues"
   },
   "homepage": "https://github.com/jshttp/mime-db#readme",
-  "_id": "mime-db@1.19.0",
-  "_shasum": "496a18198a7ce8244534e25bb102b74fb420fd56",
-  "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.19.0.tgz",
-  "_from": "mime-db@>=1.19.0 <2.0.0"
+  "_id": "mime-db@1.22.0",
+  "_shasum": "ab23a6372dc9d86d3dc9121bd0ebd38105a1904a",
+  "_from": "mime-db@>=1.21.0 <2.0.0",
+  "_npmVersion": "2.14.7",
+  "_nodeVersion": "4.2.3",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "dist": {
+    "shasum": "ab23a6372dc9d86d3dc9121bd0ebd38105a1904a",
+    "tarball": "http://registry.npmjs.org/mime-db/-/mime-db-1.22.0.tgz"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    }
+  ],
+  "_npmOperationalInternal": {
+    "host": "packages-9-west.internal.npmjs.com",
+    "tmp": "tmp/mime-db-1.22.0.tgz_1455558813990_0.7830642955377698"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.22.0.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/package.json b/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/package.json
index 38a28c2..d32a5f1 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/package.json
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/compressible/package.json
@@ -1,9 +1,13 @@
 {
   "name": "compressible",
   "description": "Compressible Content-Type / mime checking",
-  "version": "2.0.6",
+  "version": "2.0.7",
   "contributors": [
     {
+      "name": "Douglas Christopher Wilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
       "name": "Jonathan Ong",
       "email": "me@jongleberry.com",
       "url": "http://jongleberry.com"
@@ -26,10 +30,10 @@
     "content-type"
   ],
   "dependencies": {
-    "mime-db": ">= 1.19.0 < 2"
+    "mime-db": ">= 1.21.0 < 2"
   },
   "devDependencies": {
-    "istanbul": "0.3.21",
+    "istanbul": "0.4.2",
     "mocha": "~1.21.5"
   },
   "engines": {
@@ -46,14 +50,54 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot --check-leaks"
   },
-  "readme": "# compressible\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nCompressible `Content-Type` / `mime` checking.\n\n### Installation\n\n```bash\n$ npm install compressible\n```\n\n## API\n\n### compressible(type)\n\nChecks if the given content-type is compressible.\n\n```js\nvar compressible = require('compressible')\n\ncompressible('text/html') // => true\ncompressible('image/png') // => false\n```\n\n## [MIT Licensed](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/compressible.svg\n[npm-url]: https://npmjs.org/package/compressible\n[node-version-image]: https://img.shields.io/node/v/compressible.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/compressible/master.svg\n[travis-url]: https://travis-ci.org/jsh
 ttp/compressible\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/compressible/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/compressible?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/compressible.svg\n[downloads-url]: https://npmjs.org/package/compressible\n",
-  "readmeFilename": "README.md",
+  "gitHead": "c12994fff506aa15af676c59a4117c0e09c0ae65",
   "bugs": {
     "url": "https://github.com/jshttp/compressible/issues"
   },
-  "homepage": "https://github.com/jshttp/compressible#readme",
-  "_id": "compressible@2.0.6",
-  "_shasum": "9e4aa9321ffcf9cc4d81954f7aafa9f35767d5ea",
-  "_resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.6.tgz",
-  "_from": "compressible@>=2.0.6 <2.1.0"
+  "homepage": "https://github.com/jshttp/compressible",
+  "_id": "compressible@2.0.7",
+  "_shasum": "2058c52722fd3f1538a4f22ab14d0635904d19ae",
+  "_from": "compressible@>=2.0.7 <2.1.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "fishrock123",
+      "email": "fishrock123@rocketmail.com"
+    },
+    {
+      "name": "federomero",
+      "email": "federomero@gmail.com"
+    },
+    {
+      "name": "mscdex",
+      "email": "mscdex@mscdex.net"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "defunctzombie",
+      "email": "shtylman@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "2058c52722fd3f1538a4f22ab14d0635904d19ae",
+    "tarball": "http://registry.npmjs.org/compressible/-/compressible-2.0.7.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.7.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/debug/node_modules/ms/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/debug/node_modules/ms/package.json b/node_modules/cordova-serve/node_modules/compression/node_modules/debug/node_modules/ms/package.json
index 7b5d86d..253335e 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/debug/node_modules/ms/package.json
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/debug/node_modules/ms/package.json
@@ -17,14 +17,32 @@
       "ms/index.js": "index.js"
     }
   },
-  "readme": "# ms.js: miliseconds conversion utility\n\n```js\nms('2 days')  // 172800000\nms('1d')      // 86400000\nms('10h')     // 36000000\nms('2.5 hrs') // 9000000\nms('2h')      // 7200000\nms('1m')      // 60000\nms('5s')      // 5000\nms('100')     // 100\n```\n\n```js\nms(60000)             // \"1m\"\nms(2 * 60000)         // \"2m\"\nms(ms('10 hours'))    // \"10h\"\n```\n\n```js\nms(60000, { long: true })             // \"1 minute\"\nms(2 * 60000, { long: true })         // \"2 minutes\"\nms(ms('10 hours'), { long: true })    // \"10 hours\"\n```\n\n- Node/Browser compatible. Published as [`ms`](https://www.npmjs.org/package/ms) in [NPM](http://nodejs.org/download).\n- If a number is supplied to `ms`, a string with a unit is returned.\n- If a string that contains the number is supplied, it returns it as\na number (e.g: it returns `100` for `'100'`).\n- If you pass a string with a number and a valid unit, the number of\nequivalent ms is returned.\n\n## License\n\nMIT\n",
-  "readmeFilename": "README.md",
+  "gitHead": "713dcf26d9e6fd9dbc95affe7eff9783b7f1b909",
   "bugs": {
     "url": "https://github.com/guille/ms.js/issues"
   },
-  "homepage": "https://github.com/guille/ms.js#readme",
+  "homepage": "https://github.com/guille/ms.js",
   "_id": "ms@0.7.1",
+  "scripts": {},
   "_shasum": "9cd13c03adbff25b65effde7ce864ee952017098",
+  "_from": "ms@0.7.1",
+  "_npmVersion": "2.7.5",
+  "_nodeVersion": "0.12.2",
+  "_npmUser": {
+    "name": "rauchg",
+    "email": "rauchg@gmail.com"
+  },
+  "maintainers": [
+    {
+      "name": "rauchg",
+      "email": "rauchg@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "9cd13c03adbff25b65effde7ce864ee952017098",
+    "tarball": "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
-  "_from": "ms@0.7.1"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/debug/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/debug/package.json b/node_modules/cordova-serve/node_modules/compression/node_modules/debug/package.json
index c10c4a8..24bb9c9 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/debug/package.json
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/debug/package.json
@@ -38,14 +38,36 @@
       "debug/debug.js": "debug.js"
     }
   },
-  "readme": "# debug\n\n  tiny node.js debugging utility modelled after node core's debugging technique.\n\n## Installation\n\n```bash\n$ npm install debug\n```\n\n## Usage\n\n With `debug` you simply invoke the exported function to generate your debug function, passing it a name which will determine if a noop function is returned, or a decorated `console.error`, so all of the `console` format string goodies you're used to work fine. A unique color is selected per-function for visibility.\n\nExample _app.js_:\n\n```js\nvar debug = require('debug')('http')\n  , http = require('http')\n  , name = 'My App';\n\n// fake app\n\ndebug('booting %s', name);\n\nhttp.createServer(function(req, res){\n  debug(req.method + ' ' + req.url);\n  res.end('hello\\n');\n}).listen(3000, function(){\n  debug('listening');\n});\n\n// fake worker of some kind\n\nrequire('./worker');\n```\n\nExample _worker.js_:\n\n```js\nvar debug = require('debug')('worker');\n\nsetInterval(function(){\n  debug('doing som
 e work');\n}, 1000);\n```\n\n The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples:\n\n  ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png)\n\n  ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png)\n\n#### Windows note\n\n On Windows the environment variable is set using the `set` command.\n\n ```cmd\n set DEBUG=*,-not_this\n ```\n\nThen, run the program to be debugged as usual.\n\n## Millisecond diff\n\n  When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the \"+NNNms\" will show you how much time was spent between calls.\n\n  ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png)\n\n  When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug info
 rmation as shown below:\n\n  ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png)\n\n## Conventions\n\n If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use \":\" to separate features. For example \"bodyParser\" from Connect would then be \"connect:bodyParser\".\n\n## Wildcards\n\n  The `*` character may be used as a wildcard. Suppose for example your library has debuggers named \"connect:bodyParser\", \"connect:compress\", \"connect:session\", instead of listing all three with `DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.\n\n  You can also exclude specific debuggers by prefixing them with a \"-\" character.  For example, `DEBUG=*,-connect:*` would include
  all debuggers except those starting with \"connect:\".\n\n## Browser support\n\n  Debug works in the browser as well, currently persisted by `localStorage`. Consider the situation shown below where you have `worker:a` and `worker:b`, and wish to debug both. Somewhere in the code on your page, include:\n\n```js\nwindow.myDebug = require(\"debug\");\n```\n\n  (\"debug\" is a global object in the browser so we give this object a different name.) When your page is open in the browser, type the following in the console:\n\n```js\nmyDebug.enable(\"worker:*\")\n```\n\n  Refresh the page. Debug output will continue to be sent to the console until it is disabled by typing `myDebug.disable()` in the console.\n\n```js\na = debug('worker:a');\nb = debug('worker:b');\n\nsetInterval(function(){\n  a('doing some work');\n}, 1000);\n\nsetInterval(function(){\n  b('doing some work');\n}, 1200);\n```\n\n#### Web Inspector Colors\n\n  Colors are also enabled on \"Web Inspectors\" that understand the 
 `%c` formatting\n  option. These are WebKit web inspectors, Firefox ([since version\n  31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/))\n  and the Firebug plugin for Firefox (any version).\n\n  Colored output looks something like:\n\n  ![](https://cloud.githubusercontent.com/assets/71256/3139768/b98c5fd8-e8ef-11e3-862a-f7253b6f47c6.png)\n\n### stderr vs stdout\n\nYou can set an alternative logging method per-namespace by overriding the `log` method on a per-namespace or globally:\n\nExample _stdout.js_:\n\n```js\nvar debug = require('debug');\nvar error = debug('app:error');\n\n// by default stderr is used\nerror('goes to stderr!');\n\nvar log = debug('app:log');\n// set this namespace to log via console.log\nlog.log = console.log.bind(console); // don't forget to bind to console!\nlog('goes to stdout');\nerror('still goes to stderr!');\n\n// set all output to go via console.info\n// overrid
 es all per-namespace log settings\ndebug.log = console.info.bind(console);\nerror('now goes to stdout via console.info');\nlog('still goes to stdout, but via console.info now');\n```\n\n### Save debug output to a file\n\nYou can save all debug statements to a file by piping them.\n\nExample:\n\n```bash\n$ DEBUG_FD=3 node your-app.js 3> whatever.log\n```\n\n## Authors\n\n - TJ Holowaychuk\n - Nathan Rajlich\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2014 TJ Holowaychuk &lt;tj@vision-media.ca&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permiss
 ion notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n",
-  "readmeFilename": "Readme.md",
+  "gitHead": "b38458422b5aa8aa6d286b10dfe427e8a67e2b35",
   "bugs": {
     "url": "https://github.com/visionmedia/debug/issues"
   },
-  "homepage": "https://github.com/visionmedia/debug#readme",
+  "homepage": "https://github.com/visionmedia/debug",
   "_id": "debug@2.2.0",
+  "scripts": {},
   "_shasum": "f87057e995b1a1f6ae6a4960664137bc56f039da",
+  "_from": "debug@>=2.2.0 <2.3.0",
+  "_npmVersion": "2.7.4",
+  "_nodeVersion": "0.12.2",
+  "_npmUser": {
+    "name": "tootallnate",
+    "email": "nathan@tootallnate.net"
+  },
+  "maintainers": [
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "tootallnate",
+      "email": "nathan@tootallnate.net"
+    }
+  ],
+  "dist": {
+    "shasum": "f87057e995b1a1f6ae6a4960664137bc56f039da",
+    "tarball": "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
-  "_from": "debug@>=2.2.0 <2.3.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/on-headers/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/on-headers/package.json b/node_modules/cordova-serve/node_modules/compression/node_modules/on-headers/package.json
index 513fec8..3a1ad43 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/on-headers/package.json
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/on-headers/package.json
@@ -37,14 +37,34 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
   },
-  "readme": "# on-headers\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nExecute a listener when a response is about to write headers.\n\n## Installation\n\n```sh\n$ npm install on-headers\n```\n\n## API\n\n```js\nvar onHeaders = require('on-headers')\n```\n\n### onHeaders(res, listener)\n\nThis will add the listener `listener` to fire when headers are emitted for `res`.\nThe listener is passed the `response` object as it's context (`this`). Headers are\nconsidered to be emitted only once, right before they are sent to the client.\n\nWhen this is called multiple times on the same `res`, the `listener`s are fired\nin the reverse order they were added.\n\n## Examples\n\n```js\nvar http = require('http')\nvar onHeaders = require('on-headers')\n\nhttp\n.createServer(onRequest)\n.listen
 (3000)\n\nfunction addPoweredBy() {\n  // set if not set by end of request\n  if (!this.getHeader('X-Powered-By')) {\n    this.setHeader('X-Powered-By', 'Node.js')\n  }\n}\n\nfunction onRequest(req, res) {\n  onHeaders(res, addPoweredBy)\n\n  res.setHeader('Content-Type', 'text/plain')\n  res.end('hello!')\n}\n```\n\n## Testing\n\n```sh\n$ npm test\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/on-headers.svg\n[npm-url]: https://npmjs.org/package/on-headers\n[node-version-image]: https://img.shields.io/node/v/on-headers.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/on-headers/master.svg\n[travis-url]: https://travis-ci.org/jshttp/on-headers\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/on-headers/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/on-headers?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/on-headers.svg\n[downloads-url]: https://npmjs.
 org/package/on-headers\n",
-  "readmeFilename": "README.md",
+  "gitHead": "ab0156a979d72353cfe666cccb3639e016b00280",
   "bugs": {
     "url": "https://github.com/jshttp/on-headers/issues"
   },
-  "homepage": "https://github.com/jshttp/on-headers#readme",
+  "homepage": "https://github.com/jshttp/on-headers",
   "_id": "on-headers@1.0.1",
   "_shasum": "928f5d0f470d49342651ea6794b0857c100693f7",
+  "_from": "on-headers@>=1.0.1 <1.1.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "928f5d0f470d49342651ea6794b0857c100693f7",
+    "tarball": "http://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
-  "_from": "on-headers@>=1.0.1 <1.1.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/node_modules/vary/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/node_modules/vary/package.json b/node_modules/cordova-serve/node_modules/compression/node_modules/vary/package.json
index 777843c..5023fd9 100644
--- a/node_modules/cordova-serve/node_modules/compression/node_modules/vary/package.json
+++ b/node_modules/cordova-serve/node_modules/compression/node_modules/vary/package.json
@@ -35,14 +35,38 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
   },
-  "readme": "# vary\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nManipulate the HTTP Vary header\n\n## Installation\n\n```sh\n$ npm install vary\n```\n\n## API\n\n```js\nvar vary = require('vary')\n```\n\n### vary(res, field)\n\nAdds the given header `field` to the `Vary` response header of `res`.\nThis can be a string of a single field, a string of a valid `Vary`\nheader, or an array of multiple fields.\n\nThis will append the header if not already listed, otherwise leaves\nit listed in the current location.\n\n```js\n// Append \"Origin\" to the Vary header of the response\nvary(res, 'Origin')\n```\n\n### vary.append(header, field)\n\nAdds the given header `field` to the `Vary` response header string `header`.\nThis can be a string of a single field, a string of a valid `Vary` h
 eader,\nor an array of multiple fields.\n\nThis will append the header if not already listed, otherwise leaves\nit listed in the current location. The new header string is returned.\n\n```js\n// Get header string appending \"Origin\" to \"Accept, User-Agent\"\nvary.append('Accept, User-Agent', 'Origin')\n```\n\n## Examples\n\n### Updating the Vary header when content is based on it\n\n```js\nvar http = require('http')\nvar vary = require('vary')\n\nhttp.createServer(function onRequest(req, res) {\n  // about to user-agent sniff\n  vary(res, 'User-Agent')\n\n  var ua = req.headers['user-agent'] || ''\n  var isMobile = /mobi|android|touch|mini/i.test(ua)\n\n  // serve site, depending on isMobile\n  res.setHeader('Content-Type', 'text/html')\n  res.end('You are (probably) ' + (isMobile ? '' : 'not ') + 'a mobile user')\n})\n```\n\n## Testing\n\n```sh\n$ npm test\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/vary.svg\n[npm-url]: https://npmjs.org/pack
 age/vary\n[node-version-image]: https://img.shields.io/node/v/vary.svg\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/vary/master.svg\n[travis-url]: https://travis-ci.org/jshttp/vary\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/vary/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/vary\n[downloads-image]: https://img.shields.io/npm/dm/vary.svg\n[downloads-url]: https://npmjs.org/package/vary\n",
-  "readmeFilename": "README.md",
+  "gitHead": "13b03e9bf97da9d83bfeac84d84144137d84c257",
   "bugs": {
     "url": "https://github.com/jshttp/vary/issues"
   },
-  "homepage": "https://github.com/jshttp/vary#readme",
+  "homepage": "https://github.com/jshttp/vary",
   "_id": "vary@1.1.0",
   "_shasum": "e1e5affbbd16ae768dd2674394b9ad3022653140",
+  "_from": "vary@>=1.1.0 <1.2.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "fishrock123",
+      "email": "fishrock123@rocketmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "e1e5affbbd16ae768dd2674394b9ad3022653140",
+    "tarball": "http://registry.npmjs.org/vary/-/vary-1.1.0.tgz"
+  },
+  "directories": {},
   "_resolved": "https://registry.npmjs.org/vary/-/vary-1.1.0.tgz",
-  "_from": "vary@>=1.1.0 <1.2.0"
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/compression/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/compression/package.json b/node_modules/cordova-serve/node_modules/compression/package.json
index b3c68a9..06fdc73 100644
--- a/node_modules/cordova-serve/node_modules/compression/package.json
+++ b/node_modules/cordova-serve/node_modules/compression/package.json
@@ -1,7 +1,7 @@
 {
   "name": "compression",
   "description": "Node.js compression middleware",
-  "version": "1.6.0",
+  "version": "1.6.1",
   "contributors": [
     {
       "name": "Douglas Christopher Wilson",
@@ -19,16 +19,16 @@
     "url": "git+https://github.com/expressjs/compression.git"
   },
   "dependencies": {
-    "accepts": "~1.3.0",
-    "bytes": "2.1.0",
-    "compressible": "~2.0.6",
+    "accepts": "~1.3.1",
+    "bytes": "2.2.0",
+    "compressible": "~2.0.7",
     "debug": "~2.2.0",
     "on-headers": "~1.0.1",
     "vary": "~1.1.0"
   },
   "devDependencies": {
-    "istanbul": "0.3.21",
-    "mocha": "2.3.3",
+    "istanbul": "0.4.2",
+    "mocha": "2.3.4",
     "supertest": "1.1.0"
   },
   "files": [
@@ -44,14 +44,54 @@
     "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --check-leaks --reporter dot",
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --check-leaks --reporter spec"
   },
-  "readme": "# compression\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n[![Gratipay][gratipay-image]][gratipay-url]\n\nNode.js compression middleware.\n\nThe following compression codings are supported:\n\n  - deflate\n  - gzip\n\n## Install\n\n```bash\n$ npm install compression\n```\n\n## API\n\n```js\nvar compression = require('compression')\n```\n\n### compression([options])\n\nReturns the compression middleware using the given `options`. The middleware\nwill attempt to compress response bodies for all request that traverse through\nthe middleware, based on the given `options`.\n\nThis middleware will never compress responses that include a `Cache-Control`\nheader with the [`no-transform` directive](https://tools.ietf.org/html/rfc7234#section-5.2.2.4),\nas compressing will transform the body.\n\n#### Options\n\n`compression()` accepts th
 ese properties in the options object. In addition to\nthose listed below, [zlib](http://nodejs.org/api/zlib.html) options may be\npassed in to the options object.\n\n##### chunkSize\n\nThe default value is `zlib.Z_DEFAULT_CHUNK`, or `16384`.\n\nSee [Node.js documentation](http://nodejs.org/api/zlib.html#zlib_memory_usage_tuning)\nregarding the usage.\n\n##### filter\n\nA function to decide if the response should be considered for compression.\nThis function is called as `filter(req, res)` and is expected to return\n`true` to consider the response for compression, or `false` to not compress\nthe response.\n\nThe default filter function uses the [compressible](https://www.npmjs.com/package/compressible)\nmodule to determine if `res.getHeader('Content-Type')` is compressible.\n\n##### level\n\nThe level of zlib compression to apply to responses. A higher level will result\nin better compression, but will take longer to complete. A lower level will\nresult in less compression, but will 
 be much faster.\n\nThis is an integer in the range of `0` (no compression) to `9` (maximum\ncompression). The special value `-1` can be used to mean the \"default\ncompression level\", which is a default compromise between speed and\ncompression (currently equivalent to level 6).\n\n  - `-1` Default compression level (also `zlib.Z_DEFAULT_COMPRESSION`).\n  - `0` No compression (also `zlib.Z_NO_COMPRESSION`).\n  - `1` Fastest compression (also `zlib.Z_BEST_SPEED`).\n  - `2`\n  - `3`\n  - `4`\n  - `5`\n  - `6` (currently what `zlib.Z_DEFAULT_COMPRESSION` points to).\n  - `7`\n  - `8`\n  - `9` Best compression (also `zlib.Z_BEST_COMPRESSION`).\n\nThe default value is `zlib.Z_DEFAULT_COMPRESSION`, or `-1`.\n\n**Note** in the list above, `zlib` is from `zlib = require('zlib')`.\n\n##### memLevel\n\nThis specifies how much memory should be allocated for the internal compression\nstate and is an integer in the range of `1` (minimum level) and `9` (maximum\nlevel).\n\nThe default value is `
 zlib.Z_DEFAULT_MEMLEVEL`, or `8`.\n\nSee [Node.js documentation](http://nodejs.org/api/zlib.html#zlib_memory_usage_tuning)\nregarding the usage.\n\n##### strategy\n\nThis is used to tune the compression algorithm. This value only affects the\ncompression ratio, not the correctness of the compressed output, even if it\nis not set appropriately.\n\n  - `zlib.Z_DEFAULT_STRATEGY` Use for normal data.\n  - `zlib.Z_FILTERED` Use for data produced by a filter (or predictor).\n    Filtered data consists mostly of small values with a somewhat random\n    distribution. In this case, the compression algorithm is tuned to\n    compress them better. The effect is to force more Huffman coding and less\n    string matching; it is somewhat intermediate between `zlib.Z_DEFAULT_STRATEGY`\n    and `zlib.Z_HUFFMAN_ONLY`.\n  - `zlib.Z_FIXED` Use to prevent the use of dynamic Huffman codes, allowing\n    for a simpler decoder for special applications.\n  - `zlib.Z_HUFFMAN_ONLY` Use to force Huffman encod
 ing only (no string match).\n  - `zlib.Z_RLE` Use to limit match distances to one (run-length encoding).\n    This is designed to be almost as fast as `zlib.Z_HUFFMAN_ONLY`, but give\n    better compression for PNG image data.\n\n**Note** in the list above, `zlib` is from `zlib = require('zlib')`.\n\n##### threshold\n\nThe byte threshold for the response body size before compression is considered\nfor the response, defaults to `1kb`. This is a number of bytes, any string\naccepted by the [bytes](https://www.npmjs.com/package/bytes) module, or `false`.\n\n**Note** this is only an advisory setting; if the response size cannot be determined\nat the time the response headers are written, then it is assumed the response is\n_over_ the threshold. To guarantee the response size can be determined, be sure\nset a `Content-Length` response header.\n\n##### windowBits\n\nThe default value is `zlib.Z_DEFAULT_WINDOWBITS`, or `15`.\n\nSee [Node.js documentation](http://nodejs.org/api/zlib.html#zl
 ib_memory_usage_tuning)\nregarding the usage.\n\n#### .filter\n\nThe default `filter` function. This is used to construct a custom filter\nfunction that is an extension of the default function.\n\n```js\napp.use(compression({filter: shouldCompress}))\n\nfunction shouldCompress(req, res) {\n  if (req.headers['x-no-compression']) {\n    // don't compress responses with this request header\n    return false\n  }\n\n  // fallback to standard filter function\n  return compression.filter(req, res)\n}\n```\n\n### res.flush\n\nThis module adds a `res.flush()` method to force the partially-compressed\nresponse to be flushed to the client.\n\n## Examples\n\n### express/connect\n\nWhen using this module with express or connect, simply `app.use` the module as\nhigh as you like. Requests that pass through the middleware will be compressed.\n\n```js\nvar compression = require('compression')\nvar express = require('express')\n\nvar app = express()\n\n// compress all requests\napp.use(compression()
 )\n\n// add all routes\n```\n\n### Server-Sent Events\n\nBecause of the nature of compression this module does not work out of the box\nwith server-sent events. To compress content, a window of the output needs to\nbe buffered up in order to get good compression. Typically when using server-sent\nevents, there are certain block of data that need to reach the client.\n\nYou can achieve this by calling `res.flush()` when you need the data written to\nactually make it to the client.\n\n```js\nvar compression = require('compression')\nvar express     = require('express')\n\nvar app = express()\n\n// compress responses\napp.use(compression())\n\n// server-sent event stream\napp.get('/events', function (req, res) {\n  res.setHeader('Content-Type', 'text/event-stream')\n  res.setHeader('Cache-Control', 'no-cache')\n\n  // send a ping approx every 2 seconds\n  var timer = setInterval(function () {\n    res.write('data: ping\\n\\n')\n\n    // !!! this is the important part\n    res.flush()\n
   }, 2000)\n\n  res.on('close', function () {\n    clearInterval(timer)\n  })\n})\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/compression.svg\n[npm-url]: https://npmjs.org/package/compression\n[travis-image]: https://img.shields.io/travis/expressjs/compression/master.svg\n[travis-url]: https://travis-ci.org/expressjs/compression\n[coveralls-image]: https://img.shields.io/coveralls/expressjs/compression/master.svg\n[coveralls-url]: https://coveralls.io/r/expressjs/compression?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/compression.svg\n[downloads-url]: https://npmjs.org/package/compression\n[gratipay-image]: https://img.shields.io/gratipay/dougwilson.svg\n[gratipay-url]: https://www.gratipay.com/dougwilson/\n",
-  "readmeFilename": "README.md",
+  "gitHead": "3333505901afc9508e026320feffa92d41e7c552",
   "bugs": {
     "url": "https://github.com/expressjs/compression/issues"
   },
-  "homepage": "https://github.com/expressjs/compression#readme",
-  "_id": "compression@1.6.0",
-  "_shasum": "886465ffa4a19f9b73b41682db77d28179b30920",
-  "_resolved": "https://registry.npmjs.org/compression/-/compression-1.6.0.tgz",
-  "_from": "compression@>=1.6.0 <2.0.0"
+  "homepage": "https://github.com/expressjs/compression",
+  "_id": "compression@1.6.1",
+  "_shasum": "1bf4f96fd72019a3fd11513b4fc4dcd3bd16db55",
+  "_from": "compression@>=1.6.0 <2.0.0",
+  "_npmVersion": "1.4.28",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "maintainers": [
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    },
+    {
+      "name": "federomero",
+      "email": "federomero@gmail.com"
+    },
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "fishrock123",
+      "email": "fishrock123@rocketmail.com"
+    },
+    {
+      "name": "tjholowaychuk",
+      "email": "tj@vision-media.ca"
+    },
+    {
+      "name": "mscdex",
+      "email": "mscdex@mscdex.net"
+    },
+    {
+      "name": "defunctzombie",
+      "email": "shtylman@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "1bf4f96fd72019a3fd11513b4fc4dcd3bd16db55",
+    "tarball": "http://registry.npmjs.org/compression/-/compression-1.6.1.tgz"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/compression/-/compression-1.6.1.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/History.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/History.md b/node_modules/cordova-serve/node_modules/express/History.md
index be89c8e..c72241b 100644
--- a/node_modules/cordova-serve/node_modules/express/History.md
+++ b/node_modules/cordova-serve/node_modules/express/History.md
@@ -1,3 +1,40 @@
+4.13.4 / 2016-01-21
+===================
+
+  * deps: content-disposition@0.5.1
+    - perf: enable strict mode
+  * deps: cookie@0.1.5
+    - Throw on invalid values provided to `serialize`
+  * deps: depd@~1.1.0
+    - Support web browser loading
+    - perf: enable strict mode
+  * deps: escape-html@~1.0.3
+    - perf: enable strict mode
+    - perf: optimize string replacement
+    - perf: use faster string coercion
+  * deps: finalhandler@0.4.1
+    - deps: escape-html@~1.0.3
+  * deps: merge-descriptors@1.0.1
+    - perf: enable strict mode
+  * deps: methods@~1.1.2
+    - perf: enable strict mode
+  * deps: parseurl@~1.3.1
+    - perf: enable strict mode
+  * deps: proxy-addr@~1.0.10
+    - deps: ipaddr.js@1.0.5
+    - perf: enable strict mode
+  * deps: range-parser@~1.0.3
+    - perf: enable strict mode
+  * deps: send@0.13.1
+    - deps: depd@~1.1.0
+    - deps: destroy@~1.0.4
+    - deps: escape-html@~1.0.3
+    - deps: range-parser@~1.0.3
+  * deps: serve-static@~1.10.2
+    - deps: escape-html@~1.0.3
+    - deps: parseurl@~1.3.0
+    - deps: send@0.13.1
+
 4.13.3 / 2015-08-02
 ===================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/Readme.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/Readme.md b/node_modules/cordova-serve/node_modules/express/Readme.md
index 8da83a5..6e08454 100644
--- a/node_modules/cordova-serve/node_modules/express/Readme.md
+++ b/node_modules/cordova-serve/node_modules/express/Readme.md
@@ -37,15 +37,15 @@ $ npm install express
 
 ## Docs & Community
 
-  * [Website and Documentation](http://expressjs.com/) - [[website repo](https://github.com/strongloop/expressjs.com)]
   * [#express](https://webchat.freenode.net/?channels=express) on freenode IRC
   * [Github Organization](https://github.com/expressjs) for Official Middleware & Modules
-  * Visit the [Wiki](https://github.com/strongloop/express/wiki)
   * [Google Group](https://groups.google.com/group/express-js) for discussion
+  * [Gitter](https://gitter.im/expressjs/express) for support and discussion
   * [Русскоязычная документация](http://jsman.ru/express/)
-  * [한국어 문서](http://expressjs.kr) - [[website repo](https://github.com/Hanul/expressjs.kr)]
 
-**PROTIP** Be sure to read [Migrating from 3.x to 4.x](https://github.com/strongloop/express/wiki/Migrating-from-3.x-to-4.x) as well as [New features in 4.x](https://github.com/strongloop/express/wiki/New-features-in-4.x).
+###Security Issues
+
+If you discover a security vulnerability in Express, please see [Security Policies and Procedures](Security.md).
 
 ## Quick Start
 
@@ -90,7 +90,7 @@ $ npm start
   To view the examples, clone the Express repo and install the dependencies:
 
 ```bash
-$ git clone git://github.com/strongloop/express.git --depth 1
+$ git clone git://github.com/expressjs/express.git --depth 1
 $ cd express
 $ npm install
 ```
@@ -116,7 +116,7 @@ The original author of Express is [TJ Holowaychuk](https://github.com/tj) [![TJ'
 
 The current lead maintainer is [Douglas Christopher Wilson](https://github.com/dougwilson) [![Doug's Gratipay][gratipay-image-dougwilson]][gratipay-url-dougwilson]
 
-[List of all contributors](https://github.com/strongloop/express/graphs/contributors)
+[List of all contributors](https://github.com/expressjs/express/graphs/contributors)
 
 ## License
 
@@ -126,12 +126,12 @@ The current lead maintainer is [Douglas Christopher Wilson](https://github.com/d
 [npm-url]: https://npmjs.org/package/express
 [downloads-image]: https://img.shields.io/npm/dm/express.svg
 [downloads-url]: https://npmjs.org/package/express
-[travis-image]: https://img.shields.io/travis/strongloop/express/master.svg?label=linux
-[travis-url]: https://travis-ci.org/strongloop/express
+[travis-image]: https://img.shields.io/travis/expressjs/express/master.svg?label=linux
+[travis-url]: https://travis-ci.org/expressjs/express
 [appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/express/master.svg?label=windows
 [appveyor-url]: https://ci.appveyor.com/project/dougwilson/express
-[coveralls-image]: https://img.shields.io/coveralls/strongloop/express/master.svg
-[coveralls-url]: https://coveralls.io/r/strongloop/express?branch=master
+[coveralls-image]: https://img.shields.io/coveralls/expressjs/express/master.svg
+[coveralls-url]: https://coveralls.io/r/expressjs/express?branch=master
 [gratipay-image-visionmedia]: https://img.shields.io/gratipay/visionmedia.svg
 [gratipay-url-visionmedia]: https://gratipay.com/visionmedia/
 [gratipay-image-dougwilson]: https://img.shields.io/gratipay/dougwilson.svg

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/lib/application.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/lib/application.js b/node_modules/cordova-serve/node_modules/express/lib/application.js
index a9df910..0ee4def 100644
--- a/node_modules/cordova-serve/node_modules/express/lib/application.js
+++ b/node_modules/cordova-serve/node_modules/express/lib/application.js
@@ -522,7 +522,7 @@ app.del = deprecate.function(app.delete, 'app.del: Use app.delete instead');
  *    })
  *
  * @param {String} name
- * @param {String|Function} options or fn
+ * @param {Object|Function} options or fn
  * @param {Function} callback
  * @public
  */

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/HISTORY.md b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/HISTORY.md
index 3057e49..1d86a5c 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/HISTORY.md
@@ -1,3 +1,23 @@
+2.1.10 / 2016-02-15
+===================
+
+  * deps: mime-db@~1.22.0
+    - Add new mime types
+    - Fix extension of `application/dash+xml`
+    - Update primary extension for `audio/mp4`
+
+2.1.9 / 2016-01-06
+==================
+
+  * deps: mime-db@~1.21.0
+    - Add new mime types
+
+2.1.8 / 2015-11-30
+==================
+
+  * deps: mime-db@~1.20.0
+    - Add new mime types
+
 2.1.7 / 2015-09-20
 ==================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/README.md b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/README.md
index e26295d..e77d615 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/README.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/README.md
@@ -94,7 +94,7 @@ A map of extensions by content-type.
 [npm-image]: https://img.shields.io/npm/v/mime-types.svg
 [npm-url]: https://npmjs.org/package/mime-types
 [node-version-image]: https://img.shields.io/node/v/mime-types.svg
-[node-version-url]: http://nodejs.org/download/
+[node-version-url]: https://nodejs.org/en/download/
 [travis-image]: https://img.shields.io/travis/jshttp/mime-types/master.svg
 [travis-url]: https://travis-ci.org/jshttp/mime-types
 [coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-types/master.svg

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/HISTORY.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/HISTORY.md b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/HISTORY.md
index 3088a72..44f9f64 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/HISTORY.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/HISTORY.md
@@ -1,3 +1,49 @@
+1.22.0 / 2016-02-15
+===================
+
+  * Add `application/ppsp-tracker+json`
+  * Add `application/problem+json`
+  * Add `application/problem+xml`
+  * Add `application/vnd.hdt`
+  * Add `application/vnd.ms-printschematicket+xml`
+  * Add `model/vnd.rosette.annotated-data-model`
+  * Add `text/slim`
+  * Add extension `.rng` to `application/xml`
+  * Fix extension of `application/dash+xml` to be `.mpd`
+  * Update primary extension to `.m4a` for `audio/mp4`
+
+1.21.0 / 2016-01-06
+===================
+
+  * Add `application/emergencycalldata.comment+xml`
+  * Add `application/emergencycalldata.deviceinfo+xml`
+  * Add `application/emergencycalldata.providerinfo+xml`
+  * Add `application/emergencycalldata.serviceinfo+xml`
+  * Add `application/emergencycalldata.subscriberinfo+xml`
+  * Add `application/vnd.filmit.zfc`
+  * Add `application/vnd.google-apps.document`
+  * Add `application/vnd.google-apps.presentation`
+  * Add `application/vnd.google-apps.spreadsheet`
+  * Add `application/vnd.mapbox-vector-tile`
+  * Add `application/vnd.ms-printdevicecapabilities+xml`
+  * Add `application/vnd.ms-windows.devicepairing`
+  * Add `application/vnd.ms-windows.nwprinting.oob`
+  * Add `application/vnd.tml`
+  * Add `audio/evs`
+
+1.20.0 / 2015-11-10
+===================
+
+  * Add `application/cdni`
+  * Add `application/csvm+json`
+  * Add `application/rfc+xml`
+  * Add `application/vnd.3gpp.access-transfer-events+xml`
+  * Add `application/vnd.3gpp.srvcc-ext+xml`
+  * Add `application/vnd.ms-windows.wsd.oob`
+  * Add `application/vnd.oxli.countgraph`
+  * Add `application/vnd.pagerduty+json`
+  * Add `text/x-suse-ymp`
+
 1.19.0 / 2015-09-17
 ===================
 

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/README.md b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/README.md
index 164cca0..7662440 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/README.md
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/README.md
@@ -52,7 +52,7 @@ Each mime type has the following properties:
     - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml)
     - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types)
 - `.extensions[]` - known extensions associated with this mime type.
-- `.compressible` - whether a file of this type is can be gzipped.
+- `.compressible` - whether a file of this type can be gzipped.
 - `.charset` - the default charset associated with this type, if any.
 
 If unknown, every property could be `undefined`.

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/db.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/db.json b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/db.json
index f5b1a8c..863deb4 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/db.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/db.json
@@ -158,6 +158,9 @@
     "source": "iana",
     "extensions": ["cdmiq"]
   },
+  "application/cdni": {
+    "source": "iana"
+  },
   "application/cea": {
     "source": "iana"
   },
@@ -198,6 +201,10 @@
   "application/cstadata+xml": {
     "source": "iana"
   },
+  "application/csvm+json": {
+    "source": "iana",
+    "compressible": true
+  },
   "application/cu-seeme": {
     "source": "apache",
     "extensions": ["cu"]
@@ -210,7 +217,7 @@
   },
   "application/dash+xml": {
     "source": "iana",
-    "extensions": ["mdp"]
+    "extensions": ["mpd"]
   },
   "application/dashdelta": {
     "source": "iana"
@@ -277,6 +284,21 @@
     "source": "iana",
     "compressible": false
   },
+  "application/emergencycalldata.comment+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.deviceinfo+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.providerinfo+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.serviceinfo+xml": {
+    "source": "iana"
+  },
+  "application/emergencycalldata.subscriberinfo+xml": {
+    "source": "iana"
+  },
   "application/emma+xml": {
     "source": "iana",
     "extensions": ["emma"]
@@ -815,6 +837,17 @@
     "compressible": true,
     "extensions": ["ai","eps","ps"]
   },
+  "application/ppsp-tracker+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/problem+json": {
+    "source": "iana",
+    "compressible": true
+  },
+  "application/problem+xml": {
+    "source": "iana"
+  },
   "application/provenance+xml": {
     "source": "iana"
   },
@@ -882,6 +915,9 @@
     "source": "iana",
     "extensions": ["rld"]
   },
+  "application/rfc+xml": {
+    "source": "iana"
+  },
   "application/riscos": {
     "source": "iana"
   },
@@ -1157,6 +1193,9 @@
   "application/vnd.3gpp-prose-pc3ch+xml": {
     "source": "iana"
   },
+  "application/vnd.3gpp.access-transfer-events+xml": {
+    "source": "iana"
+  },
   "application/vnd.3gpp.bsf+xml": {
     "source": "iana"
   },
@@ -1178,6 +1217,9 @@
   "application/vnd.3gpp.sms": {
     "source": "iana"
   },
+  "application/vnd.3gpp.srvcc-ext+xml": {
+    "source": "iana"
+  },
   "application/vnd.3gpp.srvcc-info+xml": {
     "source": "iana"
   },
@@ -1842,6 +1884,9 @@
   "application/vnd.ffsns": {
     "source": "iana"
   },
+  "application/vnd.filmit.zfc": {
+    "source": "iana"
+  },
   "application/vnd.fints": {
     "source": "iana"
   },
@@ -1974,6 +2019,18 @@
     "source": "iana",
     "extensions": ["gmx"]
   },
+  "application/vnd.google-apps.document": {
+    "compressible": false,
+    "extensions": ["gdoc"]
+  },
+  "application/vnd.google-apps.presentation": {
+    "compressible": false,
+    "extensions": ["gslides"]
+  },
+  "application/vnd.google-apps.spreadsheet": {
+    "compressible": false,
+    "extensions": ["gsheet"]
+  },
   "application/vnd.google-earth.kml+xml": {
     "source": "iana",
     "compressible": true,
@@ -2047,6 +2104,9 @@
   "application/vnd.hcl-bireports": {
     "source": "iana"
   },
+  "application/vnd.hdt": {
+    "source": "iana"
+  },
   "application/vnd.heroku+json": {
     "source": "iana",
     "compressible": true
@@ -2391,6 +2451,9 @@
     "source": "iana",
     "extensions": ["portpkg"]
   },
+  "application/vnd.mapbox-vector-tile": {
+    "source": "iana"
+  },
   "application/vnd.marlin.drm.actiontoken+xml": {
     "source": "iana"
   },
@@ -2632,9 +2695,15 @@
     "source": "iana",
     "extensions": ["potm"]
   },
+  "application/vnd.ms-printdevicecapabilities+xml": {
+    "source": "iana"
+  },
   "application/vnd.ms-printing.printticket+xml": {
     "source": "apache"
   },
+  "application/vnd.ms-printschematicket+xml": {
+    "source": "iana"
+  },
   "application/vnd.ms-project": {
     "source": "iana",
     "extensions": ["mpp","mpt"]
@@ -2642,9 +2711,18 @@
   "application/vnd.ms-tnef": {
     "source": "iana"
   },
+  "application/vnd.ms-windows.devicepairing": {
+    "source": "iana"
+  },
+  "application/vnd.ms-windows.nwprinting.oob": {
+    "source": "iana"
+  },
   "application/vnd.ms-windows.printerpairing": {
     "source": "iana"
   },
+  "application/vnd.ms-windows.wsd.oob": {
+    "source": "iana"
+  },
   "application/vnd.ms-wmdrm.lic-chlg-req": {
     "source": "iana"
   },
@@ -3343,6 +3421,13 @@
   "application/vnd.otps.ct-kip+xml": {
     "source": "iana"
   },
+  "application/vnd.oxli.countgraph": {
+    "source": "iana"
+  },
+  "application/vnd.pagerduty+json": {
+    "source": "iana",
+    "compressible": true
+  },
   "application/vnd.palm": {
     "source": "iana",
     "extensions": ["pdb","pqa","oprc"]
@@ -3796,6 +3881,9 @@
   "application/vnd.tmd.mediaflex.api+xml": {
     "source": "iana"
   },
+  "application/vnd.tml": {
+    "source": "iana"
+  },
   "application/vnd.tmobile-livetv": {
     "source": "iana",
     "extensions": ["tmo"]
@@ -4678,7 +4766,7 @@
   "application/xml": {
     "source": "iana",
     "compressible": true,
-    "extensions": ["xml","xsl","xsd"]
+    "extensions": ["xml","xsl","xsd","rng"]
   },
   "application/xml-dtd": {
     "source": "iana",
@@ -4860,6 +4948,9 @@
   "audio/evrcwb1": {
     "source": "iana"
   },
+  "audio/evs": {
+    "source": "iana"
+  },
   "audio/fwdred": {
     "source": "iana"
   },
@@ -4949,7 +5040,7 @@
   "audio/mp4": {
     "source": "iana",
     "compressible": false,
-    "extensions": ["mp4a","m4a"]
+    "extensions": ["m4a","mp4a"]
   },
   "audio/mp4a-latm": {
     "source": "iana"
@@ -5700,6 +5791,9 @@
   "model/vnd.parasolid.transmit.text": {
     "source": "iana"
   },
+  "model/vnd.rosette.annotated-data-model": {
+    "source": "iana"
+  },
   "model/vnd.valve.source.compiled-map": {
     "source": "iana"
   },
@@ -5929,6 +6023,9 @@
     "source": "iana",
     "extensions": ["sgml","sgm"]
   },
+  "text/slim": {
+    "extensions": ["slim","slm"]
+  },
   "text/stylus": {
     "extensions": ["stylus","styl"]
   },
@@ -6132,6 +6229,10 @@
     "source": "apache",
     "extensions": ["sfv"]
   },
+  "text/x-suse-ymp": {
+    "compressible": true,
+    "extensions": ["ymp"]
+  },
   "text/x-uuencode": {
     "source": "apache",
     "extensions": ["uu"]

http://git-wip-us.apache.org/repos/asf/cordova-browser/blob/55abeab9/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/package.json b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/package.json
index 573cfa5..5c03deb 100644
--- a/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/package.json
+++ b/node_modules/cordova-serve/node_modules/express/node_modules/accepts/node_modules/mime-types/node_modules/mime-db/package.json
@@ -1,7 +1,7 @@
 {
   "name": "mime-db",
   "description": "Media Type Database",
-  "version": "1.19.0",
+  "version": "1.22.0",
   "contributors": [
     {
       "name": "Douglas Christopher Wilson",
@@ -33,15 +33,15 @@
     "url": "git+https://github.com/jshttp/mime-db.git"
   },
   "devDependencies": {
-    "bluebird": "2.10.0",
+    "bluebird": "3.3.1",
     "co": "4.6.0",
     "cogent": "1.0.1",
-    "csv-parse": "1.0.0",
-    "gnode": "0.1.1",
-    "istanbul": "0.3.20",
+    "csv-parse": "1.0.1",
+    "gnode": "0.1.2",
+    "istanbul": "0.4.2",
     "mocha": "1.21.5",
-    "raw-body": "2.1.3",
-    "stream-to-array": "2"
+    "raw-body": "2.1.5",
+    "stream-to-array": "2.2.1"
   },
   "files": [
     "HISTORY.md",
@@ -61,14 +61,39 @@
     "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/",
     "update": "npm run fetch && npm run build"
   },
-  "readme": "# mime-db\n\n[![NPM Version][npm-version-image]][npm-url]\n[![NPM Downloads][npm-downloads-image]][npm-url]\n[![Node.js Version][node-image]][node-url]\n[![Build Status][travis-image]][travis-url]\n[![Coverage Status][coveralls-image]][coveralls-url]\n\nThis is a database of all mime types.\nIt consists of a single, public JSON file and does not include any logic,\nallowing it to remain as un-opinionated as possible with an API.\nIt aggregates data from the following sources:\n\n- http://www.iana.org/assignments/media-types/media-types.xhtml\n- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types\n- http://hg.nginx.org/nginx/raw-file/default/conf/mime.types\n\n## Installation\n\n```bash\nnpm install mime-db\n```\n\n### Database Download\n\nIf you're crazy enough to use this in the browser, you can just grab the\nJSON file using [RawGit](https://rawgit.com/). It is recommended to replace\n`master` with [a release tag](https://github.com/jshttp/mime-db/t
 ags) as the\nJSON format may change in the future.\n\n```\nhttps://cdn.rawgit.com/jshttp/mime-db/master/db.json\n```\n\n## Usage\n\n```js\nvar db = require('mime-db');\n\n// grab data on .js files\nvar data = db['application/javascript'];\n```\n\n## Data Structure\n\nThe JSON file is a map lookup for lowercased mime types.\nEach mime type has the following properties:\n\n- `.source` - where the mime type is defined.\n    If not set, it's probably a custom media type.\n    - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types)\n    - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml)\n    - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types)\n- `.extensions[]` - known extensions associated with this mime type.\n- `.compressible` - whether a file of this type is can be gzipped.\n- `.charset` - the default charset associated with this type, if 
 any.\n\nIf unknown, every property could be `undefined`.\n\n## Contributing\n\nTo edit the database, only make PRs against `src/custom.json` or\n`src/custom-suffix.json`.\n\nTo update the build, run `npm run build`.\n\n## Adding Custom Media Types\n\nThe best way to get new media types included in this library is to register\nthem with the IANA. The community registration procedure is outlined in\n[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types\nregistered with the IANA are automatically pulled into this library.\n\n[npm-version-image]: https://img.shields.io/npm/v/mime-db.svg\n[npm-downloads-image]: https://img.shields.io/npm/dm/mime-db.svg\n[npm-url]: https://npmjs.org/package/mime-db\n[travis-image]: https://img.shields.io/travis/jshttp/mime-db/master.svg\n[travis-url]: https://travis-ci.org/jshttp/mime-db\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-db/master.svg\n[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master\n
 [node-image]: https://img.shields.io/node/v/mime-db.svg\n[node-url]: http://nodejs.org/download/\n",
-  "readmeFilename": "README.md",
+  "gitHead": "ed88d32405582a5aaff6225d1210005d6be2623e",
   "bugs": {
     "url": "https://github.com/jshttp/mime-db/issues"
   },
   "homepage": "https://github.com/jshttp/mime-db#readme",
-  "_id": "mime-db@1.19.0",
-  "_shasum": "496a18198a7ce8244534e25bb102b74fb420fd56",
-  "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.19.0.tgz",
-  "_from": "mime-db@>=1.19.0 <1.20.0"
+  "_id": "mime-db@1.22.0",
+  "_shasum": "ab23a6372dc9d86d3dc9121bd0ebd38105a1904a",
+  "_from": "mime-db@>=1.22.0 <1.23.0",
+  "_npmVersion": "2.14.7",
+  "_nodeVersion": "4.2.3",
+  "_npmUser": {
+    "name": "dougwilson",
+    "email": "doug@somethingdoug.com"
+  },
+  "dist": {
+    "shasum": "ab23a6372dc9d86d3dc9121bd0ebd38105a1904a",
+    "tarball": "http://registry.npmjs.org/mime-db/-/mime-db-1.22.0.tgz"
+  },
+  "maintainers": [
+    {
+      "name": "dougwilson",
+      "email": "doug@somethingdoug.com"
+    },
+    {
+      "name": "jongleberry",
+      "email": "jonathanrichardong@gmail.com"
+    }
+  ],
+  "_npmOperationalInternal": {
+    "host": "packages-9-west.internal.npmjs.com",
+    "tmp": "tmp/mime-db-1.22.0.tgz_1455558813990_0.7830642955377698"
+  },
+  "directories": {},
+  "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.22.0.tgz",
+  "readme": "ERROR: No README data found!"
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org