You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by st...@apache.org on 2016/07/27 01:04:26 UTC

[07/12] ios commit: CB-11627 Updated checked-in node_modules

CB-11627 Updated checked-in node_modules


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

Branch: refs/heads/4.2.x
Commit: 92389439dc10cf30ced6341dd707bf6750377801
Parents: c17ed6f
Author: Steve Gill <st...@gmail.com>
Authored: Tue Jul 26 11:23:50 2016 -0700
Committer: Steve Gill <st...@gmail.com>
Committed: Tue Jul 26 16:25:02 2016 -0700

----------------------------------------------------------------------
 node_modules/balanced-match/README.md           |   4 +-
 node_modules/balanced-match/index.js            |   2 +-
 node_modules/balanced-match/package.json        |  24 +-
 node_modules/brace-expansion/index.js           |  10 +
 node_modules/brace-expansion/package.json       |  22 +-
 node_modules/cordova-common/README.md           |  14 +-
 node_modules/cordova-common/RELEASENOTES.md     |   3 +
 node_modules/cordova-common/package.json        |  38 +-
 .../src/ConfigChanges/ConfigChanges.js          | 108 ++-
 .../src/ConfigChanges/ConfigFile.js             |  20 +-
 .../src/ConfigChanges/munge-util.js             |   3 +
 node_modules/cordova-common/src/PlatformJson.js |   5 +-
 .../cordova-common/src/PluginInfo/PluginInfo.js |  18 +-
 .../cordova-common/src/PluginManager.js         |   2 +-
 .../cordova-common/src/util/xml-helpers.js      | 124 +++-
 node_modules/semver/.npmignore                  |   4 -
 node_modules/semver/.travis.yml                 |   5 -
 node_modules/semver/README.md                   |  39 +-
 node_modules/semver/package.json                |  27 +-
 node_modules/semver/range.bnf                   |   2 +-
 node_modules/semver/semver.js                   |  27 +-
 node_modules/semver/test/big-numbers.js         |  31 -
 node_modules/semver/test/clean.js               |  29 -
 node_modules/semver/test/gtr.js                 | 173 -----
 node_modules/semver/test/index.js               | 698 -------------------
 node_modules/semver/test/ltr.js                 | 181 -----
 node_modules/semver/test/major-minor-patch.js   |  72 --
 node_modules/xcode/lib/pbxFile.js               |   8 +-
 node_modules/xcode/package.json                 |  16 +-
 package.json                                    |   2 +-
 30 files changed, 380 insertions(+), 1331 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/balanced-match/README.md
----------------------------------------------------------------------
diff --git a/node_modules/balanced-match/README.md b/node_modules/balanced-match/README.md
index d6880b2..08e918c 100644
--- a/node_modules/balanced-match/README.md
+++ b/node_modules/balanced-match/README.md
@@ -47,7 +47,7 @@ object with those keys:
 
 If there's no match, `undefined` will be returned.
 
-If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']`.
+If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`.
 
 ### var r = balanced.range(a, b, str)
 
@@ -56,7 +56,7 @@ array with indexes: `[ <a index>, <b index> ]`.
 
 If there's no match, `undefined` will be returned.
 
-If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]`.
+If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`.
 
 ## Installation
 

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/balanced-match/index.js
----------------------------------------------------------------------
diff --git a/node_modules/balanced-match/index.js b/node_modules/balanced-match/index.js
index 4670f7f..e8d8587 100644
--- a/node_modules/balanced-match/index.js
+++ b/node_modules/balanced-match/index.js
@@ -30,7 +30,7 @@ function range(a, b, str) {
     begs = [];
     left = str.length;
 
-    while (i < str.length && i >= 0 && ! result) {
+    while (i >= 0 && !result) {
       if (i == ai) {
         begs.push(i);
         ai = str.indexOf(a, i + 1);

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/balanced-match/package.json
----------------------------------------------------------------------
diff --git a/node_modules/balanced-match/package.json b/node_modules/balanced-match/package.json
index a225e98..6a615c7 100644
--- a/node_modules/balanced-match/package.json
+++ b/node_modules/balanced-match/package.json
@@ -14,20 +14,20 @@
     ]
   ],
   "_from": "balanced-match@>=0.4.1 <0.5.0",
-  "_id": "balanced-match@0.4.1",
+  "_id": "balanced-match@0.4.2",
   "_inCache": true,
   "_installable": true,
   "_location": "/balanced-match",
-  "_nodeVersion": "6.0.0",
+  "_nodeVersion": "4.4.7",
   "_npmOperationalInternal": {
-    "host": "packages-12-west.internal.npmjs.com",
-    "tmp": "tmp/balanced-match-0.4.1.tgz_1462129663650_0.39764496590942144"
+    "host": "packages-16-east.internal.npmjs.com",
+    "tmp": "tmp/balanced-match-0.4.2.tgz_1468834991581_0.6590619895141572"
   },
   "_npmUser": {
     "name": "juliangruber",
     "email": "julian@juliangruber.com"
   },
-  "_npmVersion": "3.8.6",
+  "_npmVersion": "2.15.8",
   "_phantomChildren": {},
   "_requested": {
     "raw": "balanced-match@^0.4.1",
@@ -41,8 +41,8 @@
   "_requiredBy": [
     "/brace-expansion"
   ],
-  "_resolved": "http://registry.npmjs.org/balanced-match/-/balanced-match-0.4.1.tgz",
-  "_shasum": "19053e2e0748eadb379da6c09d455cf5e1039335",
+  "_resolved": "http://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+  "_shasum": "cb3f3e3c732dc0f01ee70b403f302e61d7709838",
   "_shrinkwrap": null,
   "_spec": "balanced-match@^0.4.1",
   "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/brace-expansion",
@@ -57,14 +57,14 @@
   "dependencies": {},
   "description": "Match balanced character pairs, like \"{\" and \"}\"",
   "devDependencies": {
-    "tape": "~4.5.0"
+    "tape": "^4.6.0"
   },
   "directories": {},
   "dist": {
-    "shasum": "19053e2e0748eadb379da6c09d455cf5e1039335",
-    "tarball": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.1.tgz"
+    "shasum": "cb3f3e3c732dc0f01ee70b403f302e61d7709838",
+    "tarball": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz"
   },
-  "gitHead": "7004b289baaaab6a832f4901735e29d37cc2a863",
+  "gitHead": "57c2ea29d89a2844ae3bdcc637c6e2cbb73725e2",
   "homepage": "https://github.com/juliangruber/balanced-match",
   "keywords": [
     "match",
@@ -107,5 +107,5 @@
       "android-browser/4.2..latest"
     ]
   },
-  "version": "0.4.1"
+  "version": "0.4.2"
 }

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/brace-expansion/index.js
----------------------------------------------------------------------
diff --git a/node_modules/brace-expansion/index.js b/node_modules/brace-expansion/index.js
index 932718f..955f27c 100644
--- a/node_modules/brace-expansion/index.js
+++ b/node_modules/brace-expansion/index.js
@@ -66,6 +66,16 @@ function expandTop(str) {
   if (!str)
     return [];
 
+  // I don't know why Bash 4.3 does this, but it does.
+  // Anything starting with {} will have the first two bytes preserved
+  // but *only* at the top level, so {},a}b will not expand to anything,
+  // but a{},b}c will be expanded to [a}c,abc].
+  // One could argue that this is a bug in Bash, but since the goal of
+  // this module is to match Bash's rules, we escape a leading {}
+  if (str.substr(0, 2) === '{}') {
+    str = '\\{\\}' + str.substr(2);
+  }
+
   return expand(escapeBraces(str), true).map(unescapeBraces);
 }
 

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/brace-expansion/package.json
----------------------------------------------------------------------
diff --git a/node_modules/brace-expansion/package.json b/node_modules/brace-expansion/package.json
index b871afd..cdda71c 100644
--- a/node_modules/brace-expansion/package.json
+++ b/node_modules/brace-expansion/package.json
@@ -14,20 +14,20 @@
     ]
   ],
   "_from": "brace-expansion@>=1.0.0 <2.0.0",
-  "_id": "brace-expansion@1.1.5",
+  "_id": "brace-expansion@1.1.6",
   "_inCache": true,
   "_installable": true,
   "_location": "/brace-expansion",
-  "_nodeVersion": "4.4.5",
+  "_nodeVersion": "4.4.7",
   "_npmOperationalInternal": {
     "host": "packages-16-east.internal.npmjs.com",
-    "tmp": "tmp/brace-expansion-1.1.5.tgz_1465989660138_0.34528115345165133"
+    "tmp": "tmp/brace-expansion-1.1.6.tgz_1469047715600_0.9362958471756428"
   },
   "_npmUser": {
     "name": "juliangruber",
     "email": "julian@juliangruber.com"
   },
-  "_npmVersion": "2.15.5",
+  "_npmVersion": "2.15.8",
   "_phantomChildren": {},
   "_requested": {
     "raw": "brace-expansion@^1.0.0",
@@ -41,8 +41,8 @@
   "_requiredBy": [
     "/minimatch"
   ],
-  "_resolved": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.5.tgz",
-  "_shasum": "f5b4ad574e2cb7ccc1eb83e6fe79b8ecadf7a526",
+  "_resolved": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz",
+  "_shasum": "7197d7eaa9b87e648390ea61fc66c84427420df9",
   "_shrinkwrap": null,
   "_spec": "brace-expansion@^1.0.0",
   "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/minimatch",
@@ -60,14 +60,14 @@
   },
   "description": "Brace expansion as known from sh/bash",
   "devDependencies": {
-    "tape": "4.5.1"
+    "tape": "^4.6.0"
   },
   "directories": {},
   "dist": {
-    "shasum": "f5b4ad574e2cb7ccc1eb83e6fe79b8ecadf7a526",
-    "tarball": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.5.tgz"
+    "shasum": "7197d7eaa9b87e648390ea61fc66c84427420df9",
+    "tarball": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz"
   },
-  "gitHead": "ff31acab078f1bb696ac4c55ca56ea24e6495fb6",
+  "gitHead": "791262fa06625e9c5594cde529a21d82086af5f2",
   "homepage": "https://github.com/juliangruber/brace-expansion",
   "keywords": [],
   "license": "MIT",
@@ -109,5 +109,5 @@
       "android-browser/4.2..latest"
     ]
   },
-  "version": "1.1.5"
+  "version": "1.1.6"
 }

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/cordova-common/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-common/README.md b/node_modules/cordova-common/README.md
index 6454481..c5dcfd5 100644
--- a/node_modules/cordova-common/README.md
+++ b/node_modules/cordova-common/README.md
@@ -28,7 +28,7 @@ Expoeses shared functionality used by [cordova-lib](https://github.com/apache/co
 Represents special instance of NodeJS EventEmitter which is intended to be used to post events to cordova-lib and cordova-cli
 
 Usage:
-```
+```js
 var events = require('cordova-common').events;
 events.emit('warn', 'Some warning message')
 ```
@@ -41,7 +41,7 @@ An error class used by Cordova to throw cordova-specific errors. The CordovaErro
 
 Usage:
 
-```
+```js
 var CordovaError = require('cordova-common').CordovaError;
 throw new CordovaError('Some error message', SOME_ERR_CODE);
 ```
@@ -53,7 +53,7 @@ See [CordovaError](src/CordovaError/CordovaError.js) for supported error codes.
 Exposes functionality to deal with cordova project `config.xml` files. For ConfigParser API reference check [ConfigParser Readme](src/ConfigParser/README.md).
 
 Usage:
-```
+```js
 var ConfigParser = require('cordova-common').ConfigParser;
 var appConfig = new ConfigParser('path/to/cordova-app/config.xml');
 console.log(appconfig.name() + ':' + appConfig.version());
@@ -64,7 +64,7 @@ console.log(appconfig.name() + ':' + appConfig.version());
 `PluginInfo` is a wrapper for cordova plugins' `plugin.xml` files. This class may be instantiated directly or via `PluginInfoProvider`. The difference is that `PluginInfoProvider` caches `PluginInfo` instances based on plugin source directory.
 
 Usage:
-```
+```js
 var PluginInfo: require('cordova-common').PluginInfo;
 var PluginInfoProvider: require('cordova-common').PluginInfoProvider;
 
@@ -80,7 +80,7 @@ console.log('The plugin ' + plugin1.id + ' has version ' + plugin1.version)
 Utility module for dealing with sequential tasks. Provides a set of tasks that are needed to be done and reverts all tasks that are already completed if one of those tasks fail to complete. Used internally by cordova-lib and platform's plugin installation routines.
 
 Usage:
-```
+```js
 var ActionStack = require('cordova-common').ActionStack;
 var stack = new ActionStack()
 
@@ -104,7 +104,7 @@ stack.process()
 Module for spawning child processes with some advanced logic.
 
 Usage:
-```
+```js
 var superspawn = require('cordova-common').superspawn;
 superspawn.spawn('adb', ['devices'])
 .progress(function(data){
@@ -121,7 +121,7 @@ superspawn.spawn('adb', ['devices'])
 A set of utility methods for dealing with xml files.
 
 Usage:
-```
+```js
 var xml = require('cordova-common').xmlHelpers;
 
 var xmlDoc1 = xml.parseElementtreeSync('some/xml/file');

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/cordova-common/RELEASENOTES.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-common/RELEASENOTES.md b/node_modules/cordova-common/RELEASENOTES.md
index 7a99cc9..71ad1ea 100644
--- a/node_modules/cordova-common/RELEASENOTES.md
+++ b/node_modules/cordova-common/RELEASENOTES.md
@@ -20,6 +20,9 @@
 -->
 # Cordova-common Release Notes
 
+### 1.4.0 (Jul 12, 2016)
+* [CB-11023](https://issues.apache.org/jira/browse/CB-11023) Add edit-config functionality
+
 ### 1.3.0 (May 12, 2016)
 * [CB-11259](https://issues.apache.org/jira/browse/CB-11259): Improving prepare and build logging
 * [CB-11194](https://issues.apache.org/jira/browse/CB-11194) Improve cordova load time

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/cordova-common/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-common/package.json b/node_modules/cordova-common/package.json
index 3992b21..d332d92 100644
--- a/node_modules/cordova-common/package.json
+++ b/node_modules/cordova-common/package.json
@@ -2,49 +2,49 @@
   "_args": [
     [
       {
-        "raw": "cordova-common@^1.3.0",
+        "raw": "cordova-common@^1.4.0",
         "scope": null,
         "escapedName": "cordova-common",
         "name": "cordova-common",
-        "rawSpec": "^1.3.0",
-        "spec": ">=1.3.0 <2.0.0",
+        "rawSpec": "^1.4.0",
+        "spec": ">=1.4.0 <2.0.0",
         "type": "range"
       },
       "/Users/steveng/repo/cordova/cordova-ios"
     ]
   ],
-  "_from": "cordova-common@>=1.3.0 <2.0.0",
-  "_id": "cordova-common@1.3.0",
+  "_from": "cordova-common@>=1.4.0 <2.0.0",
+  "_id": "cordova-common@1.4.0",
   "_inCache": true,
   "_installable": true,
   "_location": "/cordova-common",
-  "_nodeVersion": "5.4.1",
+  "_nodeVersion": "6.3.0",
   "_npmOperationalInternal": {
     "host": "packages-16-east.internal.npmjs.com",
-    "tmp": "tmp/cordova-common-1.3.0.tgz_1464130094288_0.48495062021538615"
+    "tmp": "tmp/cordova-common-1.4.0.tgz_1469092638680_0.9961137105710804"
   },
   "_npmUser": {
-    "name": "stevegill",
-    "email": "stevengill97@gmail.com"
+    "name": "kotikov.vladimir",
+    "email": "kotikov.vladimir@gmail.com"
   },
-  "_npmVersion": "3.9.0",
+  "_npmVersion": "3.10.5",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "cordova-common@^1.3.0",
+    "raw": "cordova-common@^1.4.0",
     "scope": null,
     "escapedName": "cordova-common",
     "name": "cordova-common",
-    "rawSpec": "^1.3.0",
-    "spec": ">=1.3.0 <2.0.0",
+    "rawSpec": "^1.4.0",
+    "spec": ">=1.4.0 <2.0.0",
     "type": "range"
   },
   "_requiredBy": [
     "/"
   ],
-  "_resolved": "file:cordova-dist/tools/cordova-common-1.3.0.tgz",
-  "_shasum": "f75161f6aa7cef5486fd5d69a3b0a1f628334491",
+  "_resolved": "http://registry.npmjs.org/cordova-common/-/cordova-common-1.4.0.tgz",
+  "_shasum": "b3ba73595caa34fe8250ac11f20a4ed44e7c84e4",
   "_shrinkwrap": null,
-  "_spec": "cordova-common@^1.3.0",
+  "_spec": "cordova-common@^1.4.0",
   "_where": "/Users/steveng/repo/cordova/cordova-ios",
   "author": {
     "name": "Apache Software Foundation"
@@ -79,8 +79,8 @@
   },
   "directories": {},
   "dist": {
-    "shasum": "f75161f6aa7cef5486fd5d69a3b0a1f628334491",
-    "tarball": "https://registry.npmjs.org/cordova-common/-/cordova-common-1.3.0.tgz"
+    "shasum": "b3ba73595caa34fe8250ac11f20a4ed44e7c84e4",
+    "tarball": "https://registry.npmjs.org/cordova-common/-/cordova-common-1.4.0.tgz"
   },
   "engineStrict": true,
   "engines": {
@@ -127,5 +127,5 @@
     "jshint": "node node_modules/jshint/bin/jshint src && node node_modules/jshint/bin/jshint spec",
     "test": "npm run jshint && npm run jasmine"
   },
-  "version": "1.3.0"
+  "version": "1.4.0"
 }

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js b/node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js
index a914fc8..a395c6d 100644
--- a/node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js
+++ b/node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js
@@ -36,9 +36,11 @@ var fs   = require('fs'),
     et   = require('elementtree'),
     semver = require('semver'),
     events = require('../events'),
-    ConfigKeeper = require('./ConfigKeeper');
+    ConfigKeeper = require('./ConfigKeeper'),
+    CordovaLogger = require('../CordovaLogger');
 
 var mungeutil = require('./munge-util');
+var xml_helpers = require('../util/xml-helpers');
 
 exports.PlatformMunger = PlatformMunger;
 
@@ -95,9 +97,10 @@ function remove_plugin_changes(pluginInfo, is_top_level) {
     var plugin_vars = is_top_level ?
         platform_config.installed_plugins[pluginInfo.id] :
         platform_config.dependent_plugins[pluginInfo.id];
+    var edit_config_changes = pluginInfo.getEditConfigs(self.platform);
 
     // get config munge, aka how did this plugin change various config files
-    var config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars);
+    var config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars, edit_config_changes);
     // global munge looks at all plugins' changes to config files
     var global_munge = platform_config.config_munge;
     var munge = mungeutil.decrement_munge(global_munge, config_munge);
@@ -125,12 +128,40 @@ function remove_plugin_changes(pluginInfo, is_top_level) {
 
 
 PlatformMunger.prototype.add_plugin_changes = add_plugin_changes;
-function add_plugin_changes(pluginInfo, plugin_vars, is_top_level, should_increment) {
+function add_plugin_changes(pluginInfo, plugin_vars, is_top_level, should_increment, plugin_force) {
     var self = this;
     var platform_config = self.platformJson.root;
+    var edit_config_changes = pluginInfo.getEditConfigs(self.platform);
+    var config_munge;
 
-    // get config munge, aka how should this plugin change various config files
-    var config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars);
+    if (!edit_config_changes || edit_config_changes.length === 0) {
+        // get config munge, aka how should this plugin change various config files
+        config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars);
+    }
+    else {
+        var isConflictingInfo = is_conflicting(edit_config_changes, platform_config.config_munge, self, plugin_force);
+        if (plugin_force) {
+            CordovaLogger.get().log(CordovaLogger.WARN, '--force is used. edit-config will overwrite conflicts if any. Conflicting plugins may not work as expected.');
+
+            // remove conflicting munges
+            var conflict_munge = mungeutil.decrement_munge(platform_config.config_munge, isConflictingInfo.conflictingMunge);
+            for (var conflict_file in conflict_munge.files) {
+                self.apply_file_munge(conflict_file, conflict_munge.files[conflict_file], /* remove = */ true);
+            }
+
+            // force add new munges
+            config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars, edit_config_changes);
+        }
+        else if(isConflictingInfo.conflictFound) {
+            throw new Error('There was a conflict trying to modify attributes with <edit-config> in plugin ' + pluginInfo.id +
+            '. The conflicting plugin, ' + isConflictingInfo.conflictingPlugin + ', already modified the same attributes. The conflict must be resolved before ' +
+            pluginInfo.id + ' can be added. You may use --force to add the plugin and overwrite the conflicting attributes.');
+        }
+        else {
+            // no conflicts, will handle edit-config
+            config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars, edit_config_changes);
+        }
+    }
     // global munge looks at all plugins' changes to config files
 
     // TODO: The should_increment param is only used by cordova-cli and is going away soon.
@@ -186,13 +217,17 @@ function reapply_global_munge () {
 // generate_plugin_config_munge
 // Generate the munge object from plugin.xml + vars
 PlatformMunger.prototype.generate_plugin_config_munge = generate_plugin_config_munge;
-function generate_plugin_config_munge(pluginInfo, vars) {
+function generate_plugin_config_munge(pluginInfo, vars, edit_config_changes) {
     var self = this;
 
     vars = vars || {};
     var munge = { files: {} };
     var changes = pluginInfo.getConfigFiles(self.platform);
 
+    if(edit_config_changes) {
+        Array.prototype.push.apply(changes, edit_config_changes);
+    }
+
     // Demux 'package.appxmanifest' into relevant platform-specific appx manifests.
     // Only spend the cycles if there are version-specific plugin settings
     if (self.platform === 'windows' &&
@@ -291,12 +326,69 @@ function generate_plugin_config_munge(pluginInfo, vars) {
                 });
             }
             // 2. add into munge
-            mungeutil.deep_add(munge, change.target, change.parent, { xml: stringified, count: 1, after: change.after });
+            if (change.mode) {
+                mungeutil.deep_add(munge, change.file, change.target, { xml: stringified, count: 1, mode: change.mode, plugin: pluginInfo.id });
+            }
+            else {
+                mungeutil.deep_add(munge, change.target, change.parent, { xml: stringified, count: 1, after: change.after });
+            }
         });
     });
     return munge;
 }
 
+function is_conflicting(editchanges, config_munge, self, force) {
+    var files = config_munge.files;
+    var conflictFound = false;
+    var conflictingMunge = { files: {} };
+    var conflictingParent;
+    var conflictingPlugin;
+
+    editchanges.forEach(function(editchange) {
+        if (files[editchange.file]) {
+            var parents = files[editchange.file].parents;
+            var target = parents[editchange.target];
+
+            // Check if the edit target will resolve to an existing target
+            if (!target || target.length === 0) {
+                var file_xml = self.config_keeper.get(self.project_dir, self.platform, editchange.file).data;
+                var resolveEditTarget = xml_helpers.resolveParent(file_xml, editchange.target);
+                var resolveTarget;
+
+                if (resolveEditTarget) {
+                    for (var parent in parents) {
+                        resolveTarget = xml_helpers.resolveParent(file_xml, parent);
+                        if (resolveEditTarget === resolveTarget) {
+                            conflictingParent = parent;
+                            target = parents[parent];
+                            break;
+                        }
+                    }
+                }
+            }
+            else {
+                conflictingParent = editchange.target;
+            }
+
+            if (target.length !== 0) {
+                // conflict has been found, exit and throw an error
+                conflictFound = true;
+                if (!force) {
+                    // since there has been modifications to the attributes at this target,
+                    // the current plugin should not modify the attributes
+                    conflictingPlugin = target[0].plugin;
+                    return;
+                }
+
+                // need to find all conflicts when --force is used, track conflicting munges
+                mungeutil.deep_add(conflictingMunge, editchange.file, conflictingParent, target[0]);
+            }
+        }
+    });
+
+    return {conflictFound: conflictFound, conflictingPlugin: conflictingPlugin, conflictingMunge: conflictingMunge};
+}
+
 // Go over the prepare queue and apply the config munges for each plugin
 // that has been (un)installed.
 PlatformMunger.prototype.process = PlatformMunger_process;
@@ -313,7 +405,7 @@ function PlatformMunger_process(plugins_dir) {
     // Now handle installation
     platform_config.prepare_queue.installed.forEach(function(u) {
         var pluginInfo = self.pluginInfoProvider.get(path.join(plugins_dir, u.plugin));
-        self.add_plugin_changes(pluginInfo, u.vars, u.topLevel, true);
+        self.add_plugin_changes(pluginInfo, u.vars, u.topLevel, true, u.force);
     });
 
     // Empty out installed/ uninstalled queues.

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js b/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js
index 9c540b9..179d54d 100644
--- a/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js
+++ b/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js
@@ -103,7 +103,16 @@ ConfigFile.prototype.graft_child = function ConfigFile_graft_child(selector, xml
     var result;
     if (self.type === 'xml') {
         var xml_to_graft = [modules.et.XML(xml_child.xml)];
-        result = modules.xml_helpers.graftXML(self.data, xml_to_graft, selector, xml_child.after);
+        switch (xml_child.mode) {
+            case 'merge':
+                result = modules.xml_helpers.graftXMLMerge(self.data, xml_to_graft, selector, xml_child);
+                break;
+            case 'overwrite':
+                result = modules.xml_helpers.graftXMLOverwrite(self.data, xml_to_graft, selector, xml_child);
+                break;
+            default:
+                result = modules.xml_helpers.graftXML(self.data, xml_to_graft, selector, xml_child.after);
+        }
         if ( !result) {
             throw new Error('Unable to graft xml at selector "' + selector + '" from "' + filepath + '" during config install');
         }
@@ -123,7 +132,14 @@ ConfigFile.prototype.prune_child = function ConfigFile_prune_child(selector, xml
     var result;
     if (self.type === 'xml') {
         var xml_to_graft = [modules.et.XML(xml_child.xml)];
-        result = modules.xml_helpers.pruneXML(self.data, xml_to_graft, selector);
+        switch (xml_child.mode) {
+            case 'merge':
+            case 'overwrite':
+                result = modules.xml_helpers.pruneXMLRestore(self.data, selector, xml_child);
+                break;
+            default:
+                result = modules.xml_helpers.pruneXML(self.data, xml_to_graft, selector);
+        }
     } else {
         // plist file
         result = modules.plist_helpers.prunePLIST(self.data, xml_child.xml, selector);

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/cordova-common/src/ConfigChanges/munge-util.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-common/src/ConfigChanges/munge-util.js b/node_modules/cordova-common/src/ConfigChanges/munge-util.js
index 307b3c1..0149bab 100644
--- a/node_modules/cordova-common/src/ConfigChanges/munge-util.js
+++ b/node_modules/cordova-common/src/ConfigChanges/munge-util.js
@@ -52,6 +52,9 @@ exports.deep_remove = function deep_remove(obj, keys /* or key1, key2 .... */ )
             return element.xml == k.xml;
         });
         if (found) {
+            if (parentArray[index].oldAttrib) {
+                k.oldAttrib = _.extend({}, parentArray[index].oldAttrib);
+            }
             found.count -= k.count;
             if (found.count > 0) {
                 return false;

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/cordova-common/src/PlatformJson.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-common/src/PlatformJson.js b/node_modules/cordova-common/src/PlatformJson.js
index 4e2b287..ab94b5f 100644
--- a/node_modules/cordova-common/src/PlatformJson.js
+++ b/node_modules/cordova-common/src/PlatformJson.js
@@ -162,8 +162,8 @@ PlatformJson.prototype.removePluginMetadata = function (pluginInfo) {
     return this;
 };
 
-PlatformJson.prototype.addInstalledPluginToPrepareQueue = function(pluginDirName, vars, is_top_level) {
-    this.root.prepare_queue.installed.push({'plugin':pluginDirName, 'vars':vars, 'topLevel':is_top_level});
+PlatformJson.prototype.addInstalledPluginToPrepareQueue = function(pluginDirName, vars, is_top_level, force) {
+    this.root.prepare_queue.installed.push({'plugin':pluginDirName, 'vars':vars, 'topLevel':is_top_level, 'force':force});
 };
 
 PlatformJson.prototype.addUninstalledPluginToPrepareQueue = function(pluginId, is_top_level) {
@@ -276,4 +276,3 @@ function ModuleMetadata (pluginId, jsModule) {
 }
 
 module.exports = PlatformJson;
-

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/cordova-common/src/PluginInfo/PluginInfo.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-common/src/PluginInfo/PluginInfo.js b/node_modules/cordova-common/src/PluginInfo/PluginInfo.js
index 77199ec..bf1f75b 100644
--- a/node_modules/cordova-common/src/PluginInfo/PluginInfo.js
+++ b/node_modules/cordova-common/src/PluginInfo/PluginInfo.js
@@ -146,6 +146,22 @@ function PluginInfo(dirname) {
         return configFile;
     }
 
+    self.getEditConfigs = getEditConfigs;
+    function getEditConfigs(platform) {
+        var editConfigs = _getTags(self._et, 'edit-config', platform, _parseEditConfigs);
+        return editConfigs;
+    }
+
+    function _parseEditConfigs(tag) {
+        var editConfig =
+        { file : tag.attrib['file']
+        , target : tag.attrib['target']
+        , mode : tag.attrib['mode']
+        , xmls : tag.getchildren()
+        };
+        return editConfig;
+    }
+
     // <info> tags, both global and within a <platform>
     // TODO (kamrik): Do we ever use <info> under <platform>? Example wanted.
     self.getInfo = getInfo;
@@ -382,7 +398,7 @@ function _getTags(pelem, tag, platform, transform) {
     return tags;
 }
 
-// Same as _getTags() but only looks inside a platfrom section.
+// Same as _getTags() but only looks inside a platform section.
 function _getTagsInPlatform(pelem, tag, platform, transform) {
     var platformTag = pelem.find('./platform[@name="' + platform + '"]');
     var tags = platformTag ? platformTag.findall(tag) : [];

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/cordova-common/src/PluginManager.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-common/src/PluginManager.js b/node_modules/cordova-common/src/PluginManager.js
index c3a29fc..e8968f1 100644
--- a/node_modules/cordova-common/src/PluginManager.js
+++ b/node_modules/cordova-common/src/PluginManager.js
@@ -123,7 +123,7 @@ PluginManager.prototype.doOperation = function (operation, plugin, options) {
         if (operation === PluginManager.INSTALL) {
             // Ignore passed `is_top_level` option since platform itself doesn't know
             // anything about managing dependencies - it's responsibility of caller.
-            self.munger.add_plugin_changes(plugin, options.variables, /*is_top_level=*/true, /*should_increment=*/true);
+            self.munger.add_plugin_changes(plugin, options.variables, /*is_top_level=*/true, /*should_increment=*/true, options.force);
             self.munger.platformJson.addPluginMetadata(plugin);
         } else {
             self.munger.remove_plugin_changes(plugin, /*is_top_level=*/true);

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/cordova-common/src/util/xml-helpers.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-common/src/util/xml-helpers.js b/node_modules/cordova-common/src/util/xml-helpers.js
index 6366af9..f16eaaf 100644
--- a/node_modules/cordova-common/src/util/xml-helpers.js
+++ b/node_modules/cordova-common/src/util/xml-helpers.js
@@ -29,6 +29,9 @@ var fs = require('fs')
   , et = require('elementtree')
   ;
 
+  var ROOT = /^\/([^\/]*)/,
+      ABSOLUTE = /^\/([^\/]*)\/(.*)/;
+
 module.exports = {
     // compare two et.XML nodes, see if they match
     // compares tagName, text, attributes and children (recursively)
@@ -68,7 +71,7 @@ module.exports = {
 
     // adds node to doc at selector, creating parent if it doesn't exist
     graftXML: function(doc, nodes, selector, after) {
-        var parent = resolveParent(doc, selector);
+        var parent = module.exports.resolveParent(doc, selector);
         if (!parent) {
             //Try to create the parent recursively if necessary
             try {
@@ -79,7 +82,7 @@ module.exports = {
             } catch (e) {
                 return false;
             }
-            parent = resolveParent(doc, selector);
+            parent = module.exports.resolveParent(doc, selector);
             if (!parent) return false;
         }
 
@@ -97,9 +100,54 @@ module.exports = {
         return true;
     },
 
+    // adds new attributes to doc at selector
+    // Will only merge if attribute has not been modified already or --force is used
+    graftXMLMerge: function(doc, nodes, selector, xml) {
+        var target = module.exports.resolveParent(doc, selector);
+        if (!target) return false;
+
+        // saves the attributes of the original xml before making changes
+        xml.oldAttrib = _.extend({}, target.attrib);
+
+        nodes.forEach(function (node) {
+            var attributes = node.attrib;
+            for (var attribute in attributes) {
+                target.attrib[attribute] = node.attrib[attribute];
+            }
+        });
+
+        return true;
+    },
+
+    // overwrite all attributes to doc at selector with new attributes
+    // Will only overwrite if attribute has not been modified already or --force is used
+    graftXMLOverwrite: function(doc, nodes, selector, xml) {
+        var target = module.exports.resolveParent(doc, selector);
+        if (!target) return false;
+
+        // saves the attributes of the original xml before making changes
+        xml.oldAttrib = _.extend({}, target.attrib);
+
+        // remove old attributes from target
+        var targetAttributes = target.attrib;
+        for (var targetAttribute in targetAttributes) {
+            delete targetAttributes[targetAttribute];
+        }
+
+        // add new attributes to target
+        nodes.forEach(function (node) {
+            var attributes = node.attrib;
+            for (var attribute in attributes) {
+                target.attrib[attribute] = node.attrib[attribute];
+            }
+        });
+
+        return true;
+    },
+
     // removes node from doc at selector
     pruneXML: function(doc, nodes, selector) {
-        var parent = resolveParent(doc, selector);
+        var parent = module.exports.resolveParent(doc, selector);
         if (!parent) return false;
 
         nodes.forEach(function (node) {
@@ -114,6 +162,19 @@ module.exports = {
         return true;
     },
 
+    // restores attributes from doc at selector
+    pruneXMLRestore: function(doc, selector, xml) {
+        var target = module.exports.resolveParent(doc, selector);
+        if (!target) return false;
+
+        if (xml.oldAttrib) {
+            target.attrib = _.extend({}, xml.oldAttrib);
+        }
+
+        return true;
+    },
+
+
     parseElementtreeSync: function (filename) {
         var contents = fs.readFileSync(filename, 'utf-8');
         if(contents) {
@@ -121,6 +182,30 @@ module.exports = {
             contents = contents.substring(contents.indexOf('<'));
         }
         return new et.ElementTree(et.XML(contents));
+    },
+
+    resolveParent: function (doc, selector) {
+        var parent, tagName, subSelector;
+
+        // handle absolute selector (which elementtree doesn't like)
+        if (ROOT.test(selector)) {
+            tagName = selector.match(ROOT)[1];
+            // test for wildcard "any-tag" root selector
+            if (tagName == '*' || tagName === doc._root.tag) {
+                parent = doc._root;
+
+                // could be an absolute path, but not selecting the root
+                if (ABSOLUTE.test(selector)) {
+                    subSelector = selector.match(ABSOLUTE)[2];
+                    parent = parent.find(subSelector);
+                }
+            } else {
+                return false;
+            }
+        } else {
+            parent = doc.find(selector);
+        }
+        return parent;
     }
 };
 
@@ -152,33 +237,6 @@ function uniqueChild(node, parent) {
     }
 }
 
-var ROOT = /^\/([^\/]*)/,
-    ABSOLUTE = /^\/([^\/]*)\/(.*)/;
-
-function resolveParent(doc, selector) {
-    var parent, tagName, subSelector;
-
-    // handle absolute selector (which elementtree doesn't like)
-    if (ROOT.test(selector)) {
-        tagName = selector.match(ROOT)[1];
-        // test for wildcard "any-tag" root selector
-        if (tagName == '*' || tagName === doc._root.tag) {
-            parent = doc._root;
-
-            // could be an absolute path, but not selecting the root
-            if (ABSOLUTE.test(selector)) {
-                subSelector = selector.match(ABSOLUTE)[2];
-                parent = parent.find(subSelector);
-            }
-        } else {
-            return false;
-        }
-    } else {
-        parent = doc.find(selector);
-    }
-    return parent;
-}
-
 // Find the index at which to insert an entry. After is a ;-separated priority list
 // of tags after which the insertion should be made. E.g. If we need to
 // insert an element C, and the rule is that the order of children has to be
@@ -257,19 +315,19 @@ function mergeXml(src, dest, platform, clobber) {
             dest.append(destChild);
         }
     }
-    
+
     function removeDuplicatePreferences(xml) {
         // reduce preference tags to a hashtable to remove dupes
         var prefHash = xml.findall('preference[@name][@value]').reduce(function(previousValue, currentValue) {
             previousValue[ currentValue.attrib.name ] = currentValue.attrib.value;
             return previousValue;
         }, {});
-        
+
         // remove all preferences
         xml.findall('preference[@name][@value]').forEach(function(pref) {
             xml.remove(pref);
         });
-        
+
         // write new preferences
         Object.keys(prefHash).forEach(function(key, index) {
             var element = et.SubElement(xml, 'preference');

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/semver/.npmignore
----------------------------------------------------------------------
diff --git a/node_modules/semver/.npmignore b/node_modules/semver/.npmignore
deleted file mode 100644
index 534108e..0000000
--- a/node_modules/semver/.npmignore
+++ /dev/null
@@ -1,4 +0,0 @@
-node_modules/
-coverage/
-.nyc_output/
-nyc_output/

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

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/semver/README.md
----------------------------------------------------------------------
diff --git a/node_modules/semver/README.md b/node_modules/semver/README.md
index 0b14a7e..cbd9565 100644
--- a/node_modules/semver/README.md
+++ b/node_modules/semver/README.md
@@ -4,6 +4,8 @@ semver(1) -- The semantic versioner for npm
 ## Usage
 
     $ npm install semver
+    $ node
+    var semver = require('semver')
 
     semver.valid('1.2.3') // '1.2.3'
     semver.valid('a.b.c') // null
@@ -16,18 +18,35 @@ As a command-line utility:
 
     $ semver -h
 
-    Usage: semver <version> [<version> [...]] [-r <range> | -i <inc> | --preid <identifier> | -l | -rv]
-    Test if version(s) satisfy the supplied range(s), and sort them.
+    SemVer 5.1.0
 
-    Multiple versions or ranges may be supplied, unless increment
-    option is specified.  In that case, only a single version may
-    be used, and it is incremented by the specified level
+    A JavaScript implementation of the http://semver.org/ specification
+    Copyright Isaac Z. Schlueter
+
+    Usage: semver [options] <version> [<version> [...]]
+    Prints valid versions sorted by SemVer precedence
+
+    Options:
+    -r --range <range>
+            Print versions that match the specified range.
+
+    -i --increment [<level>]
+            Increment a version by the specified level.  Level can
+            be one of: major, minor, patch, premajor, preminor,
+            prepatch, or prerelease.  Default level is 'patch'.
+            Only one version may be specified.
+
+    --preid <identifier>
+            Identifier to be used to prefix premajor, preminor,
+            prepatch or prerelease version increments.
+
+    -l --loose
+            Interpret versions and ranges loosely
 
     Program exits successfully if any valid version satisfies
     all supplied ranges, and prints all satisfying versions.
 
-    If no versions are valid, or ranges are not satisfied,
-    then exits failure.
+    If no satisfying versions are found, then exits failure.
 
     Versions are printed in ascending order, so supplying
     multiple versions to the utility will just sort them.
@@ -242,7 +261,7 @@ simple     ::= primitive | partial | tilde | caret
 primitive  ::= ( '<' | '>' | '>=' | '<=' | '=' | ) partial
 partial    ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
 xr         ::= 'x' | 'X' | '*' | nr
-nr         ::= '0' | ['1'-'9']['0'-'9']+
+nr         ::= '0' | ['1'-'9'] ( ['0'-'9'] ) *
 tilde      ::= '~' partial
 caret      ::= '^' partial
 qualifier  ::= ( '-' pre )? ( '+' build )?
@@ -272,6 +291,8 @@ strings that they parse.
     same as `prepatch`. It increments the patch version, then makes a
     prerelease. If the input version is already a prerelease it simply
     increments it.
+* `prerelease(v)`: Returns an array of prerelease components, or null
+  if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]`
 * `major(v)`: Return the major version number.
 * `minor(v)`: Return the minor version number.
 * `patch(v)`: Return the patch version number.
@@ -306,6 +327,8 @@ strings that they parse.
   range.
 * `maxSatisfying(versions, range)`: Return the highest version in the list
   that satisfies the range, or `null` if none of them do.
+* `minSatisfying(versions, range)`: Return the lowest version in the list
+  that satisfies the range, or `null` if none of them do.
 * `gtr(version, range)`: Return `true` if version is greater than all the
   versions possible in the range.
 * `ltr(version, range)`: Return `true` if version is less than all the

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/semver/package.json
----------------------------------------------------------------------
diff --git a/node_modules/semver/package.json b/node_modules/semver/package.json
index deaccad..c2a321a 100644
--- a/node_modules/semver/package.json
+++ b/node_modules/semver/package.json
@@ -14,16 +14,20 @@
     ]
   ],
   "_from": "semver@>=5.0.1 <6.0.0",
-  "_id": "semver@5.1.0",
+  "_id": "semver@5.3.0",
   "_inCache": true,
   "_installable": true,
   "_location": "/semver",
-  "_nodeVersion": "4.0.0",
+  "_nodeVersion": "4.4.4",
+  "_npmOperationalInternal": {
+    "host": "packages-12-west.internal.npmjs.com",
+    "tmp": "tmp/semver-5.3.0.tgz_1468515166602_0.9155273644719273"
+  },
   "_npmUser": {
     "name": "isaacs",
     "email": "i@izs.me"
   },
-  "_npmVersion": "3.3.2",
+  "_npmVersion": "3.10.6",
   "_phantomChildren": {},
   "_requested": {
     "raw": "semver@^5.0.1",
@@ -37,8 +41,8 @@
   "_requiredBy": [
     "/cordova-common"
   ],
-  "_resolved": "http://registry.npmjs.org/semver/-/semver-5.1.0.tgz",
-  "_shasum": "85f2cf8550465c4df000cf7d86f6b054106ab9e5",
+  "_resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+  "_shasum": "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f",
   "_shrinkwrap": null,
   "_spec": "semver@^5.0.1",
   "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common",
@@ -55,10 +59,15 @@
   },
   "directories": {},
   "dist": {
-    "shasum": "85f2cf8550465c4df000cf7d86f6b054106ab9e5",
-    "tarball": "https://registry.npmjs.org/semver/-/semver-5.1.0.tgz"
+    "shasum": "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f",
+    "tarball": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz"
   },
-  "gitHead": "8e33a30e62e40e4983d1c5f55e794331b861aadc",
+  "files": [
+    "bin",
+    "range.bnf",
+    "semver.js"
+  ],
+  "gitHead": "d21444a0658224b152ce54965d02dbe0856afb84",
   "homepage": "https://github.com/npm/node-semver#readme",
   "license": "ISC",
   "main": "semver.js",
@@ -82,5 +91,5 @@
   "scripts": {
     "test": "tap test/*.js"
   },
-  "version": "5.1.0"
+  "version": "5.3.0"
 }

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/semver/range.bnf
----------------------------------------------------------------------
diff --git a/node_modules/semver/range.bnf b/node_modules/semver/range.bnf
index 000df92..25ebd5c 100644
--- a/node_modules/semver/range.bnf
+++ b/node_modules/semver/range.bnf
@@ -6,7 +6,7 @@ simple     ::= primitive | partial | tilde | caret
 primitive  ::= ( '<' | '>' | '>=' | '<=' | '=' | ) partial
 partial    ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
 xr         ::= 'x' | 'X' | '*' | nr
-nr         ::= '0' | ['1'-'9']['0'-'9']+
+nr         ::= '0' | ['1'-'9'] ( ['0'-'9'] ) *
 tilde      ::= '~' partial
 caret      ::= '^' partial
 qualifier  ::= ( '-' pre )? ( '+' build )?

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/semver/semver.js
----------------------------------------------------------------------
diff --git a/node_modules/semver/semver.js b/node_modules/semver/semver.js
index 71795f6..5f1a3c5 100644
--- a/node_modules/semver/semver.js
+++ b/node_modules/semver/semver.js
@@ -314,9 +314,9 @@ function SemVer(version, loose) {
   else
     this.prerelease = m[4].split('.').map(function(id) {
       if (/^[0-9]+$/.test(id)) {
-        var num = +id
+        var num = +id;
         if (num >= 0 && num < MAX_SAFE_INTEGER)
-          return num
+          return num;
       }
       return id;
     });
@@ -836,7 +836,7 @@ function replaceTilde(comp, loose) {
     else if (isX(m))
       ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
     else if (isX(p))
-      // ~1.2 == >=1.2.0- <1.3.0-
+      // ~1.2 == >=1.2.0 <1.3.0
       ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
     else if (pr) {
       debug('replaceTilde pr', pr);
@@ -966,11 +966,11 @@ function replaceXRange(comp, loose) {
       } else if (gtlt === '<=') {
         // <=0.7.x is actually <0.8.0, since any 0.7.x should
         // pass.  Similarly, <=7.x is actually <8.0.0, etc.
-        gtlt = '<'
+        gtlt = '<';
         if (xm)
-          M = +M + 1
+          M = +M + 1;
         else
-          m = +m + 1
+          m = +m + 1;
       }
 
       ret = gtlt + M + '.' + m + '.' + p;
@@ -1094,6 +1094,15 @@ function maxSatisfying(versions, range, loose) {
   })[0] || null;
 }
 
+exports.minSatisfying = minSatisfying;
+function minSatisfying(versions, range, loose) {
+  return versions.filter(function(version) {
+    return satisfies(version, range, loose);
+  }).sort(function(a, b) {
+    return compare(a, b, loose);
+  })[0] || null;
+}
+
 exports.validRange = validRange;
 function validRange(range, loose) {
   try {
@@ -1186,3 +1195,9 @@ function outside(version, range, hilo, loose) {
   }
   return true;
 }
+
+exports.prerelease = prerelease;
+function prerelease(version, loose) {
+  var parsed = parse(version, loose);
+  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null;
+}

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/semver/test/big-numbers.js
----------------------------------------------------------------------
diff --git a/node_modules/semver/test/big-numbers.js b/node_modules/semver/test/big-numbers.js
deleted file mode 100644
index c051864..0000000
--- a/node_modules/semver/test/big-numbers.js
+++ /dev/null
@@ -1,31 +0,0 @@
-var test = require('tap').test
-var semver = require('../')
-
-test('long version is too long', function (t) {
-  var v = '1.2.' + new Array(256).join('1')
-  t.throws(function () {
-    new semver.SemVer(v)
-  })
-  t.equal(semver.valid(v, false), null)
-  t.equal(semver.valid(v, true), null)
-  t.equal(semver.inc(v, 'patch'), null)
-  t.end()
-})
-
-test('big number is like too long version', function (t) {
-  var v = '1.2.' + new Array(100).join('1')
-  t.throws(function () {
-    new semver.SemVer(v)
-  })
-  t.equal(semver.valid(v, false), null)
-  t.equal(semver.valid(v, true), null)
-  t.equal(semver.inc(v, 'patch'), null)
-  t.end()
-})
-
-test('parsing null does not throw', function (t) {
-  t.equal(semver.parse(null), null)
-  t.equal(semver.parse({}), null)
-  t.equal(semver.parse(new semver.SemVer('1.2.3')).version, '1.2.3')
-  t.end()
-})

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/semver/test/clean.js
----------------------------------------------------------------------
diff --git a/node_modules/semver/test/clean.js b/node_modules/semver/test/clean.js
deleted file mode 100644
index 9e268de..0000000
--- a/node_modules/semver/test/clean.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var tap = require('tap');
-var test = tap.test;
-var semver = require('../semver.js');
-var clean = semver.clean;
-
-test('\nclean tests', function(t) {
-	// [range, version]
-	// Version should be detectable despite extra characters
-	[
-		['1.2.3', '1.2.3'],
-		[' 1.2.3 ', '1.2.3'],
-		[' 1.2.3-4 ', '1.2.3-4'],
-		[' 1.2.3-pre ', '1.2.3-pre'],
-		['  =v1.2.3   ', '1.2.3'],
-		['v1.2.3', '1.2.3'],
-		[' v1.2.3 ', '1.2.3'],
-		['\t1.2.3', '1.2.3'],
-		['>1.2.3', null],
-		['~1.2.3', null],
-		['<=1.2.3', null],
-		['1.2.x', null]
-	].forEach(function(tuple) {
-			var range = tuple[0];
-			var version = tuple[1];
-			var msg = 'clean(' + range + ') = ' + version;
-			t.equal(clean(range), version, msg);
-		});
-	t.end();
-});

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/semver/test/gtr.js
----------------------------------------------------------------------
diff --git a/node_modules/semver/test/gtr.js b/node_modules/semver/test/gtr.js
deleted file mode 100644
index bbb8789..0000000
--- a/node_modules/semver/test/gtr.js
+++ /dev/null
@@ -1,173 +0,0 @@
-var tap = require('tap');
-var test = tap.test;
-var semver = require('../semver.js');
-var gtr = semver.gtr;
-
-test('\ngtr tests', function(t) {
-  // [range, version, loose]
-  // Version should be greater than range
-  [
-    ['~1.2.2', '1.3.0'],
-    ['~0.6.1-1', '0.7.1-1'],
-    ['1.0.0 - 2.0.0', '2.0.1'],
-    ['1.0.0', '1.0.1-beta1'],
-    ['1.0.0', '2.0.0'],
-    ['<=2.0.0', '2.1.1'],
-    ['<=2.0.0', '3.2.9'],
-    ['<2.0.0', '2.0.0'],
-    ['0.1.20 || 1.2.4', '1.2.5'],
-    ['2.x.x', '3.0.0'],
-    ['1.2.x', '1.3.0'],
-    ['1.2.x || 2.x', '3.0.0'],
-    ['2.*.*', '5.0.1'],
-    ['1.2.*', '1.3.3'],
-    ['1.2.* || 2.*', '4.0.0'],
-    ['2', '3.0.0'],
-    ['2.3', '2.4.2'],
-    ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0
-    ['~2.4', '2.5.5'],
-    ['~>3.2.1', '3.3.0'], // >=3.2.1 <3.3.0
-    ['~1', '2.2.3'], // >=1.0.0 <2.0.0
-    ['~>1', '2.2.4'],
-    ['~> 1', '3.2.3'],
-    ['~1.0', '1.1.2'], // >=1.0.0 <1.1.0
-    ['~ 1.0', '1.1.0'],
-    ['<1.2', '1.2.0'],
-    ['< 1.2', '1.2.1'],
-    ['1', '2.0.0beta', true],
-    ['~v0.5.4-pre', '0.6.0'],
-    ['~v0.5.4-pre', '0.6.1-pre'],
-    ['=0.7.x', '0.8.0'],
-    ['=0.7.x', '0.8.0-asdf'],
-    ['<0.7.x', '0.7.0'],
-    ['~1.2.2', '1.3.0'],
-    ['1.0.0 - 2.0.0', '2.2.3'],
-    ['1.0.0', '1.0.1'],
-    ['<=2.0.0', '3.0.0'],
-    ['<=2.0.0', '2.9999.9999'],
-    ['<=2.0.0', '2.2.9'],
-    ['<2.0.0', '2.9999.9999'],
-    ['<2.0.0', '2.2.9'],
-    ['2.x.x', '3.1.3'],
-    ['1.2.x', '1.3.3'],
-    ['1.2.x || 2.x', '3.1.3'],
-    ['2.*.*', '3.1.3'],
-    ['1.2.*', '1.3.3'],
-    ['1.2.* || 2.*', '3.1.3'],
-    ['2', '3.1.2'],
-    ['2.3', '2.4.1'],
-    ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0
-    ['~>3.2.1', '3.3.2'], // >=3.2.1 <3.3.0
-    ['~1', '2.2.3'], // >=1.0.0 <2.0.0
-    ['~>1', '2.2.3'],
-    ['~1.0', '1.1.0'], // >=1.0.0 <1.1.0
-    ['<1', '1.0.0'],
-    ['1', '2.0.0beta', true],
-    ['<1', '1.0.0beta', true],
-    ['< 1', '1.0.0beta', true],
-    ['=0.7.x', '0.8.2'],
-    ['<0.7.x', '0.7.2']
-  ].forEach(function(tuple) {
-    var range = tuple[0];
-    var version = tuple[1];
-    var loose = tuple[2] || false;
-    var msg = 'gtr(' + version + ', ' + range + ', ' + loose + ')';
-    t.ok(gtr(version, range, loose), msg);
-  });
-  t.end();
-});
-
-test('\nnegative gtr tests', function(t) {
-  // [range, version, loose]
-  // Version should NOT be greater than range
-  [
-    ['~0.6.1-1', '0.6.1-1'],
-    ['1.0.0 - 2.0.0', '1.2.3'],
-    ['1.0.0 - 2.0.0', '0.9.9'],
-    ['1.0.0', '1.0.0'],
-    ['>=*', '0.2.4'],
-    ['', '1.0.0', true],
-    ['*', '1.2.3'],
-    ['*', 'v1.2.3-foo'],
-    ['>=1.0.0', '1.0.0'],
-    ['>=1.0.0', '1.0.1'],
-    ['>=1.0.0', '1.1.0'],
-    ['>1.0.0', '1.0.1'],
-    ['>1.0.0', '1.1.0'],
-    ['<=2.0.0', '2.0.0'],
-    ['<=2.0.0', '1.9999.9999'],
-    ['<=2.0.0', '0.2.9'],
-    ['<2.0.0', '1.9999.9999'],
-    ['<2.0.0', '0.2.9'],
-    ['>= 1.0.0', '1.0.0'],
-    ['>=  1.0.0', '1.0.1'],
-    ['>=   1.0.0', '1.1.0'],
-    ['> 1.0.0', '1.0.1'],
-    ['>  1.0.0', '1.1.0'],
-    ['<=   2.0.0', '2.0.0'],
-    ['<= 2.0.0', '1.9999.9999'],
-    ['<=  2.0.0', '0.2.9'],
-    ['<    2.0.0', '1.9999.9999'],
-    ['<\t2.0.0', '0.2.9'],
-    ['>=0.1.97', 'v0.1.97'],
-    ['>=0.1.97', '0.1.97'],
-    ['0.1.20 || 1.2.4', '1.2.4'],
-    ['0.1.20 || >1.2.4', '1.2.4'],
-    ['0.1.20 || 1.2.4', '1.2.3'],
-    ['0.1.20 || 1.2.4', '0.1.20'],
-    ['>=0.2.3 || <0.0.1', '0.0.0'],
-    ['>=0.2.3 || <0.0.1', '0.2.3'],
-    ['>=0.2.3 || <0.0.1', '0.2.4'],
-    ['||', '1.3.4'],
-    ['2.x.x', '2.1.3'],
-    ['1.2.x', '1.2.3'],
-    ['1.2.x || 2.x', '2.1.3'],
-    ['1.2.x || 2.x', '1.2.3'],
-    ['x', '1.2.3'],
-    ['2.*.*', '2.1.3'],
-    ['1.2.*', '1.2.3'],
-    ['1.2.* || 2.*', '2.1.3'],
-    ['1.2.* || 2.*', '1.2.3'],
-    ['1.2.* || 2.*', '1.2.3'],
-    ['*', '1.2.3'],
-    ['2', '2.1.2'],
-    ['2.3', '2.3.1'],
-    ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0
-    ['~2.4', '2.4.5'],
-    ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0
-    ['~1', '1.2.3'], // >=1.0.0 <2.0.0
-    ['~>1', '1.2.3'],
-    ['~> 1', '1.2.3'],
-    ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0
-    ['~ 1.0', '1.0.2'],
-    ['>=1', '1.0.0'],
-    ['>= 1', '1.0.0'],
-    ['<1.2', '1.1.1'],
-    ['< 1.2', '1.1.1'],
-    ['1', '1.0.0beta', true],
-    ['~v0.5.4-pre', '0.5.5'],
-    ['~v0.5.4-pre', '0.5.4'],
-    ['=0.7.x', '0.7.2'],
-    ['>=0.7.x', '0.7.2'],
-    ['=0.7.x', '0.7.0-asdf'],
-    ['>=0.7.x', '0.7.0-asdf'],
-    ['<=0.7.x', '0.6.2'],
-    ['>0.2.3 >0.2.4 <=0.2.5', '0.2.5'],
-    ['>=0.2.3 <=0.2.4', '0.2.4'],
-    ['1.0.0 - 2.0.0', '2.0.0'],
-    ['^1', '0.0.0-0'],
-    ['^3.0.0', '2.0.0'],
-    ['^1.0.0 || ~2.0.1', '2.0.0'],
-    ['^0.1.0 || ~3.0.1 || 5.0.0', '3.2.0'],
-    ['^0.1.0 || ~3.0.1 || 5.0.0', '1.0.0beta', true],
-    ['^0.1.0 || ~3.0.1 || 5.0.0', '5.0.0-0', true],
-    ['^0.1.0 || ~3.0.1 || >4 <=5.0.0', '3.5.0']
-  ].forEach(function(tuple) {
-    var range = tuple[0];
-    var version = tuple[1];
-    var loose = tuple[2] || false;
-    var msg = '!gtr(' + version + ', ' + range + ', ' + loose + ')';
-    t.notOk(gtr(version, range, loose), msg);
-  });
-  t.end();
-});

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/semver/test/index.js
----------------------------------------------------------------------
diff --git a/node_modules/semver/test/index.js b/node_modules/semver/test/index.js
deleted file mode 100644
index 47c3f5f..0000000
--- a/node_modules/semver/test/index.js
+++ /dev/null
@@ -1,698 +0,0 @@
-'use strict';
-
-var tap = require('tap');
-var test = tap.test;
-var semver = require('../semver.js');
-var eq = semver.eq;
-var gt = semver.gt;
-var lt = semver.lt;
-var neq = semver.neq;
-var cmp = semver.cmp;
-var gte = semver.gte;
-var lte = semver.lte;
-var satisfies = semver.satisfies;
-var validRange = semver.validRange;
-var inc = semver.inc;
-var diff = semver.diff;
-var replaceStars = semver.replaceStars;
-var toComparators = semver.toComparators;
-var SemVer = semver.SemVer;
-var Range = semver.Range;
-
-test('\ncomparison tests', function(t) {
-  // [version1, version2]
-  // version1 should be greater than version2
-  [['0.0.0', '0.0.0-foo'],
-    ['0.0.1', '0.0.0'],
-    ['1.0.0', '0.9.9'],
-    ['0.10.0', '0.9.0'],
-    ['0.99.0', '0.10.0'],
-    ['2.0.0', '1.2.3'],
-    ['v0.0.0', '0.0.0-foo', true],
-    ['v0.0.1', '0.0.0', true],
-    ['v1.0.0', '0.9.9', true],
-    ['v0.10.0', '0.9.0', true],
-    ['v0.99.0', '0.10.0', true],
-    ['v2.0.0', '1.2.3', true],
-    ['0.0.0', 'v0.0.0-foo', true],
-    ['0.0.1', 'v0.0.0', true],
-    ['1.0.0', 'v0.9.9', true],
-    ['0.10.0', 'v0.9.0', true],
-    ['0.99.0', 'v0.10.0', true],
-    ['2.0.0', 'v1.2.3', true],
-    ['1.2.3', '1.2.3-asdf'],
-    ['1.2.3', '1.2.3-4'],
-    ['1.2.3', '1.2.3-4-foo'],
-    ['1.2.3-5-foo', '1.2.3-5'],
-    ['1.2.3-5', '1.2.3-4'],
-    ['1.2.3-5-foo', '1.2.3-5-Foo'],
-    ['3.0.0', '2.7.2+asdf'],
-    ['1.2.3-a.10', '1.2.3-a.5'],
-    ['1.2.3-a.b', '1.2.3-a.5'],
-    ['1.2.3-a.b', '1.2.3-a'],
-    ['1.2.3-a.b.c.10.d.5', '1.2.3-a.b.c.5.d.100'],
-    ['1.2.3-r2', '1.2.3-r100'],
-    ['1.2.3-r100', '1.2.3-R2']
-  ].forEach(function(v) {
-    var v0 = v[0];
-    var v1 = v[1];
-    var loose = v[2];
-    t.ok(gt(v0, v1, loose), "gt('" + v0 + "', '" + v1 + "')");
-    t.ok(lt(v1, v0, loose), "lt('" + v1 + "', '" + v0 + "')");
-    t.ok(!gt(v1, v0, loose), "!gt('" + v1 + "', '" + v0 + "')");
-    t.ok(!lt(v0, v1, loose), "!lt('" + v0 + "', '" + v1 + "')");
-    t.ok(eq(v0, v0, loose), "eq('" + v0 + "', '" + v0 + "')");
-    t.ok(eq(v1, v1, loose), "eq('" + v1 + "', '" + v1 + "')");
-    t.ok(neq(v0, v1, loose), "neq('" + v0 + "', '" + v1 + "')");
-    t.ok(cmp(v1, '==', v1, loose), "cmp('" + v1 + "' == '" + v1 + "')");
-    t.ok(cmp(v0, '>=', v1, loose), "cmp('" + v0 + "' >= '" + v1 + "')");
-    t.ok(cmp(v1, '<=', v0, loose), "cmp('" + v1 + "' <= '" + v0 + "')");
-    t.ok(cmp(v0, '!=', v1, loose), "cmp('" + v0 + "' != '" + v1 + "')");
-  });
-  t.end();
-});
-
-test('\nequality tests', function(t) {
-  // [version1, version2]
-  // version1 should be equivalent to version2
-  [['1.2.3', 'v1.2.3', true],
-    ['1.2.3', '=1.2.3', true],
-    ['1.2.3', 'v 1.2.3', true],
-    ['1.2.3', '= 1.2.3', true],
-    ['1.2.3', ' v1.2.3', true],
-    ['1.2.3', ' =1.2.3', true],
-    ['1.2.3', ' v 1.2.3', true],
-    ['1.2.3', ' = 1.2.3', true],
-    ['1.2.3-0', 'v1.2.3-0', true],
-    ['1.2.3-0', '=1.2.3-0', true],
-    ['1.2.3-0', 'v 1.2.3-0', true],
-    ['1.2.3-0', '= 1.2.3-0', true],
-    ['1.2.3-0', ' v1.2.3-0', true],
-    ['1.2.3-0', ' =1.2.3-0', true],
-    ['1.2.3-0', ' v 1.2.3-0', true],
-    ['1.2.3-0', ' = 1.2.3-0', true],
-    ['1.2.3-1', 'v1.2.3-1', true],
-    ['1.2.3-1', '=1.2.3-1', true],
-    ['1.2.3-1', 'v 1.2.3-1', true],
-    ['1.2.3-1', '= 1.2.3-1', true],
-    ['1.2.3-1', ' v1.2.3-1', true],
-    ['1.2.3-1', ' =1.2.3-1', true],
-    ['1.2.3-1', ' v 1.2.3-1', true],
-    ['1.2.3-1', ' = 1.2.3-1', true],
-    ['1.2.3-beta', 'v1.2.3-beta', true],
-    ['1.2.3-beta', '=1.2.3-beta', true],
-    ['1.2.3-beta', 'v 1.2.3-beta', true],
-    ['1.2.3-beta', '= 1.2.3-beta', true],
-    ['1.2.3-beta', ' v1.2.3-beta', true],
-    ['1.2.3-beta', ' =1.2.3-beta', true],
-    ['1.2.3-beta', ' v 1.2.3-beta', true],
-    ['1.2.3-beta', ' = 1.2.3-beta', true],
-    ['1.2.3-beta+build', ' = 1.2.3-beta+otherbuild', true],
-    ['1.2.3+build', ' = 1.2.3+otherbuild', true],
-    ['1.2.3-beta+build', '1.2.3-beta+otherbuild'],
-    ['1.2.3+build', '1.2.3+otherbuild'],
-    ['  v1.2.3+build', '1.2.3+otherbuild']
-  ].forEach(function(v) {
-    var v0 = v[0];
-    var v1 = v[1];
-    var loose = v[2];
-    t.ok(eq(v0, v1, loose), "eq('" + v0 + "', '" + v1 + "')");
-    t.ok(!neq(v0, v1, loose), "!neq('" + v0 + "', '" + v1 + "')");
-    t.ok(cmp(v0, '==', v1, loose), 'cmp(' + v0 + '==' + v1 + ')');
-    t.ok(!cmp(v0, '!=', v1, loose), '!cmp(' + v0 + '!=' + v1 + ')');
-    t.ok(!cmp(v0, '===', v1, loose), '!cmp(' + v0 + '===' + v1 + ')');
-    t.ok(cmp(v0, '!==', v1, loose), 'cmp(' + v0 + '!==' + v1 + ')');
-    t.ok(!gt(v0, v1, loose), "!gt('" + v0 + "', '" + v1 + "')");
-    t.ok(gte(v0, v1, loose), "gte('" + v0 + "', '" + v1 + "')");
-    t.ok(!lt(v0, v1, loose), "!lt('" + v0 + "', '" + v1 + "')");
-    t.ok(lte(v0, v1, loose), "lte('" + v0 + "', '" + v1 + "')");
-  });
-  t.end();
-});
-
-
-test('\nrange tests', function(t) {
-  // [range, version]
-  // version should be included by range
-  [['1.0.0 - 2.0.0', '1.2.3'],
-    ['^1.2.3+build', '1.2.3'],
-    ['^1.2.3+build', '1.3.0'],
-    ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '1.2.3'],
-    ['1.2.3pre+asdf - 2.4.3-pre+asdf', '1.2.3', true],
-    ['1.2.3-pre+asdf - 2.4.3pre+asdf', '1.2.3', true],
-    ['1.2.3pre+asdf - 2.4.3pre+asdf', '1.2.3', true],
-    ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '1.2.3-pre.2'],
-    ['1.2.3-pre+asdf - 2.4.3-pre+asdf', '2.4.3-alpha'],
-    ['1.2.3+asdf - 2.4.3+asdf', '1.2.3'],
-    ['1.0.0', '1.0.0'],
-    ['>=*', '0.2.4'],
-    ['', '1.0.0'],
-    ['*', '1.2.3'],
-    ['*', 'v1.2.3', true],
-    ['>=1.0.0', '1.0.0'],
-    ['>=1.0.0', '1.0.1'],
-    ['>=1.0.0', '1.1.0'],
-    ['>1.0.0', '1.0.1'],
-    ['>1.0.0', '1.1.0'],
-    ['<=2.0.0', '2.0.0'],
-    ['<=2.0.0', '1.9999.9999'],
-    ['<=2.0.0', '0.2.9'],
-    ['<2.0.0', '1.9999.9999'],
-    ['<2.0.0', '0.2.9'],
-    ['>= 1.0.0', '1.0.0'],
-    ['>=  1.0.0', '1.0.1'],
-    ['>=   1.0.0', '1.1.0'],
-    ['> 1.0.0', '1.0.1'],
-    ['>  1.0.0', '1.1.0'],
-    ['<=   2.0.0', '2.0.0'],
-    ['<= 2.0.0', '1.9999.9999'],
-    ['<=  2.0.0', '0.2.9'],
-    ['<    2.0.0', '1.9999.9999'],
-    ['<\t2.0.0', '0.2.9'],
-    ['>=0.1.97', 'v0.1.97', true],
-    ['>=0.1.97', '0.1.97'],
-    ['0.1.20 || 1.2.4', '1.2.4'],
-    ['>=0.2.3 || <0.0.1', '0.0.0'],
-    ['>=0.2.3 || <0.0.1', '0.2.3'],
-    ['>=0.2.3 || <0.0.1', '0.2.4'],
-    ['||', '1.3.4'],
-    ['2.x.x', '2.1.3'],
-    ['1.2.x', '1.2.3'],
-    ['1.2.x || 2.x', '2.1.3'],
-    ['1.2.x || 2.x', '1.2.3'],
-    ['x', '1.2.3'],
-    ['2.*.*', '2.1.3'],
-    ['1.2.*', '1.2.3'],
-    ['1.2.* || 2.*', '2.1.3'],
-    ['1.2.* || 2.*', '1.2.3'],
-    ['*', '1.2.3'],
-    ['2', '2.1.2'],
-    ['2.3', '2.3.1'],
-    ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0
-    ['~2.4', '2.4.5'],
-    ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0,
-    ['~1', '1.2.3'], // >=1.0.0 <2.0.0
-    ['~>1', '1.2.3'],
-    ['~> 1', '1.2.3'],
-    ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0,
-    ['~ 1.0', '1.0.2'],
-    ['~ 1.0.3', '1.0.12'],
-    ['>=1', '1.0.0'],
-    ['>= 1', '1.0.0'],
-    ['<1.2', '1.1.1'],
-    ['< 1.2', '1.1.1'],
-    ['~v0.5.4-pre', '0.5.5'],
-    ['~v0.5.4-pre', '0.5.4'],
-    ['=0.7.x', '0.7.2'],
-    ['<=0.7.x', '0.7.2'],
-    ['>=0.7.x', '0.7.2'],
-    ['<=0.7.x', '0.6.2'],
-    ['~1.2.1 >=1.2.3', '1.2.3'],
-    ['~1.2.1 =1.2.3', '1.2.3'],
-    ['~1.2.1 1.2.3', '1.2.3'],
-    ['~1.2.1 >=1.2.3 1.2.3', '1.2.3'],
-    ['~1.2.1 1.2.3 >=1.2.3', '1.2.3'],
-    ['~1.2.1 1.2.3', '1.2.3'],
-    ['>=1.2.1 1.2.3', '1.2.3'],
-    ['1.2.3 >=1.2.1', '1.2.3'],
-    ['>=1.2.3 >=1.2.1', '1.2.3'],
-    ['>=1.2.1 >=1.2.3', '1.2.3'],
-    ['>=1.2', '1.2.8'],
-    ['^1.2.3', '1.8.1'],
-    ['^0.1.2', '0.1.2'],
-    ['^0.1', '0.1.2'],
-    ['^1.2', '1.4.2'],
-    ['^1.2 ^1', '1.4.2'],
-    ['^1.2.3-alpha', '1.2.3-pre'],
-    ['^1.2.0-alpha', '1.2.0-pre'],
-    ['^0.0.1-alpha', '0.0.1-beta']
-  ].forEach(function(v) {
-    var range = v[0];
-    var ver = v[1];
-    var loose = v[2];
-    t.ok(satisfies(ver, range, loose), range + ' satisfied by ' + ver);
-  });
-  t.end();
-});
-
-test('\nnegative range tests', function(t) {
-  // [range, version]
-  // version should not be included by range
-  [['1.0.0 - 2.0.0', '2.2.3'],
-    ['1.2.3+asdf - 2.4.3+asdf', '1.2.3-pre.2'],
-    ['1.2.3+asdf - 2.4.3+asdf', '2.4.3-alpha'],
-    ['^1.2.3+build', '2.0.0'],
-    ['^1.2.3+build', '1.2.0'],
-    ['^1.2.3', '1.2.3-pre'],
-    ['^1.2', '1.2.0-pre'],
-    ['>1.2', '1.3.0-beta'],
-    ['<=1.2.3', '1.2.3-beta'],
-    ['^1.2.3', '1.2.3-beta'],
-    ['=0.7.x', '0.7.0-asdf'],
-    ['>=0.7.x', '0.7.0-asdf'],
-    ['1', '1.0.0beta', true],
-    ['<1', '1.0.0beta', true],
-    ['< 1', '1.0.0beta', true],
-    ['1.0.0', '1.0.1'],
-    ['>=1.0.0', '0.0.0'],
-    ['>=1.0.0', '0.0.1'],
-    ['>=1.0.0', '0.1.0'],
-    ['>1.0.0', '0.0.1'],
-    ['>1.0.0', '0.1.0'],
-    ['<=2.0.0', '3.0.0'],
-    ['<=2.0.0', '2.9999.9999'],
-    ['<=2.0.0', '2.2.9'],
-    ['<2.0.0', '2.9999.9999'],
-    ['<2.0.0', '2.2.9'],
-    ['>=0.1.97', 'v0.1.93', true],
-    ['>=0.1.97', '0.1.93'],
-    ['0.1.20 || 1.2.4', '1.2.3'],
-    ['>=0.2.3 || <0.0.1', '0.0.3'],
-    ['>=0.2.3 || <0.0.1', '0.2.2'],
-    ['2.x.x', '1.1.3'],
-    ['2.x.x', '3.1.3'],
-    ['1.2.x', '1.3.3'],
-    ['1.2.x || 2.x', '3.1.3'],
-    ['1.2.x || 2.x', '1.1.3'],
-    ['2.*.*', '1.1.3'],
-    ['2.*.*', '3.1.3'],
-    ['1.2.*', '1.3.3'],
-    ['1.2.* || 2.*', '3.1.3'],
-    ['1.2.* || 2.*', '1.1.3'],
-    ['2', '1.1.2'],
-    ['2.3', '2.4.1'],
-    ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0
-    ['~2.4', '2.3.9'],
-    ['~>3.2.1', '3.3.2'], // >=3.2.1 <3.3.0
-    ['~>3.2.1', '3.2.0'], // >=3.2.1 <3.3.0
-    ['~1', '0.2.3'], // >=1.0.0 <2.0.0
-    ['~>1', '2.2.3'],
-    ['~1.0', '1.1.0'], // >=1.0.0 <1.1.0
-    ['<1', '1.0.0'],
-    ['>=1.2', '1.1.1'],
-    ['1', '2.0.0beta', true],
-    ['~v0.5.4-beta', '0.5.4-alpha'],
-    ['=0.7.x', '0.8.2'],
-    ['>=0.7.x', '0.6.2'],
-    ['<0.7.x', '0.7.2'],
-    ['<1.2.3', '1.2.3-beta'],
-    ['=1.2.3', '1.2.3-beta'],
-    ['>1.2', '1.2.8'],
-    ['^1.2.3', '2.0.0-alpha'],
-    ['^1.2.3', '1.2.2'],
-    ['^1.2', '1.1.9'],
-    ['*', 'v1.2.3-foo', true],
-    // invalid ranges never satisfied!
-    ['blerg', '1.2.3'],
-    ['git+https://user:password0123@github.com/foo', '123.0.0', true],
-    ['^1.2.3', '2.0.0-pre']
-  ].forEach(function(v) {
-    var range = v[0];
-    var ver = v[1];
-    var loose = v[2];
-    var found = satisfies(ver, range, loose);
-    t.ok(!found, ver + ' not satisfied by ' + range);
-  });
-  t.end();
-});
-
-test('\nincrement versions test', function(t) {
-//  [version, inc, result, identifier]
-//  inc(version, inc) -> result
-  [['1.2.3', 'major', '2.0.0'],
-    ['1.2.3', 'minor', '1.3.0'],
-    ['1.2.3', 'patch', '1.2.4'],
-    ['1.2.3tag', 'major', '2.0.0', true],
-    ['1.2.3-tag', 'major', '2.0.0'],
-    ['1.2.3', 'fake', null],
-    ['1.2.0-0', 'patch', '1.2.0'],
-    ['fake', 'major', null],
-    ['1.2.3-4', 'major', '2.0.0'],
-    ['1.2.3-4', 'minor', '1.3.0'],
-    ['1.2.3-4', 'patch', '1.2.3'],
-    ['1.2.3-alpha.0.beta', 'major', '2.0.0'],
-    ['1.2.3-alpha.0.beta', 'minor', '1.3.0'],
-    ['1.2.3-alpha.0.beta', 'patch', '1.2.3'],
-    ['1.2.4', 'prerelease', '1.2.5-0'],
-    ['1.2.3-0', 'prerelease', '1.2.3-1'],
-    ['1.2.3-alpha.0', 'prerelease', '1.2.3-alpha.1'],
-    ['1.2.3-alpha.1', 'prerelease', '1.2.3-alpha.2'],
-    ['1.2.3-alpha.2', 'prerelease', '1.2.3-alpha.3'],
-    ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-alpha.1.beta'],
-    ['1.2.3-alpha.1.beta', 'prerelease', '1.2.3-alpha.2.beta'],
-    ['1.2.3-alpha.2.beta', 'prerelease', '1.2.3-alpha.3.beta'],
-    ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-alpha.10.1.beta'],
-    ['1.2.3-alpha.10.1.beta', 'prerelease', '1.2.3-alpha.10.2.beta'],
-    ['1.2.3-alpha.10.2.beta', 'prerelease', '1.2.3-alpha.10.3.beta'],
-    ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-alpha.10.beta.1'],
-    ['1.2.3-alpha.10.beta.1', 'prerelease', '1.2.3-alpha.10.beta.2'],
-    ['1.2.3-alpha.10.beta.2', 'prerelease', '1.2.3-alpha.10.beta.3'],
-    ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-alpha.10.beta'],
-    ['1.2.3-alpha.10.beta', 'prerelease', '1.2.3-alpha.11.beta'],
-    ['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta'],
-    ['1.2.0', 'prepatch', '1.2.1-0'],
-    ['1.2.0-1', 'prepatch', '1.2.1-0'],
-    ['1.2.0', 'preminor', '1.3.0-0'],
-    ['1.2.3-1', 'preminor', '1.3.0-0'],
-    ['1.2.0', 'premajor', '2.0.0-0'],
-    ['1.2.3-1', 'premajor', '2.0.0-0'],
-    ['1.2.0-1', 'minor', '1.2.0'],
-    ['1.0.0-1', 'major', '1.0.0'],
-
-    ['1.2.3', 'major', '2.0.0', false, 'dev'],
-    ['1.2.3', 'minor', '1.3.0', false, 'dev'],
-    ['1.2.3', 'patch', '1.2.4', false, 'dev'],
-    ['1.2.3tag', 'major', '2.0.0', true, 'dev'],
-    ['1.2.3-tag', 'major', '2.0.0', false, 'dev'],
-    ['1.2.3', 'fake', null, false, 'dev'],
-    ['1.2.0-0', 'patch', '1.2.0', false, 'dev'],
-    ['fake', 'major', null, false, 'dev'],
-    ['1.2.3-4', 'major', '2.0.0', false, 'dev'],
-    ['1.2.3-4', 'minor', '1.3.0', false, 'dev'],
-    ['1.2.3-4', 'patch', '1.2.3', false, 'dev'],
-    ['1.2.3-alpha.0.beta', 'major', '2.0.0', false, 'dev'],
-    ['1.2.3-alpha.0.beta', 'minor', '1.3.0', false, 'dev'],
-    ['1.2.3-alpha.0.beta', 'patch', '1.2.3', false, 'dev'],
-    ['1.2.4', 'prerelease', '1.2.5-dev.0', false, 'dev'],
-    ['1.2.3-0', 'prerelease', '1.2.3-dev.0', false, 'dev'],
-    ['1.2.3-alpha.0', 'prerelease', '1.2.3-dev.0', false, 'dev'],
-    ['1.2.3-alpha.0', 'prerelease', '1.2.3-alpha.1', false, 'alpha'],
-    ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'],
-    ['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-alpha.1.beta', false, 'alpha'],
-    ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'],
-    ['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-alpha.10.1.beta', false, 'alpha'],
-    ['1.2.3-alpha.10.1.beta', 'prerelease', '1.2.3-alpha.10.2.beta', false, 'alpha'],
-    ['1.2.3-alpha.10.2.beta', 'prerelease', '1.2.3-alpha.10.3.beta', false, 'alpha'],
-    ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-dev.0', false, 'dev'],
-    ['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-alpha.10.beta.1', false, 'alpha'],
-    ['1.2.3-alpha.10.beta.1', 'prerelease', '1.2.3-alpha.10.beta.2', false, 'alpha'],
-    ['1.2.3-alpha.10.beta.2', 'prerelease', '1.2.3-alpha.10.beta.3', false, 'alpha'],
-    ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'],
-    ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-alpha.10.beta', false, 'alpha'],
-    ['1.2.3-alpha.10.beta', 'prerelease', '1.2.3-alpha.11.beta', false, 'alpha'],
-    ['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta', false, 'alpha'],
-    ['1.2.0', 'prepatch', '1.2.1-dev.0', false, 'dev'],
-    ['1.2.0-1', 'prepatch', '1.2.1-dev.0', false, 'dev'],
-    ['1.2.0', 'preminor', '1.3.0-dev.0', false, 'dev'],
-    ['1.2.3-1', 'preminor', '1.3.0-dev.0', false, 'dev'],
-    ['1.2.0', 'premajor', '2.0.0-dev.0', false, 'dev'],
-    ['1.2.3-1', 'premajor', '2.0.0-dev.0', false, 'dev'],
-    ['1.2.0-1', 'minor', '1.2.0', false, 'dev'],
-    ['1.0.0-1', 'major', '1.0.0', false, 'dev'],
-    ['1.2.3-dev.bar', 'prerelease', '1.2.3-dev.0', false, 'dev']
-
-  ].forEach(function(v) {
-    var pre = v[0];
-    var what = v[1];
-    var wanted = v[2];
-    var loose = v[3];
-    var id = v[4];
-    var found = inc(pre, what, loose, id);
-    var cmd = 'inc(' + pre + ', ' + what + ', ' + id + ')';
-    t.equal(found, wanted, cmd + ' === ' + wanted);
-
-    var parsed = semver.parse(pre, loose);
-    if (wanted) {
-      parsed.inc(what, id);
-      t.equal(parsed.version, wanted, cmd + ' object version updated');
-      t.equal(parsed.raw, wanted, cmd + ' object raw field updated');
-    } else if (parsed) {
-      t.throws(function () {
-        parsed.inc(what, id)
-      })
-    } else {
-      t.equal(parsed, null)
-    }
-  });
-
-  t.end();
-});
-
-test('\ndiff versions test', function(t) {
-//  [version1, version2, result]
-//  diff(version1, version2) -> result
-  [['1.2.3', '0.2.3', 'major'],
-    ['1.4.5', '0.2.3', 'major'],
-    ['1.2.3', '2.0.0-pre', 'premajor'],
-    ['1.2.3', '1.3.3', 'minor'],
-    ['1.0.1', '1.1.0-pre', 'preminor'],
-    ['1.2.3', '1.2.4', 'patch'],
-    ['1.2.3', '1.2.4-pre', 'prepatch'],
-    ['0.0.1', '0.0.1-pre', 'prerelease'],
-    ['0.0.1', '0.0.1-pre-2', 'prerelease'],
-    ['1.1.0', '1.1.0-pre', 'prerelease'],
-    ['1.1.0-pre-1', '1.1.0-pre-2', 'prerelease'],
-    ['1.0.0', '1.0.0', null]
-
-  ].forEach(function(v) {
-    var version1 = v[0];
-    var version2 = v[1];
-    var wanted = v[2];
-    var found = diff(version1, version2);
-    var cmd = 'diff(' + version1 + ', ' + version2 + ')';
-    t.equal(found, wanted, cmd + ' === ' + wanted);
-  });
-
-  t.end();
-});
-
-test('\nvalid range test', function(t) {
-  // [range, result]
-  // validRange(range) -> result
-  // translate ranges into their canonical form
-  [['1.0.0 - 2.0.0', '>=1.0.0 <=2.0.0'],
-    ['1.0.0', '1.0.0'],
-    ['>=*', '*'],
-    ['', '*'],
-    ['*', '*'],
-    ['*', '*'],
-    ['>=1.0.0', '>=1.0.0'],
-    ['>1.0.0', '>1.0.0'],
-    ['<=2.0.0', '<=2.0.0'],
-    ['1', '>=1.0.0 <2.0.0'],
-    ['<=2.0.0', '<=2.0.0'],
-    ['<=2.0.0', '<=2.0.0'],
-    ['<2.0.0', '<2.0.0'],
-    ['<2.0.0', '<2.0.0'],
-    ['>= 1.0.0', '>=1.0.0'],
-    ['>=  1.0.0', '>=1.0.0'],
-    ['>=   1.0.0', '>=1.0.0'],
-    ['> 1.0.0', '>1.0.0'],
-    ['>  1.0.0', '>1.0.0'],
-    ['<=   2.0.0', '<=2.0.0'],
-    ['<= 2.0.0', '<=2.0.0'],
-    ['<=  2.0.0', '<=2.0.0'],
-    ['<    2.0.0', '<2.0.0'],
-    ['<	2.0.0', '<2.0.0'],
-    ['>=0.1.97', '>=0.1.97'],
-    ['>=0.1.97', '>=0.1.97'],
-    ['0.1.20 || 1.2.4', '0.1.20||1.2.4'],
-    ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'],
-    ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'],
-    ['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'],
-    ['||', '||'],
-    ['2.x.x', '>=2.0.0 <3.0.0'],
-    ['1.2.x', '>=1.2.0 <1.3.0'],
-    ['1.2.x || 2.x', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'],
-    ['1.2.x || 2.x', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'],
-    ['x', '*'],
-    ['2.*.*', '>=2.0.0 <3.0.0'],
-    ['1.2.*', '>=1.2.0 <1.3.0'],
-    ['1.2.* || 2.*', '>=1.2.0 <1.3.0||>=2.0.0 <3.0.0'],
-    ['*', '*'],
-    ['2', '>=2.0.0 <3.0.0'],
-    ['2.3', '>=2.3.0 <2.4.0'],
-    ['~2.4', '>=2.4.0 <2.5.0'],
-    ['~2.4', '>=2.4.0 <2.5.0'],
-    ['~>3.2.1', '>=3.2.1 <3.3.0'],
-    ['~1', '>=1.0.0 <2.0.0'],
-    ['~>1', '>=1.0.0 <2.0.0'],
-    ['~> 1', '>=1.0.0 <2.0.0'],
-    ['~1.0', '>=1.0.0 <1.1.0'],
-    ['~ 1.0', '>=1.0.0 <1.1.0'],
-    ['^0', '>=0.0.0 <1.0.0'],
-    ['^ 1', '>=1.0.0 <2.0.0'],
-    ['^0.1', '>=0.1.0 <0.2.0'],
-    ['^1.0', '>=1.0.0 <2.0.0'],
-    ['^1.2', '>=1.2.0 <2.0.0'],
-    ['^0.0.1', '>=0.0.1 <0.0.2'],
-    ['^0.0.1-beta', '>=0.0.1-beta <0.0.2'],
-    ['^0.1.2', '>=0.1.2 <0.2.0'],
-    ['^1.2.3', '>=1.2.3 <2.0.0'],
-    ['^1.2.3-beta.4', '>=1.2.3-beta.4 <2.0.0'],
-    ['<1', '<1.0.0'],
-    ['< 1', '<1.0.0'],
-    ['>=1', '>=1.0.0'],
-    ['>= 1', '>=1.0.0'],
-    ['<1.2', '<1.2.0'],
-    ['< 1.2', '<1.2.0'],
-    ['1', '>=1.0.0 <2.0.0'],
-    ['>01.02.03', '>1.2.3', true],
-    ['>01.02.03', null],
-    ['~1.2.3beta', '>=1.2.3-beta <1.3.0', true],
-    ['~1.2.3beta', null],
-    ['^ 1.2 ^ 1', '>=1.2.0 <2.0.0 >=1.0.0 <2.0.0']
-  ].forEach(function(v) {
-    var pre = v[0];
-    var wanted = v[1];
-    var loose = v[2];
-    var found = validRange(pre, loose);
-
-    t.equal(found, wanted, 'validRange(' + pre + ') === ' + wanted);
-  });
-
-  t.end();
-});
-
-test('\ncomparators test', function(t) {
-  // [range, comparators]
-  // turn range into a set of individual comparators
-  [['1.0.0 - 2.0.0', [['>=1.0.0', '<=2.0.0']]],
-    ['1.0.0', [['1.0.0']]],
-    ['>=*', [['']]],
-    ['', [['']]],
-    ['*', [['']]],
-    ['*', [['']]],
-    ['>=1.0.0', [['>=1.0.0']]],
-    ['>=1.0.0', [['>=1.0.0']]],
-    ['>=1.0.0', [['>=1.0.0']]],
-    ['>1.0.0', [['>1.0.0']]],
-    ['>1.0.0', [['>1.0.0']]],
-    ['<=2.0.0', [['<=2.0.0']]],
-    ['1', [['>=1.0.0', '<2.0.0']]],
-    ['<=2.0.0', [['<=2.0.0']]],
-    ['<=2.0.0', [['<=2.0.0']]],
-    ['<2.0.0', [['<2.0.0']]],
-    ['<2.0.0', [['<2.0.0']]],
-    ['>= 1.0.0', [['>=1.0.0']]],
-    ['>=  1.0.0', [['>=1.0.0']]],
-    ['>=   1.0.0', [['>=1.0.0']]],
-    ['> 1.0.0', [['>1.0.0']]],
-    ['>  1.0.0', [['>1.0.0']]],
-    ['<=   2.0.0', [['<=2.0.0']]],
-    ['<= 2.0.0', [['<=2.0.0']]],
-    ['<=  2.0.0', [['<=2.0.0']]],
-    ['<    2.0.0', [['<2.0.0']]],
-    ['<\t2.0.0', [['<2.0.0']]],
-    ['>=0.1.97', [['>=0.1.97']]],
-    ['>=0.1.97', [['>=0.1.97']]],
-    ['0.1.20 || 1.2.4', [['0.1.20'], ['1.2.4']]],
-    ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]],
-    ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]],
-    ['>=0.2.3 || <0.0.1', [['>=0.2.3'], ['<0.0.1']]],
-    ['||', [[''], ['']]],
-    ['2.x.x', [['>=2.0.0', '<3.0.0']]],
-    ['1.2.x', [['>=1.2.0', '<1.3.0']]],
-    ['1.2.x || 2.x', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]],
-    ['1.2.x || 2.x', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]],
-    ['x', [['']]],
-    ['2.*.*', [['>=2.0.0', '<3.0.0']]],
-    ['1.2.*', [['>=1.2.0', '<1.3.0']]],
-    ['1.2.* || 2.*', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]],
-    ['1.2.* || 2.*', [['>=1.2.0', '<1.3.0'], ['>=2.0.0', '<3.0.0']]],
-    ['*', [['']]],
-    ['2', [['>=2.0.0', '<3.0.0']]],
-    ['2.3', [['>=2.3.0', '<2.4.0']]],
-    ['~2.4', [['>=2.4.0', '<2.5.0']]],
-    ['~2.4', [['>=2.4.0', '<2.5.0']]],
-    ['~>3.2.1', [['>=3.2.1', '<3.3.0']]],
-    ['~1', [['>=1.0.0', '<2.0.0']]],
-    ['~>1', [['>=1.0.0', '<2.0.0']]],
-    ['~> 1', [['>=1.0.0', '<2.0.0']]],
-    ['~1.0', [['>=1.0.0', '<1.1.0']]],
-    ['~ 1.0', [['>=1.0.0', '<1.1.0']]],
-    ['~ 1.0.3', [['>=1.0.3', '<1.1.0']]],
-    ['~> 1.0.3', [['>=1.0.3', '<1.1.0']]],
-    ['<1', [['<1.0.0']]],
-    ['< 1', [['<1.0.0']]],
-    ['>=1', [['>=1.0.0']]],
-    ['>= 1', [['>=1.0.0']]],
-    ['<1.2', [['<1.2.0']]],
-    ['< 1.2', [['<1.2.0']]],
-    ['1', [['>=1.0.0', '<2.0.0']]],
-    ['1 2', [['>=1.0.0', '<2.0.0', '>=2.0.0', '<3.0.0']]],
-    ['1.2 - 3.4.5', [['>=1.2.0', '<=3.4.5']]],
-    ['1.2.3 - 3.4', [['>=1.2.3', '<3.5.0']]],
-    ['1.2.3 - 3', [['>=1.2.3', '<4.0.0']]],
-    ['>*', [['<0.0.0']]],
-    ['<*', [['<0.0.0']]]
-  ].forEach(function(v) {
-    var pre = v[0];
-    var wanted = v[1];
-    var found = toComparators(v[0]);
-    var jw = JSON.stringify(wanted);
-    t.equivalent(found, wanted, 'toComparators(' + pre + ') === ' + jw);
-  });
-
-  t.end();
-});
-
-test('\ninvalid version numbers', function(t) {
-  ['1.2.3.4',
-   'NOT VALID',
-   1.2,
-   null,
-   'Infinity.NaN.Infinity'
-  ].forEach(function(v) {
-    t.throws(function() {
-      new SemVer(v);
-    }, {name:'TypeError', message:'Invalid Version: ' + v});
-  });
-
-  t.end();
-});
-
-test('\nstrict vs loose version numbers', function(t) {
-  [['=1.2.3', '1.2.3'],
-    ['01.02.03', '1.2.3'],
-    ['1.2.3-beta.01', '1.2.3-beta.1'],
-    ['   =1.2.3', '1.2.3'],
-    ['1.2.3foo', '1.2.3-foo']
-  ].forEach(function(v) {
-    var loose = v[0];
-    var strict = v[1];
-    t.throws(function() {
-      new SemVer(loose);
-    });
-    var lv = new SemVer(loose, true);
-    t.equal(lv.version, strict);
-    t.ok(eq(loose, strict, true));
-    t.throws(function() {
-      eq(loose, strict);
-    });
-    t.throws(function() {
-      new SemVer(strict).compare(loose);
-    });
-  });
-  t.end();
-});
-
-test('\nstrict vs loose ranges', function(t) {
-  [['>=01.02.03', '>=1.2.3'],
-    ['~1.02.03beta', '>=1.2.3-beta <1.3.0']
-  ].forEach(function(v) {
-    var loose = v[0];
-    var comps = v[1];
-    t.throws(function() {
-      new Range(loose);
-    });
-    t.equal(new Range(loose, true).range, comps);
-  });
-  t.end();
-});
-
-test('\nmax satisfying', function(t) {
-  [[['1.2.3', '1.2.4'], '1.2', '1.2.4'],
-    [['1.2.4', '1.2.3'], '1.2', '1.2.4'],
-    [['1.2.3', '1.2.4', '1.2.5', '1.2.6'], '~1.2.3', '1.2.6'],
-    [['1.1.0', '1.2.0', '1.2.1', '1.3.0', '2.0.0b1', '2.0.0b2', '2.0.0b3', '2.0.0', '2.1.0'], '~2.0.0', '2.0.0', true]
-  ].forEach(function(v) {
-    var versions = v[0];
-    var range = v[1];
-    var expect = v[2];
-    var loose = v[3];
-    var actual = semver.maxSatisfying(versions, range, loose);
-    t.equal(actual, expect);
-  });
-  t.end();
-});

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/92389439/node_modules/semver/test/ltr.js
----------------------------------------------------------------------
diff --git a/node_modules/semver/test/ltr.js b/node_modules/semver/test/ltr.js
deleted file mode 100644
index 0f7167d..0000000
--- a/node_modules/semver/test/ltr.js
+++ /dev/null
@@ -1,181 +0,0 @@
-var tap = require('tap');
-var test = tap.test;
-var semver = require('../semver.js');
-var ltr = semver.ltr;
-
-test('\nltr tests', function(t) {
-  // [range, version, loose]
-  // Version should be less than range
-  [
-    ['~1.2.2', '1.2.1'],
-    ['~0.6.1-1', '0.6.1-0'],
-    ['1.0.0 - 2.0.0', '0.0.1'],
-    ['1.0.0-beta.2', '1.0.0-beta.1'],
-    ['1.0.0', '0.0.0'],
-    ['>=2.0.0', '1.1.1'],
-    ['>=2.0.0', '1.2.9'],
-    ['>2.0.0', '2.0.0'],
-    ['0.1.20 || 1.2.4', '0.1.5'],
-    ['2.x.x', '1.0.0'],
-    ['1.2.x', '1.1.0'],
-    ['1.2.x || 2.x', '1.0.0'],
-    ['2.*.*', '1.0.1'],
-    ['1.2.*', '1.1.3'],
-    ['1.2.* || 2.*', '1.1.9999'],
-    ['2', '1.0.0'],
-    ['2.3', '2.2.2'],
-    ['~2.4', '2.3.0'], // >=2.4.0 <2.5.0
-    ['~2.4', '2.3.5'],
-    ['~>3.2.1', '3.2.0'], // >=3.2.1 <3.3.0
-    ['~1', '0.2.3'], // >=1.0.0 <2.0.0
-    ['~>1', '0.2.4'],
-    ['~> 1', '0.2.3'],
-    ['~1.0', '0.1.2'], // >=1.0.0 <1.1.0
-    ['~ 1.0', '0.1.0'],
-    ['>1.2', '1.2.0'],
-    ['> 1.2', '1.2.1'],
-    ['1', '0.0.0beta', true],
-    ['~v0.5.4-pre', '0.5.4-alpha'],
-    ['~v0.5.4-pre', '0.5.4-alpha'],
-    ['=0.7.x', '0.6.0'],
-    ['=0.7.x', '0.6.0-asdf'],
-    ['>=0.7.x', '0.6.0'],
-    ['~1.2.2', '1.2.1'],
-    ['1.0.0 - 2.0.0', '0.2.3'],
-    ['1.0.0', '0.0.1'],
-    ['>=2.0.0', '1.0.0'],
-    ['>=2.0.0', '1.9999.9999'],
-    ['>=2.0.0', '1.2.9'],
-    ['>2.0.0', '2.0.0'],
-    ['>2.0.0', '1.2.9'],
-    ['2.x.x', '1.1.3'],
-    ['1.2.x', '1.1.3'],
-    ['1.2.x || 2.x', '1.1.3'],
-    ['2.*.*', '1.1.3'],
-    ['1.2.*', '1.1.3'],
-    ['1.2.* || 2.*', '1.1.3'],
-    ['2', '1.9999.9999'],
-    ['2.3', '2.2.1'],
-    ['~2.4', '2.3.0'], // >=2.4.0 <2.5.0
-    ['~>3.2.1', '2.3.2'], // >=3.2.1 <3.3.0
-    ['~1', '0.2.3'], // >=1.0.0 <2.0.0
-    ['~>1', '0.2.3'],
-    ['~1.0', '0.0.0'], // >=1.0.0 <1.1.0
-    ['>1', '1.0.0'],
-    ['2', '1.0.0beta', true],
-    ['>1', '1.0.0beta', true],
-    ['> 1', '1.0.0beta', true],
-    ['=0.7.x', '0.6.2'],
-    ['=0.7.x', '0.7.0-asdf'],
-    ['^1', '1.0.0-0'],
-    ['>=0.7.x', '0.7.0-asdf'],
-    ['1', '1.0.0beta', true],
-    ['>=0.7.x', '0.6.2'],
-    ['>1.2.3', '1.3.0-alpha']
-  ].forEach(function(tuple) {
-    var range = tuple[0];
-    var version = tuple[1];
-    var loose = tuple[2] || false;
-    var msg = 'ltr(' + version + ', ' + range + ', ' + loose + ')';
-    t.ok(ltr(version, range, loose), msg);
-  });
-  t.end();
-});
-
-test('\nnegative ltr tests', function(t) {
-  // [range, version, loose]
-  // Version should NOT be less than range
-  [
-    ['~ 1.0', '1.1.0'],
-    ['~0.6.1-1', '0.6.1-1'],
-    ['1.0.0 - 2.0.0', '1.2.3'],
-    ['1.0.0 - 2.0.0', '2.9.9'],
-    ['1.0.0', '1.0.0'],
-    ['>=*', '0.2.4'],
-    ['', '1.0.0', true],
-    ['*', '1.2.3'],
-    ['>=1.0.0', '1.0.0'],
-    ['>=1.0.0', '1.0.1'],
-    ['>=1.0.0', '1.1.0'],
-    ['>1.0.0', '1.0.1'],
-    ['>1.0.0', '1.1.0'],
-    ['<=2.0.0', '2.0.0'],
-    ['<=2.0.0', '1.9999.9999'],
-    ['<=2.0.0', '0.2.9'],
-    ['<2.0.0', '1.9999.9999'],
-    ['<2.0.0', '0.2.9'],
-    ['>= 1.0.0', '1.0.0'],
-    ['>=  1.0.0', '1.0.1'],
-    ['>=   1.0.0', '1.1.0'],
-    ['> 1.0.0', '1.0.1'],
-    ['>  1.0.0', '1.1.0'],
-    ['<=   2.0.0', '2.0.0'],
-    ['<= 2.0.0', '1.9999.9999'],
-    ['<=  2.0.0', '0.2.9'],
-    ['<    2.0.0', '1.9999.9999'],
-    ['<\t2.0.0', '0.2.9'],
-    ['>=0.1.97', 'v0.1.97'],
-    ['>=0.1.97', '0.1.97'],
-    ['0.1.20 || 1.2.4', '1.2.4'],
-    ['0.1.20 || >1.2.4', '1.2.4'],
-    ['0.1.20 || 1.2.4', '1.2.3'],
-    ['0.1.20 || 1.2.4', '0.1.20'],
-    ['>=0.2.3 || <0.0.1', '0.0.0'],
-    ['>=0.2.3 || <0.0.1', '0.2.3'],
-    ['>=0.2.3 || <0.0.1', '0.2.4'],
-    ['||', '1.3.4'],
-    ['2.x.x', '2.1.3'],
-    ['1.2.x', '1.2.3'],
-    ['1.2.x || 2.x', '2.1.3'],
-    ['1.2.x || 2.x', '1.2.3'],
-    ['x', '1.2.3'],
-    ['2.*.*', '2.1.3'],
-    ['1.2.*', '1.2.3'],
-    ['1.2.* || 2.*', '2.1.3'],
-    ['1.2.* || 2.*', '1.2.3'],
-    ['1.2.* || 2.*', '1.2.3'],
-    ['*', '1.2.3'],
-    ['2', '2.1.2'],
-    ['2.3', '2.3.1'],
-    ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0
-    ['~2.4', '2.4.5'],
-    ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0
-    ['~1', '1.2.3'], // >=1.0.0 <2.0.0
-    ['~>1', '1.2.3'],
-    ['~> 1', '1.2.3'],
-    ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0
-    ['~ 1.0', '1.0.2'],
-    ['>=1', '1.0.0'],
-    ['>= 1', '1.0.0'],
-    ['<1.2', '1.1.1'],
-    ['< 1.2', '1.1.1'],
-    ['~v0.5.4-pre', '0.5.5'],
-    ['~v0.5.4-pre', '0.5.4'],
-    ['=0.7.x', '0.7.2'],
-    ['>=0.7.x', '0.7.2'],
-    ['<=0.7.x', '0.6.2'],
-    ['>0.2.3 >0.2.4 <=0.2.5', '0.2.5'],
-    ['>=0.2.3 <=0.2.4', '0.2.4'],
-    ['1.0.0 - 2.0.0', '2.0.0'],
-    ['^3.0.0', '4.0.0'],
-    ['^1.0.0 || ~2.0.1', '2.0.0'],
-    ['^0.1.0 || ~3.0.1 || 5.0.0', '3.2.0'],
-    ['^0.1.0 || ~3.0.1 || 5.0.0', '1.0.0beta', true],
-    ['^0.1.0 || ~3.0.1 || 5.0.0', '5.0.0-0', true],
-    ['^0.1.0 || ~3.0.1 || >4 <=5.0.0', '3.5.0'],
-    ['^1.0.0alpha', '1.0.0beta', true],
-    ['~1.0.0alpha', '1.0.0beta', true],
-    ['^1.0.0-alpha', '1.0.0beta', true],
-    ['~1.0.0-alpha', '1.0.0beta', true],
-    ['^1.0.0-alpha', '1.0.0-beta'],
-    ['~1.0.0-alpha', '1.0.0-beta'],
-    ['=0.1.0', '1.0.0']
-  ].forEach(function(tuple) {
-    var range = tuple[0];
-    var version = tuple[1];
-    var loose = tuple[2] || false;
-    var msg = '!ltr(' + version + ', ' + range + ', ' + loose + ')';
-    t.notOk(ltr(version, range, loose), msg);
-  });
-  t.end();
-});


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